@tenkara/afm-linux-arm64 4.0.0-alpha.7 → 4.0.0-alpha.9
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.
- package/bin/afm +2 -2
- package/content/CHANGELOG.md +50 -0
- package/content/PRINCIPLES.md +0 -2
- package/content/README-light.md +0 -2
- package/content/README.md +0 -2
- package/content/core/ach.md +0 -5
- package/content/core/afm.md +24 -6
- package/content/core/prd.md +0 -2
- package/content/core/protocol.md +1 -3
- package/content/hooks/README.md +0 -2
- package/content/interview/bootstrap.md +4 -2
- package/content/interview/promotion.md +0 -2
- package/content/interview/refactor.md +0 -2
- package/content/interview/triggers.md +0 -2
- package/content/modules/vireya-ui/ach.patch.md +1 -1
- package/content/ops/analyze.md +8 -7
- package/content/ops/deliver.md +23 -25
- package/content/ops/diagnose.md +1 -4
- package/content/ops/evolve.md +62 -13
- package/content/ops/export-template.md +1 -1
- package/content/ops/generalize.md +1 -4
- package/content/ops/policy.md +0 -2
- package/content/ops/reflect.md +19 -17
- package/content/ops/remediate.md +1 -4
- package/content/ops/restructure.md +3 -6
- package/content/ops/rule.md +0 -2
- package/content/ops/tasks.md +18 -18
- package/content/ops/update.md +29 -4
- package/content/ops/verify.md +0 -2
- package/content/questions/init.questions.yaml +13 -0
- package/content/roles/explorer.md +1 -1
- package/content/roles/reviewer.md +1 -1
- package/content/rubrics/failure-classification.md +0 -2
- package/content/rubrics/solid-triggers.md +0 -2
- package/content/skills/adr.md +3 -3
- package/content/skills/analyze.md +3 -9
- package/content/skills/clarify.md +2 -8
- package/content/skills/deliver.md +4 -20
- package/content/skills/diagnose.md +3 -11
- package/content/skills/evolve.md +6 -30
- package/content/skills/export-template.md +2 -5
- package/content/skills/generalize.md +6 -22
- package/content/skills/gotcha.md +3 -3
- package/content/skills/init.md +2 -7
- package/content/skills/plan.md +3 -9
- package/content/skills/policy.md +0 -6
- package/content/skills/promote.md +1 -3
- package/content/skills/protocol.md +2 -3
- package/content/skills/reconcile.md +2 -6
- package/content/skills/refactor.md +2 -7
- package/content/skills/reflect.md +7 -17
- package/content/skills/remediate.md +3 -9
- package/content/skills/restructure.md +8 -14
- package/content/skills/rule.md +3 -4
- package/content/skills/specify.md +3 -9
- package/content/skills/tasks.md +5 -15
- package/content/skills/update.md +6 -4
- package/content/skills/verify.md +1 -3
- package/content/templates/adr.template.md +1 -1
- package/content/templates/evolution-report.template.md +5 -2
- package/content/templates/feature-plan.template.md +0 -2
- package/content/templates/feature-research.template.md +1 -2
- package/content/templates/feature-spec.template.md +1 -1
- package/content/templates/feature-tasks.induced.template.md +58 -34
- package/content/templates/feature-tasks.template.md +56 -34
- package/content/templates/protocols/p1.md +1 -1
- package/content/templates/protocols/p2.md +1 -1
- package/content/templates/protocols/p3.md +1 -1
- package/package.json +1 -1
- package/plugin/agy/plugin.json +1 -1
- package/plugin/agy/skills/afm-adr/SKILL.md +7 -3
- package/plugin/agy/skills/afm-analyze/SKILL.md +5 -7
- package/plugin/agy/skills/afm-clarify/SKILL.md +4 -6
- package/plugin/agy/skills/afm-deliver/SKILL.md +6 -20
- package/plugin/agy/skills/afm-diagnose/SKILL.md +5 -9
- package/plugin/agy/skills/afm-evolve/SKILL.md +9 -29
- package/plugin/agy/skills/afm-export-template/SKILL.md +6 -5
- package/plugin/agy/skills/afm-generalize/SKILL.md +8 -20
- package/plugin/agy/skills/afm-gotcha/SKILL.md +7 -3
- package/plugin/agy/skills/afm-init/SKILL.md +3 -6
- package/plugin/agy/skills/afm-plan/SKILL.md +5 -7
- package/plugin/agy/skills/afm-policy/SKILL.md +2 -4
- package/plugin/agy/skills/afm-promote/SKILL.md +4 -2
- package/plugin/agy/skills/afm-protocol/SKILL.md +6 -3
- package/plugin/agy/skills/afm-reconcile/SKILL.md +5 -5
- package/plugin/agy/skills/afm-refactor/SKILL.md +3 -6
- package/plugin/agy/skills/afm-reflect/SKILL.md +9 -15
- package/plugin/agy/skills/afm-remediate/SKILL.md +5 -7
- package/plugin/agy/skills/afm-restructure/SKILL.md +10 -12
- package/plugin/agy/skills/afm-rule/SKILL.md +7 -4
- package/plugin/agy/skills/afm-specify/SKILL.md +5 -7
- package/plugin/agy/skills/afm-tasks/SKILL.md +7 -13
- package/plugin/agy/skills/afm-update/SKILL.md +10 -4
- package/plugin/agy/skills/afm-verify/SKILL.md +4 -2
- package/plugin/claude-code/.claude-plugin/plugin.json +1 -1
- package/plugin/claude-code/agents/afm-explorer.md +1 -1
- package/plugin/claude-code/agents/afm-reviewer.md +1 -1
- package/plugin/claude-code/skills/adr/SKILL.md +7 -3
- package/plugin/claude-code/skills/analyze/SKILL.md +5 -7
- package/plugin/claude-code/skills/clarify/SKILL.md +4 -6
- package/plugin/claude-code/skills/deliver/SKILL.md +6 -20
- package/plugin/claude-code/skills/diagnose/SKILL.md +5 -9
- package/plugin/claude-code/skills/evolve/SKILL.md +9 -29
- package/plugin/claude-code/skills/export-template/SKILL.md +6 -5
- package/plugin/claude-code/skills/generalize/SKILL.md +8 -20
- package/plugin/claude-code/skills/gotcha/SKILL.md +7 -3
- package/plugin/claude-code/skills/init/SKILL.md +3 -6
- package/plugin/claude-code/skills/plan/SKILL.md +5 -7
- package/plugin/claude-code/skills/policy/SKILL.md +2 -4
- package/plugin/claude-code/skills/promote/SKILL.md +4 -2
- package/plugin/claude-code/skills/protocol/SKILL.md +6 -3
- package/plugin/claude-code/skills/reconcile/SKILL.md +5 -5
- package/plugin/claude-code/skills/refactor/SKILL.md +3 -6
- package/plugin/claude-code/skills/reflect/SKILL.md +9 -15
- package/plugin/claude-code/skills/remediate/SKILL.md +5 -7
- package/plugin/claude-code/skills/restructure/SKILL.md +10 -12
- package/plugin/claude-code/skills/rule/SKILL.md +7 -4
- package/plugin/claude-code/skills/specify/SKILL.md +5 -7
- package/plugin/claude-code/skills/tasks/SKILL.md +7 -13
- package/plugin/claude-code/skills/update/SKILL.md +10 -4
- package/plugin/claude-code/skills/verify/SKILL.md +4 -2
- package/plugin/opencode/afm/index.js +245 -0
- package/plugin/opencode/afm/tui.js +21 -0
- package/plugin/opencode/agents/afm-executor.md +22 -14
- package/plugin/opencode/agents/afm-explorer.md +73 -28
- package/plugin/opencode/agents/afm-reviewer.md +73 -28
- package/plugin/opencode/skills/afm-adr/SKILL.md +7 -3
- package/plugin/opencode/skills/afm-analyze/SKILL.md +5 -7
- package/plugin/opencode/skills/afm-clarify/SKILL.md +4 -6
- package/plugin/opencode/skills/afm-deliver/SKILL.md +6 -20
- package/plugin/opencode/skills/afm-diagnose/SKILL.md +5 -9
- package/plugin/opencode/skills/afm-evolve/SKILL.md +9 -29
- package/plugin/opencode/skills/afm-export-template/SKILL.md +6 -5
- package/plugin/opencode/skills/afm-generalize/SKILL.md +8 -20
- package/plugin/opencode/skills/afm-gotcha/SKILL.md +7 -3
- package/plugin/opencode/skills/afm-init/SKILL.md +3 -6
- package/plugin/opencode/skills/afm-plan/SKILL.md +5 -7
- package/plugin/opencode/skills/afm-policy/SKILL.md +2 -4
- package/plugin/opencode/skills/afm-promote/SKILL.md +4 -2
- package/plugin/opencode/skills/afm-protocol/SKILL.md +6 -3
- package/plugin/opencode/skills/afm-reconcile/SKILL.md +5 -5
- package/plugin/opencode/skills/afm-refactor/SKILL.md +3 -6
- package/plugin/opencode/skills/afm-reflect/SKILL.md +9 -15
- package/plugin/opencode/skills/afm-remediate/SKILL.md +5 -7
- package/plugin/opencode/skills/afm-restructure/SKILL.md +10 -12
- package/plugin/opencode/skills/afm-rule/SKILL.md +7 -4
- package/plugin/opencode/skills/afm-specify/SKILL.md +5 -7
- package/plugin/opencode/skills/afm-tasks/SKILL.md +7 -13
- package/plugin/opencode/skills/afm-update/SKILL.md +10 -4
- package/plugin/opencode/skills/afm-verify/SKILL.md +4 -2
- package/plugin/opencode/afm.js +0 -196
|
@@ -8,9 +8,7 @@ description: |
|
|
|
8
8
|
|
|
9
9
|
# AFM — Restructure (context architecture health)
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
> **Carve-out (does not overlap existing ops):** `diagnose` A1 finds a **dead reference** (the path does not exist). `restructure` staleness finds a path that **exists but changed** while the doc did not. `reconcile` adds **missing** information. `restructure` relocates information that **exists but sits in the wrong place**. `reflect` targets **clarity**. `restructure` targets **location and freshness**. `evolve` is the **orchestrator** that composes this skill when `diagnose` flags staleness or bloat.
|
|
11
|
+
> **Carve-out (does not overlap existing ops):** `afm diagnose` A1 finds a **dead reference** (the path does not exist). `restructure` staleness finds a path that **exists but changed** while the doc did not. `afm reconcile` adds **missing** information. `restructure` relocates information that **exists but sits in the wrong place**. `afm reflect` targets **clarity**. `restructure` targets **location and freshness**. `afm evolve` is the **orchestrator** that composes this skill when `afm diagnose` flags staleness or bloat.
|
|
14
12
|
>
|
|
15
13
|
> **Maturity (honest YAGNI):** the actionable core today is **staleness** (from git) plus **findability**. **Temperature tiering** (always-hot vs on-demand) is an **opt-in** ADR proposal, only for a doc that has actually outgrown its size. Small docs do not need it.
|
|
16
14
|
|
|
@@ -18,7 +16,7 @@ This is a mechanism skill of AFM. The canonical procedure is the op file that `a
|
|
|
18
16
|
|
|
19
17
|
This is a disambiguation guide for a skill that has already activated. It does not gate activation, so it stays in the body, not in the resident listing.
|
|
20
18
|
|
|
21
|
-
A path that does not exist belongs to `afm diagnose` (A1). Staleness means the path exists but changed. Information never documented belongs to `reconcile` → `afm gotcha` or `afm rule`. An ambiguous doc belongs to `afm reflect`. Merging gotchas belongs to `afm generalize`. The full cycle belongs to `afm evolve`.
|
|
19
|
+
A path that does not exist belongs to `afm diagnose` (A1). Staleness means the path exists but changed. Information never documented belongs to passive mode (`afm reconcile`) → `afm gotcha` or `afm rule`. An ambiguous doc belongs to `afm reflect`. Merging gotchas belongs to `afm generalize`. The full cycle belongs to `afm evolve`.
|
|
22
20
|
|
|
23
21
|
## Pre-check
|
|
24
22
|
|
|
@@ -28,25 +26,21 @@ A path that does not exist belongs to `afm diagnose` (A1). Staleness means the p
|
|
|
28
26
|
|
|
29
27
|
## Procedure
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
Use these five steps.
|
|
32
30
|
|
|
33
31
|
1. **Staleness scan.** `afm doctor --json` runs it (findings with axis `staleness` and `dead-gotcha`); read them. The git trigger fires in two cases. First case: a path cited in the doc has a later last commit than the doc. Second case: the doc has been stale for more than N commits. A hit is a candidate, not a verdict. The scan never rewrites the doc on its own.
|
|
34
|
-
2. **Findability.** Relocate or cross-reference information that exists but sits buried or in the wrong doc. Cite both locations. Route information that is genuinely missing to `reconcile
|
|
32
|
+
2. **Findability.** Relocate or cross-reference information that exists but sits buried or in the wrong doc. Cite both locations. Route information that is genuinely missing to passive mode (`afm reconcile`).
|
|
35
33
|
3. **Temperature partition.** Propose a hot/on-demand loading strategy as an opt-in ADR. Do this only when a doc has outgrown its size. Preserve 100% of the content.
|
|
36
|
-
4. **Its own gate.** This gate is load-bearing and earned, one `afm ask restructure --scope <item-slug>` per finding. It follows the **shared-proposal discipline** in `evolve.md` (`afm path ops/evolve.md`), instead of a duplicate copy of that discipline. `evolve` suppresses this gate when it runs.
|
|
37
|
-
5. **Record.** Write the result to `docs/evolution/NNN-<date>.md`. Suggest `promote` if the finding generalizes.
|
|
34
|
+
4. **Its own gate.** This gate is load-bearing and earned, one `afm ask restructure --scope <item-slug>` per finding. It follows the **shared-proposal discipline** in `evolve.md` (`afm path ops/evolve.md`), instead of a duplicate copy of that discipline. `afm evolve` suppresses this gate when it runs.
|
|
35
|
+
5. **Record.** Write the result to `docs/evolution/NNN-<date>.md`. Suggest `afm promote` if the finding generalizes.
|
|
38
36
|
|
|
39
37
|
## Invariant principles
|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
Most relevant here:
|
|
42
40
|
|
|
43
41
|
- #2: get git evidence before you propose a change.
|
|
44
42
|
- #3: staleness needs an executable git trigger.
|
|
45
|
-
- #4/#5: missing product content becomes `[TBD]` or goes to `reconcile
|
|
43
|
+
- #4/#5: missing product content becomes `[TBD]` or goes to passive mode (`afm reconcile`). Never invent it.
|
|
46
44
|
- #6/#8: self-check the work, then pass an earned gate.
|
|
47
45
|
|
|
48
46
|
**No new principle here.** `restructure` is a composed materialization. The doctrine lives in the op file.
|
|
49
|
-
|
|
50
|
-
## Version
|
|
51
|
-
|
|
52
|
-
Content version: `afm version` prints it.
|
package/content/skills/rule.md
CHANGED
|
@@ -7,9 +7,8 @@ description: |
|
|
|
7
7
|
|
|
8
8
|
# AFM — Rule
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
skill keeps only the judgment.
|
|
10
|
+
The CLI owns the number, the rule file, the index line and the runner skeleton, and refuses a rule with no
|
|
11
|
+
honest trigger form. This skill keeps only the judgment.
|
|
13
12
|
|
|
14
13
|
## When NOT to activate
|
|
15
14
|
|
|
@@ -36,7 +35,7 @@ that already exist.
|
|
|
36
35
|
|
|
37
36
|
## Invariant principles
|
|
38
37
|
|
|
39
|
-
|
|
38
|
+
Most relevant here: #3 (a hard rule needs
|
|
40
39
|
a mechanical trigger, or it is a principle instead) and #6 (autonomy-first: materialize the change and
|
|
41
40
|
report it).
|
|
42
41
|
|
|
@@ -7,11 +7,9 @@ description: |
|
|
|
7
7
|
|
|
8
8
|
# AFM — Specify
|
|
9
9
|
|
|
10
|
-
An atomic skill. The procedure lives in the op: read it with `afm path ops/specify.md`, end to end, and follow it literally.
|
|
11
|
-
|
|
12
10
|
## When NOT to activate
|
|
13
11
|
|
|
14
|
-
A trivial change (no feature folder needed) goes straight to the `afm.md § 2` loop. A full end-to-end delivery is `deliver`, which composes this op.
|
|
12
|
+
A trivial change (no feature folder needed) goes straight to the `afm.md § 2` loop. A full end-to-end delivery is `afm deliver`, which composes this op.
|
|
15
13
|
|
|
16
14
|
## Pre-check
|
|
17
15
|
|
|
@@ -23,12 +21,8 @@ The number comes from `afm next-id feature`, never by hand. What is left to you
|
|
|
23
21
|
|
|
24
22
|
## Invariant principles
|
|
25
23
|
|
|
26
|
-
|
|
24
|
+
Most relevant here: #2 (discover-first: compute the heuristic and the US from the scan), #5 (never invent a success criterion) and #6 (autonomy-first).
|
|
27
25
|
|
|
28
26
|
## Continuous doctrine
|
|
29
27
|
|
|
30
|
-
Passive mode is
|
|
31
|
-
|
|
32
|
-
## Version
|
|
33
|
-
|
|
34
|
-
`afm version`. History: `afm path CHANGELOG.md`.
|
|
28
|
+
Passive mode (`afm reconcile`) is always on. This skill covers only the opening of the feature.
|
package/content/skills/tasks.md
CHANGED
|
@@ -1,34 +1,24 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tasks
|
|
3
3
|
description: |
|
|
4
|
-
Generates `tasks.md` in TDD order
|
|
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
|
|
|
8
8
|
# AFM — Tasks
|
|
9
9
|
|
|
10
|
-
An atomic skill. The procedure lives in the op: read it with `afm path ops/tasks.md`, end to end, and follow it literally.
|
|
11
|
-
|
|
12
10
|
## When NOT to activate
|
|
13
11
|
|
|
14
|
-
There is no `plan.md` yet: run `afm plan` first. An end-to-end delivery is `deliver`, which composes this op.
|
|
12
|
+
There is no `plan.md` yet: run `afm plan` first. An end-to-end delivery is `afm deliver`, which composes this op.
|
|
15
13
|
|
|
16
14
|
## Pre-check
|
|
17
15
|
|
|
18
16
|
Run `afm preflight` (exit 3: stop and suggest `afm init` or `afm refactor`). Run `afm feature status <NNN> --json`: a non-empty `blockers` is an open `[NEEDS CLARIFICATION:]` in the plan. That is a hard refusal with no override, not a question.
|
|
19
17
|
|
|
20
|
-
##
|
|
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.
|
|
23
|
-
|
|
24
|
-
## Invariant principles
|
|
18
|
+
## Principles
|
|
25
19
|
|
|
26
|
-
|
|
20
|
+
Most relevant here: #5 (every task traces to a US or RF) and rule 1 (TDD: no green task without the red task it closes).
|
|
27
21
|
|
|
28
22
|
## Continuous doctrine
|
|
29
23
|
|
|
30
|
-
Passive mode is
|
|
31
|
-
|
|
32
|
-
## Version
|
|
33
|
-
|
|
34
|
-
`afm version`. History: `afm path CHANGELOG.md`.
|
|
24
|
+
Passive mode (`afm reconcile`) is always on. This skill covers only the task list.
|
package/content/skills/update.md
CHANGED
|
@@ -7,8 +7,7 @@ description: |
|
|
|
7
7
|
|
|
8
8
|
# AFM — Update (sync instance-plugin)
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
codemod registry, proves each op and moves the pin. This skill keeps the judgment.
|
|
10
|
+
The CLI runs the codemod registry, proves each op and moves the pin. This skill keeps the judgment.
|
|
12
11
|
|
|
13
12
|
> **Carve-out (does not overlap existing ops):** `afm init` and `afm refactor` **create** the instance
|
|
14
13
|
> (bootstrap). `update` brings an **existing** instance forward, the path that `afm refactor` refuses.
|
|
@@ -42,13 +41,16 @@ the run. A pin **ahead** of the binary is an anomaly: report it, never roll it b
|
|
|
42
41
|
4. **Language migration** (when the instance is not English): read `prd.md` § 11.1 FIRST and derive the
|
|
43
42
|
excluded scope from it, and only then read a file. `[TBD]` there stops the step and asks
|
|
44
43
|
`afm ask update-strings`. It never picks a language. The artifacts question is
|
|
45
|
-
`afm ask update-artifacts`.
|
|
44
|
+
`afm ask update-artifacts`. On migrate, run the rewrite as one orchestrated batch through
|
|
45
|
+
{{host:workflow}}, with a light model per agent ({{host:light-model}}) for the rewrite and the loss
|
|
46
|
+
check. Escalate only a flagged file to a capable model. The session model keeps the excluded scope and
|
|
47
|
+
the final gate.
|
|
46
48
|
5. Post-conditions: `afm index --check` returns 0 and the plugin boundary stays clean. Report in chat what
|
|
47
49
|
migrated and what stayed pending. Under `afm evolve`, feed it to `docs/evolution/`.
|
|
48
50
|
|
|
49
51
|
## Invariant principles
|
|
50
52
|
|
|
51
|
-
|
|
53
|
+
Most relevant here: #2 (discover-first): the proof of
|
|
52
54
|
need is the grep that shows what is missing. Follow #4/#5: materialize only what the plugin already provides
|
|
53
55
|
ready-made, and never invent missing product content. Follow #6 (autonomy-first with a gate). Bright line
|
|
54
56
|
#7 applies: only **read** the plugin, and write only to the instance.
|
package/content/skills/verify.md
CHANGED
|
@@ -7,8 +7,6 @@ description: |
|
|
|
7
7
|
|
|
8
8
|
# AFM — Verify (stamp a human review)
|
|
9
9
|
|
|
10
|
-
Atomic skill of `afm`. The canonical procedure is the op `afm path ops/verify`.
|
|
11
|
-
|
|
12
10
|
## When not to activate
|
|
13
11
|
|
|
14
12
|
Never on ordinary work, and never on your own output. This skill records that a PERSON read a document. An
|
|
@@ -28,4 +26,4 @@ agent actor. Report the tier that resulted and what it means.
|
|
|
28
26
|
|
|
29
27
|
## Invariant principles
|
|
30
28
|
|
|
31
|
-
|
|
29
|
+
Most relevant here: #5 is load-bearing.
|
|
@@ -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>' #
|
|
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.
|
|
@@ -11,6 +11,7 @@ frontmatter_for_output: |
|
|
|
11
11
|
date: 'YYYY-MM-DD'
|
|
12
12
|
cycle_trigger: '<explicit invocation or the symptom stated by the user: cite it>'
|
|
13
13
|
new_signal: '<which Class A delta or symptom released the cooldown>'
|
|
14
|
+
resolves: [] # optional: fingerprints (from `afm sessions signals`) of the friction this cycle fixed
|
|
14
15
|
---
|
|
15
16
|
|
|
16
17
|
# Evolution cycle {{NNN}} — {{date YYYY-MM-DD}}
|
|
@@ -20,13 +21,15 @@ frontmatter_for_output: |
|
|
|
20
21
|
> sorting these names, and an ordinal-first name sorts by ordinal before date — a low ordinal on
|
|
21
22
|
> a recent date rewinds the window in silence. `NNN` is now only a same-day tiebreak.
|
|
22
23
|
>
|
|
24
|
+
> **`resolves:` (frontmatter, optional)** lists the signal fingerprints this cycle fixed. `afm sessions signals`
|
|
25
|
+
> marks a signal with one of them `resolved` when it happened before this report's date, and `regressed` when
|
|
26
|
+
> it happens again after it (the fix did not hold).
|
|
27
|
+
>
|
|
23
28
|
> **`mechanism:` (frontmatter) is mandatory and it is not decoration.** `reflect`, `evolve` and `restructure`
|
|
24
29
|
> all write into this one directory, and each one's cadence window is "since MY last report".
|
|
25
30
|
> Without the field the windows collapse into one, and the cheap mechanism starves the expensive
|
|
26
31
|
> one: measured on 2026-08-30, five reports, all five `reflect`, and `evolve` had never run.
|
|
27
32
|
|
|
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
33
|
> 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
34
|
<!-- /guidance -->
|
|
32
35
|
|
|
@@ -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
|
-
>
|
|
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
|
-
>
|
|
21
|
-
>
|
|
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
|
|
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
|
-
#
|
|
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
|
-
>
|
|
23
|
-
>
|
|
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
|
-
##
|
|
75
|
+
## Notes
|
|
27
76
|
|
|
28
|
-
|
|
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
|
-
|
|
59
|
-
|
|
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
|
-
>
|
|
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
|
-
>
|
|
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
|
-
>
|
|
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
package/plugin/agy/plugin.json
CHANGED
|
@@ -9,8 +9,10 @@ description: |
|
|
|
9
9
|
|
|
10
10
|
> **Questions in this host.** `afm ask <op>` prompts only in a terminal, and your shell tool has none: it exits 2. Run `afm ask <op> --json` instead and put each pending question to the operator with the host's question tool when it has one, and otherwise in chat as a numbered list: the `prompt`, then the `options` with their descriptions, the recommended one first and marked. Wait for the answer. Then record each choice with `afm answer <op> <id> <label>` (one label per selected option). Run `afm ask <op>` again: `all questions answered` means the op may go on.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
> **Procedure.** Run `afm read ops/adr.md` and follow it; read an on-demand section when its condition holds.
|
|
13
|
+
|
|
14
|
+
The CLI owns the number, the template, the frontmatter, the supersede link and the index. This skill keeps
|
|
15
|
+
only the judgment.
|
|
14
16
|
|
|
15
17
|
## When NOT to activate
|
|
16
18
|
|
|
@@ -37,8 +39,10 @@ project (signal: `afm.md` § 3.1 forward-only exists). A greenfield project forb
|
|
|
37
39
|
|
|
38
40
|
## Invariant principles
|
|
39
41
|
|
|
40
|
-
|
|
42
|
+
Additional #9 (a retroactive ADR is
|
|
41
43
|
load-bearing-only) applies ONLY in a refactored project.
|
|
42
44
|
|
|
43
45
|
Passive mode (`afm-reconcile`) is always on and can propose `afm-adr` when it detects a "novel structural
|
|
44
46
|
decision" signal. This skill covers only the active creation.
|
|
47
|
+
|
|
48
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -9,7 +9,7 @@ description: |
|
|
|
9
9
|
|
|
10
10
|
> **Questions in this host.** `afm ask <op>` prompts only in a terminal, and your shell tool has none: it exits 2. Run `afm ask <op> --json` instead and put each pending question to the operator with the host's question tool when it has one, and otherwise in chat as a numbered list: the `prompt`, then the `options` with their descriptions, the recommended one first and marked. Wait for the answer. Then record each choice with `afm answer <op> <id> <label>` (one label per selected option). Run `afm ask <op>` again: `all questions answered` means the op may go on.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
> **Procedure.** Run `afm read ops/analyze.md` and follow it; read an on-demand section when its condition holds.
|
|
13
13
|
|
|
14
14
|
## When NOT to activate
|
|
15
15
|
|
|
@@ -21,16 +21,14 @@ Run `afm preflight` (exit 3: no `docs/.afm-version`, stop and suggest `afm-init`
|
|
|
21
21
|
|
|
22
22
|
## Procedure
|
|
23
23
|
|
|
24
|
-
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`)
|
|
24
|
+
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.
|
|
25
25
|
|
|
26
26
|
## Invariant principles
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
Most relevant here: #2 (detection is an autonomous scan, not a question), #5 (no finding without evidence) and #6 (analyze is read-only: it reports in chat, writes no file, and remediates only on request).
|
|
29
29
|
|
|
30
30
|
## Continuous doctrine
|
|
31
31
|
|
|
32
|
-
Passive mode is
|
|
32
|
+
Passive mode (`afm-reconcile`) is always on. This skill covers only active auditing.
|
|
33
33
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
`afm version`. History: `afm path CHANGELOG.md`.
|
|
34
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|