Repository navigation
fix(spec): every occurrence of a term is a link, and a term link is no escape - #78
runewright[bot] wants to merge 4 commits into
Conversation
…o escape Once a file links a term, every occurrence of the term in that file is a link: the first emphasized, the later ones plain. The validator reports a plain occurrence of a linked term as spec-term-unlinked, and rune spec fix --links links it with the tag the file already uses. Where two terms overlap, the longer wins, in the fixer and in the lint. The matcher keeps byte offsets under Unicode lower-casing, takes the es plural of a label that ends in s, and masks an inline-link destination with balanced parentheses; the prose view closes a code span with a backtick run of the same length. The assembler strips a term link to its text, so a deployed instance carries no dangling reference, and the bundle check accepts a reference into the repository glossary only when its page name is kebab case. The change specs say so. Co-Authored-By: Martin Zeman <N4M3Z@users.noreply.github.com>
|
review/correctness stood down on |
…ee":"28ba950e0d33d04f042963cd0f5e437988eb0ffe","nonce":"4507bb490572c777f347cdea904deabcfc9919605bd058a822fd21a628c06f7b"}
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
review/correctness round 1 started on |
|
Claude finished @N4M3Z's task in 3m 50s —— View job Correctness review
Request changes. The escape check waves through collapsed and shortcut term links, but
No findings from other reviewers were bound to this head. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 1cea8c7995
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ide code Review findings on the pull request. Markdown resolves a reference label without case, so a `[validator][validator]` link with a `[VALIDATOR]:` definition passed the validator and survived assembly as a dangling reference; the stripper now matches tags without case. It also rewrote `[x][TAG]` inside a fenced block or a code span, where the term linter deliberately looks away; the stripper now walks fences and code spans and touches prose only. The bundle check accepted a collapsed or shortcut reference into the glossary, which the stripper never rewrites, so a deployed instance kept a bare `[]`; it now accepts the full `[text][TAG]` form alone. Co-Authored-By: Martin Zeman <N4M3Z@users.noreply.github.com>
…ays so in the help Review findings on the deck pull request that apply to the cli matcher too. A term inside a bare URL, an autolink, or an HTML tag is not prose, so it is masked. A label that ends in a consonant and y pluralizes to ies, so `capabilities` and `repositories` are occurrences of their terms. The `--links` help now says it links every occurrence, which is the sentence the deck fallback reads before it hands the check over to an installed rune. Co-Authored-By: Martin Zeman <N4M3Z@users.noreply.github.com>
ApprovabilityVerdict: Needs Human Approval Macroscope's review found this PR requires human approval — This PR changes specification validation and auto-fixing, assembled output, and bundle-reference validation across multiple owner-controlled components. The cross-component runtime impact and new enforcement behavior warrant human review. Notes:
You can add or adjust custom eligibility rules. Learn more. |
|
review/correctness stood down on |
|
review/correctness round 2 started on |
Runeseer review — cleanLooks good. The head fixes both open concerns: term-link stripping now compares tags without case, and it leaves fenced blocks and code spans untouched.
No open findings · Reviewed |
Plan
The voice review of 2026-10-18 decided that a defined term is a link to its glossary page at every occurrence in a file. The validator, the fixer, the assembler, and the bundle check learn that rule, and the gaps two opposing reviews found are closed.
Changes
spec-term-unlinkedfor a plain occurrence of a term the file links elsewhere, with the form to write, inrune-docs/src/spec/lint.rs; where two terms overlap, the longer wins.rune spec fix --linksinrune-docs/src/spec/fix.rs, the longer term winning at an overlap, before the first-use pass.rune-docs/src/spec/term_links.rs: whole words ands/esplurals, byte offsets kept under Unicode lower-casing, headings, code, definition lines, and inline-link destinations with balanced parentheses masked.rune-docs/src/spec/prose.rs.src/assemble/references.rs, so a deployed instance carries no dangling reference.docs/specs/glossary/<kebab-page>.mdinsrc/manifest/bundle.rs, the form assembly strips, and keep refusing every other escape.every-term-cites-definitionchange specs and inCHANGELOG.md.Testing
cargo test --all-features: all pass, including the new lint, fixer, matcher, assembler, and bundle tests.cargo clippy --all-features --all-targetsandcargo fmt --check: clean.89d9b185: exit 0; signed as1cea8c79with no tree change.gpt-6-astra) and Grok 4.7: the confirmed findings are fixed; the open ones (an emphasized word is never linked, Setext headings, a stray[, a label split across lines) occur in no deck file.Release Notes
rune spec validatereports a plain occurrence of a linked term,rune spec fix --linkslinks it, and assembly strips term links from deployed instances.Open-Seal-Nonce: 4507bb490572c777f347cdea904deabcfc9919605bd058a822fd21a628c06f7b
Note
Make every term occurrence a link and exempt term links from reference checks
*-term-unlinkederrors for plain occurrences of a term already linked in the same file, with different replacement hints before and after the first link; the matcher handles plurals, case-insensitive matching, and skips links, code spans, URLs, and partial words in term_links.rs and lint.rsrune spec fix --linksrewrites plain occurrences of already-linked terms into reference links, preferring the longer term on overlapping matches, in fix.rs*-term-unlinked; runrune spec fix --linksto auto-fix. Only full lowercase kebab-style glossary paths are exempt from bundle checks — collapsed, shortcut, and uppercase forms still errorMacroscope summarized 1cb98f4.