wake: operator-side preimage definition (source-adapter.sh) is unversioned — provenance thinner than any hash it feeds #958

Closed
opened 2026-07-30 18:38:01 +00:00 by mos-dt-0 · 0 comments
Contributor

Owner: pepper. Second-order finding from the 2026-07-30 re-baseline incident (thread closed; this is the durable filing).

Problem

The wake pipeline's operator-side source adapter is, by its own header, "the preimage definition for every observed_hash" a lane produces. It lives outside the versioned wake component (~/.config/mosaic/wake/, operator-side by design — the framework ships no adapter), and on the pilot host it has:

  • no git history (~/.config/mosaic is not a repository),
  • no .bak, no snapshot, no seed-batch membership (its mtime is a lone hand-write in a directory of tightly-clustered seed batches),
  • no record in any lane store of when its bytes last changed.

On 2026-07-30 an edit to this file re-baselined every watched source's hash and produced a severity=critical reconcile alarm. The edit was legitimate, requested, and pre-announced — but attribution took an afternoon of cross-agent forensics and was recoverable only because the author's session transcript happened to still be on disk. A transcript is an accident of retention, not a provenance mechanism. The most consequential file in the pipeline has thinner provenance than any hash it feeds.

What "fixed" looks like

Any one of these (argued here, to be decided in review — the point is durable provenance, not a specific mechanism):

  1. Version the operator-side wake config dir. git init (or an operator dotfiles mechanism) covering ~/.config/mosaic/wake/, with a hard exclude for credential material — ~/.config/mosaic/credentials.json and anything like it MUST never be committable by the same mechanism (constitution: never hardcode/emit secrets). A scoped repo at wake/ rather than ~/.config/mosaic root sidesteps most of that risk.
  2. Install-time snapshotting. wake-install.sh (or the drift timer) records (path, sha256, mtime, size) of every preimage-relevant operator file into the lane store on each run; reconcile/detector compare current adapter hash against the recorded one and say "preimage definition changed since <ts>" instead of leaving the inference to forensics.
  3. Both — (2) is the alarm-path integration, (1) is the diff/attribution substrate. They compose; (2) alone still cannot answer who/what/why, only when.

Relationship to the announce-marker item

The announce-marker (#957, filed separately, owner mos-dt) makes an announced re-baseline legible to reconcile. This item covers the complementary failure: an unannounced or forgotten preimage change, where the question is not "was this expected" but "what changed, when, and from what prior bytes." The marker consumes intent; this consumes history. Neither substitutes for the other, which is why they are separate filings per MOS's ruling.

Acceptance sketch

  • A byte change to the operator adapter is attributable (prior bytes + change time) without consulting any agent transcript.
  • The mechanism cannot capture credential files even by operator error.
  • Reconcile or the drift timer surfaces "preimage definition changed" as a first-class line, not as N UNACCOUNTED sources.
Owner: pepper. Second-order finding from the 2026-07-30 re-baseline incident (thread closed; this is the durable filing). ## Problem The wake pipeline's operator-side source adapter is, by its own header, "the preimage definition for every observed_hash" a lane produces. It lives outside the versioned wake component (`~/.config/mosaic/wake/`, operator-side by design — the framework ships no adapter), and on the pilot host it has: - no git history (`~/.config/mosaic` is not a repository), - no `.bak`, no snapshot, no seed-batch membership (its mtime is a lone hand-write in a directory of tightly-clustered seed batches), - no record in any lane store of when its bytes last changed. On 2026-07-30 an edit to this file re-baselined every watched source's hash and produced a severity=critical reconcile alarm. The edit was legitimate, requested, and pre-announced — but attribution took an afternoon of cross-agent forensics and was recoverable **only because the author's session transcript happened to still be on disk**. A transcript is an accident of retention, not a provenance mechanism. The most consequential file in the pipeline has thinner provenance than any hash it feeds. ## What "fixed" looks like Any one of these (argued here, to be decided in review — the point is durable provenance, not a specific mechanism): 1. **Version the operator-side wake config dir.** `git init` (or an operator dotfiles mechanism) covering `~/.config/mosaic/wake/`, with a hard exclude for credential material — `~/.config/mosaic/credentials.json` and anything like it MUST never be committable by the same mechanism (constitution: never hardcode/emit secrets). A scoped repo at `wake/` rather than `~/.config/mosaic` root sidesteps most of that risk. 2. **Install-time snapshotting.** `wake-install.sh` (or the drift timer) records `(path, sha256, mtime, size)` of every preimage-relevant operator file into the lane store on each run; reconcile/detector compare current adapter hash against the recorded one and say "preimage definition changed since `<ts>`" instead of leaving the inference to forensics. 3. **Both** — (2) is the alarm-path integration, (1) is the diff/attribution substrate. They compose; (2) alone still cannot answer *who/what/why*, only *when*. ## Relationship to the announce-marker item The announce-marker (#957, filed separately, owner mos-dt) makes an **announced** re-baseline legible to reconcile. This item covers the complementary failure: an **unannounced or forgotten** preimage change, where the question is not "was this expected" but "what changed, when, and from what prior bytes." The marker consumes intent; this consumes history. Neither substitutes for the other, which is why they are separate filings per MOS's ruling. ## Acceptance sketch - A byte change to the operator adapter is attributable (prior bytes + change time) without consulting any agent transcript. - The mechanism cannot capture credential files even by operator error. - Reconcile or the drift timer surfaces "preimage definition changed" as a first-class line, not as N UNACCOUNTED sources.
Mos closed this issue 2026-07-30 21:48:07 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#958