The review re-arm cap has no new-information valve, but consult does #197
Labels
No labels
already-shipped
bug
documentation
duplicate
enhancement
external-review
good first issue
help wanted
in progress
invalid
needs-decision
proposal
question
security
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: crenshawdev/cadence-archived#197
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The asymmetry
Cadence's two second-opinion subsystems both have a bound, and only one of them
has a way past it.
Consult (
cadence-core/references/consult.md, hard rule 4 andoffer_consultstep 2) is bounded at one per dead-end, with an explicit releasevalve: "unless genuinely new information appears." The bound is about not
paying twice for the same question, so new evidence legitimately reopens it.
A blocking review's re-arm (
cadence-core/references/triage-gate.md) iscapped at ONE narrowed round and has no valve at all. Past it the rule is
"never fire that trigger again in this loop", and the only exit is a
stop-and-ask offering proceed-anyway or fix-by-hand. The round count persists as
a
rearmoutcome intrace.jsonlkeyed to the run's correlation id, so a/clearcannot reset it either. A genuinely new fact - the fix turned out totouch a file nobody knew was in scope, the blocker was misdiagnosed and the real
defect is somewhere else - buys nothing.
Why the hard cap is right, and why it is still incomplete
The cap exists because a fix made to clear a blocking FAIL is itself reviewable
work, so unbounded re-arming is a loop with no terminal state. That reasoning is
sound and nothing here proposes weakening it.
But the cap currently answers "how many rounds" when the question it should
answer is "has anything changed". Those come apart in one specific case: the
second round FAILs on a DIFFERENT blocker than the first, which means the loop
is not thrashing, it is making progress on a moving target. Today that reads
identically to a loop stuck on the same finding, and both get the same stop.
The proposal
Give the review cap the same shape consult already has, and no more than that:
model's own judgment that it is close. The candidate signal is the one the
trace already carries: the surviving blocker set changed identity between
rounds. Same findings surviving means thrashing, stop. A different blocker
means the previous one closed and a new one surfaced, which is new
information in exactly consult's sense.
one evidenced continuation, not to restore the unbounded loop v2.6.0's FRI-02
closed.
Why it might be wrong
Worth arguing before writing. Three objections that would kill it:
things, which is the strongest case for stopping, not continuing.
the valve may only be automating a decision the design deliberately keeps
human.
If any of those hold, the right outcome is to close this and instead document
the asymmetry as deliberate, so the next reader does not re-derive it as a gap.
Closing: refuted by the run record. The proposal adds a valve to permit MORE re-arm rounds on new information. The trace holds 14
rearmevents and 2overrideevents, and both overrides are the opposite complaint - the cap was never reached against the user's wishes; the user DECLINED a round he was already entitled to, naming review turnaround as the phase bottleneck. One is verbatim: "commit with over-ride" (phase 3, corr 3-e1e6c0a, sha6d0aab4). The asymmetry with consult is real and the case is well argued, but the failure mode it protects against has never occurred here, while the opposite one has, twice. Reopen if a re-arm ever stops a loop that was making progress on a different blocker.