wake/digest.sh renderer nits (pilot E2E): WAKE_AGENT-prefixed ack line + digest-class locator threading #914

Closed
opened 2026-07-26 04:42:21 +00:00 by jason.woltje · 0 comments
Owner

Two digest.sh renderer nits surfaced by the mos-dt-0 dragon-lin pilot's confirmed live E2E run (both ack phases). Small, red-first-able, non-blocking to #908. Both touch digest.sh (one is contract-relevant), so tracked as one small renderer follow-up.

(a) Embedded ack copy-run line is not WAKE_AGENT-prefixed. The ACK block (digest.sh render -> ack.sh embed, ~L354-360) emits the copy-run line without baking in the render-time agent. An env-less copy-run then resolves to the wake/default/ namespace and refuses. Pilot mitigated operator-side with a trailer hint; the DURABLE fix is the renderer: at render time WAKE_AGENT/--agent is known (L198 agent), so thread it into the embedded ack line as an explicit namespace prefix (e.g. WAKE_AGENT=<agent> ... or ack.sh embed baking the namespace) so a copy-run resolves correctly regardless of env. Keep the ack line local-write-only + scrubbed; scrub the agent value too.

(b) digest-class pointer renders an EMPTY locator line (contract-relevant). In the ORIENTATION render (~L272-281) a digest-class pointer comes out with no locator, even though the store entry carries a locators field (store.sh enqueue writes .locators). No exit-4 (digest class does not hard-require a locator), but a pointer WITHOUT a locator degrades the zero-tool-call no-op ORIENTATION contract for exactly the common case digest-class serves. Diagnose the threading gap (coalesce-replace dropping locators? _locator_line not rendering the digest-class locator shape? enqueue not populating it for digest class?) and thread the store entry's locators into the digest-class ORIENTATION pointer so it carries a usable locator.

Red-first for both; preserve the two-tier trust + scrub/hard-locator (§2.1) invariants. Refs: #892 (wake EPIC), #904 (W3 digest), dragon-lin pilot E2E.

Two digest.sh renderer nits surfaced by the mos-dt-0 dragon-lin pilot's confirmed live E2E run (both ack phases). Small, red-first-able, non-blocking to #908. Both touch digest.sh (one is contract-relevant), so tracked as one small renderer follow-up. **(a) Embedded ack copy-run line is not WAKE_AGENT-prefixed.** The ACK block (digest.sh render -> ack.sh embed, ~L354-360) emits the copy-run line without baking in the render-time agent. An env-less copy-run then resolves to the `wake/default/` namespace and refuses. Pilot mitigated operator-side with a trailer hint; the DURABLE fix is the renderer: at render time WAKE_AGENT/--agent is known (L198 `agent`), so thread it into the embedded ack line as an explicit namespace prefix (e.g. `WAKE_AGENT=<agent> ...` or ack.sh embed baking the namespace) so a copy-run resolves correctly regardless of env. Keep the ack line local-write-only + scrubbed; scrub the agent value too. **(b) digest-class pointer renders an EMPTY locator line (contract-relevant).** In the ORIENTATION render (~L272-281) a digest-class pointer comes out with no locator, even though the store entry carries a `locators` field (store.sh enqueue writes `.locators`). No exit-4 (digest class does not hard-require a locator), but a pointer WITHOUT a locator degrades the zero-tool-call no-op ORIENTATION contract for exactly the common case digest-class serves. Diagnose the threading gap (coalesce-replace dropping locators? `_locator_line` not rendering the digest-class locator shape? enqueue not populating it for digest class?) and thread the store entry's locators into the digest-class ORIENTATION pointer so it carries a usable locator. Red-first for both; preserve the two-tier trust + scrub/hard-locator (§2.1) invariants. Refs: #892 (wake EPIC), #904 (W3 digest), dragon-lin pilot E2E.
Mos closed this issue 2026-07-26 07:13:08 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaicstack/stack#914