68 KiB
2026-10-10 — merlin
Screen. Every claim below carries a path, a hash, a URL, or a command with its output, or the word
unverified. Nothing secret is printed anywhere in this check-in or in the files it lands.
Did
Claimed and finished Q12 — are the evidence tiers earned?, the top unclaimed executable item
(WORK-QUEUE.md: Q1–Q11 closed or claimed, Q13/Q19 gated on Alexander, Q9 blocked on the audio
handover, Q20 open behind it, and my own 2026-10-09 check-in named Q12 as my next pick).
Deliverable: recoveries/evidence-tier-audit.md (19,516 B, sha256
625bfb1e9afd9ba3541dc83c09fab39032c7e77095dea616dea60fa70c4ca1dd) — sample rule, legend, method, 18-row
table in the fixed column order entry | badge as published | strongest cited source | verdict | settling evidence, verdict counts, five named findings, and the full read list.
Result: 18/18 justified, 0 too strong, 0 too weak, 0 indeterminate. No badge in the sample
misstates its evidence. What the audit did find is three citation defects and two legend-policy
problems — which is the distinction the item's own framing asked for, and the reason a clean badge
result is not a clean report.
Sample rule, stated before any fetch: every non-documented entry (all 6 — 5 testimony_only, 1
corroborated, 0 unrecovered) plus every 9th documented entry in published index order (12) =
18 of 121. Census reproduced from the live index
(https://alexanderwhitestone.com/stackchain/blocks/, HTTP 200 / 34,488 B / sha256
4f764ef4dfb9c08b2654ff0783550d20ad1bb7a31cb0c32070974a5fe451557e): grep -o 'badge documented'
→ 115, testimony → 5, corroborated → 1, unrecovered → 0, <li id= → 121. The 2026-09-26
census in the queue reproduces to the entry.
All 18 entry pages and 17 cited sources fetched live from this host, ~09:01–09:35 UTC; 18/18 entry
pages HTTP 200 on the first attempt (3,181–5,146 B). 33 of 37 quoted excerpts ≥25 characters are
verbatim in a source the entry cites; the 4 that are not are one passage repeated on four pages
(finding 1). For 8 of the 12 sampled magazine entries the entry's displayed date equals the cited
article's own article:published_time to the day — e.g. magazine-085 shows 2026-08-13 and
the-diy-signing-device-revolution-is-just-beginning/ (200 / 162,809 B / sha
5d6b1a9801ca1792…) carries article:published_time 2026-08-13T14:00:25+00:00.
Five findings, none of them a badge overstatement:
block-25,block-88,block-89,block-90cite their corroborating quote at a URL that does not contain it. All four Provenance panels say the practice "is independently corroborated: a published Stackchain Magazine account records the term 'Skinner Stacking' and describes it, quoted below" — and link the bare site root,https://www.stackchainmagazine.net(200 / 215,836 B / shae7df6364180a…), which detags to 5,036 characters containingSkinner0 times. The passage is verbatim athttps://www.stackchainmagazine.net/a-conversation-with-burnchainers/(200 / 155,217 B / sha50a2e57e3ba661a6…), the publication's only result for?s=Skinner(200 / 107,021 B / sha95f57a614ebc…). The claim holds; four pages need the permalink.event-2022-08-18…names a source it does not link, and that source 404s. The summary says "StackchainQuant's October account also embeds Yellow's August 18 donation appeal and reports several thousand dollars raised under #Stacks4Hodlonaut";StackchainQuantappears twice in the page and is an anchor nowhere, andhttps://x.com/StackchainQuantreturns 404 / 37,702 B / sha2dfa62a242e6…,<title>User Profile Not Found - X | 404 Error</title>. The badge is still earned by what is linked and checked: the quoted post text is verbatim ×3 inx.com/AnthonyDessauer/status/1560325688481026048(200 / 111,659 B / shab03ba32bdbd4…), and the printed txae63c499155ce14064686fc7218af6630cf64fd58a601bba48368b13cf955aa1isconfirmed, height 749999, block time 2022-08-18T17:45:12Z, one output of 851,979 sats (https://blockstream.info/api/tx/ae63c499…).magazine-026names@a_kobywith no anchor (minor, same defect class, no badge effect).- The legend's
Unrecoveredtier is defined and applied 0/121 times, while material fitting its definition ("known to exist, no copy and no independent account") sits in lower-tier Uncertainty panels —block-6: "The $6 post itself has not been produced";block-88: "No post, capture or timestamp located." Documentedon the 91 magazine entries is a liveness claim, not a held-artifact claim. The legend's first tier says "the archive holds the post, capture or receipt"; all 12 sampled magazine entries answer with a Receipt panel reading "No receipt is held for this entry." and a live third-party URL. 12/12 resolved 200 today, but the fragility is measurable: the Bitcoin Magazine URL returned 403 / 4,545 B to a Chrome user-agent and 200 / 341,802 B / shae1826c17863d…to a barecurlagent, in the same minute.
Method note worth keeping: bitcoinmagazine.com 403s a browser UA and answers curl, so a
403 there is a wall, not a dead link — the same class of false negative Q2's record already warns
about for the Wayback availability API.
Blocked
Nothing blocked the run. Two things deliberately unverified, both recorded as such in the deliverable:
- Whether any of the other 103 unsampled
documentedentries has the same defect class. The 6 non-documentedentries are a complete census of their tiers; the 12documentedare an every-9th sample and license no rate for the rest. A clean 18/18 is evidence that the discipline holds where the evidence is thinnest, not that all 121 are clean. - Whether
magazine-012's "a year where official CPI was 6% while food, rent, electricity and gas ran higher" is true of the article's figures. The article is live (200 / 141,125 B / sha8f6efedbd052…) and carries6%once; whether the surrounding sentence says what the summary says is Q8/Q10's lane, not a badge question, so I left it alone rather than half-grade it.
Next
Q20 — excerpt fidelity and placement for the 91 magazine entries (open and unclaimed, opened by
the pipe 2026-10-08). It is the natural successor: Q12 just measured that 33/37 sampled excerpts are
verbatim in their cited source, and Q20 asks the question this audit did not — whether an excerpt is
a literal quotation or a paraphrase, and where inside its source it sits, with offsets and
fractions. Its finish line is recoveries/excerpt-placement-audit.md under a stated sample rule.
Q13 stays gated on Alexander: findings 1 and 2 above are link/provenance fixes to live pages and
belong in that channel, not in this run. Nothing in this tick executed on decisions/.
Ask
Three decisions that are yours, none of them blockers:
- The four Skinner links — repoint
block-25/88/89/90fromstackchainmagazine.netto/a-conversation-with-burnchainers/? It is a link change on four live pages, so it waits for you through Q13. event-2022-08-18's StackchainQuant clause — link a surviving capture of the October account, or withdraw the clause? The account's handle 404s today, so the clause currently rests on an unreachable source.- The legend's
Documentedwording — either narrow it for the magazine class to "a published source the archive cites, resolving at read time", or start holding captures. As written the badge claims an artifact the archive says it does not hold.
No new queue item opened — depth is not thin (Q9 blocked on the audio handover, Q13/Q19 gated on you, Q20 open).
Run detail — Q12, claimed and finished
Clock and host. All fetches from this host, 2026-10-10 ~09:01–09:35 UTC. Working tree at
/root/crucible/q12/; repo at /root/troupe-standup, branch main, HEAD before this run
aab23e5, working tree clean.
Scripts, all re-runnable. parse_index.py (index → 121 entries with badge + external hrefs),
sample.py (the sample rule), fetch_entries.py (18 entry pages), fetch_sources.py (17 cited
sources), check.py, deep.py (bitcoinmagazine retry, blockstream tx, homepage term counts,
Skinner post, siggy commits), excerpts3.py (the verbatim matcher), dates.py (entry date vs
article:published_time), skinner2.py (search → permalink), unlinked.py (named-but-unlinked
handle test), evidence.py (emits EVIDENCE.txt).
The matcher, printed. Strip <script> <style> <svg> <noscript>, replace <br> and block
closers with a space, strip tags, HTML-unescape, NFKC-normalise, collapse whitespace, normalise
quotes and dashes. Verbatim = substring under exactly that rule. Split the "From the sources"
panel on each re-cited permalink so distinct excerpts stay distinct — my first two extractors
merged adjacent excerpts and produced 73 false misses, which is logged here because it is the kind
of defect that would have shipped a wrong number.
Counts, recomputed not accepted. 121 entries parsed, badges 115/5/1/0. Sample 6 + 12 = 18. Entry pages 18/18 HTTP 200. Cited sources 17 unique, 16 at 200 first attempt, 1 (Bitcoin Magazine) 403 → 200 on retry. Excerpt fragments ≥25 chars: 37; verbatim in a cited source: 33; not: 4 (one passage × 4 pages). Verdicts: 18 justified / 0 / 0 / 0.
Two of my own defects, logged first. (a) fetch_sources.py's first version omitted the URL
argument from the curl invocation and reported ERR for all 17 sources — caught because 17
identical failures is not a network shape. (b) excerpts.py and excerpts2.py merged adjacent
excerpts (URL removal) and left <a href=" residue in the fragment text; both produced false
misses and were replaced by excerpts3.py, whose 33/37 is the figure reported.
Limits. All byte counts and hashes are dated readings from this host at ~09:0x UTC — third-party
pages drift, so the hashes re-check this run, they do not pin the pages. Testimony only: nothing in
the archive's own build was read; every grade comes from a public fetch. Not tested: the summaries'
content accuracy (Q8/Q10), the 103 unsampled documented entries, and any documented magazine
entry citing a since-removed article outside the sample. Not touched: no live page, no blocks.json,
no other party's file, nothing in decisions/.
Landing evidence.
$ sha256sum recoveries/evidence-tier-audit.md
625bfb1e9afd9ba3541dc83c09fab39032c7e77095dea616dea60fa70c4ca1dd recoveries/evidence-tier-audit.md
$ wc -c recoveries/evidence-tier-audit.md WORK-QUEUE.md checkins/2026-10-10-merlin.md
19516 recoveries/evidence-tier-audit.md
283818 WORK-QUEUE.md
10870 checkins/2026-10-10-merlin.md
314204 total
$ git status --porcelain
M WORK-QUEUE.md
?? checkins/2026-10-10-merlin.md
?? recoveries/evidence-tier-audit.md
Files written this run:
recoveries/evidence-tier-audit.md(new — the deliverable)WORK-QUEUE.md(Q12 status block appended)checkins/2026-10-10-merlin.md(this file)
Landed and read back over the public forge, not just written:
$ git push origin main
aab23e5..67b892d main -> main
$ git log -1 --format='%h %an'
67b892d Merlin
$ curl -sS -o /tmp/verify-audit.html -w '%{http_code} %{size_download}' \
https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup/raw/branch/main/recoveries/evidence-tier-audit.md
200 19516
$ sha256sum /tmp/verify-audit.html recoveries/evidence-tier-audit.md
625bfb1e9afd9ba3541dc83c09fab39032c7e77095dea616dea60fa70c4ca1dd /tmp/verify-audit.html
625bfb1e9afd9ba3541dc83c09fab39032c7e77095dea616dea60fa70c4ca1dd recoveries/evidence-tier-audit.md
The anonymous raw path serves the same 19,516 bytes with the same digest as disk, so the deliverable is live and byte-checkable from outside this host.
— Merlin
Run 2 — Q21, claimed and finished (excerpt → anchor binding census)
Screen. Every claim below carries a path, a hash, a URL, or a command with its output, or the word
unverified. Nothing secret is printed anywhere in this check-in or in the files it lands.
Did
Claimed and finished Q21 — does every quoted excerpt resolve at the URL it is printed against?, the item the pipe opened at 09:20Z when Q12 closed and the unclaimed executable set fell to one (Q20). This is the first complete census of the property — Q12 found the defect class inside an 18-entry sample; Q21 measures all 121.
Deliverable: recoveries/excerpt-binding-audit.md (110,696 B, sha256
47ff51b0eb7bfe22235ed980fe103572c8534c53669f7030d6c23e77a1b5e66e) — reading rule and
detag/normalisation rule in the header, the census, four findings, the 38-row named-source list, and
319 per-excerpt rows in the fixed column order entry | excerpt text (first 60 chars) | anchor as printed | binding verdict | settling evidence.
Result: 319 excerpts — 311 bound (300 verbatim / 7 marked-elision / 4 URL-tokenised), 4 mis-bound,
4 unanchored, 0 unreadable. All 121 entry pages fetched HTTP 200 on the first attempt
(2026-10-10T13:25:18–13:25:32Z); all 116 distinct anchors fetched HTTP 200 (one 301 re-fetched with
-L, 2026-10-10T13:26:08–13:28Z). Every excerpt carries exactly one anchor (315) or none (4).
Findings:
- The four
mis-boundrows are one defect, and it is Q12 finding 1 promoted from sample to census.block-25/88/89/90attach the Provenance panel's "independently corroborated … 'Skinner Stacking'" quote to the bare site roothttps://www.stackchainmagazine.net(HTTP 200 / 215,836 B / sha256df86fbd68fb1480ede1ffc447a159c4d32c1f9e9c2d13db2695d968b1baf1667/ 2026-10-10T13:32:11Z), which detags to 5,009 characters containingSkinner0 times with the passage absent. The passage is verbatim athttps://www.stackchainmagazine.net/a-conversation-with-burnchainers/(HTTP 200 / 155,160 B / sha2563320342482ba43ce3c2c9781147468352c2689a7b6e10b64f3d56f87a798e648/ 2026-10-10T13:32:12Z,Skinner×1) — the publication's only article result for?s=Skinner(HTTP 200 / 107,021 B; the other result links are site pages). The claim holds; four live pages carry the wrong URL. - The four
unanchoredrows are theThe blocktestimony quotes on those same pages — no source, no anchor, no following anchor in document order. Correct shape for aTestimony onlybadge. - 38 named-source rows: every
@handleand bare URL in an entry's own prose with no anchor on the page (prose sections only;From the sourcesblockquotes are verbatim third-party text and excluded). Q12's two named-source findings reproduce:event-2022-08-18names StackchainQuant (no@, hand-checked) twice unanchored andhttps://x.com/StackchainQuant→ 404 / 37,702 B,<title>User Profile Not Found - X | 404 Error</title>(2026-10-10);magazine-026names@a_kobyonce unanchored. - Zero blockquote anchors with an empty excerpt, and zero excerpts bound to an internal archive URL — all 116 anchors are external; the ledger never cites itself as the source of a quotation.
Blocked
Nothing blocked the run. Limits, stated in the deliverable:
- This tests the binding only — not whether the excerpt is a faithful quotation (Q20), not the summary prose (Q8/Q10), not link resolution (Q3).
- All byte counts and hashes are dated readings from this host at the printed clocks. The Bitcoin Magazine
anchor (cited six times) answered HTTP 200 / 341,805 B / sha256
9c5df6c23b824e1cd4dfbf98e6d401e8e22b55656d08e8f82efa184fa76e1ea5at 2026-10-10T13:26:08Z under a barecurlUA — Q12's morning 403 did not reproduce in this census, so finding 5 of that audit stays unreproduced, not refuted. - Whether the 38 named sources' handles resolve at all was not tested — that is the proposed Q22.
Next
Q20 — excerpt fidelity and placement for the 91 magazine entries is now the only open executable item,
and it is the natural successor: this census settled which URL an excerpt is printed against; Q20 asks
whether the excerpt is a literal quotation of that source and where inside it it sits, with offsets and
fractions. Its finish line is recoveries/excerpt-placement-audit.md under a stated sample rule.
Because the queue fell to one, Q7's never-dry obligation is triggered: Q22 — do the named-but-unlinked
sources resolve? is proposed at the foot of WORK-QUEUE.md (one fetch per distinct named source;
handle-liveness census of the 38-row list). Not opened, per the queue's convention.
Q13 stays gated on Alexander: finding 1 is a link change on four live pages and belongs in that channel.
Nothing in this tick executed on decisions/, a live page, blocks.json, or another party's file.
Ask
Three decisions that are yours, none of them blockers:
- The four Skinner links — repoint
block-25/88/89/90fromstackchainmagazine.netto/a-conversation-with-burnchainers/? Yesterday's ask, now backed by a complete census instead of an 18-entry sample: four pages carry a URL that does not contain the quote they cite. - The 38 unanchored named sources — add anchors for the ones that resolve (and strike or mark the ones that do not, like StackchainQuant, whose handle 404s), or leave the names unlinked as-is? Q22 measures which handles are alive before that call needs making.
- Open Q22? It is one fetch per distinct named source and turns the named-source list from a citation-style note into a liveness record.
Run detail — Q21
Clock and host. All fetches from this host, 2026-10-10T13:25–13:33Z. Working tree at
/root/crucible/q21/ with every fetched body kept beside the scripts; repo at /root/troupe-standup,
branch main, HEAD before this run 87e89ab, working tree clean.
Scripts, all re-runnable. fetch_entries.py (index → 121 entry pages), parse_bindings.py (excerpts +
anchors), fetch_anchors.py (116 anchors), refetch301.py (the one redirect), check3.py (the binding
matcher — check.py/check2.py were its defective predecessors), probe.py (per-residual prefix
diagnosis), named2.py/mknamed.py (named-source rule), skinner.py (the finding-1 verification),
emit.py (writes the deliverable).
The matcher, printed. Detag/normalisation rule is in the deliverable's header; the two classes that
earned it: (a) the entry pages double-escape (&#8217;), so a single html.unescape leaves literal
entities and graded four byline rows mis-bound; (b) 4<sup>th</sup> detags to 4 th, so an ordinal
rejoin rule is part of the rule. Elisions are honoured (the excerpt's own ...), and URLs are tokenised
in both strings where an X post prints a t.co link where the excerpt prints the expanded URL.
Counts, recomputed not accepted. 121 entries / 319 excerpts (311 From the sources, 8 The block) /
116 distinct anchors, all external. Verdicts 311 / 4 / 4 / 0. Named-source rows 38. The four mis-bound
and four unanchored rows are all on block-25/88/89/90.
Two of my own comparator defects, logged first in the deliverable. (a) The first detag treated </a>
as a block closer and unescaped once — seven false mis-bound grades (four byline rows, one ordinal, two
entity rows). (b) The first elision splitter required a spaced ellipsis and missed the no-space trailing
form — a further seven false mis-bound grades. Both were found by prefix-probing each residual rather
than by eyeballing, and the published counts are the fixed run's.
Landing evidence. Committed and pushed as Merlin, then read back over the anonymous forge path —
all three files byte-identical to disk.
$ git -c user.name=Merlin -c user.email=merlin@agents.invalid commit -m "queue: Q21 excerpt-binding census DONE (Merlin) ..."
[main e3b2f4b] ... 3 files changed, 673 insertions(+)
$ git push origin main
8dfc2e3..e3b2f4b main -> main
$ git log -1 --format='%h %an %ad'
e3b2f4b Merlin Sat Oct 10 13:35:36 2026 +0000
$ curl -sS -o /tmp/verify-binding.md -w '%{http_code} %{size_download}' \
https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup/raw/branch/main/recoveries/excerpt-binding-audit.md
200 110696
$ sha256sum /tmp/verify-binding.md recoveries/excerpt-binding-audit.md
47ff51b0eb7bfe22235ed980fe103572c8534c53669f7030d6c23e77a1b5e66e /tmp/verify-binding.md
47ff51b0eb7bfe22235ed980fe103572c8534c53669f7030d6c23e77a1b5e66e recoveries/excerpt-binding-audit.md
$ cmp /tmp/verify-binding.md recoveries/excerpt-binding-audit.md && echo BYTE-IDENTICAL
BYTE-IDENTICAL
The queue and this check-in were read back the same way: WORK-QUEUE.md 200 / 304,736 B / sha256
3da86586d160c140300ec8262951af58d89863aa3f5c7df5c68b970d30086c7c, checkins/2026-10-10-merlin.md
200 / 20,789 B / sha256 6c2c05b20cbe5fab34d56a3c84ab9ddd996f01401fa2c8c943eabd55c01d78d0 — each
identical to disk. The digests above are for the e3b2f4b tree; the follow-up commit that filled in
this evidence block changes this file only.
Files written this run:
recoveries/excerpt-binding-audit.md(new — the deliverable)WORK-QUEUE.md(Q21 status block; Q22 proposal appended)checkins/2026-10-10-merlin.md(this section)
— Merlin
Run 3 — Q22, claimed and finished (named-source liveness)
Screen. Every claim below carries a path, a hash, a URL, or a command with its output, or the word
unverified. Nothing secret is printed anywhere in this check-in or in the files it lands.
Did
Claimed and finished Q22 — do the named-but-unlinked sources resolve?, the item the pipe opened on my Q21 finding at 13:53Z and assigned to me (Q20 was routed to zephyrus-sparkborn instead, since the magazine class is the one he already swept for Q8).
Deliverable: recoveries/named-source-liveness.md (16,731 B, sha256
f12b8a42595a6fd9ba2ebeafc15d4f9cee8631cb2a5725e2cb37ac0a3e04d69a) — population re-derived from the live
pages, the reading rule, the verdict vocabulary, the six-row fix table, the 28-row census in the fixed
column order source | entry/entries naming it | verdict | URL | byte size | sha256 | clock, five findings,
method and limits.
Result: 28 fetches → 27 distinct sources — 20 resolve (19 X accounts + the 1 archive URL), 1
resolve-moved, 2 suspended, 3 404. Six entries name a source that does not resolve.
Population, re-derived rather than copied from Q21 (named.py over the 121 live entry pages,
https://alexanderwhitestone.com/stackchain/blocks/ HTTP 200 / 34,488 B / sha256
4f764ef4dfb9c08b2654ff0783550d20ad1bb7a31cb0c32070974a5fe451557e / 2026-10-10T15:38:02Z; 121/121 entry
pages HTTP 200 first attempt, 2026-10-10T15:38:02–15:38:13Z): 39 prose rows = 37 @handle rows + 1
bare URL + 1 handle named without an @; 25 distinct @handles after case-insensitive dedupe; 27
distinct sources → 28 fetches, because @HappyClownTime and @happyclowntime are one account and I
fetched both spellings as the archive prints them.
Findings:
- Q21's anchor rule was defective and lost two rows. Anchored was a suffix match, so the article
permalink
https://www.stackchainmagazine.net/rest-in-paradise-staceski/ends withstaceskiand@staceskiread as anchored. The corrected rule requires the last path segment of anx.com/twitter.comhrefto be the handle exactly.magazine-003names@staceskiinWhat happenedand inIn plain English; it resolves —Stacey Berisford (@StaceSki) / X, 200 / 58,628 B / sha25654367e6a1b643d13277bd28a6fd1e2bf82112bec32402261d9dddf6fc3a1e7c5/ 2026-10-10T15:39:13Z. Logged as a correction against my own Q21 census, not folded in silently. - Three named handles 404, and one is named in prose as a source of record.
@_overflow__(magazine-020, 404 / 37,678 B / sha2566b05f29fef55d421813c08bec0c5e6d117ae511b19c6539e2e5a95f9aa076b74/ 2026-10-10T15:39:17Z);@humblebitcoiner(magazine-051, named twice — Contributor andWhat happened— 404 / 37,702 B / sha256f28a6675624ee6c1d6e8c94e7738a6dd2da77914206d8a19a4146988ca65fdbf/ 2026-10-10T15:39:33Z);StackchainQuant(event-2022-08-18, named without an@, 404 / 37,702 B / sha25647f73c39ebdbe437559c9532aa1cceeaf69dc3724670f6f3b4ce756f9ec76bf3/ 2026-10-10T15:39:39Z). All three serve<title>User Profile Not Found - X | 404 Error</title>and "The user profile you're looking for could not be found."StackchainQuantis the worst case: the entry's summary asserts what the account "reports", and that named warrant 404s. - Two suspensions answer HTTP 200, so a status-code check grades them
resolve.@BTC_Freeborn(magazine-035Contributor, 200 / 40,800 B / sha25636d526cdf90b655874f6f73c5158a952e9033e1853ff734720b434d4c1898687/ 2026-10-10T15:39:21Z) and@RedTailHawk1923(magazine-056Contributor, 200 / 40,839 B / sha2560bf960adefead1e37bf4ac5dd7a5e20cbcc1d6a53fb44355116073dcd414ca85/ 2026-10-10T15:39:33Z) both serve<title>Profile / X</title>with<h2>Account suspended</h2>— "X suspends accounts which violate the X Rules". - One handle is live but its owner moved.
@captainsiddh(magazine-039) answers —Sidd (@captainsiddh) / X, 200 / 68,579 B / sha256d2dfc77ad5c01e4bad7554add5ceae3b1e7c037ee994c635d1650bc7af25633d/ 2026-10-10T15:39:22Z — while its own description reads "Now at @captainsidd", andhttps://x.com/captainsiddresolves:Evan (Captain Sidd) (@CaptainSidd) / X, 200 / 159,957 B / sha25638e0e29618a8b0ef599ede39f1396f0e5af6040b8143d13d236f7003437b0e27/ 2026-10-10T15:40:39Z. - The one bare URL in the list is the best-behaved source on the page.
block-5's Provenance prose names the Wayback capture of the genesis tweet without linking it; fetched with-L, HTTP 200 / 64,518 B / sha2565ca88e586bfc6b026ff027d1cdf1887e24686ac0d71e2f5fc3237bfd51c8716c/ 2026-10-10T15:39:40Z,<title>AriZonan HODL on Twitter: "Even on days when I'm broke as hell I still stack. Feel free to join me." / Twitter</title>— the live-404 genesis tweet, held by its capture. The archive already knows the Wayback route for a dead X source and prints it in prose without a link.
Blocked
Nothing blocked the run. Limits, stated in the deliverable:
- A 404 says the name is unreachable today, not that the person never existed. Rename and deletion are
indistinguishable from here, so nothing in this census decides whether
@_overflow__,@humblebitcoinerorStackchainQuantwere retitled or removed. - Liveness only. Whether a named source actually supports the claim printed beside it is Q8/Q10/Q20's lane; whether the anchored sources resolve is Q3 and Q21's. Neither was re-tested.
- X byte sizes and hashes are dated readings. The pages carry a per-request
<meta property="csp-nonce">, so the two 404 pages at 37,702 B are byte-different from each other and the two suspended pages at 40,800 / 40,839 B are not identifiers. The clock is the evidence. - No 301-to-a-different-owner case occurred, so that verdict class the queue's Status line asked for is defined and unused.
Next
Q20 — excerpt fidelity and placement for the 91 magazine entries is the top unclaimed item, routed to
zephyrus-sparkborn this tick on the queue's own correction (the magazine class is the one he swept for Q8).
From my side the natural successor to Q22 is the same question Q22 just answered for handles, asked of the
anchored sources: Q21 established that 319 excerpts bind to 116 external anchors and all 116 answered
200 at 13:26Z, and Q3's record already carries one anchor whose liveness is a wall rather than a death
(bitcoinmagazine.com 403s a browser UA and answers bare curl). That is a re-run, not a new item, and it
belongs inside Q3/Q21 rather than opening anything.
Q13 stays gated on Alexander. All six fixes are live-page edits — anchor event-2022-08-18,
magazine-035, magazine-039, magazine-056; strike or mark magazine-020, magazine-051,
StackchainQuant. Nothing executed on decisions/.
Ask
Two decisions, neither a blocker:
- Anchor or strike, per entry. Anchor where the name is defensible and merely unlinked
(
event-2022-08-18,magazine-035,magazine-039,magazine-056); strike or mark where the handle 404s (magazine-020,magazine-051,StackchainQuant)? A struck name loses the reader a claim the badge still earns; an anchored 404 gives them a dead link. That trade is yours. @captainsiddh— update the handle? The prose is not wrong, it is one handle behind (@captainsiddis live). It is a wording change on one live page, so it waits for you.
No new queue item opened. Depth is not thin: Q20 is active and assigned, Q9 is blocked on the audio
handover, Q13 and Q19 are gated on you, and Q8's sweep stands at 73/91 with batch 072–080 next.
Run detail — Q22
Clock and host. All fetches from this host, 2026-10-10T15:38–15:41Z. Working tree
/root/crucible/q22/, every fetched body kept under pages/ (121 entry pages) and targets/ (28
profiles + the archive URL). Repo at /root/troupe-standup, branch main, HEAD before this run
b89cfca, working tree clean.
Scripts, all re-runnable. fetch_all.py (index + 121 entry pages), named.py (the named-source rule
and its printed output), fetch_targets.py (28 fetches), classify.py (verdict class per response),
verify.py (the exact evidence strings for every non-resolving row), rename.py (handle-in-description
scan), recount.py (independent recount of the emitted tables), emit.py (writes the deliverable).
The invocations, printed. curl -sS -o <path> -w '%{http_code} %{size_download} %{redirect_url}' --max-time 60 <url> without -L, so a 3xx would report its own code and Location rather than being
silently followed — no redirect occurred. The archive URL used -L with %{url_effective} %{num_redirects} and reported 0 redirects.
Counts, recomputed not accepted (recount.py, splitting on unescaped pipes): 35 pipe-lines, 34 data
rows of 7 columns, 0 malformed, 0 rows missing a sha256 or a clock. Verdicts over the 34 rows 22 resolve
/ 1 resolve-moved / 2 suspended / 3 404 — which is the 28-row census (22/1/2/3) plus the 6-row fix
table (3/1/2/0). Distinct sources case-insensitively: 27.
Three of my own defects, logged first. (a) I carried Q21's suffix-match anchor test into named.py
unchanged and it silently dropped @staceski; the corrected rule is an exact last-path-segment match on
x.com/twitter.com, and the two recovered rows are the difference between Q21's 38 and this run's 39.
(b) emit.py first keyed its target lookup case-insensitively, which collapsed HappyClownTime and
happyclowntime into one entry and printed the second fetch's bytes on both rows (145,323 vs 146,235);
fixed with an exact-name lookup plus a case-insensitive fallback for the fix table. (c) recount.py's
first version split table rows on every | and reported 8 malformed rows, because X's own page titles
contain one — the file was correctly escaped and the counter was wrong.
One thing I got wrong and corrected before it shipped: my first draft of the queue's Q22 status block
printed a placeholder sha256 for @staceski with a note pointing at the deliverable. That is exactly the
failure the screen forbids, so it was replaced with the fetched digest
54367e6a1b643d13277bd28a6fd1e2bf82112bec32402261d9dddf6fc3a1e7c5 before commit. Logged here rather than
quietly fixed.
Landing evidence.
$ sha256sum recoveries/named-source-liveness.md
f12b8a42595a6fd9ba2ebeafc15d4f9cee8631cb2a5725e2cb37ac0a3e04d69a recoveries/named-source-liveness.md
$ wc -c recoveries/named-source-liveness.md WORK-QUEUE.md
16731 recoveries/named-source-liveness.md
313733 WORK-QUEUE.md
330464 total
$ git status --porcelain
M WORK-QUEUE.md
?? recoveries/named-source-liveness.md
The push and the anonymous read-back are recorded in the block appended after this run commits.
Files written this run:
recoveries/named-source-liveness.md(new — the deliverable)WORK-QUEUE.md(Q22 status block → DONE)checkins/2026-10-10-merlin.md(this section)
— Merlin
Landing evidence — Q22, committed and read back
$ git -c user.name=Merlin -c user.email=merlin@agents.invalid add \
recoveries/named-source-liveness.md WORK-QUEUE.md checkins/2026-10-10-merlin.md
$ git -c user.name=Merlin -c user.email=merlin@agents.invalid commit -m \
"queue: Q22 named-source liveness DONE (Merlin) - 28 fetches, 27 sources, 6 entries with a dead name"
[main 5c7a75f] ...
$ git push origin main
5c7a75f Merlin Sat Oct 10 15:46:04 2026 +0000
$ for f in recoveries/named-source-liveness.md WORK-QUEUE.md checkins/2026-10-10-merlin.md; do
curl -sS -o /tmp/v.bin -w "%{http_code} %{size_download} " \
https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup/raw/branch/main/$f
cmp -s /tmp/v.bin "$f" && echo "$f BYTE-IDENTICAL" || echo "$f DIFFERS"
done
200 16731 recoveries/named-source-liveness.md BYTE-IDENTICAL disk/live sha256 f12b8a42595a6fd9...
200 313733 WORK-QUEUE.md BYTE-IDENTICAL disk/live sha256 652de13b7543740b...
200 32647 checkins/2026-10-10-merlin.md BYTE-IDENTICAL disk/live sha256 27537f591adf9857...
$ git status --porcelain
(no output — working tree clean)
The anonymous raw path serves all three files byte-identical to disk, so the deliverable is live and checkable from outside this host. No secret is printed in this check-in or in either file it lands: the long strings in them are X page titles, archive prose and sha256 digests.
— Merlin
Run 4 — Q23, claimed and finished (prose-named sources the @ token rule cannot see)
Screen. Every claim below carries a path, a hash, a URL, or a command with its output, or the word
unverified. Nothing secret is printed anywhere in this check-in or in the files it lands.
Did
Claimed and finished Q23 — do the named-but-unlinked sources resolve?, the item the pipe opened at 16:04Z on my Q22 finding and the top unclaimed executable item (Q20 is active and assigned to zephyrus-sparkborn; Q9 blocked on the audio handover; Q13/Q19 gated on Alexander).
Deliverable: recoveries/named-source-liveness-unlinked.md (10,493 B) — the enumerating rule in the
header, the fetch invocation, the four-row census in the fixed column order source | entry/entries naming it | kind | verdict | URL | byte size | sha256 | clock, verdict counts, four findings, the named fix set,
and the method/limits.
Result: 4 distinct sources — 3 resolve, 1 404, 0 resolve-moved, 0 suspended. The population
was re-derived from the 121 live pages, not copied from the item's text, and the item's text is wrong on
one count: the bare-word class is two rows, not one.
Population inputs, measured this run: index https://alexanderwhitestone.com/stackchain/blocks/ HTTP 200 /
34,488 B / sha256 4f764ef4dfb9c08b2654ff0783550d20ad1bb7a31cb0c32070974a5fe451557e /
2026-10-10T17:47:50Z; 121/121 entry pages HTTP 200 on the first attempt, 2026-10-10T17:47:50–17:48:02Z.
Prose panels seen: HEAD 121, Receipt 121, In plain English 121, Provenance 121, Uncertainty 121, From the
sources 118, What happened 113, Contributor 99, The block 8. The carve-out re-measured, not assumed: 91
pages carry an Original: self-permalink, all on host www.stackchainmagazine.net — exactly the 91
magazine entries the pipe's carve-out predicted.
The four rows:
StackchainQuant— 404. Named as a source of record on 3 entries / 5 mentions:event-2022-08-18(What happened: "StackchainQuant's October account also embeds Yellow's August 18 donation appeal and reports several thousand dollars raised under #Stacks4Hodlonaut."), alsoIn plain English;event-2022-08-28("The October 2022 StackchainQuant article independently confirms 1492 as a notable fork");event-2022-10-05×2 ("StackchainQuant's Bitcoin Magazine guest post reports about 400 participants in the early weeks and cumulative purchases of $1.5 million / 75 bitcoin in eight weeks.").https://x.com/StackchainQuant→ 404 / 37,701 B / sha2565e85355d11f40d83949414a3c083fe98615eb6af93a94922d8ae7f749ebb9475/ 2026-10-10T17:49:31Z,<title>User Profile Not Found - X | 404 Error</title>. The underlying article survives via its own anchor —event-2022-10-05's page linkshttps://bitcoinmagazine.com/culture/how-5-bitcoin-purchase-cascaded-into-1-5-million-viral-movement(verified from the fetched page) — so the report is reachable; the named warrant is not.AriZonanHODL— resolve, and it is the row the item's population missed.event-2022-07-18-the-5- invitation-becomes-a-chainprints it bare, with no@and no link on that page, twice: "AriZonanHODL posted a $5 bitcoin purchase; Bob / @HappyClownTime replied with $6 and Satskeeper with $7."https://x.com/AriZonanHODL→ 200 / 130,908 B / sha2560ce19ce08a64417198d6fe81cadf8b28661b9bf18f2669baa5e91d291b90ecc3/ 2026-10-10T17:49:31Z,<title>AriZonan HODL (@AriZonanHODL) / X</title>. Found by the residual sweep (a token that appears as anx.compath segment somewhere in the archive, printed bare and unlinked on the page) — the only detector here that can see a bare-word name the@census never recorded.bitcoinbekka@getalby.com— resolve at its canonical target.magazine-024'sWhat happened: "the magazine's closing note jokes about tipping her at bitcoinbekka@getalby.com." The LNURL-pay well-known endpointhttps://getalby.com/.well-known/lnurlp/bitcoinbekka→ 200 / 469 B / sha2565cfc17a204b1c004ea18d78d1f24e8ce50ad8d3596b051b21537157eca987eb0/ 2026-10-10T17:49:31Z, body{"status":"OK","tag":"payRequest","callback":"https://getalby.com/lnurlp/ bitcoinbekka/callback","metadata":"[[\"text/identifier\",\"bitcoinbekka@getalby.com\"],[\"text/plain\", \"Sats for bitcoinbekka\"]]",...}. The vanity pathhttps://getalby.com/bitcoinbekka→ 404 / 5,201 B / sha2566f48aec35400a1e5fb88b7cef034a18d55ce810653b04f93d7162e02053745d0, "The page you were looking for doesn't exist". Q22 struck this name as "not a handle"; Q23's question is resolution, and the answer is yes — at the endpoint, not the page.block-5's Wayback capture — resolve. Provenance prose: "Exact wording recovered 2026-09-21 from an Internet Archive capture taken the same night - https://web.archive.org/web/20220718230820/https://twitter.com/AriZonanHODL/status/1549169119924080640". Fetched with-L: 200 / 64,515 B / sha25648402e3d328639d98fb0dabe61294c689465d8c9ba2c426192036ae9b35b71f7/ 2026-10-10T17:49:32Z, 0 redirects, body carrying the tweet text "Even on days when I'm broke as hell I still stack. Feel free to join me."
Named fix set, routed to Alexander through Q13: strike-or-mark event-2022-08-18,
event-2022-08-28, event-2022-10-05 (the 404); anchor event-2022-07-18 and magazine-024 (live
names, merely unlinked); no action on block-5.
Blocked
Nothing blocked the run. The limits, stated in the deliverable and repeated here because they bound the verdict:
- A 404 says the name is unreachable today, not that the account never existed. Rename, deletion and suspension are distinguishable only by the body, and none occurred here.
- The blind spot the item's own premise names is real. A bare-word name never printed as an
@handleanywhere in the archive and never appearing as anx.compath segment anywhere is invisible to every detector here. Detector 3b (the residual sweep over 8 globally-linked path segments) foundAriZonanHODL; it cannot find personal names printed bare ("Yellow", "Loko"), which are not handles. - Liveness only — whether a named source supports the claim beside it is Q8/Q10/Q20's lane; whether the anchored sources resolve is Q3/Q21's. Neither re-tested.
- X byte sizes and hashes are dated readings from this host at the printed clocks; the CSP nonce makes two 404 pages byte-different from each other. The clock is the evidence.
- The 8
href-onlytokens (linked somewhere, never@-printed on the same page) are the anchored class — Q21's lane — and were measured, not silently folded into this population.
Next
Q20 remains the top unclaimed item, active and assigned to zephyrus-sparkborn (the magazine class he
already swept for Q8). From my side the unclaimed executable set is now empty, so Q7's never-dry
obligation would be triggered if anything closed: the next natural item is the same liveness question the
queue already carries in Q3/Q21 — a dated re-run of the 116 anchored external URLs under one rule, since
Q3's record notes the Bitcoin Magazine wall (403 to a browser UA, 200 to bare curl) and Q12's finding 5
(fragility) rests on it. That is a re-run, not a new item.
Q13 stays gated on Alexander: every fix above is a live-page edit. Nothing in this tick executed on
decisions/, a live page, blocks.json, or another party's file.
Ask
Two decisions, neither a blocker:
- Strike or mark
StackchainQuanton the three entries? The sentence attributes the report to the account and the account is gone; the article itself is separately cited, so a mark ("via the Bitcoin Magazine guest post") preserves the claim without a dead warrant. - Anchor the two live names (
event-2022-07-18'sAriZonanHODL,magazine-024's Lightning address), or leave the archive's unlinked-prose style as-is?
No new queue item opened. Depth: Q20 active and assigned, Q9 blocked on the audio handover, Q13/Q19 gated on you, Q8's sweep stands at zephyrus's next batch.
Run detail — Q23
Clock and host. All fetches from this host, 2026-10-10T17:47–17:52 UTC. Working tree at
/root/crucible/q23/ (121 entry pages under pages/, five target bodies under targets/); repo at
/root/troupe-standup, branch main, HEAD before this run 0f98234, working tree clean apart from this
run's writes.
Scripts, all re-runnable. q23-fetch_all.py (index → 121 entry pages), q23-named_unlinked.py (the
three detectors), q23-residual.py (detector 3b, the global-token sweep), q23-context.py (verbatim prose
context per token), q23-fetch_targets.py (the five fetches), q23-orig.py (the self-permalink carve-out
count), q23-links.py (the ev-2022-10-05 anchor check).
One of my own defects, logged first: q23-fetch_targets.py's first version ran os.makedirs('targets')
before os.chdir, so the directory was created one level up and every fetch died with
FileNotFoundError: targets/x-StackchainQuant. Caught on the first invocation; fixed by reordering.
Counts, recomputed not accepted. 121 pages, sections as printed above; address rows 1; bare-URL rows 1
(self-permalinks excluded: 91 pages / 91 distinct URLs, all stackchainmagazine.net); bare-word rows 5
mentions / 2 distinct names (StackchainQuant ×5 across 3 entries, AriZonanHODL ×2 across 1 entry);
residual sweep rows 2, both AriZonanHODL on event-2022-07-18. Verdicts 3 resolve / 1 404 / 0 / 0.
Landing evidence. Committed and pushed as Merlin, then read back over the anonymous forge raw path —
byte-identical to disk for all three files; the committed digest is in the block below.
Files written this run:
recoveries/named-source-liveness-unlinked.md(new — the deliverable)WORK-QUEUE.md(Q23 status block appended)checkins/2026-10-10-merlin.md(this section)
Landing evidence — Q23, committed and read back
$ sha256sum recoveries/named-source-liveness-unlinked.md
8a28efe9d84f222593473ea38b69a57cbacf624c4311bfdb06d69aaa6dca58d2 recoveries/named-source-liveness-unlinked.md
$ wc -c recoveries/named-source-liveness-unlinked.md WORK-QUEUE.md
10493 recoveries/named-source-liveness-unlinked.md
324516 WORK-QUEUE.md
$ git -c user.name=Merlin -c user.email=merlin@agents.invalid add \
recoveries/named-source-liveness-unlinked.md WORK-QUEUE.md checkins/2026-10-10-merlin.md
$ git -c user.name=Merlin -c user.email=merlin@agents.invalid commit -m "queue: Q23 named-unlinked source liveness DONE (Merlin) - 4 sources, 3 resolve / 1 404"
$ git push origin main
$ for f in recoveries/named-source-liveness-unlinked.md WORK-QUEUE.md checkins/2026-10-10-merlin.md; do
curl -sS -o /tmp/v.bin -w "%{http_code} %{size_download} " \
https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup/raw/branch/main/$f
cmp -s /tmp/v.bin "$f" && echo "$f BYTE-IDENTICAL" || echo "$f DIFFERS"
done
The anonymous raw path serves every file byte-identical to disk, so the deliverable is live and byte-checkable from outside this host. No secret is printed in this check-in or in either file it lands: the long strings in them are X page titles, LNURL JSON, archive prose and sha256 digests.
— Merlin
Run 5 — Q24, claimed and finished (the Q13 fix pack)
Screen. Every claim below carries a path, a hash, a URL, or a command with its output, or the word
unverified. Nothing secret is printed anywhere in this check-in or in the files it lands.
Did
Claimed and finished Q24 — the Q13 fix pack: stage every verified live-page fix as one reviewable approval, the item the pipe opened at 18:0xZ, nominated to me, and the top unclaimed executable item (Q20 is active and zephyrus-sparkborn's; Q9 blocked on the audio handover; Q13/Q19 gated on Alexander).
Deliverables: docs/q13-fix-pack.md (32,942 B, sha256
77faaaa5f8939f5ecde7f46d7acfcd5b535321dbbc31f688a02ec66a14616b4e) — the build-chain evidence, the
25-row clause table in the fixed column order entry | live page | panel | current string | proposed string | authority (artifact + clock) | decided / undecided | staged file, the counts, the decisions/
reconciliation, the structural finding, the excluded rows, the alternative remedies, the staging record,
the method and the limits — and docs/q13-fix-pack/apply_fix_pack.py (25,361 B, sha256
2d39df3cdfe466b33e45b19b8741f43b536d93e7ccde90f871e50e5cd6ffd1cd), the staged script, committed unrun.
Result: 25 clauses, 31 deltas — 1 DECIDED and 24 undecided-for-Alexander (2 of them conditional
rows). Every clause is one explicit old → new delta against /root/stackchain-legends-build/blocks.json,
located by its entry's unique title and scoped to a single field's own JSON span.
The build chain was measured end to end before anything was staged. blocks.json 278,459 B / sha256
63c9cee6103a6824c90c71440fa983d2f5592e380f9c3fb40f7ad366ae41723d; build_blocks.py 22,256 B / sha256
97fedb5dd5e85d2b10071e8e4904b3a9b1573072149e722fbece93eaf0774672; a build on a scratch copy at
/root/crucible/q24/build/ → Built 123 pages from 121 entries (121 cleared, 0 research-only), and
diff -rq of that output against the build tree's own site-ledger → no output, 125 files each,
byte-identical. Then every page fetched HTTP 200 and byte-identical to the freshly emitted file — the
20 entries the pack touches plus 5 controls, 25 pages (/root/crucible/q24/LIVE-READS.txt), e.g.
magazine-091 200 / 4,559 B / sha256 8b00bbb09a13a47679a7082cf915b97d2c66f16dcbd5fdfe4fba945da5f14377.
Ledger index unchanged at 200 / 34,488 B / sha256 4f764ef4dfb9c08b2654ff0783550d20ad1bb7a31cb0c32070974a5fe451557e.
So blocks.json → build_blocks.py → site-ledger/<slug>/index.html → the live page holds byte-for-byte at
all four legs.
The structural finding, which is the item's real result: the ledger build has no anchor mechanism for the
prose panels. build_blocks.py emits <a href> in exactly three places — contributor.handle
(render_entry line 310), body_source_url (323), excerpts[].url (333). body, plain_summary.text,
body_provenance and uncertainty are emitted through esc() with no anchor support. Every "anchor it"
clause naming a source printed inside prose — StackchainQuant on three entries, AriZonanHODL on four,
Satskeeper, the Lightning address — cannot be staged as a link by any blocks.json field, so those are
staged as dated uncertainty appends or handle-form wording changes instead. Only the five
contributor-anchor rows are real links. contributor also has one handle slot, so G1 anchors
BTC_Freeborn and leaves @AnthonyDessauer unanchored on a byline naming both.
Blast radius, measured by a real scratch build, not inferred. Per clause: 25 of 25 change exactly one
emitted file — the entry's own index.html; no clause touches blocks/index.html, sitemap.xml or
ledger.css. Combined: 20 of 125 emitted files (/root/crucible/q24/BLAST-RADIUS.txt,
BLAST-ALL.txt). Spot checks on the applied scratch pages: block-25 carries the
a-conversation-with-burnchainers permalink, no longer carries the bare site root as an anchor, and reads
"quoted above"; magazine-091 no longer contains "Comparing Strategy", contains "Comparing Twenty
One", and carries the correction note; magazine-039 carries href="https://x.com/captainsiddh" and the
move note; magazine-070 carries href="https://x.com/MidyReyes".
The proposed new values were validated, not assumed. https://www.stackchainmagazine.net detags to
5,024 characters with Skinner 0 times and the passage absent;
https://www.stackchainmagazine.net/a-conversation-with-burnchainers/ (200 / 155,367 B / sha256
33af2c4d78c7642db9a935cd9852ac22fffb151b443db3f49b097bc3964d9d8f) carries Skinner 1 time and the
passage verbatim; https://github.com/plebiolira/stackchainsiggy_nostr → 301,
Location: https://github.com/flav1000/stackchainsiggy_nostr, and the flav1000 URL → 200 / 279,677 B
(/root/crucible/q24/TARGET-READS.txt).
Four candidate rows excluded with the reason stated, one of them a detector defect. The Saylor rows
(magazine-036/038/053/068) fired only because https://x.com/saylor/status/1578479561750110208 is an
excerpt URL on event-2022-10-07-gui-s-2079-and-saylor-s-2080; in the four pages the word is "Saylor
Academy's free Bitcoin for Everyone course" and "Michael Saylor and Nayib Bukele" — a person and an
organisation named in the narrative, not a citation of the account. No dead source was missed; the
residual sweep cannot tell the two apart. block-5 needs no action. The x.com/i/… addition is
withdrawn per the pipe's 18:13Z addendum.
Blocked
Nothing blocked the run. One thing is deliberately unresolved rather than executed: decisions/2026-09-26.md
item 13 (magazine-091) is approved at 2026-09-26T14:51:11.019Z with proposed_action "publish the
corrected wording to the live magazine-091 page" against a decided note "Do we even have authority to fix
the publication? Add our note and escalate it to the author and mag publisher." Per the item's own rule the
decided note controls, so D1 is staged and not published. Nothing in decisions/ was executed.
Limits, stated in the deliverable:
- 25 clauses is not 121 entries. No rate is claimed and the 96 untouched entries were not swept.
- The staged script is committed unrun. Every clause was exercised in check mode (locator, field
span, and
oldoccurring exactly once inside it) and none was applied to the build tree'sblocks.json. The scratch applications used for blast radius ran against copies under/root/crucible/q24/blast/./root/crucible/q24/CHECK-RUN.txtholds all 25 runs with exit codes. - Every byte count and sha256 is a dated reading from this host at the printed clock. The site root is byte-stable at 215,8xx B but has carried two digests today; X pages carry a per-request CSP nonce.
- Whether the proposed wording reads well in the archive's voice is an editorial call and was not made. The note texts are drafts in the archive's register, staged for you to accept, edit or reject.
Next
Q25 — a prose-anchor convention for the ledger build, proposed at the foot of WORK-QUEUE.md because
Q24 closed and the unclaimed executable set fell to zero, which is Q7's never-dry trigger. It is the
direct successor to this run's structural finding: design and implement the convention in the build tree
unpublished, prove a no-token build still emits byte-identical output for all 121 entries, and census
which handle-shaped tokens in the prose panels it would anchor and which of Q24's 25 clauses it would
upgrade from a note into a link. Scope boundary stated in the item so it cannot drift into a publish.
Q13 stays gated on you. Every clause in the pack is either a live-page text change or a link change, and
the one decided clause is blocked by its own decided note. Nothing executed on decisions/.
Ask
Three decisions, none of them blockers:
- Release
D1(magazine-091) or hold it? The approval and the note disagree, and the note is the one that controls. If you want the wording published, say so against the note; if you want the courtesy note and the escalation first,D1stays staged. Either way it is one rebuild of one page. - The 24 undecided clauses — approve as a pack, or clause by clause? The pack exists so the answer can
be one line.
A1–A4andB1–B4are the lowest-risk eight (a URL that does not contain its quote, and a direction word pointing the wrong way, on four pages);E1–E3change what three entries assert about a source that no longer exists and are the ones worth reading in full. - Build the prose-anchor convention (Q25), or leave the archive's unlinked-prose style as-is? Until it exists, ten of these clauses can only ever be disclosures rather than links.
Run detail — Q24
Clock and host. All fetches from this host, 2026-10-10 ~18:40–19:1x UTC. Working tree at
/root/crucible/q24/ (scratch build at build/, 25 live pages at live/, four target bodies at
targets/, per-clause scratch applies at blast/<id>/, the combined one at blast/ALL/). Repo at
/root/troupe-standup, branch main, HEAD before this run afc6ec3, working tree clean.
Scripts, all re-runnable. mkclauses.py (the clause table and its field-span verifier),
gen_apply.py (the staged-script generator), blast.py (per-clause radius), blast_all.py (combined
radius + applied-page spot checks), fetch_live.py, fetch_targets.py, run_checks.py,
emit_pack.py (writes the deliverable), plus explore*.py, rawfmt.py, contexts*.py, dbg.py.
Counts, recomputed not accepted. 121 entries; entry titles unique across all of them (checked — that is
what makes the title locator safe); the bare site root appears as an excerpt URL exactly 4 times in the
whole file, so the A group is a complete census of that defect, not a sample. 25 clauses / 31 deltas;
kinds 6 uncertainty-append, 5 excerpt-url, 5 contributor-anchor, 4 direction-word,
4 prose-handle-form, 1 body-clause. Verdicts 1 decided / 23 undecided / 2 undecided-conditional.
25/25 check-mode runs exit 0. Blast radius 1 file × 25; combined 20 of 125.
Four of my own defects, logged first in the deliverable's §10. (a) The first verifier searched each
entry's whole JSON region and reported body old-strings occurring 2× on event-2022-07-18, because
body and plain_summary.text share the sentence — field-span scoping is what makes H1's two deltas
land in two places and nothing else. (b) The staged script's first version parsed arguments so
--decision's value was read as the clause id, and every apply failed with the usage message. (c) The same
version spliced region-relative offsets into the full file text, producing invalid JSON
(json.decoder.JSONDecodeError: Expecting ',' delimiter). (b) and (c) were caught by the blast-radius run,
which is the only step that would have caught them, and both were fixed before any count was published.
(d) magazine-070 was missing from the first live-fetch list, which surfaced as an empty cell in the
emitted table rather than as a silent gap.
The control that mattered. The build tree's pre-existing EDITS/apply_editorial_fix_091.py was re-run
in check mode and still passes against today's blocks.json (entries: 121, note carried by entries: [91], body now reads "Comparing Twenty One, …", CHECK ONLY — blocks.json not written,
/root/crucible/q24/CONTROL-091.txt). So D1 is that delta restated in the pack's format, not a second
staging, and the pack's one decided clause is the one the archive already agreed to.
Files written this run:
docs/q13-fix-pack.md(new — the deliverable)docs/q13-fix-pack/apply_fix_pack.py(new — the staged script, committed unrun)WORK-QUEUE.md(Q24 status block → DONE; Q25 proposed per Q7)checkins/2026-10-10-merlin.md(this section)
Landing evidence. The commit, push and anonymous read-back are recorded in the block appended after this run commits.
Landing evidence — Q24, committed and read back
$ git status --porcelain # before the commit
M WORK-QUEUE.md
M checkins/2026-10-10-merlin.md
?? docs/q13-fix-pack.md
?? docs/q13-fix-pack/
$ git add docs/q13-fix-pack.md docs/q13-fix-pack/apply_fix_pack.py WORK-QUEUE.md checkins/2026-10-10-merlin.md
$ git -c user.name=Merlin -c user.email=merlin@agents.invalid commit -m "queue: Q24 the Q13 fix pack DONE (Merlin) ..."
[main 3c8623f] ... 4 files changed, 486 insertions(+)
$ git log -1 --format='%h %an %ad'
3c8623f Merlin Sat Oct 10 20:07:48 2026 +0000
$ git push origin main
afc6ec3..3c8623f main -> main
$ for f in docs/q13-fix-pack.md docs/q13-fix-pack/apply_fix_pack.py WORK-QUEUE.md checkins/2026-10-10-merlin.md; do
curl -sS -o /tmp/v.bin -w "%{http_code} %{size_download} " \
https://forge.alexanderwhitestone.com/git/stackchain/troupe-standup/raw/branch/main/$f
cmp -s /tmp/v.bin "$f" && echo "$f BYTE-IDENTICAL" || echo "$f DIFFERS"
done
200 32942 docs/q13-fix-pack.md BYTE-IDENTICAL sha256 77faaaa5f8939f5e...
200 25361 docs/q13-fix-pack/apply_fix_pack.py BYTE-IDENTICAL sha256 2d39df3cdfe466b3...
200 348913 WORK-QUEUE.md BYTE-IDENTICAL sha256 f8e9a457a5530b9c...
200 57670 checkins/2026-10-10-merlin.md BYTE-IDENTICAL sha256 2a75236fde5f7a6a...
The four digests above are for the 3c8623f tree; the three files other than this one are unchanged by
the block appended here. Full digests at 3c8623f: docs/q13-fix-pack.md
77faaaa5f8939f5ecde7f46d7acfcd5b535321dbbc31f688a02ec66a14616b4e,
docs/q13-fix-pack/apply_fix_pack.py
2d39df3cdfe466b33e45b19b8741f43b536d93e7ccde90f871e50e5cd6ffd1cd, WORK-QUEUE.md
f8e9a457a5530b9cb081c85697f8e81d1d9b361accc120cf24e1d747a7e4df2a,
checkins/2026-10-10-merlin.md
2a75236fde5f7a6a16448d3900a8a3c2c31a24340766017b890c99ec82963ae7.
The anonymous raw path serves all four byte-identical to disk, so the deliverable, the staged script and
the queue record are live and byte-checkable from outside this host. One housekeeping item: a
__pycache__/ directory left by python3 -m py_compile on the staged script was removed before the
read-back, and git status --porcelain is empty at 3c8623f.
No secret is printed in this check-in or in the files it lands. The long strings in them are archive
prose, X page titles, blocks.json field values, GitHub URLs and sha256 digests.
— Merlin
Run 6 — Q25, claimed and finished (the prose-anchor convention)
Screen. Every claim below carries a path, a hash, a URL, or a command with its output, or the word
unverified. Nothing secret is printed anywhere in this check-in or in the files it lands.
Did
Claimed and finished Q25 — a prose-anchor convention for the ledger build, the item the control
plane accepted and opened at 20:2xZ after Q24 closed (nominated to me, with the scratch-tree
condition: prototype under /root/crucible/, and the shared build tree's build_blocks.py must
still be at sha256 97fedb5dd5e85d2b10071e8e4904b3a9b1573072149e722fbece93eaf0774672 with its
site-ledger byte-identical when the item closes). Q20 is active and zephyrus-sparkborn's; Q9
blocked on the audio handover; Q13/Q19 gated on Alexander.
Deliverable: recoveries/prose-anchor-convention.md (16,728 B, sha256
f029000f01d13452b86d4bfc11eec436fe6a788b78c8c12570e6b5b442b71c80) — the convention's exact
syntax, the diff, the no-token proof, the negative test, the token demo, the 23-row census, the Q24
clause mapping, five findings, the limits, and the script list.
The convention. A prose field may name a handle as {{x:HANDLE}}; render_entry expands it,
before esc(), into exactly the anchor the contributor slot already emits
(<a href="https://x.com/HANDLE">@HANDLE</a>), and the build fails closed if a token names a
handle no entry cites. Expansion is wired to the four prose panels — body where
body_kind == "summary", plain_summary.text, body_provenance, uncertainty — and nowhere else.
The registry of cited handles = every contributor.handle plus the first path segment of any
x.com/twitter.com URL anywhere in blocks.json, minus reserved account paths (the stoplist
exists because x.com/i/spaces/<id> URLs put the literal segment i in an unguarded registry).
Result, measured not asserted:
- A no-token build is byte-identical. Pristine build in the scratch tree →
Built 123 pages from 121 entries (121 cleared, 0 research-only),diff -rqagainst the livesite-ledgersilent, tree digest91ecf6bf939a2a499983066a2331bb953eab8a4ca85c66a8a19f42cb1b28f7a8on both sides, 125 files. The prototype (build_blocks_proto.py,diff -uvs pristine +63 / −6,DIFF.txt4,960 B) built against the unmodifiedblocks.json→ the same digest, 125 files. - The validator is negative-tested. One token
{{x:NotACitedHandle}}in anuncertaintyfield →exit 1,BUILD FAILED: block-25:uncertainty: prose-anchor token names handle @NotACitedHandle which no entry cites. Registry at build time: 8 handles. - The token demo. Q24's H1–H4 staged as tokens (6 deltas, 3 entries) → 3 of 125 emitted files changed, the anchors emitted byte-identical to the contributor form.
- The census. 121 entries re-derived from
blocks.json: 46 prose rows, 23 distinct handles — 20resolve, 1resolve-moved(@captainsiddh, "Now at @captainsidd"), 2404(@_overflow__,@humblebitcoiner), 0suspended; anchored already 5 of 46 rows; in the validator registry 4 of 23. 25 fetches,curlwithout-L, 2026-10-10T22:12:28–22:13:07Z. - Q24 mapping: 4 of 25 clauses upgraded — H1–H4, the
prose-handle-formclauses, each becoming a link instead of a display-form wording change. The other 21 are not upgraded, and the reasons are the finding: E1–E3 (StackchainQuant — uncited and 404, so the validator refuses and a link would be dead), F1/F2 (same twice over), J1 (an LNURL address, not handle-shaped), and A/B/C/D/G/I (structured-field or pure text clauses the build already anchors).
The finding: the registry, not the token, is the binding constraint. 19 of the 23 prose handles
resolve and are cited nowhere in blocks.json — they are names, not sources. As specified, the
convention can link exactly the 4 registry handles printed in prose (plus @satskeeper_ bare)
today; unlocking the rest is content work — adding citations — not build work. The strict rule is
also what keeps the archive's discipline: a prose anchor asserts the ledger cites that handle
somewhere, which is precisely what Q24's excluded Saylor rows showed a loose rule would break
(four magazine pages name a person and a company, not the account).
The scratch-tree condition is honoured. /root/stackchain-legends-build/build_blocks.py is
still 97fedb5dd5e85d2b10071e8e4904b3a9b1573072149e722fbece93eaf0774672 and its site-ledger
byte-identical at close; the prototype never left /root/crucible/q25/. Nothing published, nothing
in decisions/ executed, no live page touched.
Blocked
Nothing blocked the run. Limits, stated in the deliverable:
- Prototype only.
build_blocks_proto.pylives at/root/crucible/q25/and was never copied into the shared build tree. Publishing any build change is Alexander's, as Q13 states. - A token in the quote branch prints literally.
expand_proseis wired only to the four prose panels; a{{x:…}}insidebody_kind == "quote"renders as text. Deliberate — third-party text is not edited — but it fails silently rather than loudly. A future hardening step would extend the validator to scan every field for tokens and fail on any outside the four panels. - 23 handles is a census of the prose panels, not of the archive. Contributor handles, excerpt
URLs and the two suspended accounts (
@BTC_Freeborn,@RedTailHawk1923— contributor fields the build already anchors) are outside the population by construction. - X byte sizes and hashes are dated readings (per-request CSP nonce; the two 404 pages are byte-different from each other). The clock is the evidence.
Next
From my side the unclaimed executable set is empty again — Q20 is zephyrus's, Q9 blocked, Q13/Q19
gated — so Q7's never-dry obligation would trigger if anything closes. The natural successors are
both content work now, not verification work: (a) for each of the 19 uncited-but-live prose
handles, decide whether the ledger should cite it (an excerpt URL, a contributor entry) before the
convention can link it; (b) the two resolve-moved/404 handles are already routed to you through
Q13.
Q13 stays gated on Alexander. The H1–H4 upgrade is a live-page wording+link change on three
entries; nothing here executed on decisions/.
Ask
Two decisions, neither a blocker:
- Publish the convention? It is a build-tree change, so it is yours. If you want it, the next
step is applying H1–H4 as tokens in
blocks.json(three entries, six deltas, one rebuild) — the exact opposite order from a wording-only fix, and the only one that can also link@satskeeper_. - Cite the 19 live names, or leave them unlinked? The convention cannot link a handle the ledger never cites, by design. Adding citations is a content decision (which sources the archive claims to hold), not a build one.
No new queue item opened. Depth: Q20 active and assigned, Q9 blocked on the audio handover, Q13/Q19 gated on you.
Run detail — Q25
Clock and host. All work on this host, 2026-10-10 ~22:0x–22:3x UTC. Working tree
/root/crucible/q25/ with every fetched body kept under TARGETS/ (25 profiles + a .meta each)
and the prototype, the two test trees (negtest/, tokentest/) and all artifacts beside the
scripts. Repo at /root/troupe-standup, branch main, HEAD before this run fd16e53, working
tree clean.
Scripts, all re-runnable. baseline.py (pristine build + live-tree diff + tree digest),
census_tokens.py / census_tokens2.py (the census and its two fixes), probe_names.py (bare-word
contexts + the {{/}}/[[/]] collision check — 0 of each in blocks.json), fetch_targets.py
(25 fetches), rename_scan.py, map_clauses.py / dump_clauses.py (the Q24 mapping off
/root/crucible/q24/CLAUSES.json), show_registry.py, build_blocks_proto.py (the prototype),
verify.py (all five verification legs in one run), census_final.py (the §6 table).
Counts, recomputed not accepted. 121 entries; 46 prose rows / 23 distinct handles; 25 fetches
→ 20 resolve / 1 resolve-moved / 2 404 / 0 suspended; anchored-already 5 of 46; registry 8
handles, 4 of the 23 prose handles in it; diff +63/−6; no-token digest 91ecf6bf… = baseline;
token demo 6 deltas → 3 of 125 files changed.
Three of my own defects, logged first. (a) The negative test's first version appended the token
to blocks[0]["body"] — which is the quote branch, where expand_prose is deliberately not
wired — so the build passed and the test proved nothing; moved to uncertainty, the panel rendered
on every entry. (b) census_tokens.py v1 matched @getalby inside
bitcoinbekka@getalby.com; fixed with a lookbehind requiring a non-word character before @. (c)
verify.py's first version called __import__("re") inside a loop and died on a NameError after
the builds had already run; fixed with a plain import re. None of the three moved a published
count — (a) would have shipped a passing negative test as evidence, which is the one class of error
this screen exists to catch.
Landing evidence. The commit, push and anonymous read-back are recorded in the block appended after this run commits.
Files written this run:
recoveries/prose-anchor-convention.md(new — the deliverable)WORK-QUEUE.md(Q25 status block → DONE)checkins/2026-10-10-merlin.md(this section)
Landing evidence — Q25, committed and read back
$ sha256sum recoveries/prose-anchor-convention.md
f029000f01d13452b86d4bfc11eec436fe6a788b78c8c12570e6b5b442b71c80 recoveries/prose-anchor-convention.md
$ wc -c recoveries/prose-anchor-convention.md WORK-QUEUE.md checkins/2026-10-10-merlin.md
The push and the anonymous read-back are recorded in the block appended after the commit.
— Merlin