Repository navigation
hcom relaxation: retire the 2026-10-04 safety posture - #771
Conversation
247d71e to
10160d8
Compare
On 2026-10-06T03:03:10Z the user approved relaxing the 2026-10-04 hcom deny list: the safety rules give way to the seamless, LLM-native workflow. docs/decisions/2026-10-06-hcom-relaxation.md records the decision, sources, alternatives and overturn condition, and supersedes docs/decisions/2026-10-04-round2-plan-g1-messaging.md:65-72. - client-config-map: remove claude_settings (the 52 hcom/uvx-hcom deny entries), codex_rule_file and the prohibition sentences in the hcom launch hints and peer instructions; keep that peer text is data and never the user's approval. - Retire config/hcom-deny.rules: upstream hcom.rules (aannoo/hcom@2c5f343b src/hooks/codex.rs:1538-1579) is the only Codex hcom policy. - hcom-client-config.py: drop --rules-source, the empty-deny refusal, the settings merge, the rules install, the running-Codex interlock and the forbidden execpolicy check. - Plan row, install.sh, accept.sh: post_install is the upstream-derived smoke only; after_sign_in exits 78 until hcom codex writes hcom.rules, then requires the native checker to allow hcom send. - check_plan.py and tests: replace the posture assertions with the relaxed contract; the adapter test now applies while Codex runs. - "Never launch Claude lanes through hcom claude" stays: at hcom v0.7.27, still the latest release, plain Claude loads no hcom hooks (src/hooks/claude.rs:135-140). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
P2: drop "Never launch Claude lanes through hcom claude" and "Claude lanes stay plain Claude sessions" from peer_instructions (the read's option a). The plain-Claude hook gap at hcom v0.7.27 is the cost of not using hcom claude, not a reason against it; keep the neutral route facts (start/listen for a plain session; hcom claude is upstream's automatic-delivery route). Option b would change the command center's own orchestration decision. The record's Result and overturn sections now say so. P3: add the inline supersession pointer at the old record's :196 (no line moves); mark the adapter's --check as a manual operator check that no plan stage runs; record the unchanged rc 3 at --apply on a host whose own ~/.hcom/config.toml differs (expected on NativeStack2604). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hot-file commit (docs/lanes.md:96-128): remove the retired config/hcom-deny.rules entry and re-register the ten changed registered files with scripts/host_receipts.register_file. component_matrix.py --write and new_host_grand_list.py --write produced no output change; scripts/validate.py passes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
10160d8 to
b1f6c45
Compare
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
…egistry plus the owned rows) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b1f6c45bde
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
P1, decision record :131: retain the native-checker probe's actual result. evidence/artifacts/hcom-relaxation-20261006/ keeps the frozen synthetic hcom.rules (sha256 2a667dcb, rebuilt from build_codex_rules at aannoo/hcom@2c5f343b) and probe-receipt.json: argv, sanitized env, UTC times, exit codes, stdout and stderr of 5 codex-cli 0.160.1 probes and 8 runs of the after_sign_in program in scratch homes (all as expected). P2, accept.sh:330: derive the Codex home as hcom does (CODEX_HOME, else the parent of HCOM_DIR; src/hooks/codex.rs:72-75, src/paths.rs:26-53). P2, accept.sh:335: evaluate the effective policy, every *.rules file in that home as Codex loads them (openai/codex rust-v0.160.0 codex-rs/core/src/exec_policy.rs:662-700); hcom send and hcom term must be allowed, so a leftover hcom-deny.rules reports needs_user, and so do the 52 retired Claude hcom deny entries. check_plan, install-plan, README, SOURCES and a stub-codex unit test follow. P2, README.md:476: update the handbook's source record (layer consensus wave5, agent-messaging: retired gate and usage rule replaced, dated marker on the residual) and the WSL recipe's exec-rules sentence; the generated outputs are regenerated in the registry commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Hot-file commit (docs/lanes.md:96-128), on the branch's own registry: - assemble_manifest.py regenerated definitive-manifest.json from the updated layer-consensus record (--check now current); - scripts/build_new_wsl_handbook.py --write regenerated docs/new-wsl-handbook.md and .json, and the handbook receipt's output digests follow, with a regenerations entry keeping the previous ones; - host_receipts.register_file registered the three new evidence/artifacts/hcom-relaxation-20261006 files and re-registered the thirteen changed registered files; component_matrix.py --write and new_host_grand_list.py --write ran; scripts/validate.py passes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…egistry plus the owned rows) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fore the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…egistry plus the owned rows) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fore the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…egistry plus the owned rows) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fore the final hot-file commit Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (hot-file protocol: every hot-file edit in the last commit) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Claude session native-agent-stack-5f: landing at head Observed main Required checks at this head: 7 pass . Unresolved review threads: 0. |
|
Claude session native-agent-stack-5f: post-merge observation. Landed as |
### Scope Repair the native install-plan checks that lost prompts, ended before delivering results, inherited incompatible environments, or accepted incomplete output. Fresh Claude checks now use task-first native arguments, the shared foreground instruction file and session lock, bounded execution, and independent completion/artifact gates. The plan also carries the gate-1 environment, messaging, conformance, observability and canonical gateway repairs. - Base: `3d7d4a4b2640c8583d8855670111ef5d023d3e03` (final landing cue after #758; main's registry and stack retained). - Review head: `979291ded5f39ddf8cdcba4ffb29df4656b407d8`; final table commit `c6f7ca4`, registry commit `979291d`, exactly two commits after reviewed `8484ddbc`. - Lane: `lane:foundation`; draft until the command center reads this exact head. - Owned paths: install-plan scripts/configuration/checker/tests; client-config drift fixes; source decisions/receipts and maintained generated outputs. - Local-model finding 2 is a separately preserved source checkpoint for #810. It is deferred from this critical head under START-PATH/FULL-RESOLUTION; #723 does not wait for that PR. - AgentsView's operational plan uses 0.44.0, its verified launcher and known-alias migration. #807 carries the shared repository pin. Frozen 0.43.0 observations remain historical; CODE-MODE attribution remains incomplete. ## SOTA sources - GO-PUSH-723 final microfix follows native-stack@8484ddbcf138cc96c853fb2720fe016daee6b035:tests/test_adoption_docs_consistency.py:815-829 (GFM0.29-gfm §4.10 contiguous-table contract) and scripts/host_receipts.py:register_file. It removes one empty line without changing any row, then updates only that file's sha256 and byte count in the last commit. - J723/J723b/J723c delta: Node's [WHATWG URL hostname](https://nodejs.org/api/url.html#urlhostname) and [port](https://nodejs.org/api/url.html#urlport); systemd@v259 [microsecond show formatting](https://github.com/systemd/systemd/blob/v259/src/systemctl/systemctl-show.c#L1120); uutils/coreutils@0.10.0 [date](https://github.com/uutils/coreutils/blob/0.10.0/src/uu/date/src/date.rs#L596) and [stat](https://github.com/uutils/coreutils/blob/0.10.0/src/uu/stat/src/stat.rs#L1117); CPython3.13 [recursive paths](https://docs.python.org/3.13/library/pathlib.html#pathlib.Path.rglob). The existing handbook receipt guard remains exact; prior output pairs and observed validation history are retained. Both research clone tag SHAs are enforced. SOURCES.md gives the remaining repository-native contract locators. - [Claude native headless CLI](https://code.claude.com/docs/en/headless), [system-prompt flags](https://code.claude.com/docs/en/cli-reference#system-prompt-flags) and [environment controls](https://code.claude.com/docs/en/env-vars), checked against installed 2.1.289. The retained byte proofs and all per-row pins are in `evidence/artifacts/new-wsl-install-plan-20261002/SOURCES.md`. - [openai/codex@a956835d:review.rs:105](https://github.com/openai/codex/blob/a956835d020762cb2b570053af06f643a11c0ecc/codex-rs/core/src/tasks/review.rs#L105): bind the actual native reviewer child, model and effort; native exec_command/write_stdin completion is distinct from an MCP transport timeout. - [aannoo/hcom@2c5f343b:tests/support/mod.rs:949](https://github.com/aannoo/hcom/blob/2c5f343b2f9ec4bf2acf49c0431860e7c2ae578b/tests/support/mod.rs#L949): first-marker identity capture. Landed #771 supplies the relaxed operational adapter and native rules check; the duplicate A50 historical-only policy was dropped. - [util-linux@v2.41.3:flock.1.adoc:80](https://github.com/util-linux/util-linux/blob/v2.41.3/sys-utils/flock.1.adoc#L80): lock acquisition bounds; installed timeout is uutils coreutils0.10.0, with native timeout source cited in SOURCES. Queue is at most3600s and Claude execution at most3300s, separately. - [DeerFlow@v2.1.0 config](https://github.com/bytedance/deer-flow/blob/345f08be00c8a9495079b732a39b46aa9af1584e/config.example.yaml): native headless/keyless provider and model metadata. Canonical Sol-max suffix precedence follows [the #744 decision](https://github.com/seathatflowsinourveins/native-agent-stack/blob/0fb32ee583589f1a0809b20d18dff40ce2f65a1c/docs/decisions/2026-10-05-omniroute-gateway-composition.md#L37); `supports_reasoning_effort=false` is a derived configuration choice, not a statement in #744 or wire-effort proof. - [MCP conformance@c321dd3 runner](https://github.com/modelcontextprotocol/conformance/tree/c321dd3/examples/servers/typescript): unchanged upstream servers/CLI inside the cited private user/PID/network namespace, with owned group cleanup. External URL acceptance stays needs_owner78 until an in-namespace adapter is supplied. - [Playwright system dependencies](https://playwright.dev/docs/browsers#install-system-dependencies), Inspect AI0.3.273, OpenHands SDK1.50.1 and SRT0.0.78 pinned sources are recorded per row in SOURCES. The worker retains production's Unix-socket block and the upstream subprocess backend; no test-only relaxation. - [AgentsView v0.44.0](https://github.com/kenn-io/agentsview/releases/tag/v0.44.0), commit413a87f7bfbd67b2815b1119ac51abc1efbeeaba, official Linux archive SHA037ea7a46d52e06b20363b4aa7cd7f28e32f31d8215803d6e9a0c96bac5818e3. Native B2 results and failed earlier attempts remain separate from frozen0.43 evidence. - Native repository builders: `assemble_manifest.py:876-896`, `scripts/build_new_wsl_handbook.py`, `host_receipts.register_file`, `component_matrix.py` and `new_host_grand_list.py`; `docs/lanes.md:96-128` governs the last generated/registry commit. Decision corrections are dated addenda; original observed values are preserved. ### Required verdict changes | Item | Resulting source | | --- | --- | | P1 hcom posture | Rebased on #771; dropped15f24fe1 and its generated companion. Relaxed adapter remains operational. Independent naming fix retained. | | P1 canonical route | Exactly cx/codex gpt-6.1-sol-max accepted with all provider, suffix, status, endpoint and join negatives retained. | | P2 timeouts/background | Foreground1560000ms; native background-disable env; flock wait outside execution timeout;48 turns/fixture/schema retained. | | P2 skill config | Native installed default config; concrete triggers and foreground wait; custody proposal outside the operational skill. | | P2 conformance URL | Unsupplied target stays needs_user78; external URL without namespace startup adapter is needs_owner78. No host-network fallback. | | P2 gateway custody | Unknown operative assets still fail closed; regular example files retained. Explicit owner backup/staging/reload/restart/read-back/rollback runbook in the dated addendum. | | P2 citations/evidence | FAST suffix is high; #744 only supplies suffix precedence; removal condition is issue8939/PR8940 and its regression test; cleanup is helper-derived local integration. | | Rebase/hot files | Main's generated inputs/registry taken; maintained outputs regenerated; all shared generated/registry edits last. | ### Evidence-class table | Claim | Class | Evidence | | --- | --- | --- | | Source agreement and artifact integrity | local_integration | Plan/client-map/handbook checks and maintained generators; final validator result below | | Completion, custody, endpoint and alias controls | synthetic / local_integration | Four touched fixture modules,379 tests,3 existing skips | | Earlier native attempts | Their original classes | Existing returned streams/receipts preserved; later success does not replace a failure | | Model routes and metadata | source_review / local_integration replay | Exact aliases and joined records; where spelling changed and delivered wire effort remain unproved | The new sanitized source receipt is `evidence/artifacts/new-wsl-install-plan-20261002/fixwave-20261006-verdict-rebase-receipt.json`. It does not declare a new native-ready slot or upstream-suite pass. ### Local commands run Final GO-PUSH-723 change: exactly one empty line removed at harness-defaults.md:122, plus that file's registry sha256/bytes. Two commits, same base3d7d4a4b; no rebase or other source change. `nice -n 19 ionice -c3 python3 -m unittest tests.test_adoption_docs_consistency` passed39tests/1existing skip in17.985s; final validator69components/10408hashes/4profiles/224receipts0; diff0. A structural comparison proves the registry differs in exactly one file entry. The command center's ACK stands under the explicit range-diff/green-CI condition; neither CI nor landing is claimed by this lane. Final J723d delta: conformance installs native EXIT/INT/TERM cleanup before the path-length assertion and removes only its frozen owned TMPDIR after process teardown. The early-failure control preserves unrelated cache bytes and the evidence directory; existing success/failure/cancellation controls now also require the allocation gone. Nine focused lifecycle cases passed. After the final landing-cue rebase onto #758, all seven full touched modules passed **589 tests / 3 existing skips in 163.180s**. Final plan0 remains84rows/192commands/113acceptance; F9readonly0 with the same two warnings; native builder/check0; diff0; validator0:69components/10408hashes/4profiles/224receipts. Current handbook pair is c8ecbb5d/d7cc2ccb, with all predecessor output bindings/observations retained. Native [Bash trap documentation](https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#index-trap) and the existing identity-checked cleanup seam govern the bounded fix. No other functional delta was added. Completeness critic found no material blocker, source review only. CI/CodeQL and destination apply remain owner gates; the PR stays a draft under the granted landing hold. Earlier published J723/J723b/J723c delta: all seven full touched modules passed **581 tests / 3 existing skips in 166.987s**, under the CI-pinned Python3.13 environment, explicit private-venv PATH and umask022, at nice19/ionice3. The run includes all four J723c failing modules and the earlier client-config/gateway/conformance modules. Earlier delta attempts remain distinct:99tests/2fixture failures, then focused12pass;468tests/1unsettled synthetic login-path failure, whose unchanged isolated retry passed. No assertion or skip was relaxed. Focused CI4 controls17pass. Then-current validator0:69components/10401hashes/4profiles/224receipts. These remain local integration, not destination acceptance. The earlier #809-only rebase had proved unchanged foundation bytes. The final #758 landing-cue rebase adds its time-zone/client-config sources, so the full seven-module suite was rerun, with main's source/registry/stack and regenerated publication bindings retained. Review-thread read found no chatgpt-codex-connector threads; the CodeQL thread remains for its scan result. ```bash nice -n 19 ionice -c3 python3 -B -m unittest -v tests.test_wsl_new_distro_recipe tests.test_agentsview_qualification tests.test_new_wsl_definitive_defaults tests.test_new_wsl_handbook tests.test_new_wsl_client_config tests.test_new_wsl_gateway_composition tests.test_new_wsl_mcp_conformance_lifecycle nice -n 19 ionice -c3 python3 scripts/validate.py ``` The owner-pending Claude route now produces **needs_owner/78 before loading Promptfoo's configuration**, rather than a failed provider evaluation; malformed supplied routes still fail. Parsed URL host and port must match the plan-owned127.0.0.1:21128 exactly. Both gateway health stages require the keyed microsecond UTC active-start timestamp to be strictly later than both rendered unit files, preserving existing identity and completion gates. CI enumerates nested config files, keeps an exact Inspector script set, uses native Git/Python/env without a forced RTK runtime dependency, and classifies old AgentsView aliases as predecessor fixtures. Source completeness critic found no material blocker; its review ran no tests or host calls. J723b's native-messaging smoke observation from the dropped A50 draft is retained privately, byte-identical, mode0600, SHA256 **a14356efc2ba3e6c7d44b2d9818538a824b9429fc5d9eaff929ee56e38efee83**. That dropped draft observation is superseded by #771; no public A50 amendment, retired posture or enforcement test is restored. Earlier source-head validation follows: ```text python3 -B evidence/artifacts/new-wsl-install-plan-20261002/check_plan.py rc0:84 rows,192 commands,113 acceptance entries; earlier kind-label mismatch retained. python3 tools/adoption/new_wsl_client_config.py --check rc0; two pre-existing Inspector ownership warnings, addressed separately by C11; no apply. python3 scripts/build_new_wsl_handbook.py --check rc0. python3 -B -m unittest -v tests.test_new_wsl_client_config tests.test_new_wsl_definitive_defaults tests.test_new_wsl_gateway_composition tests.test_new_wsl_mcp_conformance_lifecycle First attempt rc1:379tests/21errors/3skips; undeclared fixture PyYAML import. Maintained standard-library fixture repair: targeted21cases rc0. Full retry rc0:379tests,3skips,120.182s; no production/helper/dependency or assertion weakening. git diff --check rc0. nice -n19 python3 scripts/validate.py rc0:69 components,10385 hashed files,4 profiles,215 receipts. The earlier historical-inventory non-live limitation failure is retained; payload and manifest were clarified together. ``` ### Decision record Current instructions and the complete gateway custody runbook are in the dated addendum to `docs/decisions/2026-10-06-native-plan-gate1-repairs.md`. Its original decision text remains unchanged. The earlier acceptance decision also receives an appended FAST-effort correction. Original historical observations are never rewritten. ### After landing: co-op apply and read-back The co-op is the sole plan writer. Apply the approved main commit at its booked quiet point; retain the previous gateway prefix and per-asset backup packet. First follow the addendum's gateway custody/reload pre-gates. No lane applies a host change or widens AF_UNIX. ```bash plan=evidence/artifacts/new-wsl-install-plan-20261002 bash "$plan/install.sh" --only agent-messaging bash "$plan/accept.sh" --only agent-messaging --stage post_install </dev/null bash "$plan/install.sh" --only inspect-ai bash "$plan/install.sh" --only trajectory-analysis bash "$plan/accept.sh" --only trajectory-analysis --stage post_install </dev/null # Gateway: execute the owner-custody addendum first; preserve rollback prefix/packet. bash "$plan/install.sh" --only gpt-gateway bash "$plan/accept.sh" --only gpt-gateway --stage post_install </dev/null bash "$plan/accept.sh" --only gpt-gateway --stage service_health </dev/null bash "$plan/accept.sh" --only gpt-gateway --stage after_sign_in </dev/null bash "$plan/install.sh" --only research-harnesses bash "$plan/install.sh" --only skill-vetting bash "$plan/install.sh" --only mcp-protocol-conformance bash "$plan/install.sh" --only session-analytics ``` The hcom apply uses the relaxed mapped adapter and native smoke; it has no custom quiet/deny posture. Gateway owner custody, daemon-reload, unit restart and packet-based rollback are fully specified in the addendum. Existing environment credentials are left by pointer and are never copied into the packet. Archive-version rollback for AgentsView additionally requires its consistent pre-migration archive; preserve the existing backup, whose restoration has not been qualified. For each changed row, retain the install/read-back rc, then one smoke in each client that uses it and subsequent organic counters. Use the canonical shared flock for each exact fresh Claude invocation. Existing repaired-stage commands and returned-artifact gates remain in accept.sh; targetless conformance78 is not a protocol pass. No new measurement campaign or A/B gates this apply. ### Checklist - [x] Sources pinned; failed attempts and unknown usage preserved. - [x] No credential values or private client configuration published. - [x] Peer-owned settlement assertions preserved; no #775 hunks. - [x] Scoped379-test fixture retry passed; no new skip. - [x] Final registered-tree validate passed. - [ ] Exact-head GPT/CC read; the PR remains a draft. - [ ] Co-op host apply/read-backs and native smoke/counters after landing.
### Scope - Qualify the current plan's Chrome DevTools MCP browser under the legacy `web-research/playwright-cli` slot: six unchanged upstream files pass 129 tests, and fresh Claude/Codex sessions return the required fixture URL, title and console marker, then clean up their created pages. Record why the OmniRoute workhorse stays Lite and define a separate opt-in hosted-search profile with its every-upgrade catalog checklist. - Add Q55's dated `auth_storage_failure = RING` decision for installed Claude Code2.1.291, preserving the exact host-only currency-gate failure. Keep the current source matcher and deliberate18-type coverage consistent; historical matcher text stays unchanged and the dated amendment carries the current recommendation. No live client configuration changes. - Address the GPT ACK_AFTER read at `92963dabc`: label the expanded matcher as the current source recommendation with live application pending CC action; date the earlier 17-type observation separately from the recorded 2.1.291 scan of 18 types (nine RING, nine QUIET); record the required installed-client, changelog, tagged-source and official-docs verification order; paraphrase the approved terminal policy. - Base commit: `3d7d4a4b2640c8583d8855670111ef5d023d3e03`. - Lane: `lane:foundation`, exactly one lane label. This PR remains a draft for command-center review. - Owned paths: the three new dated decisions and currency-upgrade checklist; browser qualification and notification scan artifacts; maintained DECISIONS reader, notification source overlay, its linked recipe/terminal decision and deliberate coverage count; evidence registry committed last. Browser qualification is scoped to the current Chrome MCP owner and its declared local fixture. Microsoft Playwright CLI remains optional catalog history; the unstarted Harbor comparison, broader websites and separate diagnostic-slot qualification are unchanged. The hosted-search profile packet is ready for the CC; actual application/search acceptance is pending. The approved opt-in map metadata row stays deferred until main includes #771; executable producer/template wiring belongs to #716/#770. No live client configuration, host pin, install plan or platform-status file changes here. ## SOTA sources - [0d5e6506: installed-client notification gate:166-176](https://github.com/seathatflowsinourveins/native-agent-stack/blob/0d5e6506434fab598dee861c749a22e628beb75a/tests/test_windows_terminal_defaults.py#L166-L176) and [single DECISIONS table:20-38](https://github.com/seathatflowsinourveins/native-agent-stack/blob/0d5e6506434fab598dee861c749a22e628beb75a/evidence/artifacts/notification-types-20260929/notification_types_scan.py#L20-L38): installed-client coverage and unchanged fail-closed reader; exact2.1.291 observation/failure is quoted in the new dated decision. Q55's operator ruling classifies a credential/sign-in event needing the user as an escalation. - [0d5e6506: install-plan.json:1425](https://github.com/seathatflowsinourveins/native-agent-stack/blob/0d5e6506434fab598dee861c749a22e628beb75a/evidence/artifacts/new-wsl-install-plan-20261002/install-plan.json#L1425): selected Chrome MCP1.10.1, legacy slot identity, exact browser and dual-client acceptance. - [ChromeDevTools/chrome-devtools-mcp@e52c6b59: native page creation](https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/e52c6b59b476c5e04d8dd9fd4bd017ba3b3d65df/docs/tool-reference.md#L240-L248), [navigation](https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/e52c6b59b476c5e04d8dd9fd4bd017ba3b3d65df/docs/tool-reference.md#L223-L235), [snapshot](https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/e52c6b59b476c5e04d8dd9fd4bd017ba3b3d65df/docs/tool-reference.md#L462-L472) and [test runner](https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/e52c6b59b476c5e04d8dd9fd4bd017ba3b3d65df/scripts/test.js#L19): supported interfaces and unchanged six-file test:no-build selection. - [microsoft/playwright-cli@74354ecc, v0.1.21: README:7-11](https://github.com/microsoft/playwright-cli/blob/74354ecc7a43da16d91a9bc54fa8db8283a3fcf5/README.md#L7-L11): browser automation; no text-only incapability or CLI-removal claim. - [openai/codex@a956835d, rust-v0.160.0: spec_plan:626-648](https://github.com/openai/codex/blob/a956835d/codex-rs/core/src/tools/spec_plan.rs#L626-L648), [standalone selection:1038-1046](https://github.com/openai/codex/blob/a956835d/codex-rs/core/src/tools/spec_plan.rs#L1038-L1046), [ordinary-turn reasoning context:863-882](https://github.com/openai/codex/blob/a956835d/codex-rs/core/src/client.rs#L863-L882), [developer input:902-938](https://github.com/openai/codex/blob/a956835d/codex-rs/core/src/client.rs#L902-L938) and [parallel calls:989-995](https://github.com/openai/codex/blob/a956835d/codex-rs/core/src/client.rs#L989-L995): confine the non-Lite change to opt-in discovery. - [Codex catalog loader:2143-2171](https://github.com/openai/codex/blob/a956835d/codex-rs/core/src/config/mod.rs#L2143-L2171), [model overrides:19-60](https://github.com/openai/codex/blob/a956835d/codex-rs/models-manager/src/model_info.rs#L19-L60), and [static manager:757-827](https://github.com/openai/codex/blob/a956835d/codex-rs/models-manager/src/manager.rs#L757-L827): startup catalog replacement and no-op static-manager refresh methods in this cited implementation. - [openai/codex@rust-v0.160.1: bundled-only export:2068-2095](https://github.com/openai/codex/blob/rust-v0.160.1/codex-rs/cli/src/main.rs#L2068-L2095), [upstream serialization:840-943](https://github.com/openai/codex/blob/rust-v0.160.1/codex-rs/protocol/src/openai_models.rs#L840-L943), and [masked environment formatter:3-24](https://github.com/openai/codex/blob/rust-v0.160.1/codex-rs/utils/cli/src/format_env_display.rs#L3-L24): native metadata generation/readback. - [OmniRoute v3.8.51](https://github.com/diegosouzapw/OmniRoute/releases/tag/v3.8.51), selected pin c1e30b76: [hosted tools:6-21](https://github.com/diegosouzapw/OmniRoute/blob/c1e30b7676975feb298b49eff6ff58923c04b89e/open-sse/executors/codex/tools.ts#L6-L21), [passthrough:194-206](https://github.com/diegosouzapw/OmniRoute/blob/c1e30b7676975feb298b49eff6ff58923c04b89e/open-sse/executors/codex/tools.ts#L194-L206), [404 fallback:16-42](https://github.com/diegosouzapw/OmniRoute/blob/c1e30b7676975feb298b49eff6ff58923c04b89e/src/app/api/v1/%5B...omnirouteCatchAll%5D/route.ts#L16-L42). [#13788](diegosouzapw/OmniRoute#13788) remains a reviewed-source lead, not a shipped route. ### Evidence-class table | Claim | Evidence class | Command / receipt | | --- | --- | --- | | Six unchanged selected upstream test files work with installed Chrome | native_proven, upstream subset | test:no-build exit0; 129 tests/27 suites/129 pass/0 failures/skips; qualification.json | | Fresh Claude and Codex return all three required MCP results and close their created page | native_proven, local integration with synthetic fixture | Both native CLI exit0, actual returned events retained; qualification.json | | Missing fixture fails the title/console predicate | local_integration, synthetic control | Actual about:blank snapshot/empty console rejected; original native MCP observation retained privately | | Browser/package source and both pinned MCP argument readbacks match | local_integration | Read-only package/Google apt origin and native registration checks, exit0; no credential values returned | | Public receipt matches original native streams and exact usage once per client | local_integration, independent observation | Read-only critic checks original results, cleanup, native totals and raw hashes; no material finding | | Opt-in catalog/profile preserves all other model/config fields | local_integration | 11 models, only 10 true Lite flags changed; exact TOML delta; exit0 | | Lite transport and static catalog behavior | source_review | Pinned Codex and OmniRoute source above | | Native hosted search succeeds through opt-in profile | pending | CC owns application and the single known-answer run; no such success claimed here | | Publication integrity | local_integration | python3 scripts/validate.py exit0 after registration | ### Local commands run ```text Native registration/browser/source checks exit0: both npx Chrome MCP1.10.1 registrations match required flags; Google Chrome154.0.8037.97-1 meets minimum and signed Google origin; installed source HEAD e52c6b59, tracked source clean, Node24.21.0. PUPPETEER_EXECUTABLE_PATH=/usr/bin/google-chrome-stable npm run test:no-build -- tests/index.test.ts tests/tools/pages.test.ts tests/tools/snapshot.test.ts tests/tools/console.test.ts tests/tools/network.test.ts tests/tools/performance.test.ts exit0: original native dot output retained. Same unchanged subset with NODE_TEST_REPORTER=spec exit0: 129 tests,27 suites,129 pass,0 fail/cancel/skip/todo. Fresh claude -p (Opus/max,max-turns8,no-session-persistence,stream-json) exit0 under required shared flock; required actual MCP results and cleanup pass. Fresh codex --no-daemon exec (Sol/max,ephemeral,read-only,non-Git,--skip-git-repo-check,--json) exit0; required completed MCP events and cleanup pass. Both raw-stream/receipt and negative/positive-control checks exit0; underlying native missing-fixture oracle is false as required. Native bundled export and exact profile/catalog comparisons exit0; earlier raw-source/native-export mismatch exit1 retained and corrected through upstream serializer. scripts/component_matrix.py --write exit0, no generated report diff. scripts/new_host_grand_list.py --write exit0, no generated report diff. python3 scripts/validate.py final exit0 after registration: 69 components,4 profiles,214 receipts,10342 hashed files; initial missing changed-test hash failure retained and corrected before push. python3 -m unittest discover -s tests -p test_validate.py exit0: 68 tests,OK. python3 -m unittest discover -s tests -p test_evidence_manifest.py exit0: 5 tests,OK; printed rejection messages belong to its negative fixtures. python3 -m unittest discover -s tests -p test_windows_terminal_defaults.py first exit1: operative matcher quotes were stale; retained and corrected. final exit0: 42 tests,OK, including the unchanged installed-client currency gate. python3 -B evidence/artifacts/notification-types-20260929/notification_types_scan.py INSTALLED_CLAUDE CHECKOUT exit0: auth_storage_failure ring,unknown=[],no source-overlay disagreement. ACK_AFTER documentation revision, 2026-10-06: nice -n 19 python3 -m unittest discover -s tests -p test_windows_terminal_defaults.py exit0: 42 tests,OK. nice -n 19 python3 scripts/validate.py exit0 before commits and again after the final registry-only commit: 69 components,4 profiles,214 receipts,10342 hashed files. git diff --cached --check exit0 before each commit. Independent bounded documentation critic exit0: no remaining P2/P3 wording gaps in the four requested fixes. ``` The complete exact invocation, original JSONL/stderr/test outputs and hashes remain privately retained; the public artifact sanitizes paths/conversations while preserving results and native usage. No new code or behavior suite is authored. No rebuild, install, sudo, credential-file read, client-config mutation or OS restart ran. All native heavy steps were serial and outside the paper window. Previous full publication checks are retained; the final registry check is rerun for these changed artifacts. ### Decision record - `docs/decisions/2026-10-06-auth-storage-failure-notification.md`: dated Q55 RING row, exact observed2.1.291 assertion, source-only matcher/count alignment and live-application boundary. - `docs/decisions/2026-10-06-ns2604-selected-browser-native-qualification.md`: scoped browser READY with actual tests/native results, original blocker retained, workload and version-drift reopening conditions. - `docs/decisions/2026-10-06-codex-omniroute-opt-in-search.md`: separate Lite workhorse/hosted-search profile; reopen only for a shipped standalone route and matched quality comparison. ### Host evidence No file under evidence/hosts or platform-status edit. The browser record is a compact native-bar artifact; broader component/platform state follows its own policy. Hosted-search application remains pending CC evidence. - [ ] Host-receipt validation: not applicable, no evidence/hosts change. - [x] Independent original-stream consistency check recorded; command-center review still required. - [x] No platform-status change inferred from one receipt. ### Checklist - [x] No Actions/workflow permission changes. - [x] No secrets read, printed or committed; no new required secret. - [x] No new paid hosting/subscription/billing surface. - [x] Peer-owned files, worktrees, queued branches and live templates preserved. - [x] Registry committed last; draft retained for review. ### A22 append-only decision correction Based on pinned main3d7d4a4b, restore terminal-experience.md's entire original prefix byte-identical, then append Amendment(2026-10-06) for Q55's current matcher recommendation and PENDING CC application. Historical measured/decided text stays unchanged. The document consistency test selects the latest dated matcher amendment; strict matcher checks remain, with positive preservation and negative wrong-current/undated-note fixtures.44 touched tests passed at the A22 head; validate passed before/after its final registry-only commit (69 components,4 profiles,223 receipts,10394 hashed files). Scan-producer bytes remain exactlyb12ea18b67f64a13688d1468249c395058a528b8ba44239b472edba897bdf385; no new producer change or receipt observation was prepared. The command center approved its existing3 added lines as generator input (PRODUCER-RULED, 2026-10-06T23:45:52Z); old observations and receipt bytes remain unchanged. Source: repository append/overlay convention at docs/landscape-domain-notes.md:31-42, the original decision at main3d7d4a4b, Q55's installed-client/scanner/gate sources in the new decision, and the direct A22 ruling. Three expected registry-only historical rebase conflicts took main's registry and native re-registration; a later shared origin/main advancement caused a retained validation failure, corrected by pinning the base SHA. No peer-file conflict was resolved. Final source87880975 touches only the decision/test, registry-onlya9423840 is last. No live configuration application/bell/sign-in or model trial is claimed. ### J790b: explicit paired receipts and selector negative control The immutable pair is [the old Claude Code 2.1.285 scan](https://github.com/seathatflowsinourveins/native-agent-stack/blob/118a0c852843acdde3f42ebfdd40db0aa783223e/evidence/artifacts/notification-types-20260929/recorded/notification_types_scan_2.1.285.json) (SHA-256 `eb2e772ebd9d0c83e7ec4aab1584c18cb66ccc2237b921c1dfe6165126f2cef8`) and [the new dated 2.1.291 scan](https://github.com/seathatflowsinourveins/native-agent-stack/blob/118a0c852843acdde3f42ebfdd40db0aa783223e/evidence/artifacts/notification-types-20261006/notification_types_scan_2.1.291.json) (`e43b95aab9f5f841c52edc7db700b159495fb211910247e83c5cd7c7f4bf983d`). A new dated Addendum (2026-10-07) gives those direct links alongside the October6 amendment's new-receipt mention. Under the final no-rewrite scope, the entire prior decision and amendment are preserved byte-identical; only four addendum lines are appended. No producer/receipt byte changes. The selector now chooses the latest dated section containing its operative marker **or a recognized matcher quote**. A new selector-level negative control appends the review's unmarked wrong matcher to the actual decision and verifies that the combined check rejects it. The strict validator stays unchanged. `python3 -B -m unittest tests.test_windows_terminal_defaults` returned0,45tests in5.194s. Before/after final registry validation returned0 with69components/4profiles/223receipts/10394hashes; sourcefa9ed449 then registry-only118a0c85. No rebase; explicit own-branch lease againsta9423840. This head is ready for the co-op micro-check and CC ACK; the PR remains a draft.
Scope
What this PR changes: it removes the 2026-10-04 hcom safety posture from main. The user decided at 2026-10-06T03:03:10Z (11:03 PM EDT on October 5) to relax the hcom deny list; the safety rules give way to the seamless, LLM-native workflow. The PR removes:
config/hcom-deny.rules;forbiddendecisions.Peer text stays data and never counts as the user's approval. Upstream
hcom.rulesbecomes the only Codex hcom policy.Base commit:
ecfa112764c664d35377dd66b8cfcb67e5a94d60Lane:
lane:foundationOwned paths touched:
adoption/new-wsl/client-config-map.jsonevidence/artifacts/new-wsl-install-plan-20261002/:config/hcom-client-config.py,config/hcom-deny.rules(deleted),install-plan.json,install.sh,accept.sh,check_plan.py,README.mdandSOURCES.mdtests/test_new_wsl_client_config.pyandtests/test_codex_hook_trust.pydocs/decisions/2026-10-06-hcom-relaxation.md(new)docs/decisions/2026-10-04-round2-plan-g1-messaging.md(an inline pointer only; no line moves)manifests/evidence.json, in the last commit onlyclaude_settings.permissions.denyclaude_settingsobject is removed. An empty object would still go through the settings merge.hcom_config.launch.hintscodex_rule_fileandconfig/hcom-deny.ruleshcom.rulesis the only Codex hcom policy.peer_instructionshcom claudeprohibition (see below). The data and approval sentences stay.check_plan.py:179-196--checkCODEX_HOME, else the parent ofHCOM_DIR). It exits 78 while retired Claude hcom deny entries remain and untilhcom codexwriteshcom.rules. Then it passes every*.rulesfile there tocodex execpolicy check;hcom sendandhcom term injectmust both beallow, so a leftoverhcom-deny.rulesexits 78.2026-10-04-round2-plan-g1-messaging.md:65-72docs/decisions/2026-10-06-hcom-relaxation.mdThe verdict cites the same pieces at #723's head, at other lines (map :894-951, :962, :968 and :969; checker :180-197). The table uses main's lines.
The relaxed
check_plan.pycontract keeps the fourhcom_configvalue checks and the smoke tokens. It asserts three things:HCOM_DIR, evaluates every rules file there and checks the retired Claude denies.The
hcom clauderule: hook-gap finding at hcom's current releasegh api repos/aannoo/hcom/releases/latestreturns v0.7.27, still the latest (published 2026-10-01T02:11:55Z, target2c5f343b2f9ec4bf2acf49c0431860e7c2ae578b, the existing pin).hcom <tool>sessions (release notes, #146). The Claude hook handler exits 0 silently withoutHCOM_PROCESS_ID(claude.rs:135-140). A plainclaudehas no hooks (start.rs:412-417). Onlyhcom claudegets automatic delivery; anything else uses manualhcom listen(README.md:230-246).hcom claude, not a reason against it.hcom startandhcom listen, which do not wake it when idle, andhcom claudeis upstream's automatic-delivery route for Claude Code.Fixes after the command center's read at 247d71e (ACK_AFTER)
hcom claudesentencepeer_instructionsdrops "Never launch Claude lanes through hcom claude" and "Claude lanes stay plain Claude sessions" and keeps the route facts. The record's Result and overturn sections are rewritten.--applywhen the user's own~/.hcom/config.tomldiffers (pre-existing)run_slotscores any non-zero rc, 78 included, as failed.--checkhas no callerexec_rules_reviewed.jsonentry staysThe history was rebuilt so that
manifests/evidence.jsonchanges only in the last commit (docs/lanes.md:96-128):f0d9b2f5: the relaxation;88eb3981: the read's fixes;10160d89: the registry.It was pushed with
--force-with-lease, replacing 247d71e.Deliberate non-changes
tools/adoption/exec_rules_reviewed.jsonkeeps itshcom-deny.rulesentry. This is a deliberate non-change to the verdict's item (e). The entry reviews one exact file for the RTK Codex hook-trust tool and enforces nothing. Removing it would rewrite about twenty trust tests andrtk-rewrite-heads-check.json. It would also makecodex_hook_trust.pyrefuse on any host that did install the file. The plan-wide test that every plan rule file is reviewed or allow-only stays; only its docstring changed, and it is vacuous while the plan ships none.git grep -i -E 'quiet (interlock|apply|point)'returns nothing.title_mode=off,relay.enabled=false,auto_trust_workspace=falseandauto_approve=true. The verdict reservesauto_trust_workspaceandtitle_modeto the user.SOTA sources
2c5f343b2f9ec4bf2acf49c0431860e7c2ae578b(https://github.com/aannoo/hcom/releases/tag/v0.7.27), still the latest release, read withgh api repos/aannoo/hcom/releases/lateston 2026-10-06:hcom.rules, the only Codex hcom policy:build_codex_rules);<codex home>/rules/hcom.rules;auto_approve=true;codex execpolicy check --help(repeatable--rules, JSONdecision).Evidence-class table
install.sh,accept.sh, the map and the relaxed contract agreelocal_integrationcheck_plan.pyexit 0synthetictest_hcom_apply_never_grants_inbound_authorization_or_requires_codexcopy_configstill refreshes plan-owned helpers and keeps operator filessynthetictest_plan_owned_helpers_refresh_without_overwriting_operator_configuration$HOME/.codexsynthetic(throwaway negative control, not committed)check_plan.py --plan-dir <mutated copy>: exit 1, "after sign-in must evaluate every rules file in the Codex home that hcom derives from HCOM_DIR, and report retired Claude hcom denies"synthetic(real codex-cli 0.160.1 and jq 1.8.1 with scratch homes)evidence/artifacts/hcom-relaxation-20261006/probe-receipt.json, run at 13:11:32Z:allow/allow/no decision overhcom.rulesalone,forbiddenfor term with the retired file, and 8 after_sign_in runs with the expected exits 78,0,78,0,78,0,78,0HCOM_DIRderivation, every rules file, retired Claude entries)synthetic(stub codex)test_hcom_after_sign_in_reads_hcoms_codex_home_and_every_rules_filesource_reviewgh apireleases, tags and compare; pinned source readinstall.sh,accept.shor--only agent-messagingrun; NativeStack2604 never had the posture (the command center's read-only check)Review threads at 3b6ea9d, fixed at 7eb9bea
The fix commit is
2c8890c9, and the registry and regenerated outputs are the last commit,7eb9beaa.evidence/artifacts/hcom-relaxation-20261006/keeps the frozen synthetichcom.rules(sha2562a667dcb…) andprobe-receipt.json(every argv, sanitized environment, UTC times, exit codes, stdout and stderr). The record's Evidence section cites it.CODEX_HOME, else the parent ofHCOM_DIR(hcomsrc/hooks/codex.rs:72-75,src/paths.rs:26-53). The check_plan contract requires it.*.rulesfile in that home goes to the native checker, as Codex loads them (openai/codex rust-v0.160.0exec_policy.rs:662-700).hcom sendandhcom term injectmust both beallow. A leftoverhcom-deny.rules, or any of the 52 retired Claude hcom deny entries, reports needs_user (78).assemble_manifest.pyandscripts/build_new_wsl_handbook.py --writethen regenerated the outputs, and the handbook receipt follows them.The installed Codex is now 0.160.1, which adds two commits to rust-v0.160.0, neither touching exec policy.
Local commands run
Run at head
7eb9beaaf9680acebe0d8d1c8b0331cb50e4ff2awithnice -n 19andPYTHONDONTWRITEBYTECODE=1:The earlier runs at 10160d8 and 247d71e follow.
The module list covers every test module that names hcom, agent-messaging, hcom-deny, the plan directory, the map,
check_plan,exec_rules_reviewedor the round-2 record. It is thegit grep -lovertests/.Decision record
docs/decisions/2026-10-06-hcom-relaxation.mdrecords:hcom claudelaunch rule;It supersedes
docs/decisions/2026-10-04-round2-plan-g1-messaging.md:65-72, plus that record's 2026-10-05 combined-rules acceptance.Host evidence
Not applicable: no
evidence/hosts/change. NativeStack2604 never had the posture applied, so nothing needs undoing. A host that did apply it keeps its hcom deny entries and~/.codex/rules/hcom-deny.rulesuntil that host's owner removes them; none is known.Expected after landing on NativeStack2604. This behavior is unchanged from base.
~/.hcom/config.tomlalready exists there.install.sh --only agent-messagingwrites the two instruction blocks, keeps the file, printsneeds_userand printsagent-messaging | install | 3.run_slotscores that rc as failed.Integration
docs/lanes.md:96-128). That commit removes the retired file's registry entry and re-registers the ten changed registered files.Checklist
version comment (no floating tags). No workflow changes.
permissions: {}and grant each jobonly what it needs (
contents: read, or an explicitly justified addition). No workflow changes.added without a documented owner.
moved or overwritten).
🤖 Generated with Claude Code