Skip to content

reference_conservation: the census names a normalize refusal's reason and locus - #13323

Merged
gunbai-bot[bot] merged 2 commits into
mainfrom
session/bold-owl-731
Oct 5, 2026
Merged

gunbai-bot[bot] merged 2 commits into
mainfrom
session/bold-owl-731

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

XL-2 N7 follow-up to #13305 (observability gap, manager item 3).

Problem. reference_conservation_census_for_paths consumed normalize's refusal diagnostics only as a cover, so a refused module printed refused=N and refusal-not-at-or-above per atom with no reason or locus. That is why v2.compiler.service_realization's post-parse refusal looked causeless.

Change. ReferenceConservationReport carries normalize_refusal (fatal reason + locus, node locus resolved to text through the module's span index). The summary line always prints refusal=<stage>:<reason>@<locus> or refusal=none. RFM row census_counts_a_stage_refusal_without_naming_its_cause.

Controls (fixture module that refuses at normalize, plus an accepting control), all 6 claims PASS on BuildBuddy via claim_batch:

  • a_refused_normalization_carries_its_fatal_reason_located_in_text_holds
  • a_refused_normalization_prints_its_reason_and_locus_on_the_summary_line_holds
  • an_accepted_module_prints_no_refusal_on_the_summary_line_holds
  • plus the 3 existing role-gap / clean-control claims.

No rows added to floor_cross_claim_pure_producers_warm.

The cause it would have printed (measured with a probe over main's file): on #13305's head normalize refused with normalize_reason_post_normalize_not_well_formed at bytes 0..6 (the module keyword); on #13309's head and on main it accepts. Nothing to fix in service_realization.dag.

🤖 Generated with Claude Code

gunbc-ci-auto-heal and others added 2 commits October 4, 2026 23:30
… and locus

A refused module reported a refused count and refusal-not-at-or-above per
atom with no cause. The report now carries the fatal normalize diagnostic,
its node locus resolved through the module's span index, and the summary
line prints refusal=<stage>:<reason>@<locus> or refusal=none. RFM row
census_counts_a_stage_refusal_without_naming_its_cause.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…verdict (review 76036)

Delete the three local locus renderers and the local node-locus resolver;
the carrier holds the fatal diagnostic and the text
lens_verdict_diagnostic_located_text_in_spans renders with the module's
span index. Fixture expectation is now '<reason> @ <file> bytes 47..54'.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@gunbai-bot

gunbai-bot Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor Author

Addressed review 76036: deleted conservation_refusal_locus_resolved / conservation_refusal_locus_text / conservation_refusal_extent_text. ReferenceConservationNormalizeRefusal is now { fatal: Diagnostic, located: String }, where located is v2.std.lens_verdict lens_verdict_diagnostic_located_text_in_spans(d: fatal, index: spans) (tokenize/parse arm uses the same door with span_index_empty()). Summary line ends refusal=normalize:<reason> @ <file> bytes 47..54 (last on the line, since the located text has spaces). All 6 reference_conservation claims PASS on BuildBuddy via claim_batch.

@gunbai-bot
gunbai-bot Bot added this pull request to the merge queue Oct 5, 2026
Merged via the queue into main with commit 3e8ce3c Oct 5, 2026
4 checks passed
@gunbai-bot
gunbai-bot Bot deleted the session/bold-owl-731 branch October 5, 2026 07:08
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.

0 participants