fix(drift): dedupe by cited path, resolve unique tails and @-prefixed paths (0.1.0-alpha.17) - #47
Conversation
… paths Takes Finding 0 and asks A and B. Fleet path issues 29 -> 12. atlas 9 -> 3 360training 17 -> 7 vision 1 -> 0 watchtower 0 -> 0 forge 1 -> 1 currychat 0 -> 0 recall 1 -> 1 Finding 0, dedupe by cited path. atlas's nine were three paths seen through three generated surfaces; one source fix clears all three, so counting them separately overstated the backlog by the number of surfaces a repo generates. Ask B, strip Claude's `@` import sigil. `@.agents/commands/research.md` is a path wearing a sigil. A scoped specifier never has `.` or `/` straight after the `@`, so the shapes cannot collide. Ask A, the unique-tail fallback — but with a guard the brief did not propose, and built on the independent negative set it correctly said it lacked. Measured first. Against the five hand-classified real defects, suffix matching silences NONE. But 360training holds 221 two-segment suffixes shared by more than one file, so an ambiguous tail is not evidence about the particular reference in hand — and silencing a real defect because an unrelated file ends the same way is the direction ancestorRoots already failed in once. The match must therefore be UNIQUE. Every case it actually clears had exactly one match, so the guard costs nothing on this population and bounds the failure mode on every other. It also corrects a classification. `routes/products._index.tsx` was filed as illustrative; it resolves to apps/store-demo/app/routes/products._index.tsx and is a real subpackage-relative reference. Four of the five routes remain flagged, because those four genuinely do not exist anywhere. Not wired into the verdict, and the reason changed this round rather than carrying over: the population these fixes were sized against no longer exists. The cost estimate for wiring was 5 real plus 5 illustrative; it is now 12 issues of which one class is freshly reclassified and `docs/testing.md` is unsorted. Wiring on a stale count is the error this whole sequence has been about. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 2 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (12)
Comment |
Takes Finding 0 and asks A and B. Fleet path issues 29 → 12.
Ask A: your self-critique was right, so I built the negative set
You said your negative set wasn't independent — it was the same population that motivated the check. Agreed, so I built one before implementing.
Against the five hand-classified real defects, suffix matching silences none. But 360training holds 221 two-segment suffixes shared by more than one file, so an ambiguous tail is not evidence about the reference in hand — and silencing a real defect because an unrelated file ends the same way is the direction
ancestorRootsalready failed in once.So the match must be unique. Every case it actually clears had exactly one match, so the guard costs nothing on this population and bounds the failure mode on every other.
It also corrects one of your classifications.
routes/products._index.tsxwas filed illustrative; it resolves toapps/store-demo/app/routes/products._index.tsx— a real subpackage-relative reference. The other four routes stay flagged because they genuinely don't exist. So the naming table isn't 5 illustrative entries; it's 4 plus one real path.Finding 0 and ask B
Dedupe is exactly as you described — atlas's nine were three paths through three generated surfaces. Ask B strips Claude's
@sigil; a scoped specifier never has.or/straight after the@, so the shapes can't collide.Not wiring
pathIssues— and the reason changed this roundNot carrying over last round's reasoning. The population these fixes were sized against no longer exists. Your cost estimate was 5 real + 5 illustrative; it's now 12 issues, one class freshly reclassified, and
docs/testing.mdunsorted. Wiring on a stale count is the error this whole sequence has been about.Re-sort the 12 and I'll wire it.
Verify
lint · format:check · release:pin --check · typecheck · 523 pass / 0 fail · verify:self-audit-proof.
🤖 Generated with Claude Code