Skip to content

User-facing times in local time with UTC beside; new WSL distributions follow the Windows time zone - #758

Merged
seathatflowsinourveins merged 12 commits into
mainfrom
claude/ns2604-user-times-20261005
Oct 7, 2026
Merged

seathatflowsinourveins merged 12 commits into
mainfrom
claude/ns2604-user-times-20261005

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Oct 5, 2026 •

Copy link
Copy Markdown
Owner

Scope

  • What this PR changes:
    • Shared instruction templates. The Claude template (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.
    • New-distribution recipe. It now writes [time] useWindowsTimezone=true explicitly (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.
  • Base commit: ecfa112764c664d35377dd66b8cfcb67e5a94d60 (main after trading: NativeStack2604 research runtime, EdgarTools 5.60.0 (runtime and catalog), hash-pinned build backend #703); head 418a3d9e01aa7ce69d786ae0ce53c3e40b800f27. The branch was rebased under the hot-file protocol of docs/lanes.md: the handbook pair, its receipt and manifests/evidence.json are regenerated and re-registered in the last commit.
  • Lane: lane:foundation.
  • Owned paths touched:
    • examples/claude-native/CLAUDE.md, adoption/templates/codex.AGENTS.template.md and adoption/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;
    • the tests test_install_claude_profile, test_codex_worker_lane and test_wsl_new_distro_recipe;
    • tools/adoption/* (citations and comments), manifests/evidence.json, and evidence/artifacts/user-facing-local-time-20261005/;
    • blueprints/convergence-practice/wsl-new-distro-image-20261001/experiment.json (its four frozen-input paths only, moved to evidence/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):

  • it is rebased onto ecfa1127;
  • neither this text nor the record plans any change to the user's own host rule;
  • Decision 3 states the records rule as the sentence does;
  • the useWindowsTimezone rationale says what W5 detects and what it does not;
  • the [time] check reads by section;
  • W5 gains the zone pair;
  • the Learn citations are pinned;
  • two overturn conditions are raised to the user instead of acted on.

Round 3 answers the command center's ruling on 608c5266 (ACK after fixes):

  • the record states both paths that set the zone: instance start, and the live push of a Windows time-zone change into a running instance, each with its microsoft/WSL source lines;
  • a W5 zone mismatch is recorded and stops the run for review, without the failed-proof export and unregister, on both paths, and the recipe names the remedy;
  • the W5 bullet pins CLDR and the tzutil page;
  • experiment.json joins the owned paths.

The series is rebuilt so that the hot files stay in the last commit.

SOTA sources

  • Microsoft WSL, Advanced settings configuration, "Time settings" (https://learn.microsoft.com/en-us/windows/wsl/wsl-config#time-settings, read 2026-10-05). Source: MicrosoftDocs/WSL@7ea1c6f, WSL/wsl-config.md:152-158, still that file's latest commit on 2026-10-05. It documents [time] useWindowsTimezone as a boolean, default true, that makes WSL "use and sync to the timezone set in Windows". The recipe's explicit key restates this default.
  • microsoft/WSL@91f161f (tag 3.0.1, the release W1 requires):
    • src/linux/init/WslDistributionConfig.h:25 and :58 (bool AutoUpdateTimezone = true;);
    • src/linux/init/timezone.cpp:22-110: UpdateTimezone returns 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);
    • at instance start, ConfigInitializeCommon reads /etc/wsl.conf once (src/linux/init/config.cpp:532), and config.cpp:882 calls UpdateTimezone;
    • in a running instance whose key was true at start:
      • the service's window receives the broadcast WM_TIMECHANGE (src/windows/service/exe/LxssUserSession.cpp:607-647 and :4294-4305);
      • it updates every running instance (:3835-3846; src/windows/service/exe/WslCoreInstance.cpp:349-362);
      • init's loops call UpdateTimezone (src/linux/init/init.cpp:2559-2561 and :2745-2747);
      • that a Windows time-zone change raises WM_TIMECHANGE rests on WSL's own comment (:619) and log text (:3838);
    • src/windows/common/helpers.cpp:358-413: the Windows zone and region are mapped by ucal_getTimeZoneIDForWindowsID, with Windows' own ICU.
  • ICU and CLDR, cited for the mapping's meaning only (the data version Windows ships is not established):
    • ICU release-78.3 (21d1eb0f306e1141c10931e914dfc038c06121da), icu4c/source/i18n/unicode/ucal.h:1644-1674 and icu4c/source/i18n/timezone.cpp:1698-1719: the first zone of the region's row, else the 001 row;
    • CLDR release-48-2 (11299982335beb974c1c63c45265184e759c0f41), common/supplemental/windowsZones.xml:130 and :133: Eastern Standard Time maps to America/New_York.
  • Microsoft tzutil (https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/tzutil, read 2026-10-05; MicrosoftDocs/windowsserverdocs@48fd053, tzutil.md:18 and :25): /g displays the current time zone ID.
  • RFC 3339 (Date and Time on the Internet: Timestamps, https://www.rfc-editor.org/rfc/rfc3339):
    • §4.1 gives the reason for UTC;
    • §4.2 defines local offsets, which records do not use;
    • §4.3 defines the Z designator, which records use;
    • §5.6 gives the grammar.
  • Claude Code memory documentation (https://code.claude.com/docs/en/memory): user-level ~/.claude/CLAUDE.md instructions load in every session, so the rule belongs in the rendered user block, not in auto-memory.
  • Codex AGENTS.md guide (https://developers.openai.com/codex/guides/agents-md): the global ~/.codex/AGENTS.md is read first in every session.
  • ubuntu/wsl-setup@73418e3 (0.6.3), wsl-setup:55-73 (set_user_as_default).
  • cloud-init write_files: the existing recipe's mechanism for /etc/wsl.conf, validated with cloud-init schema -c (26.1).

Evidence-class table

Claim Evidence class Command / receipt
The rule renders exactly once in each client's managed block, byte-identical to the committed carriers local_integration 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; --check exit 0
Startup context stays under the unchanged budgets (Claude 23,796 of 24,458 bytes; Codex 19,560 of 20,103), re-measured at base ecfa1127 local_integration tests.test_install_claude_profile.PortableTopRuleTests (test_rendered_startup_files_fit_each_clients_fixed_byte_budget); the budget addendum in docs/decisions/2026-10-05-harness-context-budget.md
The user-data appends a [time] section holding only useWindowsTimezone=true, before [user], and each wsl.conf path leaves every key once local_integration; synthetic cloud-init schema -c gives "Valid schema"; the section reading in test_wsl_new_distro_recipe and its mutants (a key moved under [user] fails); two /etc/wsl.conf simulations
W5 reads the zone the distribution reports beside the Windows zone; a mismatch stops for review without the failed-proof export and unregister, with its remedy and pins local_integration TimeZonePairTests: the command-table rows, the checklist, the receipt example, the failure rule's exception, the remedy and the CLDR and tzutil pins, with fourteen mutants
On NativeStack2604, timedatectl show -p Timezone --value gives America/New_York and tzutil /g gives Eastern Standard Time native_proven (host read, outputs in the record; not a W5 run) both exit 0 on 2026-10-05; /etc/localtime links to the same zone
On NativeStack2604, useWindowsTimezone was 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 native_proven (host read) /etc/wsl.conf before and after (coordination evidence, outside the repository)
Agents follow the rule in fresh sessions NOT MEASURED no model run; to be observed after the F9 re-render

Local commands run

All ran at base ecfa1127, on NativeStack2604. "Round 3" runs used the final tree, 418a3d9e. "Round 2" runs used 608c5266; round 3 changed no template, carrier, user-data or startup file those runs read.

# round 3, on 418a3d9e
$ python3 scripts/validate.py
exit 0 (10,277 hashed files, 212 receipts)
$ python3 -m unittest tests.test_install_claude_profile tests.test_codex_worker_lane tests.test_wsl_new_distro_recipe
exit 0 (334 tests, 13 skipped)
$ python3 -m unittest tests.test_new_wsl_handbook tests.test_new_wsl_client_config tests.test_new_wsl_profile tests.test_host_baseline_probe
exit 0 (309 tests: the modules that read the recipe, the handbook receipt or the probe)
$ python3 -B tools/adoption/new_wsl_client_config.py --check
exit 0 (two warnings, both about slot mcp-inspector, from inputs this change does not touch)
$ python3 scripts/build_new_wsl_handbook.py --check
exit 0
$ python3 scripts/evidence_manifest.py --check
exit 0
$ python3 scripts/validate_convergence.py blueprints/convergence-practice/wsl-new-distro-image-20261001/experiment.json
exit 0
$ git diff --check
exit 0
# round 2, on 608c5266
$ python3 -m unittest <the 19 other modules that pin the touched files>
exit 1 (2,237 tests, 1 failure: test_token_e2e_grader F27c; its `git clone --local` from this worktree into /tmp fails with "Invalid cross-device link" before any check; it passed in a clean clone at the previous base)
$ python3 -B tools/adoption/new_wsl_client_config.py --render --host nativestack2604 --out <scratch>
exit 0 (each rendered carrier equals the committed carrier and holds the sentence once)
$ cloud-init schema -c <P2's render>   # 26.1-0ubuntu3~26.04.1
exit 0 (Valid schema)
$ node test-envelope.mjs; node test-contract-mutations.mjs   # examples/claude-native/workflows
exit 0; exit 0 (254 and 74 passed)
$ python3 -m unittest   # the full suite
exit 1 (10,347 tests, 903 skipped, 11 failures and 18 errors, none in a module this change edits; all 29 are the environmental classes the first round found recurring in a clean clone of the previous base: a missing exchange_calendars module (23), `dirname: command not found` (3), a systemd scope state (1), the installed Claude Code's auth_storage_failure notification type (1) and F27c above (1))

Decision record

docs/decisions/2026-10-05-user-facing-local-time.md records the context, the decision, the alternatives and the overturn conditions. The rejected alternatives are:

  • a memory note, which the user rejected;
  • per-host lines outside the managed block as the harness mechanism, which cannot be reproduced on a new host;
  • the system zone alone, which cannot change how an agent words a time;
  • local-time records, rejected for DST ambiguity and cross-host consistency.

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

  • New/changed GitHub Actions are pinned to a full commit SHA with a version comment (no workflow changes).
  • New/changed workflows declare top-level permissions: {} (no workflow changes).
  • No secrets are printed, logged or committed.
  • No new paid hosting, subscription or billing surface.
  • Peer-owned untracked files and worktrees were preserved.

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

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Oct 5, 2026
seathatflowsinourveins and others added 2 commits October 5, 2026 19:28
…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>
seathatflowsinourveins added a commit that referenced this pull request Oct 6, 2026
… 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>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/ns2604-user-times-20261005 branch from 8dfc91e to 608c526 Compare October 6, 2026 00:22
seathatflowsinourveins and others added 2 commits October 5, 2026 21:47
…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>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/ns2604-user-times-20261005 branch from 608c526 to 418a3d9 Compare October 6, 2026 01:49
@seathatflowsinourveins
seathatflowsinourveins marked this pull request as ready for review October 6, 2026 01:49
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-06T11:07:37.377621Z a10ad2c Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread adoption/platforms/linux-wsl2-new-distro.md
…egistry plus the owned rows)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seathatflowsinourveins
seathatflowsinourveins marked this pull request as draft October 6, 2026 10:33
seathatflowsinourveins added a commit that referenced this pull request Oct 6, 2026
… 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>
seathatflowsinourveins added a commit that referenced this pull request Oct 6, 2026
…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>
seathatflowsinourveins added a commit that referenced this pull request Oct 6, 2026
… 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>
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/ns2604-user-times-20261005 branch 2 times, most recently from 84c8cda to a10ad2c Compare October 6, 2026 10:57
@seathatflowsinourveins
seathatflowsinourveins marked this pull request as ready for review October 6, 2026 10:59

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread adoption/platforms/linux-wsl2-new-distro.md Outdated
Comment thread adoption/templates/codex.AGENTS.template.md Outdated
seathatflowsinourveins and others added 2 commits October 6, 2026 12:24
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>
Scout and others added 2 commits October 6, 2026 19:30
…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>
@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Claude session native-agent-stack-5f: landing at head 4b828cbc2793bbcfd3c1749c550e48aa97de7247. The command center (wsl-architecture-design) gave its ACK at 360987990fad, which reaches this head only through recorded mechanical refreshes whose owned non-registry patch-ids are equal (its carry rule); under the user's 2026-10-04 decision it owns merges that touch the hot registry. The read-only cross-family review (GPT-6.1 Sol max, the packaged Codex SDK worker) returned ACCEPT at 360987990fad; this head is reached from it through recorded carry edges (equal owned patch-ids, or a cross-family delta read returning ACCEPT at the edge's target), with no P1 item.

Observed main 0c4d32868f2b7b1d294d73cbbd0d5d3e41664c3d. coordination/merge_tree_landing_check.py (sha256 a11649fcf2e5844c…) exit 0:

main 0c4d32868f2b7b1d294d73cbbd0d5d3e41664c3d head 4b828cbc2793bbcfd3c1749c550e48aa97de7247 base d9eb68750311d5f888adec140723da174f9fe10c merged-tree 47f2ac2d9a70eaa686f2333673f3cb86dd5bd606 merge-tree-exit 0
ok   1: clean three-way merge
ok   2: merged-vs-main paths 28, outside PR-owned 0 []
ok   3: main drift 6 paths, overlap with PR-owned inputs (registry excluded) []
ok   4: registry foreign rows equal True, order preserved True, PR-owned rows 27, unowned top-level keys differing []
ok   5: merged files[] sorted by path with no duplicates: True (10388 rows)
LANDABLE
condition 5: merged files[] sorted and unique (tree 47f2ac2d9a70eaa686f2333673f3cb86dd5bd606)

Required checks at this head: 7 pass . Unresolved review threads: 0.

@seathatflowsinourveins
seathatflowsinourveins merged commit 3d7d4a4 into main Oct 7, 2026
25 checks passed
@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Claude session native-agent-stack-5f: post-merge observation. Landed as 3d7d4a4b2640c8583d8855670111ef5d023d3e03 (parent 0c4d32868f2b7b1d294d73cbbd0d5d3e41664c3d), tree 47f2ac2d9a70eaa686f2333673f3cb86dd5bd606. The landed tree equals the checked merged tree and the parent is the observed main.

@seathatflowsinourveins
seathatflowsinourveins deleted the claude/ns2604-user-times-20261005 branch October 7, 2026 00:14
seathatflowsinourveins added a commit that referenced this pull request Oct 7, 2026
### 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant