Uh oh!
There was an error while loading. Please reload this page.
fix(pm): stop the slot-ageing comment claiming a per-reset empty ledger (#12828) - #12916
Conversation
…er (#12828) The paragraph explaining why `SLOT_MAX_AGE_S` cannot be sized against a p95 reasoned from a mechanism that was measured not holding: "it lives in this container's /tmp and starts empty on every reset". Measured twice, against two different ledger files, each reading carrying both controls in one command: 2026-08-28T01:00Z uptime 608s 74 records, oldest 8h11m BEFORE derived boot 2026-08-28T08:26Z uptime 619s 14 records, oldest 2h03m BEFORE derived boot In both, the ledger file's own birth time predated the reported boot too; a file touched at that moment read as after the derived boot (so the comparison can return either answer), and PID 1 started 0.32s / 0.27s after that boot (so the uptime clock and the process tree agree with each other). It is the filesystem that did not restart with them, not the clock that is wrong. The comment now claims only what holds: the population starts where the ledger FILE starts, for reasons nobody has characterised. It says in as many words that the opposite premise is NOT claimed either — nothing here measured that /tmp survives a reset; two readings disqualify a mechanism, they do not establish its negation. The arithmetic conclusion is untouched and explicitly noted as needing neither answer: it rests on the population being bounded and thin, never on why it begins where it does. Comment-only. No behaviour, no output, no contract. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CPrUz21stTFhJRUirdc4yw
os-elon
commented
Aug 28, 2026
|
os-elon
commented
Aug 28, 2026
⛔ Correction to my hold note above, point 3 only: I wrote that the My Points 1 and 2 are unaffected and are what the hold rests on: this PR's diff is one comment block in Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#12828
Comment-only change to
scripts/pm/os-verify-lock.sh. No behaviour, no output, no contract, no printed string.What was wrong
The paragraph that explains why
SLOT_MAX_AGE_Scannot be sized against a p95 reasoned from a mechanism, and the mechanism does not hold:Re-measured, on a second box, before touching anything
The card measured one container. This branch measured a second, with the card's own instrument discipline — both controls in one command, because a zero is only a reading if the instrument can also return non-zero.
/proc/uptimestat %W)Both ledger files, and every record in them, predate the boot the uptime clock reports. The positive control says the comparison is live — it can return the other answer. The negative control says
/proc/uptimeand the process tree agree with each other, which is what forces the reading from "the clock is wrong" to "the filesystem did not restart with them".The two readings are against two different ledger files (different birth times, different record counts), so this is a second independent reading, not a re-read of the first.
What the comment says now
Only what holds: the ledger's population starts where the ledger file starts and no earlier, for reasons nobody has characterised. Plus, in as many words, the boundary the card was careful about:
/tmpsurvives a reset. Two readings disqualify a mechanism; they do not establish its negation. Characterising why these files outlive a reported boot is a real measurement across several restarts and several hosts — not a comment edit, and not attempted here.HARD_CAP_S * 6refusal are carried over verbatim.OS_VERIFY_LOCK_LEDGERredirects the ledger, and a path is a LOCATION while a population is an INTERVAL. This is the same reasoning--report's scope block already landed under [finding] Theos-verify-lockledger lives in the container's /tmp, so--reportcan never answer the question it was built for — "where does hold time go" is scoped to one shift, and says so nowhere #12783 / PR fix(pm): makeos-verify-lock --reportstate the population it is computed over #12827; the two now state the same floor the same way.starts empty on every reset— the phrasing the finding names — lands on its retraction rather than on nothing. So a grep for that literal still returns 1 hit, and that hit is now a quotation being refuted, not a claim.Scope
scripts/pm/os-verify-lock.sh, the source comment only.human_sand everyprintfinmode_reportuntouched — [finding]human_srenders every duration in minutes, so the verify lock prints an 8-hour span as504m05s— on a number a reader has to scale against a date #12829 targets exactly that. Confirmed PR fix(pm): head--report's hold bucket by the filter it actually applies #12870 ([finding]os-verify-lock --report's hold bucket says "over runs that acquired" but its filter drops every sub-second hold — measured, 3 of 69 rows #12823,4a7e1b07) is an ancestor of this branch point, somode_reportwas already synced before the edit.os-verify-lockledger lives in the container's /tmp, so--reportcan never answer the question it was built for — "where does hold time go" is scoped to one shift, and says so nowhere #12783 triage fence is not lifted here), and/tmp's lifetime across restarts is not re-characterised.Verification
Gate union re-run after the final commit, at
6ea12f25. Families re-derived from the actual diff withnode scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(10 families, identical to the dispatch-time list — nothing added, nothing dropped). Each verdict below is the line the gate itself printed.bash -n scripts/pm/os-verify-lock.shbash scripts/pm/os-verify-lock.sh --self-test✓ os-verify-lock self-test: all cases pass.(185 case lines + summary = 186 ✓; 0 failures)check:agent-test-spelling✓ 0 violations — 391 file(s) · 4331 bare -- token(s) · 1207 launcher-rooted run(s) · 9 separator(s) JUDGEDcheck:bash32-floor✓ 22 tracked shell file(s) under scripts/**, .claude/hooks/**, .githooks/** name no bash 4+ construct(self-test: 153 cases)check:cli-command-ids✓ 288 command-id literal(s) across 104 file(s) ... all resolve(self-test: 39 cases)check:cross-package-test-inputsOK: 20 package(s) read outside themselves, all declaredcheck:entry-guard✓ 172 scripts/ file(s) — every entry guard goes through invoked-as.mjs(self-test: 54 cases)check:parse-guard✓ 171 scripts/ file(s) — every TypeScript parse goes through ts-parse.mjs(self-test: 46 cases)check:pnpm-filter-targets✓ 140/177 --filter occurrence(s) across 30 file(s) resolve against 78 workspace package(s)check:watch-hint-literal✓ 15 ROOT_DIR_WATCH_HINTS declaration(s), every one an array of quoted literals(self-test: 29 cases)scripts/check-ci-filter-parity.mjsOK: all 109 declared cross-package glob(s) (84 unique) are coveredscripts/check-cross-package-test-inputs.mjsOK: 20 package(s) read outside themselves, all declaredcheck:nul-bytescheck-nul-bytes: OK (scanned 7176 text file(s) ... no raw ASCII control bytes)Plus a direct byte scan of the edited file for raw control characters: no match.
The self-test is the file's own suite and the one CI runs (
lint.yml, "Verify-lock entry-point self-test"); no case pins this paragraph — the bash-3.2 source scan at the top of the self-test region excludes comment lines by construction, and a repo-wide grep found no gate, workflow or test that reads this comment's text.Heavy steps ran through the shared lock (
os-verify-lock.sh -- bash ..., slotissue-12828), each hold reportedVERDICT command-exit 0 · held the lock 122s.Repo-wide
pnpm lintnarrowed, and the narrowing is measured, not assumed.pnpm exec eslint --no-inline-config --format json scripts/pm/os-verify-lock.shreturnsFile ignored because no matching configuration was supplied.,errorCount: 0— so (1) the population is read from eslint's own config resolution rather than from an assumption about which files count, (2) the count from--format jsonis 1 result and 0 files actually linted, and (3) the diff touches no eslint config, no manifest and no tsconfig, so eslint's judgment of any untouched file cannot move. The diff's only file is outside eslint's population entirely.Changeset
None, and
skip-changesetapplied. Derived rather than asserted —git logreceipt over the last commits touching this file:Nine consecutive
scripts/pm/**-only changes, zero changesets.scripts/pm/**publishes nothing, so this PR declares no release of its own.Generated by Claude Code