Explain chapter display names and handles in rule diagnostics - #448
Merged
Merged
Conversation
Append the accepted comparison context (§FS-rules.7.2.1) and NAME whitespace guidance (§FS-rules.3.5.1) to older exact expectations, preserving released prefixes (§FS-errors.3).
vjovanov
marked this pull request as ready for review
October 5, 2026 14:43
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #447
With
## goal: Goal and hypothesis, agoalchapter subject reaches the chapter, butEach BENCH must have exactly one goal chapter.counts zero because it compares the display title. Previously, the finding gave no explanation for that difference:Now the same finding explains the comparison and shows the chapter it observed:
Chapter-cardinality findings append the expected display name and every accepted direct chapter's coordinate/title pair in source order, or
none. Text output and JSONmessagecarry the same explanation. The new specification point also requires the guide to explain this distinction beside its examples (§FS-rules.7.2.1). The rule guide and both shippedgrund-initskill copies now include that explanation.The specification clarifies the existing behavior: chapter subjects select handles (§FS-rules.2); presence rules compare direct chapter display names case-insensitively and accept only a single non-empty NAME token (§FS-rules.3.1). Thus
goal: Goalcounts one, whilegoal: Goal and hypothesisstill counts zero for presence NAMEgoal.Trying
Goal and hypothesisas a presence NAME remains refused. The parser appendsNAME forbids whitespace anywhere.after the complete existing reason and accepted-form example; internal spaces, tabs and Unicode whitespace remain unsupported (§FS-rules.3.5.1). Authored display titles may still contain spaces.Both diagnostics preserve their complete released prefixes (§FS-errors.3). Counting, handle selection, grammar, finding fields, authority, severity, locations and exit verdicts are unchanged.
Verification
c247d9800a. The text, JSON and whitespace assertions failed on missing explanations; the handle-selection control already passed. Review then passed all four focused CLI tests and the parser unit test, including empty NAME and whitespace at internal and surrounding positions. Removing the chapter citation produces the expected missing-citation finding, proving selection actually reaches the chapter.ffaf8b6063: nine older expected-message lines across eight contract, e2e and example files were refreshed with the required suffixes, preserving prefixes and assertion strength. No findings were rejected or deferred, and no adjacent findings were reported.ffaf8b60638505d501ba42a1aa90e113985e5edc, the ticket-local reproducer exited 0 with zero failed assertions. It used checkout-builtgrund 0.16.1-dev, with its explicit build target under~/ag/tmp, and confirmed text/JSON explanations, refusal exit 2, presence exit 1, and positive/negative chapter-selector controls.pre-commit run --all-filesgate exited 0 at that commit: all ten hooks passed, including Cargo formatting, warnings-as-errors build, Cargo tests, Python tests, grund check/fmt/init, lychee, fissile and the attribution check. Hosted CI and merge remain for shipping.AI workflow: `rhei`, 11 agent invocations across 1 model; 7 tasks completed, 9 in progress.
github-issues-agent-grounds-grund-447-implement-635ac3e6.ticketsupervising (visit 1) — cdx, openai/gpt-6.1-sol — 2m19s — 389.8k in / 2.9k outgithub-issues-agent-grounds-grund-447-implement-635ac3e6.ticketsupervising (visit 2) — cdx, openai/gpt-6.1-sol — 4m40s — 1.1M in / 6.5k outgithub-issues-agent-grounds-grund-447-implement-635ac3e6.ticket.specifyspecify — cdx, openai/gpt-6.1-sol — 14m14s — 2.5M in / 20.7k outgithub-issues-agent-grounds-grund-447-implement-635ac3e6.ticketsupervising (visit 3) — cdx, openai/gpt-6.1-sol — 2m35s — 380.7k in / 3.8k outgithub-issues-agent-grounds-grund-447-implement-635ac3e6.ticket.implementimplement — cdx, openai/gpt-6.1-sol — 9m33s — 2.0M in / 13.6k outgithub-issues-agent-grounds-grund-447-implement-635ac3e6.ticketsupervising (visit 4) — cdx, openai/gpt-6.1-sol — 2m32s — 386.0k in / 3.7k outgithub-issues-agent-grounds-grund-447-implement-635ac3e6.ticket.review-1review — cdx, openai/gpt-6.1-sol — 6m22s — 1.2M in / 9.0k outgithub-issues-agent-grounds-grund-447-implement-635ac3e6.ticketsupervising (visit 5) — cdx, openai/gpt-6.1-sol — 2m37s — 498.6k in / 3.9k outgithub-issues-agent-grounds-grund-447-implement-635ac3e6.ticket.fix-1fix — cdx, openai/gpt-6.1-sol — 3m04s — 541.9k in / 4.2k outgithub-issues-agent-grounds-grund-447-implement-635ac3e6.ticketsupervising (visit 6) — cdx, openai/gpt-6.1-sol — 2m50s — 560.3k in / 3.9k outgithub-issues-agent-grounds-grund-447-implement-635ac3e6.ticketsupervising (visit 7) — cdx, openai/gpt-6.1-sol — 2m38s — 477.4k in / 3.9k out