Known Limitations¶
This page records boundaries in the shipped CLI, not speculative risks or failing tests. When another page describes a broader capability, the boundary here takes precedence until its removal condition is met.
Current Boundary Summary¶
| Area | Current boundary | Immediate consequence |
|---|---|---|
| plugin isolation | plugins execute with the current user's OS authority | installing a plugin is a code-execution trust decision |
| plugin installation | local plugin source remains in place; it is not copied into a managed store | moving or deleting the manifest or entrypoint breaks the installed route |
| plugin runtimes | Python 3.11+, delegated Python, and external executables are supported; native plugins are not | a valid-looking native manifest is rejected |
| product delegation | official product routes coordinate separately installed runtimes | a known route may still fail when its binary or interpreter is unavailable |
| config text | keys and values are ASCII-only, and values are single-line | localized or multiline values cannot be stored directly |
| secret detection | redaction follows schema metadata and secret-like key names | a secret under an ordinary key name may be displayed |
Plugins Are Not Isolated¶
Python and external-executable plugins can access the files, network, and credentials available to the CLI process. Environment filtering and timeout handling reduce accidental exposure and indefinite waits, but they are not a sandbox.
Workaround: run untrusted code under an OS account or container with restricted filesystem, network, and credential access.
Removal evidence: a documented isolation model with adversarial tests for filesystem, network, environment, resource, and subprocess boundaries. A trust label or manifest checksum is not sufficient.
See Security and Safety for the enforced process policy.
Local Plugin Installation Is Source-Linked¶
Installation validates a manifest and writes a registry record containing its source path and checksum. It does not copy the manifest, entrypoint, or dependencies into a CLI-owned package store. Local entrypoint resolution is anchored to the manifest directory, and load diagnostics report a missing or changed manifest.
Workaround: keep each installed plugin in a stable, operator-owned
directory, use the canonical plugin.manifest.json filename, and uninstall
before relocating it.
Removal evidence: an install-store contract covering copy semantics, dependency ownership, updates, rollback, integrity scope, and uninstall, with cross-platform lifecycle tests.
Runtime Kinds Are Deliberately Narrow¶
The runtime accepts Python/delegated entrypoints and external executables.
Python entrypoints require a discoverable Python 3.11 or newer interpreter.
The native manifest kind is represented in the schema but rejected during
validation and execution; there is no stable native plugin ABI.
Workaround: expose compiled extensions as external-exec plugins, or use a
Python entrypoint when Python is an acceptable runtime dependency.
Removal evidence: a versioned native ABI, loader safety model, compatibility policy, release packaging contract, and host/plugin matrix tests.
Official Products Remain Separate Installations¶
The root CLI knows official product namespaces and can resolve embedded, binary, or Python entrypoints. It does not bundle every product runtime. When a delegated command is unavailable, the CLI reports the failed command and the applicable install command; route recognition alone does not guarantee local availability.
Workaround: run bijux doctor, install the named product package, and make
one canonical runtime visible on PATH.
Removal evidence: either a distribution that owns the complete runtime set or an explicit dependency resolver with install, version, provenance, and rollback guarantees.
Configuration Text Is ASCII And Single-Line¶
Configuration keys reject non-ASCII characters and punctuation outside the supported key syntax. Values reject non-ASCII text and carriage return, newline, tab, vertical-tab, and form-feed characters. This keeps file and terminal behavior deterministic, but it excludes localized and multiline values.
Workaround: store a path or identifier in CLI configuration and keep rich content in a separately governed file.
Removal evidence: encoding and escaping rules that round-trip across environment, file, flag, JSON, and table surfaces, with compatibility tests for existing state.
Secret Redaction Depends On Classification¶
Layered reports redact schema fields marked sensitive and keys whose names
contain recognized secret terms. The CLI does not inspect arbitrary values to
decide whether their content is secret. --include-secrets also disables the
display protection intentionally.
Workaround: use schema-defined sensitive fields or secret-bearing key names,
review output before publishing it, and never use --include-secrets in shared
logs.
Removal evidence: a stronger secret-classification contract that remains deterministic, avoids unsafe content heuristics, and is covered across every output mode.
Implementation Evidence¶
crates/bijux-cli/src/features/plugins/runtime.rsdefines supported plugin execution and process policy.crates/bijux-cli/src/features/plugins/registry.rsrecords source-linked installation state.crates/bijux-cli/src/features/plugins/entrypoint.rsresolves local entrypoints relative to manifest provenance.crates/bijux-cli/src/interface/cli/dispatch/delegation.rslaunches official product runtimes and reports missing installations.crates/bijux-cli/src/features/config/validation.rsenforces config text restrictions.crates/bijux-cli/src/features/config/schema.rsowns secret classification and redaction.