Repository navigation
Process Labels
Every ticket carries one intent label that names its discipline and its tier. Labels drive ticket shape (see Ticket Writing), branch naming (see Contributing), and how new-branch.sh sets the branch prefix.
| Explore | Produce | Evolve | |
|---|---|---|---|
| tech | spike |
feature |
(bug restores) |
| art | study |
asset |
revision |
| music | concept |
cue |
rework |
| writing | - | draft |
rewrite |
| design | discovery |
- | tune |
| audio | - | sfx |
- |
Three intents plus bug as its own shape. Pick the label whose discipline and tier best match the work.
-
spike: explore a technical unknown to inform an implementation choice. Timeboxed investigation producing a written recommendation. -
feature: build new capability into the game. -
bug: restore intended behaviour where the system has drifted.
-
study: explore a visual direction before committing to production. Output: concept work, options, a decision. -
asset: produce a finalised visual element for game integration. Done when integrated in-engine. -
revision: evolve an existing asset as the creative direction develops.
-
concept: explore a musical direction before committing to a composed cue. -
cue: produce a finished music piece ready for integration. -
rework: evolve an existing music piece as the creative direction develops.
-
draft: produce new written content ready for integration. -
rewrite: evolve existing written content as the creative direction develops.
-
discovery: work through an open design question toward a realised idea. -
tune: refine the balance or feel of an established system.
-
sfx: add or change a sound effect in the game.
- Which discipline owns the work? Tech, art, music, writing, design, audio.
-
Which tier?
- Explore if the answer is not yet known. Spike, study, concept, discovery.
- Produce if the output is a concrete deliverable. Feature, asset, cue, draft, sfx.
- Evolve if iterating on something that already exists. Revision, rework, rewrite, tune.
- Bug if the system has drifted from intended behaviour.
- The label is the intersection.
When in doubt between spike and feature: is there a committed output (feature) or an open question (spike)? Between asset and revision: does the thing exist yet?
Applied by contributors themselves to tickets that turned out to be approachable for newcomers. Not a replacement for the intent label; sits alongside it.
The intent label is also the branch prefix:
<intent>/<gh-issue>-<short-description>
Examples:
feature/123-timeout-and-equipbug/124-ball-stuck-on-serveasset/125-main-character-walk-cyclespike/126-cross-window-drag-dropcue/127-menu-loop
Use ./new-branch.sh SH-N to create a branch from a Linear ticket; it reads the ticket's label and sets the prefix automatically.
Separate from intent labels, a small set of GitHub labels are applied automatically to pull requests by the CI and review tooling. They describe the PR's state at a glance in the repo's PR list.
-
zaphod-requested: Josh's "please review" signal asking the organiser to fan out the reviewer pool. Cleared automatically when the bot synthesis review lands.
The reviewer verdict is not a label. Specialist reviewers from .claude/agents/ post inline findings and report their verdict to the organiser, which posts one bot synthesis review every review round under shuck-volley-bot[bot] via .github/workflows/bot-review.yml: an approval on a clean pass, request-changes if any reviewer blocked. That review is an advisory signal, not a merge decision, and its landing clears zaphod-requested.
About the name. "Zaphod" is the pan-galactic president from The Hitchhiker's Guide to the Galaxy: a two-headed alien whose extra head was added "to do all the lying, swearing and lounging about." The
zaphod-*family collects the bot-applied PR labels (the review request, the merge-conflict flag, the dependency bumps) under one multi-headed figure. The leadingzis also a sort hack: GitHub's label picker uses the Unicode Collation Algorithm, which treats most punctuation and emoji as primary-ignorable, so the only reliable way to push a label to the bottom of the picker is a text prefix that sorts late alphabetically.z*does that;zaphod-*happens to do that AND name the labels.
-
approved-human: Josh has reviewed and signed off. Required for merge.
The required status checks are Tests, Lint, and Human Approved:
-
Human Approved: succeeds only when theapproved-humanlabel is present. Posted by.github/workflows/approval-gate.ymlon label events.
All required checks must pass before auto-merge fires. The agent reviewer verdict (the bot synthesis review) is attribution, not a required check.
-
has-conflicts: applied manually when a branch needs to mergemainin but conflicts block the merge. Remove once the conflict is resolved. GitHub's native merge queue handles pre-merge rebasing onmain.
-
zaphod-dep: the PR updates a third-party package. Applied by Dependabot. -
zaphod-dep-action: the dependency is a GitHub Action. -
zaphod-dep-pip: the dependency is a Python package fromrequirements-dev.txt.
Pinned in .github/dependabot.yml per ecosystem. The zaphod- prefix groups every bot-applied label together at the bottom of the picker, Dependabot is treated as another head of the same Zaphod that handles AI review.
Contributing
The game
The Cast
Process
Reference