1---2name: fls-issue-triage3description: Triage FLS issues and implement spec updates from linked Rust changes.4---56## What I do78- Gather issue details and linked PRs with `gh issue view` and `gh pr view`.9- Determine whether the change impacts FLS (language semantics, syntax, or glossary).10- Confirm the change applies to the Rust 2021 edition (exclude 2024+ edition-only rules unless explicitly backported).11- Identify any new terms introduced and define them in the glossary with `:dt:`; use `:t:` in prose thereafter.12- When justifying impact/no-change with spec passages, include verbatim excerpts with file paths and line numbers in the report.13- Map changes to `src/*.rst` sections using targeted searches.14- Apply spec updates and add new `:dp:` IDs from `./generate-random-ids.py`.15- Update `src/changelog.rst` with new/changed/removed `:p:` IDs and any syntax changes (`:s:`).16- Ensure changelog formatting: keep a blank line between each top-level item and the next entry.17- Build with `./make.py` and fix errors.18- Create a report in `$OPENCODE_CONFIG_DIR/reports/issue-<id>.md`.19- Generate grammar-driven validation snippets in `$OPENCODE_CONFIG_DIR/reports/issue-<id>/` and compile them with rustc.20- Record grammar derivations and rubric verification inside the snippet source files, with line-numbered evidence.21- Expand derivations to terminal tokens and cite spec line numbers for each grammar step.22- Sweep similar FLS sections to align structure, wording, and roles with established patterns.23- Align updates with the Rust Reference where applicable and document any deviations with rationale.24- Prefer normative language; avoid tutorial or implementation-detail notes unless they affect semantics.25- Include a Reference alignment section in the report and PR body with links and deviations.26- Use `:t:` for glossary-defined terms and `:s:` for grammar categories; mixing is expected when constraining syntax with semantics.27- Do not linewrap newly added or modified paragraphs in FLS `.rst` files; keep them single-line.28- Avoid abbreviations in grammar category names unless they mirror Rust surface syntax or established standard acronyms.29- When adding numbered algorithms (`#.` lists), each step must start with its own `:dp:` ID.30- When behavior depends on implementation-level semantics below the Reference/FLS surface (e.g., const-eval interpreter behavior, pointer provenance, byte-level representation), add a `Non-normative references` section to the report and PR. Cite current, maintained sources (rustc-dev-guide, Miri) and explain why the behavior is non-normative.31- When a no-change decision relies on non-normative references, include short verbatim excerpts with section anchors and URLs to ground the rationale in the report and PR body.3233## When to use me3435- An FLS issue requests new content or a spec update tied to a Rust PR.36- You need a repeatable checklist for impact assessment and execution.3738## Workflow39401. Read the issue and capture key links (Rust PR, reference PR, tracking issue).412. Decide impact:42 - If no FLS impact, add a concise “No change” reason in `src/changelog.rst`.43 - If impact exists, identify relevant sections in `src/`.44 - Validate that any Reference-aligned content reflects the 2021 edition.453. Implement changes in the spec with required roles and anchors.464. Add `:dp:` IDs for all new paragraphs/list items; generate IDs via `./generate-random-ids.py`.475. Record in `src/changelog.rst`:48 - New/changed/removed paragraph IDs (`:p:`).49 - Any syntax changes (`:s:`) or new section references (`:ref:`).50 - Leave a blank line between the last sub-bullet and the next top-level `-` item.516. Build with `./make.py` (and optionally `./make.py --check-links`).527. Create `$OPENCODE_CONFIG_DIR/reports/issue-<id>.md` with:53 - Impact assessment and rationale.54 - Short verbatim excerpts (with file paths and line numbers) for any cited FLS passages used to justify a “no change” decision.55 - Files changed, syntax changes, and `:p:` IDs.56 - Build status and validation results.57 - Pointers to the snippet files that contain grammar derivations and rubric verification.58 - Reference alignment: links to the Reference PR and relevant sections, plus deviations.598. Grammar-driven validation (keep artifacts out of the repo):60 - Put Rust snippets in `$OPENCODE_CONFIG_DIR/reports/issue-<id>/`.61 - In each snippet file, add:62 - An argument index map (comma-separated positions) with line numbers.63 - Grammar derivations that map productions to snippet lines.64 - Full derivations down to terminal tokens, with spec line numbers.65 - Rubric verification that quotes the exact spec sentences being checked, with spec line numbers.66 - Evidence lists that cite code line numbers.67 - Install the needed toolchain with `rustup toolchain install <version>` if missing.68 - Compile positive and negative examples with `rustc +<version>` and record diagnostics.699. Consistency sweep:70 - Scan related sections (same feature area or similar constructs) for matching rubric structure.71 - Align terminology (`:t:`, `:s:`, `:c:`) and phrasing with nearby sections.72 - Prefer `:t:` for glossary terms and `:s:` for grammar categories in prose rules.73 - Ensure updated paragraphs in FLS `.rst` are single-line (no manual linewrap).74 - Use full words for grammar category names unless the abbreviation mirrors surface syntax (e.g., `cfg_attr`, `asm`) or an established acronym (e.g., ABI, ASCII).75 - Note any deviations or follow-up items in the report.7610. Reference alignment:77 - Compare against the Rust Reference section(s) and linked reference PRs.78 - Mirror structure and rigor where appropriate; record deviations and why.79 - Add a short Reference alignment section to the PR body with links.8081## References8283- `src/`84- `src/changelog.rst`85- `./generate-random-ids.py`86- `./make.py`87- `exts/ferrocene_spec/README.rst`