Repository navigation
User-facing times in local time with UTC beside; new WSL distributions follow the Windows time zone - #758
Conversation
…ites WSL's time-zone default explicitly On 2026-10-05 the user asked that times shown to them be in their local time, resolved at the root of the harness rather than in a memory note or per-host edits. Records (ledger rows, receipts, evidence, commits) stay UTC. - One sentence, one wording, in both user-level templates: examples/claude-native/CLAUDE.md (Core rule bullet) and adoption/templates/codex.AGENTS.template.md (session-lanes line). The F9 carriers are regenerated and hold it once each; the nativestack2604 render matches them byte for byte. - Pins amended together: a fail-first StandingRuleSurfacesTests check, the Codex TOP_RULE_SHA256 and size comments, the client-configuration projection addendum, and a context-budget addendum (startup scopes 23,796/19,560 bytes under the unchanged 24,458/20,103 constants; new pin value recorded). - The new-distro recipe writes [time] useWindowsTimezone=true, WSL's documented default, so W5 reads it back: cloud-init user-data (path A), W6 (path B), the W5 read-back, the first-boot checklist, the receipt example, the command table and a dated amendment of the recipe record. Source: Microsoft wsl-config "Time settings" (MicrosoftDocs/WSL 7ea1c6f9, WSL/wsl-config.md:152-158). - The WSL image experiment's four edited frozen inputs move to evidence/artifacts/user-facing-local-time-20261005/frozen-inputs/ with unchanged hashes (fix-wave precedent). - Decision: docs/decisions/2026-10-05-user-facing-local-time.md. Rebased onto main ecfa112 (#703). The shared hot files (the new-WSL handbook pair, its receipt and manifests/evidence.json) are regenerated and re-registered in the branch's last commit, under the hot-file protocol of docs/lanes.md. Source review and local integration only: no first boot, import, host re-render or model run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… Z, what W5 detects, a section-aware [time] check, the W5 zone pair The command center's review of 8dfc91e (changes requested), applied on the rebased tree: - The record no longer calls the user's own dated local-time rule on NativeStack2604 interim, and nothing plans to remove it. A re-render keeps every byte outside the managed markers (managed_block.py:106-113), so the rule loads twice there until the user decides. - Decision 3 now reads: "Ledger rows, receipts, evidence and commits keep UTC, written as RFC 3339 date-times with `Z`." Whether git's own author and committer dates count as commits is recorded as open for the user. - The useWindowsTimezone rationale says what holds. The key restates WSL's documented default (MicrosoftDocs/WSL 7ea1c6f9; microsoft/WSL 91f161fa, tag 3.0.1, WslDistributionConfig.h:58) and records the intent. W5 fails at the first boot on another value or a missing [time] section. A later change is not detected. - The same correction is made in the 2026-10-01 amendment, the W5 proof, the user-data comment and the test docstring. - The W6 row's proof says what its guard shows. - W5 pairs `timedatectl show -p Timezone --value` with `tzutil /g`. - The pair has command-table rows, receipt-example entries, the checklist line and TimeZonePairTests (seven mutants). - Its proof cites WSL's mapping (helpers.cpp:358-413, timezone.cpp:22-110) and CLDR windowsZones. - The user-data check reads the appended /etc/wsl.conf text by section. - A key moved under [user] now fails; the new mutant keeps every line. - [user] before [time] also fails. - Smaller fixes: - the Learn citations are pinned and dated; - the two flagged overturn conditions go to the user; - the sentence is described as a display rule plus a records rule, with a records trigger; - the WSL condition also watches the source default. - Measurements and records: - startup bytes were re-measured in code at base ecfa112 and are unchanged; - the Checks table reports post-rebase results; - the passwordless-sudo criterion moved to recipe line 636, and its two live citations follow. The regenerated handbook, its receipt and the registry are in the next commit (hot-file protocol, docs/lanes.md). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… receipt and the registry
Hot-file protocol (docs/lanes.md):
1. take main's manifests/evidence.json;
2. run python3 scripts/build_new_wsl_handbook.py --write on the rebased
tree;
3. re-register last, through host_receipts.register_file.
Results:
- docs/new-wsl-handbook.{md,json} are regenerated. They carry #703's catalog
digest (8420f58e...) and the edited recipe's digest (ef2ca82a...).
- evidence/artifacts/new-wsl-handbook-20261001/receipt.json:
- outputs are 0fe0d761... and 997b05c0...;
- this change's 2026-10-05 regenerations entry follows #703's, with
previous_outputs b1dd8bdb... and 32da2ef7... (main's).
- manifests/evidence.json is main's copy plus 20 changed and 5 new file
entries. receipts[] and convergence_records[] are unchanged.
- component_matrix.py --write and new_host_grand_list.py --write changed
nothing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8dfc91e to
608c526
Compare
…5 zone mismatch, pinned mapping sources The command center's round-3 ruling on 608c526 (ACK_AFTER): - Fold-in from the clock adjudication: the record now states both paths that set the zone while useWindowsTimezone was true at an instance's start. - Instance start: ConfigInitializeCommon reads /etc/wsl.conf once (config.cpp:532), and config.cpp:882 calls UpdateTimezone. - A running instance: the service's window receives the broadcast WM_TIMECHANGE (LxssUserSession.cpp:607-647, :4294-4305) and updates every running instance (:3835-3846, WslCoreInstance.cpp:349-362). Init's loops call UpdateTimezone with the configuration read at start (init.cpp :2559-2561, :2745-2747; timezone.cpp:49-52 and :76-106). - Each of these lines was read at microsoft/WSL 91f161fa (tag 3.0.1). That a Windows time-zone change raises WM_TIMECHANGE rests on WSL's own comment and log text. - The recipe's W5 bullet and the 2026-10-01 amendment say the same. - A W5 zone mismatch, on either path, is recorded with both outputs and stops the run for review, without the failed-proof export and unregister. - WSL leaves /etc/localtime unchanged on an empty mapping or a missing zone file (timezone.cpp:54-58, :66-70). So the recipe names the remedy (the Windows region and zone, the image's tzdata), and unregistering would change neither. - The failed-proof rule, the checklist and the record's row carry the exception. - The bullet pins CLDR release-48-2 windowsZones.xml and the tzutil page (windowsserverdocs 48fd0532). - TimeZonePairTests gains seven mutants for the disposition, the exception, the remedy and both pins. - From the clock adjudication's P3: the record's context adds that a private host plan had pinned the false value because Windows' automatic time zone setting was on. No private path is named. - The passwordless-sudo criterion moved to recipe line 645, and its two live citations follow. - The Checks table marks the rows re-run on this tree. The regenerated handbook, its receipt and the registry are in the next commit (hot-file protocol, docs/lanes.md). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… receipt and the registry
Hot-file protocol (docs/lanes.md):
1. take main's manifests/evidence.json;
2. run python3 scripts/build_new_wsl_handbook.py --write on the final tree;
3. re-register last, through host_receipts.register_file.
Results:
- docs/new-wsl-handbook.{md,json} are regenerated. They carry #703's catalog
digest (8420f58e...) and the edited recipe's digest (3d616445...).
- evidence/artifacts/new-wsl-handbook-20261001/receipt.json:
- outputs are 50585de8... and 70cf495c...;
- this change's one 2026-10-05 regenerations entry follows #703's, with
previous_outputs b1dd8bdb... and 32da2ef7... (main's).
- manifests/evidence.json is main's copy plus 20 changed and 5 new file
entries. receipts[] and convergence_records[] are unchanged.
- component_matrix.py --write and new_host_grand_list.py --write changed
nothing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
608c526 to
418a3d9
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. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 418a3d9e01
ℹ️ 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".
…egistry plus the owned rows) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… Z, what W5 detects, a section-aware [time] check, the W5 zone pair The command center's review of 8dfc91e (changes requested), applied on the rebased tree: - The record no longer calls the user's own dated local-time rule on NativeStack2604 interim, and nothing plans to remove it. A re-render keeps every byte outside the managed markers (managed_block.py:106-113), so the rule loads twice there until the user decides. - Decision 3 now reads: "Ledger rows, receipts, evidence and commits keep UTC, written as RFC 3339 date-times with `Z`." Whether git's own author and committer dates count as commits is recorded as open for the user. - The useWindowsTimezone rationale says what holds. The key restates WSL's documented default (MicrosoftDocs/WSL 7ea1c6f9; microsoft/WSL 91f161fa, tag 3.0.1, WslDistributionConfig.h:58) and records the intent. W5 fails at the first boot on another value or a missing [time] section. A later change is not detected. - The same correction is made in the 2026-10-01 amendment, the W5 proof, the user-data comment and the test docstring. - The W6 row's proof says what its guard shows. - W5 pairs `timedatectl show -p Timezone --value` with `tzutil /g`. - The pair has command-table rows, receipt-example entries, the checklist line and TimeZonePairTests (seven mutants). - Its proof cites WSL's mapping (helpers.cpp:358-413, timezone.cpp:22-110) and CLDR windowsZones. - The user-data check reads the appended /etc/wsl.conf text by section. - A key moved under [user] now fails; the new mutant keeps every line. - [user] before [time] also fails. - Smaller fixes: - the Learn citations are pinned and dated; - the two flagged overturn conditions go to the user; - the sentence is described as a display rule plus a records rule, with a records trigger; - the WSL condition also watches the source default. - Measurements and records: - startup bytes were re-measured in code at base ecfa112 and are unchanged; - the Checks table reports post-rebase results; - the passwordless-sudo criterion moved to recipe line 636, and its two live citations follow. The regenerated handbook, its receipt and the registry are in the next commit (hot-file protocol, docs/lanes.md). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…5 zone mismatch, pinned mapping sources The command center's round-3 ruling on 608c526 (ACK_AFTER): - Fold-in from the clock adjudication: the record now states both paths that set the zone while useWindowsTimezone was true at an instance's start. - Instance start: ConfigInitializeCommon reads /etc/wsl.conf once (config.cpp:532), and config.cpp:882 calls UpdateTimezone. - A running instance: the service's window receives the broadcast WM_TIMECHANGE (LxssUserSession.cpp:607-647, :4294-4305) and updates every running instance (:3835-3846, WslCoreInstance.cpp:349-362). Init's loops call UpdateTimezone with the configuration read at start (init.cpp :2559-2561, :2745-2747; timezone.cpp:49-52 and :76-106). - Each of these lines was read at microsoft/WSL 91f161fa (tag 3.0.1). That a Windows time-zone change raises WM_TIMECHANGE rests on WSL's own comment and log text. - The recipe's W5 bullet and the 2026-10-01 amendment say the same. - A W5 zone mismatch, on either path, is recorded with both outputs and stops the run for review, without the failed-proof export and unregister. - WSL leaves /etc/localtime unchanged on an empty mapping or a missing zone file (timezone.cpp:54-58, :66-70). So the recipe names the remedy (the Windows region and zone, the image's tzdata), and unregistering would change neither. - The failed-proof rule, the checklist and the record's row carry the exception. - The bullet pins CLDR release-48-2 windowsZones.xml and the tzutil page (windowsserverdocs 48fd0532). - TimeZonePairTests gains seven mutants for the disposition, the exception, the remedy and both pins. - From the clock adjudication's P3: the record's context adds that a private host plan had pinned the false value because Windows' automatic time zone setting was on. No private path is named. - The passwordless-sudo criterion moved to recipe line 645, and its two live citations follow. - The Checks table marks the rows re-run on this tree. The regenerated handbook, its receipt and the registry are in the next commit (hot-file protocol, docs/lanes.md). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… receipt and the registry
Hot-file protocol (docs/lanes.md):
1. take main's manifests/evidence.json;
2. run python3 scripts/build_new_wsl_handbook.py --write on the final tree;
3. re-register last, through host_receipts.register_file.
Results:
- docs/new-wsl-handbook.{md,json} are regenerated. They carry #703's catalog
digest (8420f58e...) and the edited recipe's digest (3d616445...).
- evidence/artifacts/new-wsl-handbook-20261001/receipt.json:
- outputs are 50585de8... and 70cf495c...;
- this change's one 2026-10-05 regenerations entry follows #703's, with
previous_outputs b1dd8bdb... and 32da2ef7... (main's).
- manifests/evidence.json is main's copy plus 20 changed and 5 new file
entries. receipts[] and convergence_records[] are unchanged.
- component_matrix.py --write and new_host_grand_list.py --write changed
nothing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
84c8cda to
a10ad2c
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a10ad2c019
ℹ️ 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".
The review repair (0df3f0d) grew the local-time sentence from 227 to 327 bytes inside the segment that tests/test_codex_worker_lane.py pins, so TOP_RULE_SHA256 was stale (GPT verdict on 563eeda, finding 1, P2). It is re-derived with the module's template_segments() as d21bb3bc0a2e68fb362af1d085da3761a08cc5ccec18ebd7ed16dd83d80bb3cd. The sentence is byte-identical on the four surfaces StandingRuleSurfacesTests checks, so only the pin moves. Finding 2 (P3): the size comments in the test and in tools/adoption/new_wsl_client_config.py now give 7,635 and 8,701 bytes. The local-time record keeps its earlier measurements, labels them as preceding the repair, and appends a 2026-10-06 addendum: measured sizes, startup scopes (Claude 23,896, Codex 19,660), post-gate projections, the new pin, the checks run and an erratum on registry membership. The budget record's 2026-10-05 addendum, which named the old pin and figures, gets a matching dated addendum. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Re-registers exactly the four files the previous commit changed (sha256 and bytes in manifests/evidence.json files[]), last, per the docs/lanes.md hot-file protocol. validate.py passes: 10,322 hashed files, 212 receipts. 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
examples/claude-native/CLAUDE.md) and the Codex template (adoption/templates/codex.AGENTS.template.md) each gain one rule: when an agent tells the user a time, it gives the host's local time first with UTC beside it, and keeps UTC in ledger rows, receipts, evidence and commits. The rendered carriers are regenerated, and the pinned hashes, size comments, budget addendum and registry are amended together.[time] useWindowsTimezone=trueexplicitly (WSL's documented default) so that W5 reads it back, and W5 pairs the time zone the distribution reports (timedatectl show -p Timezone --value) with the Windows time zone (tzutil /g). The cloud-init template, the recipe, the W5 and W6 read-backs, the first-boot checklist, the receipt example, the command table and the tests are updated.ecfa112764c664d35377dd66b8cfcb67e5a94d60(main after trading: NativeStack2604 research runtime, EdgarTools 5.60.0 (runtime and catalog), hash-pinned build backend #703); head418a3d9e01aa7ce69d786ae0ce53c3e40b800f27. The branch was rebased under the hot-file protocol ofdocs/lanes.md: the handbook pair, its receipt andmanifests/evidence.jsonare regenerated and re-registered in the last commit.lane:foundation.examples/claude-native/CLAUDE.md,adoption/templates/codex.AGENTS.template.mdandadoption/new-wsl/{claude,codex}-user-instructions.md;adoption/templates/wsl/*,adoption/platforms/linux-wsl2-new-distro.md;docs/decisions/2026-10-05-user-facing-local-time.md(new), with addenda to the 2026-10-01, 2026-10-02 and 2026-10-05 budget records;docs/new-wsl-handbook.{md,json}and their receipt;test_install_claude_profile,test_codex_worker_laneandtest_wsl_new_distro_recipe;tools/adoption/*(citations and comments),manifests/evidence.json, andevidence/artifacts/user-facing-local-time-20261005/;blueprints/convergence-practice/wsl-new-distro-image-20261001/experiment.json(its four frozen-input paths only, moved toevidence/artifacts/user-facing-local-time-20261005/frozen-inputs/with unchanged hashes).The user asked for this to be resolved at the root of the harness rather than through a memory note or per-host edits. The rule has two halves: a display rule (how an agent tells the user a time) and a records rule (ledger rows, receipts, evidence and commits keep UTC, written as RFC 3339 date-times with
Z). Only the times an agent reports to the user change; the records stay UTC.This revision answers the command center's review of
8dfc91e4(changes requested):ecfa1127;useWindowsTimezonerationale says what W5 detects and what it does not;[time]check reads by section;Round 3 answers the command center's ruling on
608c5266(ACK after fixes):experiment.jsonjoins the owned paths.The series is rebuilt so that the hot files stay in the last commit.
SOTA sources
WSL/wsl-config.md:152-158, still that file's latest commit on 2026-10-05. It documents[time]useWindowsTimezoneas a boolean, defaulttrue, that makes WSL "use and sync to the timezone set in Windows". The recipe's explicit key restates this default.src/linux/init/WslDistributionConfig.h:25and:58(bool AutoUpdateTimezone = true;);src/linux/init/timezone.cpp:22-110:UpdateTimezonereturns early when the key is off (:49-52), when the mapping is empty (:54-58) or when the zone's file is missing (:66-70); otherwise it relinks/etc/localtime(:76-106);ConfigInitializeCommonreads/etc/wsl.confonce (src/linux/init/config.cpp:532), andconfig.cpp:882callsUpdateTimezone;WM_TIMECHANGE(src/windows/service/exe/LxssUserSession.cpp:607-647and:4294-4305);:3835-3846;src/windows/service/exe/WslCoreInstance.cpp:349-362);UpdateTimezone(src/linux/init/init.cpp:2559-2561and:2745-2747);WM_TIMECHANGErests on WSL's own comment (:619) and log text (:3838);src/windows/common/helpers.cpp:358-413: the Windows zone and region are mapped byucal_getTimeZoneIDForWindowsID, with Windows' own ICU.icu4c/source/i18n/unicode/ucal.h:1644-1674andicu4c/source/i18n/timezone.cpp:1698-1719: the first zone of the region's row, else the001row;common/supplemental/windowsZones.xml:130and:133:Eastern Standard Timemaps toAmerica/New_York.tzutil(https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/tzutil, read 2026-10-05; MicrosoftDocs/windowsserverdocs@48fd053,tzutil.md:18and:25):/gdisplays the current time zone ID.Zdesignator, which records use;~/.claude/CLAUDE.mdinstructions load in every session, so the rule belongs in the rendered user block, not in auto-memory.~/.codex/AGENTS.mdis read first in every session.wsl-setup:55-73(set_user_as_default).write_files: the existing recipe's mechanism for/etc/wsl.conf, validated withcloud-init schema -c(26.1).Evidence-class table
new_wsl_client_config.py --render --host nativestack2604 --out <scratch>exit 0: the merged blocks are 12,071 and 8,601 bytes, one copy each;--checkexit 0ecfa1127tests.test_install_claude_profile.PortableTopRuleTests(test_rendered_startup_files_fit_each_clients_fixed_byte_budget); the budget addendum indocs/decisions/2026-10-05-harness-context-budget.md[time]section holding onlyuseWindowsTimezone=true, before[user], and each wsl.conf path leaves every key oncecloud-init schema -cgives "Valid schema"; the section reading intest_wsl_new_distro_recipeand its mutants (a key moved under[user]fails); two/etc/wsl.confsimulationsTimeZonePairTests: the command-table rows, the checklist, the receipt example, the failure rule's exception, the remedy and the CLDR and tzutil pins, with fourteen mutantstimedatectl show -p Timezone --valuegivesAmerica/New_Yorkandtzutil /ggivesEastern Standard Time/etc/localtimelinks to the same zoneuseWindowsTimezonewas false, with no repository record, until the coordinator set it to true; a private host plan had pinned it because Windows' automatic time zone setting was on/etc/wsl.confbefore and after (coordination evidence, outside the repository)Local commands run
All ran at base
ecfa1127, on NativeStack2604. "Round 3" runs used the final tree,418a3d9e. "Round 2" runs used608c5266; round 3 changed no template, carrier, user-data or startup file those runs read.Decision record
docs/decisions/2026-10-05-user-facing-local-time.mdrecords the context, the decision, the alternatives and the overturn conditions. The rejected alternatives are:Two overturn conditions are raised to the user rather than acted on: a native client setting, and a host whose zone is not the user's. The records half stays in force whatever display setting is adopted.
Host evidence
Not applicable: no file under
evidence/hosts/changes.Checklist
permissions: {}(no workflow changes).After landing, the next F9 re-render puts the rule in every host's managed block. A re-render replaces only the text between the managed markers (
tools/adoption/managed_block.py:106-113). On NativeStack2604 the user's own dated rule, after the end markers, therefore stays in place, and the rule loads twice there until the user decides. Whether to remove the user's copy is the user's call. Also open for the user: whether "commits" covers git's author and committer dates, which carry the host's numeric offset.🤖 Generated with Claude Code