@@ -90,13 +90,6 @@ For an anchor message row `m` at ordinal `o` (for `tool_input` / `tool_result`
9090locations the anchor is the tool call's message row, whose ordinal the match
9191already carries):
9292
93- Row cardinality must be preserved when locating the anchor row. The
94- ` tool_result_events ` branches join only ` sessions ` today (on all three
95- backends); reaching the owning message row must use a ` LEFT JOIN ` or a post-scan
96- secondary lookup — never an inner join, which would drop existing matches whose
97- anchor message is missing. A match with no locatable anchor row falls back to
98- ` [o, o] ` with ` is_sidechain ` false (session lineage still applies).
99-
100931 . ` m ` is an embeddable user row → ` [o, o] ` (user messages are their own units).
101941 . ` m ` is an embeddable assistant row → the maximal stretch of embeddable
10295 assistant rows containing ` o ` , bounded exclusively by: the nearest
@@ -109,6 +102,13 @@ anchor message is missing. A match with no locatable anchor row falls back to
109102 The row belongs to no conversation unit; the citation is the message
110103 itself.
111104
105+ Row cardinality must be preserved when locating the anchor row. The
106+ ` tool_result_events ` branches join only ` sessions ` today (on all three
107+ backends); reaching the owning message row must use a ` LEFT JOIN ` or a post-scan
108+ secondary lookup — never an inner join, which would drop existing matches whose
109+ anchor message is missing. A match with no locatable anchor row falls back to
110+ ` [o, o] ` with ` is_sidechain ` false (session lineage still applies).
111+
112112Automation gating is deliberately ignored: derivation is structural, so matches
113113inside automated sessions still get real ranges. The invariant is: ** derivation
114114at any member ordinal of any unit produced by
0 commit comments