The record: where the work stands and what is next. Rewritten every session; it carries no history (the git log and the entries do). The work order below is the only one.
- Tree: committed on
mainand pushed. The skeleton is commit 4e1db17; the first wave of builds (the workspace, CI, the probe Worker and the measurement workflows) follows it, then waves 2 and 3. Wave 4, the root and the feed (DOM-020, DOM-022), follows them, then the Renovate moves and DOM-011's close. Wave 5, the compaction (DOM-023), follows them, then the ingest skeleton (DOM-024) and the clocks (DOM-001 to DOM-003). The first adapter (DOM-026), the chain's stepdue(DOM-023) and its fix follow them, then the chain at 30 minutes (rulings 26 and 27). The closes of DOM-026 and DOM-024 on their live readings follow them (9b142c6). DOM-063's walk of the chain follows them (137a220), then its close on the live reading (d9c6d56). The Worker of DOM-030, partial, is the commit that carries this record. - Last session: started 2026-10-28T10:11:54Z: asked the operator what was unsettled (rulings 14 to 17 of
TODO/RULES.mdsection 5, 18 to 25 on 2026-10-29, and 26 and 27 on 2026-11-01), then works the order unattended. - Deployed: the probe Worker
domains-probeon workers.dev and its bucketdomains-probe(DOM-061, deployed 2026-10-28T15:13:54Z, first tick 15:23:24Z). It holdscrons = []from the deploy of 2026-10-30T18:30:46Z, and its last tick was scheduled at 18:34:24Z (DOM-002). Its version 529b760c, deployed 2026-10-30T19:51:58Z, serves/,/gaps,/rangeand/decodewithout/kafka(DOM-005). The bucket holds DOM-008's sample packs undersample/v1/. DOM-056 deletes both. The public GHCR packagesprobe(DOM-006) andref(DOM-019, refreshed daily by its cron13 5 * * *, which GitHub started hours late, or by the chain's stepdueat about 06:00 UTC on the chain at 30 minutes, DOM-023; on 2026-11-01 the chain at 10 minutes dispatched run 41277834331 at 05:40:23Z) stay (ruling 5). The data packagesroot,obs,state,namesandfeedare public and read with no credential;ingest-live.ymlrun 41257033038 createdobsandstate, andcompact-daily.ymlrun 41266798719 creatednamesandfeed(docs/resources.md). The serving Workerdomains-pkgforge-devofapps/api/answers on its custom domaindomains.pkgforge.dev: versionee2d30aeof c0c7cd5, deployed 2026-11-02T07:57:49Z (DOM-030). No cache bucket yet. - CI:
ci.ymlruns the gate on each push tomain(DOM-013). Its first run is the one of the commit that adds it.
| measure | reading |
|---|---|
node scripts/todo/check.mjs |
exit 0 on the tree that carries this record |
node scripts/todo/count.mjs --check |
exit 0 on the same tree |
| the Actions settings of the repository | MEASURED 2026-10-28T10:18:52Z after the change under ruling 14: {"default_workflow_permissions":"read","can_approve_pull_request_reviews":false}. Every workflow still declares its permissions (DOM-014 checks that) |
| the gate at this session's start | MEASURED 2026-10-28T10:13Z, npm run gate: exit 0, 95 tests in 12 files, tree 2d95e9f84f24 |
| GitHub's schedule on a sibling repository | the */15 workflow of mirror-archlinux ran 40 times in its last 300 runs with a median gap of 233 min (MEASURED 2026-10-27T06:33Z by the operator's agent), and 67 runs with a median gap of 229 min, p90 314 and max 443 at 09:14Z; DOM-001 measures this repository |
| the corpus | OpenINTEL's newly registered topics from 2026-10-22T13:00:50Z: READ 2026-11-01T10:31:45Z, node scripts/root/show.mjs, exit 0, root_seq 53 with 225 live packs of domains, 116 of names and 17 of feed, the day packs of 2026-10-25 to 2026-10-31 among them. THC's daily dumps give a horizon of 2026-09-01 once DOM-029 backfills them |
63 items. 34 open, 3 partial, 0 blocked, 26 done.
- Asked the operator the four questions the record left open and recorded the answers as rulings 14 to 17 (
TODO/RULES.mdsection 5): the agent runs this project's Cloudflare and repository changes itself; the zone's rate-limit rules stay the operator's blocked decision (DOM-062, new); the/v1/newcheckpoint is not a stop; the clock thresholds stay 15 and 60 minutes. - Asked the operator the two design questions wave 2 and wave 3 left open and recorded the answers as rulings 18 and 19: the group
root-writerlives inroot-promote.yml(DOM-020 changes rule 13 of the workflow check), and an RDAP creation date before 2026 setssuspectand is not evidence (DOM-050). - Asked the operator three more questions and recorded the answers as rulings 20 to 22: the agent decides common-sense matters itself; a force-push with the admin bypass is allowed when asked for or needed; the root names every PSL hash its live packs use (
psl_live, DOM-020). - Under ruling 20, handled Renovate's pull requests: closed #4 (wrangler 4.155.0: the pin of 4.150.0 holds the compatibility date of the tests and the probe until DOM-030 moves both) and #5 (the runner image ubuntu v26: the clock and feed measurements run on ubuntu-24.04 until DOM-003), each with its reason as a comment. #1 (biome), #2 (node) and #3 (workers-types) go into the tree after wave 4's commit, each with a green gate; Renovate closes a pull request whose update is already on
main. - Did not rewrite history to remove the account name that commit 1a5a972 and its descendants carry (ruling 21 allows it when needed). A rewrite would change the SHA of every commit from 1a5a972 on, which the record,
docs/resources.mdand the immutable annotations of theprobeandrefpackages cite. The old commits would stay reachable through the open Renovate branches based on them. The name derives the probe's URL, and the probe is deleted when its measurements close (DOM-056). The current tree holds it nowhere, andnode scripts/scan-secrets.mjsnow refuses the shape of a wrangler account name. - Set the repository's default workflow permission to
read(former Operator action 3), under ruling 14. - Built the first wave, eight entries, now partial: the npm workspace with
packages/coreand the workerd harnesspackages/testkit, the type check as a gate step andci.yml(DOM-013); the probe Workerprobes/worker(DOM-061); and the measurement workflows and scripts of DOM-001, DOM-004, DOM-006, DOM-009, DOM-010 and DOM-012. Three review lenses ran on the wave (door sweep, guard mutation, claim audit); their findings are fixed in the same change, and each entry's Built and Correction bullets record what was measured and corrected. - Closed DOM-013 (CI run 40713652294 green on 5e7a646), DOM-004 (
measure-kafka.ymlrun 40714194235: PASS, 10.7 GB a day on the wire for the four topics) and DOM-061 (the probe deployed by the agent under ruling 14, both crons writing). DOM-002's 48 hours started with the probe's first tick. - Fixed
measure-feeds.yml, which reachedmainwith a YAML error (DOM-012 Correction), and dispatched every wave-1 measurement: the clock chain (CHAIN_END2026-10-30T15:15:58Z), the feeds chain (until 2026-11-04T15:15:55Z), Kafka, the GHCR push, THC's one day (PASS, 146 s) and then its 54-day matrix, and THC's monthly stream. - Closed DOM-006: two runs of
measure-push.ymlpushed with the job's own token, the packageprobecame out public and linked, and it reads anonymously. - Closed DOM-009 (54 days of THC's dumps on runners: the slowest day 590 s, about 1.40 billion distinct names, and 25% to 31% new names a day even after 53 earlier days) and DOM-010 (the whole September monthly file: 6,364,111,723 two-field records and no CNAME targets, 142 MB/s down and 18.8 MB/s through gzip and awk).
- Read the
pkgforge.devzone's rules with thecfCLI, as the operator asked: the rate-limit rule200req/Secondcovereddomains.pkgforge.dev. The agent prepared and validated the exclusion; the operator applied it at 15:53:56Z, and DOM-062 is no longer blocked. - Built the second wave, six entries, now partial, and ran the three lenses on it:
- DOM-014: the workflow policy check, now a gate step.
- DOM-015: the names package with the Public Suffix List and reversed keys. Address literals are refused as
numeric-tld, and architecture section 3.1 says so. - DOM-011: the names-tile chain.
- The probe routes
/kafka,/rangeand/decode(DOM-005, DOM-007, DOM-008), with their measurement scripts.
- Closed DOM-014 and DOM-015 on
ci.ymlrun 40789086109: 749 of 749 tests passed on Linux, with the workflow policy as the gate's third step. - Redeployed the probe with the routes
/kafka,/rangeand/decodeat 23:42:35Z. It usedversions deploy, so the cron triggers stayed as they were (DOM-002).- The Worker opens TCP sockets to the Zonestream broker and decodes its batches.
- workers.dev keeps Cache API entries.
- The sample packs are in R2 and decode to their manifest's CRC.
- DOM-011's 24-hour tiles chain started at 23:43:26Z.
- Read the account's plan with the
cfCLI: Workers Paid, so the 10 ms CPU limit of Workers Free does not bind the probe (DOM-002). - Ruling 11: the THC readers of DOM-009 and DOM-010 sent no User-Agent. The constant now lives in
scripts/lib/user-agent.mjs, and every reader sends it, with tests that hold it. - Set the probe's compatibility date to 2026-10-13, the newest date the workerd that wrangler 4.150.0 pins runs, so the probe deploys with the date its tests run with (DOM-061 and DOM-030 Corrections).
- Built the third wave, five entries:
- DOM-016: the source registry and the adapter contract (
packages/adapter,config/source-bits.json,config/sources.json,scripts/sources/build.mjs, now a gate step). - DOM-017: the pack format DPK1, its writer, reader and merge (
packages/pack,docs/format.md). - DOM-018: the verifier (
scripts/verify-pack.mjs). - DOM-019: GHCR's layout, the anonymous reader, the push tool and
ref-refresh.yml(packages/ghcr,scripts/ghcr). - DOM-021: the exact ledger and the provisional filter (
packages/ledger).
- DOM-016: the source registry and the adapter contract (
- Ran the three lenses on wave 3 (door sweep 12, claim audit 16, guard mutation 15 findings), fixed them in six groups of disjoint files, and had a separate verification plant about 120 mutants against the fixes. Its 11 problems are fixed or recorded in the entries that inherit them (DOM-020, DOM-022, DOM-023, DOM-026, DOM-030, DOM-032, DOM-050).
- The merge of a confidence kept the weaker OpenINTEL level; it now keeps the lowest level that is not 0.
- A reader can refuse a valid block too large for a Worker before reading it (
maxRawBlockBytes), and can hold the parts table to the store's sizes (partSizes). - Settled in
docs/architecture.mdsection 3.3: a feed pack holds one record a domain, withfirst_seena field, andnew-nameis DPK1 dataset 5.
- Closed DOM-016, DOM-017, DOM-018, DOM-019 and DOM-021 on
ci.ymlrun 40830988277 (1,172 of 1,172 tests on ubuntu-24.04, none skipped). DOM-019 also onref-refresh.ymlrun 40831098846: the packagerefnow holds the PSL, the CT log list andsources.json, and reads with no credential. - Built the fourth wave on 2026-10-29, two entries, now partial:
- DOM-020: the root.
packages/root,scripts/root/and.github/workflows/root-promote.yml; rule 13 of the workflow check under ruling 18; the GHCR form ofscripts/verify-pack.mjs; andmeasure-root-writer.yml, the caller that measures ruling 18 and goes at the entry's close. - DOM-022: the feed.
packages/feed; the time copy that replaced the plannedtidxlayer (DPK1 datasets 6 and 7,docs/format.mdsection 14); the reason bits 4 and 5 offeed_flags; the checktimeof the verifier; andscripts/bench/feed-window.mjs, with its 21 runs indocs/research/measure/DOM-022/.
- DOM-020: the root.
- Ran the three lenses (door sweep, claim audit, guard mutation) on the build and again on the fixes, fixed or answered every finding in four rounds, and had a final verification plant 90 mutants: 87 killed by the named test, 3 equivalent.
npm run gateexited 0 at 2026-10-29T14:51:43Z with 1,359 tests: 1,356 pass and 3 platform skips of this Windows machine. - Decided under ruling 20, each in its entry: the time copy in place of
tidx, since a page bytidxread 122 of 123 blocks and one by the time copy reads 2; thewithdrawnlist of the root, kept 31 days, so a re-run cannot put back a pack a rollback took out; no overlapping packs infeedandnew-name; compactroot.json;issues: writeout of the promotion until DOM-034; and a rebuild suffix on tier tags, which DOM-023 builds. - Fixed the two problems of the final verification: a writer's
validateRootnow refuses a pack offeedornew-nameof tierdtoythat holds records and no time copy, anddocs/architecture.mdsection 3.3 sizes the feed at about 2 to 7 MB a day [E] for the key copy. Section 5.8 step 1 now gives the verify to the job that writes a pack. - Pushed wave 4 as 34c573f and closed DOM-020 and DOM-022 on
ci.ymlrun 40904791877 (1,360 of 1,360 tests on ubuntu-24.04, none skipped).- DOM-020 also on
root-promote.ymlrun 40905355025:root:latestholdsroot_seq1 with no pack, and reads with no credential. - Ruling 18 is measured: two calls of
root-promote.ymlqueue in its grouproot-writer(runs 40905625954 and 40905643334, the second promote job 2 s after the first ended). The caller that measured it is removed.
- DOM-020 also on
- Asked the operator three design questions from wave 4's findings and recorded the answers as rulings 23 to 25: a quarantined day is served but never as new (DOM-029); a day no source covers is a hole named in
gaps, not an empty pack (DOM-029); a rebuilt tier pack takes the suffix-rNon its tag (DOM-023). - Moved biome to 2.6.4 (Renovate #1); its new rule
useMathMinMaxflags four string reductions, each now carrying abiome-ignorewith its reason. Moved Node to 26.13.0 and@types/nodeto 26.6.6 (#2); the local gate ran on Node 26.7.0, andci.ymlruns the new version. Closed #3 (@cloudflare/workers-types5.20261029.1) under ruling 20 with its reason: the types stay at 5.20261013.1, the compatibility date the pinned workerd runs, and DOM-030 moves wrangler, the date and the types together. - Closed DOM-011 on 2026-10-30 from the chain's 9 runs:
PASS, 48 of 48 slots, Geomys never throttled with the contact User-Agent, and a reliable set of 12 shards (Sycamore, Willow, Tuscolo and Gouda, 2026h2 to 2027h2) growing by 67.2 million entries a day. THC's day holds 91% to 94% of the four logs' names and Kafka about half, so the tiles are a source of their own. DOM-037 carries the reliable set; DOM-012 carries the chain's short tail runs as a Found. - Built the fifth wave on 2026-10-29 and 2026-10-30, the compaction (DOM-023), now partial:
packages/compact/and the CLIs ofscripts/compact/: the plan of a tier unit, the merge by key ranges in a matrix, the assembly, the hour pack offeed, and the day job that builds thedomainsandfeedday packs and the ledger filter.- The four compaction workflows,
compact-daily.ymltocompact-yearly.yml, andmeasure-compact.yml. - The suffix
-rNof ruling 25 inpackages/ghcrandpackages/root, the carry of the suspect verdicts inpackages/feed,docs/format.mdsections 15 and 16, and the half of rule 3 of the workflow check that keeps a job withpackages: writeonmain.
- Ran the three lenses on wave 5 and fixed their findings in two rounds. A verification then planted 86 mutants: 79 killed, 2 equivalent, and 5 gaps. A third round answered the gaps with tests or by deleting the clause, and no mutant was planted after it. Decided D1, D2 and D3 under ruling 20, each a Decision of DOM-023: a unit that starts before
corpus_sinceis never built,new-namehas no hour pack, and a rebuild finds the build that already holds its bytes.npm run gateexited 0 at 2026-10-30T05:30:42Z with 1,573 tests: 1,570 pass and 3 platform skips of this Windows machine. No compaction has run on GitHub. - Recorded what the compaction leaves to other entries, a Found or a Decision in each: DOM-014, DOM-024, DOM-029, DOM-034, DOM-036, DOM-037, DOM-038, DOM-041, DOM-042 and DOM-043.
- Measured one compaction range on a runner with
measure-compact.yml(run 41032308505): 0.58 GB of input, 92.4 million records, in 83 s ofcountand 382 s ofwrite, under 300 MiB, 0.52 GB of disk (docs/research/measure/DOM-023/result.json). - Closed Renovate #6 and #7 with a comment each on 2026-10-30: each moved wrangler, the compatibility date or the Workers types alone, and DOM-030's Found of 2026-10-29T16:10Z moves the three together, as #3 and #4 were closed.
- Built the sixth wave on 2026-10-30, the ingest skeleton (DOM-024), closed on 2026-11-01 (below), ahead of DOM-003 because only its job
chainreadsconfig/clock.json:packages/state/:state.jsonwith the cursors, the volume history and the packs owed to the root; the cursor proposals;advanceandsettle; and the guard that moves a tag only from the digest it read.scripts/ingest/(plan, run, the disk writer, the pack push and the chain) andscripts/state/(advance, the hour packs, the moves ofstate:latestandledger-delta), withconfig/lanes.jsonand.github/workflows/ingest-live.yml.promote.mjs --partial: a promotion ofingest-live.ymladds the owed packs that the live-set rule allows and leaves the rest owed, so one pack across a hole no longer blocks every promotion for 7 days.- Decided D1 to D24 of DOM-024 under ruling 20, each a Decision of the entry, and the bound on owed packs, which DOM-036 measures.
- Ran the three lenses on wave 6 (87 findings over two halves) and fixed them in four rounds, each verified on sonnet. The last verification left one test gap, which the lead closed: every named mutant now fails a test.
- Closed the clock measurements on 2026-10-30. DOM-001: the self-dispatch chain passes the rule (577 of 576 runs, p90 gap 5.02 min, max 5.9 min) and the
*/5schedule fails it (10 of 576 runs, p90 and max gap 411.82 min); the schedule and the keepalive are disabled. DOM-002: the Worker's minute cron passes (2,875 of 2,880 ticks, p90 gap 1.01 min, max 2.73 min), and the probe runs withcrons = []. - Decided the clock on 2026-10-31 (DOM-003):
scripts/measure/clock-verdict.mjsderivesactions-chainfrom the three 48-hour results,config/clock.jsonrecords it with an interval of 10 minutes, which ruling 27 moved to 30 on 2026-11-01, anddocs/clock.mdgives the numbers. DOM-025 closed on ruling 8 with no code. - Closed the probe's Worker measurements on 2026-10-30: DOM-005 and DOM-007 from colo KTM; DOM-008's colo was not read. DOM-008: one block of 4,096 names costs at most 2 ms of CPU at p99 and 1,000 rows at most 5 ms, so
deflate-rawat 4,096 names a block stays. DOM-007: cold and warm Range reads at 20, 50 and 100 requests a second all answered 206 with no 429, so R2 stays a cache; the runner's place moves to DOM-054. DOM-005: a call holds 16 MiB ofmax_bytesfrom a Workerconnect(), stopped by the route's 30 s cap, and the probe no longer serves/kafka. - Built DOM-026 on 2026-10-31, closed on 2026-11-01 (below): the first adapter,
adapters/oi-nrd/, with its three sources in the kafka lane; the TCP door, the TCP recordings and the sandbox ofpackages/adapter; the shared Kafka client; the layerfacts.jsonwith its readers in the hour and day builds; and the cap of 500 owed refs a promotion ofingest-live.ymlcarries. A design, two adversarial challenges and the lead's settlement decided D1 to D20 under ruling 20, each a Decision of the entry. A dry run against the live broker wrote and verified 36 segments and 36 raw objects in 7m04s, with no push. - Recorded the chain reading in DOM-024 (the chain started at 2026-10-31T02:31:44Z and holds on the 10-minute grid; a backstop schedule run at 08:49:09Z fell between dispatched runs, and the run after the schedule run of 14:51:17Z came 19.15 minutes later) and DOM-026's Founds on DOM-023, DOM-029, DOM-034, DOM-036, DOM-041, DOM-050, DOM-055 and DOM-056.
- Ran gate part (c) on DOM-026 on 2026-10-31: the door sweep, the guard mutation and the claim audit found 47 findings over the whole change. The fix pass changed each or answered it with a reason:
oi-nrd-confirmed's family isct, a record stamped before 2026 joins its window instead of stalling its topic, the sandbox reads only what it is given and frames its answer, a replay cut short fails as unrecorded, the zone shares are the whole span's (33.5% and 25.2%), and the instruments are underdocs/research/measure/DOM-026/. The first scheduled run ofcompact-daily.yml(07:27:09Z) is recorded in DOM-023. - Gave the chain a second duty on 2026-11-01 (DOM-023, still partial): GitHub started the crons of
compact-daily.ymlandref-refresh.ymlhours late, so the jobchainofingest-live.ymlgains the stepdue, which dispatches the compactions andref-refresh.yml20 minutes or more after their cron's instant when no run exists since it. Three lenses (door sweep, guard mutation, claim audit) found 28 findings, each changed or answered in DOM-023's Corrections. - Recorded the operator's rulings 26 and 27 of 2026-11-01 (
TODO/RULES.mdsection 5). Ruling 26: the route documents and the consumer contract (DOM-059, DOM-060) stay last; by the agent's reading under ruling 20, each route is deployed and driven as its entry closes and nothing documents a route to consumers before DOM-059. Ruling 27: the chain runs every 30 minutes, and a live tier faster than it comes later, from the operator. Built ruling 27 (DOM-024's Decision and Built line of 2026-11-01T05:24Z):interval_min30 inconfig/clock.json, the range 1 to 30 and the default 30 inscripts/ingest/chain.mjs,INTERVAL_MIN30 inscripts/measure/clock-verdict.mjs, the chain job's timeout of 36 minutes and the backstop cron7,37 * * * *iningest-live.yml. The adapters' windows stay 10 minutes (DOM-026's Decision of 02:52Z). DOM-003, DOM-023, DOM-026, DOM-034, DOM-036 and DOM-037 record what the ruling moved, and DOM-026's Found of 05:24Z reads the drain of its backlog on the chain at 10 minutes:behind_sof each source was 31 s at 04:00:45Z. - Ran gate part (c) on ruling 27's change on 2026-11-01: the door sweep, the guard mutation and the claim audit found 23 findings, and the fix pass changed the change for each (DOM-024's three Corrections of 07:13Z). Among them: the backstop has one slot an interval and GitHub started 7 of its 126 slots in 31.6 hours, so a broken chain waits hours; the chain is held to the 60-minute bound, which DOM-034 measures with both events merged, not derived from the interval; ruling 26 states the operator's words apart from the agent's reading, and DOM-030's Found records the
seemember's 404 before DOM-059; DOM-036's Found givesoi-cscaps of its own; DOM-025's Found says a live tier on Cloudflare reopens it. The record guard gains check 16, a ruling cited by its number resolves, andscripts/todo/rulings.test.mjsholds ruling 26's order. - Closed DOM-026 on 2026-11-01 from its live readings, each a READ line of the entry. The chain's first run on 986bbda, 41257033038, pushed 36 verified segments and 36 raw lane objects with no hand dispatch. The backlog drained in 21 runs, to run 41270746595, with 723 segments all
verdict ok. The day build of settled S10, run 41275690155, gavenames:domains-d-20261028withfacts.jsonandfeed:feed-d-20261028, both verified with no credential, and each of the day's 113,603 domains with a certificate over 7 days old is suspect in the feed.ci.ymlrun 41256389281 ran the sandbox tests on ubuntu-24.04 with Node 26.13.0. A Correction: the domains day pack isnames:domains-d-<day>, since no packagedomainsexists. The rows ofobs,state,namesandfeedindocs/resources.mdname the runs that created them. The cron's late run 41287131429 built the day packs of 2026-10-29 to 2026-10-31. - Closed DOM-024 on 2026-11-01 from its live readings. The successor of the first run with an adapter waited in the group, derived from the times, and
gh run listread a successorpendingat 10:34:08Z.state:latestreads with no credential with its artifact type. For ruling 27, run 41285713607, the first created on 69920f0, slept 582 s to 08:00:00Z, and the runs after it started 30 minutes apart by their logs. GitHub's API gave the times of 08:00 to 09:00Z an hour late, which DOM-034's 48-hour reading must step around (the Founds of both entries). Its Found of 07:56Z, an owed segment that a compaction replaced and that stays owed until it expires, is now DOM-063, new, and DOM-029's backfill waits on it. - Ran gate part (c) on the closes of DOM-026 and DOM-024: the claim audit, the completeness lens and the ledger lens found 10, 10 and at least 4 findings (the third report reached the fix pass cut short). The fix pass changed the record for each: the dry run's
stats, the drain's gap and file, the late cron run that built three day packs, the Closed lines stamped after their gate and split one clause a bullet, and the owner of DOM-024's fix. Check 14 of the record guard now refuses a Closed line with no instant. - Built DOM-063 on 2026-11-01, closed on 2026-11-02 (the next bullet): an owed segment that a compaction replaced settles as
held.scripts/state/advance.mjsreads the chain ofpreviousback from the live root, only for an owed segment that the live root does not name and that a live pack of a higher tier of its source spans, at most 96 roots and 120 s a run, and settles it at the first older root that named it. Decided under ruling 20 (the entry's Decision of 15:45Z): (b) with bounds, over (a), the listreplacedin the root. (a) could not settle the 11 live segments, would about doubleroot.json, and would fail every run queued on an earlier commit, since each job reads the live root as a writer and refuses a field it does not know (docs/architecture.mdsection 4.6; DOM-029's Found of 15:45Z for ruling 23's field). No field of the root or the state changes. A dry run against the live roots read 46 roots and settled the 11 owed segments ofoi-nrd-fqdnfrom root_seq 14. Gate part (c) ran the door sweep, the guard mutation and the claim audit: 4, 8 and 11 findings. The fix pass bounds the walk's pauses for a 429 by its 120 s, walks for no segment past 7 days, adds 7 tests and holds 18 re-planted mutants, and records the limit of a segment owed a second time. - Closed DOM-063 on 2026-11-02 from its live reading. Run 41367496155, the first of
ingest-live.ymlon 137a220, read 60 roots back from root_seq 73 to 14. It settled the 11 owed segments ofoi-nrd-fqdnof 2026-10-28 asheld. Its log holds nowaitingline, where the runs of the old code printed 11.state:latestread with no credential owes none of them. - Ran gate part (c) on that close: the claim audit, the record rules and the ledger lens found 5, 13 and 7 findings, all in the record. The fix pass split the Closed line by clause and stamped it after its gate. It added the reads of the old code's runs and of the digests the run printed, and saved the burst's instrument under
docs/research/measure/DOM-034/. - DOM-034's Found of 2026-11-02T01:35Z measures the burst of the organisation's runners of 2026-11-01. No ingest leg started from 13:30:20Z to 18:23:27Z, 293 minutes. The chain came back to its grid of 30 minutes by 19:00Z, and each dispatched run since is the chain's own.
- Built DOM-030 on 2026-11-02, now partial: the Worker
domains-pkgforge-devinapps/api/, withdocs/worker.md,worker.ymland the ledger rows of the Worker and its custom domain. It answers/healthz,/v1/index/latest, a plain text/that names no route and a stub/llms-full.txtwith the marker of each reason an error'sseenames (the Found of 2026-11-01T07:08Z, decided as the stub). It reads GHCR throughghcrReaderofpackages/ghcr, keeps the Cache API entriesman,blobandbody, keeps the root in the isolate and runsvalidateRootonly when a route reads the datasets, and opens packs withpartSizes, a raw block bound of 1 MiB (the largest live block is 164,536 B), at most 8,192 records a block and the index read whole. Decided D1 to D16 under ruling 20, each a Decision of the entry; D16 keeps wrangler 4.150.0, its date and its types for the first deploy and moves the three after it. Gate part (c) ran before the commit: the door sweep (6 findings) and the guard mutation (16) changed the code with tests: a stale answer names no tier, the root counts in nox-domains-tiers-read, the reads of a root have 25 s in all, a pack block is kept only once its CRC-32 held and a bad entry is read again from GHCR, and the pack bounds. A second fix pass weighed the claim audit (16 and 15 findings, 23 distinct) and the guard mutation's B1, B2 and D1: the kept root never moves back, the contact User-Agent has one home inpackages/core, a fault while a route's context is made answers 500, the deploy lists the zone's DNS records of the name first, and the record anddocs/worker.mdsay what the code does. The Worker ran in local workerd against live GHCR and answered every path; the deploy with the operator's login and the Prove'scurllines wait (its Waiting line).
Three entries are partial. Each one's Waiting line names the instant its result is due and what closes it:
| entry | waits for |
|---|---|
| DOM-030 | deployed 2026-11-02T07:57:49Z and its Prove passed; D16's move of wrangler, the date and the types, a second deploy and the Prove again |
| DOM-012 | 7 days of the measure-feeds.yml chain |
| DOM-023 | its live Prove, once DOM-029's backfill has put THC's days in the root (DOM-024's guard that moves ledger-delta is built); the readings of the chain's step due are made, on the chain at 10 minutes (the Correction of 2026-11-01T05:42Z) |
DOM-046 is open and waits on DOM-047 and DOM-058 (ruling 10).
- Close the partial entries as each Waiting line comes due. Each Waiting line names the run or the reading that closes it.
- DOM-012 closes after its 7 days.
- Compaction: DOM-023 is partial, built and gated. The chain's step
dueand DOM-026's dispatched day built its first day packs (runs 41266798719 and 41275690155), and its live Prove waits on DOM-029's THC backfill (the feed's other adapters, below). Its Waiting line names what closes it. The cron's late run 41287131429 built the days 2026-10-29 to 2026-10-31, so the livefeedhas no hole (DOM-026's Correction of 2026-11-01T10:40Z). - The feed's other adapters: DOM-029 first, since it can start now and DOM-023's live Prove waits on its backfill. Then DOM-027 and DOM-028, once DOM-012 closes.
- The Worker and the first routes: DOM-030 (partial: deployed, its Prove passed; D16's move and a second deploy close it), DOM-031, DOM-032, DOM-033. Then the watchdogs and the coverage table: DOM-034, DOM-035. Then run the operator checkpoint (
.com.np,.comandco.ukwindows from 1 h to 7 d throughhttps://domains.pkgforge.dev/v1/new), record it in DOM-032 and continue (ruling 16). - Names: DOM-036, DOM-037, DOM-038, DOM-039, DOM-040, DOM-041.
- THC's monthly database and the reverse routes: DOM-042, DOM-043, DOM-044, DOM-045.
- Authority sources and validation: DOM-047, DOM-048, DOM-049, DOM-050, DOM-051, DOM-052.
- Hardening: DOM-053, DOM-054, DOM-055, DOM-056, DOM-057, DOM-058. Then DOM-046, the CNAME source, from what DOM-047 and DOM-058 found (ruling 10).
- The root documents and the consumer contract: DOM-059, DOM-060. They stay last (ruling 26).
node scripts/todo/next.mjs derives the same waves from the Depends on lines.
Known limits, each from a measurement of 2026-10-27:
- The design values for sizes, run times and caps in
docs/architecture.mdare estimates marked [E] until DOM-001 to DOM-012 and DOM-023, DOM-043 and DOM-054 replace them. - THC's daily dumps miss 2026-10-04 and 2026-10-09, so the corpus has two gaps that
metareports. - Name-level newness is censored for about 200 days (DOM-041). Domain-level newness from feeds with their own history is not.
Operator actions, each only the operator can do:
None. The question on Renovate's pull requests was settled by ruling 20 on 2026-10-29: the agent decides such matters itself.
DOM-062's zone rule is settled: the operator applied the exclusion of domains.pkgforge.dev from the rate-limit rule 200req/Second at 2026-10-28T15:53:56Z, and the agent read version 22 back with the cf CLI. DOM-062 closes with its load test once DOM-030 is live.
Former Operator actions 1 (a wrangler login: present, on the operator's account (its name is not recorded: it carries the workers.dev subdomain), R2 enabled, MEASURED 2026-10-28T10:19:05Z) and 3 (the default workflow permission: read since 2026-10-28T10:18:52Z) are settled. The deletion of the probe Worker and its bucket is the agent's under ruling 14 (DOM-056).
Design questions: none. DOM-029's question, whether a sighting by a quarantined source stops a later sighting of the domain being new, was decided on 2026-10-30 under ruling 20: yes, as basePacks and rebuildLedger of packages/compact/src/daily.ts do today (DOM-029's Decision of 2026-10-30T09:12Z).
The two design questions of 2026-10-28 and 2026-10-29 were answered on 2026-10-29 (TODO/RULES.md §5, rulings 18 and 19): the group root-writer lives in root-promote.yml, and an RDAP creation date before 2026 sets suspect and is not stored as evidence. The questions of wave 4 were decided on 2026-10-29 under ruling 20, each in its entry: the time copy in place of tidx (DOM-022), no overlapping packs in feed and new-name and the withdrawn list (DOM-020), and the conflict of a rebuilt tier pack with its write-once tag, decided as a rebuild suffix on tier tags that DOM-023 builds (DOM-023's Decision of 2026-10-29T15:18Z, docs/architecture.md section 4.7 rule 2). The other questions of wave 5 were decided on 2026-10-30 under ruling 20: D1, D2 and D3 of DOM-023, and the domains segments of the live CT sources (DOM-036, DOM-037).
Rulings asked for: none. The four open points of 2026-10-27 were answered on 2026-10-28 (TODO/RULES.md §5, rulings 14 to 17), and the questions of 2026-10-29 the same day (rulings 18 to 22, then 23 to 25 on wave 4's findings). The two questions of 2026-11-01, the place of the route documents and the interval of the chain, were answered the same day (rulings 26 and 27).
The durable list is TODO/RULES.md §5. This file keeps the pointer, not the list.