Skip to content

Paper receipts 2026-09-29: pre, rth and ext mover series, incentive monitor and overnight watch (mechanics-only) - #564

Merged
seathatflowsinourveins merged 12 commits into
mainfrom
trading/receipts-20260929
Oct 1, 2026
Merged

seathatflowsinourveins merged 12 commits into
mainfrom
trading/receipts-20260929

Conversation

@seathatflowsinourveins

Copy link
Copy Markdown
Owner

Scope

  • What this PR adds. Sanitized, independently verified receipts for the 2026-09-29 paper units: the pre-market, regular-hours and after-hours mover series on the two Alpaca paper accounts, the incentive monitor, and the overnight volume watch.
    • It also corrects the stale catalog sentence about the 2026-09-28 series.
    • It points the grand-dashboard paper row at these receipts.
    • All results are mechanics-only: 0 of 768 mover rule-exits passed development, so no edge is claimed.
  • Base commit: 74cc5468 (main).
  • Lane: lane:shared. The paper row in observability/grand-dashboard/state.json changes content; everything else is trading-owned. It needs the foundation acknowledgement for the shared hot files only, scoped as in Paper lane: ext-20260928 receipt (broker-reconciled), committed reconciliation, dashboard paper row #501.
  • Owned paths touched.
    • blueprints/us-equities/adaptive-paper/trials/{pre,rth,ext}-20260929/;
    • blueprints/us-equities/incentive-monitor/runs/20260929/;
    • blueprints/us-equities/overnight-volume/runs/20260929/;
    • catalogs/us-equities/README.md.
  • Shared. observability/grand-dashboard/state.json (the paper row and the checkpoint time only) and manifests/evidence.json (registration, last commit).

Results (09-29):

Series Account Passed Filled Realized P&L (USD) Notes
Pre-market 2 3 of 3 18 of 18 orders -2.05
Regular hours 1 5 of 6 46 of 46 orders -115.94 Trial 6 ended in a ledger halt (gross_loss_cap_reached, 250.18 of 250), so it is not a pass under the frozen acceptance. Fees -0.65; including them, -116.59.
After hours 2 3 of 4 9 entries, 7 exits, 1 recovery exit -15.38, excluding IOVA 68 Trial 1 had no signals. Trial 4 needs attention: IOVA 68 was left open. Its recovery on a fee-aware engine is pending (#559, #543).

Account 2's fees of -0.47 cover the pre-market and after-hours series jointly; the broker does not split them by series.

The monitor and the watch are data only, with 0 orders:

  • Incentive monitor: 2,874 sweeps, 135,617 calls, 0 HTTP 429.
  • Overnight watch: 176 sweeps, 3,619 requests, 75 alerts, 0 HTTP 429.

SOTA sources

Evidence-class table

Claim Evidence class Command / receipt
Engine outcomes per trial (orders, fills, P&L, halts) native_proven (paper broker execution, receipts retained) committed mover-paper-N.json (refs withheld), series.console byte-identical
Orders and fills agree with the broker local_integration (a read-only broker reconciliation) committed reconcile-<series>.stdout.json, byte-identical
FEE activities per account local_integration (read-only GET through #559's code path) cited by name and sha256 in each series receipt
Monitor and watch counts native_proven (private run outputs, hashed) receipt.json sha256 table per file

Local commands run

$ python3 <receipts>/sanitize_check.py <each unit directory>          # every unit: 0 findings (negative control on a raw receipt: 5 findings, exit 1)
$ python3 -m json.tool <each receipt.json> > /dev/null                 # exit 0
$ python3 scripts/validate.py                                          # {"status": "passed"}
$ python3 scripts/evidence_manifest.py --check                         # {"status": "passed"}
$ python3 -m unittest tests.test_order_throughput                     # 75 OK, 1 skipped, 1 environmental error (see below)

The one error, test_cli_refuses_live_base_url_from_env_file_without_network, happens because an empty /tmp/.git is present on this host while Codex sandboxes run; the test hard-codes dir="/tmp". The same error occurs on unmodified main (control run, 2026-09-30 ~22:55Z). CI's runner has no such directory.

Verification

  • Builds. Each receipt was built by a Claude Opus builder in an owned worktree from private inputs.

  • Verifiers. Each receipt had its own independent Opus verifier (read-only), which recomputed:

    • acceptance per trial;
    • totals against the reconciliation and the ledger snapshots;
    • byte identity;
    • privacy;
    • README-to-receipt provenance.

    The after-hours receipt was verified in three narrower slices after two verifiers ran out of context.

  • Repairs. One repair round per receipt, then a recheck: all pass, with lows only.

  • Cross-family review. gpt-6.1-sol at ultra, read-only, via native Codex 0.159.2 with the token MCP servers. Lens A (numbers and reproducibility): approve, no findings. Lens B (claims, privacy and hygiene): changes-needed with 1 medium (an unsupported cause for 17 worse-than-reference RTH fills: paper fills are simulated from real-time quotes) and 1 low (the receipts said "this branch does not touch the dashboard", true only of the builder branches); both fixed in the next-to-last commit.

Residuals (low).

  • The legend covers the 0600 numeral in the credential-route sentence.
  • The after-hours receipt lists the transport's 0.25 s submit-hook deadline as a third, source-supported candidate for trial 4's pre-wire refusal. No cause is claimed.
  • The residual's final disposition is PENDING, and will be filled in after tomorrow's recovery.

Decision record

None for this PR. The account-1 halt and the not-started 2026-09-30 after-hours series are recorded in the private series records. The engine fix that unblocks the residual is #559.

Checklist

  • No GitHub Actions changes.
  • No workflow changes.
  • No secrets printed, logged or committed. No account fingerprints, host paths or broker order ids are committed; the credential route is recorded by pointer name only.
  • No paid hosting or billing surface.
  • Peer-owned files and worktrees preserved.

🤖 Generated with Claude Code

@seathatflowsinourveins seathatflowsinourveins added the lane:shared Touches files owned by both lanes; needs both lanes' acknowledgement label Oct 1, 2026
@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Foundation acknowledgement for the lane:shared part (c5, sota-default-harness-setup, as the pins/foundation acker's fallback named by session 21 after bc's session ended). Checked at head 514f354f on main 74cc5468, scoped the way #501 was: the shared part sits only in the last commit (manifests/evidence.json and observability/grand-dashboard/state.json; the two generated reports are unchanged); state.json changes only the paper lane row's state and evidence_ref plus the top-level recorded_at_utc; manifests/evidence.json starts from main's copy and adds the receipts' rows through host_receipts.register_file (35 added path rows, none removed); no pins, so tests/test_openhands_lock_binding.py is unaffected; lane:shared label and the SOTA sources section are present. The other changed paths are the trading lane's own (blueprints/us-equities/, catalogs/us-equities/README.md). Acknowledged for the shared part; merge on the eight required checks with --match-head-commit. This PR is not in the Gate A freeze-list train and may merge independently of it; its evidence.json rows will conflict with any later train head only in the hot file, which the hot-file protocol re-registers.

@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Foundation acknowledgement renewed at head 2451ba0a (same base 74cc5468): the delta from the acknowledged 514f354f touches only observability/grand-dashboard/state.json and manifests/evidence.json (4 lines each, last commit only); the paper row's state is 157 characters and satisfies progress.py's public-token rule, which was the cause of the validate failure on the previous head. Shared part acknowledged; merge on the eight required checks with --match-head-commit.

@seathatflowsinourveins

Copy link
Copy Markdown
Owner Author

Foundation acknowledgement renewed at head 439fd2e3 (on main 46365ea8, after the #557 and #540 merges): the last commit holds the hot-file re-run only (manifests/evidence.json, observability/grand-dashboard/state.json and the two generated reports), and the paper row is byte-identical to the acknowledged 2451ba0a. Shared part acknowledged; merge on the eight required checks with --match-head-commit.

Scout and others added 12 commits September 30, 2026 23:10
… sweeps, 0 orders)

Receipt for the incentive-monitor-20260929 unit (03:55-20:00 ET, account 2 key pair,
data and asset-list reads only): code identity from the b528bb5 clone (monitor.py
sha256 asserted across the clone, git show, the frozen SUMS and the process's own
board.json hash), unit settings, journal and service-manager records (1 start,
0 restarts, Result=success, exited 0), sweep cadence, stream coverage, call budget
use, errors (406: 0, 429: 0 recorded), the no-order basis with the partial account 2
listing, and sha256/bytes/records of every private file. The console is committed
byte-identical; the data stays private.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ps, 75 alerts, 0 orders)

Receipt for the BOATS overnight watch of trade date 2026-09-29 (22:09:58-04:00:04 ET,
stop_time, account 1 data only): code identity from start.json (dca569ae, not on
main; its watch.py is the same blob as 6545d7a in refs/pull/480/head history, and
main's #480 squash differs after the review repair round), thresholds and plan,
universe and reference coverage, 176 sweeps at 120 s with all 3,520 chunks ok, 3,619
requests with 0 failed (429: 0), 75 alerts (62 significant, 13 notify) with 6 posted
to the loopback ntfy topic, the SPY session-bar roll probe, the no-order basis, and
sha256/bytes/records of every private file. The data stays private; no alerted symbol
is named.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Overnight volume watch: the watch ran under the transient systemd user unit
overnight-volume-watch-20260929.service, not from a shell without a unit. Its journal
(queried from 2026-09-28, where the start falls) gives the start at 22:09:29 ET, the
ExecStart with the $PAPER_ENV_FILE pointer, one start and no restart, the watch's start
and summary lines on stdout, the resource record at 04:00:04 ET, no exit line, and the
unit file gone by 04:09:59 ET. started_at now follows the template (the unit start).
The output directory's birth time (.233 s) precedes the Started record by 50 ms and the
watch's own start-up by 0.12 to 0.22 s, so its creator stays unrecorded. The start-up
difference to main is stated precisely, the 14 missing names are marked as unrecorded,
and the missing provenance entries are added.

Incentive monitor: the monitor's output root gets its own placeholder, a sibling of
<private state root>; the launch, unit and timer hashes are cited as recorded before the
run in SERIES-INDEX.md; the start-up retry() is named as a second silent-retry surface,
and the call counts show neither surface retried (1 + 1 calls before sweep 1, 68
daily-bar calls for 68 requests); the freeze notes' statements about the monitor are
quoted and met; the missing provenance entries are added.

Both receipts cite the 2026-09-29 freeze notes by sha256 (frozen_expectations,
private_notes_sha256) and use defined placeholders for private paths.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ss, flat)

Sanitized receipt of the 2026-09-29 PRE series on account 2 (alpaca-paper-2),
engine b528bb5: receipt.json with per-trial frozen-acceptance verdicts,
18 orders asserted across engine receipt, ledger snapshot and broker
reconciliation, withheld engine receipts (broker_order_ref only), the
byte-identical console, frozen SUMS and reconciliation stdout, and README.
Realized -2.05 USD; mechanics-only, no validated edge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…trial 6 fails on a ledger halt)

Sanitized receipt of the 2026-09-29 RTH series on account 1 (alpaca-paper),
engine b528bb5. Trial 6 ended with ledger halted_reason
gross_loss_cap_reached (lifetime gross loss 250.18 of 250 USD) although the
engine reported passed, so it fails the frozen no-halt clause. Trial 5's two
E2 average-invariant records are explained from native_adapter.py (broker
6-decimal average one unit high) and fall under no frozen clause. 46 orders
asserted across engine receipt, ledger snapshot and broker reconciliation;
withheld engine receipts, byte-identical console, SUMS and reconciliation
stdout, and README. Realized -115.94 USD; mechanics-only, no validated edge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ial 4 needs attention, IOVA 68 left open)

Sanitized receipt of the 2026-09-29 POST series on account 2 (alpaca-paper-2),
engine b528bb5. Trial 1 ended completed_no_signals (its 5 entries were
canceled unfilled); trials 2 and 3 passed on controller_stop exits. Trial 4's
exits were forced by transport_gap; the engine handed off to recovery
(no_exit_progress), the recover command sold BEX 24 (+1.68) and its IOVA 68
sale was refused before HTTP (transport_proven_not_sent, SubmissionNotSent), so
trial 4 is needs_attention: not flat, ledger recovery_only, pnl_consistent
false. The durable budget never reserved the IOVA submit, which excludes the
rate caps and the wire guard; the files cannot distinguish validate_pending's
quote check from the 0.25 s submit-hook deadline. 22 engine and 2 recovery
orders asserted across engine receipts, ledger snapshot and both broker
reconciliation runs (0 foreign orders or fills). The 2026-09-30 residual
recovery is recorded as pending: 17 attempts, 0 orders, each
cash_mismatch_or_unmodeled_fees from -0.47 USD of 2026-09-29 fees. Realized
-15.38 USD with IOVA 68 open at cost 983.28; mechanics-only, no validated edge.

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

- Websocket lines: attempts[].errors.websocket_lines_without_close_frame now counts
  the lines with no close frame received (pre 1/1/1, rth 0/1/1/0/1/1, ext 1/2/1/3);
  the new websocket_lines_no_close_frame_either_way keeps ext's two trading-stream
  lines with no close frame either way (0/1/0/1). A new websocket_lines object
  defines both counters from the pinned websockets 17.1 and alpaca-py 0.44.0
  sources. The READMEs no longer call the data-stream lines normal closes (they
  are ConnectionClosedError: the closing handshake did not complete).
- The 2026-09-23 isolation check is described from its committed output, which
  records both forms after stop() (0.016 s and 0.018 s), not only the
  trading-stream line.
- Offline gate: the private gate log and rc record are re-checked and cited by
  sha256 (402 tests, OK, rc 0), replacing "the gate log no longer exists".
- Units: exit status and result come from the systemd user manager
  (units[].manager_state, read-only), and the journal statement is kept.
- scan_log_sha256 renamed to scan_full_sha256 (same values); the config fields
  the receipt had left out are added; the ledger.snapshot pointer is fixed; the
  runtime basis is corrected for pre and ext; the reconciliation command line is
  limited to its recorded basis; field provenance is completed.

No verdict and no total changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…dinator's FEE read

- rth (account 1): fees lists REG -0.34, TAF -0.30 and CAT -0.01 USD (-0.65) from
  fee-activities-20260929.json (sha256 2d02c55b...), replacing "not read";
  series_totals adds fees_usd -0.65 and realized_pnl_including_fees_usd -116.59
  beside the unchanged -115.94. The read keeps no description, so the fee bases
  are not recomputed.
- pre and ext (account 2): the REG -0.19, TAF -0.27 and CAT -0.01 rows (-0.47)
  are now asserted across the cash-gap output and the FEE read. The broker posts
  one activity per fee type per day, so no split between the series is made
  (series_totals fees_usd null); the fees appear only in a joint pre+ext figure:
  realized -17.43, including fees -17.90.
- ext: the residual section and residual_recovery_20260930.sources cite both
  reads; status pending and the PENDING line are unchanged.
- Every new number has a field_provenance entry; the limitations and
  engine_fee_model sentences now name the fee-inclusive figures; revised_at_utc
  and revision_note record this revision. No verdict and no existing figure
  changed.

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

The stale sentence said the 2026-09-28 series still waited on a rejected paper key.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…g after the further verification

ext-20260929:
- README: scope the recover command's request count to its recovery start
  (17:10:04 ET to the IOVA reservation: 4 reads and 1 submit), as
  recovery_20260929.recover_command already was; name the IOVA leg's
  exit_wait_reason (last_wait_reason is null); label the 0.25 s hook
  deadline as a path beyond the two candidates the coordinator's brief
  named; note trial 4's null ref on the never-sent BEX exit.
- FREEZE.md stays private because it names a private host path, not
  account fingerprints (none found with the checker's fingerprint set);
  the private series index names fingerprints (frozen_acceptance.source,
  private_notes_note, README Files).
- field_provenance.asserted: ledger.snapshot, residual_recovery_20260930
  .residual and the development study's 0 of 768 (limitations[]).

pre-20260929 and rth-20260929: the same ledger.snapshot and 0-of-768
provenance entries (same clause-4 gap). No verdict and no figure changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ch left the dashboard alone

Cross-family review (gpt-6.1-sol ultra, lens B) found two problems:
- the RTH receipt attributed its 17 worse-than-reference fills to walking the book. Paper
  fills are simulated from real-time quotes (Alpaca, Paper Trading), so the cause is now left
  unrecorded;
- the three series receipts said this branch does not touch the dashboard. The builder
  branches did not, but the integrated pull request does, in its last commit.

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

observability/grand-dashboard/state.json: the paper lane row (and the checkpoint time)
now states the 2026-09-29 series results and cites ext-20260929/README.md. No other
row changes. manifests/evidence.json: the receipt files and the changed catalog README,
re-registered through the docs/lanes.md hot-file protocol (last commit, main's
manifest). scripts/validate.py and scripts/evidence_manifest.py --check: passed.

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

Copy link
Copy Markdown
Owner Author

Foundation acknowledgement renewed at head 4b4c6b58 (on main 3361b342, after the #553 merge): the last commit is the hot-file step only; of the PR's own non-hot paths the sole difference from the acknowledged 439fd2e3 is state.json's recorded_at_utc (00:59:04Z → 03:10:02Z), the paper row is byte-identical. Shared part acknowledged; merge on the eight required checks with --match-head-commit.

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