Issue Tracking¶
1. tasks.md stays primary¶
tasks.md at the repository root is the running narrative log — what's in progress, what's
backlog, what shipped and why, with the detail a GitHub issue's fields don't hold (commit
ranges, doc fixes found along the way, what was deliberately not built). It stays that way.
GitHub Issues are the linkable, assignable backing store underneath it. Every #NN tasks.md
uses from this point forward, and every new one, is a real GitHub issue — not an informal
number invented in the doc. If you write #NN in tasks.md, a commit message, or an ADR, an
issue with that number exists.
Historical note (2026-07-29): tasks.md's #1–#45 predate any GitHub issue actually
existing for this repo — they were an informal internal counter, not real issue numbers, and
GitHub can't be made to retroactively assign 45 specific numbers to match them. The three that
were still open (#34, #36, #37) were backfilled as real issues and now carry both: their
tasks.md heading keeps the old internal number for continuity with existing history (commit
messages, cross-references elsewhere in the doc), annotated with the real GitHub number it maps
to — e.g. ### #36 — ... — GitHub #1. The GitHub number is the one that goes in commit
messages (Closes #1, not Closes #36) so GitHub's own auto-close actually fires. Every
tasks.md entry opened after this note uses only its real GitHub number — no more internal
counter, no more dual-numbering.
2. Opening an issue¶
Use the Bug report or Feature or task template — blank issues are disabled. Every issue gets:
- Exactly one area label, matching the
Code/module it belongs to (§3). If it's genuinely cross-cutting, usearea:core. - A milestone, matching the
Documentation/ROADMAP.mdmilestone it belongs to, once that's known. It's fine to leave this unset while an issue is still being triaged. bugorenhancementfrom the type templates already set that; adddocumentation/question/good first issue/help wantedas they apply.
A tasks.md entry with sub-parts (the way #34 split into #34a–#34d) becomes one parent issue
plus a task list inside it (- [ ] #35 sub-part title), or separate linked issues each noting
Part of #NN — pick whichever the split is big enough to justify. Don't invent letter suffixes
on GitHub; issue numbers are already unique.
3. Area labels¶
One per Code/ module, plus the Milestone 7 modules that don't have a Code/ directory yet
(named in ROADMAP.md) so issues have somewhere
to go the moment that milestone starts:
| Label | Scope |
|---|---|
area:bulletin |
Code/Bulletin |
area:character |
Code/Character |
area:core |
Code/Core, cross-cutting work |
area:economy |
Code/Economy |
area:interaction |
Code/Interaction |
area:inventory |
Code/Inventory |
area:items |
Code/Items |
area:ownership |
Code/Ownership |
area:ui |
Code/Ui |
area:world |
Code/World |
area:legacy |
Legacy Lua source / migration reference (legacy/, Documentation/Legacy/) |
area:docs |
Documentation site tooling and cross-cutting docs work not owned by one module |
area:crime |
Milestone 7 — not yet built |
area:jobs |
Milestone 7 — not yet built |
area:needs |
Milestone 7 — not yet built |
area:chat |
Milestone 7 — not yet built |
area:commands |
Milestone 7 — not yet built |
This list is the same module taxonomy 04_GIT_WORKFLOW.md §2
uses for commit scopes — an issue's area label and its eventual commits' (scope) should
match.
4. Milestones¶
One GitHub Milestone per open ROADMAP.md milestone:
| GitHub Milestone | Roadmap section |
|---|---|
v0.5.0 — First playable |
Milestone 6 |
Milestone 7 — Remaining gameplay |
Milestone 7 |
Milestone 8 — Content migration |
Milestone 8 |
Milestone 9 — Polish and hardening |
Milestone 9 |
v9.8.0 — Release-prep |
Milestone 10 |
v9.9.0 — Player presence & admin tools |
Milestone 11 |
Milestones 1–5 are done and have no open GitHub Milestone — tasks.md's "Done" section and
git tags already record them. When a new ROADMAP.md milestone is added, add its GitHub
Milestone at the same time.
5. Linking commits to issues¶
Reference the issue in the commit body, not just tasks.md:
Refs #NN— this commit is part of the work, more is coming.Closes #NN/Fixes #NN— this is the commit that finishes it. On merge tomain, GitHub closes the issue automatically.
feat(inventory): RequestUseItem -- the Interaction framework's first RPC entry point
...
Refs #34
When the final commit for an issue lands and tasks.md gets its "Done" entry, close the loop
in both places in the same push — the issue via Closes #NN, tasks.md via moving the entry
to "Done (recent)".
6. Templates¶
.github/ISSUE_TEMPLATE/ has two forms — Bug report and Feature or task — plus a
config.yml that disables blank issues and points to Documentation/ instead of a contact
link. Both forms require an area; the feature/task form's Definition of Done checklist mirrors
00_CONSTITUTION.md §5 and is meant to be filled
in at close time, not at open time.