Skip to content

Releases: agent-grounds/grund

grund 0.20.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 20:58

Compatibility notices

  • §DF-a-near-miss-title-citation-is-a-citation, §FS-citations.recognized.title-lines, §REQ-backwards-compatibility.5, §REQ-no-missed-citation.2: a citation in a near-miss declaration's title is now a citation. A heading check reports as declaration-near-miss, such as # FS-beta: Beta, per a cited FS-001-alpha under the default {kind}-{number}-{slug}, now cites it, as a conforming declaration's title has since 0.18.0: refs FS-001-alpha lists it, and FS-001-alpha is no longer reported unused. This holds in every form a near miss takes, Markdown headings and doc comments alike, and only a citation of the near miss's own ID, as written, is still dropped. Who this breaks: a repository whose near-miss headings cite other IDs in their titles. The verdict moves both ways: a title citation there that dangles, names a missing section or an unknown project alias, or is a number-only shorthand is now an error (dangling, missing-section, unknown-project, shorthand-citation), a direction rule now judges it (forbidden-citation, discouraged-citation), a glob there is a glob-citation error, and every finding names its location and the fix, as for a citation anywhere else. Renaming the ID to the configured format, as the declaration-near-miss error asks, no longer changes what its title cites.
  • §DF-agent-setup-instructions-removed-in-0-20, §FS-init.5.7, §REQ-backwards-compatibility.2: **grund agent-setup-instructions is removed; run `grund guide...
Read more

grund 0.19.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 18:59
Read more

grund 0.18.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 10:57
Read more

grund 0.17.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 08:56

Compatibility notices

  • §DA-config-concern-records, §AR-config, §FS-distribution.3.1, §REQ-backwards-compatibility.2: grund-core deprecates Findings, Config, KindConfig and CitationRules at its root, to be removed in 0.19.0. The engine now reads a grund.toml into Project (its schema, rules and presentation, inside an envelope of name, version and workspace), Run and Compiled, and the scan returns a Catalog. All four are public beside the old names. Findings is now an alias of Catalog, and Config is a façade built from the records. Code that names an old type still compiles, with a deprecation warning that names the replacement. Only a build with -D warnings fails. No grund command, LSP response, JSON report or written file changes, for any v1 config. Closes issue #453. (PR #501)
  • §FS-init.2.3.4.3.1, §FS-init.2.3.7.1: the managed AGENTS.md block moves v12 → v14, and v13 → v15 where a rule kind is enabled. It gains one bullet teaching grund list --selector "<selector>" --format json | jq -c '{id,section}' | grund show --batch --toc --format json and linking the new Querying grund guide. Who this breaks: every repository with a grund block — grund check reports it outdated until it is re-rendered. Migration: run grund init. (#491)
  • §DF-canonical-slug-declarations, §REQ-backwards-compatibility.5, §REQ-no-wrong-citation.2, §FS-declarations.line.configured-slug: configured slug punctuation retains its canonical declaration identity.
    Before the correction, a valid repository declaring and citing FS-* or FS-tail*,
    with Markdown-link index entries, failed check at exit 1 with off-format,
    unknown-reference and missing-index-entry errors. After the correction it prints
    success at exit 0; explicit and bare show return the actual lead, and
    declaration-only refs no longer emits the typo note.
    No repository edit or migration is required. Consumers expecting the erroneous
    findings must accept their removal; genuinely off-grammar tokens and unresolved
    citations retain their findings.
    The verdict changes from failure to success for the valid fixture; every...
Read more

grund 0.16.1

Choose a tag to compare

@github-actions github-actions released this 05 Oct 18:29

Compatibility notices

  • §FS-rules.5.1, §FS-rules.3.4, §FS-rules.7.8, §REQ-backwards-compatibility.2: a resolved citation to a numbered section now counts in chapter rules. GOAL-x.4 counts as a citation of GOAL-x, and GOAL-x.outcome.2 as one of the outcome chapter, in every rule family, as [citations.KIND] already counted them. A chapter rule that failed only because such a citation was ignored now passes. A finding the newly counted citation alone produces — a must not cite prohibition, or an at most N or exactly N count it pushes out of bounds — is a warning in this release, carrying the code it will carry as an error and ending ; a citation to a numbered section now counts, and this warning becomes an error in grund 0.18.0; the exit code does not move until then. Who this breaks, from 0.18.0: a repository whose prohibition or upper-bound rule a section citation silently evaded, most widely one with named_sections off. The escapes are to remove or move the citation, loosen the rule's count, or pass --ignore on the finding's code. (#449)

grund 0.16.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 17:13

Compatibility notices

  • §FS-check.3.30, §FS-workspace.2.1, §FS-config.4.3, §REQ-backwards-compatibility.2: a [workspace] block whose members swallow its own scan now fails to load. The ramp every 0.13.x to 0.15.x binary announced in its own output lands on the release it named: warning: grund.toml:16: [workspace] members swallows this project's whole scan — every scan root is inside a member: `docs` in `docs` — so its declarations are unreachable and its citations are never checked. Point [scan] include at a directory that is not a member, or set include_root = false. This becomes an error in grund 0.16.0. at the command's own exit becomes error: grund.toml:16: [workspace] members swallows this project's whole scan — … Point [scan] include at a directory that is not a member, or set include_root = false; this became an error in grund 0.16.0 at exit 2, with nothing on stdout, under --format json too. It is located at the block's members line like every other members error, and it wins over a later expansion refusal in the same tree. init is the exception: it is how a broken workspace gets repaired, so it neither refuses nor prints the warning any more. §RM-workspace-absorbed-scan-error loses its plan but keeps its address and heading text as a pointer, because released changelogs cite it, and §FS-check.4.7 and §FS-check.4.7.9 stay behind as pointers for the same reason. Nine e2e cases move to exit 2: workspace-member-absorbs-scan-list, -check, -check-json, -full, -glob-symlink, -nested, -default-include, -expansion-error and -expansion-error-json. What does not move: the rule of §FS-workspace.2.1 and its exclusions, the covered pairs the message names, and both fixes — include_root = false or a [scan] include that is not a member; workspace-member-absorbs-scan-partial and workspace-member-absorbs-scan-include-root-false stay green untouched. Who this breaks: a repository whose [workspace] members cover every one of the block's scan roots — every walking command exits 2 where it exited 0 or 1. Closes issue #443. (PR #446)
  • §FS-cli.1, §FS-cli.4, §REQ-backwards-compatibility.2: bare grund no longer runs grund check .. The deprecation window the warning named closes on the release it named, so the path's worked example is now a path performed end to end: grund with no arguments is a CLI-level error — empty stdout, exit 2, and on stderr error: no command given; the bare `grund` fallback that ran `grund check .` was removed in grund 0.16.0 followed by two hint: lines naming grund check and grund --help. Who this breaks: a CI step still spelled grund, which was green having validated the repository and is now red having validated nothing; the line to write instead is grund check, which is what the error says. grund check, grund <ID>, grund --help, grund --version and grund . are untouched, and §FS-cli.5's report-to-exit mapping does not move — bare grund moves between two codes that mapping already defines. Why the landing is an error rather than the top-level help page, which would be stdout and exit 0 and so the successful no-op the window was bought to prevent, is [§DF-bare-grund-lands-on-an-error](decisions/functional/DF-bare-grund-lands-on-an-error.md#df-bare-grund-lands-on-a...
Read more

grund 0.15.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 22:19

Added

  • §FS-terms.senses, §FS-terms.terms, §RULE-terms: the shared vocabulary is held by a machine instead of by a reviewer's search. §RULE-terms makes a missing ## terms: Terms chapter a grund check error over every FS declaration, and four fixed-syntax invariants gate beside it in tests/integration/test_functional_spec_terms_content.py — shared labels unique, every parenthesised word a label of the group its line cites, local labels unique per document, and a shared word redefined only in the (narrowed) form. What no machine can judge is reported rather than asserted: the same test program's --advisory flag prints, per spec, the shared words it uses without leaning on them and leans on without using, silent unless it is asked for and never an exit condition, because a gate over a lean line's completeness would ask authors to name words they do not use. The new senses chapter is where the four exclusions that make a token a use rather than a name are now written down. The architecture's twelve pages keep presence alone, held by their own test: a rule sentence cannot except the index page. This repository turns on its first rules = true kind, so its own AGENTS.md block moves from v12 to v13 and gains the ### Chapter rules section — no **Schema:** prefix, because the rule-enabled schema shipped in #335 and nothing about it moves here. That block is also taken out of grund fmt's reach with a grund:fmt off region around it (§FS-fmt.2.5.2): the chapter-rule bullet carries the first live citation this repository's managed block has ever held, and grund fmt --write wraps it into a cross-reference while grund check byte-compares it bare (§FS-init.2.3.5.10), so the two surfaces refuse each other until that is settled upstream. (PR #374)
  • §FS-config.concerns, §FS-terms.terms.9, §REQ-spec-section-names.reserved: every grund.toml key belongs to exactly one of three concerns, and which one is answered by what a finding from the key can be about — schema is one node on its own, rules are at least two, presentation is the bytes grund writes. grund_config_version, project_name and [workspace] are the envelope outside the three. The chapter also states once the rule its two existing instances were written one at a time: a rule's unit is its subject's node (§FS-config.3.9.1.1, §FS-config.3.9.2.4). The complete key→concern assignment is derived from the reader's parse sites and recorded with the decision that argues it, not written by hand. place, complement place, language, field and unit join the shared vocabulary with it; nothing a user runs behaves differently. The cut, the v2 format it is the axis of, and the releases between here and 1.0 are proposed in §DISC-core-concerns, and the two records that argue the halves of it ship with them: §DF-config-concerns carries the derived key→concern inventory, and §DA-config-concern-records the engine records the concerns become. (PR #359)
  • §FS-config.3.4.13, §FS-values.2.5: [[kinds]] value_chapter names the chapter whose named direct children are value roots in every declaration of that kind, so a record keeps a checked quantity under a stable name beside the declaration that explains it. Until now a named section held a value nothing compared: the citation resolved and grund check said success. The key needs [id] named_sections = true, is refused beside values = true, and a project that does not set it reads, reports, and exits byte-identically. (PR #278)
  • §DISC-grund-core-public-surface, §AR-core-module-layout.1.2: audit the public root surface of grund-core against the embedding surface §FS-distribution.3.1 documents — a recorded baseline, a counting convention, one classified row per root name, and an integration check holding the inventory equal to lib.rs's explicit pub use list. A proposal with a release plan under §REQ-backwards-compatibility.2; no symbol, visibility, #[doc(hidden)] attribute, command, output or exit code changes. (PR #281)
  • §FS-distribution.4.2: the release guard reads wording changes in <release>, so a release at or above a wording deadline is refused. The clause was in the spec's table and absent from the gate; the two wording constants this tree ships — the agents-init maintenance tail and the narrowed-alias scope suffix — now hold the release they name, and each has a version-gated deadline test of its own. (PR #282)
  • §FS-terms, §FS-check.2.3: settle the vocabulary the functional spec shares. One new declaration defines 42 shared words in seven cited groups, and each of the 24 specs the functional-spec index links gains a ## terms: Terms chapter that opens with a lean line naming the groups it draws on and then defines only the words it introduces or narrows. Until now the same word could mean two things two specs apart, so a section read on its own did not answer on its own. Two FS-check corrections ship with it: a suggestion is a finding carried on the suggestions channel rather than something other than a finding, which is what §FS-distribution.3.0.1 and §FS-rules.7 already type it as. No behavior changes — two reads that exit 1 today, grund FS-terms and grund FS-<spec>.terms, start returning content. (PR #286)
  • §FS-declarations, §FS-errors.5.5, §REQ-spec-section-names: a check is now named by the code that selects it. The ten checks grund check enforces about a declaration — duplicate, duplicate-section, orphan-section, section-heading-level, section-outside-declaration, unmarked-heading, declaration-near-miss, misplaced-declaration, broken-stub and oversized-lead — move out of FS-check's positional Errors detected and Warnings chapters into one concept spec, each at a section named for its diagnostic code, so grund FS-declarations.checks.duplicate reads the rule that --only duplicate selects. The flat code list of §FS-errors.5.5 becomes a table carrying each code's severity, its pending ramp, what enables it and the point that specifies it, which is what makes a promotion a one-cell edit rather than a section move: the two ramps this tree still owes, §RM-unmarked-heading-error and §RM-off-grammar-declaration-error, are rewritten to say so. §REQ-spec-section-names writes down what a section of this repository's own specification may be called. All ten old addresses stay as one-line pointers until 0.15.0, and scripts/move_spec_sections.py repointed the 330 sites that addressed them. No behavior changes: no message, severity, exit code, golden file or template byte moves. The nine remaining concept specs follow one pull request at a time. (PR #299)
  • §FS-terms, §AR-system.5: widen the shared vocabulary to the architecture. §FS-terms is the vocabulary of the functional spec and the architecture, and each of the eleven pages the arc...
Read more

grund 0.14.1

Choose a tag to compare

@github-actions github-actions released this 21 Sep 16:06

Fixed

  • §FS-check.4.7.9, §FS-check.4.10.8, §FS-distribution.3.1: preserve warnings already settled or answerable at the run root when a later workspace-member expansion refuses, and render them once before the unchanged config error. Questions below the root that failed expansion leaves unanswered remain silent. (PR #273)

grund 0.14.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 23:08

Fixed

  • §FS-distribution.1.1: let the pre-release name guard recognize a package this project published before the repository moved. scripts/check-registry-names.sh establishes ownership from the registry's own metadata, which the last publish wrote, so it names the repository the package was published from — github.com/vjovanov/grund for all three crates at 0.13.1. Against a pattern that matched only agent-grounds/grund the guard reported crates.io/grund-core is already taken by another project about this project's own crate, and refused every release: the move cannot reach the registry except through a publish, and the publish is what the guard stands in front of. The former repository is now accepted beside the current one, and an unrelated owner still fails. (PR #272)

  • §FS-check.1.1.3.1, §FS-refs.2: recover real Python docstrings after a simple top-level assigned triple-quoted string and stop treating the assigned runtime data as citations. No configuration migration is required; move intentional edges from qualifying assigned data to a # comment or real docstring, and note that recovered docstrings can expose genuine findings that were previously hidden. Closes issue #264. (PR #268)

  • §FS-init.2.3.8: keep the configured project_name when creating or forcibly regenerating canonical AGENTS.md without an explicit --name, falling back to the target directory name only when the target config has no name. (PR #269)

  • §FS-init.2.1.3: render every scaffold-owned ID example from the illustrated kind's effective repository or per-kind format, so fresh and --force-refreshed docs teach slug-only, number-only, and numbered-with-slug grammars without stale numbered prose. Closes issue #266. (PR #271)

  • §FS-config.3.4.3: expose the resolved target kind title as optional kind_title metadata on successful show JSON and detailed refs JSON, and as a separate literal Kind paragraph in hover. Keep declaration and section show objects compatible with installed resolvers by placing metadata before their terminal path, line pair; preserve the E2E manifest prefix, Markdown previews, refs summary shapes and existing callable APIs. (PR #254)

  • §FS-id.3: trim leading as well as trailing literal hyphens when deriving an ID slug, including hyphens accepted by the configured character class. (PR #254)

Added

  • §AR-goal-measurement.1: gate every functional-spec leaf on exact test evidence or a reviewed, self-retiring exception, and add the missing fetch, ID, check, output, error, config, query, value, completion, and init proofs. The gate is measured against the consolidated specification of PR #256, which split most sections into citable children: every citation that named a section now holding children was retargeted onto the exact child the test proves, thirty-three end-to-end cases and nineteen focused tests were written for the leaves nothing reached, and the two exception tables were re-established for the new catalog — 934 leaves, 840 named by exact evidence, 85 permanent non-behavioral entries and 9 temporary. A parent citation still covers no child, so a section that gains children loses its parent's proof until a test names the child. (PR #254)
  • §FS-rules, §AR-rules: add opt-in grounded rule declarations with five controlled-English families over declarations, named chapters, and citation relations; check --rule, list --selector, shared CLI/LSP findings, semantic deduplication, conditional v11 agent guidance, a complete writing guide, and a runnable example ship together while projects without rules = true retain their existing bytes. (PR #263)
  • §AR-system: the architecture index declares the system — one page naming every component with what it consumes, produces and must not know, the frontends, and the dependency direction — and every architecture page now opens with a named placement chapter — a diagram of what feeds the component and what it feeds, then four facts — that cites its box there, held by tests/integration/test_architecture_placement.py. [id] named_sections = true is switched on for this repository so the chapter has a stable coordinate. §AR-workspace.1, §AR-lsp.1 and §AR-bindings.1 point at the overview instead of repeating it, and §AR-core-module-layout.1 maps each file category to its component. (PR #238)

Changed

  • §FS-check.4.7, §FS-check.4.8, §FS-check.3.8.4, §FS-errors.3.3, §FS-errors.3.6, §FS-distribution.4.2: the four ramps that named 0.14.0 now name 0.15.0. 0.14.0 ships as an ordinary release, so every deadline it would have reached moves one minor rather than passing while the message that promised it is still printed: the absorbed-scan warning (§FS-check.4.7) and the unlisted-[workspace] warning (§FS-check.4.8) become errors in 0.15.0 rather than 0.14.0, and the two wording migrations — the five agents-init messages and the narrowed-run scope-only unknown-project message — keep their compatibility form through 0.14.0 and take their final text in 0.15.0, which makes each a three-release migration where it was a two-release one. For a user the only change is the release each message names: the findings, their codes, their severities and every exit code are what they were, and no repository that was green becomes red. The ramp guards move with the constants, so scripts/check_release_ramps.py and the unit tests holding each named release ahead of CARGO_PKG_VERSION pass at 0.14.0 and fail again at 0.15.0 unless the flips land in it. §RM-workspace-absorbed-scan-error and §RM-unlisted-workspace-error record the release they now land in, and §DF-absorbed-scan-warning.2.3 keeps the reasoning that first set the date beside the one move it has made. (PR #270)
  • §AR-core-module-layout.1.5, §AR-ci.9: split formatter tree orchestration, reference-scope handling, init guidance, agent-entrypoint coverage, configuration validation, qualified-citation scanning, and workspace scope classification into cohesive component-local owners, preserving all behavior and the existing 67-test inventory while bringing every mapped source and test file within its configured soft budget. CI now installs the pinned fissile on every leg, ahead of the Python tests, because the ownership regression measures with it. (PR #267)
  • §AR-system and every FS declaration: the specification is consolidated into short leads with numbered child sections a citation can name, section numbers unchanged throughout: 2142 citable sections where there were 1227, the words a citation reads down from 51400 to 17525, 380 of 427 registered contradictions ruled and applied (the 47 left for afterwards are #255); 2137 code citations retargeted to the child section that holds their claim (PR #256)
  • §DA-engine-renders-nothing, §FS-integrations.1, §AR-bindings.2, §AR-bindings.3, §FS-distribution.3.1: integrations renders in the CLI, and the engine's public surface carries no renderer. The command's argument parsing, its detection and artifact printing, its --write reports and its agent-guidance sync moved from crates/grund-core/src/compat/ to crates/grund-cli/src/cli_integrations.rs and cli_integrations_write.rs, like every other subcommand's; the engine keeps client detection, each client's artifact and the managed writes as the data-returning functions they already were under writers/. For a grund user nothing moves: the same bytes on the same streams, the same frozen client set, the same --write idempotence and the same exit codes, with every e2e golden byte-identical. For an embedder, `grund_core...
Read more

grund 0.13.1

Choose a tag to compare

@github-actions github-actions released this 07 Sep 15:16

Added

  • Report intake: .github/ISSUE_TEMPLATE/ carries four GitHub issue forms — bug report, feature request, usability report, and token or time waste — each applying the matching kind label (bug, enhancement, usability, tokens) as the issue is opened, and config.yml turns blank issues off so no issue can arrive without a kind. Every form asks for the fields that make a report actionable: the context (command, directory, version), what happened, what was expected, an optional workaround, and, for the token form, the cost. (PR #205)
  • §FS-values, §DA-explicit-value-bindings: add opt-in first-class Markdown and home-JSON values, exact authored bindings in prose and scanned comments, arbitrary-precision decimal or decoded-string consistency checks, fixed text/NDJSON diagnostics, and shared query, formatter, workspace, core, and LSP behavior. Repositories opt in per citable kind with only values = true; existing repositories keep byte-identical behavior. Closes issues #37 and #38. (PR #206)
  • §FS-config.3.2, §FS-check.3.19, §FS-show.2.2: add opt-in explicit named section coordinates across checking, queries, references, formatting, completion, LSP, and generated guidance. [id] named_sections = true makes complete colon-form handles such as goals.performance stable and addressable at every depth, permits ordered numeric children such as goals.3, reserves number.name, and reports missing prefixes instead of accepting structurally orphaned paths. The absent/false default retains numeric behavior and output; grund init writes named_sections = false. (PR #204)