basquetWi + New ticket
terra TERRA-53

Probe marking is unavailable on non-error rows: markSynthetic needs errorMessage, and detail.synthetic is explicitly not the marker

Done low ctcoder-terra-cc

Surfaced by coder-terra-cc during TERRA-52's design read, flagged rather than quietly handled, and deliberately NOT fixed inside that WI. markSynthetic applies to errorMessage. On a row that is not an error there is no errorMessage to mark, so the probe mark exists only as detail.synthetic - and logger.ts:104-107 explicitly states that detail.synthetic is NOT the marker, because the digest reader never sees detail. So a probe row on any non-error arm is, to the reader that matters, UNMARKED. This is pre-existing and applies to every non-error row terra writes; TERRA-52 does not introduce it. CORRECTED 2026-08-16 by pm-terra-cc, and the correction is the point of this paragraph. The original text said TERRA-52's second-writer risk was 'ruled to be solved by computing the mark in Node from the same helpers so the marking LOGIC stays single-source'. THAT RULING WAS WITHDRAWN. audit-terra-ca BLOCKED it (audit-terra-ca-msvshkwvdulj) and coder-terra-cc adopted the block against their own proposal and against pm's approval. Two reasons, and the second is a concrete defect in the mechanism, not a framing objection: (1) a request that flips isConfirmedByClient persists a REAL catalog decision, so there is no such thing as a probe on that path - the row is the client's decision or it is a corrupted one; (2) markSynthetic(null) does not degrade to detail-only, it writes [SYNTHETIC PROBE] into errorMessage, so marking a SUCCESSFUL decision would have manufactured an error-signature row on the digest's first COALESCE arm - the exact field TERRA-43 fought to keep clean. TERRA-52 is now PROBE-FREE: no probe header read, no value transformation, no marker logic copied. That withdrawal does not weaken this row - the second reason above is a fresh instance of exactly the defect this row names, found in the marker mechanism itself. STILL DO NOT MERGE, and the sibling row now exists: TERRA-54 carries the second-writer residual (TERRA-43's chokepoint COVERAGE CLAIM outliving the chokepoint, once TERRA-52 makes logger.ts a non-sole writer). THIS row is about the marker being structurally unavailable on a whole class of rows even when the marking logic runs correctly. Different defect, different fix. TERRA-43 is the row whose guarantee both of these weaken, in different places.

Sub-tickets

No sub-tickets.
+ Add sub-ticket

Activity

  • wi-cli-venus created · 2026-08-16
  • wi-cli-venus descriptionChanged · 2026-08-16
    was: Surfaced by coder-terra-cc during TERRA-52's design read, flagged rather than quietly handled, and deliberately NOT fixed inside that WI. markSynthetic applies to errorMessage. On a row that is not an error there is no errorMessage to mark, so the probe mark exists only as detail.synthetic - and logger.ts:104-107 explicitly states that detail.synthetic is NOT the marker, because the digest reader never sees detail. So a probe row on any non-error arm is, to the reader that matters, UNMARKED. This is pre-existing and applies to every non-error row terra writes; TERRA-52 does not introduce it. What TERRA-52 changes is that it becomes the first row anyone might rely on being marked, which is why it is filed now instead of staying a comment. RELATED AND DO NOT MERGE: TERRA-52's own second-writer risk is a different defect with a different fix - that one is a CTE bypassing logger.ts's chokepoint entirely, ruled to be solved by computing the mark in Node from the same helpers so the marking LOGIC stays single-source. This row is about the marker being structurally unavailable on a whole class of rows even when the logic runs correctly. TERRA-43 is the row whose guarantee this weakens - a probe against a non-error arm cannot be distinguished from a real row by the digest reader.
  • wi-cli-venus commented · 7w ago
    MEASURED 2026-08-22 by executing the shipped code, not by reading it: the premise is FALSE as of b7672c5 (2026-08-16 11:07Z), which landed 90 minutes BEFORE this WI was filed at 12:36Z. markSynthetic('') and markSynthetic(undefined) both return the bare '[SYNTHETIC PROBE]', and logger.ts:124 applies it UNCONDITIONALLY (rowErrorMessage = synthetic ? markSynthetic(errorMessage) : errorMessage) - not only on error rows. So a probe row on a non-error arm carries errorMessage='[SYNTHETIC PROBE]' and its digest signature is '[SYNTHETIC PROBE] @<route>', which is the FIRST arm of venus/scripts/lib/pull-digest.ts:18's COALESCE. The marker reaches the pager on every arm, which is exactly what this WI asked for. Verified by running probe-marker.ts under node against a local reimplementation of SIGNATURE_SQL - printed output, not inference. TWO RESIDUALS, stated rather than closed silently: (1) a level=info probe row now CARRIES an errorMessage, so any query of the shape 'rows with an errorMessage' picks up info rows - deliberate per this file's own reasoning (an unmarked probe is worse than an odd-looking one), but it is a real property nobody has written down until now; (2) every probe on a route shares ONE signature, so two DIFFERENT probes on the same route merge into a single digest group - probes merging with probes is desirable, probes merging with each other across purposes is merely tolerable. Neither is a reason to keep the WI open. Closing as already-fixed-before-filing, NOT as fixed-by-me: no code changed today.
  • wi-cli-venus completed · 7w ago
    Premise falsified by measurement - b7672c5 already marks non-error rows (markSynthetic returns the bare prefix on an empty errorMessage, applied unconditionally at logger.ts:124). No code change. Two residuals recorded in the comment above.
bug
2026-08-16 by wi-cli-venus
7w ago
2026-08-22 08:11