You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit f6480bc
Browse filesBrowse the repository at this point in the historyBrowse files
fix(pm): let every delivery row state the evidence it rests on (#16798)
* fix(pm): let every delivery row state the evidence it rests on
`prDeliversCard` answers one bit, and five readers print rows from it --
H8's open side, H31's carrier comparison, `claimDelivery`, the pairing
`check-clause2-carriers` derives, and `prFullyDeliversCard`. A `true`
sourced from a closing keyword and a `true` sourced from the two words
"part of" landing in an accounting sentence printed identically, so a row
manufactured by the second was indistinguishable from a real finding.
Add `deliveryEvidence` beside the boolean, returning the source kind, and
thread it into what each of the five readers prints. `prDeliversCard` now
derives its boolean from it, so the two can never be edited apart; every
input answers exactly what it answered before.
The relation is NOT narrowed -- the position is reported, never rejected.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P58euzUXCVJNwmhuPC9DXY
* test(pm): pin the two-sided reading and the evidence each reader prints
Both sides of the specimen are the reading: one side alone cannot tell
"fixed" from "changed to never report". The relation is deliberately
unchanged -- the prose match still reports a delivery -- so what the two
sides pin is the evidence the row now prints, plus the control that
deleting the one sentence still removes the pair entirely.
Five readers, five readings: H8's open side, H8's merged side through
`prFullyDeliversCard`, H31's carrier comparison, `claimDelivery` (whose
only consumer fires on ZERO delivery, so the kinds ride on the return
shape -- its only surface), and the pairing `check-clause2-carriers`
derives, pinned in that file's own battery together with its C1 row.
Three existing pins move one spelling on: the row parenthetical now
carries the evidence beside the draft marker, so `(draft)` is pinned as
`(draft,`. Their subject is unchanged.
The `Refs` axis gets the reading the ruling asked for: the hole is open
there too, reported rather than narrowed.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P58euzUXCVJNwmhuPC9DXY
---------
Co-authored-by: Claude <noreply@anthropic.com>
@@ -2274,6 +2301,40 @@ export function selfTest() {
2274
2301
t('a PR body naming another card does NOT pair on a stale branch name',derivePairs([prRow(13910,9999,'claude/issue-13476-x')],[13476]).length===0);
2275
2302
t('a branch name is the fallback when the body says nothing',derivePairs([{number: 1,labels: [],body: 'no refs here',head: {ref: 'claude/issue-13476-x'}}],[13476]).length===1);
2276
2303
2304
+
// -- #16706: the pair carries the EVIDENCE it was derived from -------------
t('#16706: the prose sentence still derives the pair — the relation is NOT narrowed here',inlinePair.length===1);
2320
+
t('#16706: …and the pair records that the match was not at the declaration position',inlinePair[0]?.evidence==='part-of-inline');
2321
+
constkeywordPair=derivePairs([pr8354],[7760]);
2322
+
t('#16706: the real `Fixes` relation on the same body is graded as the strong channel',keywordPair[0]?.evidence==='closing-keyword');
2323
+
// CONTROL — the same body with that ONE sentence deleted derives nothing.
2324
+
t('#16706 control: deleting the sentence removes the pair entirely',derivePairs([{ ...pr8354,body: 'Fixes #7760\n\n## Serial constraints\n\n'}],[7918]).length===0);
2325
+
2326
+
// …and the C1 row PRINTS it — the row the card was filed about.
t('#16706: a keyword-sourced row reads differently from an inline-sourced one',String(c1Keyword).includes('via a closing keyword')&&!String(c1Keyword).includes('NOT at the declaration position'));
2335
+
// ⛔ A pair from a caller that predates the field claims no reading at all.
2336
+
t('#16706: a pair with no evidence field prints exactly as it always did',String(c1CarrierSplit({pr: 13910,card: 13476,draft: true,prLabels: [CONTRACT_REVIEW_LABEL],cardLabels: [],cardComments: []})).includes('#13910 (draft)'));
2337
+
2277
2338
// -- the three read paths ---------------------------------------------------
2278
2339
//
2279
2340
// The offline reader is exercised against the SAME predicates the live path
0 commit comments