<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>archilyzer, branch HEAD</title>
<subtitle>Archilyzer</subtitle>
<entry>
<id>974fa4e5dd1cc68677bc91f731e9e909e68c6b09</id>
<published>2026-10-10T07:10:44Z</published>
<updated>2026-10-10T07:10:44Z</updated>
<title>Merge r20/whisper-fix (Clear failure list keeps its log after the list empties) into r20/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/974fa4e5dd1cc68677bc91f731e9e909e68c6b09.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 974fa4e5dd1cc68677bc91f731e9e909e68c6b09
parent 1c92a17816b8a5e883e47936b3c68fb6d11493fb
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 03:10:44 -0400

Merge r20/whisper-fix (Clear failure list keeps its log after the list empties) into r20/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ba8abad51eabeae65cd963646bcbb63beba562c6</id>
<published>2026-10-10T07:10:13Z</published>
<updated>2026-10-10T07:10:13Z</updated>
<title>plans: release 20 — the whisper red, as it went (Clear failure list unmounted its own log)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/ba8abad51eabeae65cd963646bcbb63beba562c6.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit ba8abad51eabeae65cd963646bcbb63beba562c6
parent 184d1c298517d557d0e740653f5d88708c5b3a59
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 03:10:13 -0400

plans: release 20 — the whisper red, as it went (Clear failure list unmounted its own log)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>184d1c298517d557d0e740653f5d88708c5b3a59</id>
<published>2026-10-10T07:10:13Z</published>
<updated>2026-10-10T07:10:13Z</updated>
<title>channels: &quot;Clear failure list&quot; keeps its log after the list empties</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/184d1c298517d557d0e740653f5d88708c5b3a59.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 184d1c298517d557d0e740653f5d88708c5b3a59
parent 1c92a17816b8a5e883e47936b3c68fb6d11493fb
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 03:10:13 -0400

channels: &quot;Clear failure list&quot; keeps its log after the list empties

The section rendered its clear controls only while the failed list was
non-empty, so the refresh StreamActionLog fires at the end of its own run
unmounted the log with &quot;Cleared N entries&quot; in it. A `ran` flag set on
click keeps the block for the page&#39;s life, the button disabled at (0) —
the rule in FACTS.md, &quot;A run log lives in the panel&#39;s React state&quot;, and
DiagnosticsStage&#39;s pattern. whisper.spec.ts:184 failed 3/3 under next start.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>1c92a17816b8a5e883e47936b3c68fb6d11493fb</id>
<published>2026-10-10T07:01:18Z</published>
<updated>2026-10-10T07:01:18Z</updated>
<title>Merge main (cf162d7c: umtool song asr-via-ops batching) into r20/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/1c92a17816b8a5e883e47936b3c68fb6d11493fb.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 1c92a17816b8a5e883e47936b3c68fb6d11493fb
parent ea1e503cadc761a7e5788f44689c863480c7b823
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 03:01:18 -0400

Merge main (cf162d7c: umtool song asr-via-ops batching) into r20/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ea1e503cadc761a7e5788f44689c863480c7b823</id>
<published>2026-10-10T07:01:18Z</published>
<updated>2026-10-10T07:01:18Z</updated>
<title>Merge r20/a6-a9 (release 19 A6–A9: archive.org imports and remote listings, cues without an index, publish edges, MCP archival writes) into r20/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/ea1e503cadc761a7e5788f44689c863480c7b823.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit ea1e503cadc761a7e5788f44689c863480c7b823
parent 458e992307d0303c995846ba73fc8fee2a36ae1b
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 03:01:18 -0400

Merge r20/a6-a9 (release 19 A6–A9: archive.org imports and remote listings, cues without an index, publish edges, MCP archival writes) into r20/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>4d36f8e7222a9c4940ee2f1f31cc50624d58c7a8</id>
<published>2026-10-10T06:59:26Z</published>
<updated>2026-10-10T06:59:26Z</updated>
<title>plans: release 19 A6–A9, as shipped (Track A of the overnight batch)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/4d36f8e7222a9c4940ee2f1f31cc50624d58c7a8.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 4d36f8e7222a9c4940ee2f1f31cc50624d58c7a8
parent dcf45f12e40614b846e2cc335d15823058fc342c
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 02:59:26 -0400

plans: release 19 A6–A9, as shipped (Track A of the overnight batch)

The four slices&#39; records under Track A, tonight&#39;s gates appended to the Track
A gates, and the editor changelog&#39;s [Unreleased] bullets.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>dcf45f12e40614b846e2cc335d15823058fc342c</id>
<published>2026-10-10T06:50:47Z</published>
<updated>2026-10-10T06:50:47Z</updated>
<title>mcp: archival tools through the editor — get_job, enqueue, channel_coverage, notes (release 19 A9)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/dcf45f12e40614b846e2cc335d15823058fc342c.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit dcf45f12e40614b846e2cc335d15823058fc342c
parent 56a52ba8c959611cae4f09c8b7fa5dcad44bf37f
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 02:50:47 -0400

mcp: archival tools through the editor — get_job, enqueue, channel_coverage, notes (release 19 A9)

On the fetch_clip pattern (editor URL + WORKER_TOKEN; the editor writes),
each tool one existing route: get_job reads GET /api/ops/job/&lt;id&gt; with its
log tail; enqueue posts sync, download-missing, retry-bucket (chosen ids),
transcribe-bucket, fetch-posts or import-video and answers the job id;
channel_coverage reads the new GET /api/ops/coverage (`pnpm ops get
coverage &lt;slug&gt;`), which dates every held video off disk with coverageDate
— the recorded date when the channel has a title rule (release 20 D1),
else the upload date — and reports per year and month and every gap past
gapDays. notes reads umtool (UMTOOL_URL): list from /api/browse/decisions,
read from /api/notes/context; a reply answers with the `umtool notes reply`
command, since umtool&#39;s HTTP route records every write as the operator&#39;s.
Settings, storage and deletes stay CLI/ops-only. The plans&#39; instructions
gain the archive-work step; README tool table, OPERATING, ENVIRONMENT.md
(UMTOOL_URL now read by the MCP) and COMMANDS.md follow.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>56a52ba8c959611cae4f09c8b7fa5dcad44bf37f</id>
<published>2026-10-10T06:39:21Z</published>
<updated>2026-10-10T06:39:34Z</updated>
<title>Merge r20/integration (release 20 D1 recorded dates) into r20/a6-a9</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/56a52ba8c959611cae4f09c8b7fa5dcad44bf37f.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 56a52ba8c959611cae4f09c8b7fa5dcad44bf37f
parent b4322ab1cd3b4f67e0ed1ec7a4d4ccec5a1c2218
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 02:39:21 -0400

Merge r20/integration (release 20 D1 recorded dates) into r20/a6-a9

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>b4322ab1cd3b4f67e0ed1ec7a4d4ccec5a1c2218</id>
<published>2026-10-10T06:39:16Z</published>
<updated>2026-10-10T06:39:16Z</updated>
<title>publish: the ops build verb takes allowMissingMedia; `publish build &lt;id&gt; --out &lt;dir&gt;` (release 19 A8)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/b4322ab1cd3b4f67e0ed1ec7a4d4ccec5a1c2218.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit b4322ab1cd3b4f67e0ed1ec7a4d4ccec5a1c2218
parent 2baea15e823029add6e25dc281eaaba8575c09c9
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 02:39:16 -0400

publish: the ops build verb takes allowMissingMedia; `publish build &lt;id&gt; --out &lt;dir&gt;` (release 19 A8)

POST /api/ops/publish {verb: &quot;build&quot;, allowMissingMedia: true} carries the
flag onto the queued build stage (`--allow-missing-media`, as `build site`
already could), local builds only — the docker runner refuses it.
`archilyzer publish build` takes --allow-missing-media too, and --out &lt;dir&gt;:
after the build (or the no-op of a fresh one) the site&#39;s bundle is laid out
in &lt;dir&gt; for a server that is not Pages — hard links into the bundle where
the filesystem allows (a build installs a new bundle, never edits one), else
copies; the destination is emptied first and refused, before any build,
where a local deploy&#39;s would be. Not a deploy: nothing recorded. The publish
lane over `pnpm ops lane` shipped in A4.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>2baea15e823029add6e25dc281eaaba8575c09c9</id>
<published>2026-10-10T06:33:53Z</published>
<updated>2026-10-10T06:33:53Z</updated>
<title>ops: cues without an index — build-cues, get transcript, and the MCP&#39;s get_transcript falls back to the editor (release 19 A7)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/2baea15e823029add6e25dc281eaaba8575c09c9.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 2baea15e823029add6e25dc281eaaba8575c09c9
parent 6bd5722378cd6cf08623a8962f7a9582865c9269
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 02:33:53 -0400

ops: cues without an index — build-cues, get transcript, and the MCP&#39;s get_transcript falls back to the editor (release 19 A7)

build-cues {slug, ids?, force?} writes transcript.cues.json through the
digest card&#39;s Normalize action, narrowed to held ids (a stray refused,
named) on the channel&#39;s queue. GET /api/ops/transcript?id[&amp;slug]
(`pnpm ops get transcript &lt;id&gt; [--slug]`) reads one video&#39;s cues off disk
with no index and writes nothing: a fresh cues.json, else what normalize
would write (buildNormalizedTranscript, factored out of normalizeTranscript),
else the English VTT alone. The MCP&#39;s get_transcript, for a video its
archive does not hold, asks that route through the configured editor (the
fetch_clip pattern) and marks the answer as read off the editor&#39;s disk, with
no moment links.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>6bd5722378cd6cf08623a8962f7a9582865c9269</id>
<published>2026-10-10T06:24:03Z</published>
<updated>2026-10-10T06:24:03Z</updated>
<title>ops: a help paragraph for each of the twelve actions that had none</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/6bd5722378cd6cf08623a8962f7a9582865c9269.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 6bd5722378cd6cf08623a8962f7a9582865c9269
parent 0baa0fa1e03f3442c4e848ae3e20c2b63f84ea09
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 02:24:03 -0400

ops: a help paragraph for each of the twelve actions that had none

channel-priority, sync, download-missing, metadata-scan, import-video,
feed-metadata, refresh-report, relocate-back, evict-clips, tags, tag-videos
and keep-videos now open a paragraph in usage(), so COMMANDS.md&#39;s rows carry
their bodies (release 19 C2&#39;s found-and-left; relocate and lane gained theirs
in A4). COMMANDS.md regenerated.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>0baa0fa1e03f3442c4e848ae3e20c2b63f84ea09</id>
<published>2026-10-10T06:22:49Z</published>
<updated>2026-10-10T06:22:49Z</updated>
<title>ops: archive.org imports take many items or a search; Odysee/BitChute remote listings (release 19 A6)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/0baa0fa1e03f3442c4e848ae3e20c2b63f84ea09.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 0baa0fa1e03f3442c4e848ae3e20c2b63f84ea09
parent 8ccd3dc569453445937df267bcc0f76c0a1ba98a
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 02:22:49 -0400

ops: archive.org imports take many items or a search; Odysee/BitChute remote listings (release 19 A6)

import-archive-org takes {item} as before, {items: [...]} or {query, limit?}
(archive.org&#39;s advanced search, one request through the polite client) as one
job: the download gap and failure count shared across the batch, a jittered
pause between items, records already held (on disk or in the saved-video
store) skipped, files archive.org marks not for download listed as
RESTRICTED by a dry run and skipped by an import, a 401/403 skipping the rest
of its item and three such items in a row stopping the job with the platform
backed off. The log ends with a summary: line.

remote-listing {slug} (and `pnpm ops get remote-listing &lt;slug&gt;`, waited on,
the result on stdout) lists an Odysee or BitChute channel with one
flat-playlist read on the platform&#39;s queue, refused while the platform is
held or cooling down, after its import floor, backing it off on a 429, and
answers what it lists that is not held and what is held but not listed.
Nothing is written.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>458e992307d0303c995846ba73fc8fee2a36ae1b</id>
<published>2026-10-10T06:05:52Z</published>
<updated>2026-10-10T06:05:52Z</updated>
<title>Merge r20/d2-r20 part 2 (release 20 D3 verified closed, D1 recorded dates; D2 Twitch ids held on r20/twitch-ids) into r20/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/458e992307d0303c995846ba73fc8fee2a36ae1b.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 458e992307d0303c995846ba73fc8fee2a36ae1b
parent 8ccd3dc569453445937df267bcc0f76c0a1ba98a
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 02:05:52 -0400

Merge r20/d2-r20 part 2 (release 20 D3 verified closed, D1 recorded dates; D2 Twitch ids held on r20/twitch-ids) into r20/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>24ce786e21fd861d128338b8b9089ad15f6d685e</id>
<published>2026-10-10T06:05:07Z</published>
<updated>2026-10-10T06:05:07Z</updated>
<title>plans: release 20 D2 held for an operator ruling — the two options, the readers that miss the join; changelog and STATE corrected</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/24ce786e21fd861d128338b8b9089ad15f6d685e.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 24ce786e21fd861d128338b8b9089ad15f6d685e
parent a0accf89f61b6f636e5c4b57ddd8f84f7c014be9
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 02:05:07 -0400

plans: release 20 D2 held for an operator ruling — the two options, the readers that miss the join; changelog and STATE corrected

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>8ccd3dc569453445937df267bcc0f76c0a1ba98a</id>
<published>2026-10-10T06:02:29Z</published>
<updated>2026-10-10T06:02:29Z</updated>
<title>Merge r20/e2e-speed (e2e speed S1–S3: start mode by default with a build stamp, a timing record per run, the slow timers behind test knobs) into r20/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/8ccd3dc569453445937df267bcc0f76c0a1ba98a.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 8ccd3dc569453445937df267bcc0f76c0a1ba98a
parent d77b126fc1a8eb9333c998d5aedbc8fdee9a70cb
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 02:02:29 -0400

Merge r20/e2e-speed (e2e speed S1–S3: start mode by default with a build stamp, a timing record per run, the slow timers behind test knobs) into r20/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

# Conflicts:
#	editor/CHANGELOG.md

</content>
</entry>
<entry>
<id>a0accf89f61b6f636e5c4b57ddd8f84f7c014be9</id>
<published>2026-10-10T06:01:48Z</published>
<updated>2026-10-10T06:01:54Z</updated>
<title>common: revert release 20 D2 — held for an operator ruling (it changes published Twitch URLs); kept on r20/twitch-ids</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/a0accf89f61b6f636e5c4b57ddd8f84f7c014be9.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit a0accf89f61b6f636e5c4b57ddd8f84f7c014be9
parent c084840a709ae5cac07384acab33eba9cb09e978
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 02:01:48 -0400

common: revert release 20 D2 — held for an operator ruling (it changes published Twitch URLs); kept on r20/twitch-ids

This reverts commit 21c44a80.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>505340fd59f5fea3ccf5adfe0f033ad43296b0c5</id>
<published>2026-10-10T06:00:53Z</published>
<updated>2026-10-10T06:00:53Z</updated>
<title>plans: e2e speed S1–S3, as shipped (Track E)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/505340fd59f5fea3ccf5adfe0f033ad43296b0c5.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 505340fd59f5fea3ccf5adfe0f033ad43296b0c5
parent b8c2811d82500d2cd7c78c13a0c41a8e3aa1cc6b
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 02:00:53 -0400

plans: e2e speed S1–S3, as shipped (Track E)

The record under plans/e2e-speed.md &quot;As it went&quot;, FACTS amended (start mode
is the default and its build is stamped), and the editor changelog&#39;s
[Unreleased] bullet.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>c084840a709ae5cac07384acab33eba9cb09e978</id>
<published>2026-10-10T05:59:50Z</published>
<updated>2026-10-10T05:59:50Z</updated>
<title>plans: release 20 D3, D1 and D2, as shipped (the caption-track bug closed, recorded dates, one Twitch id)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/c084840a709ae5cac07384acab33eba9cb09e978.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit c084840a709ae5cac07384acab33eba9cb09e978
parent 21c44a807157a99a4e56de7ccb37f6b92a2ae44f
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 01:59:50 -0400

plans: release 20 D3, D1 and D2, as shipped (the caption-track bug closed, recorded dates, one Twitch id)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>cf162d7cbf289f194f87418af2404faad2e663a0</id>
<published>2026-10-10T05:56:52Z</published>
<updated>2026-10-10T05:56:52Z</updated>
<title>umtool song: asr-via-ops batches every window into one ops transcribe job</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/cf162d7cbf289f194f87418af2404faad2e663a0.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit cf162d7cbf289f194f87418af2404faad2e663a0
parent 7f91177c75088089fdf8556b05ca9af26d5a5c89
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 01:56:52 -0400

umtool song: asr-via-ops batches every window into one ops transcribe job

One window per job waited ~30 min each for a worker behind the auto lane, so
the MK plans&#39; 841 windows would have taken days. The windows are now cut at
16 kHz and laid end to end with 2 s of silence between them, transcribed in one
&quot;words&quot;: true job (ASR_WORKER names the worker), and each word mapped back to
its source by the window it falls in.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>b8c2811d82500d2cd7c78c13a0c41a8e3aa1cc6b</id>
<published>2026-10-10T05:45:45Z</published>
<updated>2026-10-10T05:45:45Z</updated>
<title>e2e: the editor config names the stamp script&#39;s dist dir it mirrors</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/b8c2811d82500d2cd7c78c13a0c41a8e3aa1cc6b.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit b8c2811d82500d2cd7c78c13a0c41a8e3aa1cc6b
parent 0bdab05ed797d9f7076e06e2f271669835bbecf3
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 01:45:45 -0400

e2e: the editor config names the stamp script&#39;s dist dir it mirrors

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>0bdab05ed797d9f7076e06e2f271669835bbecf3</id>
<published>2026-10-10T05:31:20Z</published>
<updated>2026-10-10T05:31:20Z</updated>
<title>e2e: the four slow timers on a test clock (e2e speed S3)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/0bdab05ed797d9f7076e06e2f271669835bbecf3.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 0bdab05ed797d9f7076e06e2f271669835bbecf3
parent 7517df525fa5343fbc6d3e08034e20e7b10fd560
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 01:31:20 -0400

e2e: the four slow timers on a test clock (e2e speed S3)

Two are product timers and take a test-only duration from the editor&#39;s test
server (E2E_SERVER_ENV), declared in envVars.ts:
- E2E_BACKOFF_BASE_MS (20 s; 60 s in production): the first rate-limit
  cooldown, read in platformBackoff.ts&#39;s nextBackoff. The cap and the hold
  arithmetic keep the real constants. pacing.spec still watches it lapse.
- E2E_CLIP_WINDOW_GAP_MS (2 s; 30–45 s): the pause between two clip-window
  fetches, read in fetchWindows.ts. fetch-window.spec now asserts the one pause
  the batch owes, from the job log.

Two were never product timers: publish-lane.spec&#39;s 45 s and channel-storage
.spec&#39;s 25 s were the stuck-job holder&#39;s own release timer, sized for a cold
dev server. The route takes `release=&lt;id&gt;` (finished detached, as
releaseAfterMs is), and the specs let the holder go once they have seen what
it holds.

The stamp also stops counting the changelogs, read at run time only.

Before/after, start mode, per test: pacing:195 66 s -&gt; 22 s; publish-lane:78
50 s -&gt; 6 s; fetch-window:337 34 s -&gt; 3 s; channel-storage:872 28 s -&gt; 3 s.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>21c44a807157a99a4e56de7ccb37f6b92a2ae44f</id>
<published>2026-10-10T05:11:15Z</published>
<updated>2026-10-10T05:11:15Z</updated>
<title>common: release 20 D2 — one Twitch id: records carry the canonical &lt;n&gt; their directory does, not the native v&lt;n&gt;</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/21c44a807157a99a4e56de7ccb37f6b92a2ae44f.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 21c44a807157a99a4e56de7ccb37f6b92a2ae44f
parent 0f614b3a43376d07d562101aae4c83424749ccd3
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 01:11:15 -0400

common: release 20 D2 — one Twitch id: records carry the canonical &lt;n&gt; their directory does, not the native v&lt;n&gt;

canonicalTwitchVideoId (lib/videoId.ts) is the one normalization: summarize
uses it for a Twitch record, readNormalizedTranscript applies it to a
transcript.cues.json written before (normalizeSummaryId), and the index
re-processes once every record it holds under a v-id (&quot;Twitch ids v1&quot;, the
platform-labels shape), re-keying it. The Twitch player is still handed v&lt;n&gt;.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>0f614b3a43376d07d562101aae4c83424749ccd3</id>
<published>2026-10-10T05:02:30Z</published>
<updated>2026-10-10T05:02:30Z</updated>
<title>common: release 20 D1 — recorded dates for VOD-mirror channels, read off the title by a per-channel rule</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/0f614b3a43376d07d562101aae4c83424749ccd3.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 0f614b3a43376d07d562101aae4c83424749ccd3
parent c3890608162a0f674ecb611034f333fc35200d28
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 01:02:30 -0400

common: release 20 D1 — recorded dates for VOD-mirror channels, read off the title by a per-channel rule

A channel&#39;s config.json gains `recordedDate: {titlePattern}` (a
case-insensitive regex with named groups year, month, day; month a number or
an English month name; checked like the download filter&#39;s patterns). The
index derives each record&#39;s `recordedDate` (YYYYMMDD) from its title — a real
day no later than the upload date, else none — and re-derives a channel&#39;s
records once when its rule changes (`recordedDateRule:&lt;slug&gt;` in the index
meta). `coverageDate` reads it before the upload date. The Configure form and
`ops channel-config` set it (`recordedDateTitlePattern`); CHANNEL.md
regenerated. Omitted everywhere a channel has no rule, so no page changes
until one is set.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>7517df525fa5343fbc6d3e08034e20e7b10fd560</id>
<published>2026-10-10T05:01:29Z</published>
<updated>2026-10-10T05:01:29Z</updated>
<title>e2e: a timing record per run, and per-spec deltas against the branch&#39;s last (e2e speed S2)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/7517df525fa5343fbc6d3e08034e20e7b10fd560.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 7517df525fa5343fbc6d3e08034e20e7b10fd560
parent b6a859055fd100d0925a1c9895e764d77e567e83
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 01:01:29 -0400

e2e: a timing record per run, and per-spec deltas against the branch&#39;s last (e2e speed S2)

Every suite&#39;s config writes Playwright&#39;s json report beside list
(test-results*/timings.json). scripts/e2e-timings.mjs totals it per spec file,
prints the files slowest first with each one&#39;s change against the last run on
the same branch that ran it (the wall time against the last run of the same
spec files), and records the run in the git common dir (e2e-timings/&lt;suite&gt;/
&lt;branch&gt;.json, the last 30), untracked and shared by every worktree.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>c3890608162a0f674ecb611034f333fc35200d28</id>
<published>2026-10-10T04:46:29Z</published>
<updated>2026-10-10T04:46:29Z</updated>
<title>common: release 20 D3 — the en → 0 cues caption bug is closed; an index test for the fall-through, recorded in FACTS and STATE</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/c3890608162a0f674ecb611034f333fc35200d28.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit c3890608162a0f674ecb611034f333fc35200d28
parent dcc6501471c9d7f0cc6c65b79cd9df408732b774
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 00:46:29 -0400

common: release 20 D3 — the en → 0 cues caption bug is closed; an index test for the fall-through, recorded in FACTS and STATE

An empty en-orig before an en with text, and an empty en before an en-US with
text, through the real buildIndex. FACTS gains &quot;The caption-track rule&quot; and a
superseded note on the old &quot;fixture must carry timing tags&quot; line; STATE closes
the bug and names what is left (the stats cache does not see the caption-track
pass&#39;s re-reads).

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>d77b126fc1a8eb9333c998d5aedbc8fdee9a70cb</id>
<published>2026-10-10T04:43:54Z</published>
<updated>2026-10-10T04:43:54Z</updated>
<title>Merge r20/d2-r20 part 1 (release 21 D2: clip windows cut from a saved container) into r20/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/d77b126fc1a8eb9333c998d5aedbc8fdee9a70cb.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit d77b126fc1a8eb9333c998d5aedbc8fdee9a70cb
parent 7f91177c75088089fdf8556b05ca9af26d5a5c89
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 00:43:54 -0400

Merge r20/d2-r20 part 1 (release 21 D2: clip windows cut from a saved container) into r20/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>dcc6501471c9d7f0cc6c65b79cd9df408732b774</id>
<published>2026-10-10T04:43:16Z</published>
<updated>2026-10-10T04:43:16Z</updated>
<title>plans: release 21 D2, as shipped (the saved-container tier for clip windows)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/dcc6501471c9d7f0cc6c65b79cd9df408732b774.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit dcc6501471c9d7f0cc6c65b79cd9df408732b774
parent fc175654d01b10966ba45fa5933e39f5b6c3b742
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 00:43:16 -0400

plans: release 21 D2, as shipped (the saved-container tier for clip windows)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>fc175654d01b10966ba45fa5933e39f5b6c3b742</id>
<published>2026-10-10T04:42:46Z</published>
<updated>2026-10-10T04:42:46Z</updated>
<title>channels: release 21 D2 — a clip window of a saved video is cut from its container, not fetched</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/fc175654d01b10966ba45fa5933e39f5b6c3b742.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit fc175654d01b10966ba45fa5933e39f5b6c3b742
parent 7f91177c75088089fdf8556b05ca9af26d5a5c89
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 00:42:46 -0400

channels: release 21 D2 — a clip window of a saved video is cut from its container, not fetched

fetchWindowAction asks the saved-video store after the clip-window cache and
the in-flight jobs, before the network: a container that covers the window is
cut locally (evidenceClip-server&#39;s evidenceCutArgs) into data/&lt;id&gt;/clips/ with
the fetched sidecar shape plus `source: &quot;saved-video&quot;`, and answered
`cached: true`. No pointer, or a container that ends before the window, goes
to the network as before; a pointer whose container cannot be read (missing,
an unmounted or unanswering store drive, a store mid-move, unreadable by
ffprobe) is refused with the media guard&#39;s (or the store guard&#39;s) sentence.

The fetch-windows batch puts covered windows in their own group, platform
`saved-video` on `clips:saved-video` (no platform&#39;s hold, cooldown or gap);
the controller cuts them with no request and no pause, and fails an
unreadable one as `unreachable`. The video page marks a cut window. The MCP
plan says a locally held video is cut without a fetch.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>b6a859055fd100d0925a1c9895e764d77e567e83</id>
<published>2026-10-10T04:13:49Z</published>
<updated>2026-10-10T04:13:49Z</updated>
<title>e2e: start mode by default, with a build stamp that cannot be stale (e2e speed S1)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/b6a859055fd100d0925a1c9895e764d77e567e83.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit b6a859055fd100d0925a1c9895e764d77e567e83
parent 7f91177c75088089fdf8556b05ca9af26d5a5c89
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Sat, 10 Oct 2026 00:13:49 -0400

e2e: start mode by default, with a build stamp that cannot be stale (e2e speed S1)

The editor and umtool suites run against `next start` unless E2E_MODE=dev.
Before any server starts, scripts/e2e-stamp.mjs fingerprints what the build
reads (index blob ids, and the working-tree bytes of every dirty or untracked
file, over the package, common/ and the lockfile, minus specs and unit tests)
and rebuilds through the heavy slot under the 5 GB cap when the stamp differs,
saying why. The build goes to its own directory (editor .next/e2e via
E2E_NEXT_DIST_DIR, umtool .next-e2e-start), never the .next a running app
serves from. CI (the sharded image) keeps its own build.

The export (default, hub) and homepage suites accept the switch and stay on
next dev, saying so: they are static exports whose specs rewrite fixtures
mid-run. The editor suite&#39;s export server stays next dev for the same reason.

resetData retries its fixture copy on EEXIST (release 19&#39;s channel-work.spec:208).

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>7f91177c75088089fdf8556b05ca9af26d5a5c89</id>
<published>2026-10-10T03:25:12Z</published>
<updated>2026-10-10T03:25:17Z</updated>
<title>plans: overnight 2026-10-10 — the next batch run from the primary checkout (e2e speed, B2, A6–A9, D2 + R20, the TISM pilot)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/7f91177c75088089fdf8556b05ca9af26d5a5c89.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 7f91177c75088089fdf8556b05ca9af26d5a5c89
parent 6db33734b791dcb771046ecf0e47d56cdf37fa64
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 23:25:12 -0400

plans: overnight 2026-10-10 — the next batch run from the primary checkout (e2e speed, B2, A6–A9, D2 + R20, the TISM pilot)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>6db33734b791dcb771046ecf0e47d56cdf37fa64</id>
<published>2026-10-10T02:05:44Z</published>
<updated>2026-10-10T02:05:51Z</updated>
<title>plans: release 19&#39;s rollout (editor, umtool, source mirror + homepage; sites unchanged)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/6db33734b791dcb771046ecf0e47d56cdf37fa64.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 6db33734b791dcb771046ecf0e47d56cdf37fa64
parent eee10ca9b043d5635f22f6f45732d636fc6795bb
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 22:05:44 -0400

plans: release 19&#39;s rollout (editor, umtool, source mirror + homepage; sites unchanged)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>eee10ca9b043d5635f22f6f45732d636fc6795bb</id>
<published>2026-10-10T01:15:52Z</published>
<updated>2026-10-10T01:15:52Z</updated>
<title>plans: release 19&#39;s privacy line names no deployment hash</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/eee10ca9b043d5635f22f6f45732d636fc6795bb.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit eee10ca9b043d5635f22f6f45732d636fc6795bb
parent ae08e4de35b4df2eaee9909c5fdeb615386669ce
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 21:15:52 -0400

plans: release 19&#39;s privacy line names no deployment hash

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ae08e4de35b4df2eaee9909c5fdeb615386669ce</id>
<published>2026-10-10T01:15:39Z</published>
<updated>2026-10-10T01:15:39Z</updated>
<title>plans: releases 19 and 21 — the landing&#39;s final gates (report 46/46, umtool 21/21 after release 22&#39;s fix round)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/ae08e4de35b4df2eaee9909c5fdeb615386669ce.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit ae08e4de35b4df2eaee9909c5fdeb615386669ce
parent 194a70a2aeca8d5a3a4b6937c58eabda8a9fddda
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 21:15:39 -0400

plans: releases 19 and 21 — the landing&#39;s final gates (report 46/46, umtool 21/21 after release 22&#39;s fix round)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>194a70a2aeca8d5a3a4b6937c58eabda8a9fddda</id>
<published>2026-10-10T01:15:19Z</published>
<updated>2026-10-10T01:15:19Z</updated>
<title>reports: near the end, the place the URL names is the part being read while it is on screen</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/194a70a2aeca8d5a3a4b6937c58eabda8a9fddda.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 194a70a2aeca8d5a3a4b6937c58eabda8a9fddda
parent da4a15b51190437f3f97c179e42cc07dc0845cfd
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 21:15:19 -0400

reports: near the end, the place the URL names is the part being read while it is on screen

The last places of a report cannot scroll up to the reading line, so a switch
after a jump to the last claim opened the slide before it. Both readers now
prefer the URL&#39;s place when it is on screen below the line. The export
changelog&#39;s sticky-switch bullet folds into release 22&#39;s (both unreleased).

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>da4a15b51190437f3f97c179e42cc07dc0845cfd</id>
<published>2026-10-10T01:11:35Z</published>
<updated>2026-10-10T01:11:35Z</updated>
<title>Merge r19/shapes-fix (release 22&#39;s fix round: the sticky view switch, the part being read, umtool&#39;s slide URLs, two spec races) into r19/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/da4a15b51190437f3f97c179e42cc07dc0845cfd.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit da4a15b51190437f3f97c179e42cc07dc0845cfd
parent 2c850a8dc7dfd95f8e9ace36b916250c974680c2
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 21:11:35 -0400

Merge r19/shapes-fix (release 22&#39;s fix round: the sticky view switch, the part being read, umtool&#39;s slide URLs, two spec races) into r19/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>8e78a76aaa2e94c1965f0a972c63a3171a13a7e8</id>
<published>2026-10-10T01:11:08Z</published>
<updated>2026-10-10T01:11:08Z</updated>
<title>plans: release 22&#39;s fix round — the sticky switch, each first-run failure&#39;s cause and fix, final counts</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/8e78a76aaa2e94c1965f0a972c63a3171a13a7e8.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 8e78a76aaa2e94c1965f0a972c63a3171a13a7e8
parent af992bdc9c20dd37767e70413a20035d553b405c
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 21:11:08 -0400

plans: release 22&#39;s fix round — the sticky switch, each first-run failure&#39;s cause and fix, final counts

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>af992bdc9c20dd37767e70413a20035d553b405c</id>
<published>2026-10-10T01:09:01Z</published>
<updated>2026-10-10T01:09:01Z</updated>
<title>reports: the part being read is the last place at the top of the reading area (under the sticky bars), not above the top third</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/af992bdc9c20dd37767e70413a20035d553b405c.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit af992bdc9c20dd37767e70413a20035d553b405c
parent 01a66959299e7308c3fd6bba1e219b7e90e2c245
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 21:09:01 -0400

reports: the part being read is the last place at the top of the reading area (under the sticky bars), not above the top third

A jump to a section with a short lead, then a switch, opened its first
claim&#39;s slide: the claim&#39;s top was already above the top-third line. The
line is now where a jump lands a place (its scroll-margin-top, under the
site&#39;s header and the switch) plus 32 px, on the export site and in umtool.
overview.spec waits for ArrowRight&#39;s focus (moved on the next frame) before
Enter, as it does after every other key.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>2c850a8dc7dfd95f8e9ace36b916250c974680c2</id>
<published>2026-10-10T01:07:01Z</published>
<updated>2026-10-10T01:07:01Z</updated>
<title>plans: release 19&#39;s landing as it went (gates, the two fixes, start-mode e2e 24 min); e2e-speed planned</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/2c850a8dc7dfd95f8e9ace36b916250c974680c2.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 2c850a8dc7dfd95f8e9ace36b916250c974680c2
parent afc918a01e571703f50a8f12ee3335a9ea39f5d6
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 21:07:01 -0400

plans: release 19&#39;s landing as it went (gates, the two fixes, start-mode e2e 24 min); e2e-speed planned

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>01a66959299e7308c3fd6bba1e219b7e90e2c245</id>
<published>2026-10-10T00:55:00Z</published>
<updated>2026-10-10T00:55:00Z</updated>
<title>reports: the view switch is sticky — under the site&#39;s header on the export site, atop the reading column in umtool</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/01a66959299e7308c3fd6bba1e219b7e90e2c245.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 01a66959299e7308c3fd6bba1e219b7e90e2c245
parent d1dfeed4415f0a5a819faafb91010e2db0ffd191
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 20:55:00 -0400

reports: the view switch is sticky — under the site&#39;s header on the export site, atop the reading column in umtool

The operator&#39;s ruling: switching keeps the place, for a real reader, so
Article | Slides | Overview stays in reach while the article scrolls. On the
export site it leaves the report&#39;s &lt;header&gt; for a strip right after it,
`sticky top-14` within the article&#39;s box (the site header is 56 px + its
border); in umtool it sticks to the top of the reading column. Nothing
scrolls on a click any more, so the part in view is the part read.

Every anchor in the article lands below the bars (`[&amp;_[id]]:scroll-mt-32`
on the export article, `scroll-mt-16` on umtool&#39;s blocks and claims), and
anchorInView&#39;s line is never above a landed anchor&#39;s scroll-margin-top.
Specs: the switch is `[data-report-views] [data-view-switch]`; after the
jump to a claim the switch is in the viewport and the claim below it.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>d1dfeed4415f0a5a819faafb91010e2db0ffd191</id>
<published>2026-10-10T00:54:53Z</published>
<updated>2026-10-10T00:54:53Z</updated>
<title>umtool e2e: the evidence walk&#39;s first j waits for the keys to be live (a press before hydration was lost)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/d1dfeed4415f0a5a819faafb91010e2db0ffd191.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit d1dfeed4415f0a5a819faafb91010e2db0ffd191
parent 2f4615cc30c07f120b45bb3b068a9aa0b467cc59
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 20:54:53 -0400

umtool e2e: the evidence walk&#39;s first j waits for the keys to be live (a press before hydration was lost)

The trace shows the press landing ~30 ms before the walk hydrated (its
evidence fetch, an effect, starts after it); nothing in the walk changed.
The press now repeats until the walk moves — j at the last citation stays
there, so a repeat is safe.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>2f4615cc30c07f120b45bb3b068a9aa0b467cc59</id>
<published>2026-10-10T00:54:48Z</published>
<updated>2026-10-10T00:54:48Z</updated>
<title>umtool: a slides URL that names a place becomes that place&#39;s slide (#s-&lt;n&gt;), as on the export site</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/2f4615cc30c07f120b45bb3b068a9aa0b467cc59.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 2f4615cc30c07f120b45bb3b068a9aa0b467cc59
parent afc918a01e571703f50a8f12ee3335a9ea39f5d6
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 20:54:48 -0400

umtool: a slides URL that names a place becomes that place&#39;s slide (#s-&lt;n&gt;), as on the export site

ArticleShapes now rewrites `?rv=slides#&lt;anchor&gt;` (a switch from the text,
a link to a section) to the slide&#39;s own hash, replacing the entry, as
ReportReader does; it used to stay `#report-head` / `#later`.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>afc918a01e571703f50a8f12ee3335a9ea39f5d6</id>
<published>2026-10-10T00:46:50Z</published>
<updated>2026-10-10T00:46:50Z</updated>
<title>export: the phone overview spec reads both boxes in one frame (the focused pair smooth-scrolls between two reads)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/afc918a01e571703f50a8f12ee3335a9ea39f5d6.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit afc918a01e571703f50a8f12ee3335a9ea39f5d6
parent 59b7d7bcaf091d80aedbbbebc95568a5c4021f70
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 20:46:50 -0400

export: the phone overview spec reads both boxes in one frame (the focused pair smooth-scrolls between two reads)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>59b7d7bcaf091d80aedbbbebc95568a5c4021f70</id>
<published>2026-10-10T00:31:19Z</published>
<updated>2026-10-10T00:31:19Z</updated>
<title>r19 gates: the X fakes read --post-range; the slides parity test lives beside Slide.tsx</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/59b7d7bcaf091d80aedbbbebc95568a5c4021f70.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 59b7d7bcaf091d80aedbbbebc95568a5c4021f70
parent ec7018490b752bfb2696e9c93e5dff560cb97644
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 20:31:19 -0400

r19 gates: the X fakes read --post-range; the slides parity test lives beside Slide.tsx

fetchOlderPosts&#39; inline fake and the editor e2e fake-gallery-dl still capped on
--range after ec701849, so the older-walk limit test wrote 2, not 1. The
exportSlides test imported components/ from lib/, a new back-edge the
architecture guard refuses; it moves to components/report/.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ec7018490b752bfb2696e9c93e5dff560cb97644</id>
<published>2026-10-09T23:43:39Z</published>
<updated>2026-10-09T23:43:39Z</updated>
<title>social: an X fetch&#39;s limit caps posts (--post-range), not files — --range never stopped a metadata-only walk</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/ec7018490b752bfb2696e9c93e5dff560cb97644.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit ec7018490b752bfb2696e9c93e5dff560cb97644
parent b56921eda36d3ea632d9c2c446c9677745492d1f
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 19:43:39 -0400

social: an X fetch&#39;s limit caps posts (--post-range), not files — --range never stopped a metadata-only walk

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>b56921eda36d3ea632d9c2c446c9677745492d1f</id>
<published>2026-10-09T22:41:17Z</published>
<updated>2026-10-09T22:41:17Z</updated>
<title>Merge reports/timeline-feeds (a living report&#39;s dated entries: the Timeline region, a slide per entry, RSS + JSON feeds) into r19/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/b56921eda36d3ea632d9c2c446c9677745492d1f.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit b56921eda36d3ea632d9c2c446c9677745492d1f
parent 137a7ae7f8c5b843e3fb0eb601e764d9f3047042
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 18:41:17 -0400

Merge reports/timeline-feeds (a living report&#39;s dated entries: the Timeline region, a slide per entry, RSS + JSON feeds) into r19/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>3249397137d83010f00c82fe2c8b4cf575f1e548</id>
<published>2026-10-09T22:37:20Z</published>
<updated>2026-10-09T22:37:20Z</updated>
<title>export: the report fixture keeps a timeline; timeline.spec; serve-out applies _headers</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/3249397137d83010f00c82fe2c8b4cf575f1e548.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 3249397137d83010f00c82fe2c8b4cf575f1e548
parent 21f0421be4dce83ac18500225306ebe0a161bd18
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 18:37:20 -0400

export: the report fixture keeps a timeline; timeline.spec; serve-out applies _headers

The fixture report gains two entries (2026-10-02, updated 2026-10-04, and
2026-10-04), each citing only c01, so no citation number and no header date
moves; its view names the feeds on the fixture site&#39;s URL and
fixtures/report-site/write.ts rewrote page.json and c01&#39;s moment. The e2e
stage writes feed.xml and feed.json as compose would (contract.ts).
scripts/serve-out.mjs applies the bundle&#39;s _headers as Pages does (literal,
splat and :placeholder paths), so a spec sees the feeds&#39; media types and CORS.
e2e-report/timeline.spec.ts: the Timeline&#39;s place, order, dates and anchors,
Subscribe and the alternates, both feeds served and their items, an entry&#39;s
slide, a phone. slides.spec and overview.spec renumbered for the two entry
slides (11 → 13).

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>21f0421be4dce83ac18500225306ebe0a161bd18</id>
<published>2026-10-09T22:11:23Z</published>
<updated>2026-10-09T22:11:23Z</updated>
<title>export: the timeline&#39;s page test, and a changelog line</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/21f0421be4dce83ac18500225306ebe0a161bd18.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 21f0421be4dce83ac18500225306ebe0a161bd18
parent 5036cb4985d34c0381074fb66f000393b7f2d466
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 18:11:23 -0400

export: the timeline&#39;s page test, and a changelog line

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>5036cb4985d34c0381074fb66f000393b7f2d466</id>
<published>2026-10-09T21:53:36Z</published>
<updated>2026-10-09T21:53:36Z</updated>
<title>mcp: get_report reads a report&#39;s timeline, newest first; `section` may name an entry</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/5036cb4985d34c0381074fb66f000393b7f2d466.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 5036cb4985d34c0381074fb66f000393b7f2d466
parent 192a13e1aff217f861194186ad7f3e3795553bef
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 17:53:36 -0400

mcp: get_report reads a report&#39;s timeline, newest first; `section` may name an entry

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>192a13e1aff217f861194186ad7f3e3795553bef</id>
<published>2026-10-09T21:53:36Z</published>
<updated>2026-10-09T21:53:36Z</updated>
<title>export: a report&#39;s Timeline, and Subscribe: RSS · JSON when it has feeds</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/192a13e1aff217f861194186ad7f3e3795553bef.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 192a13e1aff217f861194186ad7f3e3795553bef
parent 509770004976fe4fd124e5a5e35d28ca2cb5ec00
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 17:53:36 -0400

export: a report&#39;s Timeline, and Subscribe: RSS · JSON when it has feeds

The Timeline sits after In brief, before what the check found: dated blocks
newest first on a rail, the date first and in the accent, linking to the
entry&#39;s own anchor. The header links the feeds and the page&#39;s metadata names
them (&lt;link rel=&quot;alternate&quot;&gt;, absolute). A moment cited in an entry says so
under &quot;Cited in&quot;.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>509770004976fe4fd124e5a5e35d28ca2cb5ec00</id>
<published>2026-10-09T21:53:36Z</published>
<updated>2026-10-09T21:53:36Z</updated>
<title>report: a timeline&#39;s feeds — feed.xml (RSS 2.0) and feed.json (JSON Feed 1.1)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/509770004976fe4fd124e5a5e35d28ca2cb5ec00.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 509770004976fe4fd124e5a5e35d28ca2cb5ec00
parent 43cb0d43b242b693741e0ec1594e4050064088bf
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 17:53:36 -0400

report: a timeline&#39;s feeds — feed.xml (RSS 2.0) and feed.json (JSON Feed 1.1)

lib/report/feeds.ts renders both, pure: one item per entry newest first, its
permalink the page at its anchor, its body as the HTML export renders it with
every link absolute (a citation&#39;s marker to its reference on the page).
Compose writes them beside the page for a report with entries on a site with
a public siteUrl, and names them in the view (absolute URLs); a site with
none publishes no feed. _headers serves them as application/rss+xml and
application/feed+json, readable cross-origin; the bundle audit knows the
files as report data.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>43cb0d43b242b693741e0ec1594e4050064088bf</id>
<published>2026-10-09T21:53:35Z</published>
<updated>2026-10-09T21:53:35Z</updated>
<title>report: a timeline — dated entries, newest first, in the view, the slides and the exports</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/43cb0d43b242b693741e0ec1594e4050064088bf.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 43cb0d43b242b693741e0ec1594e4050064088bf
parent a8a5806f075b23620d1d8568390b120f47f4fb4e
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 17:53:35 -0400

report: a timeline — dated entries, newest first, in the view, the slides and the exports

report.json gains `entries` ({id, date, title, body, updated?}): ids share the
section/claim anchor namespace and refuse the page&#39;s own anchors; dates are
report dates, an entry&#39;s `updated` not before its `date`; every cite: link in
a body resolves. lib/report/entries.ts is the one order (newest first, the
same instant in file order) the numbering, the view, the slides and the
exports read. The view&#39;s `updated` counts the newest entry (the index card
with it). One slide per entry after In brief. report.html / report.md carry a
Timeline before the sections. The change summary names entries added,
removed and edited. REPORT.md regenerated.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>137a7ae7f8c5b843e3fb0eb601e764d9f3047042</id>
<published>2026-10-09T21:49:47Z</published>
<updated>2026-10-09T21:49:47Z</updated>
<title>plans: release 18 — the rollout as it went</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/137a7ae7f8c5b843e3fb0eb601e764d9f3047042.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 137a7ae7f8c5b843e3fb0eb601e764d9f3047042
parent a8a5806f075b23620d1d8568390b120f47f4fb4e
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 17:49:47 -0400

plans: release 18 — the rollout as it went

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>a8a5806f075b23620d1d8568390b120f47f4fb4e</id>
<published>2026-10-09T21:13:53Z</published>
<updated>2026-10-09T21:13:53Z</updated>
<title>Merge hotfix/no-session-ids (release 15&#39;s rollout line trimmed)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/a8a5806f075b23620d1d8568390b120f47f4fb4e.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit a8a5806f075b23620d1d8568390b120f47f4fb4e
parent 05148db6b454255b77d31e8116a804106f6b35da
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 17:13:53 -0400

Merge hotfix/no-session-ids (release 15&#39;s rollout line trimmed)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ec0903b37a17d1b8647672290cd7cb5d062cab35</id>
<published>2026-10-09T21:13:46Z</published>
<updated>2026-10-09T21:13:46Z</updated>
<title>plans: release 15&#39;s rollout line trimmed</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/ec0903b37a17d1b8647672290cd7cb5d062cab35.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit ec0903b37a17d1b8647672290cd7cb5d062cab35
parent 4134b9740227f4e96a258390deb9ac2376605dea
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 17:13:46 -0400

plans: release 15&#39;s rollout line trimmed

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>05148db6b454255b77d31e8116a804106f6b35da</id>
<published>2026-10-09T18:53:05Z</published>
<updated>2026-10-09T18:53:05Z</updated>
<title>docs: COMMANDS.md regenerated for tracks A, D and E</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/05148db6b454255b77d31e8116a804106f6b35da.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 05148db6b454255b77d31e8116a804106f6b35da
parent 320b844af53698185305ad5a1218670672cc499f
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:53:05 -0400

docs: COMMANDS.md regenerated for tracks A, D and E

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>320b844af53698185305ad5a1218670672cc499f</id>
<published>2026-10-09T18:52:53Z</published>
<updated>2026-10-09T18:52:53Z</updated>
<title>Merge track E (release 22 E1–E6: slide fields, the slides view and isometric overview, umtool&#39;s switch, slides exports) into r19/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/320b844af53698185305ad5a1218670672cc499f.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 320b844af53698185305ad5a1218670672cc499f
parent 657bf290795b2eece02e63b0e876da3c64c8c5d9
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:52:53 -0400

Merge track E (release 22 E1–E6: slide fields, the slides view and isometric overview, umtool&#39;s switch, slides exports) into r19/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>657bf290795b2eece02e63b0e876da3c64c8c5d9</id>
<published>2026-10-09T18:52:47Z</published>
<updated>2026-10-09T18:52:47Z</updated>
<title>Merge track D (release 21 D1 attach-media, D3 playable copies + torrents, D4b the last-resort seeder) into r19/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/657bf290795b2eece02e63b0e876da3c64c8c5d9.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 657bf290795b2eece02e63b0e876da3c64c8c5d9
parent f5d2a6e654fa9c7a569642f0c610d52533dc7cdd
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:52:47 -0400

Merge track D (release 21 D1 attach-media, D3 playable copies + torrents, D4b the last-resort seeder) into r19/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>f5d2a6e654fa9c7a569642f0c610d52533dc7cdd</id>
<published>2026-10-09T18:52:44Z</published>
<updated>2026-10-09T18:52:44Z</updated>
<title>Merge track A (release 19 A1–A5: ops finds its token, jobs over ops, read side + gated auto-queue control, archival writes, fetch-window queue + dedupe) into r19/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/f5d2a6e654fa9c7a569642f0c610d52533dc7cdd.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit f5d2a6e654fa9c7a569642f0c610d52533dc7cdd
parent 1bc6e241fde7b4726d8de5e136b1c4924e110e29
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:52:44 -0400

Merge track A (release 19 A1–A5: ops finds its token, jobs over ops, read side + gated auto-queue control, archival writes, fetch-window queue + dedupe) into r19/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>1bc6e241fde7b4726d8de5e136b1c4924e110e29</id>
<published>2026-10-09T18:52:32Z</published>
<updated>2026-10-09T18:52:32Z</updated>
<title>Merge hotfix/no-session-ids (the rule above the generated block)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/1bc6e241fde7b4726d8de5e136b1c4924e110e29.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 1bc6e241fde7b4726d8de5e136b1c4924e110e29
parent d6fc5bf74844fd476c9ee03cee313309db380dfe
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:52:32 -0400

Merge hotfix/no-session-ids (the rule above the generated block)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>4134b9740227f4e96a258390deb9ac2376605dea</id>
<published>2026-10-09T18:52:28Z</published>
<updated>2026-10-09T18:52:28Z</updated>
<title>agents: the session-link rule sits above the generated Next.js block</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/4134b9740227f4e96a258390deb9ac2376605dea.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 4134b9740227f4e96a258390deb9ac2376605dea
parent 5c3045c088a11cac5258121d924eeb90bf91c69d
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:52:28 -0400

agents: the session-link rule sits above the generated Next.js block

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>d6fc5bf74844fd476c9ee03cee313309db380dfe</id>
<published>2026-10-09T18:52:15Z</published>
<updated>2026-10-09T18:52:15Z</updated>
<title>Merge hotfix/no-session-ids (session trailers and links never ship) into r19/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/d6fc5bf74844fd476c9ee03cee313309db380dfe.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit d6fc5bf74844fd476c9ee03cee313309db380dfe
parent 016638429fcc7f477f00d94a990bafd5189492f9
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:52:15 -0400

Merge hotfix/no-session-ids (session trailers and links never ship) into r19/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>f5da2b230effaf8d4a6151a97c80be22d30467be</id>
<published>2026-10-09T18:49:50Z</published>
<updated>2026-10-09T18:49:55Z</updated>
<title>Merge r19/integration (the release 22 overview ruling) into Track E</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/f5da2b230effaf8d4a6151a97c80be22d30467be.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit f5da2b230effaf8d4a6151a97c80be22d30467be
parent 31c4cfd2d150e2f89d7d3c6ef1d5289c0ac79f40
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:49:50 -0400

Merge r19/integration (the release 22 overview ruling) into Track E

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>31c4cfd2d150e2f89d7d3c6ef1d5289c0ac79f40</id>
<published>2026-10-09T18:49:26Z</published>
<updated>2026-10-09T18:49:26Z</updated>
<title>plans: release 22 — Track E as shipped (E1–E5), the overview ruling confirmed; export changelog; PUBLISH.md&#39;s exports name the slides</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/31c4cfd2d150e2f89d7d3c6ef1d5289c0ac79f40.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 31c4cfd2d150e2f89d7d3c6ef1d5289c0ac79f40
parent ce0dc5e1989551fb882224bf931f6283c520bb65
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:49:26 -0400

plans: release 22 — Track E as shipped (E1–E5), the overview ruling confirmed; export changelog; PUBLISH.md&#39;s exports name the slides

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ce0dc5e1989551fb882224bf931f6283c520bb65</id>
<published>2026-10-09T18:47:37Z</published>
<updated>2026-10-09T18:47:37Z</updated>
<title>common, export: slides.html and slides.pdf join a report&#39;s exports (release 22 E5)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/ce0dc5e1989551fb882224bf931f6283c520bb65.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit ce0dc5e1989551fb882224bf931f6283c520bb65
parent 330ffef1294d490daa25ecc4d9a02b6550f6c2de
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:47:37 -0400

common, export: slides.html and slides.pdf join a report&#39;s exports (release 22 E5)

`slides` (slides.html) and `slides-pdf` (slides.pdf) join
REPORT_EXPORT_FORMATS, so the downloads line, compose&#39;s publishing, the
cited audit&#39;s allowlist, the revision commit&#39;s exports.json and the CLI&#39;s
and the ops job&#39;s `formats` take them with no change of their own.
slides.html is one self-contained file like report.html
(lib/report/exportSlidesHtml.ts): the site&#39;s slide stylesheet inline, the
light base in the site&#39;s accent, every picture a data: URI, a few lines of
script to fit and step, citations numbered to a reference list under the
deck, each slide&#39;s way back to its place on the site, and the sources
slide naming which document this is. Its markup mirrors Slide.tsx class for
class (a test holds them equal): the export is built in the editor&#39;s
server bundle, where React&#39;s server renderer is not imported. slides.pdf
prints it one 1280 × 720 page per slide (the printer takes a page size),
skipped with a note where there is no browser, as report.pdf is. The
evidence pack carries slides.html with its media; a clip&#39;s poster is
inlined or packed when this host has it, never a problem when it has not.
A report whose `slides.hide` says so exports neither.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>330ffef1294d490daa25ecc4d9a02b6550f6c2de</id>
<published>2026-10-09T18:43:03Z</published>
<updated>2026-10-09T18:43:03Z</updated>
<title>umtool: an article read as slides and in the overview, beside its notes; the source tab lints its slides (release 22 E4)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/330ffef1294d490daa25ecc4d9a02b6550f6c2de.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 330ffef1294d490daa25ecc4d9a02b6550f6c2de
parent 8932ad0dd46a349cdb457f9abffa21202105b2e3
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:43:03 -0400

umtool: an article read as slides and in the overview, beside its notes; the source tab lints its slides (release 22 E4)

The article page&#39;s reader gets the published page&#39;s switch (Article |
Slides | Overview, `?rv=` and the hash, the shared components over the
lenient articleView), so a draft is read in every shape before it ships.
The text stays mounted (hidden) under the other views, its note marks with
it; the notes rail stays beside them. A citation on a slide opens its
evidence in the rail; each slide counts the open notes on its part of the
article (a section&#39;s on its slide, the title&#39;s on the title slide, a
citation&#39;s on each slide showing it); Esc or &quot;Read this in the article&quot;
goes back to the text at the slide&#39;s place. The source tab lists what
would make the slides read badly (slideLint, and the validator&#39;s slide
problems), each linked to its slide. The lenient view now carries the
slide fields and a claim&#39;s sentence as its id.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>8932ad0dd46a349cdb457f9abffa21202105b2e3</id>
<published>2026-10-09T18:42:52Z</published>
<updated>2026-10-09T18:42:52Z</updated>
<title>common, export: the isometric overview — each part of the article beside its slide (release 22 E3)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/8932ad0dd46a349cdb457f9abffa21202105b2e3.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 8932ad0dd46a349cdb457f9abffa21202105b2e3
parent bd910cbe90fb2d025a84edde75abc33b87bdd106
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:42:52 -0400

common, export: the isometric overview — each part of the article beside its slide (release 22 E3)

ReportOverview lays the article and its slides side by side on one plane,
tilted isometrically (rotateX(55deg) rotateZ(-45deg), the plane&#39;s box
sized to the tilt so it scrolls whole): the article&#39;s parts as a column of
page blocks, each slide beside its part as a 16:9 card, a line between
them. The pair in force is lit and lifted; pointing at a pair lights both;
a block opens the article there, a card the slides. ↑ ↓ (Home, End) walk
the pairs, ← → the block and the card, Enter opens, Esc goes back to the
article at the pair; only the pair in force is in the tab order.

The tilt is never the only way to read it: the same ordered list lies flat
(two columns; stacked in a narrow box) for reduced motion, a narrow box, a
keyboard arrival, or the &quot;Flat&quot; toggle (remembered in this browser). The
switch gains Overview (`?rv=iso`, the pair&#39;s anchor in the hash); the
scroller alone moves to the pair, never the article behind.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>bd910cbe90fb2d025a84edde75abc33b87bdd106</id>
<published>2026-10-09T18:42:00Z</published>
<updated>2026-10-09T18:42:00Z</updated>
<title>common, export: the article as slides — the shared slides, the view switch, the reader (release 22 E2)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/bd910cbe90fb2d025a84edde75abc33b87bdd106.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit bd910cbe90fb2d025a84edde75abc33b87bdd106
parent 711ae6f0a3861df3093e236940d2b8bc062345fe
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:42:00 -0400

common, export: the article as slides — the shared slides, the view switch, the reader (release 22 E2)

common/components/report/slides/: Slide (one slide per kind and layout,
its left edge the colour of what it says — a claim&#39;s verdict, else the
accent — and &quot;Read this in the article&quot; to its anchor), ReportSlides (one
16:9 stage letterboxed in its box, the canvas scaled as one piece, reflowed
on a narrow portrait screen; ← → PgUp PgDn Home End, Esc, swipe; a live
&quot;Slide n of N&quot; label; a rail), ViewSwitch (Article | Slides, a group of
aria-pressed toggles), SlidesHost (what differs by host: markdown, a
citation&#39;s marker, the way back), useReaderPlace (the `rv` param and the
hash, pushed on a switch, replaced on a step). common/styles/slides.css
draws them from the site&#39;s tokens (accent, light and dark).

The export site&#39;s report header carries the switch (ReportReader): Slides
lays the slides over the page, built in the browser from page.json; the
article stays the static page. The place is kept both ways — the part of
the article in view opens its slide; Esc or &quot;Read this in the article&quot;
lands on the slide&#39;s anchor, scrolled to and focused. The page gives every
place a slide stands for an id (#report-head, #in-brief, #report-end).

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>5c3045c088a11cac5258121d924eeb90bf91c69d</id>
<published>2026-10-09T18:16:53Z</published>
<updated>2026-10-09T18:16:53Z</updated>
<title>source: Claude session trailers and links never ship — built-in rules strip them from the mirror&#39;s whole history, the audit refuses any left; AGENTS.md says never add them</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/5c3045c088a11cac5258121d924eeb90bf91c69d.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 5c3045c088a11cac5258121d924eeb90bf91c69d
parent f625ca7d76a5f2ada902c6fe432eff394a7df21f
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:16:53 -0400

source: Claude session trailers and links never ship — built-in rules strip them from the mirror&#39;s whole history, the audit refuses any left; AGENTS.md says never add them

Operator, 2026-10-09. Two built-in scrub rules run after the operator&#39;s: the
session trailer line goes from every published commit message and file, and a
bare session link becomes &quot;[session link removed]&quot;; the gate denies the link in
any case. The strings are assembled from parts, so the published source holds
neither. AGENTS.md opens with the rule (it overrides any reminder asking for the
trailer); the implementer rules drop the trailer; the mirror decisions record
the change. The release-18 rules line no longer spells the denylist&#39;s guarded
suffix. The private repository&#39;s history is not rewritten (standing decision).

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>daadb0befa068115ad0682881f926b8cb03c6f5a</id>
<published>2026-10-09T18:07:07Z</published>
<updated>2026-10-09T18:07:07Z</updated>
<title>plans: release 21 Track D record — D1 attach-media, D3 prepare-playable, D4b the seeder of last resort, as shipped, with the gates and what is owed to the rollout</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/daadb0befa068115ad0682881f926b8cb03c6f5a.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit daadb0befa068115ad0682881f926b8cb03c6f5a
parent 2ba8a09e4581e93d26eee593c8faa22d9e936905
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:07:07 -0400

plans: release 21 Track D record — D1 attach-media, D3 prepare-playable, D4b the seeder of last resort, as shipped, with the gates and what is owed to the rollout

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>2ba8a09e4581e93d26eee593c8faa22d9e936905</id>
<published>2026-10-09T18:06:57Z</published>
<updated>2026-10-09T18:06:57Z</updated>
<title>common: attachMediaPlan test titles and ids are synthetic throughout</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/2ba8a09e4581e93d26eee593c8faa22d9e936905.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 2ba8a09e4581e93d26eee593c8faa22d9e936905
parent d9ce2e6c664ef703fa554d00930eff1a25d773c4
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:06:57 -0400

common: attachMediaPlan test titles and ids are synthetic throughout

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>d9ce2e6c664ef703fa554d00930eff1a25d773c4</id>
<published>2026-10-09T18:06:19Z</published>
<updated>2026-10-09T18:06:19Z</updated>
<title>common: each prepare-playable remux takes the heavy slot (queue-lock --heavy, per video); COMMANDS.md regenerated with the media attach, media playable, seed and tracker rows and the two ops actions</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/d9ce2e6c664ef703fa554d00930eff1a25d773c4.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit d9ce2e6c664ef703fa554d00930eff1a25d773c4
parent a835e96885ddbf6a9817328d914c056f0c5641bd
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:06:19 -0400

common: each prepare-playable remux takes the heavy slot (queue-lock --heavy, per video); COMMANDS.md regenerated with the media attach, media playable, seed and tracker rows and the two ops actions

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>711ae6f0a3861df3093e236940d2b8bc062345fe</id>
<published>2026-10-09T18:06:17Z</published>
<updated>2026-10-09T18:06:17Z</updated>
<title>common: report slides — the slide fields, their rules, and buildReportSlides (release 22 E1)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/711ae6f0a3861df3093e236940d2b8bc062345fe.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 711ae6f0a3861df3093e236940d2b8bc062345fe
parent e504009d8bc78f96f9a392095822c9845f055a8f
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:06:17 -0400

common: report slides — the slide fields, their rules, and buildReportSlides (release 22 E1)

report.json gains `slides` ({hide, title, points, closing}) and a section&#39;s
or claim&#39;s `slide` ({title, points, cite, layout, hide}); version stays 1.
The validator holds them to slideRules.ts (lines one line, at most 5
points of at most 140 visible characters, a `cite` of the slide&#39;s own
section or claim, points citing only what the article cites, an evidence
layout with something to show) and refuses a section or claim id that is
one of the page&#39;s own anchors. lib/report/slides.ts builds the deck from
the page view — title, In brief, What the check found, each section and
claim, sources — each slide anchored to an id the article page carries;
with the reader&#39;s place in the URL (`rv`, `#s-&lt;n&gt;`) and a lint for
umtool. The view carries the fields through (compose and umtool&#39;s
lenient view alike); REPORT.md regenerated; the demo fixture gains them.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>bf0355624493ca065fa5a483dd4ff2b71f7f2921</id>
<published>2026-10-09T18:04:47Z</published>
<updated>2026-10-09T18:04:47Z</updated>
<title>plans: release 19 Track A records — A1 to A5 as shipped, with the gates</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/bf0355624493ca065fa5a483dd4ff2b71f7f2921.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit bf0355624493ca065fa5a483dd4ff2b71f7f2921
parent 47dc212014f5ed779c09adeeb7e62001135a3e15
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:04:47 -0400

plans: release 19 Track A records — A1 to A5 as shipped, with the gates

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>f625ca7d76a5f2ada902c6fe432eff394a7df21f</id>
<published>2026-10-09T18:04:24Z</published>
<updated>2026-10-09T18:04:24Z</updated>
<title>Merge worktree-mk-game-hooks (MK um-song hooks from the original arcade samples; song data under ~/reports; sources linked from the saved-video store)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/f625ca7d76a5f2ada902c6fe432eff394a7df21f.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit f625ca7d76a5f2ada902c6fe432eff394a7df21f
parent a837bf8560a1050e680c9e5930b325d309f735cf
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:04:24 -0400

Merge worktree-mk-game-hooks (MK um-song hooks from the original arcade samples; song data under ~/reports; sources linked from the saved-video store)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>a835e96885ddbf6a9817328d914c056f0c5641bd</id>
<published>2026-10-09T18:02:16Z</published>
<updated>2026-10-09T18:02:24Z</updated>
<title>Merge r19/integration into Track D (tracks B and C: the docs cli and COMMANDS.md, the heavy slot, reports check/verify-quotes/attach-video, release 22&#39;s plan) before the Track D records; the changelog keeps both sides, Track D first</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/a835e96885ddbf6a9817328d914c056f0c5641bd.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit a835e96885ddbf6a9817328d914c056f0c5641bd
parent 2484c402c66b17b2bae34b5ea57d05af8b6f885e
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:02:16 -0400

Merge r19/integration into Track D (tracks B and C: the docs cli and COMMANDS.md, the heavy slot, reports check/verify-quotes/attach-video, release 22&#39;s plan) before the Track D records; the changelog keeps both sides, Track D first

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>2484c402c66b17b2bae34b5ea57d05af8b6f885e</id>
<published>2026-10-09T18:01:50Z</published>
<updated>2026-10-09T18:01:50Z</updated>
<title>common: the home seeder of last resort — archilyzer seed (WebTorrent 3, TCP + WebRTC through node-datachannel) seeds a torrent only while no other seeder has it; archilyzer tracker; settings.seeder; the docker profile seeder behind a WireGuard namespace; doctor compares egress</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/2484c402c66b17b2bae34b5ea57d05af8b6f885e.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 2484c402c66b17b2bae34b5ea57d05af8b6f885e
parent 57ae8c2a8abe38f01747471d9ff8c5892a526f5b
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 14:01:50 -0400

common: the home seeder of last resort — archilyzer seed (WebTorrent 3, TCP + WebRTC through node-datachannel) seeds a torrent only while no other seeder has it; archilyzer tracker; settings.seeder; the docker profile seeder behind a WireGuard namespace; doctor compares egress

D4b of release 21. lib/lastResortSeeder.ts is the pure state machine
(standby after other seeders on every poll for standbyAfterSeconds; back at
once for a waiting leecher with no other source, or after the same window
alone; silent trackers in standby resume; a transition restarts both
clocks), 13 unit tests against a scripted scrape. controller/seeder.ts
observes (each tracker&#39;s scrape, merged by max; its wires counted by peer)
and applies (standby = removed from the client, data kept; seeding = added
back with skipVerify after a size check); no DHT, LSD, UPnP or web seeds;
bindInterface held. The tracker is bittorrent-tracker HTTP + WS, no UDP,
tracking only the manifests&#39; infohashes. Localhost integration tests: TCP
seed → standby → resume, and a WebRTC leecher completing through the WS
tracker. docker-compose.seeder.yml: gluetun v3.41.3 (firewall always on),
the seeder and tracker in its namespace, SEEDER_WG_CONF required; a config
test pins the construction. pnpm-workspace allows node-datachannel&#39;s
prebuilt binary and nothing else new.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>016638429fcc7f477f00d94a990bafd5189492f9</id>
<published>2026-10-09T17:53:09Z</published>
<updated>2026-10-09T17:53:09Z</updated>
<title>plans: release 22 — the isometric overview is the operator&#39;s meaning (confirmed)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/016638429fcc7f477f00d94a990bafd5189492f9.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 016638429fcc7f477f00d94a990bafd5189492f9
parent e504009d8bc78f96f9a392095822c9845f055a8f
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 13:53:09 -0400

plans: release 22 — the isometric overview is the operator&#39;s meaning (confirmed)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>e504009d8bc78f96f9a392095822c9845f055a8f</id>
<published>2026-10-09T17:50:32Z</published>
<updated>2026-10-09T17:50:32Z</updated>
<title>plans: release 22 planned — one article, two shapes: slides from the same report.json, a reader switch, the isometric overview, slides exports</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/e504009d8bc78f96f9a392095822c9845f055a8f.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit e504009d8bc78f96f9a392095822c9845f055a8f
parent 1d2c642eb95328a122175c94e02b8ad3d8e6af7d
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 13:50:32 -0400

plans: release 22 planned — one article, two shapes: slides from the same report.json, a reader switch, the isometric overview, slides exports

Ruling 2026-10-09: articles may be built a bit differently (report.json gains
slide fields); the isometric overview pairs each section with its slide.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>1d2c642eb95328a122175c94e02b8ad3d8e6af7d</id>
<published>2026-10-09T17:46:01Z</published>
<updated>2026-10-09T17:46:01Z</updated>
<title>docs: COMMANDS.md regenerated for track B&#39;s reports and heavy rows</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/1d2c642eb95328a122175c94e02b8ad3d8e6af7d.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 1d2c642eb95328a122175c94e02b8ad3d8e6af7d
parent 927e559f62e24b56736990616b6232245dc94cae
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 13:46:01 -0400

docs: COMMANDS.md regenerated for track B&#39;s reports and heavy rows

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>927e559f62e24b56736990616b6232245dc94cae</id>
<published>2026-10-09T17:31:00Z</published>
<updated>2026-10-09T17:31:00Z</updated>
<title>plans: release 18 — As it went: Wave 0, main merged in again, the gates and the full suite on a837bf85</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/927e559f62e24b56736990616b6232245dc94cae.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 927e559f62e24b56736990616b6232245dc94cae
parent db37837b04ce66384f3d55b3ffdd47cbc2384b53
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 13:31:00 -0400

plans: release 18 — As it went: Wave 0, main merged in again, the gates and the full suite on a837bf85

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>db37837b04ce66384f3d55b3ffdd47cbc2384b53</id>
<published>2026-10-09T17:30:37Z</published>
<updated>2026-10-09T17:30:37Z</updated>
<title>common: stageRun test cancels once the lock wait is announced, not after a fixed 50 ms (raced the announcement under load)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/db37837b04ce66384f3d55b3ffdd47cbc2384b53.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit db37837b04ce66384f3d55b3ffdd47cbc2384b53
parent e6d2da4cd7b8aea1ab6df372c248f6b33bf2cebd
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 13:30:37 -0400

common: stageRun test cancels once the lock wait is announced, not after a fixed 50 ms (raced the announcement under load)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>e6d2da4cd7b8aea1ab6df372c248f6b33bf2cebd</id>
<published>2026-10-09T17:30:37Z</published>
<updated>2026-10-09T17:30:37Z</updated>
<title>Merge track B (B6 test economy, B1 the heavy slot, B4 ops transcribe timing + priority, B3 reports check/verify-quotes/attach-video, B5 umtool debts) into r19/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/e6d2da4cd7b8aea1ab6df372c248f6b33bf2cebd.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit e6d2da4cd7b8aea1ab6df372c248f6b33bf2cebd
parent 166a1ac691b412199b8b4c387f0ef1b7a56293ac
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 13:30:37 -0400

Merge track B (B6 test economy, B1 the heavy slot, B4 ops transcribe timing + priority, B3 reports check/verify-quotes/attach-video, B5 umtool debts) into r19/integration

B2 (report-to-video robustness) did not ship: writes to umtool/report-to-video/
were refused by the permission system; the partial work is outside the tree.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>cf5e57ac081ceaa0ae8cff3f58c81827773e3061</id>
<published>2026-10-09T17:26:12Z</published>
<updated>2026-10-09T17:26:12Z</updated>
<title>plans: release 19 Track B records — B6, B1, B4, B3, B5 as shipped, the gates, and B2 not shipped (writes to report-to-video refused)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/cf5e57ac081ceaa0ae8cff3f58c81827773e3061.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit cf5e57ac081ceaa0ae8cff3f58c81827773e3061
parent 70a0123f1e3c66f9d924e3f065dc6c1c6dc7b433
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 13:26:12 -0400

plans: release 19 Track B records — B6, B1, B4, B3, B5 as shipped, the gates, and B2 not shipped (writes to report-to-video refused)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>57ae8c2a8abe38f01747471d9ff8c5892a526f5b</id>
<published>2026-10-09T17:24:58Z</published>
<updated>2026-10-09T17:24:58Z</updated>
<title>common: prepare-playable — each saved container remuxed losslessly into a browser-playable mp4 (+faststart) or webm, one single-file torrent per copy, sha-keyed so a re-run is a no-op</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/57ae8c2a8abe38f01747471d9ff8c5892a526f5b.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 57ae8c2a8abe38f01747471d9ff8c5892a526f5b
parent 6d9cb23d1cee35c03e999dc33224207f4570ae86
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 13:24:58 -0400

common: prepare-playable — each saved container remuxed losslessly into a browser-playable mp4 (+faststart) or webm, one single-file torrent per copy, sha-keyed so a re-run is a no-op

D3 of release 21. lib/playableMedia.ts is the decision table (h264/vp9/av1 +
aac/opus/mp3 → mp4; vp9/vp8/av1 + opus/vorbis in webm → webm; anything else
listed, never re-encoded), first video + first audio only, metadata and
chapters dropped, +bitexact. create-torrent 6.1.3 + parse-torrent 11.0.24:
name &lt;id&gt;.&lt;ext&gt;, 256 KiB–1 MiB pieces, no urlList, no comment, no created
by, no private flag, fixed creation date, announce from a parameter.
Copies, torrents and playable.json under playable/&lt;slug&gt;/ beside the
saved-video store. Job kind prepare-playable (drainable, needsMedia, ingest,
one queue machine-wide), ops route + action, pnpm ops row, archilyzer media
playable.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>166a1ac691b412199b8b4c387f0ef1b7a56293ac</id>
<published>2026-10-09T17:13:38Z</published>
<updated>2026-10-09T17:13:42Z</updated>
<title>Merge track C (C2 OPERATING.md + docs cli, C4 homepage docs, C5 FACTS, the track&#39;s record) into r19/integration</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/166a1ac691b412199b8b4c387f0ef1b7a56293ac.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 166a1ac691b412199b8b4c387f0ef1b7a56293ac
parent 93e59abdd569b113a1728de0c31b50f4681da298
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 13:13:38 -0400

Merge track C (C2 OPERATING.md + docs cli, C4 homepage docs, C5 FACTS, the track&#39;s record) into r19/integration

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>70a0123f1e3c66f9d924e3f065dc6c1c6dc7b433</id>
<published>2026-10-09T17:08:56Z</published>
<updated>2026-10-09T17:09:01Z</updated>
<title>Merge r19/integration into Track B (the release 19-21 plans, track C&#39;s doc fixes, the jobKinds test fix) before the Track B records</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/70a0123f1e3c66f9d924e3f065dc6c1c6dc7b433.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 70a0123f1e3c66f9d924e3f065dc6c1c6dc7b433
parent ef01fcd6406aa333ce294f1cfe5c236547664eb7
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 13:08:56 -0400

Merge r19/integration into Track B (the release 19-21 plans, track C&#39;s doc fixes, the jobKinds test fix) before the Track B records

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ef01fcd6406aa333ce294f1cfe5c236547664eb7</id>
<published>2026-10-09T17:08:39Z</published>
<updated>2026-10-09T17:08:39Z</updated>
<title>umtool: the two-section Note spec waits for its mark before reading notes.json; the edit-guard test takes its kind from the registry</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/ef01fcd6406aa333ce294f1cfe5c236547664eb7.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit ef01fcd6406aa333ce294f1cfe5c236547664eb7
parent af054e224d5cf9021fe1696411e7c60fd0e6bf55
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 13:08:39 -0400

umtool: the two-section Note spec waits for its mark before reading notes.json; the edit-guard test takes its kind from the registry

From the B5 umtool e2e run: the new article-notes test read notes.json
before the save had landed (the existing tests wait for the mark first, and
now this one does), and projects.spec&#39;s registry guard caught a kind id
spelled out in lib/report/edit-guard.test.mjs — it now asks the registry for
a kind that takes notes. Two comments name REPORTS_DIR instead of a home path.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>6d9cb23d1cee35c03e999dc33224207f4570ae86</id>
<published>2026-10-09T17:08:08Z</published>
<updated>2026-10-09T17:08:08Z</updated>
<title>common: attach-media — a channel&#39;s held videos get their media from a local archive (directory, zip read in place, 7z) into the saved-video store, with local-archive provenance</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/6d9cb23d1cee35c03e999dc33224207f4570ae86.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 6d9cb23d1cee35c03e999dc33224207f4570ae86
parent 93e59abdd569b113a1728de0c31b50f4681da298
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 13:08:08 -0400

common: attach-media — a channel&#39;s held videos get their media from a local archive (directory, zip read in place, 7z) into the saved-video store, with local-archive provenance

D1 of release 21. The id from the folder&#39;s &quot;(&lt;id&gt;)&quot; or the file&#39;s yt-dlp
suffix, or explicit items; written through persistSourceVideo (a staging
file on the store&#39;s disk, then a rename), keepReason pin, origin {kind:
&quot;local-archive&quot;, archive, entry, sha256, attachedAt}; refuses over a pointer
unless replace; createRecords writes metadata.info.json through the metadata
history (writer &quot;local-archive&quot;); [LOST] folders listed, never attached.
Job kind attach-media (drainable, needsMedia, ingest), ops route + action,
pnpm ops row, archilyzer media attach.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>47dc212014f5ed779c09adeeb7e62001135a3e15</id>
<published>2026-10-09T16:46:32Z</published>
<updated>2026-10-09T16:46:32Z</updated>
<title>editor: the ops route tests&#39; corpus helper opts its fixture paths out of tracing</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/47dc212014f5ed779c09adeeb7e62001135a3e15.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 47dc212014f5ed779c09adeeb7e62001135a3e15
parent cb56ff9d4982a9579592f6448592819c76ddc2a9
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 12:46:32 -0400

editor: the ops route tests&#39; corpus helper opts its fixture paths out of tracing

next-build-trace.test.mjs scans every module under editor/app that is not a
test file, and _testCorpus.ts (A2b) joins paths off import.meta.dirname; its
calls carry /* turbopackIgnore: true */ as the check asks. Test-only: no route
imports it.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>8614ab772b4a76f56f47e8c206d5bb4fef13dbb1</id>
<published>2026-10-09T16:45:13Z</published>
<updated>2026-10-09T16:45:13Z</updated>
<title>plans: release 19&#39;s Track C record (C1-C5, as shipped)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/8614ab772b4a76f56f47e8c206d5bb4fef13dbb1.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 8614ab772b4a76f56f47e8c206d5bb4fef13dbb1
parent 6b98abb7391aa04ff7d06032addc5fa1a7abcbd3
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 12:45:13 -0400

plans: release 19&#39;s Track C record (C1-C5, as shipped)

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>6b98abb7391aa04ff7d06032addc5fa1a7abcbd3</id>
<published>2026-10-09T16:40:18Z</published>
<updated>2026-10-09T16:40:35Z</updated>
<title>Merge r19/integration into track C (release 21&#39;s plan, the jobKinds test fix) before the record commit</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/6b98abb7391aa04ff7d06032addc5fa1a7abcbd3.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 6b98abb7391aa04ff7d06032addc5fa1a7abcbd3
parent b7b88a56bb42860a3ab031f40dbbd63f9f109086
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 12:40:18 -0400

Merge r19/integration into track C (release 21&#39;s plan, the jobKinds test fix) before the record commit

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>b7b88a56bb42860a3ab031f40dbbd63f9f109086</id>
<published>2026-10-09T16:40:05Z</published>
<updated>2026-10-09T16:40:05Z</updated>
<title>homepage: the Running an archive doc says how to run one from a shell or an agent</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/b7b88a56bb42860a3ab031f40dbbd63f9f109086.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit b7b88a56bb42860a3ab031f40dbbd63f9f109086
parent a21a7592179d5b31871e52b16fbf27c5e41aaa71
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 12:40:05 -0400

homepage: the Running an archive doc says how to run one from a shell or an agent

A section, &quot;From a shell or an agent&quot;: `pnpm ops` (the running editor&#39;s actions over HTTP), `pnpm archilyzer`
(the core&#39;s command line) and the MCP server, three example commands, and links to the source&#39;s OPERATING.md and
COMMANDS.md. Gates: `pnpm --filter homepage test` 23/23; `build:nodata` ok (45 s, 5 GB scope).

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>93e59abdd569b113a1728de0c31b50f4681da298</id>
<published>2026-10-09T16:39:24Z</published>
<updated>2026-10-09T16:39:24Z</updated>
<title>plans: release 21 planned — playable archives (local media for held videos, clip windows cut locally, per-video torrents, a home seeder of last resort behind a VPN; pilot TISM on jeralyzer-private)</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/93e59abdd569b113a1728de0c31b50f4681da298.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 93e59abdd569b113a1728de0c31b50f4681da298
parent 1a9e2aa1e99a58fc6d5f7ba2993587120231d53f
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 12:39:24 -0400

plans: release 21 planned — playable archives (local media for held videos, clip windows cut locally, per-video torrents, a home seeder of last resort behind a VPN; pilot TISM on jeralyzer-private)

Rulings 2026-10-09: pilot on jeralyzer-private first; no web seed and no R2 — a
home seeder only, behind a VPN, seeding only when no other seeder exists; ASR
for the three new videos only. PLAN.md&#39;s release index names it.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>af054e224d5cf9021fe1696411e7c60fd0e6bf55</id>
<published>2026-10-09T16:12:27Z</published>
<updated>2026-10-09T16:12:27Z</updated>
<title>umtool: its own e2e ports per worktree, a hermetic mix.spec, `umtool window` notes its edits, two-block Note, SITES_DIR from the CLI&#39;s checkout, /sites is &quot;articles&quot;</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/af054e224d5cf9021fe1696411e7c60fd0e6bf55.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit af054e224d5cf9021fe1696411e7c60fd0e6bf55
parent 19e0f6b76ec44d4e137752be52f3c31a9f61f0bb
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 12:12:27 -0400

umtool: its own e2e ports per worktree, a hermetic mix.spec, `umtool window` notes its edits, two-block Note, SITES_DIR from the CLI&#39;s checkout, /sites is &quot;articles&quot;

Six debts from the articles + notes merge:

- Per-worktree e2e ports. umtool&#39;s `e2e` script now runs through the
  worktree injector (`worktree.mjs run`), so the documented
  `pnpm --filter umtool run e2e` gets the worktree&#39;s own ports. And the
  injector&#39;s index was the FIRST worktree root containing the cwd: every
  `.claude/worktrees/&lt;agent&gt;` is nested in the main checkout, so all of them
  got offset 0 — the main checkout&#39;s ports — for every suite. It is the most
  specific root now (indexForPath, tested).
- mix.spec&#39;s order dependence (FACTS: `:166`/`:201` red in every full run,
  green alone). Specs before it fetch windows through the editor stub into
  the fixture corpus&#39;s clips/, which the bench folds in with a project&#39;s
  clips-raw. The file now moves the corpus&#39;s clip windows aside for its
  tests and puts them back after; and the render-scratch test matches the
  option label exactly instead of as a substring.
- `umtool window` goes through the routes&#39; edit guard: on a generated
  manifest each change is an `edit` note for the generator. The guard is
  lib/report/edit-guard.mjs now (plain JS, so the CLI runs the same one);
  guard.ts only types it.
- A selection that runs across two sections gets its Note button: it is
  anchored in the section it starts in, to that section&#39;s end (else the
  one it ends in, from its start). A spec covers it.
- The CLI finds SITES_DIR (and CHANNELS_DIR) from its OWN checkout:
  REPO_ROOT is the repo of `&lt;repo&gt;/umtool/bin/&lt;cli&gt;.mjs` when that is the
  entry script, so `umtool notes --all` run from a ~/reports workspace reads
  the corpus&#39;s sites. The app keeps the cwd walk. umtool/lib/*.test.mjs
  joins test:scripts.
- The nav entry and crumbs for /sites read &quot;articles&quot; (lowercase, like every
  umtool nav entry): the editor&#39;s /sites is the sites themselves. The URL
  is unchanged; sites.spec asserts the new name and that no &quot;sites&quot; link
  is left.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>cb56ff9d4982a9579592f6448592819c76ddc2a9</id>
<published>2026-10-09T16:09:47Z</published>
<updated>2026-10-09T16:09:47Z</updated>
<title>Merge branch &#39;r19/integration&#39; into worktree-agent-a103bef2ee4055362</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/cb56ff9d4982a9579592f6448592819c76ddc2a9.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit cb56ff9d4982a9579592f6448592819c76ddc2a9
parent c968ddf6c36ff18bdc434d87e8bb69487a74d648
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 12:09:47 -0400

Merge branch &#39;r19/integration&#39; into worktree-agent-a103bef2ee4055362

</content>
</entry>
<entry>
<id>c968ddf6c36ff18bdc434d87e8bb69487a74d648</id>
<published>2026-10-09T16:09:23Z</published>
<updated>2026-10-09T16:09:23Z</updated>
<title>editor: clip windows get their own queue per platform and are never queued twice</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/c968ddf6c36ff18bdc434d87e8bb69487a74d648.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit c968ddf6c36ff18bdc434d87e8bb69487a74d648
parent d6afa774ba81b366cc9f5cdb3e2b27f68789a121
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 12:09:23 -0400

editor: clip windows get their own queue per platform and are never queued twice

Release 19 slice A5. A fetch-window job ran on the platform&#39;s download queue,
and a queue runs one job at a time — a tier orders only the waiting jobs — so
a few seconds of video waited behind a multi-hour persist-videos or sync.
clipWindowQueueKey (lib/queueKeys.ts) puts the single fetch (fetchWindowAction)
and the batches (fetchWindowsAction) on `clips:&lt;platform&gt;`: one window at a
time per platform, the batches&#39; clip-window gap kept, the platform&#39;s hold,
cooldown and backoff still shared.

A repeated ask is answered with the job already fetching it:
jobs/windowJobs.ts&#39; windowInFlight finds a queued or running fetch-window
whose window contains the asked one, or a fetch-windows batch with such an
item, same channel, video and height cap, off the job&#39;s replay spec. The
single route answers that jobId with `existing: true`; the batch lists such
windows in `inFlight`, starts no job for them, and the ops route adds their
jobs to `jobIds` so --wait follows the windows asked for. Retry is not
deduplicated.

umtool/report-to-video/fetch-via-editor.mjs (its own wait and 10-minute poll
timeout) is not touched: that directory belongs to another session.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>19e0f6b76ec44d4e137752be52f3c31a9f61f0bb</id>
<published>2026-10-09T16:03:42Z</published>
<updated>2026-10-09T16:03:42Z</updated>
<title>reports: `reports check`, `reports verify-quotes` and `reports attach-video` on the CLI</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/19e0f6b76ec44d4e137752be52f3c31a9f61f0bb.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 19e0f6b76ec44d4e137752be52f3c31a9f61f0bb
parent 762642b24ae0f1efcbd96b6b4824412745bd062a
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 12:03:42 -0400

reports: `reports check`, `reports verify-quotes` and `reports attach-video` on the CLI

Three report jobs that meant a build, or a by-hand script, before:

- `archilyzer reports check &lt;site&gt; [--reports a,b] [--allow-missing-media]`
  is the reports stage of compose with nothing written — resolveSiteReports:
  validation, every cited quote against its record, prepared media present
  and current, the report video under the publish limit — and exits 1 with
  compose&#39;s own problem lines. --reports checks drafts not yet in site.json.
- `archilyzer reports verify-quotes &lt;report.json&gt; [--json]` runs compose&#39;s
  quote check over every video, audio and post quote of one report: the best
  score and track, and the `en-orig` track&#39;s score where the record has one.
  A quote that matches a served `en` rewrite but not en-orig (the words as
  spoken) is `en-orig-drift`, though compose, which takes the best track,
  would pass it. The span check is now ONE function, checkSpanQuote, which
  compose calls too (it was inline in resolveSiteReports); its drift
  sentence likewise (quoteDriftMessage).
- `archilyzer reports attach-video &lt;report.json&gt; &lt;video&gt; [--poster]
  [--caption]` (publish/reportVideo.ts): an H.264 mp4 under 24 MiB is
  remuxed (+faststart); anything else is encoded (H.264/AAC, bitrate from
  the duration inside 96% of the limit, narrower as it falls) and encoded
  again smaller if a pass overshoots; too long to be watchable is refused
  with its length. video.mp4 and a poster (given, kept, or a frame) land
  beside report.json, then `video` is set — only if the video&#39;s own fields
  validate.

Tests: bin/reports-check.test.ts, 10 (a temp corpus with a rewritten `en`
track; two of them encode real 3 s clips with ffmpeg, skipped without it).
composeReports&#39; three test files unchanged and green (19).

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>d6afa774ba81b366cc9f5cdb3e2b27f68789a121</id>
<published>2026-10-09T16:01:32Z</published>
<updated>2026-10-09T16:01:32Z</updated>
<title>ops: archival writes — settings, publish lane, platform holds, workers, one video, cleanup, relocate dryRun; archilyzer storage report</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/d6afa774ba81b366cc9f5cdb3e2b27f68789a121.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit d6afa774ba81b366cc9f5cdb3e2b27f68789a121
parent 5aaeec9382a2492196141dbdbe2a4948a212f663
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 12:01:32 -0400

ops: archival writes — settings, publish lane, platform holds, workers, one video, cleanup, relocate dryRun; archilyzer storage report

Release 19 slice A4. Each route is the existing action:
- POST /api/ops/settings {patch}: saveSettings, refusing an unknown key, a
  key another writer owns (channelPriority, autoQueue, workers, storage) and a
  value the schema would coerce (settings/patch.ts compares every leaf sent
  with the schema&#39;s reading of the merged settings — the schema clamps rather
  than throwing, so { ok: true } would otherwise answer an unsaved value).
- lane: the publish lane (savePublishSettingsAction with the stored fields,
  the publish hold, start/stop/drainPublishLaneAction); the four ingest lanes&#39;
  drain now goes through drainAutoQueueAction.
- clear-platform-hold {platform}: clearPlatformHoldAction.
- POST /api/ops/workers {op, ids}: enable/disable/drainWorkerAction per id.
- transcribe-one {slug, id, file?}: transcribeOneAction / whisperVideoAction.
- delete-file {slug, id, file}: deleteVideoFileAction (removeMediaFile).
- do-not-clean {slug, id, keep?}: toggleDoNotCleanAction, set not toggled.
- POST /api/ops/cleanup {slug, sweep}: the channel page&#39;s four sweeps.
- relocate {dryRun}: previewRelocationAction per slug (a missing channel is
  the bulk path&#39;s &quot;channel not found&quot;).

`archilyzer storage report [&lt;slug&gt;...] [--json]` (common/bin/storage-report.ts):
each channel&#39;s tierable media, text and clip bytes off its report and where
its media is (corpus disk, a location, a custom path, legacy), with totals per
place; unknown is never 0; no drive is touched.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>762642b24ae0f1efcbd96b6b4824412745bd062a</id>
<published>2026-10-09T15:56:03Z</published>
<updated>2026-10-09T15:56:03Z</updated>
<title>transcribe-file: durationMs is the engine&#39;s time (waitedMs the queue); a short file waits in the urgent tier</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/762642b24ae0f1efcbd96b6b4824412745bd062a.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 762642b24ae0f1efcbd96b6b4824412745bd062a
parent 2c13c9da898c003820e64b604594a206fd4ad286
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 11:56:03 -0400

transcribe-file: durationMs is the engine&#39;s time (waitedMs the queue); a short file waits in the urgent tier

`pnpm ops transcribe`&#39;s durationMs ran from the job&#39;s start, so it counted
the ffmpeg cut and the wait for a free worker — on a box whose GPU worker was
busy with the lane, minutes that read as a slow engine. It now runs from the
moment a worker takes the job (onWorker; the last attempt&#39;s, after a transport
retry) to the transcript, and the new `waitedMs` is the queue. The job&#39;s log
says both.

The pool already parks the lane&#39;s units (background) behind a manual
acquire, so a file transcription was ahead of the lane — but FIFO behind a
manual batch&#39;s next video. A cut of up to 15 minutes of audio
(URGENT_MAX_AUDIO_SEC, measured from the cut WAV&#39;s size before the acquire)
now asks the pool&#39;s existing &quot;urgent&quot; tier, ahead of every parked waiter; a
longer file keeps &quot;foreground&quot;. The tier orders waiters only: nothing
running is interrupted. transcribeWithWorker takes a `tier` and passes it
to pool.acquire; no other caller changes.

Tests: transcribeFile 21 → 24 (the tier from the cut&#39;s length; waitedMs vs
durationMs with the GPU slot held; a file job parked LAST takes the freed
slot before a parked manual and a parked lane acquire — and fails with the
tier forced to &quot;foreground&quot;).

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>5aaeec9382a2492196141dbdbe2a4948a212f663</id>
<published>2026-10-09T15:52:43Z</published>
<updated>2026-10-09T15:52:43Z</updated>
<title>ops: the read side — settings, storage, sites, workers, lanes, scheduler, cleanup; the lane control route needs the token</title>
<link rel="alternate" type="text/html" href="https://archilyzer.pages.dev/source/git/commit/5aaeec9382a2492196141dbdbe2a4948a212f663.html" />
<author>
<name>I Mean I&#39;m Just Saying</name>
<email>imeanimjustsaying@kiwifarms.st</email>
</author>
<content>commit 5aaeec9382a2492196141dbdbe2a4948a212f663
parent a35e901abbf219ff0ce44600f0d8e9464c530ec4
Author: I Mean I&#39;m Just Saying &lt;imeanimjustsaying@kiwifarms.st&gt;
Date:   Fri,  9 Oct 2026 11:52:43 -0400

ops: the read side — settings, storage, sites, workers, lanes, scheduler, cleanup; the lane control route needs the token

Release 19 slice A3. GET /api/ops/{settings[?key], storage, sites, workers,
auto-queue, scheduler, cleanup/&lt;slug&gt;} answer what each page already builds
(getSettings, buildStorage, listSites, buildWorkersPayload,
buildAutoQueueStatusPayload, buildSchedulerStatusPayload, and a new
loadCleanupRow — loadCleanupSummary&#39;s row for one channel), behind the token,
through one readRoute door (_read.ts) that refuses unknown query keys and
redacts every secret-named string (a remote worker&#39;s token). The CLI reads them
as `get settings [&lt;key&gt;]`, `get storage|sites|workers|auto-queue|scheduler`,
`get cleanup &lt;slug&gt;`.

/api/auto-queue/control was the one route that starts and stops lanes with no
gate. It answers opsAuth now. Its one UI caller, the /operations lane header&#39;s
Start/Drain/Stop, calls startAutoQueueAction / stopAutoQueueAction and a new
drainAutoQueueAction instead (server actions carry Next&#39;s origin check; a page
holds no token). The six e2e specs that drive the route send the test token.

Co-Authored-By: Claude Opus 5.5 (1M context) &lt;noreply@anthropic.com&gt;

</content>
</entry>
</feed>
