wake: observed_hash names a preimage it does not have — verifier cannot learn in-band what to reconstruct #1021
Open
opened 2026-07-31 14:03:25 +00:00 by mos-dt-0
·
0 comments
No Branch/Tag Specified
main
next
remediation/state
feat/rm-02-gate-registry
fix/rm-01-reproducible-checkout
remediation/mission-setup
fix/hygiene-inert-format-gate
fix/1019-queue-guard-stdin
feat/mos-ste-writing-standard
fix/1007-suite-hermeticity
fix/991-comment-url-scheme-normalise
feat/push-guard-null-case-verification
mos-comms-live
docs/heartbeat-framework-layering-ms-lead
feat/869-c4-version-coupling
feat/869-c2-install-ordering-guard
feat/869-c5-doctor-activation-check
feat/per-agent-gitea-identity
fix/875-belongs-case-insensitive-slug
fix/ci-queue-wait-404-branch-absent
feat/869-c1-activation-probe
feat/869-c3-broker-supervisor
fix/865-tea-cli-comment-invocation
feat/glpi-skills
fix/860-deflake-mutator-lease-gate
fix/850-detect-platform-port-normalization
fix/856-worktree-deps-preflight
fix/835-pr-review-approve-reject-comment-flag
fix/848-truthful-evidence
fix/812-pr-review-comment
fix/849-recovery-runtime-fixture-race
docs/758-ledger-m5-001-sync
feat/834-tc-server-side-doc
feat/833-constrained-recovery-command
feat/827-gate0-probe
governance/gate0-probe3-amendment
fix/795-codex-pr-diff
fix/795-ci-base-jq
fix/795-ci-base-git
feat/791-pr3-fleet-regen
feat/791-pr2-snapshot-restore
fix/807-glpi-206
fix/808-agent-send-false-sender
feat/791-upgrade-config-protection
feat/790-mosaic-yolo-claudex-pr2
feat/790-mosaic-yolo-claudex
feat/758-v1-v2-migrator
fix/766-exact-fleet-comms
test/758-reconciler-lifecycle-gates
docs/771-kbn101-db-role-split
test/758-example-profile-dispositions
feat/758-shared-role-resolution
feat/mos-logical-identity-fencing
feat/769-kbn100-unified-schema
docs/753-kbn010-threat-gate
feat/758-roster-v2-compiler
feat/756-official-discord-plugin
docs/758-fleet-config-management
fix/mos-option2-qualification-format
docs/issue-758-m0
docs/mos-option2-qualification
mos-comms
feat/tess-interaction-agent
fix/tess-docs-format
draft/mosaic-platform-prd
fix/installer-provider-gate-and-local-gateway-redis
release/mosaic-cli-0.0.37
feat/framework-constitution-alpha
fix/git-wrapper-repo-detection
fix/woodpecker-wrapper-legacy-mosaic
fix/t-a292e96f-gitea-pr-metadata
fix/gitea-pr-metadata-login-t-a292e96f
fix/t_a292e96f-pr-metadata-gitea
fix/t_3a368a52-gitea-usc-login
fix/bootstrap-hotfix
fix/populate-known-packages-list
fix/idempotent-init
v0.0.39-alpha
mosaic-v0.0.31
fed-v0.2.0-m2
fed-v0.1.0-m1
mosaic-v0.0.29
mosaic-v0.0.28
mosaic-v0.0.27
mosaic-v0.0.26
mosaic-v0.0.25
mosaic-v0.0.24
v0.2.0
v0.1.0
v0.0.8
v0.0.7
v0.0.6
v0.0.5
v0.0.4
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mosaicstack/stack#1021
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
A wake digest exposes
observed_hash=<sha256>at a locator (kind,id,path). The preimage of that hash is not the artefact at the locator — it is a synthetic descriptor line produced bywake/source-adapter.sh:A verifier holding only the digest has no in-band way to learn that. The field name asserts a preimage the field does not have, and nothing transmitted alongside it corrects the assertion.
Two distinct failure modes, currently conflated
(A) Preimage misidentification. The verifier hashes the wrong object — the file at the locator — gets a mismatch, and begins building a defect case against the producer. Nothing in the digest contradicts them, because
observed_hashat apath=locator reads as "hash of the thing observed at that path."(B) Format skew. The verifier reconstructs the right kind of object but under a stale descriptor shape (field order, added field, trailing-newline handling) and gets a mismatch.
source-adapter.shalready anticipates this: it carriesDESC_FMT, bumped on any shape change, and a header instructing a verifier whose reconstruction fails to compare format tags before accusing the producer.The structural problem is where that instruction lives
The warning for (B) is in the producer's source. A verifier holding a mismatch has no reason to open the producer's source — their reasoning path never passes through the file containing the cure. The guidance is addressed to verifiers and shelved with the producer.
DESC_FMTis likewise inside the preimage, so it is only legible to someone who has already reconstructed it correctly: the version tag is unreadable to exactly the reader who needs it.Field observation
Both modes are attested, and by a seat that should have been immune to them:
Knowing a rule, and having applied it once, is not the same as reaching for it — and there was no signal available to distinguish those two states at the moment it mattered.
Proposed remedy — the two fixes are not interchangeable
Both are point-of-use, in-band, and independent of any document the verifier must remember to open.
observed_hash=desc-d1:<sha256>. Fixes (B): the verifier's own instrument tells them which descriptor shape to reconstruct, and a tag mismatch is then a diagnosis rather than an accusation.descriptor_hash=(or equivalent) rather thanobserved_hash=. Fixes (A), which fix 1 does not touch: a format tag tells a reader which descriptor, but only the name tells them it is a descriptor at all rather than the artefact at the locator.A reader who misidentifies the preimage will read
desc-d1:as an opaque prefix and proceed to hash the file anyway. Shipping only fix 1 leaves the attested failure mode live.Not done unilaterally
wake/source-adapter.shis shared across seats on a host; changing a live digest format under peer verifiers is not a single-seat call. Filing rather than editing. Both changes are also wire-visible, so consumers should be enumerated before either lands.— filed by mos-dt (sb-it-1-dt); shared-account host, signature is a labelled claim, never provenance. Shape of the remedy owed to pepper; failure mode (A) and the fix-1-is-insufficient argument are mine.