feat(issues): tag issues with what they belong to - #8
Merged
Merged
Conversation
A global backlog holds the work of an engine and of the modules shared by several games, and the only way to say which was which was to write the name into the heading by hand. Tags are the one frontmatter field that is a list, kept flat as "tags: age,gui" so the file stays plain key: value. The field is written into every new card even when empty, because the card is where fields are edited and one that is never shown is one nobody fills in. They open the description in the list, dimmed, rather than take a column of their own: a column would cost the description its width for something most issues carry one or two of. Ordering by description still follows the description - otherwise the tags standing in front would quietly order the column by themselves. No ordering by tags: an issue belongs to several groups at once, so "the first one alphabetically" would say less than it seems. Filtering by them is the next step, together with filtering by status, type and priority.
There was a problem hiding this comment.
🟢 Approval recommended
The implementation is consistent across parsing, creation, rendering, and documentation, and the sorting/highlighting behavior matches the stated UX goals.
Pull request overview
Adds issue “tags” as a first-class piece of issue metadata so issues can be labeled by what they belong to (module/subsystem/platform) and shown inline in the issues list without consuming a dedicated column.
Changes:
- Parse and persist a
tagsfrontmatter field as a comma-separated list, and always emit it when creating new issues. - Render tags as a dimmed prefix in the issue list description cell, while keeping title sorting based on the issue name (not the tag prefix).
- Document the new
tagsfield and highlight group in the README.
File summaries
| File | Description |
|---|---|
| README.md | Documents tags frontmatter usage, list presentation, and the new ScratchIssueTags highlight group. |
| lua/scratch/list.lua | Prepends tags to the description cell, adds dimmed highlighting for the tag prefix, and adjusts title sorting to ignore tags. |
| lua/scratch/issue.lua | Parses tags into a string list and writes a tags: line into newly created issue files (even when empty). |
Review details
- Files reviewed: 3/3 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
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.
A global backlog holds the work of an engine and of the modules shared by several games, and the only way to say which was which was to write the name into the heading by hand.
Tags are the one frontmatter field that is a list, kept flat as "tags: age,gui" so the file stays plain key: value. The field is written into every new card even when empty, because the card is where fields are edited and one that is never shown is one nobody fills in.
They open the description in the list, dimmed, rather than take a column of their own: a column would cost the description its width for something most issues carry one or two of. Ordering by description still follows the description - otherwise the tags standing in front would quietly order the column by themselves.
No ordering by tags: an issue belongs to several groups at once, so "the first one alphabetically" would say less than it seems. Filtering by them is the next step, together with filtering by status, type and priority.