Skip to content

fix(drift): dedupe by cited path, resolve unique tails and @-prefixed paths (0.1.0-alpha.17) - #47

Merged
jaruesink merged 2 commits into
mainfrom
fix/path-dedupe-and-tails
Aug 9, 2026
Merged

fix(drift): dedupe by cited path, resolve unique tails and @-prefixed paths (0.1.0-alpha.17)#47
jaruesink merged 2 commits into
mainfrom
fix/path-dedupe-and-tails

Conversation

@jaruesink

Copy link
Copy Markdown
Contributor

Takes Finding 0 and asks A and B. Fleet path issues 29 → 12.

Repo before after Repo before after
atlas 9 3 watchtower 0 0
360training 17 7 currychat 0 0
vision 1 0 forge 1 1
recall 1 1

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 ancestorRoots already 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.tsx was filed illustrative; it resolves to apps/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 round

Not 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.md unsorted. 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

jaruesink and others added 2 commits August 9, 2026 15:10
… 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>
@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 2 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1908cb87-d9aa-40cc-9bfd-834e22975a9f

📥 Commits

Reviewing files that changed from the base of the PR and between c44c5af and ef3725b.

📒 Files selected for processing (12)
  • README.md
  • docs-site/public/llms-full.txt
  • docs-site/src/content/docs/reference/cli.md
  • docs/byok-trust-model.md
  • docs/first-user-proof-packet.md
  • docs/first-user-proof.md
  • docs/getting-started.md
  • docs/proofs/current-outside-tester-send-packet.md
  • package.json
  • scripts/drift-detect.ts
  • scripts/lib/path-resolution.test.ts
  • scripts/lib/path-resolution.ts

Comment @coderabbitai help to get the list of available commands.

@jaruesink
jaruesink merged commit a57ee44 into main Aug 9, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant