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
§FS-inline-citation-style.4.1: the inline-note line- and column-cap findings, and the soft-cap warning (§4.2), now name the measured size next to the cap — inline note is 47 columns, over the 40-column maximum rather than just the cap — so an author does not have to re-measure or guess how a site was counted. The byte-vs-character counting defect the same issue reported shipped earlier, in v0.10.1 (PR #112); this closes the rest of issue #84. (PR #162)
§FS-inline-citation-style.4.1 (and §4.2): the line-cap and soft-cap findings now also name the site — the block's line span and the citations that made it one, as written and deduplicated in source order — and carry the block-splitting rule as a fix-it clause: inline note is 5 lines, over the 3-line maximum: lines 1-5 cite §FS-001-auth.1, §FS-001-auth.2; a blank line splits a note, an empty comment line does not. The column cap gains the site clause but not the splitting one — a wide line is fixed by wrapping, not by splitting. This extends the inline note is … stem PR #162 shipped, itself still unreleased. §5's rendered guidance gains one matching sentence: A note is one comment block: a blank line splits it, an empty comment line does not. Closes issue #117. (PR #171)
§FS-inline-citation-style.2.1: grund's own grund.toml returns to the default inline-note caps — 3 lines and 100 columns, from the 25 and 180 it had raised to live with measured doc comments. The 294 plain-comment notes that exceeded the defaults became /// docs of the item they describe (or, for include!d file headers, a /// on the file's first item) or were shortened, with the rationale kept in the item's doc comment and every citation where it was. (PR #153)
§RM-obligation-no-unit, §RM-grounding-per-place, §RM-directions-one-source, §RM-directions-render: four planned milestones on the roadmap, from one adoption's [citations] config — warn when a direction obligation has no unit behind it, require_grounding and a grounding_level per [[kinds]] row, one checked source for the citation-directions explanation, and a re-render of the generated Citation directions section chosen against a canonical config. §FS-config.3.9 and §FS-init.2.3.5 point at the two documentation milestones. (PR #152)
Fixed
§FS-config.3.6, §FS-workspace.8.6: a workspace-wide report run from a root-project subdirectory with relative_paths = false now keeps the cwd/path-argument base for member paths too, using the minimum bounded .. spelling (for example ../hw/docs/FS-nozzle.md) instead of leaking a machine-specific absolute path. Text and JSON output share the fix across commands; default and in-base spellings are unchanged. Issue #115, decided in §DF-cli-base-parent-paths. (PR #170)
§FS-errors.5, §FS-show.2.2.1, §FS-show.2.2.2: a failed ID query's --format=json diagnostic now carries its competing sites — an ambiguous refusal for an ID with two homes and an ambiguous-section refusal both fill sites with the [{ path, line }] pairs the message names, instead of the sites:null every query failure emitted before, ambiguous included. The number-only shorthand's ambiguous refusal (FS-042 (matches …)) keeps sites:null: its candidates are IDs, not {path, line} sites, and listing either home would tell a consumer to delete a correct declaration. The refusal is now raised as a typed carrier rather than a bare string, so the JSON printer reads sites instead of re-parsing the message prose; the deprecated grund_core::main_entry() mirror gets the same fix. Issue #110. (PR #169)
§FS-fmt.2.3.1, §FS-check.3.13: a Python docstring's """ / ''' delimiters are doc-comment syntax, not quotes, so the never-rewrite walk now runs over the docstring's content on every surface — scanner, fmt, and the LSP on-type transform. A shorthand citation on a docstring's opening line, in a one-line docstring, or on its closing line is reported by check and rewritten by fmt --write exactly like one on an interior line or in a # comment, where before one docstring got three verdicts by line and the silent ones drifted into shorthand permanently. A shorthand inside a "…" literal on a code line is unchanged: still a citation, still no finding, still not rewritten (§FS-fmt.2.3) — that is the runtime text the exclusion is about. Issue #83. (PR #168)
§FS-check.1.1: a bare ID-shaped token inside a Markdown link destination is no longer scanned as a citation off strict mode, so grund fmt --write can no longer turn a green non-strict tree red by writing exactly such a destination — a declaration homed in a file whose name extends its own ID (FS-login in FS-login-a.md) now round-trips through check → fmt --write → check clean instead of leaving behind an unknown referencefmt can never touch. Issue #131. (PR #167)
§FS-workspace.8.3: grund list --summary at a workspace root now sorts its rows by alias, the same order plain list uses, and sizes the alias column to the widest alias emitted, instead of printing them in project order padded to a fixed 10 characters — the two ways it disagreed with list and with itself on long aliases. The deprecated grund_core::main_entry() mirror gets the same fix. Issue #68. (PR #166)
§FS-config.4.1.1: grund config validate at a workspace root now loads every member config the run would load and exits 1 on the first that does not — or on a members entry that cannot be resolved — where it exited 0 and let grund check fail on the same tree. Issue #70. (PR #165)
§FS-workspace.2: a trailing workspace glob such as pkgs/* now includes a child symlink whose target is an in-tree directory, matching the same child named explicitly instead of silently dropping its whole project. Issue #74. (PR #161)
§FS-fmt.3: a whole-declaration-set formatter refusal now names every unreadable path found by its completed scan, instead of only the first, while still aborting before any rewrite and marking every diagnostic nothing was rewritten. issue #101 (PR #164)
§FS-workspace.8.7: list, refs, and show named a member's scan-error path against the scanning project's own config instead of the run's, so a member's unreadable file was spelled docs/FS-gone.md — a path that does not exist from the workspace root and can collide with the root project's own docs/ home — instead of packages/sub/docs/FS-gone.md, the spelling check, fmt, and cover already used for the same tree. Issue #103. (PR #160)
§FS-workspace.2 / §FS-workspace.6.1: locate unreadable workspace-member glob parents at their config's members line with the written glob and I/O reason, and report an unmatched non-empty glob instead of claiming the workspace has no members. (PR #159)
§FS-inline-citation-style.1.1: doc comments are no longer inline citation sites.inline_style, the inline_note_* budgets, and inline_note_layout bound inline comments only — a class Javadoc, a /// or //! block, a docstring, or a comment documenting the definition below it is documentation, not a note, and is never measured; a citation inside one still resolves and is still checked for everything else. Which kind a block is, is decided from the file's extension by one marker test or one next-line test per block, never by parsing (§AR-scanner.4), and the agent-facing sentence gains a clause saying where the gate stops, with no managed-block version bump. Reported from a GraalVM adoption whose class Javadoc failed the three-line cap (issue #118); decided in §DF-doc-comments-are-not-notes. (PR #153)
§FS-errors.5: the e2e harness judged a --format json stderr golden by the serialized object's length, so a representative fixture needed a contorted short ID and kind home just to stay under the cap meant for human diagnostic text. It now parses each stderr diagnostic object, asserts its §FS-distribution.3.0 shape, and caps only the message field; text lines keep the plain cap. The show-ambiguous-section-json fixture is spelled the way a real repository is. issue #120 (PR #157)
§FS-config.3.9.3: malformed [citations] namespace-target diagnostics now name the citation target's kind and offending qualifier segment, including that * is valid only as the whole qualifier. (PR #158)
§AR-workspace.9: e2e_cases_match_expected_reports used assert_eq! for its golden comparisons, so the first mismatched surface of the first mismatched case panicked inside map and hid every later mismatch — mutation-testing several goldens at once named only the lexicographically first case. Every runnable case is now compared on every surface (exit, stdout, stderr, expected.repo) before the pass decides, and a mismatch is collected as data and named once, in discovery order, alongside any skip; the determinism pass uses the same mechanism. issue #121 (PR #163)