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
candidate_group_key was the bare callee name, so callers()/reference_impact's
unresolved-group caveat matched by name alone -- an unrelated same-named
symbol in another language/module (e.g. a Python `helper`) could inherit an
overflow-candidate caveat that was never about it (e.g. from an unrelated
Rust `helper` group). Same identity-collapse-to-a-scalar shape as the P0
formal-upgrade bug: the overflow branch already computed the real candidate
set, then discarded everything but its length.
Add ambiguity_group_candidates (group_id, candidate_qn, candidate_path),
thread the real (qualified_name, path) candidate set through
resolve_sites_to_edges instead of Some(t.len()), and switch both consumer
queries to join + match agc.candidate_qn = c.qualified_name instead of the
bare candidate_group_key. CASCADE off the parent row so the existing DELETE
scopes (rebuild_graph, incremental_graph_update) clear members for free.
New test ambiguity_group_membership_is_target_aware_not_bare_name proves the
cross-language non-leak DoD case. callers_reports_unresolved_ambiguity_groups
updated to insert a matching candidate row. Toolsnaps regenerated
(UPDATE_TOOLSNAPS=1) for the two doc-comment-only description changes.
Verified: 1306+400 tests green (calm-core + calm-server, full rebuild from
clean target/), zero regressions. Plan doc updated with Part E execution-ready
specs for PR#6-10 (docs/plans/2026-08-19-evidence-architecture-execution-plan.md).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: crates/calm-server/src/__toolsnaps__/callers.snap
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -322,7 +322,7 @@
322
322
"$ref": "#/$defs/ConfidenceBreakdown"
323
323
},
324
324
"unresolved_group_count": {
325
-
"description": "Count of `ambiguity_groups` rows (WS3) whose `candidate_group_key`\nmatches this symbol's bare name — call sites elsewhere that had more\nthan `MAX_CALLEE_CANDIDATES` same-named candidatesand so produced\nno edge to ANY of them, this symbol possibly included. Neither\n`direct` nor `ambiguous` above can ever contain these — they are\ninvisible to both. See `Caveat::unresolved_ambiguity_groups`.",
325
+
"description": "Count of distinct `ambiguity_groups` rows (WS3) whose PERSISTED\ncandidate members (`ambiguity_group_candidates`, PR#6) include this\nsymbol's real `qualified_name` — call sites elsewhere that had more\nthan `MAX_CALLEE_CANDIDATES` same-named candidates, this symbol\ngenuinely among them, and so produced no edge to ANY of them. Target-\naware: an unrelated same-named symbol in another language/module can\nno longer inherit this caveat (pre-PR#6 it matched on bare name).\nNeither `direct` nor `ambiguous` above can ever contain these — they\nare invisible to both. See `Caveat::unresolved_ambiguity_groups`.",
Copy file name to clipboardExpand all lines: crates/calm-server/src/__toolsnaps__/reference_impact.snap
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -262,7 +262,7 @@
262
262
"minimum": 0
263
263
},
264
264
"unresolved_many_count": {
265
-
"description": "Count of `ambiguity_groups` rows (WS3) whose `candidate_group_key`\nmatches this symbol's bare name — sibling of `review_count`, but for\ncall sites that never became any edge at all (too many same-named\ncandidates), so they cannot appear in `references` alongside the\nother four classifications. See `CallersOutput::unresolved_group_count`.",
265
+
"description": "Count of distinct `ambiguity_groups` rows (WS3) whose PERSISTED\ncandidate members include this symbol's real `qualified_name` (PR#6,\ntarget-aware) — sibling of `review_count`, but for call sites that\nnever became any edge at all (too many same-named candidates), so\nthey cannot appear in `references` alongside the other four\nclassifications. See `CallersOutput::unresolved_group_count`.",
0 commit comments