Repository navigation
Conversation
… capability for the status page Three boundaries from PR #126 by enqiang, landed with the exchange fallback removal left out: - Host-configuration backups written by the installers were published with the generic new-file mode; a .mcp.json or config.toml backup can carry credentials for unrelated servers, so backups are now owner-only through the new fs.AtomicWriteMode, independent of Git ignore rules. - The optional model client refuses redirects (a caller-owned HTTP client keeps its own policy outside the authoring client), refuses base URLs carrying user information, a query string, or a fragment, and reports only the HTTP status and error category: endpoint error bodies and transport causes are no longer formatted into errors that callers log or persist, including the failure notes of endpoint-native drafting. - The loopback status page requires a fresh per-process capability for every data route, including HEAD and conditional requests. The readiness URL carries it in its fragment, the browser keeps it in tab session storage and sends it in an Authorization header, the static shell holds no repository data, registrations are written owner-only, and a live tokenless page from an older binary is refused by a new --detach until aoci ui --stop ends it. Not taken: the PR also replaced the RENAME_EXCHANGE link-and-rename emulation with a fail-closed refusal, which would make every governed write on WSL DrvFs fail again (#116). The emulation stays, with its documented link-to-rename window; the CHANGELOG, spec, SECURITY.md, and troubleshooting text about it is unchanged here. Landed from PR #126 by enqiang with its governance files dropped; the maintainer regenerates the Baseline and cognition Entries in the closing commit of this batch. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Three of the four boundaries are on main as 952397c, authored by you. The exchange-fallback removal is not, and here is why. Taken as-is: owner-only host-config backups (with the new Not taken: replacing the RENAME_EXCHANGE link-and-rename emulation with a refusal. That emulation exists because every governed write on WSL DrvFs ( A pre-tag review of the landed tree turned up three things worth fixing on top of it, now on main as 81290f9: a page opened without the fragment (pasted link, stale tab, or The governance files were dropped as usual and regenerated in the closing commit. Ships in rc21. Release: https://github.com/aoci-spec/aoci-code/releases/tag/v0.1.0-rc21 |
Problem and resulting behavior
Four boundaries could disclose credentials or weaken guarded writes. This change:
The follow-up regression verifies that replacing a pre-existing public-mode status-page registration changes it to mode 0600 and preserves the new process/capability binding.
Compatibility and scope
The binary remains
aoci; the nine MCP tools, input schemas, formal cognition formats, and transaction identity derivation are unchanged. No dependency is added or upgraded.RENAME_EXCHANGE, including WSL DrvFs, refuse governed CAS replacement. Use a supporting filesystem; existing recovery artifacts must be retained.Validation
Follow-up head:
6c1b5d309888751c5a334bf97be94f386559e864.cli-and-staticjob: https://github.com/aoci-spec/aoci-code/actions/runs/38589075022make fast, full package tests, staticcheck, public-text safety, and the completego test -race -count=1 -timeout=30m ./...passed. Package concurrency was bounded withGOFLAGS=-p=2; no project timeout was changed.git diff --checkpassed.govulncheck: 0 reachable vulnerabilities; 26 module-level advisories were reported as not called.Remaining verification limitation
The local
make verifyinvocation ran the full gate collection and black-box suites, but its aggregate is not green: the license gate could not resolve sixgolang.org/x/*license-source URLs because external metadata requests timed out and returnedUnknown. The gate was not weakened or skipped. Module checksums, connector provenance and legal metadata checks passed; dependencies are unchanged by this PR. The earlier validation's six-platform license pass remains recorded, but this later failed attempt is not presented as a pass. Recheck that gate on a runner with working access to the Go metadata endpoints before requiring a fully green local closure.The original failed upstream CI attempt stopped while downloading staticcheck from the Go checksum service; the new head's complete Fast CI run passed.
Platform coverage
macOS local tests and black-box suites passed. Linux native-exchange and unsupported-exchange injection/recovery checks were exercised in the original security validation; the opt-in real-filesystem probe was not configured. Windows cross-build and CI protocol conformance passed; native Windows ACL behavior was not tested locally.