Skip to content

Layer consensus of 2026-10-02 in the manifest, plan and handbook (89 slots), and the WSL scope of the two-host decision - #620

Merged
seathatflowsinourveins merged 8 commits into
mainfrom
foundation/new-wsl-layer-consensus-20261002
Oct 3, 2026
Merged

seathatflowsinourveins merged 8 commits into
mainfrom
foundation/new-wsl-layer-consensus-20261002

Conversation

@seathatflowsinourveins

Copy link
Copy Markdown
Owner

Scope

  • What this PR changes: it carries the layer consensus of 2026-10-02 between the Claude and Codex lanes into the definitive manifest (84 to 89 slots: five new rows, six amended rows, row_kind consensus, never definitive or measured), the install plan (69 rows), the handbook and the dashboard checkpoint. It also adds a dated amendment that scopes the two-host decision to the Mac host for its worker override, as the Codex lane asked (608#5962894990).
  • Base commit: 56473e4b840f (origin/main, merged in by the hot-file protocol)
  • Lane: lane:shared; the Codex lane's read at the exact head is the other lane's acknowledgement
  • Owned paths touched: evidence/artifacts/new-wsl-layer-consensus-20261002/ (new), evidence/artifacts/new-wsl-definitive-defaults-20261001/ (assembler step and outputs), evidence/artifacts/new-wsl-install-plan-20261002/ (rows, scripts, validation), docs/decisions/2026-10-02-new-wsl-layer-consensus.md (new), docs/decisions/2026-10-01-new-wsl-definitive-defaults.md, docs/decisions/2026-10-02-two-host-north-star-architecture.md (appended amendment only), docs/new-wsl-handbook.*, observability/grand-dashboard/state.json, tests, and manifests/evidence.json (registrations only)

The rule the record states, acknowledged by the Codex lane (608#5959996494): a recorded consensus may add or amend a row; it is never definitive or measured, carries explicit labels, and never replaces a default, a state, a definitive row or a measured result. A "resolved selection" is kept distinct from native qualification.

SOTA sources

The full list, with pins, is in docs/decisions/2026-10-02-new-wsl-layer-consensus.md ("Sources"). The main ones:

Evidence-class table

Claim Evidence class Command / receipt
The manifest, plan, handbook and tables are regenerated from the record and current local_integration assemble_manifest.py --check, render_tables.py --check, check_plan.py, build_new_wsl_handbook.py --check: exit 0
Refusal controls for the consensus step (40 killed) synthetic controls.py: exit 0, "all files restored"
Who acknowledged what source_review five PR 608 comments, each cited by id and time in consensus.json and the record
The two new skill rows install native_proven, owner-reported their two install commands ran on the destination distribution on 2026-10-03 at 01:15Z (exit 0; private record W1-skills-plugins.txt); their acceptance checks have not run anywhere

Local commands run

$ python3 -B evidence/artifacts/new-wsl-definitive-defaults-20261001/assemble_manifest.py --check          -> 0
$ python3 -B evidence/artifacts/new-wsl-definitive-defaults-20261001/controls.py                            -> 0
$ python3 -B evidence/artifacts/new-wsl-definitive-defaults-20261001/render_tables.py --check docs/decisions/2026-10-01-new-wsl-definitive-defaults.md -> 0
$ python3 -B evidence/artifacts/new-wsl-install-plan-20261002/check_plan.py   -> 0 (69 rows: 38 installed by default, 3 measurement-only, 28 not installed)
$ python3 -B scripts/build_new_wsl_handbook.py --check                          -> 0
$ python3 -B tools/adoption/new_wsl_client_config.py --check                    -> 0
$ python3 -B -m unittest tests.test_new_wsl_definitive_defaults tests.test_new_wsl_handbook tests.test_new_wsl_profile tests.test_new_wsl_client_config tests.test_adoption_docs_consistency tests.test_wsl_new_distro_recipe -> OK (421 tests, skipped=1)
$ bash -n install.sh && bash -n accept.sh                                       -> 0
$ python3 -B scripts/validate.py                                                -> 0
$ python3 -B scripts/validate_convergence.py --all-recorded --root . --json     -> valid, 26 records

The change was built, reviewed (four defects, the worst a bash-4.1 errexit dependency in the skill-authoring check), repaired, independently re-verified with no failures, then committed with the provenance and amendment steps by a separate builder.

Decision record

docs/decisions/2026-10-02-new-wsl-layer-consensus.md (new); the two-host decision gains "Amendment 2026-10-03: WSL scope".

Host evidence

None in this PR. The destination's stage-1 receipt is a separate PR.

The required osv-scanner check is expected to fail on main's frozen historical lock (GHSA-vfj7-8cjw-p6xm, braces 3.0.3; issue 384). This PR touches no OSV input; the root lane is preparing the retirement of that replay.

🤖 Generated with Claude Code

Scout and others added 7 commits October 2, 2026 16:42
…ll plan, handbook and dashboard checkpoint

Unregistered and not yet reviewed by the other family: the registry step, the two skill installs in a throwaway
distribution and the client-configuration map entries follow after pull request 608 merges.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… and its receipt regenerated

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Corrections from the independent read of the layer-consensus change:

- F1: the dashboard gate, the decision record, the install plan's README and
  VALIDATION.md agree on the one install and acceptance run of the 64-row plan:
  it ran on the destination distribution (named in words), its record is
  private, and its public receipt comes with the destination's acceptance. The
  rows this change adds have run nowhere.
- F2: the consensus rule is replaced by the reviewed text; skill-discovery,
  skill-authoring and cross-family-review carry open_acceptance_gates instead
  of open_gates; a test checks every consensus row's label against the rule.
- F3: the Claude lane's primary-source review of the credential-guard
  amendment and the held topics is recorded (claude-review-held-topics.md,
  hash-checked at build time), with acknowledgement 5959684384.
- F4: the definitive-defaults record scopes its sentence: the five added rows
  are not definitive and the amendments change no field of the rows they
  annotate.
- F5: SOURCES.md and VALIDATION.md describe the 69-row plan; install-plan.json
  and owners.json record revised_at_utc.
- F6: the skill-authoring acceptance also fails on a Codex global copy or a
  dangling link and requires Claude Code as the only agent for skill-creator;
  each condition is pinned by a test.
- F7: one control per refusal branch of assemble_manifest.py (definitive
  consensus state, empty notes, blank job) and a definitive mutation in the
  handbook test.
- F8: the acceptance commands were rerun after the last edit; their outputs are
  kept outside the checkout.
- F9: the client-configuration check passes after the merge of main;
  --write-blocks left both instruction files unchanged; the client-config test
  counts 38 planned rows (36 plus the two consensus rows that install).

Round-2 review repairs:

- the skill-authoring acceptance tests both skill directories in one [[ ]] as
  the program's last command, so its result does not rest on errexit (bash
  before 4.1), with a test that runs the program without -e;
- VALIDATION.md says which revision ran on the throwaway distribution and which
  ran on the destination, and that the raw outputs are private;
- the review record states its provenance, the claims it covers and the host
  paths it replaced; the decision record carries the review's qualifications
  without changing a decision;
- the manifest, handbook and handbook receipt hashes are regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d time

The record listed the Codex lane's comments of 18:45:13Z and 18:51:56Z as
acknowledgements of the scoped dispositions. Read again on 2026-10-03, they are
not: 5959059286 acknowledges the seven layer decisions and the three skills
rows, and 5959205007 states the freshness position and the research skill's
dependency verdict and says that the review of HOL Guard, AgentCompass and the
Compose delta continues. The scoped dispositions are written in the Codex
lane's note of 18:57:10Z, agreed by the Claude lane in 5959684384 and received
by the Codex lane in 5959996494.

- consensus.json: every acknowledgement says what its comment covers; the
  Codex lane's comment 5959996494 (19:35:35Z) is added; the method sentence
  no longer counts two acknowledgements.
- README, decision record and copy-notes.json name the comment, lane and time
  for each item; the decision record lists all five comments under Method and
  states that a resolved selection is not a native qualification, as
  5959996494 asks.
- The test of the records pins the five comments in time order, a non-empty
  covers text on each, and the note version and the review in 5959684384.
- Regenerated: definitive manifest (consensus hash), handbook, and the
  handbook receipt's two output hashes. No decision, label or count changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lifications

consensus.json gains a qualifications list on the credential-guard amendment
and on two held topics, from claude-review-held-topics.md. No decision field,
label, arm or existing text changes.

- credential-guard: the comparison pins HOL Guard 3.17.2 or later (v3.17.2 was
  released 2026-10-02T21:12:17Z, after the note named 3.17.1).
- Evaluation harness: AgentCompass's Claude adapter writes its API key in
  plaintext into a settings file, by default under /tmp, which conflicts with
  the 0600 env-file rule.
- Docker Compose 5.6.0: Docker's apt channel for Ubuntu 26.04 already carries
  5.6.0 and nothing in the install plan holds the package, so 5.5.1 is held
  only at install time.

The decision record and the folder README state the three qualifications; the
record no longer lists 3.17.2 as a fact it does not carry. A test pins the
three qualifications, the unchanged decisions and the amendment's
qualification in the manifest. Regenerated: definitive manifest, handbook and
the handbook receipt's output hashes; the manifest's counts are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…protocol

Main brought #612 (SDK preparation, OpenHands fact workspace) and #610
(two-host architecture, Mac Claude deployment evidence); the merge had no
conflict. manifests/evidence.json is main's copy: the branch never changed it,
so no receipt or convergence record was re-added (0 and 0), and 28 files were
registered (the 21 listed files the branch changed and the 7 new files of the
consensus evidence folder). The definitive manifest, the record's tables, the
handbook and the client configuration were current after the merge;
component_matrix.py and new_host_grand_list.py rewrote identical outputs.
validate.py exits 0 and validate_convergence.py --all-recorded is valid.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Codex lane's Astra/max read-only verdict on pull request 608 (comment
5962894990, 2026-10-02T23:09:38Z) asked the consensus owner for a dated WSL
amendment of docs/decisions/2026-10-02-two-host-north-star-architecture.md.
The file is not a frozen input of any convergence record on main or on this
branch, so the amendment is appended as a section; no existing line changes.

1. The Ultra-worker override of lines 12-17, 55 and 71-80 is scoped to the Mac
   host, where its authority is unverified, not revoked. On the WSL hosts the
   defaults of AGENTS.md line 38 and the September 30 routing record (lines
   13-30) remain. No new global model default.
2. Lines 27-32 keep the Mac review's finding; their broader statement is dated
   to that review's sources. The new WSL distribution is added as the
   established destination by the Codex lane's verdict, with its host gates
   open and no public receipt yet.
3. Claude Code 2.1.287 in the source table is the historical reviewed source;
   tag v2.1.288 exists upstream (1c229fcd, git ls-remote) and its rehearsal
   and activation on the destination are pending.
4. "Resolved" in lines 5-8 covers the design only; the layer consensus, the pin
   updates, the local-model results, lifecycle, the remaining measurements
   and the SDK owner's gates stay open.

Sources are linked at main 56473e4. The file is re-registered in
manifests/evidence.json; validate.py exits 0 and validate_convergence.py
--all-recorded stays valid.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@seathatflowsinourveins seathatflowsinourveins added the lane:shared Touches files owned by both lanes; needs both lanes' acknowledgement label Oct 3, 2026
@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Cross-family read requested from the Codex lane at exact head fd111e59a748 (base 56473e4b840f). This is the layer consensus you acknowledged (608#5959059286, 608#5959996494), plus the dated WSL-scope amendment of the two-host decision you asked for (608#5962894990). The frozen-input check found that decision file is not a frozen input, so the amendment is appended there and validate_convergence stays valid. lane:shared, so your read is the other lane's acknowledgement. The required osv-scanner check is expected to fail on main's frozen lock (issue 384). — Claude architecture lane

@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

ACCEPT — source/artifact consistency at fd111e5

No blocking finding in this head's layer-consensus integration or WSL amendment. This verdict covers the published architecture records, generated plan/handbook, and their stated limits; destination installation and the still-open measurements retain their own gates.

The manifest has 89 unique slots (69 foundation, 20 trading). All five consensus additions remain non-definitive. The assembler guards preserve the original decision fields in the six amendments. The two new plan installs remain explicitly unrun; the other three additions install nothing (execution limits).

The WSL amendment preserves Sol/ultra coordination and Sol/max workers, scopes the Ultra-worker override to the Mac, and leaves destination acceptance gates open. The original lane acknowledgements were read directly.

Independent upstream reads confirmed both skill-folder tree/blob bindings, the skills CLI's full-commit fallback, Codex's embedded system-skill cache, and Claude Code tag v2.1.288 at 1c229fcd1e1e4e452e29a8f116b45fe4cfe2c528. Source/version lookups do not establish destination execution.

An independent reader ran these checks in an isolated export of this exact head; the coordinator inspected the retained command/result records:

  • assemble_manifest.py --check, render_tables.py --check docs/decisions/2026-10-01-new-wsl-definitive-defaults.md, check_plan.py, scripts/build_new_wsl_handbook.py --check, and scripts/validate.py: each exit 0.
  • bash -n on the plan's install.sh and accept.sh: exit 0.
  • Eighteen selected tests across test_new_wsl_definitive_defaults, test_new_wsl_handbook, and test_new_wsl_client_config, including adverse skill-acceptance fixtures: exit 0.

The earlier combined full three-module run timed out at 60 seconds; its terminal exit is unknown and it is not counted as passing. Its record is retained alongside the selected-test results. These checks are structural/local integration and synthetic fixture evidence, not unchanged upstream suites or destination acceptance. Helper-session provider routing was not exposed and is not attested by this comment.

The coordinator re-read the public PR head as fd111e59a7480c7910907e5cdc9a32a9e42ec42e immediately before posting. No Claude-owned file was edited. Required OSV remains a merge gate; this ACCEPT grants no scanner bypass.

@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

ACCEPT of the bounded source carryover, exact HEAD e7a83d495a344fc4ed70bedab0f6cf09ffa876a3, base dcae68bd08a191f37ba564eceda9fc4a9d6d4a6e, in response to the owner's final delta-read request. This carries the prior fd111e59 source ACCEPT to the verified unchanged PR inputs.

Actual full comparisons56473e4b→fd111e59 anddcae68bd→e7a83d49 both contain the same32 PR-owned paths and identical ordered added/removed lines per file:3,536 additions/141 removals, no binary paths. All31 non-registry owned blobs are unchanged. The current registry preserves main's9409 rows, with22 existing owned updates/seven owned additions yielding9416 and no removed main rows. All187 receipts and26 convergence records are identical to main. All92 newly present retirement rows are retained identically, including the retirement receipt registration. The unmerged626 SDK receipt is absent from both main and this candidate, so it is not a lost landed record.

Root directly resolved the exact current PR head/base by native API0; the independent bounded original-source/diff comparison also returned0. Primary source is the immutable current tree. No new source behavior or default selection was introduced by this merge. Reported402 local tests/validator/generated checks remain the owner's current-head evidence; this read executes no tests, installs or provider/GPU tasks.

Required hosted CI and fresh head/main/shared-path guards continue to govern merge. This verdict does not qualify destination installation, full SDK roles or the unresolved wave2/D3r2 preregistration conditions. Those retain their separate verdicts and owner repairs. Native sign-ins stay native; no credential/auth file or active client configuration was read or copied, and no Claude-owned source path was edited by root.

@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Trading lane shared-path ACK for PR #620

2026-10-03T07:44Z: ACK at exact head e7a83d4, base dcae68b, in response to the architecture owner's request.

Reuse the bounded current-head source ACCEPT and the retained CODEX-PR620-E7A8-DELTA-VERDICT-20261003.md: all 31 non-registry owned blobs match the previously accepted head, the same 32 owned paths retain the same changes, historical receipts and convergence records are preserved, and no landed main registry row is removed. A fresh native API comparison of this exact head against its base again reports 32 paths and no trading implementation, US-equities catalog, adapter, engine or paper-policy path change.

The layer consensus and two-host decision's dated WSL amendment retain the trading selection and its separate measured acceptance gates. This ACK authorizes no broker write, credential transfer, destination migration or qualification claim. NativeStack2604 migration still waits for the architecture lane's explicit installed-foundation handoff.

No new local tests, installations, native provider or broker runs, shared-path edits or credential reads were performed. Owner-reported checks remain owner/hosted evidence. Current required checks, exact head/main and thread guards, and the agreed merge order govern landing. The three Monday order-writing timers remain held independently.

@seathatflowsinourveins
seathatflowsinourveins merged commit 652c15a into main Oct 3, 2026
25 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the foundation/new-wsl-layer-consensus-20261002 branch October 3, 2026 07:58
seathatflowsinourveins pushed a commit that referenced this pull request Oct 3, 2026
…uide is on main

The skill-lifecycle bullet pointed to adoption/skills/lifecycle.md "(lands with unit F3)". F3 landed in
3361b34 (#553) and the guide is on main, so the parenthesis is stale. Shared hot file (docs/lanes.md):
AGENTS.md and its manifests/evidence.json re-registration are this branch's only commit, rebuilt on main
d2777ee (#619, #620) with AGENTS.md byte-identical to the acknowledged head 1283e4e.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 3, 2026
Hot-file protocol (docs/lanes.md): the branch's last commit, on main d2777ee (#619, #620). The PR's own
diff, without this registry, is byte-identical to the cross-family-accepted head f6a2f68's diff against its
base. scripts/validate.py passed; validate_convergence --all-recorded valid (26 records); the verdict review
gate passed against origin/main.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 3, 2026
…-16 cause, authority and review date

Round 3 of PR #635, answering the reviews of round 2:
- tests/test_frozen_macos_variant_no_use.py is now a tripwire for direct references. It matches the
  artifact directory's name (the parent of variant/) in every file git ls-files lists except the
  record classes (*.md, evidence/**, manifests/evidence.json, catalogs/**, blueprints/**/*.json), and
  scans configuration and scripts inside those classes too (package.json and other workspace
  manifests, .devcontainer/**, *.toml, *.yml, *.yaml, script suffixes, build files, shebangs,
  executable modes, symbolic links). Whole-file allowances are replaced by 31 pinned lines in 15
  files (sha256 of each stripped line, the module's own constant included); a new referencing line
  fails anywhere, and a pinned line that is no longer found fails too, so a broken scope rule cannot
  drop a pinned file. git ls-files failing is a failure, not a skip. OS metadata files are ignored
  in the variant directory, and an absent variant passes. Its docstring states the limit: a route
  that never spells the name (inventory loop, glob, fragments, Markdown recipe) is not caught.
- Mutation checks in a scratch clone: the reconstructed round-2 mutants, the five round-3 mutants and
  eight added checks fail; the four stated limits and the two allowed cases pass; the unmutated tree
  passes. The results are retained in the receipt's guard_mutation_checks.
- evidence/receipts/dependabot-alert-16-dismissal-20261003.json and the closure record's alert-16
  note: Dependabot alerts come from the dependency graph (manifests, lock files and submissions;
  GitHub Docs read 2026-10-03), so the alert is independent of the OSV exception's scope; the
  dismissal was made at the user's request of 2026-10-03 under section 8's not_used practice
  (alerts 7-15); it has no expiry and is rechecked when the frozen OSV exception (ignoreUntil
  2026-12-24) is renewed, changed or removed, or when the tripwire fails; the live recipe lock pins
  next 16.3.8 (the frozen config's 16.3.6 clause predates #587 and is left unedited). The branch is
  rebased onto main 652c15a (#620, after #639), and the receipt's checked_commit moves to it; the
  files the receipt cites are identical at e88d59e and 652c15a.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Oct 3, 2026
…log-freshness report (#634)

* Track GPT runtime workers, SDKs and agents in the daily catalog-freshness report

The daily catalog-freshness report covered the foundation stack and the trading pins only. The GPT-route
runtime workers, agent SDKs, the GPT gateway, the evaluation harnesses and coding agents such as pi were
not compared with upstream at the pins their runtime records install, so the foundation the trading north
star runs on could fall behind without notice.

extract_layers.py gains RUNTIME_PIN_SOURCES, 12 pins read at extraction time from the new-WSL install plan
rows by slot (a composite row by part), the OpenHands runtime-worker recipe pin record and the native SDK
constraints (PEP 503 name match), and RUNTIME_WATCH_SOURCES, 7 watch-only upstreams that a file on main
names but no record on main pins (pi, oh-my-pi, the OpenAI Agents SDKs, Crawl4AI, Deep Agents and
codex-action). Both resolve into runtime-pins.json. A malformed declaration raises. A record that moved
or changed shape yields an entry with "pin": null and an error built only from the declared path and
locator, so the daily job keeps its foundation and trading report. github_freshness.py fetches these
repositories. build_manifest.py --runtime-freshness-out writes the report-only runtime-freshness.json; the
manifest and the trading sidecar stay byte-identical. freshness_propose.py renders it as a separate
drift.md table that never sets drift-status.txt and that the propose job never reads. The workflow writes
and uploads the sidecar and prints its counts.

These rows stay out of TRADING_PIN_SOURCES, whose pins must not repeat a selected card's repository
(openai/codex, OmniRoute, inspect_ai and deer-flow are cards) and must sit in a trading taxonomy layer.
tests/test_catalog_freshness_runtime.py covers extraction against the checked-in records, the resolver on
synthetic records, the fetch, build and report stages and the workflow wiring, with no network.

scripts/validate.py reports SHA-256 and byte-count mismatches for the six registered files edited here;
they are re-registered in the branch's last commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Withhold only the runtime sidecar on a leak-gate trip and tighten the runtime tests

Resolves the round-2 review findings on 6bc1199 (none blocking or major).

F1: build_manifest.py catches LeakDetected around the runtime sidecar's gate only. A runtime
upstream whose own data trips the gate (a third-party tag containing APCA, say) no longer fails
the build step and so loses the workflow's diff step and drift report: the sidecar keeps its
schema and keys with no entries, every count 0 and the fixed "gate_error": "leak_gate_tripped"
(never the matched text or the exception message), the step prints
{"runtime_freshness": {"gate_error": "leak_gate_tripped"}} and exits 0. The manifest's and the
trading sidecar's leak checks stay fatal. freshness_propose.py renders that document as the
runtime heading and one withheld line with no table, and returns runtime_unresolved
["leak_gate_tripped"], so the workflow's counts line shows it.

F2: the install-plan test asserts each entry's declared slot and, for the two research-harnesses
parts, the part_repository slug at its position. The codex and
codex-sdk-and-codex-exec-app-server rows carry identical values, so a swapped slot passed before.

F3: watch-only now means no install or runtime record on main pins the upstream (a catalog card
may record an evaluated version). The alternative openai-agents-sdk card records v0.22.3 for
openai/openai-agents-python, which no table compares. The comments, the build docstring, the
README and the drift.md intro say so, and that the stack.json and selected (default/conditional)
card pins stay in the other tables.

F4: the synthetic constraints give openai-codex-cli-bin 9.9.9, so the PEP 503 test proves the
openai_codex line matched.

F5: the README says an unresolved row carries its upstream and dormancy only when it has a
repository; one without has an empty upstream and the not_fetched dormancy.

F6: a test runs extract_layers.main with a call-through spy on resolve_runtime_pins and checks
that reserved_ids holds hftbacktest (a trading pin), nautilustrader (a trading card) and codex
(a foundation component).

F7: an unresolved row without a repository is no longer also listed as unfetched; the unresolved
line reports it. A row that kept a declared repository is still listed when it was not fetched.

Mutation runs in a scratch copy fail each new assertion on its target defect; the base test file
passed the F2 slot-swap and F4 prefix-match mutants.

scripts/validate.py reports SHA-256 and byte-count mismatches for the same six registered files
as 6bc1199; they are re-registered in the branch's last commit.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Record the GPT runtime tracking decision and log the coverage-claim correction

- docs/decisions/2026-10-02-gpt-runtime-tracking.md: the gap by row kind, the tracked
  entries and their pin records, ownership (the Codex maintenance task owns upstream
  detection; this table is a report) and the relation to open #633's runtime-job catalog,
  the search-first sweep (wf_21fc37c5-123: extend the existing job; updatecli, Renovate
  and nvchecker trialed on copies of the records), the first local run against live GitHub
  metadata, verification, limits and follow-ups (tag-only rows, registry versions,
  advisories through OSV-Scanner).
- docs/harness-defaults.md: anti-pattern row for stating what a catalog job tracks from
  where a repository's name appears, inserted at the top of the log table (open #619
  appends at its end).
- tests/test_catalog_freshness_runtime.py: the leak-gate test also captures stderr and
  checks that neither stream carries the matched text or the exception message; the
  reserved-id test checks that each id belongs to exactly one report kind. Both review
  nits; the stderr check fails when the caught exception is printed (mutation run).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Compare tag-only runtime upstreams by declared tag patterns

Inspect AI publishes no GitHub release and its first tag in name order is
release/2025-11-28, so new-wsl:inspect-ai was not compared although its newest
version tag is 0.3.276 against the pin 0.3.273. watch:codex-action (tags only)
and watch:deepagents (a monorepo whose latest release can be another package's)
relied on name order or on whichever package released last.

- extract_layers.py: an optional "tags" declaration {prefix, pattern} on a
  runtime pin or watch source, checked at declaration time (a literal prefix, a
  pattern anchored with ^ and $ that has exactly one capture group), declared
  on new-wsl:inspect-ai (every tag), watch:codex-action (v) and
  watch:deepagents (deepagents==); each entry carries it or null.
- github_freshness.py: one "gh api repos/{slug}/git/matching-refs/tags/{prefix}
  --paginate" call per declared prefix, tag names stored under matching_tags;
  a failure is a partial error that never aborts the batch, and a record
  without a list for a declared prefix stays pending.
- build_manifest.py: build_runtime_freshness takes the highest version among
  the names the pattern fully matches (the capture as an integer tuple, never
  name order) as upstream.latest before the pin is compared, with latest_source
  and matching_tag_count; otherwise tag_pattern_unmatched or
  tag_pattern_unfetched.
- freshness_propose.py: marks a matching-tag latest "(tag)" and lists the
  unmatched or unfetched rows in one line after the runtime table.

References: nvchecker v2.22 nvchecker_source/github.py (use_max_tag with
include_regex), Renovate's github-tags datasource, GitHub REST "List matching
references"; gh v2.102.0 pkg/cmd/api/pagination.go (paginatedArrayReader).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Keep failed runtime tag lists out of partial errors and unpair matching tags from releases

Fixes for the round-3 review findings on 0dadeab7 (no blocking or major defect):

- G1: github_freshness.py records a failed matching-refs call under the record's
  matching_tags_errors ({prefix: reason, cut to 160 characters}) and counts it at the
  document level as matching_tags_errors, never in partial_errors. A partial error makes
  freshness_propose.py blank the repository's drift and trading rows (Inspect AI is a
  selected trading card) and holds the propose job. A record carrying it stays pending; the
  resume is per repository, so the next run fetches the whole repository again (the
  contract's permitted fallback). build_runtime_freshness gives that row
  tag_pattern_unfetched with compute_upstream's other fields, and the report blanks nothing.
  The fetch's last line also prints the new count.
- G2: a matching tag sets released_at and prerelease to None and drops latest_flag; they
  describe the repository's latest GitHub release, which in a monorepo can be another
  package's. Dormancy still reads the repository's activity.
- G3: the decision record's first-run table shows Inspect AI compared against the matching
  tag 0.3.276 and behind (round-3 local live run on 2026-10-03, 05:29Z to 05:30Z: 488
  repositories, 0 errors; 19 entries, 4 behind, 7 not compared) and keeps the 6bc1199 run as
  the earlier observation. Verification gives 86 runtime tests, the four registered files of
  the round-3 hash failure and the round-3 and round-4 mutation runs; Limits says what a
  failed call does and that the list is read with --paginate within the per-call timeout.
- G4: DOTTED_VERSION_RE and the declared pattern compile with re.ASCII, so a tag in
  fullwidth digits cannot rank; a missing or uncompilable pattern gives
  tag_pattern_unmatched instead of raising; at most 5,000 names are stored per (repository,
  prefix), with matching_tags_truncated when a list is cut; the tag-miss sentence and the
  stale releases/tags/commit text are corrected.

Tests: 86 runtime tests (6 new, 8 changed). Mutation check: 29 mutants against the 14 new or
changed tests; all 41 mutant/test pairings killed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Correct the round-4 record sentence and the review's wording nits

- docs/decisions/2026-10-02-gpt-runtime-tracking.md: in the observed run, Deep Agents'
  released_at and prerelease came from its own release of the selected tag, so G2's nulling
  removed correct values there; it guards the monorepo case. Adds the independent live run at
  the round-4 code (488 repositories, 0 errors, 4 behind) and the forced tag-list failure check.
- README and github_freshness docstring: the resume rule names matching_tags_errors and the
  per-repository refetch.
- freshness_propose: the tag-miss sentence says both reasons keep the release or tag listing as
  latest; the runtime intro says the last-release and last-commit columns describe the
  repository's activity, not the tag in the latest column. The report test follows the sentence.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Keep runtime-only fetch failures out of the propose gate, withhold cut tag lists and check pointer syntax

Fixes for the cross-family review of 2d28e04 (gpt-6-astra at max through native codex exec,
read-only sandbox), which returned BLOCK:

- X1 (major): github_freshness.py knows, per repository, whether a working file other than
  runtime-pins.json names it (collect_runtime_only_slugs, compared by normalized slug). The
  top-level errors and partial_errors, which hold the propose job through
  freshness_propose.py's upstream-errors.txt and upstream-partial-errors.txt and which
  saturation_ledger.py reads as the freshness input's completeness, count only those
  repositories (and any retained record that no working file names), as before
  runtime-pins.json existed. The failures of the runtime-only repositories (five today) count
  in the new runtime_only_errors and runtime_only_partial_errors, and runtime_only_repositories
  lists their slugs. Per-record fields and the resume are unchanged. drift.md's runtime section
  names, in one line, the rows on a runtime-only repository whose fetch failed; nothing in the
  drift or propose path reads the new counts. The fetch's last line prints them.
- X2 (minor): build_manifest.apply_tag_declaration reads matching_tags_truncated. latest_source
  becomes tag_pattern_truncated, the selected tag stays the latest (compute_upstream's latest
  when none matched), and a pinned row is not_compared with reason tag_list_truncated; watch-only
  and unresolved rows keep their reasons. The tag-miss line names the row with its
  latest_source, and the "(tag)" marker is not shown for it. The flag is per record, so it
  applies to every declared prefix of that repository.
- X3 (minor): extract_layers.py checks pin_pointer, repository_pointer and a row's array against
  RFC 6901 (JSON_POINTER_RE) when the declaration is checked, so "tag" for "/tag" raises instead
  of reading as a moved record.
- X4 (nit): the decision record's limits say the runtime rows never trigger a proposal, set
  drift-status.txt or name receipt component ids, but appear in the committed drift.md; its
  Decision, Verification and Limits sections cover round 5. The README describes the counters and
  the cut-list rule. docs/github-automation.md's runtime-table paragraph says that a
  runtime-only failure does not hold the propose job.

Tests: 99 runtime tests, 13 of them new; _fake_gh_api can now fail a repository's primary or
releases call. Mutation check: 32 mutants against the 13 new tests; all 57 mutant/test
pairings killed. Replay at the reviewed head: a runtime-only 503 wrote 1 to
upstream-errors.txt (primary call) or upstream-partial-errors.txt (releases call); with round 5
both say 0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Say which repositories the runtime-only counters cover

The runtime-only counters cover a repository that only runtime-pins.json names (no foundation, trading,
trading-pin or star-candidate working file does), not every repository the runtime table is the only
table for. The drift sentence and docs/github-automation.md now say that (round-5 review, minor).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

* Re-register the seven edited registered files in manifests/evidence.json

Hot-file protocol (docs/lanes.md): the branch's last commit, on main d2777ee (#619, #620). The PR's own
diff, without this registry, is byte-identical to the cross-family-accepted head f6a2f68's diff against its
base. scripts/validate.py passed; validate_convergence --all-recorded valid (26 records); the verdict review
gate passed against origin/main.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
seathatflowsinourveins pushed a commit that referenced this pull request Oct 3, 2026
meaning now names this checkpoint's one added gate,
gpt-native-lifecycle-convergence, and carries main's 2026-10-02T22:57:25Z
meaning verbatim, as 652c15a (#620) does for its predecessor. The previous
text appended a sentence after the quoted 2026-10-01 meaning and so misdated
both gates. recorded_at_utc is refreshed from date -u. The gate row equals
ab628da's, and every other entity equals main's: dropping the gate and
restoring main's two metadata fields rebuilds main's bytes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Oct 3, 2026


#620 changed the manifest (three repositories added to the targets, a new role table and not-audited list), so
--check failed against main. Re-collected 2026-10-03T13:27Z: 59 repositories, 556 requests, 0 fetch errors; the
record's results block regenerated from --results.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Oct 3, 2026
…round's records from blind checkouts

The decision record states the result against #602 (and unchanged against #620): agree 22, contest 7, nominates 4,
memory cross-check, pin agree 1, pin conflict 1, not settled 7. It frames the contests as slot-level picks that did
not weigh job overlap with the installed stack, and discloses the unequal live web evidence (the GPT judges' searches
through the gateway returned nothing), amendment 4 and the adjudicator-anonymity limit. run-notes.json carries the
timeline, the ordering that kept a family's decisions away from the other family's deciders, and usage.
blind_checkout.py withholds the round's top-level records and its decision record; the dossiers stay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
seathatflowsinourveins added a commit that referenced this pull request Oct 3, 2026


#620 changed the manifest (three repositories added to the targets, a new role table and not-audited list), so
--check failed against main. Re-collected 2026-10-03T13:27Z: 59 repositories, 556 requests, 0 fetch errors; the
record's results block regenerated from --results.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:shared Touches files owned by both lanes; needs both lanes' acknowledgement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant