Task & Bug Workflow¶
The full lifecycle of tracked work in gald3r: how tasks and bugs are created, claimed, completed, and verified. Every command on this page was run against a scratch project while writing it.
The state model: SQLite first, Markdown second¶
.gald3r/gald3r.db is the source of truth for task/bug status transitions.
.gald3r/TASKS.md, .gald3r/BUGS.md, and the individual files under .gald3r/tasks/ and
.gald3r/bugs/ are a generated, portable cache that a database write regenerates — never
the other way around. If the database doesn't exist yet (fresh clone, or you've been
hand-editing Markdown), gald3r db backfill imports the files into it:
gald3r db backfill
Backfilled 12 task(s), 4 bug(s), 9 document(s), 3 artifact record(s) into .gald3r/gald3r.db.
Tasks: 12 valid, 0 normalized, 0 skipped, 0 FAILED.
Bugs: 4 valid, 0 normalized, 0 skipped, 0 FAILED.
Documents: 9 ingested, 0 skipped.
Artifact records: 3 valid, 0 normalized, 0 skipped.
Other database-sync verbs:
gald3r db verify # report drift between the DB and the .gald3r/ files
gald3r db rebuild # regenerate the .gald3r/ files FROM the DB (opposite direction of backfill)
gald3r db regenerate-index # rebuild slim indexes (TASKS.md / BUGS.md / ADRS.md / ...) from SELECT; --kind and --apply
Work clones install the compiled gald3r binary and talk to .gald3r/gald3r.db
directly — no uv, no Python venv. uv run gald3r exists only in this source
checkout. world_tree Postgres mapping for each board kind is specified in
gald3r_project/board/worldtreesync and remains GATED while T684 / T836 /
world_tree T1781 are blocked (the mapping does not pretend the server already
has the kinds).
Tasks¶
Create¶
gald3r task add "Title" -d "Description" --type feature --priority medium
Task types: feature, bug_fix, refactor, docs, test, chore (see gald3r task add
--help for the current, authoritative list — it's enforced at creation time, not just a
convention). Priority: low / medium / high / critical, or a direct --priority-score
1-10 for finer-grained ranking (higher scores surface first when several tasks are ready at
once).
Find what to work on¶
gald3r task ready
Lists every task that is pending, has no unmet dependencies:, and clears the active value
floor — i.e. genuinely pickable right now. gald3r task next narrows that to a single
recommendation. gald3r task list shows everything (any status), with a compact value-bar
chart rather than a plain table:
gald3r task list
1 v8 high pending Write the landing page copy
2 v5 medium in-progress Fix broken footer link
Status indicators used across the CLI: pending, in-progress (claimed), awaiting-verification,
completed, failed, paused, cancelled.
Claim and work¶
gald3r task update T1 --status in-progress
Moves a task from pending to in-progress and records the claim. In an autonomous/swarm run,
gald3r go-preflight is the concurrency-safe way to claim several tasks at once — only one
agent wins any given task even when several are racing for the same queue. See
autopilot.md.
Acceptance criteria¶
Every task can carry an acceptance-criteria checklist. Tick items individually as you satisfy them (per-criterion attestation, not a single "done" flag):
gald3r task ac-check T1 1 # tick criterion #1
gald3r task ac-status T1 # see checked/unchecked status
Hand off for review¶
gald3r task update T1 --status awaiting-verification
Verify (reviewer side — never the implementer)¶
gald3r task verify T1 --pass # -> completed
gald3r task verify T1 --fail # -> back to pending, with the failure reason recorded
gald3r verify (no task id — the standalone verb) is the completion GATE: it checks whether
a task's acceptance criteria are actually satisfied before you call it done, rather than
trusting a self-report.
Housekeeping¶
gald3r task-sync-check # validate TASKS.md against the tasks/ files (--fix repairs)
gald3r task archive # move completed/failed/cancelled tasks into .gald3r/archive/
gald3r task delete T999 # HARD delete -- only for tasks created in the wrong project
gald3r task stale-claims # find and resolve in-progress tasks whose claim has expired
gald3r db rebuild # regenerate TASKS.md and the task files from the database
Bugs¶
Bugs mirror the task shape (gald3r bug add/list/show/update/ac-check/archive/delete), with
one difference at the terminal state: instead of task verify --pass, a bug is closed with:
gald3r bug add "Title" -d "What's broken" --severity high --file path/to/file.py --line 42
gald3r bug list
gald3r bug resolve BUG-1
Bug severity uses a 1-10 damage scale (a cosmetic typo is 1-2, a crash on a common path or a
security gap is 7-8, secret leaks or data destruction top out at 9-10) — the mirror image of a
task's value score. gald3r status renders open bugs on the same style of bar chart as tasks,
scored by damage instead of value:
Bugs (1 open, 4 all statuses)
9-10 (crit) │ 0
7-8 (high) │████████████████████████████████████████ 1
5-6 (med) │ 0
1-4 (nit) │ 0
Validation and drift¶
gald3r validate # schema/status-vocabulary/folder-placement checks on tasks|bugs
gald3r validate --fix # normalize what's safely auto-fixable
gald3r db verify # database-vs-Markdown drift report
gald3r validate is designed to run as a fail-closed pre-commit hook on staged
.gald3r/tasks/** and .gald3r/bugs/** — a malformed frontmatter field, or an open-family
task/bug filed under a retired per-status subfolder instead of the flat tasks/ / bugs/
root, is caught before it merges rather than discovered later by a human reading TASKS.md.
Terminal records belong in tasks/completed|failed|cancelled/ and bugs/done|cancelled/.
Where next¶
autopilot.md— letting gald3r work the task queue itself instead of running each step by handverbs.md— the full CLI verb catalog, grouped by purpose