Overnight run · four lanes · 12 September 2026

Overnight
Report

Date 2026-09-12 Lanes 4 Done 1 Partial 1 Failed 2 Decisions 15 of 23 (merged)

One of the four lanes finished clean, one came out partial, two failed. Both Lore goals died on the Codex usage limit with nothing measured; the ELA review produced a NO-GO verdict with eight named conditions; the CT WhatsApp bot turned out to be already built and is now demo-safe behind a live tunnel.

00

Status strip

Lane 01
Failed Lore F01 family goal — family definition for F01 “quoted but not booked”, measured on real questions The F01 goal ended with exit status 1 after the Codex session hit its usage/credit limit at 884,487 tokens during candidate fresh repeat 1 of the review pipeline, so there is no measured result, no pushed branch, no PR and no report.
Lane 02
Failed Lore cross-cutting defect class goal The cross-cutting defect-class goal ended at EXIT=1 after exhausting the Codex/ChatGPT usage limit at 664,594 tokens (resets 15 Sep 2026 07:28), leaving no pushed branch, no PR, no published report and zero measured results.
Lane 03
Partial CT WhatsApp bot demo-readiness (quote-only) The CT WhatsApp bot was not a spec — it was already a working Otto-built service (36 PRD stories, 34 delivered WHA-001→WHA-033, first commit 3 Jul 2026, latest 12 Sep 2026); tonight made it safe and honest to demo by hard-disabling booking, fixing a 10-second expiry that would have broken every Confirm, rewriting the demo copy, and standing it up on the devbox behind a live tunnel (HTTP 200), with 363/363 tests passing.
Lane 04
Done ELA remediation branch merge-readiness NO-GO for merging fix/e2e-remediation-20260906 as it stands: 0 blockers but 4 Opus-confirmed major defects, one of which makes the required admin-visual CI gate red by construction, and eight named conditions convert it to GO.
01

Decisions for Stevan this morning

Fifteen open decisions, merged across the four lanes and ordered by importance. Nothing below was decided for you.

01
ELA

Do not merge fix/e2e-remediation-20260906. Fix the four majors first.

Major 1 — bind verification to the current accepted engagement: add verification_status to the case-command UPDATE (it never writes that column today), require current-engagement verification for closure, reorder the mobile hero/timeline branches so pending work beats a stale case-level flag, and add the verified-A to reassigned-B regression.

Major 2 — ship a NEW forward migration (db/verification-durable-002/001 is frozen and must not be edited), plus clear memberEndRequestedAt in the force-assign displacement branch at server.ts:28477-28486 alongside firmReportedResolvedAt.

Major 3 — make case-relational-command-sql.ts and prearm-command-store.ts delimiter-safe using the existing hex-encoding precedent at dsarIdentityChallenge.ts:264-267, covering both new input and adopted legacy payloads, with a test.

Major 4 — migrate the two GET helper reads in apps/admin/tests/visual/portal-routes.spec.ts (lines 489 and 1769) to v2; keep the compatibility guard, keep the truthful no-location fixtures, do not approve new screenshot baselines.

02
Lore F01 · Lore defect class

Codex credits are exhausted until 15 Sep 2026 07:28. Wait for the reset, buy credits, or re-route both goals to another model.

Per the model table, gpt-5.6-Sol is only reachable through Codex, so the substitute is opus-5 or fable-5. The two runs together burned 1,549,081 tokens and produced no measured result, so also decide the budget posture: buy credits, cap per-goal spend, or re-route.

03
Lore F01 · Lore defect class

Salvage the devbox artifacts and the two unpushed branches before /tmp is cleared.

Everything sits in /tmp on the devbox: 10,094 eval files plus 132 evidence files for the defect-class goal, 23 harness entries plus 4 evidence items for F01. Branches insights/goal-f01 and insights/goal-dclass are local only — git ls-remote returned empty for both. A devbox reset or a /tmp cleanup destroys all of it.

04
WhatsApp demo

Nothing in ct-whatsapp has been pushed to a remote. All 85 commits, including tonight’s ad53892 and 0f4e4b2, exist only on the devbox and the freshly-synced Mac copy.

Related: old git history still contains partial trade references and provider names from earlier transcript commits. Current artifacts are fully masked; history was deliberately not rewritten. Decide whether the repo ever leaves your control without a history-cleanup pass first — and note that pushing it somewhere is exactly that.

05
WhatsApp demo

Twilio sandbox now, or wait for the new UK number.

The bot is one Twilio field away from live: setting “When a message comes in” to POST https://gamma-independent-ham-victoria.trycloudflare.com/webhook/twilio would interrupt whatever Tom is currently testing on that sandbox. No Twilio settings were touched.

If you do point it: the quick-tunnel hostname changes on every tunnel restart and takes signature verification with it, so anything beyond a one-off demo wants a named tunnel or a stable hostname first. The URL must match PUBLIC_BASE_URL in .env exactly.

06
ELA

Re-run the gates on the final reviewed commit, then disposition every remaining red.

Re-run admin:visual, the affected PostgreSQL integration suites, contract:test and format/lint/typecheck/build. Unit passes do not override red PostgreSQL, browser or fuzz results. Each remaining red is a real defect, a harness artefact, or pre-existing gate debt, with reproducible evidence — and going green by weakening assertions or removing the production-dispatch or DSAR 503 guards is ruled out.

07
WhatsApp demo

Monday’s demo source: DEMO_SOURCE=live or stay on the mock.

It is running DEMO_SOURCE=mock with every reply disclosing simulated data, because live beta rejects all quotes until Monday 06:00 UK. Live means real prices and no disclosure prefix, with BOOKING_ENABLED staying at 0; mock means a repeatable script.

08
ELA

The two minor findings: fix on this branch, or ticket them with an owner.

Fixing means the bearer scheme plus a deliberate contract-baseline update, and reconciling the DSAR truth tests to the 503 unavailable-fulfilment contract. Leaving that DSAR suite reliably red is not an option. Both minors are Codex-only and were not independently verified.

09
Lore F01 · Lore defect class

Set the merge order for the sibling goal and PR #104 without input from either Lore lane.

Neither lane produced a branch or a PR, and no record states the intended sequence, so it cannot be inferred from the artifacts.

10
ELA

Accept that merging changes nothing about release.

Production dispatch stays gated, DSAR fulfilment stays uncomposed, and the 8-step migration order is still unrehearsed on the real deployment. Production release is an independent NO-GO.

11
Lore F01 · Lore defect class

Harness policy: hard-fail fast on a Codex quota error, and stream a transcript to the log.

F01 burned roughly 884k tokens before dying and left a 7-byte log with no diagnostic output; the defect-class log holds a single EXIT=1 line. In both cases the failure point inside the goal is unknown.

12
Lore F01 · Lore defect class

Resume from the partial state, or restart clean.

Nothing in this run establishes that the F01 harness state in /tmp/lore-goal3-eval/goal-f01/ is resumable. For the defect-class goal the same choice applies, together with whether to relaunch it at all or drop it from the cross-cutting programme.

13
WhatsApp demo

Meta Business Manager audit — nothing in tonight’s records touches it.

If the demo is heading toward a real sender rather than the sandbox, the BM/WABA state needs checking separately. No evidence either way exists here.

14
WhatsApp demo

What to show Kamen.

The mock book-confirm transcript is the cleanest artifact — quote, Book, “Your quote” card, Confirm, booking-off refusal, all in one screen — backed by docs/reviews/wa-fix.md for the safety story: three-layer fail-closed booking gate, caps handoff, redacted transcripts. Live status and balance also work today. A live quote does not, until Monday.

15
WhatsApp demo

Four copy lines are still yours to settle.

The account-linking URL remains visibly labelled as not live; the approximate-receive marker stays on the card; no approved direct contact number or link was supplied, so handoff copy names “the CT dealing team” without inventing a destination; and the long-term unlink/reset policy is undecided because the dev shortcut reseeds the configured number at every service start.

FailedLane 01Lore

Lore F01 family goal

Family definition for F01 “quoted but not booked”, measured on real questions. The goal ended with exit status 1 after the Codex session hit its usage/credit limit at 884,487 tokens during candidate fresh repeat 1 of the review pipeline, so there is no measured result, no pushed branch, no PR and no report.

What was done

Results

Run accounting — no measured result exists for this lane
Exit status1
Tokens spent before termination884,487
Goal log size (/tmp/lore-goal-f01.log)7 bytes
Log contentEXIT=1
FINAL ANSWER sections in log0
Stage reached in review pipelinecandidate fresh repeat 1
Partial harness entries23
Evidence items written4
Commits pushed · PRs · reports0 · 0 · 0
Codex self-review verdicts produced0
Codex limit resetsSep 15, 2026 07:28

There is nothing to compare against any baseline: no narrative output, no FINAL ANSWER section, and no self-review verdict, so nothing from this lane has been independently verified either.

Links

None. No PR, no published report, no URL.

Raw locations (devbox)
  • devbox:/tmp/lore-goal-f01.log
  • devbox:/tmp/lore-goal-f01/
  • devbox:/tmp/lore-goal3-eval/goal-f01/
  • devbox:/tmp/lore-goal-f01/docs/evidence/insights-goal-f01-2026-09-12/

Unverified

Problems

FailedLane 02Lore

Lore cross-cutting defect class goal

The goal ended at EXIT=1 after exhausting the Codex/ChatGPT usage limit at 664,594 tokens (resets 15 Sep 2026 07:28), leaving no pushed branch, no PR, no published report and zero measured results.

What was done

Results

Run accounting — no measured result was produced at all
Exit status1
Tokens spent before termination664,594
Lines in /tmp/lore-goal-dclass.log1 (EXIT=1)
Eval artifact files10,094
Evidence files132
FINAL ANSWER sections · before/after numbers0 · 0
Branch pushed to originno
PRs · published reports0 · 0
Codex limit resets15 Sep 2026 07:28

The evidence directory contains checks/ and reviews/ subdirectories, so a Codex self-review ledger was being written, but no verdict or figure was extracted from it. That ledger is Codex self-review, not independent verification.

Links

None. No PR, no published report, no URL.

Raw locations (devbox)
  • /tmp/lore-goal-dclass.log — 1 line: EXIT=1
  • /tmp/lore-goal3-eval/goal-dclass/ — 10,094 run-artifact files
  • /tmp/lore-goal-dclass/docs/evidence/insights-goal-dclass-2026-09-12/ — 132 evidence files incl. control-real-defects.jsonl, experiment-manifest.json, method.md, scope-membership.json, selection-provenance.json, target-membership.json, checks/, reviews/, runs/
  • local branch insights/goal-dclass on devbox (absent from origin)

Unverified

Problems

PartialLane 03CurrencyTransfer

CT WhatsApp bot demo-readiness

It was not a spec. It was already a working Otto-built service. Tonight made it safe and honest to demo: booking hard-disabled, a 10-second expiry that would have broken every Confirm fixed, the demo copy rewritten, and the service stood up on the devbox behind a live tunnel returning HTTP 200, with 363/363 tests passing.

What was done

Results

Build state found at the start
User stories in prd-implementation-ct-whatsapp.json36
Built (WHA-001→WHA-033, incl. WHA-009b)34
Marked future (WHA-034/035)2
Commits on devbox85
First commit · latest commit2026-07-03 · 2026-09-12
Tests, typecheck, lint, build
RunTestsPassedFailed
Devbox checkout, before351177174
After fixes + rebuild3633630
Test files, after40400
typecheck · build exit codes0 · 0
lint (Prettier)clean

The 174 failures were better-sqlite3 reporting “Module did not self-register”, caused by the devbox’s global npm ignore-scripts setting stripping the native rebuild.

Quote expiry — the fixed blocker
Old hardcoded validity window10 s
Measured live CT quote latency11.1–12.6 s
New default, booking off90 s
New default, booking enabled15 s
Review pass — recorded severity split sums to 14 against a recorded total of 13
Findings recorded13
Recorded severity split (blocker / major / minor / nit)2 / 4 / 6 / 2
Applied in ad5389211
Rejected or qualified2
Transcripts, endpoints and services
Transcripts produced (redacted, reproducible)26
Live (against beta.currencytransfer.com) · mock13 · 13
Live transcripts that are the weekend rejection6 of 13
Live successful quotes, anywhere in the evidence0
POST /quotes (live, weekend)HTTP 422
GET /trades (live) — 25 real trades, 5 shownHTTP 200
Balances by provider (live)HTTP 200
Tunnel /health, checked from this machine at report timeHTTP 200
Signed webhook probe · Twilio outbound send200 · 201
Demo service port (loopback, Node 22 via mise)8791
Messages delivered to a real handset0

ct-whatsapp-demo.service and ct-whatsapp-tunnel.service are both active. callum-demo.service, callum-tunnel.service and app-lore.service were left untouched and are also active. Unit files are in deploy/systemd/; runtime config stays in the root .env at mode 0600.

The refusal line, verbatim

src/flow/confirm.ts:196-197 — mock mode Booking is switched off while this is a demo, so nothing has been booked. The rate above was simulated — ask your dealer for a live quote if you want to trade. live mode Booking is switched off while this is a demo, so nothing has been booked. The rate above was a real quote — call your dealer if you want to trade on it.

The demo flow, verbatim

transcripts/mock/book-confirm.md Client 20k gbp to eur CT *Indicative quote* Sell 20,000 GBP → receive *≈ 17,200 EUR* Rate 0.8600 · value 2026-09-12 Rates can change before you confirm. 1. Book 2. Refresh Client 1 CT *Your quote* … Quote only in this demo — pressing 1 won't book anything. Valid ~90 seconds. Client 1 CT [booking-off refusal, above]
transcripts/live/book-confirm.md — POST /quotes → HTTP 422 Client 20k gbp to eur CT FX markets are shut for the weekend, so I can't price that right now. They reopen 6am UK on Monday — message me then and I'll quote it.

Findings rejected or qualified

Recorded in docs/reviews/wa-fix.md. The claim that every Confirm necessarily fails overstates the timing evidence, since CT latency precedes the local deadline — the fix was made anyway. The proposed raw stack-frame/error-code formatter was not copied verbatim, because multiline messages and arbitrary upstream codes can leak private data; what went into logs is name, HTTP status, allowlisted CT code, and source basename/line. “Waiting until Monday” was rejected as the demo strategy in favour of the explicit mock. The words “real quote” and “live on your CT account” are reserved for live data and are not applied to mock replies. Git history was not rewritten, so older blobs still contain the previously committed partial trade references and provider names.

Links

Raw locations
  • /Users/stevanl/dev/ct-whatsapp
  • /Users/stevanl/dev/ct-whatsapp/transcripts/mock · /transcripts/live
  • /Users/stevanl/dev/ct-whatsapp/transcripts/mock/book-confirm.md
  • /Users/stevanl/dev/ct-whatsapp/transcripts/live/book-confirm.md
  • /Users/stevanl/dev/ct-whatsapp/transcripts/live/status.md
  • /Users/stevanl/dev/ct-whatsapp/docs/wa-demo-operations.md
  • /Users/stevanl/dev/ct-whatsapp/docs/wa-demo-copy.md
  • /Users/stevanl/dev/ct-whatsapp/docs/reviews/wa-fix.md
  • /Users/stevanl/dev/ct-whatsapp/src/flow/confirm.ts · src/flow/stage2.ts
  • /Users/stevanl/dev/ct-whatsapp/prd-implementation-ct-whatsapp.json
  • /Users/stevanl/dev/ct-whatsapp/progress-prd-implementation-ct-whatsapp.txt
  • /Users/stevanl/dev/ct-whatsapp/deploy/systemd
  • devbox:/tmp/wa-fix.log

Unverified

Problems

DoneLane 04ELA

ELA remediation branch merge-readiness

NO-GO for merging fix/e2e-remediation-20260906 as it stands: 0 blockers but 4 Opus-confirmed major defects, one of which makes the required admin-visual CI gate red by construction. Eight named conditions convert it to GO.

What was done

Results

Severity counts after refutation
SeverityCountOpus-confirmed
Blocker0
Major44 of 4, none refuted
Minor20 — Codex only
Nit0
Green gates
GateResult
format:check, lint, typecheck, build (after building dependencies)passed
contract:test — 1,502 tests1,457 passed, 0 failed, 45 skipped
admin:test246 / 246
mobile:security:test1,107 passed, 1 skipped
Unit suites, aggregate~1,747 passed, 1 skipped
Red gates
GateResult
admin:visual — required CI gate19 failed, 9 passed
  of which the branch’s own case_read_version_required regression (Major 4)5
PostgreSQL integration, completed serial run — 322 tests272 passed, 44 failed, 5 cancelled
PostgreSQL integration, full Node 24 run — timed out at 1,200 s52 failed, 26 cancelled
PostgreSQL integration, prepared-DB remaining files10 of 274 failed
Schemathesis fuzz — 2,811 cases across 96 v1 operations90 distinct failures
Cold npm run ci, failed at lint4,686 errors

Neither 90 nor 4,686 is a count of independent new product defects: the cold-CI lint failure is purely because CI lints before the first TypeScript build. The branch cannot reach merge-green without the Major 4 fix.

Migrations and remaining reds
SQL files added · directories34 · 33
Edits to existing migrations0
Implied deploy order8 steps
Files supplying a rollback procedure0 of 34
Files with known production/staging application status0 of 34
Evidence gates intentionally red15
Reds that are pre-existing debt, not this diff3

The 15 intentionally-red gates cover provider, device, legal, store, observability, on-call, pentest, PDPL, residency, workers and others. The 3 pre-existing reds are production:readiness:check crashing on a missing HelpContactOpsScreen.tsx, the 38-vs-52 visual state matrix mismatch, and 23 npm advisories on an unchanged lockfile.

Links

Raw locations
  • /Users/stevanl/dev/reports/overnight-2026-09-12/ela-merge-readiness.md
  • /Users/stevanl/dev/reports/overnight-2026-09-12/ela/notes.md
  • /Users/stevanl/dev/reports/overnight-2026-09-12/ela/findings.json
  • devbox:/tmp/ela-review-20260912-2245/REVIEW/ — full logs, per-finding refutations, tests.json, migration-inventory.json
  • devbox:/tmp/ela-review.log

Unverified

Problems