The --type on hivectl fire picks the worker's mode; the target repo
owns the per-type playbook (<app>/.claude/skills/<TYPE>/) and per-repo rules
(<app>/.claude/CLAUDE.md), which the pod auto-loads.
Build a new capability from the issue's Plan + DoD.type:feature
Reproduce, fix the root cause, prove it with the DoD checklist.type:bug
Refactor / harden / tidy without changing behavior.type:improvement
Produce a findings document — no code, no PR expected.type:research
qa is fired separately (hivectl qa --url=<U> [--target=<ISSUE>]), runs on a browser-equipped
image, and drives the running app from the outside. It never reads source. Its only writes are QA
artifacts to an orphan branch qa-artifacts/issue-<N>/<ts>/* and a new type:qa-feedback
issue cross-linking the target. Those feedback issues re-enter the loop as ordinary work.
Every fire, every type, obeys the same contract:
| Convention | Rule |
|---|---|
## Definition of Done | Required. ≥1 verifiable - [ ] checklist line. Driver refuses to fire without one (no auto-stub). |
## Plan | Required as authoritative scope. Driver may draft a ## Plan (proposed by driver) block; a human renames it to plain ## Plan to approve. |
| In-pod review | A fresh claude process grades the DoD and emits REVIEW: PASS | CHANGES_REQUESTED. PASS → driver merges; CHANGES_REQUESTED → driver re-fires. |
| Templates | PR body, status comments, needs-human comments, and per-type briefs all render from k8s-sandbox/image/templates/ via envsubst. |
type:qa-feedback issues only, the driver drafts the DoD (one verifiable line per concrete defect), since the qa finding text already is the human intent. Every other type keeps the no-auto-stub rule.| Label | Meaning |
|---|---|
type:feature | New feature implementation |
type:bug | Bug fix |
type:improvement | Refactor, polish, or quality work on existing code |
type:research | Investigation / write-up only; no PR expected |
type:qa-feedback | Filed by the qa role; cross-links the target issue |