diff --git a/checkins/2026-10-08-merlin.md b/checkins/2026-10-08-merlin.md index 02bb71b..7b544a5 100644 --- a/checkins/2026-10-08-merlin.md +++ b/checkins/2026-10-08-merlin.md @@ -16,3 +16,116 @@ cadence. **Ask:** Which lane first — finish the Helm (wire the email source via IMAP, renderer polish), or start on a queue item? One line is enough. + +--- + +## Crucible run 2 — 2026-10-08 (queue item Q6, claimed and finished) + +**Did.** Took the top unclaimed item in `WORK-QUEUE.md`: **Q6 — A public guide to +checking this archive**. (Q1–Q5, Q8 closed; Q10 active/claimed by zephyrus; Q9, Q13, +Q19 gated on Alexander; Q6 was the top open, unclaimed item. Queue line 489.) + +Deliverable: `docs/how-to-check-this-archive.md` — 15,239 B, sha256 +`1f5cc9ba5954f3bc4a7800176f72577c0687f906e5797c074655dd35c72c72d1`, written 2026-10-08. +Per the item's own evidence bar ("you ran every command in it before submitting"), +every command in the guide was executed from this host first; the outputs quoted in +the guide are real. What the guide contains: the five checks a stranger can run +(count the ledger; read the entry's badge/date; sweep source links; quote-fidelity test; +summary-clause grading; chain-claim check against a block explorer; hash read-back), +the four evidence tiers with what each one obliges a checker to test, and one worked +example end to end (magazine-040). + +Measured this run (all 2026-10-08, ~13:20–13:50Z, this host): + +``` +# ledger index +$ curl -sS -o index.html https://alexanderwhitestone.com/stackchain/blocks/ +blocks-index: HTTP 200 / 34488 B +$ sha256sum index.html +4f764ef4dfb9c08b2654ff0783550d20ad1bb7a31cb0c32070974a5fe451557e index.html +$ grep -o 'href="/stackchain/[a-z0-9-]*/"' index.html | sort -u | grep -vc '/blocks/' +121 # breakdown: 8 block / 22 event / 91 magazine +$ grep -o '
  • **Documented** — the archive holds the post, capture or receipt. +> **Corroborated** — established by a published or community account, with the source +> quoted on the page. An original screenshot is not required. +> **Testimony only** — a participant's recollection, recorded as recollection; where the +> practice it describes is corroborated, that is shown too. +> **Unrecovered** — known to exist, no copy and no independent account. + +What each tier means **in practice** — i.e. what you can actually test from outside: + +| Tier | What you can check | What you cannot | +|---|---|---| +| Documented | The cited source answers (HTTP 200), and every blockquote is verbatim in it (Checks C + D) | Whether the archive *holds* the receipt — "No receipt is held for this entry" is an honesty statement, not a verifiable one | +| Corroborated | The published account the entry cites exists and carries the claim (Check C, worked below on `block-6`) | Nothing further — this tier is defined by exactly that published account | +| Testimony only | That the page labels it as recollection and does not upgrade it; nothing more is checkable from outside | The recollection itself — by design | +| Unrecovered | That the missing item is named on the page and in the index's "Known gaps" list | The existence of the copy — "known to exist" is the archive's claim | + +Worked tier test — `block-6` ("The six dollars, from Bob") is `Corroborated` and holds +**no receipt**. Its own text says so: *"The $6 post itself has not been produced and is +not required."* The test is whether the cited published account exists and carries the +claim: + +```bash +curl -sS -o bm.html "https://bitcoinmagazine.com/culture/how-5-bitcoin-purchase-cascaded-into-1-5-million-viral-movement" +# bitcoinmagazine: HTTP 200 / 341684 B +grep -c -i 'happyclowntime' bm.html +# 1 +grep -o -i '.\{60\}\$6.\{60\}' bm.html | head -3 +# , @Happyclowntime, also known as Bob, followed it up with a $6 buy and Satskeeper followed Bob's with a $7 buy. You can se +``` + +The published account carries the claim, quoted on the entry page. The `Corroborated` +badge is doing exactly what the legend says it does. (Matcher note: `grep -c` counts +lines; for single-line JSON use `grep -o | wc -l` if you need occurrences.) + +--- + +## 3. Anatomy of an entry page + +Fetch one: + +```bash +curl -sS -o entry-040.html https://alexanderwhitestone.com/stackchain/magazine-040/ +# magazine-040: HTTP 200 / 4005 B +sha256sum entry-040.html +# a87a4385c4cc8bee96137fb23bb38a2f1bca580bae5f98f8c99499c2453cab62 entry-040.html +``` + +Every entry page carries the same sections, in order: + +1. **Badges** — the evidence tier plus the entry class (`Stackchain Magazine`, + `Timeline event`, `Stack receipt`, `Ledger block`). +2. **Date + basis** — the displayed date *and* the sentence saying where the date comes + from (e.g. magazine-040: `Date: 2025-01-14 · basis: publication date recorded in the + magazine inventory`). Some entries say `date not established` — that is the answer, + not a defect. +3. **What happened** — the machine-written summary. The page says so itself: + *"Archive summary written from the sources below — not a quotation."* This is the + section that can be wrong even when every quote is right (see §5). +4. **From the sources** — verbatim excerpts, each followed by its source URL. +5. **Receipt** — what the archive holds, or *"No receipt is held for this entry."* +6. **In plain English** — a one-line gloss, also machine-written. +7. **Provenance** and **Uncertainty** — the archive's own limits on the entry. + +Date consistency, in-archive: + +```bash +grep -o 'Date: [0-9-]*' entry-040.html +# Date: 2025-01-14 +grep -o '"datePublished": "[^"]*"' entry-040.html +# "datePublished": "2025-01-14" +``` + +--- + +## 4. The five checks + +### Check A — count the ledger +Run the §1 commands. Pass: 121 = 91 + 22 + 8, matching the page's own header. + +### Check B — read the entry's self-description +Badge, displayed date vs JSON-LD `datePublished`, receipt panel. Pass: the page tells +you what it is and where its date came from. + +### Check C — source liveness +Sweep every external URL on the page. Script (save as `linkcheck.py`): + +```python +import re, sys, urllib.request + +page = open(sys.argv[1], encoding='utf-8').read() +urls = sorted(set(re.findall(r'https://[^"< ]+', page))) +UA = {"User-Agent": "stackchain-archive-check/1.0 (public audit)"} +print("external URLs on", sys.argv[1], ":", len(urls)) +for u in urls: + try: + req = urllib.request.Request(u, headers=UA, method="HEAD") + with urllib.request.urlopen(req, timeout=20) as r: + print(r.status, u) + except Exception as e: + print("ERR", u, e) +``` + +```bash +python3 linkcheck.py entry-040.html +# external URLs on entry-040.html : 3 +# 200 https://alexanderwhitestone.com/stackchain/magazine-040/ +# 200 https://schema.org +# 200 https://www.stackchainmagazine.net/the-genesis-block/ +``` + +Pass: every cited source answers. Note: some entries cite X/Twitter posts; those may +404 or demand a login from outside. Measured 2026-10-08: the genesis post cited +elsewhere in the archive (`https://twitter.com/AriZonanHODL/status/1549169119924080640`) +resolves `twitter.com` → 301 → `x.com` → **404** (curl -L -w '%{http_code}'). A 404 +there is an avenue exhausted, not an archive defect — record it as one. + +### Check D — quote fidelity +Does each blockquote actually appear in the cited article? Fetch the article, strip +markup, test verbatim (save as `quotecheck.py`): + +```python +import re, html + +raw = open('article-040.html', encoding='utf-8', errors='replace').read() +body = re.sub(r'(?is)<(script|style)[^>]*>.*?', ' ', raw) +text = re.sub(r'(?s)<[^>]+>', ' ', body) +text = html.unescape(text) +text = re.sub(r'\s+', ' ', text) + +quotes = [ + "In the beginning Satoshi created Cyberspace (heaven) and the Bitcoin White Paper (earth).", + "And there was evening, and there was morning\u2014 Tick Tock Next Block.", + "By Block 97250, Satoshi had finished the work over which he labored", +] +for q in quotes: + print("QUOTE", "VERBATIM" if q in text else "MISSING", "|", q[:60]) +``` + +```bash +curl -sS -o article-040.html https://www.stackchainmagazine.net/the-genesis-block/ +# the-genesis-block: HTTP 200 / 137324 B +python3 quotecheck.py +# QUOTE VERBATIM | In the beginning Satoshi created Cyberspace (heaven) and the +# QUOTE VERBATIM | And there was evening, and there was morning— Tick Tock Next +# QUOTE VERBATIM | By Block 97250, Satoshi had finished the work over which he +``` + +(Curly quotes and em-dashes survive HTML unescaping; if you get MISSING on a quote that +visibly matches, normalise `'` `"` `—` before concluding.) + +### Check E — summary fidelity (the one that catches the archive's own words) +Checks A–D test that the archive quotes its sources faithfully. They do **not** test the +prose the archive writes *about* the source. Test every factual or interpretive clause +of "What happened" / "In plain English" against the article and grade it: + +- **holds** — the article says it +- **overstated** — the article supports less +- **unsupported** — the article does not say it +- **contradicted** — the article or cited sources say something incompatible + +### Check F — chain claims, against the chain itself +Any entry that names a block can be checked against a public block explorer API: + +```bash +curl -sS https://mempool.space/api/block-height/97250 +# 0000000000051607bb75bde078238fd652a72da21b049b438837ee159c67606c +curl -sS https://mempool.space/api/block/0000000000051607bb75bde078238fd652a72da21b049b438837ee159c67606c \ + | tr ',' '\n' | grep -E '"(id|height|timestamp)"' +# {"id":"0000000000051607bb75bde078238fd652a72da21b049b438837ee159c67606c" +# "height":97250 +# "timestamp":1292189407 +date -u -d @1292189407 '+%Y-%m-%d %H:%M:%S UTC' +# 2010-12-12 21:30:07 UTC +``` + +Block 97,250 is 2010-12-12 — the day of Satoshi's last public forum post. For contrast, +block 54,316 (`1272892627`) is 2010-05-03 13:17:07 UTC; the two are 42,934 blocks and +223 days apart. + +### Check G — hash read-back +The only identity check. Re-fetch over HTTPS and compare: + +```bash +curl -sS -o recheck-040.html https://alexanderwhitestone.com/stackchain/magazine-040/ +sha256sum entry-040.html recheck-040.html +# a87a4385c4cc8bee96137fb23bb38a2f1bca580bae5f98f8c99499c2453cab62 entry-040.html +# a87a4385c4cc8bee96137fb23bb38a2f1bca580bae5f98f8c99499c2453cab62 recheck-040.html +cmp entry-040.html recheck-040.html && echo "cmp: byte-identical" +# cmp: byte-identical +``` + +--- + +## 5. Worked example: magazine-040, end to end + +Entry: **The Genesis Block** — `https://alexanderwhitestone.com/stackchain/magazine-040/` +(badge `Documented`; source `https://www.stackchainmagazine.net/the-genesis-block/`). + +The summary's closing clause reads: + +> *"It closes with Satoshi resting on the 97,250th block, **a nod to the last block he +> mined**."* + +Run Check D (quotes verbatim: 3/3 pass — above) and then Check E's clause test against +the fetched article: + +```bash +# after the detag step in Check D, in the same script: +for term in ["mined", "last block", "mining", "97,250", "97250"]: + print("COUNT", term, "=", len(re.findall(re.escape(term), text, flags=re.I))) +``` + +Measured against the article's detagged text (whitespace collapsed to one space): + +``` +COUNT mined = 0 +COUNT last block = 0 +COUNT mining = 0 +COUNT 97,250 = 2 +COUNT 97250 = 1 +``` + +The article's own closing line is a Genesis 2:2 rewrite — *"By Block 97250, Satoshi had +finished the work over which he labored; so on the 97,250th Block he rested from all his +work."* — and the words *mined*, *last block* and *mining* appear **zero** times. The +block-97,250 date is checkable and true (Check F). The interpretive clause *"a nod to the +last block he mined"* is **unsupported**: the article never says it. + +**Verdict on the real claim:** + +| Check | Result | Verdict | +|---|---|---| +| A. Ledger count | 121 = 91+22+8 | holds | +| B. Entry self-description | badge `Documented`, date 2025-01-14 = JSON-LD | holds | +| C. Source liveness | article 200 / 137,324 B | holds | +| D. Quote fidelity | 3/3 blockquotes verbatim | holds | +| E. Summary clause, "a nod to the last block he mined" | article has `mined` 0 times, `last block` 0 times | **unsupported** | +| F. Block 97,250 = 2010-12-12 | mempool.space API, ts 1292189407 | holds | +| G. Hash read-back | sha256 + cmp byte-identical | holds | + +So: the archive's *sourcing* of magazine-040 checks out completely; its *interpretive +gloss* does not. A check of this archive has to run both halves — quote fidelity alone +would have returned a clean bill on an entry whose summary asserts something the source +never says. + +--- + +## 6. What you cannot check from outside + +State these as limits, not failures: + +- Whether the archive *holds* a receipt it says it holds (or doesn't) — that is an + honesty claim; the archive names what it lacks ("No receipt is held for this entry", + "Known gaps" on the index). +- X/Twitter-hosted sources: some 404, some need a login. An exhausted avenue is a + recorded result. +- Anything in another party's working files, or any session/workflow claim — that is + testimony, and it can only be graded as such. +- Edits to the live pages: the archive is a publication; wording changes are the + publisher's, never a checker's. + +## 7. One-page checklist + +- [ ] Ledger count reproduces (121 = 91+22+8) with the matcher named +- [ ] Badge census reproduces (115/5/1, `unrecovered` = 0) from the index alone +- [ ] Entry badge + displayed date + JSON-LD date agree +- [ ] Every cited source answers, or the 404 is recorded as an exhausted avenue +- [ ] Every blockquote is verbatim in its cited source +- [ ] Every factual/interpretive clause of the summary is graded holds / overstated / + unsupported / contradicted +- [ ] Chain claims checked against a block explorer API +- [ ] Final read-back: fetch over HTTPS, `sha256` + `cmp` +- [ ] Every number printed carries its matcher and its request + +*Guide written 2026-10-08 by Merlin (Crucible lane, troupe-standup), queue item Q6. +All commands above were run before publication; outputs are real. Corrections welcome +by PR — identify the section, the command, and your measured output.*