Implementation Backlog
Estrutura de backlog em dois níveis: módulo (`<module>/backlog/`) para trabalho com escopo único; projeto (`projects/<project>/backlog/`) para iniciativas cross-cutting. Em cada caso, fluxo `pending → in-progress → done`, numeração sequencial NNN-titulo-slug.md.
Policy — Implementation Backlog
The monorepo uses a *wo-level backlog structure*
- *odule-level*(
<module>/backlog/) — work scoped to a single component (features, bugs, integrations). Lives inside the module it tracks. - *roject
level*(cutting initiatives that span multiple modules or have no single module home. Lives in the monorepo rootprojects/<project>/backlog/) — crossprojects/directory.
Module-level Backlog
When the user asks to implement something in a product repository, *efore implementing*
- Create the ticket in
<module>/backlog/pending/NNN-title-slug.mdand commit. - When starting implementation, move the file to
<module>/backlog/in-progress/and commit. - When finished and user-approved, move to
<module>/backlog/done/and commit.
Directory Structure
<module>/backlog/
pending/
in-progress/
done/Project-level Backlog
For cross-cutting work, use projects/<project>/backlog/. Current projects:
| Project | Path | Covers |
|---|---|---|
koder-stack |
projects/koder-stack/backlog/ |
Stack-wide maintenance: housekeep, spec rollouts, landing pages, doc audits |
kode-model |
projects/kode-model/backlog/ |
Kode AI model training: hardware, data, fine-tuning, eval, modalities |
kode-relay |
projects/kode-relay/backlog/ |
Kode Relay server: protocol, session management, account managers, deploy |
kode-cli |
projects/kode-cli/backlog/ |
Kode CLI client: TUI, auth, tool execution, feature parity |
infra-gchat |
projects/infra-gchat/backlog/ |
GChat bridge: bot setup, groups, avatar, feature parity |
koder-kit |
projects/koder-kit/backlog/ |
SDK base + IPC inter-app: spec do protocolo, koder_kit Flutter, bindings por linguagem/plataforma |
google-workspace |
projects/google-suite/backlog/ |
Integração Google Workspace: Gmail connector, Drive connector, OAuth SSO, Kompass org sync, Keys OAuth vault |
Project backlogs use the same pending/in-progress/done/ structure and NNN numbering as module backlogs.
To add a new project: create projects/<slug>/backlog/{pending,in-progress,done}/ and document it in this table.
Status ↔ location consistency (KDB-321)
The Status: field in the frontmatter and the directory the file lives in are *wo views of the same fact*— they must agree at all times.
Status: |
Required directory |
|---|---|
pending |
backlog/pending/ |
in-progress |
backlog/in-progress/ |
done |
backlog/done/ |
*nvariants:*
- Whenever a ticket transitions, *oth*must change in the same commit. Updating one without the other is a misfile.
- The directory is the source of truth for tooling that can't read frontmatter (e.g.
git ls-files | grep done/). The frontmatter is the source of truth for tooling that follows file moves across renames. - CI lint:
koder-spec-audit backlog --check-status-locationwalks everybacklog/{pending,in-progress,done}*.{md,kmd}and fails when a file's directory disagrees with itsStatus:field.
*ntipattern (history):*`infradatakdbbacklogdone/046opentelemetryinstrumentation.kmdnext: PARCIAL, Go kdb: AUSENTE" and frontmatter said was filed in done/` while the body explicitly said "kdbStatus: pending. The misfile was caught manually during /k-evolve infra/data/kdb (20260509) and the file was moved back to pending/ — this rule formalizes that fix.
*hen closing a ticket whose work is partial:*do not move to done/ to "clean it up". Either keep it in pending/`in-progress and split off a follow-up ticket for the remainder, or close as done` only when the body honestly declares the partial scope as complete.
Numbering
Sequential per backlog (001, 002, 003, ...). *efore opening a new ticket* list existing NNN-* files across pending/, in-progress/, and done/ to avoid colliding with another parallel session that may have claimed the same number.
For crossstack references (commit messages, conversations, memories, docs, other tickets), use the *irastyle prefixed form*<PREFIX>-NNN (e.g. KSTACK-104, KTERM-42). The filename on disk stays NNN-titulo.md; the prefix is a convention for *eference only* Each moduleproject with a backlog declares its prefix in [backlog] prefix in its koder.toml and is listed in `metadocsstackregistries/ticket-prefixes.md`.
See specs/backlog/numbering.kmd for the full schema, anti-patterns, and audit rules.
Cross-stack references
When a ticket, doc, policy, or memory needs to refer to a ticket in another module:
| Form | When |
|---|---|
<PREFIX>-NNN |
*efault*— inequívoco cross, KODEC-23`) |
#NNN |
Only *nside the same backlog*(e.g. cross-ref between two tickets in engines/kodec/backlog/); never in commit messages, CLAUDE.md, specs, policies, registries, memory files |
<scope>/<PREFIX>-NNN |
Only when desambiguando contra fork/clone — raro |
Antipattern: audit.sh` reports this as drift advisory.#101 written in CLAUDE.md, in a memory file, in a commit message that touches multiple modules, or in a doc under meta/docs/stack/. The `numbering
Ticket Template
# NNN — Title
- **Date:** YYYY-MM-DD
- **Priority:** alta|média|baixa
- **Status:** pending|in-progress|done
## Pedido
(description of what the user asked for)
## Notas de implementação
(filled during/after implementation)Rationale
Module backlogs are the authoritative source for "what was planned vs what was done" in each component — they survive session handoffs, parallelsession coordination, and context loss. Project backlogs provide the same guarantees for multimodule initiatives that would otherwise have no natural home.