Files

141 lines
6.0 KiB
Markdown
Raw Permalink Normal View History

# WORKFLOW.md — Gates, Sizing, and Rituals
Read this when a task begins, not preemptively. `AGENTS.md` holds the
always-on rules; this file holds the process.
## Size Classes
Propose one at task start; the human confirms — individually, or batched
at the next refinement session.
| Class | Scope | Process |
|---|---|---|
| S | One file / one small change, no design decisions | Direct. AGENTS.md rules only. The one-line go-ahead **before starting is the stop** — waived only if `PROJECT.md` grants the size-S exception. |
| M | Few files, minor decisions, fits one session | Slice plan in chat, no file. **STOP: plan approval before any code.** Then implement; each slice reports evidence and status inline. Gate 5 is a short AAR note in chat, filed to the wiki only if it produced a real learning. |
| L | New feature, multiple files or sessions, real decisions | Full design doc in `docs/design/` following Gates 15 below. |
When in doubt between two classes, pick the larger.
## Gate 0 — Project Initialization
Runs once per project, triggered by a missing `PROJECT.md`. Ask, never guess:
1. Response language? (e.g. de / en)
2. Size-S gate exception granted? (yes / no)
3. One-line project purpose?
4. Audience — who uses this besides the owner? (Drives which wiki areas
become mandatory later; see `docs/wiki/index.md`.)
Write the answers to `PROJECT.md` (frontmatter per `schema.yaml`), run
`validate.py`, and confirm the result with the human.
## Gates 15 (size L)
Each gate is a section of the design doc. A gate ends with **STOP**:
present the section, wait for explicit approval. Do not pre-fill later
sections.
### Gate 1 — Product
- Problem statement: what user problem, for whom.
- Verifiable acceptance criterion. A real number where one exists;
otherwise a concretely checkable outcome. "Works" is not a criterion.
- Non-goals: what this deliberately does not do.
- Announcement paragraph (35 sentences): what it is, who it's for, why
it's good. If you can't write it, the product isn't understood yet.
- UI involved? Plain-HTML mockups of the affected screens.
**STOP.**
### Gate 2 — Architecture
- Read first: the actual codebase, relevant ADRs, relevant AARs.
Past decisions and learnings are input, not trivia.
- How it fits the real system: endpoints, tables/schemas, query
outlines, the end-to-end flow (Mermaid).
- Constraints: non-functional requirements, proportional to the project.
- Options & trade-offs where more than one viable way exists: pro/contra
each, chosen option, and why. Feature-local decisions stay here.
- Lasting directional decisions discovered here become ADRs (one each),
linked from the design doc.
**STOP.**
### Gate 3 — Program Design
- File locations: exact paths, new and touched.
- Types and method signatures — no bodies.
- Call stack for the main flow(s).
- What the tests will assert.
- Boundaries: an explicit DO NOT CHANGE list.
- Shakiest calls: name the decisions you are least confident about.
**STOP.**
### Gate 4 — Vertical Slices
- Slice 1 is the tracer bullet: a thin end-to-end path that runs
(mocks and stubs allowed). Only then real logic, one testable slice
at a time. Never build layer-by-layer horizontally.
- Every slice lists its tasks; every task names **files, action,
verify, done**.
- Each slice ends with verification evidence, a status
(`DONE` | `DONE_WITH_CONCERNS` | `NEEDS_CONTEXT` | `BLOCKED`),
and a **STOP** for human review before the next slice.
### Gate 5 — Closeout
- AAR section in the design doc: planned / actual / why the
difference / learnings.
- Harvest: learnings useful to future readers go to the wiki
(FAQ, Stolpersteine) with source links. A missing or wrong framework
rule becomes a framework issue or update.
- Good analyses produced along the way may be filed as wiki pages
(with citations) instead of dying in chat history.
- Move the design doc to `docs/design/done/`. Run `gen_status.py`.
## Debugging Path
For bugs and incidents, any size:
1. Reproduce first. No reproduction, no fix.
2. Hypothesize the root cause; verify the hypothesis with evidence
before changing anything.
3. Route the failure before fixing (diagnostic failure routing):
- **Intent issue** — we built toward the wrong goal → back to Gate 1.
- **Spec issue** — the design/plan was wrong → fix the spec
(Gate 2/3), then the code.
- **Code issue** — plan right, code wrong → fix in place.
4. Fix, plus a test that would have caught it.
5. Incidents and major misdiagnoses get a standalone AAR in `docs/aar/`.
## Session Handoff
- When a slice completes, or context quality degrades, write the current
state into the design doc's **Handoff block** — done slices, open
decisions, next step — then start a fresh session that resumes from
the doc. The doc is the memory; the session is disposable.
- End every working session by answering: "Which choices did I make that
I'm least confident about?" File the answer in the design doc.
## Refinement Session
A recurring, human-triggered ritual. Agenda:
1. Batched confirmations: size classes and small approvals queued since
last time.
2. Backlog triage over `docs/issues/`: close, reprioritize, split.
3. AAR harvest: walk recent AARs; update the wiki (FAQ, Stolpersteine);
propose framework changes.
4. Wiki lint (content-level, beyond `validate.py`): contradictions
between pages, claims superseded by newer sources, orphan pages,
missing cross-references, gaps worth a new page or a web search.
5. STATUS review: anything stale or surprising in `STATUS.md`.
## Knowledge Handling (summary)
Full rules live in `docs/wiki/index.md`. The short version:
- Original sources live in `docs/sources/`, immutable — agents read
them, never modify them. Wiki pages cite the sources they draw on.
- Contradictions are resolved or explicitly flagged — never left
silently coexisting.
- If the wiki has no confident answer, say so. Never file a
low-confidence synthesis back as knowledge.
- Git is the changelog. No separate log file.