|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## 0.7.1 |
| 4 | + |
| 5 | +Added: |
| 6 | + |
| 7 | +- Versioned extension manifest (`specbridge-extension.json`, schema 1.0.0) |
| 8 | + covering five stable extension kinds: template-provider, analyzer, |
| 9 | + verifier, exporter, and runner. |
| 10 | +- Publishable extension SDK (`@specbridge/extension-sdk`): manifest, |
| 11 | + protocol, permission, and diagnostic schemas; a stdio extension server |
| 12 | + with input/output validation, cancellation, and clean shutdown; typed |
| 13 | + helpers per kind; in-process testing utilities. |
| 14 | +- Out-of-process extension protocol (JSON-RPC 2.0 over JSON Lines, protocol |
| 15 | + 1.0.0): initialize handshake with identity and capability validation, |
| 16 | + invocation, cancellation, shutdown, structured errors, bounded messages. |
| 17 | +- Explicit extension permission model (specRead, repositoryRead, |
| 18 | + repositoryWrite, network, childProcess, explicit environment-variable |
| 19 | + names) with permission-aware input boundaries per kind. |
| 20 | +- Permission-hash acceptance: enabling requires |
| 21 | + `--accept-permissions <hash>`, deterministically bound to the extension |
| 22 | + ID, version, manifest hash, and normalized permissions; any manifest |
| 23 | + change invalidates prior grants (SBE018). |
| 24 | +- Analyzer extensions (`spec analyze --extension <id>`, repeatable) with |
| 25 | + namespaced rule IDs (`<extension-id>/<RULE>`) that never overwrite |
| 26 | + built-in diagnostics. |
| 27 | +- Verifier extensions via explicit per-spec policy (`extensionVerifiers`); |
| 28 | + results land in the verification report and reach the gate only through |
| 29 | + the new built-in rollup rule SBV026 (required failure fails, optional |
| 30 | + warns). |
| 31 | +- Exporter extensions (`spec export --extension <id> --output <dir>`): |
| 32 | + candidate files only, previewed by default, written atomically after |
| 33 | + explicit `--yes`, never overwriting, recorded append-only. |
| 34 | +- Runner extensions behind an extension-runner proxy implementing the |
| 35 | + frozen v0.6.0 `AgentRunner` contract, wired through a new |
| 36 | + backward-compatible `"runner": "extension"` profile variant (disabled by |
| 37 | + default, preview support level, never auto-selected). |
| 38 | +- Template-provider extensions: data-only v0.7.0-format template packs |
| 39 | + contributed to the catalog as `extension:<extension-id>/<template-id>`, |
| 40 | + with ambiguity errors instead of shadowing. |
| 41 | +- Local extension installation from directories and archives (atomic, |
| 42 | + versioned side-by-side, disabled after install, zero code execution), |
| 43 | + plus explicit enablement/disablement and recoverable uninstall. |
| 44 | +- Extension conformance framework (`extension conformance --yes`) with |
| 45 | + common protocol checks and kind-specific checks, recorded per install. |
| 46 | +- Deterministic extension packaging |
| 47 | + (`<id>-<version>.specbridge-extension.zip`, store-method, fixed |
| 48 | + timestamps, sorted entries, regenerated checksums, printed SHA-256). |
| 49 | +- Local (built-in + `--file`) and HTTPS registry indexes with a validated |
| 50 | + atomic cache under `.specbridge/registry-cache/` and explicit |
| 51 | + `registry update <name> --network`. |
| 52 | +- Extension and registry CLI command groups (`specbridge extension …`, |
| 53 | + `specbridge registry …`) including scaffold for every kind. |
| 54 | +- Seven read-only MCP discovery tools: extension_list, extension_search, |
| 55 | + extension_show, extension_doctor, registry_list, registry_search, |
| 56 | + registry_show (37 MCP tools total). |
| 57 | +- Claude Code `/specbridge:extensions` Skill (discovery only). |
| 58 | +- Generated extension gallery (`docs/extensions.md`) with CI drift check, |
| 59 | + repository registry index (`registry/`), and five maintained reference |
| 60 | + extensions under `examples/extensions/`. |
| 61 | +- Stable error code registries: SBE001–SBE030 (extensions) and |
| 62 | + SBR001–SBR015 (registry), every error with remediation. |
| 63 | + |
| 64 | +Security: |
| 65 | + |
| 66 | +- No in-process third-party code execution: no dynamic import of installed |
| 67 | + extensions, no `eval`, no `Function`; the only executable surface is the |
| 68 | + declared entrypoint launched as `node <entrypoint>` (argv array, no |
| 69 | + shell) in a child process. |
| 70 | +- No package-manager lifecycle scripts: install/postinstall/prepare |
| 71 | + declarations in a bundled package.json are validation errors and are |
| 72 | + never executed. |
| 73 | +- No automatic enablement, no automatic updates, no automatic registry |
| 74 | + network access; remote installs and updates require an explicit |
| 75 | + `--network`. |
| 76 | +- Manifest-bound permission grants with stale-grant detection. |
| 77 | +- SHA-256 archive and per-file integrity checks; installed files are |
| 78 | + revalidated after extraction. |
| 79 | +- Symlink and path-traversal rejection everywhere packages are read, |
| 80 | + extracted, installed, or exported. |
| 81 | +- Bounded archive extraction (50 MB archive, 100 MB extracted, 1,000 |
| 82 | + files) with CRC verification and declared-size enforcement. |
| 83 | +- Protocol stdout isolation: stdout is protocol-only, logs go to stderr, |
| 84 | + corruption terminates the process without crashing SpecBridge. |
| 85 | +- Startup (10 s) and operation (default 5 min) timeouts, cooperative |
| 86 | + cancellation, SIGTERM→SIGKILL cleanup, bounded stdout/stderr capture. |
| 87 | +- Sanitized child environment with an explicit variable allowlist; granted |
| 88 | + secret values are redacted from retained logs. |
| 89 | +- Extensions cannot approve stages, complete tasks, change evidence, or |
| 90 | + disable built-in protected-path rules. |
| 91 | + |
| 92 | +Limitations: |
| 93 | + |
| 94 | +- Process isolation and permission declarations are safety boundaries and |
| 95 | + audit mechanisms, not an OS sandbox; enabled executable extensions run |
| 96 | + as local code with the user's operating-system permissions. |
| 97 | +- Checksums prove integrity, not publisher identity. |
| 98 | +- Registry listing is not endorsement. |
| 99 | +- Registry archive URLs in the repository index use a documented |
| 100 | + placeholder host until a real hosted registry exists. |
| 101 | + |
| 102 | +Deferred to v1.0: |
| 103 | + |
| 104 | +- Stable publishing workflow and release automation. |
| 105 | +- Cross-platform installation verification. |
| 106 | +- Final security audit and performance hardening. |
| 107 | +- Schema migration guarantees and public launch assets. |
| 108 | + |
3 | 109 | ## 0.7.0 |
4 | 110 |
|
5 | 111 | Added: |
|
0 commit comments