@tenkara/afm-linux-arm64 4.0.0-alpha.7 → 4.0.0-alpha.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/bin/afm +2 -2
  2. package/content/CHANGELOG.md +28 -0
  3. package/content/PRINCIPLES.md +0 -2
  4. package/content/README-light.md +0 -2
  5. package/content/README.md +0 -2
  6. package/content/core/ach.md +0 -5
  7. package/content/core/afm.md +23 -5
  8. package/content/core/prd.md +0 -2
  9. package/content/core/protocol.md +1 -3
  10. package/content/hooks/README.md +0 -2
  11. package/content/interview/bootstrap.md +4 -2
  12. package/content/interview/promotion.md +0 -2
  13. package/content/interview/refactor.md +0 -2
  14. package/content/interview/triggers.md +0 -2
  15. package/content/modules/vireya-ui/ach.patch.md +1 -1
  16. package/content/ops/analyze.md +8 -7
  17. package/content/ops/deliver.md +23 -25
  18. package/content/ops/diagnose.md +1 -4
  19. package/content/ops/evolve.md +1 -4
  20. package/content/ops/export-template.md +1 -1
  21. package/content/ops/generalize.md +1 -4
  22. package/content/ops/policy.md +0 -2
  23. package/content/ops/reflect.md +1 -4
  24. package/content/ops/remediate.md +1 -4
  25. package/content/ops/restructure.md +1 -4
  26. package/content/ops/rule.md +0 -2
  27. package/content/ops/tasks.md +18 -18
  28. package/content/ops/update.md +3 -2
  29. package/content/ops/verify.md +0 -2
  30. package/content/questions/init.questions.yaml +13 -0
  31. package/content/rubrics/failure-classification.md +0 -2
  32. package/content/rubrics/solid-triggers.md +0 -2
  33. package/content/skills/analyze.md +1 -1
  34. package/content/skills/deliver.md +2 -2
  35. package/content/skills/tasks.md +3 -3
  36. package/content/templates/adr.template.md +1 -1
  37. package/content/templates/evolution-report.template.md +0 -2
  38. package/content/templates/feature-plan.template.md +0 -2
  39. package/content/templates/feature-research.template.md +1 -2
  40. package/content/templates/feature-spec.template.md +1 -1
  41. package/content/templates/feature-tasks.induced.template.md +58 -34
  42. package/content/templates/feature-tasks.template.md +56 -34
  43. package/content/templates/protocols/p1.md +1 -1
  44. package/content/templates/protocols/p2.md +1 -1
  45. package/content/templates/protocols/p3.md +1 -1
  46. package/package.json +1 -1
  47. package/plugin/agy/plugin.json +1 -1
  48. package/plugin/agy/skills/afm-analyze/SKILL.md +1 -1
  49. package/plugin/agy/skills/afm-deliver/SKILL.md +2 -2
  50. package/plugin/agy/skills/afm-tasks/SKILL.md +3 -3
  51. package/plugin/claude-code/.claude-plugin/plugin.json +1 -1
  52. package/plugin/claude-code/skills/analyze/SKILL.md +1 -1
  53. package/plugin/claude-code/skills/deliver/SKILL.md +2 -2
  54. package/plugin/claude-code/skills/tasks/SKILL.md +3 -3
  55. package/plugin/opencode/afm/index.js +245 -0
  56. package/plugin/opencode/afm/tui.js +21 -0
  57. package/plugin/opencode/agents/afm-executor.md +22 -14
  58. package/plugin/opencode/agents/afm-explorer.md +64 -28
  59. package/plugin/opencode/agents/afm-reviewer.md +64 -28
  60. package/plugin/opencode/skills/afm-analyze/SKILL.md +1 -1
  61. package/plugin/opencode/skills/afm-deliver/SKILL.md +2 -2
  62. package/plugin/opencode/skills/afm-tasks/SKILL.md +3 -3
  63. package/plugin/opencode/afm.js +0 -196
@@ -4,11 +4,10 @@ description: Refines a doc that guided the agent wrong, using evidence from the
4
4
  load: warm
5
5
  writes: ["docs/evolution/*.md"]
6
6
  composes: []
7
+ ancestors: the *Reflect* operator from Autogenesis (arXiv 2604.15034 — execution traces build causal hypotheses of failure), composed with the *MetaReflect* step of MetaReflection (arXiv 2405.13009 — self-reflection on failure is **episodic memory**).
7
8
  ---
8
9
  # Sub-flow: behavioral self-reflection on the docs (`reflect`)
9
10
 
10
- > **In this file:** What reflect is / is not · Pre-check · 1. Behavioral evidence collection · 2. Self-critique: doc-wrong vs agent-non-conforman… · 3. Proposal: make the doc more assertive + s… · 4. Own gate (à-la-carte) — suppressed und… · 5. Record + session closing + handoff · Suppression contract · Anti-patterns
11
-
12
11
 
13
12
  > **Form** — effect: edits + `evolution/<date>-NNN` + `sessions/<...>` + candidates for `guardrails/` · trigger: `afm reflect`, composition, **cadence** · precondition: friction lived in the session · composed by: `evolve` 1.2, `deliver` 4.D · proposes: `afm evolve` (§ 5, à-la-carte only) · **degree of freedom: medium**
14
13
 
@@ -18,8 +17,6 @@ Triggers: `afm reflect`. Also natural language about a **doc that guided badly**
18
17
  >
19
18
  > **Mechanism, not conductor.** `reflect` is one of the mechanism skills in the self-evolution cycle. `evolve` is the orchestrator that composes it. `reflect` runs **à-la-carte** (this doc, with its own gate). Or it runs inside the `evolve` cycle, which suppresses the own gate and consolidates results — see `evolve.md § Suppression contract`.
20
19
  >
21
- > **Ancestors:** the *Reflect* operator from Autogenesis (arXiv 2604.15034 — execution traces build causal hypotheses of failure), composed with the *MetaReflect* step of MetaReflection (arXiv 2405.13009 — self-reflection on failure is **episodic memory**).
22
- >
23
20
  > Reflect(session_trace) -> φ_b:
24
21
  > 1. scan session_trace for a point where a core doc guided the agent badly
25
22
  > 2. φ_b := (symptom-lived, causal-status-of-the-doc, mechanism)
@@ -4,11 +4,10 @@ description: Turns a failure that repeats into a durable artifact, recognized by
4
4
  load: warm
5
5
  writes: ["docs/procedures/*.md", "docs/learnings/*.md", "docs/guardrails/*.md"]
6
6
  composes: []
7
+ ancestors: "CRITIC (arXiv 2305.11738) — failure recognition is anchored in an **external tool or signal**. Self-critique with no tool degrades (PRINCIPLES #3). This op complements the short in-task loop in `afm.md § 5.1` (ephemeral Reflexion, cap 2). `remediate` is the **long loop**: when a failure crosses the § 5.1 terminal (non-transient) and recurs, it becomes a **durable** remediation."
7
8
  ---
8
9
  # Sub-flow: remediation of a recognized failure (`remediate`) — CRITIC loop
9
10
 
10
- > **In this file:** What `remediate` is / is not · Pre-check · Procedure · Composition (suppression contract) · Anti-patterns
11
-
12
11
  > **Form** — effect: `guardrails/`, `procedures/`, or `learnings/` · trigger: `afm remediate`, composition · precondition: a failure in the state store that `afm failures promotable` lists · composed by: `evolve` 1.3, `reconcile` · **degree of freedom: medium**
13
12
 
14
13
  Triggers: `afm remediate`.
@@ -23,8 +22,6 @@ Example phrases:
23
22
  > **Installing a guardrail uses one procedure.** When the rubric classifies the failure as *mechanizable* and the target is `docs/guardrails/`, follow [`rule.md` § Install the gate](./rule.md) — it covers discovery of the surface the project already runs, the runner built from [`../templates/guardrail-runner.template.md`](../templates/guardrail-runner.template.md), **measuring HEAD before turning the gate on** (a gate that starts red gets turned off the next day), measured cost, doc-runner sync, and recording with `origin: recurring-failure`. This op does not repeat those steps (rule 34): the origin differs, but the install path is the same.
24
23
 
25
24
  > **Target = this project's local docs (`<consumer>/docs/`), never the plugin.** Like every AFM write family, `remediate` writes to `<consumer>/docs/` (guardrails/procedures/learnings) and **proposes** — the human approves (#6). No op writes to the plugin: `afm promote` only records a finding for it.
26
- >
27
- > **Ancestor:** CRITIC (arXiv 2305.11738) — failure recognition is anchored in an **external tool or signal**. Self-critique with no tool degrades (PRINCIPLES #3). This op complements the short in-task loop in `afm.md § 5.1` (ephemeral Reflexion, cap 2). `remediate` is the **long loop**: when a failure crosses the § 5.1 terminal (non-transient) and recurs, it becomes a **durable** remediation.
28
25
 
29
26
  ---
30
27
 
@@ -4,11 +4,10 @@ description: Checks the health of the context architecture and finds what went s
4
4
  load: warm
5
5
  writes: ["docs/evolution/*.md"]
6
6
  composes: []
7
+ ancestors: Codified-Context (arXiv 2602.20478).
7
8
  ---
8
9
  # Sub-flow: context architecture health (`restructure`)
9
10
 
10
- > **In this file:** What restructure is / is not · Pre-check · 1. Staleness scan · 2. Findability · 3. Partition by temperature · 4. Own gate (a-la-carte) + application — s… · 5. Record + handoff · Suppression contract · Anti-patterns
11
-
12
11
 
13
12
  > **Form** — effect: edits + opt-in ADR · trigger: `afm restructure`, composition · pre-condition: git + `bites`/`last_bite` · composed by: `evolve` 1.3 · **degree of freedom: medium**
14
13
 
@@ -18,8 +17,6 @@ Triggers: `afm restructure`, or natural language about **structure/staleness** (
18
17
  >
19
18
  > **Mechanism, not conductor.** `restructure` is the mechanism skill that checks whether the docs are **structured to load efficiently** and **keep pace with the code**. It runs **a-la-carte** (own gate) OR inside the `evolve` cycle (which composes it when `diagnose` flags staleness or a badly partitioned doc — the own gate is then suppressed).
20
19
  >
21
- > **Ancestor:** Codified-Context (arXiv 2602.20478).
22
- >
23
20
  > CodifiedContext(doc, path):
24
21
  > 1. Tier(content) := its memory temperature: hot-always (every turn) | per-task | on-demand (deep reference)
25
22
  > 2. GitEvidence(claim) := a `git log` comparison that confirms or refutes claim # PRINCIPLES.md #2
@@ -7,8 +7,6 @@ composes: []
7
7
  ---
8
8
  # Sub-flow: new hard rule
9
9
 
10
- > **In this file:** Procedure · Install the gate · Inalienable rule · Additional for a refactored project
11
-
12
10
  > **Form** — effect: one file under `docs/rules/` plus its index line in `afm.md § 3` (or a principle in `§ 1.3`) · trigger: `afm rule`, composition · precondition: executable 0/1 trigger · composed by: `evolve`, `reflect`, `generalize` · **degree of freedom: low**
13
11
 
14
12
  Triggers: `afm rule`, or natural language ("new hard rule", "this should be a rule").
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  type: op
3
- description: Breaks a plan into tasks in TDD order, each one a cycle of the loop.
3
+ description: Breaks a plan into the tasks list of tasks.md in TDD order, added with afm task add.
4
4
  load: warm
5
5
  writes: ["docs/features/*/tasks.md"]
6
6
  composes: []
@@ -31,37 +31,37 @@ Procedure:
31
31
 
32
32
  3. **Read `spec.md` and `plan.md`** in full, for the feature.
33
33
 
34
- 4. **Make the tasks** with `afm new feature-tasks --feature NNN-slug --description "..."` (it writes the frontmatter and the template body), then fill the body:
35
- - **Phase 1 — Setup:** empty files with a signature and the test fixtures. Typically `[P]` (parallel with each other).
36
- - **Phase 2 — Foundation:** for each Gherkin scenario of spec § 3, at least two tasks: a RED test task and a GREEN implementation task. REFACTOR becomes its own task when it adds expected clarity.
37
- - **Phase 3 — Boundary:** for each new component of plan § 2, one creation task and one test task. For each boundary of plan § 5, one Zod validation task (rule 16) and one procedure task.
38
- - **Phase 4 — Reconciliation (8.5):** fixed tasks. Update `ach.md § 3` if a component is new. Add an ADR (`afm adr new <slug>`, see [`adr.md`](adr.md)) if the work materializes an architectural decision. Set the US status to `done`. **The last task** sets the `status:` frontmatter key of `spec.md`, `plan.md` and `tasks.md` to `done` (or `cancelled` for a feature dropped; hard rule 39). No body line carries the status. It must be last: those edits change the hashed documents, so the delivery approval (`afm approve --check`) goes stale by design and nothing may run after it.
34
+ 4. **Make the tasks.** Create the file with `afm new feature-tasks --feature NNN-slug --description "..."` (it writes the frontmatter and the template body), then add every task with `afm task add <NNN>`. The tasks live in the frontmatter `tasks:` list, never as a checklist in the body. The CLI assigns the id, validates the item and refuses one that breaks a rule `afm feature lint` grades (exit 1, the findings printed); you fill only the fields. The body is free prose (phases, notes). Build the list in this order:
35
+ - **Setup:** empty files with a signature and the test fixtures: `--kind setup --files <paths> --refs <US/RF> --text "..."`, typically `--parallel`.
36
+ - **Foundation:** for each Gherkin scenario `N` of spec § 3, a red task (`--kind red --scenario N --files <test path>`), then the green task that closes it (`--kind green --closes <the red's id> --files <code path>`). A refactor (`--kind refactor`) follows a green or another refactor, when it adds expected clarity.
37
+ - **Boundary:** each new component of plan § 2 is in the `--files` of one task, with the exact path of the plan cell. For each boundary of plan § 5 (`### Boundary <name>`), a red task and the green task with the Zod validation (rule 16), added with `--validates <name>`: the lint matches the boundary by that field, never by the task text.
38
+ - **Reconciliation (8.5):** one task, `--kind reconcile`, always the last (`afm task add` keeps it last, and reopens it when a task lands after it was done): update `ach.md § 3` if a component is new, add an ADR (`afm adr new <slug>`, see [`adr.md`](adr.md)) if the work materializes an architectural decision, set the US status to `done`, and set the `status:` frontmatter key of `spec.md`, `plan.md` and `tasks.md` to `done` (or `cancelled` for a feature dropped; hard rule 39). No body line carries the status. It is last because those edits change the hashed documents, so the delivery approval (`afm approve --check`) goes stale by design and nothing may run after it. `afm task done` refuses it while another task is open, a green while its red is open, and a refactor while the task before it is open.
39
39
 
40
- 5. **Mark `[P]`** where a task has no dependency on the task immediately before it. Heuristic:
41
- - Fixture tasks, tasks that touch different test files and doc tasks are typically `[P]`.
42
- - A GREEN task always depends on the RED task immediately before it: never `[P]`.
43
- - A REFACTOR task depends on its GREEN task: never `[P]`.
40
+ 5. **Mark `--parallel`** where a task has no dependency on the task immediately before it. Heuristic:
41
+ - Fixture tasks, tasks that touch different test files and doc tasks are typically parallel.
42
+ - A green task depends on the red task it closes: never parallel.
43
+ - A refactor depends on its green task: never parallel.
44
44
 
45
- 6. **Every task references `US-NNN` or `RF-NN`.** The rule is `core/afm.md` § 2, step 7 COMMIT: a commit references a US or RF. If the feature has no linked US, fail earlier, at the pre-check.
45
+ 6. **Every task references `US-NNN` or `RF-NN`** (`--refs`; the CLI refuses a task without one, except the reconcile task). The rule is `core/afm.md` § 2, step 7 COMMIT: a commit references a US or RF. If the feature has no linked US, fail earlier, at the pre-check.
46
46
 
47
- 7. **Mechanical validation before you report** (auto-correct, do not ask). Run `afm feature lint <NNN>`. It checks the structure of `tasks.md` (task lines present, a RED before each GREEN, a US or RF on every task, scenario and component coverage) and exits 1 on CRITICAL or HIGH. For a task without a reference, **add the US linked in the `spec.md` header** at the end of the task: a deterministic fix, no question. Re-run until the exit is 0. Step 6 is the declarative rule; this step is the safety net for an attention lapse.
47
+ 7. **Mechanical validation before you report** (auto-correct, do not ask). Run `afm feature lint <NNN>`. It reads the `tasks:` list and checks: each spec scenario has a red task with its number and a later green that closes it, a green closes an earlier red (CRITICAL), a refactor follows a green or a refactor, no green or refactor is parallel, each new plan component is in the `files` of a task, each plan boundary has a task whose `validates` is its name, there is exactly one reconcile task and it is last, every `US-NNN` exists in `ust.md` and every `RF-NN` in `prd.md`, and no checklist line is left in the body. It exits 1 on CRITICAL or HIGH. Fix a finding with `afm task add` (a missing task), `afm task set <NNN> <Txxx> [--kind] [--text] [--files] [--refs] [--scenario] [--closes] [--validates] [--parallel|--no-parallel] [--clear <field>]` (the field the finding names; `--clear scenario|closes|validates|files|refs` clears one), or `afm task remove <NNN> <Txxx>` (a task that should not exist; refused while a green closes it), then re-run until the exit is 0. `afm task set` and `afm task remove` run the same rules as `afm task add` and write only the lines they change; a new `--kind` brings its own needs (a green `--closes`, a red `--scenario`). Step 6 is the declarative rule; this step is the safety net for an attention lapse.
48
48
 
49
49
  8. **Materialize and report** (#6, see [`../PRINCIPLES.md`](../PRINCIPLES.md)): `tasks.md` is written by step 4; print the summary (step 9) with the path. Review happens through `git diff`; no blocking question.
50
50
 
51
- **Check the frontmatter the template's `frontmatter_for_output:` names** (hard rule 39): `type: feature-tasks`, `description`, `load: cold`, and `for_paths`/`us`/`rf` carried from `plan.md`, unchanged, and `status: planned`. `status` moves to `in_progress` with the first task and to `done` only in the last Reconciliation task (step 4), never earlier.
51
+ **Check the frontmatter the template's `frontmatter_for_output:` names** (hard rule 39): `type: feature-tasks`, `description`, `load: cold`, and `for_paths`/`us`/`rf` carried from `plan.md`, unchanged, `status: planned`, and the `tasks:` list. `status` moves to `in_progress` with the first task and to `done` only in the reconcile task (step 4), never earlier.
52
52
 
53
53
  9. **Output to the operator:**
54
54
  - The path of `tasks.md`.
55
- - The summary `N tasks total / M parallelizable ([P]) / 4 phases`.
55
+ - The summary `N tasks total / M parallel / red, green, refactor and reconcile counts`.
56
56
  - The `[TBD]` markers still in the plan (a flag, not a block).
57
- - **Next step:** "Before you start T001, consider `afm analyze` to cross-check coverage between scenarios, tasks and hard rules. It is a read-only report in chat, a safety net and not a gate. After that, each task is one cycle of `core/afm.md` § 2: start with T001. When a task is done, mark it with `afm task done <NNN> <Txxx>`."
57
+ - **Next step:** "Before you start T001, consider `afm analyze` to cross-check coverage between scenarios, tasks and hard rules. It is a read-only report in chat, a safety net and not a gate. After that, run the tasks in list order: a red task, the green task that closes it, an optional refactor (`core/afm.md` § 2). When a task is done, close it with `afm task done <NNN> <Txxx>`."
58
58
 
59
59
  ## Anti-patterns
60
60
 
61
- - ❌ Skip RED. This violates rule 1 (TDD).
61
+ - ❌ Skip the red task. This violates rule 1 (TDD).
62
62
  - ❌ Create a task with no US or RF reference.
63
63
  - ❌ Write a subjective task ("clean up code", "improve naming") with no mechanical criterion.
64
- - ❌ Mark `[P]` on a GREEN task that depends on the RED task immediately before it.
64
+ - ❌ Mark a green task `--parallel`: it depends on the red task it closes.
65
65
  - ❌ Block with a question before writing. Materialize and report; review through `git diff`.
66
66
  - ❌ Tolerate an open `[NEEDS CLARIFICATION:]` in the plan. The block is hard: a mechanical refusal, not a question.
67
- - ❌ Tick a box by hand-editing `tasks.md` during execution. `afm task done` marks it atomically.
67
+ - ❌ Write a task as a checklist line in the body, or edit the `tasks:` list by hand. `afm task add` adds a task, `afm task set` corrects one (its kind included), `afm task remove` drops one and `afm task done` closes it, atomically. When the CLI cannot write an edit it prints `held:` and a `task:` line with its verify; follow that task.
@@ -7,8 +7,6 @@ composes: []
7
7
  ---
8
8
  # Sub-flow: sync of the materialized instance with the current plugin version (`update`)
9
9
 
10
- > **In this file:** What update is / is not · Procedure · What the codemods can do · Instances older than 4.0 · 1.6 Language migration · Opt-in deltas · Post-conditions · Suppression contract · Anti-patterns
11
-
12
10
  > **Form** — effect: deltas in the instance + bump · trigger: `afm update`, composition · precondition: pin ≠ the shipped version · composed by: `evolve` 2.2 · **degree of freedom: low**
13
11
 
14
12
  Triggers: `afm update`, or natural language for **version bump / sync with the plugin**. Examples:
@@ -161,6 +159,9 @@ noticing during the work, and that is the branch that damages a product.
161
159
  scope empty, and the rest is unchanged. `afm lang` reports the language each file is written in.
162
160
  4. **Ask ONE question about the artifacts: `afm ask update-artifacts`** (questions in
163
161
  `content/questions/update-artifacts.questions.yaml`). Ask it once, never per file. `Keep the current language` records the choice, because the next update must not ask again.
162
+ Record the answer with `afm config set language.artifacts <tag>` (for example `pt-BR`). The command
163
+ validates the tag and edits `.afm/config.toml` in place. Never write that key by hand. A language agent task the
164
+ update prints (`artifact-language:*`) names the exact command; run it, then its 0/1 check.
164
165
  5. **On migrate, fan out over the artifacts outside the excluded scope**: the local `docs/`, the code
165
166
  comments, the test names. Each file gets a rewrite. Then an adversarial check asks what fact, number,
166
167
  path, marker or caveat disappeared. The checker reports; it never rewrites.
@@ -7,8 +7,6 @@ composes: []
7
7
  ---
8
8
  # Sub-flow: stamp a human verification (`verify`)
9
9
 
10
- > **In this file:** What verify is / is not · Why only a human · Procedure · What it must never do · Invariants
11
-
12
10
  > **Form** — effect: adds `verified:` to the frontmatter of one file · trigger: `afm verify <path>` · precondition: `.afm-version` · **degree of freedom: low**
13
11
 
14
12
  Triggers: `afm verify <path>`. Also natural language that states a person checked a document.
@@ -26,3 +26,16 @@ questions:
26
26
  description: User-facing strings are in Spanish.
27
27
  - label: Decide later
28
28
  description: Records [TBD] in the PRD; the language migration stops and asks.
29
+ - id: artifact-language
30
+ prompt: In which language are the artifacts of this project written (docs, code comments, test names)?
31
+ header: Artifacts
32
+ recommended: en
33
+ options:
34
+ - label: en
35
+ description: English, the default. Nothing is recorded.
36
+ - label: pt-BR
37
+ description: Recorded with afm config set language.artifacts pt-BR; the gate skips the English-prose rules.
38
+ - label: es
39
+ description: Recorded with afm config set language.artifacts es; the gate skips the English-prose rules.
40
+ - label: other
41
+ description: Another tag. Init prints the command to run with the tag the owner names.
@@ -9,8 +9,6 @@ fires_when: 'a failure was recognized by an external signal and needs a destinat
9
9
 
10
10
  # Rubric — failure classification (mechanizable → guardrail | mechanical → procedure | conceptual → learning | transient → nothing)
11
11
 
12
- > **In this file:** Entry gate (common to all three) · The four destinations · Decision flow · Anti-patterns
13
-
14
12
  > The CRITIC loop (`ops/remediate.md`) uses this rubric to remediate a failure recognized and recorded in the state store (`afm failures record`). The discriminator is **executable**. It is not a "feeling". Ancestor: CRITIC (arXiv 2305.11738) — recognize a failure only by external signal. Self-criticism without a tool degrades (PRINCIPLES #3).
15
13
 
16
14
  ## Entry gate (common to all three)
@@ -11,8 +11,6 @@ fires_when: 'a file name collects unrelated responsibilities, or a provider `swi
11
11
 
12
12
  # Rubric — SOLID as a concrete trigger (not folklore)
13
13
 
14
- > **In this file:** SRP — Single Responsibility · OCP — Open/Closed: extend without modifying · LSP — Liskov Substitution: interchangeable implementations · ISP — Interface Segregation: minimal port · DIP — Dependency Inversion: domain does not know infra · Summary — what to ask when
15
-
16
14
 
17
15
  SOLID is easy to use as an argument and hard to use as a trigger. This rubric converts each principle into a **mechanical trigger** — when to apply it, the anti-pattern, an example.
18
16
 
@@ -19,7 +19,7 @@ Run `afm preflight` (exit 3: no `docs/.afm-version`, stop and suggest `afm init`
19
19
 
20
20
  ## Procedure
21
21
 
22
- Start from the mechanical findings: `afm feature lint <NNN> --json` covers the passes A, C, D, E and the structure of `tasks.md`. Add the judgment on top (constitution violations, duplication, the semantic side of inconsistency and ambiguity), build the coverage table, assign severities by the matrix, and report in chat with metrics. Close with the `remediation` question (`afm ask analyze`). Gating mode sorts findings into buckets instead of reporting.
22
+ Start from the mechanical findings: `afm feature lint <NNN> --json` covers the passes A, C, D, E and the structure of `tasks.md`. Add the judgment on top (constitution violations, duplication, the semantic side of inconsistency and ambiguity), build the coverage table, assign severities by the matrix, and report in chat with metrics. Close with the `remediation` question (`afm ask analyze`); a remediation that adds a task runs `afm task add`, never a hand edit of the `tasks:` list, and a task is closed only with `afm task done`. Gating mode sorts findings into buckets instead of reporting.
23
23
 
24
24
  ## Invariant principles
25
25
 
@@ -24,10 +24,10 @@ The CLI holds the state; the skill keeps only the judgment. Drive the loop with
24
24
  - **Discovery:** scan scoped to the feature, external unknowns through the nasca research flow (`nasca-research`, or `nasca-campaign` for a deep study; ask the operator if nasca is missing), unknowns sorted into resolved-by-scan, researchable and irreducible. One batched, recommendation-first round, capped by the protocol (`afm protocol`).
25
25
  - **Draft:** spec, plan and tasks, verified with `afm feature lint <NNN>` plus the judgment passes of `analyze`.
26
26
  - **Gate:** the earned questions plus the `outcome` question (`afm ask deliver`), then `afm approve <NNN>`. An explicit "go" skips the questions, never the record.
27
- - **Execute:** each task is one `core/afm.md` § 2 cycle, checked with `afm gate --staged`, then `afm task done <NNN> <Txxx>`. Halt on a non-`[P]` failure after the capped retry.
27
+ - **Execute:** the tasks of the `tasks:` list run in order (`core/afm.md` § 2: a red task, the green task that closes it, an optional refactor), each checked with `afm gate --staged`, then closed with `afm task done <NNN> <Txxx>`. Tasks are added with `afm task add`, never by hand. Halt on the failure of a task that is not `parallel` after the capped retry.
28
28
  - **Reconcile:** § 8.5 plus a passive sweep.
29
29
 
30
- If artifacts already exist, resume from the correct phase, including "tasks already exist, run from the first `[ ]`".
30
+ If artifacts already exist, resume from the correct phase, including "tasks already exist, run from the first task that is not done".
31
31
 
32
32
  ## Invariant principles
33
33
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: tasks
3
3
  description: |
4
- Generates `tasks.md` in TDD order, and marks the parallel tasks with `[P]`. Every task references a user story or a requirement. It hard-blocks on an open `[NEEDS CLARIFICATION:]` in the plan.
4
+ Generates the `tasks:` list of `tasks.md` in TDD order with `afm task add`. Every task references a user story or a requirement. It hard-blocks on an open `[NEEDS CLARIFICATION:]` in the plan.
5
5
  Activates: `afm tasks [<feature>]`, "generate the tasks", "break the feature into tasks".
6
6
  ---
7
7
 
@@ -19,11 +19,11 @@ Run `afm preflight` (exit 3: stop and suggest `afm init` or `afm refactor`). Run
19
19
 
20
20
  ## Procedure
21
21
 
22
- Break the plan into four phases (Setup, Foundation RED/GREEN, Boundary, Reconciliation) from the generator (`afm new feature-tasks --feature NNN-slug`). Mark `[P]` only where a task does not depend on the one before it; a GREEN never is. Give every task a `US-NNN` or `RF-NN`. Then run `afm feature lint <NNN>` and fix what it reports until it exits 0. The last task closes the `status:` keys. Autonomy-first: write and report.
22
+ Create the file with the generator (`afm new feature-tasks --feature NNN-slug`), then add every task with `afm task add <NNN> --kind <k> --text <t>`: setup tasks, then for each spec scenario a red task (`--scenario N`) and the green task that closes it (`--closes Txxx`), an optional refactor, the validation task of each plan boundary (`--validates <boundary name>`), and one reconcile task, last. Never write a task by hand: the tasks live in the frontmatter `tasks:` list, and the CLI assigns the id and validates the item. Mark `--parallel` only where a task does not depend on the one before it; a green never is. Give every task a `US-NNN` or `RF-NN` (`--refs`). The CLI refuses an item that breaks a lint rule. Then run `afm feature lint <NNN>` and fix what it reports until it exits 0: a missing task with `afm task add`, a wrong field or kind with `afm task set <NNN> <Txxx> --<field> <value>` (`--clear <field>` clears one), a task that should not exist with `afm task remove <NNN> <Txxx>`. Never edit the YAML by hand. The reconcile task closes the `status:` keys; close each task with `afm task done`. Autonomy-first: write and report.
23
23
 
24
24
  ## Invariant principles
25
25
 
26
- Single canonical source: `afm path PRINCIPLES.md`. Universals §1-8 apply. In particular #5 (every task traces to a US or RF) and rule 1 (TDD: no GREEN without the RED before it).
26
+ Single canonical source: `afm path PRINCIPLES.md`. Universals §1-8 apply. In particular #5 (every task traces to a US or RF) and rule 1 (TDD: no green task without the red task it closes).
27
27
 
28
28
  ## Continuous doctrine
29
29
 
@@ -10,7 +10,7 @@ frontmatter_for_output: |
10
10
  status: proposed # proposed | accepted | superseded | deprecated. Set from step 2's
11
11
  # `afm ask adr` answer; `afm adr --supersedes` sets superseded.
12
12
  date: YYYY-MM-DD # The day the decision was written down.
13
- decided_by: '<who>' # '[TBD]' when nobody said.
13
+ decided_by: '<who>' # `[TBD]` when nobody said.
14
14
  supersedes: ADR-NNNN # ONLY when this decision replaces an earlier one. Omit otherwise.
15
15
  superseded_by: ADR-NNNN # ONLY when status is superseded by a later decision. Omit otherwise.
16
16
  relates_to: [ADR-NNNN] # ONLY when it depends on or refines other ADRs. Omit otherwise.
@@ -25,8 +25,6 @@ frontmatter_for_output: |
25
25
  > Without the field the windows collapse into one, and the cheap mechanism starves the expensive
26
26
  > one: measured on 2026-08-30, five reports, all five `reflect`, and `evolve` had never run.
27
27
 
28
- > **In this file:** Vital signs · Findings (φ signature) · Evolution package · ADRs created in this cycle · Attempt memory (anti-oscillation) · Mechanical post-conditions · Suggested promotion
29
-
30
28
  > This is a report of one `afm evolve` cycle (auto-evolution of **this project's local documentation** — the materialized instance of the methodology in `docs/`, never the plugin). It is the **auditable lineage** and the **memory of past attempts** for future cycles. It is not the evolved artifact itself (the edits live in the touched local docs). It is the record of the diagnosis and the gate decisions.
31
29
  <!-- /guidance -->
32
30
 
@@ -17,8 +17,6 @@ frontmatter_for_output: |
17
17
 
18
18
  # Feature {{NNN}} — Plan
19
19
 
20
- > **Inferred stack:** {{read from /docs/ach.md § 1, do not reopen the discussion}}
21
-
22
20
  ## 1. Approach in 3 sentences
23
21
 
24
22
  {{What to build, in which layer, linked to which component-types from `ach.md` § 3.}}
@@ -9,12 +9,11 @@ frontmatter_for_output: |
9
9
  load: cold
10
10
  status: open # open | closed — `closed` once the findings were applied to spec.md or plan.md
11
11
  consumed_by: '<the artifact that cites this research; omit until one does>'
12
+ context: '<the marker from spec.md or plan.md this answers, or "free investigation: <topic>">'
12
13
  ---
13
14
 
14
15
  # Research — Feature {{NNN}} — {{title}}
15
16
 
16
- > **Triggered by:** {{original marker from spec/plan OR "free investigation: <topic>"}}
17
-
18
17
  <!-- guidance -->
19
18
  {{For each topic investigated, repeat the block below. Put multiple topics in the same file if they went to the subagent in the same round.}}
20
19
  <!-- /guidance -->
@@ -21,7 +21,7 @@ frontmatter_for_output: |
21
21
  # Feature {{NNN}} — {{objective title}}
22
22
 
23
23
  <!-- guidance -->
24
- > **Spec:** the what and the why. No technology decision.
24
+ > A spec holds the what and the why. No technology decision.
25
25
  > The linked US and the lifecycle `status` live in the frontmatter, never in the body.
26
26
  <!-- /guidance -->
27
27
 
@@ -3,6 +3,7 @@ type: template
3
3
  description: 'Template rendered during materialization: Induced tasks — parameterized template.'
4
4
  load: cold
5
5
  renders_to: 'docs/templates/feature-tasks.induced.md'
6
+ ancestors: 'Agent Workflow Memory (arXiv:2409.07429): induce a reusable workflow from a successful trajectory, and parameterize the concrete values. Voyager (arXiv:2305.16291): composing from the library beats regenerating from scratch.'
6
7
  frontmatter_for_output: |
7
8
  type: feature-tasks
8
9
  description: '<one sentence: what this task list delivers>'
@@ -12,14 +13,64 @@ frontmatter_for_output: |
12
13
  - '{{glob}}'
13
14
  us: US-{{NNN}} # Omit when no US is linked.
14
15
  rf: RF-{{NN}} # Omit when no RF is linked.
16
+ tasks: # replay each item with `afm task add`, the variables filled; never by hand
17
+ - id: T001
18
+ kind: setup
19
+ files: ['{{src-path}}/domain/{domain}.ts']
20
+ refs: ['US-{{NNN}}']
21
+ parallel: true
22
+ text: 'Create the file `{{src-path}}/domain/{domain}.ts` with exported signature `domain_{domain}`.'
23
+ done: false
24
+ - id: T002
25
+ kind: setup
26
+ files: ['{{src-path}}/domain/{domain}.fixtures.ts']
27
+ refs: ['US-{{NNN}}']
28
+ parallel: true
29
+ text: 'Create the test fixture in `{{src-path}}/domain/{domain}.fixtures.ts`.'
30
+ done: false
31
+ - id: T003
32
+ kind: red
33
+ scenario: 1
34
+ files: ['{{src-path}}/domain/{domain}.test.ts']
35
+ refs: ['US-{{NNN}}']
36
+ text: 'Write test `domain_{domain} returns <result> given <input>`.'
37
+ done: false
38
+ - id: T004
39
+ kind: green
40
+ closes: T003
41
+ files: ['{{src-path}}/domain/{domain}.ts']
42
+ refs: ['US-{{NNN}}']
43
+ text: 'Add the minimal implementation of `domain_{domain}`.'
44
+ done: false
45
+ - id: T005
46
+ kind: refactor
47
+ refs: ['US-{{NNN}}']
48
+ text: 'Extract a helper if DRY reaches 3 callers (rule 8).'
49
+ done: false
50
+ - id: T006
51
+ kind: red
52
+ scenario: 2
53
+ refs: ['US-{{NNN}}']
54
+ text: 'Write a test for the error path of an invalid `{entity}` at `{boundary-procedure}`.'
55
+ done: false
56
+ - id: T007
57
+ kind: green
58
+ closes: T006
59
+ validates: '{boundary-procedure}'
60
+ refs: ['US-{{NNN}}']
61
+ text: 'Add the procedure `{boundary-procedure}` with Zod validation at the boundary (rule 16).'
62
+ done: false
63
+ - id: T008
64
+ kind: reconcile
65
+ text: 'Update `ach.md § 3` if a new component (`{domain}`/`{entity}`) was added, add an ADR if an architectural decision was made, set the US status in `ust.md` to `done`, and move the `status` frontmatter key of `spec.md`, `plan.md` and `tasks.md` to `done`.'
66
+ done: false
15
67
  ---
16
68
 
17
69
  # Induced tasks — parameterized template
18
70
 
19
71
  <!-- guidance -->
20
- > **Source:** induced by `afm export-template` from a feature that is **delivered and 100% green** (`tasks.md` with all tasks `- [X]` — gate `L_eval=1` of AWM). The concrete values of the original feature are parameterized as `{variables}`.
21
- > **Ancestor:** Agent Workflow Memory (arXiv:2409.07429) — induce a reusable workflow from a successful trajectory, and parameterize the concrete values. Voyager (arXiv:2305.16291) — composing from the library beats regenerating from scratch.
22
- > **Use:** the next consumer of this template starts here (fills in the variables) instead of generating tasks from scratch. It keeps the TDD convention of `feature-tasks.template.md`. Each task is a cycle of `core/afm.md § 2`.
72
+ > Induced by `afm export-template` from a feature that is **delivered and 100% green** (every task of its `tasks:` list `done: true` — gate `L_eval=1` of AWM). The concrete values of the original feature are parameterized as `{variables}`.
73
+ > The next consumer of this template starts here instead of generating tasks from scratch: fill in the variables and replay each item of the `tasks:` list above with `afm task add`, then close each one with `afm task done`. It keeps the TDD convention of `feature-tasks.template.md`: a red task, the green task that closes it, an optional refactor (`core/afm.md § 2`), and one reconcile task, last.
23
74
  <!-- /guidance -->
24
75
 
25
76
  ## Variables
@@ -29,39 +80,12 @@ frontmatter_for_output: |
29
80
  | `{product-name}` | product/project name | — |
30
81
  | `{domain}` | module/domain of the feature | `billing`, `auth` |
31
82
  | `{entity}` | central entity touched | `Subscription`, `Session` |
32
- | `{boundary-procedure}` | boundary procedure/handler | `subscriptionCreate` |
33
-
34
- ## Phase 1 — Setup
35
-
36
- - [ ] T001 [P] Create the file `{{src-path}}/domain/{domain}.ts` with exported signature `domain_{domain}`.
37
- - [ ] T002 [P] Create the test fixture in `{{src-path}}/domain/{domain}.fixtures.ts`.
38
-
39
- ## Phase 2 — Foundation (write failing tests first)
40
-
41
- - [ ] T003 — RED: write test `domain_{domain} returns <result> given <input>` in `{{src-path}}/domain/{domain}.test.ts` (US-NNN scenario 1).
42
- - [ ] T004 — GREEN: add the minimal implementation of `domain_{domain}` that passes T003.
43
- - [ ] T005 — REFACTOR: extract a helper if DRY reaches 3 callers (rule 8).
44
-
45
- ## Phase 3 — Boundary
46
-
47
- - [ ] T006 — RED: write a test for procedure `{boundary-procedure}` that calls `domain_{domain}` (US-NNN scenario 1).
48
- - [ ] T007 — GREEN: add the minimal procedure.
49
- - [ ] T008 [P] — RED: write a test for the error path of an invalid `{entity}` (US-NNN scenario 2).
50
- - [ ] T009 — GREEN: add Zod validation at the boundary (rule 16).
51
-
52
- ## Phase 4 — Reconciliation (8.5)
53
-
54
- <!-- guidance -->
55
- > **Version bump.** In a delivery of more than one commit, the version bump is a **precondition of every commit that touches the installable surface**. It is not a task of this phase: a final-phase bump leaves the earlier commits failing the gate.
56
- <!-- /guidance -->
57
-
58
- - [ ] T010 — Update `ach.md § 3` if a new component (`{domain}`/`{entity}`) was added.
59
- - [ ] T011 — Add an ADR if an architectural decision was made (see `ops/adr.md`).
60
- - [ ] T012 — Update the US status in `ust.md` to `done`.
61
- - [ ] T013 — Move the spec status to `done` (the `status` frontmatter key of `spec.md`, `plan.md` and `tasks.md`).
83
+ | `{boundary-procedure}` | boundary procedure/handler, named as its `### Boundary` of plan § 5 | `subscriptionCreate` |
62
84
 
63
85
  ---
64
86
 
65
87
  <!-- guidance -->
66
- *Fill in the variables for this feature. The rest of the TDD structure came from a validated delivery. Every task must reference US-NNN/RF-NN in its commit and must run as a cycle of `core/afm.md § 2`. Do not skip RED (rule 1).*
88
+ *Fill in the variables for this feature. The rest of the TDD structure came from a validated delivery. Every task must reference US-NNN/RF-NN in its commit. Do not skip the red task (rule 1).*
89
+
90
+ > **Version bump.** In a delivery of more than one commit, the version bump is a **precondition of every commit that touches the installable surface**. It is not a task: a bump in the reconcile task leaves the earlier commits failing the gate.
67
91
  <!-- /guidance -->
@@ -9,52 +9,74 @@ frontmatter_for_output: |
9
9
  load: cold
10
10
  status: planned # draft | clarified | planned | in_progress | done | cancelled — the folder's
11
11
  # ONE lifecycle value: `in_progress` with the first task, `done` in the
12
- # same last task (Phase 4, T013) that moves spec.md and plan.md
12
+ # reconcile task that moves spec.md and plan.md
13
13
  for_paths: # carried from plan.md § 2, unchanged
14
14
  - '{{glob}}'
15
15
  us: US-{{NNN}} # carried from spec.md. Omit when spec.md omits it.
16
16
  rf: RF-{{NN}} # carried from spec.md. Omit when spec.md omits it.
17
+ tasks: # written by `afm task add`, corrected by `afm task set`, closed by `afm task done`; never by hand
18
+ - id: T001
19
+ kind: setup
20
+ files: ['{{src-path}}/domain/x.ts']
21
+ refs: ['US-{{NNN}}']
22
+ parallel: true
23
+ text: '{{ex: create the empty file with an exported signature}}'
24
+ done: false
25
+ - id: T002
26
+ kind: red
27
+ scenario: 1
28
+ files: ['{{src-path}}/domain/x.test.ts']
29
+ refs: ['US-{{NNN}}']
30
+ text: '{{ex: test domain_x returns Y given Z}}'
31
+ done: false
32
+ - id: T003
33
+ kind: green
34
+ closes: T002
35
+ files: ['{{src-path}}/domain/x.ts']
36
+ refs: ['US-{{NNN}}']
37
+ text: '{{ex: minimal implementation of domain_x}}'
38
+ done: false
39
+ - id: T004
40
+ kind: refactor
41
+ refs: ['US-{{NNN}}']
42
+ text: '{{ex: extract parseInput if DRY has 3+ callers (rule 8)}}'
43
+ done: false
44
+ - id: T005
45
+ kind: red
46
+ scenario: 2
47
+ files: ['{{src-path}}/procedures/x-create.test.ts']
48
+ refs: ['US-{{NNN}}']
49
+ text: '{{ex: test the INVALID_INPUT error path of the xCreate boundary}}'
50
+ done: false
51
+ - id: T006
52
+ kind: green
53
+ closes: T005
54
+ validates: '{{boundary name of plan § 5, ex: xCreate}}'
55
+ files: ['{{src-path}}/procedures/x-create.ts']
56
+ refs: ['US-{{NNN}}']
57
+ text: '{{ex: Zod validation at the boundary (rule 16)}}'
58
+ done: false
59
+ - id: T007
60
+ kind: reconcile
61
+ text: 'ach.md § 3 if a new component landed, an ADR if a decision materialized, the US status in ust.md, and the status key of spec.md, plan.md and tasks.md set to done'
62
+ done: false
17
63
  ---
18
64
 
19
65
  # Feature {{NNN}} — Tasks
20
66
 
21
67
  <!-- guidance -->
22
- > **Convention:** Tasks follow TDD order. `[P]` marks a task you can run in parallel, with no dependency on the task right before it. Each task is one cycle of `core/afm.md` § 2 (RED → GREEN → REFACTOR → COMMIT).
23
- > **Prerequisite:** `plan.md` has no open `[NEEDS CLARIFICATION:]` marker.
68
+ > The tasks live in the frontmatter `tasks:` list, never as a checklist in this body. Add each one with `afm task add {{NNN}} --kind <setup|red|green|refactor|reconcile> --text "..." [--scenario N] [--closes Txxx] [--validates <boundary>] [--files a,b] [--refs US-NNN,RF-NN] [--parallel]`: the CLI assigns the id, refuses an item that breaks a rule `afm feature lint` grades, and keeps the reconcile task last (reopening it when it was done). Correct a field with `afm task set {{NNN}} Txxx --<field> <value>`. Close each one with `afm task done {{NNN}} Txxx`: a green waits for its red, a refactor for the task before it. Never edit the list by hand.
69
+ > A TDD cycle of `core/afm.md` § 2 is a red task (`scenario: N` of spec § 3), then a green task that closes it (`closes:` the red), then an optional refactor. `parallel: true` marks a task with no dependency on the task right before it; a green or a refactor never is.
70
+ > Each new component of plan § 2 is in the `files:` of one task, with the exact path of the plan cell. Each boundary of plan § 5 needs a task whose `validates:` is its name (`### Boundary <name>`): the task that validates its input (rule 16).
71
+ > One reconcile task, the last: `afm task done` refuses it while another task is open. Run `afm feature lint {{NNN}}` until it exits 0.
72
+ > Before you start, `plan.md` has no open `[NEEDS CLARIFICATION:]` marker.
24
73
  <!-- /guidance -->
25
74
 
26
- ## Phase 1 — Setup
75
+ ## Notes
27
76
 
28
- - [ ] T001 [P] {{ex: create empty file `{{src-path}}/domain/x.ts` with an exported signature}}
29
- - [ ] T002 [P] {{ex: create test fixture in `{{src-path}}/domain/x.fixtures.ts`}}
30
-
31
- ## Phase 2 — Foundation (failing tests first)
32
-
33
- - [ ] T003 — RED: test `domain_x returns Y given Z` in `{{src-path}}/domain/x.test.ts` (US-NNN scenario 1)
34
- - [ ] T004 — GREEN: minimal implementation of `domain_x` that passes T003
35
- - [ ] T005 — REFACTOR: extract `parseInput` if DRY has 3+ callers (rule 8)
36
-
37
- ## Phase 3 — Boundary
38
-
39
- - [ ] T006 — RED: test the `xCreate` procedure that calls `domain_x` (US-NNN scenario 1)
40
- - [ ] T007 — GREEN: minimal procedure
41
- - [ ] T008 [P] — RED: test the `INVALID_INPUT` error path (US-NNN scenario 2)
42
- - [ ] T009 — GREEN: Zod validation at the boundary (rule 16)
43
-
44
- ## Phase 4 — Reconciliation (8.5)
45
-
46
- <!-- guidance -->
47
- > **Version bump.** In a delivery of more than one commit, the version bump is a **precondition of every commit that touches the installable surface**. It is not a task of this phase: a final-phase bump leaves the earlier commits failing the gate.
48
- <!-- /guidance -->
49
-
50
- - [ ] T010 — Update `ach.md` § 3 if a new component landed
51
- - [ ] T011 — Add an ADR if an architectural decision materialized (see `ops/adr.md`)
52
- - [ ] T012 — Update the US status in `ust.md` to `done`
53
- - [ ] T013 — Move the spec status to `done` (the `status` frontmatter key of `spec.md`, `plan.md` and `tasks.md`)
54
-
55
- ---
77
+ {{ex: what the list does not say: the order of the phases, a dependency between tasks, a risk}}
56
78
 
57
79
  <!-- guidance -->
58
- *Every task references US-NNN or RF-NN in the commit (rule in `core/afm.md` § 2, step 7 COMMIT).*
59
- *Every task runs as a `core/afm.md` § 2 cycle. Never skip RED (rule 1 — TDD).*
80
+ > **Version bump.** In a delivery of more than one commit, the version bump is a **precondition of every commit that touches the installable surface**. It is not a task: a bump in the reconcile task leaves the earlier commits failing the gate.
81
+ > Every task references US-NNN or RF-NN in the commit (rule in `core/afm.md` § 2, step 7 COMMIT). Never skip the red task (rule 1 — TDD).
60
82
  <!-- /guidance -->
@@ -6,7 +6,7 @@ load: cold
6
6
 
7
7
  # P1 — Autonomous Delivery
8
8
 
9
- > **For:** POC and MVP work. Speed and no interaction matter more than depth.
9
+ > POC and MVP work. Speed and no interaction matter more than depth.
10
10
  > **Granted per session, never by the repo** (`core/protocol.md` § 6).
11
11
 
12
12
  | Field | Value |
@@ -6,7 +6,7 @@ load: cold
6
6
 
7
7
  # P2 — Assisted Delivery
8
8
 
9
- > **For:** pair programming. The human is the senior dev. The agent escalates early instead of continuing on a wrong path.
9
+ > pair programming. The human is the senior dev. The agent escalates early instead of continuing on a wrong path.
10
10
 
11
11
  | Field | Value |
12
12
  | --- | --- |
@@ -6,7 +6,7 @@ load: cold
6
6
 
7
7
  # P3 — Planned Autonomous Delivery
8
8
 
9
- > **For:** the middle ground — P2 quality with P1 interaction. You plan together. The agent executes alone.
9
+ > the middle ground — P2 quality with P1 interaction. You plan together. The agent executes alone.
10
10
 
11
11
  | Field | Phase 1 (planning) | Phase 2 (execution) |
12
12
  | --- | --- | --- |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tenkara/afm-linux-arm64",
3
- "version": "4.0.0-alpha.7",
3
+ "version": "4.0.0-alpha.8",
4
4
  "description": "The afm binary (CLI and MCP server) for linux-arm64.",
5
5
  "license": "UNLICENSED",
6
6
  "publishConfig": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "afm",
3
- "version": "4.0.0-alpha.7",
3
+ "version": "4.0.0-alpha.8",
4
4
  "description": "AFM (Agent Flow Methodology): hooks and an MCP server that keep a project's docs and its code in step.",
5
5
  "license": "UNLICENSED"
6
6
  }