Skip to content

[finding] Nobody has characterised what /tmp does across a container reset here — the verify-lock ledger has now outlived a reported boot on two separate boxes, and the persistence decision has no measurement to stand on #12919

Description

@os-elon

Filed unassigned and ungraded by the #12828 dev (session session_01CPrUz21stTFhJRUirdc4yw) while correcting the source comment in scripts/pm/os-verify-lock.sh. Explicitly fenced out of #12828 by its triage — "真要做,单独立卡" — so it is recorded here rather than folded in.

What is now measured

Two independent readings, on two different boxes, against two different ledger files. Each carries both controls in one command, because a zero is only a reading if the instrument can also return non-zero.

#12828, 2026-08-28T01:00ZPR #12916, 2026-08-28T08:26Z
/proc/uptime608s, derived boot 00:50:13Z619s, derived boot 08:15:53Z
ledger records74, first 2026-08-27T16:51:12Z14, first 2026-08-28T06:12:34Z
ledger file birth (stat %W)2026-08-27T16:51:12Z2026-08-28T06:12:34Z
records at or after derived boot00
records before derived boot74, oldest by 8h11m14, oldest by 2h03m
positive control — a file touched at that momentread as AFTER derived bootread as AFTER derived boot
negative control — PID 1 vs derived bootstarted 0.32s afterstarted 0.27s after

In both, every record and the ledger file itself predate the boot the uptime clock reports. The positive control says the comparison is live. The negative control says /proc/uptime and the process tree agree with each other — so it is the filesystem that did not restart with them, not the clock that is wrong.

What is NOT measured, and is the whole of this card

Not that /tmp survives a reset. Two readings disqualify a mechanism; they do not establish its negation. What actually happens to /tmp across a restart on these hosts — always, sometimes, under which restart kind, for how long, on which fleet — is uncharacterised, and neither reading above was designed to answer it. Both are single-container, single-moment observations that happen to point the same way.

The measurement this needs is a real one, which is exactly why it was fenced out of a comment-correction card:

  • several restarts, of each kind the fleet actually performs (a stop/start, a rebuild, a host migration, an idle reap);
  • several containers, so a per-host quirk does not read as a fleet rule;
  • a marker written before the restart and looked for after it, not an inference from a clock;
  • the same two controls each time, so a null result stays a reading.

Why it is worth doing rather than leaving

The #12783 triage fenced ledger persistence out under two constraints: this file must create nothing that outlives a process and needs reaping, and the ledger must never redden a gate. Both were reasoned against a ledger believed to be reliably per-container and ephemeral. On the two boxes measured it is neither — the file already outlives every process that writes it, is already unreaped except by LEDGER_MAX_BYTES, and has now been observed predating a reported boot twice.

⛔ That does not reopen the persistence decision and this card does not ask for it to be reopened. It says the input that decision would need does not exist yet. The current situation is arguably worse than reliably-ephemeral: a population whose lower bound moves for reasons nobody has characterised is harder to reason about than one that resets predictably, and --report and the slot-ageing comment both now have to say "the floor is the file, reason unasserted" because that is genuinely all anyone knows.

Not blocked on anything, and blocking nothing

The code in scripts/pm/os-verify-lock.sh is already honest as of PR #12916 and PR #12827: both state the population floor as the first record, with the reason left unasserted, so nothing in the tree is currently claiming a mechanism it cannot support. This card is the measurement that would let a future author claim one.

Refs

Metadata

Metadata

Assignees

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions