Skip to content
turnscanner

Changelog

Generated from the repository at build time. 858 commits, subjects verbatim from the log except 47 where a phrase is withheld from public copy and marked [redacted].

2026-09-23 · 22

c5c6248docs(site): record evidence boundaries and release checks
8ff0476fix(board): preserve published rows and distinguish unavailable evidence
d28082esupplysnapshot re-taken after the box's soupsieve 2.9.2 user-site install; the four soupsieve ids are gone, the baseline shrinks by two
14b7e64supplythe Python audit matches a finding to the baseline by ANY of its ids — id churn is not a new vulnerability
c190657supplyrefresh the box Python snapshot (4 days from the age gate); prune idna, rename three ids; soupsieve left RED on purpose
cfdf2f2fix(security): pin patched adm-zip and retire fixed advisories
60edfcdanalyzerthe decision record reads ONE canonical batch, never infers not-evaluated from absence, answers today with today, and enforces entitlement before the service-role read
f008cc5trackfact labels wrap on a phone (the row was 440px wide at 375); board walkthrough: the BET line is history, not a seat
a14a350AGENTS.md: the decision record, the three clocks and the v53 read on Track — the shipped contract
926cc09analyzer"why not X?" answers from the decision ledger (schema_v54); board + track carry the decision facts and three clocks
2936874carda room measured against an unconfirmed prior session is "—", never 0.00; agent docs match the shipped UI
bf6b491boardcompact call cards; track: exactly three sections; the decision facts on the row (schema_v53)
9928d29sitepolicy v3.2, the four readiness states in plain language, and the BET band renders history only
b80f426board + track: an empty session says WHICH kind of empty it was
3d5499ehealtha zero-call day is a decision, not a missed publication
502d3acdocsrecord live Phase 1 and Track deployment proof
9d8c339fix(site): align Track calls with displayed timeline session
320320afeat(site): render validated empty V3 sessions
498f020docsverify current runtime context
1b5fe8bdocsalign Phase 1 state, open work and agent handoff
5b265c8changelogthe internal-register ruling was NOT claim vocabulary, and H23 took it with the list
9c123ea[redacted] #35: one commit subject stopped every deploy, and the revert that proved the wrong cause

2026-09-22 · 31

8b254d2LOOPS: close-day 2026-09-22 — ten rows, one reconciled on a production fact
f27182fsetupsRECLAIM is BLOCKED — off the card and marked in the product (ruling of 2026-09-22)
bccc3c7H23 closed: the changelog's second vocabulary is deleted, not lengthened
412915dstudySEAT-ORDER-1 §2 CORRECTION (the direction was inverted) + §6 the shipped rule
03ba6f3docsthe changelog trap — one commit subject stops every deploy
501dcf0boardthe 15:50 tag column, and the two gates that keep the copy honest
a18f68fchangelog[redacted] "[redacted]" — it is what has been blocking every deploy since 21:55 UTC
0eeaaa0member copy: KEEP and TRACKING stop advertising the product's immaturity
fd0b548Revert "Merge pull request #462 from diegozacco/worktree-keep-column"
1d2fb4aRevert "Merge pull request #464 from diegozacco/worktree-affirmation"
5d369e3the affirmation: member copy stops advertising the product's immaturity, and a gate keeps it out
2ceb716studySEAT-ORDER-1 registration — the card's LEAST preferred shipped seat out-read its most preferred; frozen forward-only, post-hoc origin declared
317fc0bboardthe 15:50 tag is a column in words, and the keep copy stops advertising its own immaturity
0a025a1studyTWO-WORLDS-1 §5.2 NOT SUPPORTED — with the volume leg actually read, the cut loses to the card and the two daily-chart legs are the negative ones
0538fd2studyTWO-WORLDS-1 §5.1 — the registered prior: W [redacted][redacted] on 23 sessions, t 0.34, 10 identical sets; V absent by construction, recorded
a9d3562trackthe daily-chart structure behind each seat (schema_v52) + changelog redacts signed percentages
9650b61docsapproach map — context onto the board, the 15:40 KEEP line, analyst alerts with follow-through; alignment audit of 2026-09-22
d8ee508studyTWO-WORLDS-1 §1b W-cut amendment — fewer seats by structure score, k=2 primary, registered before the supplementary pass finished
ae79374studyTWO-WORLDS-1 registration — daily structure ordering the card's gated pool at 09:40; [redacted] before the [redacted]
c66624fspecMORNING INTEL §4d — the watch study (prior t=-2.32, Q-B open) and the member pre-open record/keeps lines
da30585studyCARRY-FORWARD-SEATS-1 §6.1 — the 09:40-basis prior (31 sessions): watch -0.38% vs card [redacted], t = -2.32; Q-B open
f372acdstudyCARRY-FORWARD-SEATS-1 [redacted], frozen before the 09:40-basis [redacted]
bf0f949autopsy card: the date lookup walks the same column ladder as the front card (11c sibling)
8c2e133specMORNING INTEL §4c — the loop: lanes record in the brief (real numbers), news-tape grader
18e4b37specMORNING INTEL §4b — the ladder flag, FORMULA-1 on the record, the [redacted] watch and its [redacted]
7130a5cdocscorrections after Diego's review — analyst source was wired all along, backfill built opt-in, daily capture not needed
89f691achorenudge PR sync after the amend (no content change)
3b7c853seat facts v2 on /track: strict opening ratio with its reasons, schema_v51, the measurement registry, and the gaps report
0dde9cbspecMORNING INTEL — rulings received (FMP bounded, lane armed, reader wording) and the end-to-end read-backs
3a4f817specMORNING INTEL — Yahoo premarket carries no volume (measured), same-time rvol, ruling (c), read-backs
a353c6fspecMORNING INTEL — brief v3, tik seat-facts, news-tape alert, and what the research found

2026-09-21 · 12

8034489changelog[redacted] "[redacted]" in commit subjects — main's deploy chain was red on it
61d7f7bseat facts on /track: open-10 demand, prior-session high/low, pressure band (schema_v50)
c6fe111studyZONE-BREAK-CONTINUATION-1 — NOT CONFIRMED (+0.6pp pooled, worse than gap-matched peers)
d55210fstudyREACH-HOLD-1 results — zero candidate separators at the bar; exit-policy is the successor
1d7570estudyREACH-HOLD-1 [redacted], frozen before the [redacted]
bb55431researchthe ten questions for consistent +%, anchored to real calls
0f2a426study[redacted]1 registration, frozen before the [redacted]
7f73ac9study[redacted]1 [redacted] — NOT CONFIRMED; the lift is gap composition
5640a4astudystamp both first-unattended-run Fable proposals (windows open 09-22)
e78caaestudyPREMARKET-ACCEL-1 — Diego's no-FMP ruling recorded; archive-only baselines
dbcbd10studyPREMARKET-ACCEL-1 registration, frozen before the archive run
52ce617researchpremarket-acceleration map — have vs missing, probe design

2026-09-18 · 18

da4f650research[redacted] plan + week [redacted] (shipped hc#222)
254f790study[redacted]1 [redacted] — NOT CONFIRMED as registered (mean holds +0.90pp, tail fails on un-replayable gates)
2942631study[redacted]1 registration, frozen before the [redacted]
8d9313cstudySEATING-ROOM-1 appendix A — in-sample week table + yahoo buy-to-3 measured
0af430dstudySEATING-ROOM-1 stamped by Diego 2026-09-18
1040ce6studySEATING-ROOM-1 draft registration — frozen before any test
e732737researchretract the walk_order persistence claim — my listing was head-truncated (11g)
8493ef3researchAXTI 2026-09-18 case — the warnings existed at decision time, inert
46b83f2close-day 2026-09-18: C19-C22 + F1 — billing wall, prod behind, suite abort, yahoo silent, fable live
46089f2researchphase D built and merged (hc#218) — deploy armed for 22:02 CEST
2ce5be7researchphase C done — cron armed, rehearsed, both proposals stamped
03d5ec7researchstamp both Fable proposals as registered studies
52f5aaaresearchphase B supervised runs delivered — measured costs written back
9d52efaresearchAMEND-1..6 approved by Diego; phase A built and merged (hc#213)
c4924a9researchjournal revived (325->568 rows, newest 09-15); MAE blind-spot on Fidelity rows flagged
c89ddfcresearchbox checklist executed — journal appender dead since 08-03
540b30fresearchFidelity populations reconciled — v2 table replicated in substance
5786e4fresearchFable gap map + morning-engine audit (phase 1, repo-side)

2026-09-17 · 4

dc7faf0docsFABLE-RESEARCH-1 spec — the nightly research analyst
789abd5trackthe consensus mark renders on each seat
8c2ee89tracktier-first card order and the formula's graded record beside each seat
f41688dboardhonest-stale live columns, and the tape's clock ticks on failure

2026-09-16 · 1

5b93be2gateP13 closed — the copy-block bound is structural, and it refuses instead of shrinking

2026-09-15 · 7

a3a4e2eboard tracking: an after-close fire prints its bars without a zero denominator and its refused result with the linker's reason
8316b83boardTRACKING rows for RUNNER, GRINDER and ASCENT under the calls, live research in five states, zero influence on the card
f556290glossary split, Option A: RUNNER and GRINDER keyed by [redacted] / [redacted]
3682189docs(contract): record the 2026-09-15 rulings and the glossary-split blocker
3215983formula contract v1: the remaining ten, site half (Phase 3)
6217a9dformula contract v1: RECLAIM end to end, site half (Phase 2 slice)
1bcdf17docsFORMULA CONTRACT v1, Phase 1 of the phased brief

2026-09-14 · 10

dcff647track formulas: spell the confluence weights out, the claims guard reads a plus before a number as a brag
5e40e1efeat(track): one setup, one slug, one formula across the board, the library and the digest
fce4405track digest: name the base of each RESULT number
2f3361bfeat(track): fill the Decision Digest from the call's packet and the day's result
6af9cd0fix(site): unblock the Netlify build refused since 356e5a0
85a0deffix(engine): unblock engine-ci name lint on lane_public
e9cc56ddocs(track): record deployment handoff status
22e86d6feat(track): add time-locked specimen evidence
8e29f04docsdefine news reliability and eleven setups
1bd28abfix(track): unblock production release

2026-09-11 · 8

2b4f4c9docsadd complete specimen evidence table
771830adocsrecord Track evidence rollout
8771c69feat(track): simplify into Today Ask and My trades
51b5a3afeat(feed): project call evidence without routing change
4e6d470feat(engine): backfill shadow evidence for specimen ledger
ebcfe81feat(engine): add shadow call evidence packet
7919ce0docsdefine Track evidence contract and promotion gate
8f86b68docsdefine compact Track and evidence model

2026-09-10 · 28

00b4eb4featsurface shadow call lanes in Track
6c4c31efixfile lane audits by scan market date
43f2168featrecord scanner call lanes in shadow mode
599036ffixreject nonfinite lane inputs
ff36b00fixpreserve absent lane score state
453825dfeatadd shadow call lane router
bef6cfcdocsdefine call lanes and track plan
86cde3dLOOPS C16: the box pull changed what the suite collects, so read the SET, not the count
2453e55LOOPS C18: close-day cannot run the deploy's gate list from a worktree — rc=1 is BLIND, and the sweep's real coverage is named
cbff01fLOOPS P17: correct the ceiling — FMP sustains >=720/min, so the "300/min plan rate" was a misread bucket
026dca2LOOPS reconcile with the peer's close-day: P19 corrected to done, C18 for the gate-list gap, H16's pipe escaped
2ac0d80LOOPS P17: the card now records seat-eligible completeness (hc#175, box 4cbced1)
75202a6Track as a beginner learning loop: Study lesson, Setup library, My Trade DNA, cue contract
8beb485close-day 2026-09-10: C17, and [redacted] #34 for a diagnostic that wrote
e44fb85LOOPS close-day 2026-09-10: P19 learning loop (PR #410, preview red on the builder), C16 suite_daily red on a named set
76d4ef4LOOPS P17: name the right instrument for tomorrow's reading
4444d70LOOPS P17: eligible-first proven on a real pass — the two groups are completely disjoint
b6fa7eeLOOPS P17: escape the raw pipes that broke the table row
093113cdocsTrack beginner-UX research, the source the learning-loop plan was built from
1273890LOOPS P17: the pass does not need the full universe — 1,575 of 2,045 can never seat; eligible-first ordering live (hc#174)
20fed06LOOPS P17: withdraw step 1c's ceiling inference — the capture log cannot record a refusal, and counts cache hits
5828a16LOOPS P17: walker pace step 1 measured — the pool is produced by the pass, Yahoo wins nowhere in the card window, peak 870/min pace with zero refusals; #171 on master, not on the box
9ac8339LOOPS P17: WORKERS 6->12 live (hc#173) — measured throughput peak; residue is FMP's 300/min rate cap + stale plan config
fe002ed/news: every row opens — plain sentence, terms of trade, what the kind is, the receipt
d136e69LOOPS P17: 09-10 re-measured on the FMP-first walker — pass 242 s, coverage 60.7% (from 35.5%), pool doubled; residue named
bb5a5baosvsmol-toml 1.6.1 -> 1.8.0, the advisory that landed overnight
6158b8dLOOPS P17: FMP-first walker live on the box (bfb4f38, 09-10 14:55 CEST); port-22 cause is ufw's source allowlist
84677d6LOOPS C12: 3 of 7 fixed (hc#172); the other 4 do not reproduce, and C15 says why

2026-09-09 · 13

bdfad94LOOPS P17: FMP-first ruled and merged (hc#171), not on the box — port 22 filtered again 09-10 01:56 CEST
23b79b6LOOPS P17: 09-09 re-measured at 35.5% — the pace is 6 threads x (FMP + Yahoo) per symbol; Yahoo denser on 4 of 120
14eacacAutopsy card: an uncounted row on or after 2026-09-09 saw the nine-bar window — the date is the fallback the column cannot yet give
882326eLOOPS C12 -> C12 + C14: the two 09:30 jobs are unrelated, and neither was what C12 said
e4afc42LOOPS S10: the news-seat description, produced on the box, a description with n
0c9b058S9b supersedes S9 by value; entry_percentile named for what it is (unbounded); S6b's second defect filed
09c6a66LOOPS S10: cite hermes-core #169 and turnscanner #398
ddf1c27Turn window becomes 09:30-09:38 (nine bars) from 2026-09-09; a fact renders with the completeness it was computed on; past seats stand as published
3e571efLOOPS C10: the slip shipped in the interim shape (ts#396); the rows-at-build log still owed
c5550e2close-day 2026-09-09: H35 to in-flight with its deploy artefacts, C12/C13 from the sweep
d321200/news: the slip, rows fetched from /api/news after mount, rating actions in the ruled shape
f2c7882LOOPS S10: bar-completeness study row, Phase 0 measured, blocked on Diego, PR #394
df010a6STUDY bar completeness Phase 0: two instruments, 09:39 build race, epoch keys filed twice — measured, nothing changed

2026-09-08 · 47

bd3a02bLOOPS C10: the failing stage is next build with real rows; two false failures were mine; re-land draft #392
5612731SPEC: the perspective layer, operator only (Diego 2026-09-08); LOOPS P18
c248f66LOOPS: C10 the /news slip revert and its unread builder failure; C11 the advice guard is vacuous on one-line pages
d614f1fName the MACHINE, not just the path, for the operator lane credentials (#388)
6341fd6LOOPS P17: 1c gzip shipped on the box (hermes-core#168, 1409a82), 5/5 live chokepoints gzip; meter reading owed
32c2e97Revert "Merge pull request #380 from diegozacco/worktree-news-page-slip"
688f7f2LOOPS P17: 1c gzip measured — FMP honours it, 8.4-9.1x on 1-min, 6x on eod; not shipped, meter side unknown
722874eLOOPS P17: 1b measured — bounded eod/full 16 rows/3.6 KB vs 1,254 rows/284 KB; eod bytes ~12x down; 1-min refetch is now the larger share
ecea8a4Every subject reports, even when an earlier one is blind (#383)
78e4ab0osvaccept the two unfixable extract-zip/adm-zip findings into the baseline
37ef049The wrapper rewrote itself mid-run and silently skipped the rest (#382)
8465691osvbump analyst_ci's nested sharp to 0.35.4, prune its baseline entry
ef7492fLOOPS P17: 1b shipped on the box (hermes-core#167, e4720d1), attribution corrected, after-measurement still owed
a9f7048/news: the slip. Rows grouped by session in place of the cards
2c080f2Wire the agent surface gate to the operator lane (#379)
44c7b82osvnext 16.3.0 -> 16.3.3, sharp 0.35.3 -> 0.35.4
2bd38a3LOOPS P17: cause named — FMP Starter bandwidth cap binding since 2026-09-01
125fdbbLOOPS: H23 sixth occurrence (ts#375) and C9, the osv job's two Critical next advisories
1bdf27echangelogredact a percentage beside a cadence word; cf3b684 blocked the deploy carrying /review/news
7174bb2The gate could not see a new skill, and alarmed on the weather. Both fixed. (#374)
3d8df42/review/news: the operator research view, built to the 2026-09-08 layout
cf3b684LOOPS P17: the 09:40 card is built on 38% of its tape, under 55% every [redacted] since 2026-09-01
e2bff05LOOPS: close-day 2026-09-08 reconciliation
41c6e9dArm the agent surface gate's skills half, from a clone the job owns (#370)
bc88848A6: a permanent gate on the agent surface — skills and MCP servers (#369)
ede5c0cNews surface: the layout as mocked 2026-09-08, saved to the plan with its generator and fixture
e5c5ff5Adopt context7 + magic-mcp behind the SkillSpector gate; reject agent-reach (#367)
ee76706News surface: Diego's six rulings recorded; Lane B cut; counter 5/20 plus one disputed
ba76b98P6b: the gate's RED run, the counter corrected to 6/20, and the news-surface plan
68f5b6cengine/ drift sweep: 110 files, and the mirror is the stale side
ae63fc4S9: the 2026-08-10 card is NOT recoverable, by design — and would carry no caps
d737142S9: the denominator settled on the ledger — 107 seats, 20 sessions
2208b45[redacted] #33: the 08:30 brief said "nothing timed" while six names reported pre-market
27c75dbSWEEP D3: the CLOBBERED residue is deleted, and I was wrong about its writer
5a2c055LOOPS H36: in-flight, with the artefacts — merged, not deployed
00bbb0eDisarm the live-claims schedule; the re-arm is one named commit
23c6c71Sync notify_split from hermes-core f99b056; the operator lane is reachable
141ce9cosvpin the three vulnerable transitives, rather than leave the gate red
d83c02aH17: FLOOR-REFUSED is a NAMED exemption with a failing control, not an absence
cd3fdc7SWEEP register: force the two decisions the sweep uncovered
fd5d52aS9: NOTE 2026-09-08 — the cap census, resolved; stratum arms unblinded
b47ca5dLive claims guard: run the deploy gate's own rules against what production serves
f2eab0aSWEEP-2026-09-08: the register, six LOOPS rows, and the DST correction
d3ee4ddLOOPS: P11 and P12 close on production; the control-bound finding becomes P13
26066e9P9: the turn-window label reads "vs prior sessions", not "vs its average"
472df49ENGINE-CI: baseline measured where it gates — add the one ubuntu-3.12 node
f4d28dbENGINE-CI: the engine suite runs on every push, gated on an off-box baseline

2026-09-07 · 7

68cc517LOOPS: P11 carries its PR number
495609dGlyph registry, legend page, inline definitions, 3-step how-to-read
2610ff8[redacted] #31/#32 + LOOPS H34: the egress boundary, closed on production facts
7a0f1eadocscanonical Telegram channel names; legacy PRIVATE/PUBLIC ids are deprecated aliases
faffcf0S9 v2 STAMPED — genTime 2026-09-08 02:33:38 GMT
3c9de56S9 v2: registration text with the four rulings applied — UNSTAMPED
b0b0e49PIPELINE-MAP: Phase 0 read-only map of crons, entry points, egress, reads, writes, dead lanes

2026-09-01 · 15

9ab3023P9: an unmeasured seat renders nothing, not three em dashes
ced58f2P9: the turn-window facts render on the autopsy card, EN + ES
5d9809ccatalyst flag: the bucket unblocks radar_catalysts; the real ask is filed
0b0331fS9 §11: the descriptive, run after the freeze — direction matches, n is eight
cdb8b3fS9: the operator's top-100 observation, frozen and stamped before any outcome
86ff1e3designthe catalyst/news flag — researched on live data, not built
6676668R18 closed: the per-job timeout audit, and the flag stays off with numbers
e8cb3deimpossibility sweep, second pass: the corrections, in the code
54a2ae3sweepcomments asserting impossibility + doctrine #30
461143cP9: schema_v46 for the turn-window facts + the producer's measured numbers
bd3ebc3P6b: gate:nointernal covers the capture fields + doctrine #29
1c0c2dffreshnessthe allowance, measured properly, and why it does not shrink
3871f25S6b RUN: no feature passes — exhaustion is filed with its numbers
fb3e900board cache window 900s -> 60s, and the disclosure that goes with it
f85a2b7[redacted] #21: "the 401s stopped" was false; LOOPS H32/H33 from the EOD verification

2026-08-31 · 7

c078495S8: the wider range and the band die too — permutation control is the finding
a525bf3S8: the sell-delta floor is measured and it fails — sign is backwards
1b2a8d5LOOPS: H8 stays in-flight (artefact unreadable), H31 opens on the SSH lockout
bc5e772P6b step 1: published_ts audit — no ratings source passes, and we are the reason
b740bf6LOOPS R16: the 09:40 card reaches the phone ~10 min before the board
4c13270LOOPS R15: KEEP_NOTE still restates the withholding promise
91e7d4bR12: the withholding promise, stated once as the ladder rule

2026-08-30 · 6

105a102P6 expanded: seat-time catalyst capture spec (P6b), no studies registered
b3137c2preregS6b supersedes S6, frozen and stamped; restore the dropped TSA chains
3e685a5board header: the date printed twice, found on production after #322 deployed
ee97883prereg README: write the verify command for an outsider
21b6b0apreregS6 + S7 frozen and RFC3161-stamped alongside R1-R3
1750e8dBOARD COPY PASS: 7 cuts, EN+ES, and the voice gate that keeps them

2026-08-29 · 17

74eb246LOOPS: R11 ruled — archive-first close, retrace fallback-only, tier-disagreement ledger; PR deferred post-Monday by order
1a10da0LOOPS: R11 — dual close-tier cent drift, found by the 08-29 call-invariance proof
f6ddb94record freeze: no green share until the source provably carries both colors, honestly valued ([redacted] #28)
f73a812analystbudget ARMED on production — flag set, redeployed, burn drill 9/9; schema_v45 ledger cascade
27a2a95LOOPS: H30 done — extractor refuses rogue sections, proven through a green gated deploy
a1c0c0dextract_policies: a non-DOC section in the extraction zone is a refusal, not a slice (H30)
1cbb7e9LOOPS: H29 — v43/v44 verified write-shaped from the box, 28/28
e4320e8analystv43/v44 live verification — 28/28 by real verbs (check_analyst_budget_ledger.py)
ee9d0f4remove the analyst-disclosure pin #310 added — #308 reworded the copy first and won the race
751b46eLOOPS: H24 done — the header claim is counted, verified on production
18d6698policy drafts: the analyst ToS draft moves above DOC 1 — the extractor was one 'run the remedy' from publishing it on /refunds
d11615dclaims guard: pin the analyst disclosure's '[redacted]' (deploy chain was red on main)
24a0a1echangelog header: the redaction count is counted, not claimed (H24)
fbce70fanalyst disclosure: reworded — the guard's own noun cannot appear in member copy, even negated
93e1d2b[redacted] #27 + LOOPS: the write-verification doctrine and the R10 class sweep record
64d6f77R10 sweep: verified writes (site) — thread memory, commit stamp, distill null-check
ff96866LOOPS: H29 step 1 done — schema_v43+v44 applied by Diego 2026-08-29

2026-08-28 · 59

a0e8e0bdocsbot-hardening ADR (non-adoptions with reasons) + LOOPS H29
4163eddanalystpersistent disclosure line EN+ES + ToS analyst section draft (pack item 4)
84bd33aLOOPS: R9 closed under ruling B on production facts; R10 opened (frozen-row upsert reports success)
ed171e1analystwallet caps — minute rate, concurrency claim, monthly token budget (pack item 3)
024cf60analystthe four-verb verdict — allow/reask/redact/block (pack items 1, 2, 5a/b/c/e)
b0c8375R9 ruling B: the component is the autopsy's single renderer; every embed-era disclosure ported
53cd659LOOPS: R7 closed on production facts; R9 opened (autopsy body-embed discrepancy)
518362acoverage denominator renders where the autopsy actually renders (item 6, reachability fix)
50fa17eLOOPS: R4 banner ruling applied, R7 diagnosis corrected to schema_v42, R8 registered
6e310a2banner ruling: the internal register's name never reaches a member surface
bfef54cschema_v42: journal grader write shape for user_trades / user_trade_results (R7)
f0b881cLOOPS: fix pack 08-29 closes R4/R5/R6/S4 on production facts; R7 opened (review_shape pin-stale)
11fd6ff[redacted] #25 + #26: grade only what the archive proves; a seat is only as fresh as its newest bar
b4946e8board shows the incident line: published HH:MM ET on a late-stamped session, EN+ES
d23cb48board renders the grade-state notes: corrected and pending, EN+ES, from drop_reason tokens
d708069LOOPS: H27/H28 testimony fix landed (hc#129) — in-flight, close on the weekend fires
f667e48LOOPS: close-day evening sweep — H27 keep_tag first red, H28 drift alarm unreadable; [redacted] #24 (the gutted-changelog deploy)
5154b6bLOOPS: full-pull 08-28 findings — R4 late-publish invisible on /board, R5 TEM graded on an 11:19 print, R6 review 0/10-vs-UNKNOWN, S4 feed-lag seat study
526b3c1LOOPS: close analyst_ci rerun row on the 31/31 fallback-lane table
1cd15c9LOOPS: H16 CLOSED on production facts — 0/12 ids, 45e840d redacted, 66 dates; H24 opened
d2359ebanalyst panel: the SHAPES surface carries the whole glossary, defined
ea3840echangelog'[redacted]' joins the redaction list — the fourth word a blocked deploy taught it
14b3eb0gen-changeloggeneralize #284's synthetic-repo guard to a history floor
dec71bbgen-changeloga deploy host's synthetic repo is not our history
8ace9cf[redacted] #20: closed on the artefact — first publish on the new key
3b5dbaaspecRAM verdict (GGUF 1,777 MB fits, official 5,358 MB does not) + GuardDog findings
e42df87aligner captions: wiring spec + LOOPS S3 (blocked on wrapper license)
990986fhooksthe shared checkout is read-only off main — doctrine §10 amendment, machine half
24c0892GLYPHROW: \b misses snake_case derivatives — match tokens, redact whole tokens
571ee63LOOPS: H20/H21 — the two shrink-only vulnerability baselines get owners' rows
33afa2fLOOPS: Diego's 08-28 rulings recorded — ts#271-first deploy order (H16), not-on-legend [redacted] pending confirm (H17), weekend baseline deadline (H18)
6c3de79LOOPS: H19 — four untracked live-only scripts on the box, H14's class as absence
f084334ANALYST CI: cap gpt-oss reasoning burn, build pacing into run.sh
f7a2fe5LOOPS: close-day sweep — H16 changelog leak in-flight, H17 twelfth-glyph decision to Diego, H18 watchman red set; [redacted] #23
d828531analyst_ci: cap reasoning spend and let 429s retry — carried from the eval session's working tree by the close-day sweep
dfff1d9changeloginternal glossary ids are published copy — redact them like claims
b72ae80LOOPS: H14 done — deletions committed as hc#126, box tracked-clean at 4dfb20a
b47ec51LOOPS: H14 proposals.md half closed — landed as hc#125, box clean on the path
a590666supply-chain CI: osv extracts by BASENAME, so the fixture gets its own dir
3eaf73fsupply-chain CI: the controls fired and the harness read them as failures
c0f9694supply chain: pnpm with scripts blocked, release-age delay, and four audited gates
1af597aLOOPS: H15 dawn preflight ARMED, H14/H8 pull attribution closed by Diego
3bd34acLOOPS: H14 — box working-tree drift, observed twice, owner Diego
f6629baLOOPS: deploy reconciliation — P5/H4/H9 done on production facts, H8 pull recorded, H13 registered, the merged-vs-done rule written in
a9344f9LOOPS: H2d and H2e to done — both artefacted, neither taken on report
89b0dc8LOOPS: H11's adjacent finding closed by hc#119, verified independently
f30e4b4LOOPS: my H6 renumbers to H12 — the id was already taken on PR #253
3a52becanalyst CI: XSTest pairs over the production panel prompt — promptfoo pinned, egress blocked
43d95b2LOOPS: H10 worktree ask-mode gap, H11 pipe-verdict doctrine done
2ef5834[redacted] #22: a verdict that passes through a pipe is not a verdict
e2c7567ENV_LOCK guard: the over-match is the design — a note so nobody fixes it away
4b45828LOOPS: H7b done via the b182904 pull, H8/H9 merged awaiting the box, H9b gap named
c4a34e7LOOPS: H2e (intraday_scan truth fix, in-flight) and H6 (scan duration, open)
3e6e5edLOOPS: H6 outage repaired with artefacts, H6b absence gate, H7 ENV_LOCK, H7b frozen
fbfe761ENV_LOCK: cp of the guard's own file is not a credential write
6cfbf4bglossarybyte-identical copy of hermes-core's [redacted] entry
9bdb061boardthe absence notice must survive a stale copy — and incident #21
7c7b2e6[redacted] #20, the absence-notice gate, and ENV_LOCK
fb35c8bhooks`*crontab*` refused a test file and mislabelled the generator

2026-08-27 · 45

2fdd8fc/track import: the picker was locked in silence, not duplicated
6c40cf9LOOPS P2: the editorial pass, with the artefacts, and a row for what it found
5f0da1a/track import: the picker was locked in silence, not duplicated
5849793/track: `normal-case` beside `lbl` does nothing, and I said it did
4dba010/track: one explainer per surface, and analyst answers stop shipping markdown
cc9f3a5LOOPS: H2d reassigned to f9 by Diego, H3 marked done and verified
5685788LOOPS H2d: flock -E 75 has no reader — row, not a detour
0e25462netlifythe BET band is no longer empty, so the note saying it always is goes
d4553f2LOOPS: P2 and P3 done with artefacts, P4 measured, P4b reported
c68d6e3verify_keys: the shape rule refused the keys actually in use
0f8f152[redacted] #20: a number read without its frame, six times in one night
656382etrackthe newest session's autopsy is open when the page loads
6f7a0e0verify_keys: a key with no ping and no stated reason fails the gate
f6299c8LOOPS.md: the open register, and the rule that stops the spiral
3f859de[redacted] #19: a service-role key I exposed, and two rotations that were not
881e5a3reviewput the autopsy back in the body it was deleted from
29abd6b[redacted]: restore #17, deleted by a commit about secret scanning
c98218ehooksthe worktree probe went inert three minutes after it shipped
b85eabdhooksthe guard must not go silently off in a worktree
ba90cb5hooksrefuse bulk git add and edits to protected paths
5c5308everify_keys: ANTHROPIC_API_KEY is required, not optional
84f0dd6secret scanning: a hook that fails closed, CI that verifies, and a control
afc71e7[redacted] #17: a comment asserting an absence forbids the check it invites
e6f08b7verify_keys: pin the Alpaca ping inside the data prefix, in a test
065fc74gatecontrols: run the cache probe self-test once, not twice
5a34990verify_keys: the credentials, checked by shape and then by use
fd3e9d0[redacted] #16, and the control class a build cannot provide
af34fa3autopsythe CDN key must name the session, or every date gets one card
a71846anetlifyrun the .ts gates on deploy, which needs the runtime this box already has
a8e7bbfanalystthe panel refused the very question it was rebuilt to answer
1c39701drilllane: a detail line that reads the same way on PASS and on FAIL
3cbf126analysta decline is not a guard refusal and not an outage
f033cb4analystthe panel's boundary is provenance, not the shape of a string
0077ce8glyphrowthe dist scan learns the row marks, so 08-27 fails predeploy
b216907glyphsa generated specimen glyph, and a seed the deploy cannot lose
e89a910depsroughjs 4.6.6 — the generator half, which has no DOM
7b78b07trackrestore the live guard's non-vacuity anchor on the seat rows
38898a0EOD: yesterday's hold class, and one line on what the machine measured
1ad7ebbtrackthe autopsy on every row, a panel that names no security
be4e944homepagea first screen, and the record it prints gets a floor
4b63b42lanebound the primary's total time so the fallback is reachable
d15bcd2a11ythe file input had no accessible name
4fae755[redacted] #15: state declared in one component, fetched in another
cafc867journalopen positions during the session, so the ask is reachable
239a7c5drillimporte2e — the import ROUTES, end to end, in the repo

2026-08-26 · 28

d5ce80cCSV import: upload, dry-run diff, commit, and the matcher as its own job
be6cfc6incidents#13 a log that cannot be causal, #14 an additive lane that wasn't
18517bfschema_v41: CSV import — executions are truth, round trips are derived
fd73e28analystplain words to screen readers, distill route, TTL control
4a9721fenv-probedeleted, having answered
bc6aae8env-proberestored for one production read, to be deleted in this session
7fd995cbetband gate: an empty band has two causes, and only one is a fault
8cfc5bb[redacted] #12: a deploy gate that can refuse a correct build
30584f7brain panel: no ticker appears in it at all
fb52df6analystREPLACE 'Your trades', not sit beside it
1d32717gatelive: the deploy mode cannot depend on which argv slot the flag lands in
ca56705[redacted] #11: production had not deployed for six hours and nothing said so
910f0b4ENV.md: the three ways the LLM lane's config fails silently
9155d31companionone dense line per trade, not a panel per trade
caba1eftrackthe journal comes first, and there is one log control instead of two
804b4b7lanethe fallback key gets a name the platform does not claim
1a32f1bmacro-tapethe freshness pill, and every page on the site is now CLS zero
2620a21mergerepair two things git merged cleanly and broke anyway
1bc682dmd, legal-page: a legal outline and links you can find without colour
476b29fauth-navreserve the slot, still refuse to guess what goes in it
1e4fb93macro-tapethe strip reserves its tallest shape, so the board stops moving
40b790fanalysttwo real function-execute holes, and two false alarms in my own drill
4e04f25tailwindfill in the after-numbers the previous commit left as a placeholder
3c853a0fontsthe text is laid out once now, and the numerals matter most
153dab3tailwindthe font note said it could not be the cause, over the cause
5720034accountthe Google button has no disabled state, so it stops pretending to
0929500trackkill two duplicates; add the QUANT ANALYST subpanel
50dc65bbet band: the empty state can no longer certify a broken pipeline

2026-08-25 · 20

5bd565bsitethe grey that was never a token, and the guard that could not see it
6e65b3denv-proberemoved, having answered
699ba8denv-probe run 4: GROQ_API_KEY re-set per-context
97fce14env-probe run 3: isolate is_secret
89d9a7denv-probeforce a real rebuild for the scope experiment
d0903b7rebuildENV_PROBE_TOKEN regained the builds scope
2c58617palettethe styleguide reads the palette, and nothing restates it
0abf671env-probecarry a readable token
eb0d5ddQuant Analyst, Fidelity import, and the guard hole both of them found
6c34584netlifyname gate:glyphrow:live as the second deployed-URL check
d681388glossaryno internal id crosses to a browser, and the guard can prove it
3b4939eglossary/track stops printing an internal id, and the guard learns to fetch
17ecc43changelogregenerate — picks up the a11y commit
3980839a11ythe board reaches Lighthouse 100 — contrast and link affordance
582c233gatecheck_glyph_row — the control specimen-glyphs.tsx already claimed
30f5755changelogregenerate — picks up the glossary commit
c46c52aboardthe specimen glyph row and legend — the eleven live shapes, drawn
450d4f9glossarymirror the approved renames — RESORTE, CAÍDA CONTENIDA
f06f0ffglossarythe daily log and ladder lane speak public names too
411b9e9glossarythe specimen map reaches the site — one file, both languages

2026-08-23 · 4

bd1f314a11ythe provenance and state dots carry role=img
9d1c62btrackthe five-second page — hero record, compact cards, date lookup, reads on demand
d1b6e71eodthe day's news renders as symbol chips, not titles
31515cftrackthree panels — QUANTUM BRAIN · TRACK · EOD; the board stops re-rendering the journal

2026-08-22 · 3

12723bfverify_grants §6: the exit columns joined the expected set (schema_v37)
626f773STATE: owed action 1 settled — migrations + grants applied, drift fixed (080e0f9), drill 47/47 from the box
080e0f9grantsregister macro_tape + operator_feed (fourth matrix miss), and re-grant the client-callable functions §2 strips

2026-08-21 · 5

4b5da06STATE: CUSTOMER-1 session — healthy trace, 2eb1909 re-landed, exit flow, ES lane, three owed operator actions
b40ea1fes lane: the send ledger's Spanish columns, and the env contract
81b99d6journal exit: Mark sold — one-shot, cell-frozen, and a closed loser stays (schema_v37)
5ca48dastripere-land 2eb1909 — the config-gap catch was lost in the deliver_invite rewrite
36a81b8docscustomer #1 healthy money-path trace — the reference fixture

2026-08-20 · 3

40733e7P4: shape cell truncates at phone width so Close stays on screen
141ab99P7a: the invite subject gets its space — TurnScanner Pro, both languages
5b9ad1cP4: the daily-log table collapses at phone width; the macro % stops clipping

2026-08-19 · 13

f873912rhythm~20% tighter vertical spacing on track and board
cf9ebe5board caption: stop pointing at the removed misses table — again
ec8b1cfcopy diet: the chrome explains less, the record still says everything
764f186trackMoved-without-us leaves the page — the log owns the not-called story
569cc40fixturesevery noted day renders in the local gate build
06668fbDAILY-LOG-1 (site): the day card becomes the full-text 09:40 log
8fc1352provenancealert prices render at 2dp — the ledger's float noise is not copy
3318202changelogredact the guard vocabulary a subject cannot safely print
a277231[redacted]1 (site): pinned day notes, record epoch, [redacted] guard
0ded9a6track provenance: RECONSTRUCTED vocabulary — the claims guard was right
35684edkey containment: no 64-hex secret-shaped literal in client static output
1e7143ePhase C1+C2: /track provenance card + operator cockpit, fed verbatim
c3def01boardone session anchor per card, capture label, deploy unblocked

2026-08-18 · 13

a97319aschema_v35 v3: the touch trigger is bookkeeping, not a diff
e8693ecschema_v35: drop the label checks by definition, not by guessed name
5b8a235schema_v35: build the pure-remap proofs into the transaction
11b624echorere-trigger Netlify build — the b718412 push event was dropped
4a06e0cNO-CAPTURE: render the [redacted] verdict, not the latency story
da56fcdlaunch polish: journal row controls, tape freshness pill, review unlink
622476dBET seat render: exact label on the chip, legend under the board
e62a941boardthe macro tape — six public instruments above the card, context only
51ec4eenewsstrip the legacy per-item disclaimer at render — it lives once, in the header
cc13b78trackeach fact once — autopsy folds become one link, one legend not two
e69eb63trackMoved without us becomes a date panel — one session at a time
f8d3440news + autopsy: /news says when it last looked; the live autopsy finally renders
3778feftrackundo a misclick as an appended reversal, and one card per day

2026-08-17 · 6

52bae44Account: manage or cancel billing in one click — the portal opens already signed in (#170)
1549285boardKEEP tag member surface — schema_v31, LIVE_COLUMNS, chip, legend
05ca3b7docsthe revoke landed — correcting a claim that was true for one commit (#168)
f99ffeadocstonight's state — the register moved server-side, and a merge is not a deploy (#166)
149c045grantspolicy_versions is server-only, now that the route is live
e0084bbaccountthree groups instead of six stacked cards

2026-08-16 · 38

4da187fclaimscontain winPct to the three entitled journal files
d7e85edkey containment: declare /api/policy-versions, do not un-service-role it (#164)
e07c68bchoretrigger a Netlify build
771c5f6policy register: the browser stops reading the table, a server route serves it (#162)
5e0c526Revert "schema_v7/v13: supersede the policy_versions client grant" (#161)
43cd557schema_v7/v13: supersede the policy_versions client grant — it is a loaded gun (#160)
a3ef015grantspolicy_versions is read from the BROWSER, and the matrix said it was not (#159)
3923481docsthe open-PR list was wrong before its own merge commit existed (#157)
3bd1bb5boardthe Track button was English-only on /es/board
333130bgrantsdrop my duplicate email_change_requests rows — the file would not run (#156)
08ef7c8docsthe handoff says what is true now, and how to tell when it stops being true (#155)
8802f6dverify_grants §6: table-driven, and a row that asserts a lock is SHUT (#153)
c9e1c02trackshow WHEN the scan reached a name, and survive the column not existing
e7dc76fgrantsdeclare email_change_requests as server-only
9f02eb5grantsown-row SELECT on policy_acceptances — the /board wall, twice
06ba6f7account, track: split the two journals instead of leaving both (#150)
e70948dtrackthe misses gain WHICH gate refused them, where one was recorded
5e7af10E: the journal gains board capture, edge and this trade (#148)
84916e5gate429 was told to "please try again", which is what caused it
568ea96board/api/board was still shipping the movers, so members saw them
28f7d90F: change your email behind a 48h lock, and set a password (#144)
260c484accountrender the scored journal, and a starting-capital field
bd85771gatereadOk was carried for four days and never once read
b7f55e1docsthe handoff, and the three premises that were not true
4da143cboard, track: the legend explains what is on screen, and follows the rows
c2bb311schema_v27: record user_trades_action_check, which no file defines
811d9caboardthe card is the names we alerted; the misses are on Track
e3c7863trackthe missed movers come from alerts_public, not the review chain
52aa533drillTEST BUG, not a regression — and one literal for one fact
f8c3719board-clicka PARTIAL index cannot be inferred by ON CONFLICT
e16c2c1drillthe column-grant control could not fail
44458d4board-clickaction is "buy", and alert_price is not a column here
96c6801drilla rejected key is not an empty table
86dad65schema_v26: TO authenticated on the fill policy, explicitly
49f9c8bverify_grants §6: assert the column grants the rest of the file cannot see
54d924fpublish_grades: stamp WHICH BAR the close came from, or admit it cannot
631fd06grantsthe 5 tables the matrix never heard of — two of them broken
2b8269dschema_v26: %% is format() escaping, not a SQL string literal

2026-08-15 · 30

fbdad39key containment: allow /api/journal, and say why comments cannot go inside
978516bboard"I took this" on every call row, entitled members only
77ba1c8journalthe write path, and the personalized EOD behind the live gate
54e3c38schema_v26: click-to-track on the live user_trades, not a new table
32255e0wrapperforward "$@", or --dry is a diagnostic that writes
a0a4566schema_v25_verify: return a table, do not raise notices
c6e56adrunbookhermes-run does not exist, and the box's own cron pattern does
a66a8e4live_quotes: prove the write landed, and make a closed market provable
9f636b7styleguiderender the star, because a registered branch is not a reachable one
8ff8b32security-checkdeclare live-quotes-server as a service-role importer
3052356gatelive: a control that cannot reach the database must not block the deploy
c452f67gatelive: prove the tape refuses, and run it on deploys
a823d30boardEOD% and PEAK go live for members, and the star is drawn not shipped
33d6a9flive_quotes: THE quote feed, and a dead key that says so
c8bf756schema_v25: the one table no client key may read
95eeef0auth email: one file per template, so a paste is one click
732eaf4emailwhite page, dark card — it was reading as a web page, not a message
cb98f5fauth email: the last two templates, and the placeholder is chosen not guessed
b541c76auth email: generate the four Supabase templates, do not hand-write them
4d9d87femailone brand shell, and the HTML path inherits the legal enforcement
edfd036brandpublish the email lockup at a hosted URL
e68ce6csign-input the status under the button, and stop the retry spam
4d16a4bsecrets[redacted]
3219b8eboardthe empty card is twelve minutes of every morning, not an edge case
88bd9a9delaydo not sell a number nobody has measured
3f00c4echecka quiet tape is not a closed hole
4a72198schema_v13: the delay belongs in RLS — written, and HELD
744de61gatedelay: prove the paywall REFUSES, and run it on deploys
d082014board, pricing: the delayed card, and a page that stops selling
7299f09entitlementdecide on the server, redact before the wire

2026-08-14 · 16

816a6ddboardon-demand revalidate hook, so the 09:40 card is not up to 15 minutes late
8619ff8autopsyregenerate the site snapshot, unfreezing /review at 2026-08-13
f3ab554preopenbrand TurnScanner, and stop publishing a personal Gmail to SEC
686ca5awatchmandrift asks the modified half the question it never asked (#126)
ef14507watchmana weekday-only check is not dead on a Saturday, it is closed (#125)
67cb399watchmandrift could not go green, and 14 of 14 were false (#124)
99497c8watchmana check in CHECKS is not a check that is watched (#123)
f74ea19watchmanEOD_NOT_BEFORE_ET is 17:35, and the repo had the round trip's middle (#122)
e33f88bguardsthe vendored cache must hold mainline's guard or newer (#120)
d006a9ewatchmanrescue the consent check and its wrapper out of the box (#121)
2b9d092legalabbreviate the manifest's commit shas so the guard stops firing (#118)
8afdb24guardsone digest exemption, not two — a sha256 is a sha256 wherever it sits (#117)
083167cDelete schema_v3_eod_review.sql — schema_v3a/v8/v9/v21 already own this
ff69432Compose schema_columns with _write_shape: name every missing column
33fb08eHand over the eod_review DDL as paste-ready SQL, with three fixes
41efdddWrite-shaped sink probes: name the PHANTOM (sink=None citation)

2026-08-13 · 77

9eed1c5watchmandrift runs on a schedule, and two bugs that made it lie (#119)
180bf20the header said the publisher never writes eod_pct; it had for hours
52e0991guardsthe pre-commit hooks were never in this repo (#115)
c3396ecpublisher.py owns eod_pct on a called row; the grader withholds it
4ffac86gateswire contrast and freshness into the deploy, not just predeploy
641056cboardsay how old the page itself might be
1a1f030sitethe red that failed only while you were pointing at it
e851898day_accel: a previous session's return now says that it is one
e307f33scorecardeod_pct reads the close, and the ranking still reads `move`
1a1e91eprior_close_move: the close-vs-prior-close nobody was computing
55ea41blegalconsent copy may not change under a version string that stays put (#112)
8fe56a6legala screen_hash that names no screen is not evidence (#111)
458e326review re-run refuses instead of downgrading when it cannot count
8b52a01gateno consent link may be locale-prefixed
a05fd6dtrackthe newest session is open, every older one is one click (#110)
5ac052baccountthe acceptance check must tolerate duplicates, because they are permanent
7715291moverschartPreviousClose is not yesterday's close — and my verification was circular
2685767moversrecompute eod_pct against prior close — both halves of the board are now one measurement
a5a6134movers/board was publishing five-year returns as one-day moves
ce5c66ctrackdrop the placeholder dots; and unblock the claims gate
ea9bbc4tracka second channel for the our-fault/by-design split
d262112trackone reason per row — the sticker replaces the code, it does not sit beside it
7f1dec8accountcorrect a comment that promised a database constraint that does not exist
4502ad1eod[redacted]
f4ac5b8accountthe sign-in click is the consent, and nothing is silently disabled
0968d69watchmanalarm when the live tree carries code no repository has
1f40812watchmanpull check_coverage in from the box, and write the control it promised
30a55b1eodthe chain moves to 08:00 ET the next morning, and the session moves with it
1a5a28d404the Spanish line rendered as literal \uXXXX escapes
b29cb5auithe 404 was Next's white default, and the board was 2x the phone
63e87eenewsa picture of nothing, and a picture of another story, are both not this story's picture
0a72eb2accountthe name is asked for once, at sign-in — and the chrome knows who you are
3306383testsbring four assertions onto the rule that actually shipped
1dba01dboardan event that has not happened is not an unknown timestamp
f3b4343boardname the gate, never its floor
a907e79blockersrecord the friend enablement and the two-repo hazard
87954d7reviewboard_json is a public endpoint, so project it like one
eda5111friendremove the temporary diagnostic — the flag is live
b1f7c8ffriendreport what the runtime actually sees, temporarily
595d158reviewpublish the miss, withhold the instrument
19b185cdeployrebuild so FRIEND_ENABLED reaches the function
11d11c8trackthe member's own rows lead, the public record follows
75e26f8peakno call minute, no peak — and two tests from PR #93 that found it
6074bcfstyleguiderender the PEAK cell populated, so the branch is proven every build
df3cb40peakthe column went on the table /board does not render
342d85dpublisheryahoo as the prior-close rung alpaca cannot be, and the date gate it needs
f961f2cpeakthe board column and the member's own capture efficiency
640386apeakwhat the name offered after the call, beside capture and never instead of it
67ce403publisherthe day's move on our own rows — the denominator was never missing
0de968fkey containment: declare the unsubscribe route, and run this gate LOCALLY
b71174eopsthe watchman panel was reading a file nothing writes any more
14c7270emailsthe opt-out that FOOTER_MARKETING has been waiting for, and the two scheduled templates
e4217a9claims guard: exempt the two files that implement and instruct the rule
112503dfriendthe companion, caged — and the guard that has to run at request time
f749859welcomethe return page, and the invite it must not fake
d1d602apricingone measure, two doors, and Join stops skipping the decision
329d320reviewthe autopsy reaches the page — why a name that moved was not called
3660ff8vendortrack the scheduler env-reload patch, and give the tripwire a body to restore
8ee6554accounta failed read is not a missing acceptance, and the column is centred
257c308watchmanone state file per check, because one file had six writers
407f97eblockersthe EOD% gap is a stale comment and an unjoined denominator
9a4a010boardfive movers back on the card, the rest on request
ecd939dschema_v21: the sticker columns, and the drift guard that keeps them wired
dca19d0trackthe sticker renders, and an unknown family stays unknown
bbc774aautopsypublish the sticker, keep the walls withheld
c86b9beSTATE: the account shipped, the entitlement got a writer, and an alarm that could not see
35502b8wrappersthe delivery watchman's six schedules
45e840dwrapperssprinter_grade and turn_ping, same missing-from-the-repo cause
97ce6b8wrapperscatchup_sweep, whose only copy was the box
966e491stickersa name we would refuse on purpose is not a miss
be547cbdocsretract the two blockers that were actually the outage
5b5fd96watchmanthe check for money taken could not see the failure that happened
c9f6169newsthe canonical .env must beat an inherited environment, or a rotated key never lands
57e9f58tracka short default view, and the journal stops showing someone else's trade
27e3c16reviewone copy of the misses, and the wide board folded
9869222mdthe three block types the renderer let through as characters
f40487cschema_v20: revoke anon explicitly, because the grant was never what kept it out

2026-08-12 · 52

c9fb47anewsthe feed gets a nightly writer, and finnhub turns out to be 401ing
ab37eadaddonsthe bets entitlement gets a writer, and the membership stops being collateral
b3024cbvendor25 files the box was running and the repo had never seen
26e90ebcommswire the two Board messages, dry by default and refusing to speak twice
0a8bb0acommsthe two Board messages, drafted and guarded, deliberately not wired
98bfefaonboardingtwo steps and a way out, shown to accounts that have not done them
9ff37e7accountthree cards, one column, and a form that refuses a blank surname
6e2bb0apricingthe bets tier stops being a free radio and becomes a thing you buy
f8d4dc8accounta save is an event, so stop rendering it as a permanent line
75ee482STATE: what reached the board, and what did not
20eb065trackcap a session at 25 names, with the real total on the button
293d3e3siteretire Teardowns from the nav
2d3c86bSTATE: the companion is wired, and the publisher drift is closed
200954cpublishertest the gate's refusals, and commit the canary's cron script
375e9f1publisherclose the box drift, and fix the canary it brought with it
6a20391companionthe runner and loader tracker.py never had
bff4859parse-tradea nullable enum is anyOf, not type[] plus enum
97beeeejournalsay the trade in a sentence, and let the member check it
1766b05STATE: the evening — the card rebuilt, the journal that could not take a row
0394006publisheracknowledge schema_v18's three columns in the review drift pin
7217011check_all: load the legal flow's two variables, and actually run its gate
c9b59fcjournalcarry the trace id, or the measured columns can never fill
fb1756bjournal7/7 — a member can log a trade, and only that member can see it
9ee35ebeoda send ledger, so "did it post?" is a query and not a scroll
b16dad1journalthe log-a-trade button has never worked, and could not
2e3c26bjournalmove it off the settings page, and prove the companion cannot advise
a3d7fa3publisheran unknown pool is not an empty one
a395343STATE: the policy notifier, and a deploy tool that was making duplicates
cb59e5ddeploythe box's scripts/ is this repo's root, so stop nesting a scripts/ inside it
9c2ee0egatesthe two pure-decision controls now run, and one of them is probed
f7170aflifecyclethe board says which day it is showing, and the review says its state
487a33cpolicykeep the promise the Privacy Policy makes about material changes
491f3dehealtha stale board is degraded, not ok
13b201fSTATE: the afternoon — the account grew around the money loop
0d421c1rescuethe 09:40 single-writer rule, which existed only on the box
e715575termsone acceptance record, one version number
33a4813webhookthe purchase is born linked to the account that consented
1774558sign-inthe box you have to tick was 13 pixels wide
7dd35adSTATE: the day the money loop closed, and the two controls that were right
879b259privacyname the phone number, and let one document version on its own
6557d91accountcollect the person, and require them before a sale
e00201acheckoutno account, no sale — enforced where it cannot be walked around
efe7a71accountsign in with Google, behind the same lock as the email path
d766d95changeloga commit subject is published copy, so stop letting it break deploys
a8f37e1accountidentity on the profile, erasure that works, and the buyer's own token
b5c5933invitedeliver it directly, record it, and never fail quietly again
8507129invitedeliver it directly, record it, and never fail quietly again
d7ba0d6stripe_webhook: rescue preflight_email from the box, where it only ever lived
f97324cstripe_webhook: rescue preflight_email from the box, where it only ever lived
9b6c051supabasethe grant that was never applied, and a per-role probe for it
34640c2supabasethe grant that was never applied, and a probe that would have [redacted] it
5a75e46consent UI: say which box, stop lying about what failed, and be tappable

2026-08-11 · 107

c9b292fSTATE: close two Owed entries that measurement disproved
591e9e8STATE: the audit, what it changed, and a ledger that was missing five rows
c8f9d72scorecardthe specimen autopsy, which existed only on the box
a14abfaeod_review: the review body the box has been running, and git never had
ba043e7stateDEPLOY_LOCK section + the state of record at session end
6a38bacdeploy lock: the copy path holds a lock, because scp bypassed the one we had
59c216demail alarm: write a JSON line, like every other line in that file
fa37671stateopen a repo↔VPS drift ledger, and put "make deploys pull-based" on the list
ea16364emailMX check warns instead of blocking, with the alarm that makes it safe
8340ad8publishercarry the close's minute and source instead of dropping them
de84dffstatethe migrations are applied — closing two entries that now read backwards
fe2c049grantsrecord the three tables nobody had decided about, and unloop the hint
c1f5882grantsheartbeats lost its anon SELECT the moment this file first ran
408ee3dschema v12: record which bar the close came from, and from where
fba787bsupabasethe checker was right; the card window resets to 09:30-09:45
bf8b718Send a User-Agent to Resend, or Cloudflare answers instead of Resend (#29)
b4fb542Send a User-Agent to Resend, or Cloudflare answers instead of Resend
534c40csql gate: the v3 split dropped an owner-pinning trigger and left its tail behind
f7fd12estateclose the wip/parallel-session item, and file the red SQL gate
559c649plays/: land the 7 files that wip/parallel-session actually still had
67a24b2supabasethe checker measures what the API can see, not what Postgres has
fecfdf2Preflight for the email path: five checks, read from live DNS and Resend (#25)
302c401Wire the legal gate into the build; enforce the postal address at the send (#24)
ab5a65dsecurity headers: netlify.toml's block never reached a single page
c78100bturn ping: the dry run was more permissive than the live path
7831ea7Redeploy: pick up TURNSCANNER_LEGAL_NAME
7b44229turn ping: CLI entry, and nine jobs registered 09:31-09:39
266173achangelog.json: leave main's copy alone — it is generated, not authored
b0386a4ES mirror: the four journal pages, and the timeline rows that were still English (#22)
3e39e41boardan ungraded session is an absence, not a zero
2ef1e00turn ping: the send path, fail-closed — no ledger, no send
23a3a33turn_ping: the decision logic, hard stop 09:39, cap 5 — send path not wired yet
9fe719fsupabaseanswer "is this migration live", and stop half-publishing when it isn't
42ba093landingthe turn window is the scan window on / and /es too, not the observed spread
614023cpublisherthe live sink was missing heartbeat(), and nothing failed loudly
5e2cd51stateFMP is for the card — the constraint is a rate, not a cost
93cd0b5next-env/tsconfig: keep main's Next 16 config, not the build's regeneration
0635bd8boardrender the heartbeat — "last checked" answers what "last updated" cannot
2e4cf6dpublishera heartbeat on every run, including the ones that publish nothing
8fb9414stateitem 1 was a misdiagnosis — Netlify auto-deploy was never broken
168ddf3env docs: which context each variable belongs to, and why not all of them
d4b5127es/es/account — the signed-in surface, minus the part a site change cannot reach
ec18ddestateSupabase vars added to the deploy-preview context
939ef5cfmpthe pump-dump check stops buying bars it already has
c3ef020Merge main into next-16 — their board change re-gated on the new framework
677761dpublisherthe card exists from 09:42, ungraded, instead of at 16:25
7c7a06cnext 16: outputFileTracingIncludes is top-level, and the include is load-bearing
83ddab2boardturn and alert are one window, not two minutes
00beb87gatere-verified after merging main (board card change + schema_v10)
358a1b8esthe Spanish site is a site now, not three legal pages
967a34aboardthe card is what we called; the misses move to Track
237f823statedeploy previews DO work — correcting today's own entry
5ff344esite-urlbridge Netlify's system vars through next.config — they never arrived
78d0269schema_v9: the verify block matched a rendered signature string and lied
dd67a59publisherthe EOD post can carry company news, and renders its absences
162a483tsconfigdrop the throwaway dist dirs Next appended
a8bde9dsite-urlthe Netlify fallback was inert — CONTEXT was a gate, not an input
2ae7925boardpublish WHY a name was dropped, not only when it was scanned
ca82f23schema_v9: reviews publish at write time, gated on the claims guard
659c9bepublisherone race, one fix — the schedule keeps it, the wait goes
753ad11state08-10 review stays dark — ruled, not deferred
565a56bstatemain does not auto-deploy — the line said it did
44d918fogthe cards were 500 in production, and only in production
acb03a0next 14.2.35 -> 16.3.0, postcss floor 8.5.23: 0 advisories
663e52cfmprecord the peak minute, the only rate the ledger could not report
be74476statethe status audit — heartbeat, publisher idempotency, FMP peak, job table
aa59d57netlify triage: share cards had no domain, and the gates had no runner
3e1cae2wipthe parallel session's work, committed so it stops blocking every push
9377669publishertell review_job how many names the 09:40 call listed
4c2117cboardnine misses were mislabelled TOP-N-CUTOFF; the cause was scan lateness
84caeabchorevendor the live engine — the repo is now what runs
0b8fa34reviewa session that listed names at 09:40 is not CORRECTLY_SILENT
3ebfb6cboardclose standardized to the 16:00 auction print; capture recomputed, no grades changed
1fd9b3emdcap article image height so one item cannot outweigh three
664b8b7newssubject panels — each item gets a spine, a subject and one rail of colour
f761158scorecardgrade the alert rows too — the board finally prints green
e046addscorecardpublish the grades, which nothing has ever done
5e855a4scriptsask the database what it has, instead of trusting the SQL files
d82fe6cfix/pricing was 500 in production, and so is every teardown page
7529232mdlinks and images, https-only, with a hostile-URL test that can fail
c8b4357guardsone denylist for both perimeters, and it now fails the deploy
43ceb58brandTurn Minute(TM) and TurnScanner(TM) — the USPTO specimen
fc93d36teardownsthe 0-of-10 day, built from the record
5dec6adtrack[redacted] history — the rules [redacted]
5c685fcwebhookthe emails package was unimportable by the service
6117926supabase-adminthe service-role client must never serve a cached read
e72d7acnews/news ships — company news for names we listed, and nothing else
4221ff5newsten days of receipts, with images, published
fb78a7bnewsa catalyst is company news, and silence is published
f88c081claimname the missing variable instead of listing the candidates
1dcccd3reviewstop asking for columns anon is forbidden, and getting 401 for the lot
9842b87boardNULL is not a HIT — an ungraded row stops being published as a win
f932062fix/go sent every Join click to the deploy hostname
aadf273statethe Netlify env traps that cost an hour
d403268checkoutprobes removed, fix kept
39d37f0checkoutstop being a dynamic page — that is what 500s here
9af77e0diagthree probes to prove the /checkout 500, not guess it
6443392docsSTATE.md, and the Netlify env the site silently did without
cee6a05review_job: the first key that WORKS, not the first that is set
6fa6b97publishercapture leads the board, computed from the archive not remembered
a3d6a83fix/checkout 500'd in production — remove useSearchParams from the money path
cec20c4checkoutno named counterparty, no sale
c380d1dlegalthe two strings nobody may invent come from env, not from the source
fa34303schema_v8: the verify block crashed instead of reporting, on the branch that matters
f6ab581schema_v8a: correct the record — the 404 was absence, not privilege
6f591b9grantsservice_role may execute functions — the line that was never there
4f17f8cschema_v8: publish_session_review, and the four timeline columns it needs first

2026-08-10 · 30

b56c5a7legalthe signup consent flow, recorded before the money moves
0f0f1c2guardsgive the claims gate the shipping copy it is supposed to scan
ae77804claimsa price is not a performance claim
54e9befrepoignore the agent worktrees before something commits 853 MB of them
28eabdescriptsone pre-merge command, and it proves it can fail
084a90bsupabasea grammar gate that reads inside DO blocks and function bodies
7180fdaguardsa package, so the name means the same thing in every collection
b902a1cpublisherthe shape gate asks the database instead of remembering it
780ffc6publisherLIVE_REVIEW_COLUMNS is the table that is there now, not the one remembered
fb05d89publishera shape mismatch prints its sentence, not a urllib traceback
2c297f7sitethe nav wears the mark, not the caret that stood in for it
45dfa41publisherreconcile alerts_sent with the table that is actually there
5b73e99schema_v6: alerts_sent gets turn_minute and level, and sent_at may be null
4ff4ac8incidentsclose #7 — the control is green and it discriminates
227d8eacensusthe coverage gate compares a percent to a percent, and fails on demand
66bdf98grantsdaily_reviews goes column-scoped; entry_lag_json withheld from anon
4edf722Fix the census coverage floor: pct_measured is a percentage (citation #7)
35407e4Widen .gitignore ahead of the VPS pipeline landing in git
411dbeepublisherthe bridge from Hermes artefacts to TurnScanner
e7509bfincidentsfile #7 gate-that-cannot-fail and #8 silent-watcher
d356c03pricingtwo plans, Founding 50 primary, with a sold-out flip
384517bplaybookadd the phantom-artifact test to doctrine
98237ffstripedeploy the webhook that was never deployed; correct ENV.md; file PHANTOM-1 + SEC-2-REVISIT
12acaa5goadd ?plan=monthly, and refuse to guess an unrecognised plan
03c7e83grantsdeclare the two tables verify_grants.sql found on the live DB
6f07195supabaseone canonical grants.sql, always last, with a verifier that can fail
38c126fschema_v4: companion_answers, so "the chip disappears forever" is true
795ac67playbookthe kill is load-bearing, the add is noise
545700fsitethe trades view at phone width, and the shot that proves it
657b291site"Your trades" on /account — one card, the latest read, the rest folded

2026-08-09 · 25

21bfb64schema_v4: companion_reads, the ping toggle, and one INSERT door
3c56cf5companionseven rules, two sentences, and a guard that refuses advice
045d5a5playsreversion_curl is RED, and both its specimens are disqualified
0441c7ddocsthe playbook and the measurement spec, each rule carrying the incident that made it
12f2449schemasplit v3 — the live DB already has two of its four tables
180e48asitere-shoot the four approval pages in the space-blue theme
f202512eod_review: ask the database which tables exist, and say so
d6e98aasitethe OG card carries the mark, not a placeholder for it
cb2e145brandtiles, favicon and app icons generated from the tile spec
6700a72baseline(strip): 31 runtime-state files, so live positions never enter engine/
1341067baseline(vps): verbatim re-capture of /root/.hermes/scripts @ 66.94.98.64, 2026-08-09
27c7aa6brandTurnScanner mark + doctrine
df66c40sitere-shoot the styleguide tall enough to show the timeline section
ac0781asiteprove the claims guard and the key containment, do not assert them
89e6d39site"Your journal" on /account — the level, the fill, and the distance
3ac3978sitethe timeline at /track, and the strip that replaces two paragraphs
ce79808sitesession reviews at /review and /review/[date]
444bd70sitethe track-record data layer, anon key only, three kinds of empty
ab148e0siteone markdown renderer, shared, with the styling outside it
ac8cda8eod_review: one write door, and the median is withheld by projection not by care
069ae4cbackfill63 timeline entries, 42.9% of them misses, none claiming LIVE
1a016cfschema_v3: reviews and timeline, with provenance made unforgeable
349cf59nginxthis box serves the webhook now, not the site
e901961netlifythe site moves, the webhook deliberately does not
e14f85dsitere-shoot every page at 1280x900 under the new brand

2026-08-08 · 31

b2b3eb0enva wiring script that takes secrets from a terminal, not a transcript
6fbc464docsname NEXT_PUBLIC_SITE_URL, and point env questions at ENV.md
9557e25notify+scorecard+docsbrand strings in published output and runbooks
6b974a8securityturnscanner.app is canonical, .tech redirects, conf renamed
87fdb09sitebump TERMS_VERSION for the renamed service
ca4efb4siterebrand every visible surface to TurnScanner
b9a83a8envone page that names every variable and no value
b2fbaf0preopenFMP promoted to primary behind one door, with a ceiling that survives a loop
f59ec5bguards[redacted]
c471ff3sitechangelog refresh, 21 commits
6b4e226sitechart gutters, the compound-area column, and 1280x900 of every page
64a5395preopen$0 stack wired, and the volume field that was publishing a false zero
7b2d3c7sitecopy pass, one page at a time
28fa744sitea mark, OG cards from real numbers, a changelog from the log, and an inbox
0998937sitethe board sorts, and the blanks stay at the bottom
26b8d0fsitea real AXTI session on the teardown, first-seen bars only
55ba903sitethe board is the first screen, and the hero is gone
8ad5d0bsiteIBM Plex self-hosted, and the card deck flattened into a table
35edc5bscorecardkept_pct reaches the published board, next to Capture%
9aa6914M0: RED — 0 of 8, and the reason is the spec, not the detector
cd72547scorecardproven against 15 real sessions — one hit in 97 top-mover slots
a5c467dsitethe paywall's second half — claim by verified email, never by claimed email
5841018preopenthe premarket store found and wired — one candidate, not two
29aebf2stripetwo-phase claim closes the last lost-event window, and the README env lie
f6abaf4guards+notify+securitythe claims guard would have bricked the board on ticker PL
e58276fsiteit rendered losses as gains and published the one number the doctrine bans
a5463depreopenthe form 4 parser was guessing, and four sources reported silence as ok
75a5665scorecardthe adapter, wired to the real archive, reporting what it cannot answer
888ab5fstripeit granted access without money and lost customers who paid
f02825cschemathe paywall's database half — nullable user_id, one RLS hole, re-runnable
5c956dcbaselineturnminute build package as delivered 2026-08-08