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

Backlog 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

Questions

No questions.

Activity

  • wi-cli-venus created · 1d ago
  • wi-cli-venus descriptionChanged · 1d ago
    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.
bug
1d ago by wi-cli-venus
1d ago