Skip to content

IBKR paper orders on the destination engine: NautilusTrader 2.0.0rc5 C1-C4 passed (runner around upstream exec_tester; runner-enforced notional bound, #4946) - #754

Open
seathatflowsinourveins wants to merge 36 commits into
mainfrom
trading/ibkr-paper-orders-rc5-20261005
Open

seathatflowsinourveins wants to merge 36 commits into
mainfrom
trading/ibkr-paper-orders-rc5-20261005

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Oct 5, 2026 •

Copy link
Copy Markdown
Owner

Scope

  • What this PR changes: a bounded IBKR paper C1-C4 order trial on the selected destination engine, NautilusTrader 2.0.0rc5, through its own IB adapter. It lives at blueprints/us-equities/engine-nautilus/ibkr-paper-orders-rc5/, and contains:
    • run.py, a thin runner around upstream's examples/live/interactive_brokers/exec_tester.py, with safety.py (account lease and order journal), plan.json, the README and its tests;
    • three retained native run receipts: the passing run 3 and two earlier failed attempts;
    • the archived harness bytes for every receipt, so that each harness_sha256 resolves: evidence/harness/run.py.{188e0078fc8f,67429251370f,5a061ff06f41} (r2, r3, r4);
    • the #4946 entry and re-run trigger in catalogs/us-equities/runtime-target.json;
    • the registry, in the last commit (hot-file protocol).
  • Merge of main ecfa11276: the registry united at the entry level, six alpaca-py pin_source citations remapped in the Foundation catalog (158 → 159, after this PR's #4946 entry shifted the line), and the new-WSL handbook regenerated.
  • Base: main ecfa112764c664d35377dd66b8cfcb67e5a94d60. Head: 3e23f71abf3ae29c63483ef35c8506b8347e2c56.
  • Lane: lane:shared. The merge edits a Foundation-owned catalog (docs/lanes.md:24,145-150), so it needs both the trading and the Foundation acknowledgement.

SOTA sources

  • nautechsystems/nautilus_trader v2.0.0rc5 (commit 1b0a49d2):
    • examples/live/interactive_brokers/exec_tester.py and _common.py;
    • the built-in ExecTester (nautilus_trader.testkit.ExecTesterConfig);
    • nautilus_trader.live.LiveNode;
    • the IB data and execution client factories.
  • Source reads at the tag:
    • crates/risk/src/engine/mod.rs L1203-1233 against L1597-1603: the notional check is skipped when account_for_venue(SMART) is None;
    • crates/adapters/interactive_brokers/src/execution/core_orders.rs L32-47: post-only orders are denied;
    • crates/live/src/python/node.rs L912: the cache is a live view;
    • crates/model/src/orders/market.rs L108 and L533-558: a materialized external order is rebuilt with reconciliation=false.
  • nautilus_trader#4946: closed. Its fix ed6fc8bf4 is in v2.0.0rc6 (published 2026-10-05), not in rc5.
  • The official IB TWS API Python client 10.45.1 (PyPI nautilus-ibapi), with protobuf 5.29.6, provides the client-92 pre-check, quote admission and flat proof.
  • The NMS Limit Up-Limit Down plan's Tier 1 price bands, for the admission stress and the closing-period cutoff.

Deviations from upstream's example (all in the README)

  • Risk engine. It stays ON with a USD 1,000 per-order cap, though that cap is not enforced on this route (#4946). The bound is held by:
    • qty=1;
    • quote admission at ask × 1.05 + 10 ≤ 1000, so 942.85 admits and 942.86 refuses (not requested at all on a preliminary refusal);
    • a round-trip bound of spread + 2.04 ≤ 5 USD (two per-order commission allowances plus a USD 0.02 margin each);
    • no run whose order and close window reaches the closing period, which starts at the liquid session end minus 25 minutes, so the latest start is 15:29 ET on a normal day and 12:29 ET on a 13:00 close.
  • Post-only off. rc5's IB adapter denies post-only orders.
  • Resting limit at half the admitted bid. A fill there would be a failed case, and close-on-stop stays at one share.
  • Stop and cancels. Orders are cancelled individually on stop. The stop is deferred while an own order is in flight, which now counts from OrderInitialized.
  • Ownership. Cases are mapped only from this run's own orders, by generated identity or by submission. An own order that later receives a reconciliation event stays owned, and its cases fail. Only orders this run does not own go to reconciled_external.
  • Account lease. An exclusive host-local flock lease, keyed by account hash, runs from before the pre-check through the flat proof. It is cooperative: it excludes only runs that use the same lock path. The receipt records only acquired.
  • Order journal. An append-only, fsync'd private journal, refused if it already exists for the run id. Residual: no durable intent before the venue send, because rc5's Python surface exposes no pre-send hook.
  • Refusals before admission never overwrite an existing receipt; they are created only if absent.
  • The parent keeps the child's evidence only when the per-run nonce matches.
  • TWS_ACCOUNT is required, and private output must sit outside the repository.

Evidence-class table

Claim Evidence class Receipt
Run 3 (r4 harness 5a061ff06f41): C1-C4 passed; net −2.04 USD; flat 0/0 native_paper evidence/receipt-20261005-passed.json (18:55:11-18:56:01Z, exit 0)
Run 2 (r3 harness): reconciled same-day 1.231 fills tripped the case mapping; no order sent; flat native_paper (failed, retained) evidence/receipt-20261005-run2-failed.json
Run 1 (r2 harness): quote admission, in a separate client-92 session, reached its 30 s deadline; no node, no order native_paper (not_connected, retained) evidence/receipt-20261005-run1-not-connected.json
The runner at head (run.py af6c817e7393…, rounds r5-r8) offline tests only; no native run yet tests/test_ibkr_paper_orders_rc5.py (91 tests)
Acceptance steps 3-4 (reconnect with an open order, restart reconciliation, kill switch) not exercised blocked upstream (#5007, #5057, #5060)

Local commands run (at 3e23f71abf3ae29c63483ef35c8506b8347e2c56)

$ <rc5 venv>/bin/python -m unittest tests.test_ibkr_paper_orders_rc5        OK (91), no skips
$ python3 -m unittest tests.test_architecture_pin_source tests.test_catalogs \
    tests.test_new_wsl_handbook tests.test_stack_lifecycle                   OK
$ python3 scripts/validate.py                                                exit 0
$ python3 scripts/evidence_manifest.py --check                               exit 0
$ python3 scripts/build_new_wsl_handbook.py --check                          exit 0
$ git diff --check                                                           exit 0

Review

  • Build. GPT-6.1 Sol built it through the packaged SDK worker, in rounds r1-r8. The coordinator (Claude session 5f) committed each round and ran the native trial.
  • Cross-family reads:
    • Claude Opus, per round:
      • r1 FINDINGS: 1 P1 and 9 P2.
      • r2 to r4: ACCEPT with P2s, each fixed in the next round.
      • r5 FINDINGS: P1 (a reversible account hash in the receipt) plus 4 P2.
      • r6 ACCEPT, with 4 P3s fixed in r7.
      • The full-scope read at 7ee79f24f found FINDINGS:
        • P1: the r4 harness was not archived; it is now archived.
        • P2: the current runner's lack of a native run was not disclosed; it now is.
        • P2: the lane label; now lane:shared.
        • 3 code P3s, fixed in r8 (early-close cutoff, null quote evidence on refusal, robust receipt adoption).
    • GPT-6.1 Sol reads of r1 and r2.
  • Review threads. The five chatgpt-codex-connector threads are answered: four fixed in r5-r6, and one outdated.

Recorded residuals

  • No pre-venue journal barrier. rc5's Python surface exposes no pre-send hook (upstream's native BusTap is not exposed).
  • Host-local, cooperative lease. The frozen 1.231 harness does not take it.
  • The LULD stress is a bound, not a guarantee, against trading pauses and reopen auctions.
  • Acceptance steps 3-4 remain blocked upstream, and the current runner has no native run. The next native run qualifies it.

Checklist

  • No GitHub Actions or workflow changes.
  • No secrets printed, logged or committed. The receipts carry no account id or hash of one. The unredacted Nautilus console stays private.
  • Paper only. No live endpoint, mode or key is touched.

🤖 Generated with Claude Code

Scout and others added 15 commits October 5, 2026 12:28
…0.0rc5 runner around upstream's exec_tester example (r1; refuses before connecting)

blueprints/us-equities/engine-nautilus/ibkr-paper-orders-rc5/ is a bounded C1-C4 paper order trial for the selected
destination engine. It is built from nautechsystems/nautilus_trader v2.0.0rc5 (1b0a49d2),
examples/live/interactive_brokers/exec_tester.py and _common.py, using the built-in ExecTester strategy.

Deviations from the example, each documented in the README:
- SPY on loopback paper ports, with node client 91 and checker client 92.
- The account comes from an official-ibapi pre-check and is held in memory, not taken from TWS_ACCOUNT.
- Risk is not bypassed; a 1000 USD cap is configured, with a 6-per-7-minutes submit rate.
- REALTIME quotes; 1-share MARKET IOC entry; post-only limit buys only, GTD 7 minutes, no modify.
- Native cancel and close on stop; a hosted run_async with a deadline and signal handling; an independent flat
  proof; native logging off.

Round 1 found from source that rc5's risk engine returns before the notional check when no account is registered
for the SMART venue (crates/risk/src/engine/mod.rs; nautechsystems/nautilus_trader#4946 is closed and fixed on
develop, but in no release). The configured cap is therefore not enforced on this route, and the runner currently
refuses before connecting (refused_unenforced_notional, exit 3).

Checks: 37 offline tests OK (rc5 venv; 2 skipped under plain python3); validate.py and evidence_manifest --check
exit 0; the plan-only run shows the refusal without connecting.

Built by GPT-6.1 Sol through the packaged SDK worker (rounds rc5-orders-r1 and r1b); committed by the coordinator.

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>
…bound, with the review's P1 and P2s fixed

The Claude Opus review confirmed from rc5 source that the IB account's venue is IB while SPY=STK.SMART carries SMART.
The risk engine's account_for_venue(SMART) is None, so it returns before the notional check (#4946). The command
center decided the trial runs under a runner-enforced bound instead of refusing. The receipt states exactly: "engine
notional cap configured, not enforced on this route (#4946, fixed on develop, unreleased); bound held by qty=1 and quote
admission". A dated note beside it records that v2.0.0rc6, published 2026-10-05, contains the fix; rc5 stays pinned.

- Quote admission (official ibapi, client 92): BidAsk tick-by-tick against reqCurrentTime. Stale, invalid and
  delayed quotes are refused, as are delayed codes 10089/10167 and delayed tick types. One share at the ask must fit
  the notional cap with headroom.
- P1: use_post_only=False. rc5's IB adapter denies every post-only submit; this is asserted against the installed
  ExecTesterConfig.
- The resting buy is placed at half the admitted bid: tob_offset_ticks = floor(0.5 x bid / 0.01). It is passed by
  stdin and validated child-side, so the resting order cannot fill and close-on-stop cannot exceed one share.
- use_individual_cancels_on_stop=True. A stop is deferred while any strategy order is in flight, bounded by
  node_stop_at.
- Shutdown: polling exceptions stop and await the node; each final step is independent; handle.stop() runs once.
- Flat-proof causes keep their original status. An observed bound breach maps to failed.
- The node child's stdout and stderr go to DEVNULL, and RUST_LOG, NAUTILUS_LOG and TWS_ACCOUNT are removed from its
  environment.
- The node cache is a live view (crates/live/src/python/node.rs:912; crates/common/src/python/cache.rs:79), and
  orders are re-read each poll.
- catalogs/us-equities/runtime-target.json: #4946's state is refreshed, with a re-run trigger, beside #5007, #5057
  and #5060.

Checks: 52 offline tests OK (rc5 venv; 3 native checks skipped under plain python3); validate.py and
evidence_manifest --check exit 0; the plan-only run reports structural_validation without connecting.

Built by GPT-6.1 Sol through the packaged SDK worker (round rc5-orders-r2); committed by the coordinator.

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>
…ck and quote admission, per-stage diagnostics, and the pre-run read's P2s

Run 1 (17:40:15Z) ended not_connected, exit 2, with no node and no order. The flat pre-check on client 92 passed, then
quote admission opened a second client-92 connection and hit quote_check_deadline at its 30-second limit without
recording a stage.
- The flat pre-check and quote admission now share one client-92 session. A session proxy postpones the frozen
  checker's final disconnect until admission finishes, then closes the session and joins the reader within the
  unchanged deadline (official ibapi 10.45.1 client), so there is no reconnect.
- receipt.quote_admission records the last stage reached, total and per-stage elapsed times, and error and info
  entries with reqIds, codes and redacted text. A deadline exception keeps these fields.
- Non-terminal MARKET and IOC/FOK strategy orders stay in flight after acceptance until terminal, bounded by
  node_stop_at, including on the observer-exception path. The test fixtures carry order type and TIF.
- Only reqId-9202 errors, connectivity failures and delayed-data codes fail quote admission. Unrelated farm notices
  are info.
- A pre-node child refusal writes a sanitized refused_child_* status and reason before exit.

plan.json and the required receipt sentence are unchanged. Checks: 58 offline tests OK (rc5 venv; 3 native checks
skipped under plain python3); validate.py and evidence_manifest --check exit 0; --plan-only reports
structural_validation without connecting.

Built by GPT-6.1 Sol through the packaged SDK worker (round rc5-orders-r3); committed by the coordinator.

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>
…ecTester orders (run 2 tripped on reconciled same-day fills)

Run 2 (18:22:52Z) passed the shared-session quote admission and started the node. At startup, rc5's reconciliation
imported this account's 14:26Z fills from the 1.231 trial (BUY 772.93, SELL 772.90) as reconciliation=true orders,
which upstream's configuration claims through external_order_instrument_ids. The runner attributed them to C3 and C4,
and its reconciled-never-passes rule stopped the node before ExecTester sent anything. No order was sent, and the
flat proof passed.
- An in-memory ownership registry admits an order only when it has a matching client_order_id, the ExecTester
  strategy and trader identity, and non-reconciled OrderInitialized and OrderSubmitted events after node launch.
  Only owned orders feed cases, fills, the round trip, observed bounds and the deferred-stop in-flight check.
  Reconciliation events on owned orders still never pass.
- Other cache orders are recorded under reconciled_external with stable labels and sanitized details. They cannot
  change outcomes or stop the node.
- A regression replays run 2: historical fills present at start, then the run's own orders. It fails on r3's
  mapping and passes now. An asynchronous node replay and an installed-model check are added.
- From the r3 micro-read: pre_check.observed is deep-copied when run_check returns. Pre-check timeouts and exceptions
  report incomplete with a pre-check cause, with quote admission marked not_run.

plan.json, the upstream node and ExecTester configuration, and the receipt sentence are unchanged. Checks: 63 offline
tests OK; validate.py and evidence_manifest --check exit 0; --plan-only passes without connecting.

Built by GPT-6.1 Sol through the packaged SDK worker (round rc5-orders-r4); committed by the coordinator.

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>
…, with both failed attempts retained

The runner ran three times on 2026-10-05 from NativeStack against the paper Gateway that NativeStack2604 hosts. All
three runs used the same plan (24ffca56dfa7...).
- Run 1, 17:40Z, harness r2: not_connected, exit 2. Quote admission's second client-92 connect stalled, and the node
  never started. Fixed in r3.
- Run 2, 18:22Z, harness r3: failed, exit 1. Startup reconciliation imported the account's same-day 1.231 fills, and
  the case mapping attributed them to C3 and C4 before ExecTester sent anything. Fixed in r4.
- Run 3, 18:55Z, harness r4: PASSED, exit 0.
  - C1: a resting LIMIT BUY at half the bid (387.62), accepted.
  - C2: canceled.
  - C3: MARKET BUY, filled 775.26 (1.00 USD commission).
  - C4: MARKET SELL, filled 775.24 (1.02 USD).
  - Net -2.04 USD against the 5 USD bound; the client-92 flat proof found 0 positions and 0 open orders.
  - The engine notional cap is recorded as configured but not enforced on this route (#4946), with the bound held
    by qty=1 and quote admission.

Neither failed run sent an order, and both flat proofs ended clean. The three receipts are the harness's own sanitized
output; a scan found no account ids, user names, paths or IPv4 addresses. The run-1 and run-2 harness bytes are
archived under evidence/harness/, so every receipt's harness_sha256 resolves. The README gains the run note.

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 seathatflowsinourveins added the lane:trading Trading lane: sim, paper and live north star label Oct 5, 2026
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 5, 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-05T19:08:10.671605Z 5207cfb PR opened
ℹ️ 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: 5207cfba6a

ℹ️ 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 blueprints/us-equities/engine-nautilus/ibkr-paper-orders-rc5/run.py
Comment thread blueprints/us-equities/engine-nautilus/ibkr-paper-orders-rc5/run.py Outdated
Comment thread blueprints/us-equities/engine-nautilus/ibkr-paper-orders-rc5/README.md Outdated
Comment thread blueprints/us-equities/engine-nautilus/ibkr-paper-orders-rc5/run.py Outdated
Comment thread blueprints/us-equities/engine-nautilus/ibkr-paper-orders-rc5/run.py
Scout and others added 12 commits October 5, 2026 15:13
…events)

Fixes the GPT gate read's README findings. The run times now come from each receipt's started_at and ended_at,
truncated to the second (run 2 ended 18:23:42Z, run 3 18:56:01Z), and the convention is stated. The passed run's
reconciled_external entry is described as two orders represented by six events. The distribution names stay: they are
the repository's published host identifiers, used across its docs.

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>
…ders in flight, account writer lease, fsync'd order journal (review-thread P2s and the r4 residuals)

Addresses the five chatgpt-codex-connector P2 threads on #754 and the two residuals recorded from the r4 read. docs/paper-lane-policy.md:29-31 requires "a durable intent/order/fill journal, one writer per account".

- **Admission (run.py:252 thread).** A quote is admitted only when (ask - bid) x qty plus the plan's expected round-trip commissions fits the frozen round-trip loss bound. A wide-spread refusal records its stage and amounts, and no node starts.
- **Ownership (r4 residuals).** An order this run's ExecTester initialized (non-reconciled OrderInitialized after node launch, matching the strategy and trader identity) counts as owned and in flight from OrderInitialized. Own orders denied before submission count toward the budget and are not labelled reconciled_external.
- **Writer lease (run.py:1072 thread).** An exclusive non-blocking fcntl.flock on a host-global lock named by the sha256 of the account id is taken before the client-92 pre-check and held through the flat proof. It follows the frozen Alpaca engine's account_lock_fingerprint (dca821c safety.py L391-410). A held lease refuses the run with not_started. The receipt carries only the hash-named lock. The README states the host-local limit.
- **Journal (run.py:774 thread, partial).** An append-only private 0600 JSONL journal, with flush and fsync per record:
  - run start, own-order events with the client and venue id mapping, the stop request and the flat proof;
  - an existing journal for the same run id refuses the run;
  - the receipt carries only its sha256, record count and kinds.

  Not covered: a durable intent before the venue send. rc5's Python surface exposes no pre-send hook (upstream's native BusTap is not exposed), so the journal records OrderInitialized as observed. README "Recorded residuals" states this.
- **Submission-time notional (run.py:497 thread).** No change to upstream ExecTester; a README disposition instead:
  - rc5 does not enforce the engine cap on this route (#4946, fixed in v2.0.0rc6);
  - a one-share SPY order admitted at about 775 must rise about 29% within about 60 s to exceed USD 1000, and the NMS Limit Up-Limit Down plan's 5% Tier 1 core-session bands pause trading before that;
  - the independent flat proof still runs.
- **README thread (outdated).** Already fixed at README.md:348; unchanged.

plan.json, the upstream node and ExecTester configuration, and the receipt's required sentence are unchanged.

Checks:
- 73 offline tests OK (the rc5 venv; the 63 earlier tests are included).
- validate.py and evidence_manifest --check exit 0; git diff --check clean.
- `--plan-only` exits 3, refused_outside_window, after RTH, which is the existing window rule.

No gateway connection or broker request was made.

Built by GPT-6.1 Sol through the packaged SDK worker (round rc5-orders-r5); committed by the coordinator.

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>
…ence, refusals never overwrite a receipt, post-launch failures never report not_started, LULD-safe admission (Opus read of r5)

A Claude Opus cross-family read of r5 returned FINDINGS: 1 P1, 4 P2 and 5 P3. All are fixed.

- **P1, reversible account id.** The receipt's account_lease.lock_name was sha256(account id) + ".lock". DU numbers form a small keyspace, so the reviewer recovered a synthetic one in 0.28 s. The lease evidence is now only {"acquired": true|false}, and the account-derived name stays the on-host lock filename only, as the frozen Alpaca convention says ("lock key only; never recorded"). Tests assert that neither the name nor its hash enters the receipt or the journal.
- **P2, refusal overwrote a receipt.** Refusals before admission (lease, journal, account) publish atomically, create-if-absent, so an existing receipt's bytes survive, including under concurrent publication.
- **P2, failure after launch reported not_started.** The child launch is recorded before Popen. The parent keeps the child's receipt evidence, and a final write error is handled without falling back to not_started. Known bound failures stay failed.
- **P2, the #4946 disposition over-claimed.** Admission now requires ask x qty x 1.05 + headroom <= cap (942.85 admits, 942.86 refuses). The LULD Tier 1 core-session band argument therefore holds at any admitted price. The README states the 300 s close-on-stop horizon.
- **P3s:**
  - a USD 0.02 per-order commission margin (the observed 1.02 commission);
  - the journal scrub is exercised with an account-bearing denial reason;
  - pass_fds is checked to carry the lease descriptor;
  - the private log is named console.log;
  - the README states the lease scope (same lock path and XDG_STATE_HOME only; the frozen 1.231 harness does not take it).
- **Reconciliation comment corrected** (run.py:748, README.md:268). External materialization sets reconciliation=true, but rc5's MarketOrder conversion rebuilds initialization with false (nautilus_trader 1b0a49d2 crates/model/src/orders/market.rs:533). An installed-rc5 regression checks it.
- **README.** The journal disclosure now sits under a "Recorded residuals" heading.

plan.json, the upstream node and ExecTester configuration, and the receipt's required sentence are unchanged.

Checks: 84 offline tests OK, no skips (the rc5 venv); validate.py and evidence_manifest --check exit 0; git diff --check clean. No gateway connection or broker request was made.

Built by GPT-6.1 Sol through the packaged SDK worker (round rc5-orders-r6); committed by the coordinator.

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>
…eipt-ownership nonce, an isolated started-second test, current README formulas (Opus r6 residual P3s)

The Claude Opus delta read of r6 returned ACCEPT with four non-blocking P3s. All four are closed:

- **Closing-period admission** (run.py:247). A run whose planned 360-second order-and-close window reaches 15:35 ET is refused before lease acquisition or any broker request, because the LULD Tier 1 band doubles to 10% in the closing period. The refusal records its stage, reason, window end and the named band constant. Tests cover the refusal and the exact boundary.
- **Receipt ownership** (run.py:1351). The parent generates a UUID nonce, passes it to the child, and checks it before adopting the child's evidence. On a mismatch, for example two concurrent runs on different accounts sharing one --receipt, it keeps the provisional evidence, reports incomplete, and still runs the independent flat proof. The nonce is not derived from the account. A regression test covers it.
- **Started-second check.** A test isolates it: embedded second 1, ts_init 2.5 s, scope started at 2.1 s. Removing only the started-second guard makes that test fail.
- **README formulas.** README.md:54 and :95 now state the r6 rules: ask x qty x 1.05 + headroom <= cap, and the per-order commission allowance plus the USD 0.02 margin (USD 2.04 for the round trip).

plan.json, the upstream node and ExecTester configuration, and the receipt's required sentence are unchanged.

Checks: 88 offline tests OK, no skips (the rc5 venv); validate.py and evidence_manifest --check exit 0; git diff --check clean. No gateway connection or broker request was made.

Built by GPT-6.1 Sol through the packaged SDK worker (round rc5-orders-r7); committed by the coordinator.

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>
Scout and others added 3 commits October 5, 2026 19:45
…aca-py pin_source citations remapped, handbook regenerated

- **The only conflict was manifests/evidence.json.** It is resolved as main's registry (212 receipts; #754 adds no receipt row) with #754's 11 paths re-registered. The hot-file commit follows.
- **catalogs/us-equities/runtime-target.json merged cleanly as text.** A clean text merge does not prove that line citations survived, and tests.test_architecture_pin_source failed six cases. #754's #4946 entry had shifted the alpaca selected_path from line 158 to 159, so the foundation catalog's six alpaca-py pin_source citations were remapped through the difflib line map from MERGE_HEAD to the merged file (6 changed, 0 unmapped).
- **The new catalog digest made the handbook stale.** docs/new-wsl-handbook.{md,json} were regenerated with --write, and --check passes. The handbook receipt records the regeneration, and the changed files are re-registered.

Checks:
- unittest of test_new_wsl_handbook, test_architecture_pin_source, test_stack_lifecycle and test_catalogs: OK;
- the rc5 suite: OK (88);
- validate.py exit 0 (212 receipts, 10,282 files);
- evidence_manifest --check exit 0;
- component_matrix --check and new_host_grand_list --check exit 0;
- git diff --check clean.

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 seathatflowsinourveins added lane:shared Touches files owned by both lanes; needs both lanes' acknowledgement and removed lane:trading Trading lane: sim, paper and live north star labels Oct 6, 2026
Scout and others added 6 commits October 5, 2026 20:36
…ipt, disclose the unrun current runner, early-close cutoff, null quote evidence on refusal, robust receipt adoption (Opus full-scope read)

The Claude Opus full-scope read of the whole PR at 7ee79f2 returned FINDINGS: 1 P1, 2 P2 and several P3s. Coordinator fixes:

- **P1, harness not archived.** The passing receipt's r4 harness (sha256 5a061ff06f41…) was not archived. It is now restored byte-identical from a9ace8c as evidence/harness/run.py.5a061ff06f41 and registered. Every receipt's harness_sha256 resolves to an archived harness again (r2, r3, r4), which the README now states.
- **P2, unrun runner undisclosed.** The README now says that the current runner (r5-r8) has not run natively. Run 3 exercised r4, so the lease, the journal, the 5% LULD stress, the commission margin, the closing cutoff, the receipt nonce and generated-identity ownership are offline-tested only.
- **P2, lane label.** The merge's Foundation-catalog pin_source remap makes this lane:shared, and the PR is relabelled.
- **P3s, coordinator:**
  - the --plan-only wording now covers the closing cutoff;
  - the README states the shared-receipt-path rule for concurrent runs on different accounts;
  - the README test summary is brought to r7;
  - catalogs/us-equities/runtime-target.json's #4946 rerun_trigger states the final bounds. The edit is on a single line, so the pin_source line numbers are unchanged.

GPT-6.1 Sol fixes (round rc5-orders-r8):
- **Early-close cutoff.** The closing cutoff is the frozen window's liquid session end minus the named 25-minute LULD closing period: 15:29 ET on a normal day, 12:29 ET on a 13:00 close. Admission rechecks the broker's liquid hours before any quote request.
- **No quote evidence on refusal.** quote_admission stays null on a preliminary refusal, or not_run, and closing diagnostics are recorded separately.
- **Receipt adoption.** Adoption catches any exception: a malformed or list-valued child receipt keeps the provisional evidence, records child_receipt_unreadable, and still runs the independent flat proof.

plan.json, the upstream node and ExecTester configuration, and the receipt's required sentence are unchanged.

Checks:
- 91 offline rc5 tests OK, no skips;
- test_architecture_pin_source, test_catalogs, test_new_wsl_handbook and test_stack_lifecycle OK;
- build_new_wsl_handbook --check exit 0;
- validate.py and evidence_manifest --check exit 0;
- git diff --check clean.

No gateway connection or broker request was made.

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>
…ps 3-4, the closing-period bound, the lease's role)

The Claude Opus closing check at f79ba6c returned ACCEPT and noted wording nits only:
- **Step numbers.** The unexercised acceptance steps are 3-4, not 2-4: acceptance-plan.md section 5 puts reconnect and restart reconciliation in step 3 and the kill switch in step 4, and run.py's BLOCKED_STEPS agrees. Fixed at README.md:512.
- **The #4946 rerun_trigger** in catalogs/us-equities/runtime-target.json:105, kept on one line so the file stays 256 lines and the pin_source citations still hold:
  - The bound is held by four rules. The closing rule is stated as no run whose order and close window reaches the closing period (the liquid session end minus 25 minutes, so the latest start is 15:29 ET on a normal day).
  - The account lease is described as one writer per account, not as part of the notional bound.

Checks: test_architecture_pin_source and test_catalogs OK; validate.py and evidence_manifest --check exit 0; git diff --check clean.

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 added a commit that referenced this pull request Oct 6, 2026
… a SMART order above its cap) (#798)

### Scope

- **What this PR changes.** It preregisters C5 for the NautilusTrader rc6 IBKR paper checks, before any rc6 run. C5 is a dated addendum to #754's frozen C1-C4: the native risk engine must refuse a SMART-routed paper order above its per-order notional cap.
  - It adds one stricter check and loosens none of C1-C4.
  - The command center approved it (item `task-native-agent-stack-5f-20261006T155009Z`, N4).
- **Base commit:** `0d5e65064`.
- **Lane:** `lane:trading`.
- **Owned paths touched:**
  - `blueprints/us-equities/engine-nautilus/ibkr-paper-orders-rc6/PREREGISTRATION-ADDENDUM-C5-20261006.md` (new);
  - `blueprints/us-equities/engine-nautilus/ibkr-paper-orders-rc6/c5-addendum.json` (new);
  - `manifests/evidence.json` (two rows, in the last commit).

### SOTA sources

- **The engine** is NautilusTrader `v2.0.0rc6`, commit `7b766f8825b2539c5b2ac1375e9d97b41c509edb` (the pin #761 qualifies). In `crates/risk/src/engine/mod.rs` at that commit (sha256 `ad16f4bf…`):
  - `check_orders_risk` (:1212-1243);
  - `order_account_id` (:1245-1276);
  - the per-order cap lookup (:1393);
  - the `NotionalExceedsMaxPerOrder` denial (:2358-2371);
  - the full-position-exit exemption (:2359).
  - https://github.com/nautechsystems/nautilus_trader/blob/7b766f8825b2539c5b2ac1375e9d97b41c509edb/crates/risk/src/engine/mod.rs
- **The issue**, nautechsystems/nautilus_trader#4946. Its fix commit `ed6fc8bf47fd37dda97d63b9b2df160719ee2bac` is an ancestor of `v2.0.0rc6` and not of `v2.0.0rc5`. GitHub's compare API shows rc6 `ahead`, `behind_by=0`, and rc5 `diverged`, `behind_by=189`.
- **The base criteria** are #754's `blueprints/us-equities/engine-nautilus/ibkr-paper-orders-rc5/plan.json` at `3e23f71abf3ae29c63483ef35c8506b8347e2c56` (sha256 `24ffca56…`, frozen 2026-10-05).

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| The rc6 source lines cited | source_review | file fetched at the tag's commit; lines checked with awk |
| The #4946 fix is in rc6 and not in rc5 | source_review | GitHub compare API, `ed6fc8bf...v2.0.0rc6` and `...v2.0.0rc5` |
| C5 behavior on the IBKR paper route | Pending | runs in the confirmed slot 10-07 13:45-20:00Z, after this file's hash is recorded |

### Local commands run

```
$ python3 scripts/validate.py
{"components": 69, "hashed_files": 10338, "profiles": 4, "receipts": 214, "status": "passed"}  (exit 0)
$ python3 scripts/evidence_manifest.py --check
{"files": 10338, "status": "passed"}
```

### Decision record

This file is the dated preregistration (`preregistered_at_utc` inside `c5-addendum.json`). Its sha256 values are recorded in the command center's ledger before any rc6 run:
- `PREREGISTRATION-ADDENDUM-C5-20261006.md`: `bfa7559e…`;
- `c5-addendum.json`: `3c2956d8…`.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
seathatflowsinourveins added a commit that referenced this pull request Oct 7, 2026
### Scope

Route catalog lookup through QMD's lexical queries and bounded document retrieval; use SocratiCode for semantic catalog search at the main checkout's projectPath. Keep reranking available and prohibit qmd embed/pull. Update current maintenance recipes and native instruction carriers through the repository renderers.

Existing Serena consumers read its manual before navigation, and jCodeMunch consumers obtain the current guide before a typed route with the actual caller model and execution off. Four existing Claude roles gain only Serena's manual tool. Reviewer/builder keep their no-menu boundary, and a focused read of a known path and line remains valid.

This landing repair appends the preregistration's Amendment4 to bind the deliberately changed role bodies and compacts lane-authored RTK explanations within the unchanged compact and startup budgets. The entire composed pre-RTK prefix, upstream awareness, owner's blocks, exact SKILL line, seven exceptions, models and effort are preserved. Prior amendment rows, observations, seals and RUNBOOK bytes remain unchanged.

The canonical code-graph rename is prepared as a separate patch and is excluded from this head under command-center ruling081016Z. Main's existing names remain in both templates, the map, fixtures and carriers. The protected lane token requires the owner's word before the rename can land. Until that follow-up, this host's Claude code-graph access is through the vendor's hook channel only; the stale MCP carrier id is a recorded limitation and is not claimed fixed.

- Base commit: `c44993b379da25fae923dbbe70188978af5104aa` (verified native source; #803 already landed).
- Lane: `lane:foundation`; draft.
- Head: `9985e468fa4997d22630714b2fa6a76666e3cda9`. Native bytes: compact 8076 <8192, rendered 9142, three-file startup 20101 <=20103; full Claude block 4087 <=4100. These are byte gates, not token-use measurements.
- Owned paths: token-lane carriers and their paired handbook text, minimal manual grants and mirrors, Codex template/rendered copies, native loader/routing/sequence tests, current recipes and generated handbook, append-only decisions/preregistration amendment, follow-up receipts and checksum/registry projections.
- ROLE-CARRIER-GAPS and ROLE-GRANTS are separate future work and stay out of this change.

Landing path: explicit command-center cue070358Z and fallback ruling081016Z permit one pushed rebase/content repair onto then-current main while #802/#813/#830 land. The co-op performs the new-head delta read with its CI result; the command center ACKs; 5f lands. A further pushed rebase requires the separate dated landing-conflict cue. Host configuration, cutover and fresh-session/working-day acceptance belong to their owners.

## SOTA sources

- [QMD v2.8.3 lexical query](https://github.com/tobi/qmd/blob/v2.8.3/src/mcp/server.ts#L294), [typed searches/rerank](https://github.com/tobi/qmd/blob/v2.8.3/src/mcp/server.ts#L321) and [document retrieval](https://github.com/tobi/qmd/blob/v2.8.3/src/mcp/server.ts#L412): native lexical subqueries, retrieval and optional rerank. Rerank defaults true (:334-335). [README maintenance syntax:1033-1037](https://github.com/tobi/qmd/blob/v2.8.3/README.md#L1033-L1037) supplies bounded commands.
- [SocratiCode v1.15.0 codebase_search](https://github.com/giancarloerra/SocratiCode/blob/v1.15.0/src/index.ts#L138): semantic search at an absolute projectPath. Owner ruling224125Z selects the routing and preserves rerank-on acceptance; this PR performs no host cutover.
- [Serena c6fbd1c5 manual order](https://github.com/oraios/serena/blob/c6fbd1c5932df2494ffa0020af5a9fbe80b82143/src/serena/resources/config/prompt_templates/system_prompt.yml#L5-L6), [manual tool:28-40](https://github.com/oraios/serena/blob/c6fbd1c5932df2494ffa0020af5a9fbe80b82143/src/serena/tools/workflow_tools.py#L28-L40) and [project/session binding:44-49](https://github.com/oraios/serena/blob/c6fbd1c5932df2494ffa0020af5a9fbe80b82143/src/serena/tools/config_tools.py#L44-L49): manual first, active cwd project and returned session id for switches.
- [jCodeMunch 1.108.330, 28803366, typed route:446-463](https://github.com/jgravelle/jcodemunch-mcp/blob/288033668f0425ab0547f420dd647c14bd186c7f/src/jcodemunch_mcp/server.py#L446-L463), [guide:4743-4752](https://github.com/jgravelle/jcodemunch-mcp/blob/288033668f0425ab0547f420dd647c14bd186c7f/src/jcodemunch_mcp/server.py#L4743-L4752) and [policy:101-128](https://github.com/jgravelle/jcodemunch-mcp/blob/288033668f0425ab0547f420dd647c14bd186c7f/src/jcodemunch_mcp/cli/policy.py#L101-L128): guide-first and typed task/model route. These files are unchanged at target1.108.331/d94049d0. The executable schema corrects the guide's query example; no new adaptive-tier setting or upstream rebuild.
- `native-agent-stack@c44993b:tests/test_token_e2e_preregistration.py:637-663,905-909`: later dated role-pin amendment and sealed RUNBOOK contracts. Amendment4 preserves every earlier row/seal and extends the current-row selector. The command center records merge chronology at landing; this is a structural repair and authorizes no run.
- [DeusData/codebase-memory-mcp v0.11.0 release](https://github.com/DeusData/codebase-memory-mcp/releases/tag/v0.11.0), the repository's pinned component, and the command center's native-client read-back identify the canonical server name. Its proposed client-key/wire-id/owner-token correction is kept in the separate patch, preserving every payload and strict fixture. Ruling081016Z explicitly keeps main's names in this publication while the owner's instruction-token decision remains open.
- RTK explanation provenance: `native-agent-stack@2d849ba` (#726) and `@50b9579` (#389), `adoption/templates/codex.AGENTS.template.md` after its exceptions marker. The eight explanations shorten while all facts and protected bytes remain. Command-center064832Z accepted their class and scoped wording.
- Native helpers at `native-agent-stack@c44993b`: `tools/adoption/managed_block.py:169` (`codex_block`), `tools/adoption/codex_roles.py:287` (`f4_block`), `scripts/host_receipts.py:710` (`register_file`), `docs/lanes.md:94-128`. Current generated inventory/handbook and checksum bindings use those repository tools; historical receipts and the frozen catalog passage are preserved.

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| Documented native routing/manual/guide interfaces | source_review | Pinned upstream files above |
| Carrier rendering, protected bytes, new body pins and tool ids | local_integration | Existing native helpers, hashes and required modules |
| Permission/sequence/byte-mutant/frozen-row controls | synthetic | Existing tests with assertions preserved |
| Deployed use and token savings | Pending owner evidence | No model, host apply or working-day measurement in this repair |

### Local commands run

```text
$ CI=true nice -n 19 ionice -c3 python3 -B -m unittest tests.test_token_lanes_session_start tests.test_token_lanes_subagent_start tests.test_scaffold_repo tests.test_new_wsl_handbook tests.test_adoption_docs_consistency tests.test_codex_agents tests.test_codex_roles tests.test_codex_worker_lane tests.test_token_e2e_preregistration tests.test_new_wsl_client_config.RecordTests tests.test_install_claude_profile tests.test_managed_block tests.test_task_model_routing tests.test_new_wsl_client_config.MapTests tests.test_new_wsl_client_config.AgentGapTests tests.test_new_wsl_client_config.RenderTests tests.test_new_wsl_client_config.ApplyTests.test_the_first_run_writes_what_the_wired_pieces_name_and_nothing_else
exit 0; Ran 595 tests in 109.929s; OK (skipped=14)

$ CI=true nice -n 19 ionice -c3 python3 -B -m unittest tests.test_install_claude_profile tests.test_adoption_docs_consistency tests.test_new_wsl_client_config.RecordTests
exit 0; Ran 150 tests in 16.306s; OK (skipped=2)

$ CI=true nice -n 19 ionice -c3 node examples/claude-native/workflows/test-envelope.mjs
exit 0; SUMMARY passed=254 failed=0 total=254

$ CI=true nice -n 19 ionice -c3 python3 -B tools/adoption/new_wsl_client_config.py --check --markdown
exit 0

$ CI=true nice -n 19 ionice -c3 python3 -B scripts/build_new_wsl_handbook.py --check
exit 0
```

The passing 595-test run is retained on unchanged source/assertion inputs from the pre-window checkpoint; the 150-test run checks the concrete relocation-fixture and workflows-README changes in the new main base. Their counts overlap and are not added. The fresh Node run passes 254/254. Strict checksums in both Codex directories and the Claude hook directory, plus `git diff --check`, exit 0. All three Amendment-4 role digests were re-derived in both copies and are unchanged from the previous published head.

```text
$ CI=true nice -n 19 ionice -c3 python3 -B scripts/validate.py
exit 0; 69 components, 10,482 hashed files, 4 profiles, 224 receipts, status passed
```

The earlier landing composition used source `630b6ece8485a7710ea51321682d5a12e364e25c` and hot commit `5703ef1061b982078038425fada888fd35153868`; its native checks and source-critic result are retained. The authorized locator follow-up changes only `catalogs/foundation/upstream-surface-dispositions.json` and that file's registry row: the `otel.environment` citation now points to the command at `examples/codex-native/README.md:214`. Source commit `2b36cfee` is followed by registry-last commit `9985e468fa4997d22630714b2fa6a76666e3cda9`, with no further rebase. Claude/Codex instruction bytes, role hashes, historical records, namespace and byte budgets remain unchanged.

The registry starts from exact main `c44993b379da25fae923dbbe70188978af5104aa`, registers the same 67 changed-file rows through the native producer, and preserves main's receipt and convergence arrays. The two-file correction passed the 114-test citation module, the two exact failing methods and a second native validator run. The worktree is clean; the shifted-citation scan found no other current target to repair. Historical before/after references remain intact.

```text
$ CI=true nice -n 19 ionice -c3 python3 -B -m unittest tests.test_upstream_surface_watch
exit 0; 114 tests, 6 skipped

$ CI=true nice -n 19 ionice -c3 python3 -B -m unittest tests.test_upstream_surface_watch.DispositionCitationTests.test_every_cited_line_names_the_key tests.test_upstream_surface_watch.DispositionCitationTests.test_a_dotted_key_has_its_parent_near_the_citation
exit 0; 2 tests

$ CI=true nice -n 19 ionice -c3 python3 -B scripts/validate.py
exit 0; integrity and scope passed
```

The hosted run at5703 returned two failures in11,495 tests because the documentation locator moved. A reviewed locator still gates when its repository test fails. This follow-up closes that exact contract; it adds no assertion waiver or namespace change.

Read-only overlap metadata checked all 47 open PRs, including full file pagination where needed. Source overlaps: #645, #706, #709, #754, #769, #770, #775, #776, #795, #810, #821, #826, #829. Shared registry/checksum paths use the hot-file protocol; no peer branch is changed.

Earlier failed CI at3ba ran11,381tests and failed six role-body-pin subcases; its complete failed log is retained privately. The failed 560-test and earlier 595-test preparation runs also remain retained. This repair uses a dated amendment, preserves the older source evidence and strict current-body comparison, and performs no full-suite or provider acceptance run. Validator results are integrity and scope evidence only.

### Decision record

`docs/decisions/2026-10-06-qmd-lexical-catalog-instructions.md` and `docs/decisions/2026-10-07-serena-jcodemunch-native-navigation-wiring.md`, with appended clarifications and the new landing follow-up, explain the behavior and limits. The preregistration README gains Amendment4 only; its RUNBOOK and earlier sealed records stay byte-identical. No prior result is recast as a new run.

### Host evidence

Repository-only change. No live instruction file, MCP registration, hook trust, client setting, gateway setting/key or model session changed. Source/render checks and synthetic fixtures remain distinct from the configuration owner's read-back and organic-use acceptance.

### Checklist

- [x] No GitHub Actions or paid service change.
- [x] No credentials, raw conversations or live client configuration committed.
- [x] Models, effort, owner's blocks and historical observations preserved.
- [x] Peer-owned worktrees and source preserved.
- [x] Native validation passed; changed checksums/registry committed last at the final head.
seathatflowsinourveins added a commit that referenced this pull request Oct 7, 2026
### Scope

Restore the handbook test's live publication binding so a later profile or handbook regeneration updates its own maintained receipt, instead of editing #826's dated landing record.

- Base commit: `6d252c9c102e575bc9229bf6bb2149409655d5f3`; head: `4d2ce2a7719adca918025ffde295ef1dfa30bf02`.
- Lane: `lane:foundation`; draft.
- Exactly four paths: `tests/test_new_wsl_handbook.py` (one receipt-path line), `evidence/artifacts/new-wsl-handbook-20261001/receipt.json` (current computed binding plus one appended regeneration), its one-line `README.md`, and registry last.
- The generator, profile, both generated outputs, hash/inventory assertions, existing receipt observations/history and #826's dated record stay byte-identical.
- **Named landing path:** co-op cross-family exact-head read, hosted validate, command center CI read and cue; **right after #820, ahead of #775**. ONE replay at that cue if #820 changes main; full test phase in that landing turn. Hold this draft head for the reads.

## SOTA sources

- `native-agent-stack@6d252c9:tests/test_new_wsl_handbook.py:1672-1691`: the publication contract checks actual current generator/profile/output hashes and inventory, with byte-change negative controls. Its comment says hashes follow regeneration. Only its receipt locator changes.
- Same pin, `evidence/artifacts/new-wsl-handbook-20261001/receipt.json:268,656,700`: the receipt is a current hash mirror and prior entries expressly refresh mutable producer/output bindings while preserving observations. This existing repository practice fills the publication-binding gap; no new manifest, generator or validator is introduced.
- Same pin, `docs/acceptance-evidence-policy.md:59-65` and `docs/landscape-domain-notes.md:33,38`: retain historical inputs/results/failures/pins. All prior receipt fields, regeneration prefix and `previous_outputs` are retained; #826's dated record remains historical.
- Same pin, `docs/lanes.md:94-115`: main-copy/own-registration protocol; `scripts/host_receipts.py:710` updates the three own hashes and inserts the README, in the registry-only final commit.

### Evidence-class table

| Claim | Evidence class | Command / receipt |
| --- | --- | --- |
| Existing strict publication contract passes at the maintained binding | `local_integration`, `synthetic` | 87 handbook tests, exit 0; existing byte-change negative controls unchanged. |
| Actual generated bytes are current | `local_integration` | Native builder `--check`, exit 0; MD a1a0cb17… and JSON a42c8915… as recorded in the appended regeneration. |
| Dated records/history/other test assertions preserved | `source_review`, `local_integration` | Exact base-file/JSON comparison, exit 0; independent bounded source critic ACK. |
| Publication integrity after registry-last commit | `local_integration` | `validate.py` before/after, exit 0; 69 components, four profiles, 224 receipts, 10,508 hashes. |

### Local commands run

All checks use the owned external TMPDIR, `nice -n 19 ionice -c3` and closed stdin.

```text
python3 -B scripts/build_new_wsl_handbook.py --check
exit 0, status passed; current outputs unchanged.
python3 -B -m unittest tests.test_new_wsl_handbook
exit 0: Ran 87 tests in 37.368s; OK.
Exact unchanged-field, regeneration-prefix, dated-record and one-test-line comparison
exit 0; all preservation controls true.
python3 -B scripts/validate.py
exit 0 before and after final registry commit; 10508 file hashes.
git diff --check
exit 0.
```

The scoped cached open-PR check found 44 open PRs and these overlapping neighbours: #645, #754, #769, #770, #810 on the maintained receipt; #776 and #810 on the test. The CC assigned this narrow critical-path repair before later regeneration PRs. No peer head or file is edited by this lane.

### Decision record

The CC's J-HANDBOOK-BINDING ruling supplies the bounded disposition. The one-line receipt README identifies the maintained current-state carrier. No old decision or dated observation is rewritten, and no extra decision file is added to this small unit.

### Host evidence

No host/client/installation or acceptance-status changes. These checks establish the repository publication contract, not upstream model or native host acceptance.

### Landing read fields

The intentional main-test edit is `tests/test_new_wsl_handbook.py:1677`, disposed of in advance by the CC for this exact receipt rebind. Name it in `main-tests=` at the landing read. Declare every actual post-read/replay change in `adapted=`; the full-suite phase is deferred to the landing turn. Nothing is re-pointed to a new dated path.

### Checklist

- [x] Existing current-state receipt reused; earlier observations and dated record preserved.
- [x] Only one test line changes; assertions, producer and profile unchanged.
- [x] Own entries registered last; required local checks pass.
- [x] No workflow, dependency, paid surface or credential change.
- [x] Draft and one foundation label; named read/ACK/queue path.

This branch has not been deployed

No deployments
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