@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
|
@@ -10,9 +10,9 @@ description: |
|
|
|
10
10
|
|
|
11
11
|
> **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.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
> **Procedure.** Run `afm read ops/restructure.md` and follow it; read an on-demand section when its condition holds.
|
|
14
14
|
|
|
15
|
-
> **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.
|
|
15
|
+
> **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.
|
|
16
16
|
>
|
|
17
17
|
> **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.
|
|
18
18
|
|
|
@@ -20,7 +20,7 @@ This is a mechanism skill of AFM. The canonical procedure is the op file that `a
|
|
|
20
20
|
|
|
21
21
|
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.
|
|
22
22
|
|
|
23
|
-
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`.
|
|
23
|
+
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`.
|
|
24
24
|
|
|
25
25
|
## Pre-check
|
|
26
26
|
|
|
@@ -30,25 +30,23 @@ A path that does not exist belongs to `afm-diagnose` (A1). Staleness means the p
|
|
|
30
30
|
|
|
31
31
|
## Procedure
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
Use these five steps.
|
|
34
34
|
|
|
35
35
|
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.
|
|
36
|
-
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
|
|
36
|
+
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`).
|
|
37
37
|
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.
|
|
38
|
-
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.
|
|
39
|
-
5. **Record.** Write the result to `docs/evolution/NNN-<date>.md`. Suggest `promote` if the finding generalizes.
|
|
38
|
+
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.
|
|
39
|
+
5. **Record.** Write the result to `docs/evolution/NNN-<date>.md`. Suggest `afm-promote` if the finding generalizes.
|
|
40
40
|
|
|
41
41
|
## Invariant principles
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
Most relevant here:
|
|
44
44
|
|
|
45
45
|
- #2: get git evidence before you propose a change.
|
|
46
46
|
- #3: staleness needs an executable git trigger.
|
|
47
|
-
- #4/#5: missing product content becomes `[TBD]` or goes to `reconcile
|
|
47
|
+
- #4/#5: missing product content becomes `[TBD]` or goes to passive mode (`afm-reconcile`). Never invent it.
|
|
48
48
|
- #6/#8: self-check the work, then pass an earned gate.
|
|
49
49
|
|
|
50
50
|
**No new principle here.** `restructure` is a composed materialization. The doctrine lives in the op file.
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
Content version: `afm version` prints it.
|
|
52
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -9,9 +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
|
-
|
|
14
|
-
|
|
12
|
+
> **Procedure.** Run `afm read ops/rule.md` and follow it; read an on-demand section when its condition holds.
|
|
13
|
+
|
|
14
|
+
The CLI owns the number, the rule file, the index line and the runner skeleton, and refuses a rule with no
|
|
15
|
+
honest trigger form. This skill keeps only the judgment.
|
|
15
16
|
|
|
16
17
|
## When NOT to activate
|
|
17
18
|
|
|
@@ -38,9 +39,11 @@ that already exist.
|
|
|
38
39
|
|
|
39
40
|
## Invariant principles
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
Most relevant here: #3 (a hard rule needs
|
|
42
43
|
a mechanical trigger, or it is a principle instead) and #6 (autonomy-first: materialize the change and
|
|
43
44
|
report it).
|
|
44
45
|
|
|
45
46
|
Passive mode (`afm-reconcile`) is always on and can propose `afm-rule` when it detects the signal "the user
|
|
46
47
|
corrected an approach with a reusable rule".
|
|
48
|
+
|
|
49
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -9,11 +9,11 @@ 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/specify.md` and follow it; read an on-demand section when its condition holds.
|
|
13
13
|
|
|
14
14
|
## When NOT to activate
|
|
15
15
|
|
|
16
|
-
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.
|
|
16
|
+
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.
|
|
17
17
|
|
|
18
18
|
## Pre-check
|
|
19
19
|
|
|
@@ -25,12 +25,10 @@ The number comes from `afm next-id feature`, never by hand. What is left to you
|
|
|
25
25
|
|
|
26
26
|
## Invariant principles
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
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).
|
|
29
29
|
|
|
30
30
|
## Continuous doctrine
|
|
31
31
|
|
|
32
|
-
Passive mode is
|
|
32
|
+
Passive mode (`afm-reconcile`) is always on. This skill covers only the opening of the feature.
|
|
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`.
|
|
@@ -1,34 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: afm-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
|
-
|
|
10
|
+
> **Procedure.** Run `afm read ops/tasks.md` and follow it; read an on-demand section when its condition holds.
|
|
11
11
|
|
|
12
12
|
## When NOT to activate
|
|
13
13
|
|
|
14
|
-
There is no `plan.md` yet: run `afm-plan` first. An end-to-end delivery is `deliver`, which composes this op.
|
|
14
|
+
There is no `plan.md` yet: run `afm-plan` first. An end-to-end delivery is `afm-deliver`, which composes this op.
|
|
15
15
|
|
|
16
16
|
## Pre-check
|
|
17
17
|
|
|
18
18
|
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
19
|
|
|
20
|
-
##
|
|
20
|
+
## Principles
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
## Invariant principles
|
|
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).
|
|
22
|
+
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
23
|
|
|
28
24
|
## Continuous doctrine
|
|
29
25
|
|
|
30
|
-
Passive mode is
|
|
31
|
-
|
|
32
|
-
## Version
|
|
26
|
+
Passive mode (`afm-reconcile`) is always on. This skill covers only the task list.
|
|
33
27
|
|
|
34
|
-
`afm version
|
|
28
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -9,8 +9,9 @@ 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/update.md` and follow it; read an on-demand section when its condition holds.
|
|
13
|
+
|
|
14
|
+
The CLI runs the codemod registry, proves each op and moves the pin. This skill keeps the judgment.
|
|
14
15
|
|
|
15
16
|
> **Carve-out (does not overlap existing ops):** `afm-init` and `afm-refactor` **create** the instance
|
|
16
17
|
> (bootstrap). `update` brings an **existing** instance forward, the path that `afm-refactor` refuses.
|
|
@@ -44,15 +45,20 @@ the run. A pin **ahead** of the binary is an anomaly: report it, never roll it b
|
|
|
44
45
|
4. **Language migration** (when the instance is not English): read `prd.md` § 11.1 FIRST and derive the
|
|
45
46
|
excluded scope from it, and only then read a file. `[TBD]` there stops the step and asks
|
|
46
47
|
`afm ask update-strings`. It never picks a language. The artifacts question is
|
|
47
|
-
`afm ask update-artifacts`.
|
|
48
|
+
`afm ask update-artifacts`. On migrate, run the rewrite as one orchestrated batch through
|
|
49
|
+
parallel subagents, where the host has them, else one file at a time, with a light model per agent (the smallest model the host offers) for the rewrite and the loss
|
|
50
|
+
check. Escalate only a flagged file to a capable model. The session model keeps the excluded scope and
|
|
51
|
+
the final gate.
|
|
48
52
|
5. Post-conditions: `afm index --check` returns 0 and the plugin boundary stays clean. Report in chat what
|
|
49
53
|
migrated and what stayed pending. Under `afm-evolve`, feed it to `docs/evolution/`.
|
|
50
54
|
|
|
51
55
|
## Invariant principles
|
|
52
56
|
|
|
53
|
-
|
|
57
|
+
Most relevant here: #2 (discover-first): the proof of
|
|
54
58
|
need is the grep that shows what is missing. Follow #4/#5: materialize only what the plugin already provides
|
|
55
59
|
ready-made, and never invent missing product content. Follow #6 (autonomy-first with a gate). Bright line
|
|
56
60
|
#7 applies: only **read** the plugin, and write only to the instance.
|
|
57
61
|
|
|
58
62
|
**No new principle here.** `update` is composed materialization. The doctrine lives in the op file.
|
|
63
|
+
|
|
64
|
+
**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/verify.md` and follow it; read an on-demand section when its condition holds.
|
|
13
13
|
|
|
14
14
|
## When not to activate
|
|
15
15
|
|
|
@@ -30,4 +30,6 @@ agent actor. Report the tier that resulted and what it means.
|
|
|
30
30
|
|
|
31
31
|
## Invariant principles
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
Most relevant here: #5 is load-bearing.
|
|
34
|
+
|
|
35
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "afm",
|
|
3
3
|
"description": "Agent Flow Methodology: autonomous discovery, a strict TDD delivery loop, and documentation that evolves from measured evidence. The CLI owns state, ids, gates and lint; the skills carry the judgment.",
|
|
4
|
-
"version": "4.0.0-alpha.
|
|
4
|
+
"version": "4.0.0-alpha.9",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Mapree"
|
|
7
7
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: afm-explorer
|
|
3
3
|
description: Read-only investigator. Answers one question from the code, the docs or the web, cites what it read, and changes nothing; dispatched with a brief.
|
|
4
|
-
tools: mcp__plugin_afm_afm__approve, mcp__plugin_afm_afm__config, mcp__plugin_afm_afm__detect, mcp__plugin_afm_afm__doctor, mcp__plugin_afm_afm__failures_promotable, mcp__plugin_afm_afm__feature_lint, mcp__plugin_afm_afm__feature_status, mcp__plugin_afm_afm__gate, mcp__plugin_afm_afm__index, mcp__plugin_afm_afm__lang, mcp__plugin_afm_afm__next_id, mcp__plugin_afm_afm__path, mcp__plugin_afm_afm__policy, mcp__plugin_afm_afm__preflight, mcp__plugin_afm_afm__version, Read, Grep, Glob, WebFetch, WebSearch
|
|
4
|
+
tools: mcp__plugin_afm_afm__approve, mcp__plugin_afm_afm__config, mcp__plugin_afm_afm__detect, mcp__plugin_afm_afm__doctor, mcp__plugin_afm_afm__failures_promotable, mcp__plugin_afm_afm__feature_lint, mcp__plugin_afm_afm__feature_status, mcp__plugin_afm_afm__gate, mcp__plugin_afm_afm__index, mcp__plugin_afm_afm__lang, mcp__plugin_afm_afm__next_id, mcp__plugin_afm_afm__path, mcp__plugin_afm_afm__policy, mcp__plugin_afm_afm__preflight, mcp__plugin_afm_afm__read, mcp__plugin_afm_afm__sessions, mcp__plugin_afm_afm__sessions_signals, mcp__plugin_afm_afm__version, Read, Grep, Glob, WebFetch, WebSearch
|
|
5
5
|
maxTurns: 60
|
|
6
6
|
---
|
|
7
7
|
You are an explorer. The message that dispatched you is your brief: follow it.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: afm-reviewer
|
|
3
3
|
description: Blind auditor. Checks one piece of work it did not write against its sources and rules, and returns a verdict with evidence; dispatched with a brief.
|
|
4
|
-
tools: mcp__plugin_afm_afm__approve, mcp__plugin_afm_afm__config, mcp__plugin_afm_afm__detect, mcp__plugin_afm_afm__doctor, mcp__plugin_afm_afm__failures_promotable, mcp__plugin_afm_afm__feature_lint, mcp__plugin_afm_afm__feature_status, mcp__plugin_afm_afm__gate, mcp__plugin_afm_afm__index, mcp__plugin_afm_afm__lang, mcp__plugin_afm_afm__next_id, mcp__plugin_afm_afm__path, mcp__plugin_afm_afm__policy, mcp__plugin_afm_afm__preflight, mcp__plugin_afm_afm__version, Read, Grep, Glob, WebFetch, WebSearch
|
|
4
|
+
tools: mcp__plugin_afm_afm__approve, mcp__plugin_afm_afm__config, mcp__plugin_afm_afm__detect, mcp__plugin_afm_afm__doctor, mcp__plugin_afm_afm__failures_promotable, mcp__plugin_afm_afm__feature_lint, mcp__plugin_afm_afm__feature_status, mcp__plugin_afm_afm__gate, mcp__plugin_afm_afm__index, mcp__plugin_afm_afm__lang, mcp__plugin_afm_afm__next_id, mcp__plugin_afm_afm__path, mcp__plugin_afm_afm__policy, mcp__plugin_afm_afm__preflight, mcp__plugin_afm_afm__read, mcp__plugin_afm_afm__sessions, mcp__plugin_afm_afm__sessions_signals, mcp__plugin_afm_afm__version, Read, Grep, Glob, WebFetch, WebSearch
|
|
5
5
|
---
|
|
6
6
|
You are a reviewer. The message that dispatched you is your brief: follow it.
|
|
7
7
|
|
|
@@ -9,8 +9,10 @@ description: |
|
|
|
9
9
|
|
|
10
10
|
> **Questions in this host.** `afm ask <op>` prompts only in a terminal, and the Bash tool has none: it exits 2. Run `afm ask <op> --json` instead and put each pending question to the operator with `AskUserQuestion`: its `header`, `prompt` and `options` as they come, the recommended option first, `multiSelect` as given. 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 the Bash tool has none: it exits 2. Run `afm ask <op> --json` instead and put each pending question to the operator with `AskUserQuestion`: its `header`, `prompt` and `options` as they come, the recommended option first, `multiSelect` as given. 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`.
|
|
@@ -9,7 +9,7 @@ description: |
|
|
|
9
9
|
|
|
10
10
|
> **Questions in this host.** `afm ask <op>` prompts only in a terminal, and the Bash tool has none: it exits 2. Run `afm ask <op> --json` instead and put each pending question to the operator with `AskUserQuestion`: its `header`, `prompt` and `options` as they come, the recommended option first, `multiSelect` as given. 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/clarify.md` and follow it; read an on-demand section when its condition holds.
|
|
13
13
|
|
|
14
14
|
## When NOT to activate
|
|
15
15
|
|
|
@@ -25,12 +25,10 @@ Judgment only: a 9-category scan of the spec, a prioritized queue (at most 5 que
|
|
|
25
25
|
|
|
26
26
|
## Invariant principles
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
Most relevant here: #2 is discover-first: resolve each question yourself through the scan or the docs, then ask. #4 says `[TBD]` beats invention, and a recommendation is a rejectable hypothesis, not a guess. #6 is autonomy-first: write the integration into spec § 7 and report. #8 is recommendation-first questions.
|
|
29
29
|
|
|
30
30
|
## Continuous doctrine
|
|
31
31
|
|
|
32
|
-
Passive mode is
|
|
32
|
+
Passive mode (`/afm:reconcile`) is always on. This skill covers only the active resolution of ambiguity.
|
|
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`.
|
|
@@ -7,9 +7,9 @@ description: |
|
|
|
7
7
|
|
|
8
8
|
# AFM — Deliver (orchestrated autonomous delivery)
|
|
9
9
|
|
|
10
|
-
> **
|
|
10
|
+
> **Procedure.** Run `afm read ops/deliver.md` and follow it; read an on-demand section when its condition holds.
|
|
11
11
|
|
|
12
|
-
The **orchestrator** of the delivery loop. One request takes "build feature X" from discovery to a delivered feature.
|
|
12
|
+
The **orchestrator** of the delivery loop. One request takes "build feature X" from discovery to a delivered feature. It does not duplicate the sub-steps: it reads and follows `/afm:specify`, `/afm:plan`, `/afm:tasks`, `/afm:clarify`, `/afm:analyze` and `/afm:reconcile` through a suppression contract. External unknowns go through `/nasca:research`, or `/nasca:campaign` for a deep study; ask the operator if nasca is missing.
|
|
13
13
|
|
|
14
14
|
## When NOT to activate
|
|
15
15
|
|
|
@@ -19,26 +19,12 @@ An isolated step ("just open the spec", "just generate the tasks") is the matchi
|
|
|
19
19
|
|
|
20
20
|
Run `afm preflight`. Exit 0 continues. Exit 3 means no `docs/.afm-version`: stop and suggest `/afm:init` (greenfield) or `/afm:refactor` (brownfield). Exit 4 or 5: report the line it printed. Do not fall back silently.
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Most relevant here
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
- **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`).
|
|
27
|
-
- **Draft:** spec, plan and tasks, verified with `afm feature lint <NNN>` plus the judgment passes of `analyze`.
|
|
28
|
-
- **Gate:** the earned questions plus the `outcome` question (`afm ask deliver`), then `afm approve <NNN>`. An explicit "go" skips the questions, never the record.
|
|
29
|
-
- **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.
|
|
30
|
-
- **Reconcile:** § 8.5 plus a passive sweep.
|
|
31
|
-
|
|
32
|
-
If artifacts already exist, resume from the correct phase, including "tasks already exist, run from the first `[ ]`".
|
|
33
|
-
|
|
34
|
-
## Invariant principles
|
|
35
|
-
|
|
36
|
-
Single canonical source: `afm path PRINCIPLES.md`. Universals §1-8 apply. The backbone is **#2** (discover-first: resolve unknowns by scan and research, ask only the irreducible part, never guess product or criteria) and **#6** (autonomy-first: approval at checkpoint granularity, the consolidated plan IS the proposal).
|
|
24
|
+
**#2** (discover-first: resolve unknowns by scan and research, ask only the irreducible part, never guess product or criteria) and **#6** (autonomy-first: approval at checkpoint granularity, the consolidated plan IS the proposal).
|
|
37
25
|
|
|
38
26
|
## Continuous doctrine
|
|
39
27
|
|
|
40
|
-
Passive mode is
|
|
41
|
-
|
|
42
|
-
## Version
|
|
28
|
+
Passive mode (`/afm:reconcile`) is always on. It runs in parallel with `/afm:deliver` and takes the closing turn of Phase 4 (`core/afm.md` § 8.5 plus a passive sweep).
|
|
43
29
|
|
|
44
|
-
`afm version
|
|
30
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -8,9 +8,9 @@ description: |
|
|
|
8
8
|
|
|
9
9
|
# AFM — Diagnose (mechanical weakness-mining, read-only)
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
> **Procedure.** Run `afm read ops/diagnose.md` and follow it; read an on-demand section when its condition holds.
|
|
12
12
|
|
|
13
|
-
> **Carve-out (does not overlap existing ops):**
|
|
13
|
+
> **Carve-out (does not overlap existing ops):** `/afm:analyze` audits **one feature**. `diagnose` audits the **whole instance** of `/docs/`. `/afm:reflect` uses **behavioral** evidence, where the agent stumbled. `diagnose` is **static**, based on filesystem and git. `/afm:evolve` is the **orchestrator**. It combines `diagnose` (mechanical evidence) with `/afm:reflect` (behavioral evidence) into one proposal and one gate. `diagnose` is **read-only**. It never proposes an edit or opens a gate.
|
|
14
14
|
|
|
15
15
|
## When NOT to activate
|
|
16
16
|
|
|
@@ -25,8 +25,6 @@ Validation of ONE feature is `/afm:analyze`. Behavioral friction, where a doc mi
|
|
|
25
25
|
|
|
26
26
|
## Procedure
|
|
27
27
|
|
|
28
|
-
Read the op (`afm path ops/diagnose.md`) end to end. Follow it literally.
|
|
29
|
-
|
|
30
28
|
The procedure has two phases. **Phase 0 — Scan** is gap-driven. Run `afm doctor --json`: it checks A1-A6, staleness and dead gotchas mechanically, and every finding carries a command plus `file:line`. You add A7 yourself. All 7 axes are checked, every time.
|
|
31
29
|
|
|
32
30
|
Axis A7, cross-doc contradiction, uses a paired read. That read applies an anti-false-positive layer test. An axis that cannot be covered becomes "not-covered: <reason>".
|
|
@@ -35,16 +33,14 @@ Axis A7, cross-doc contradiction, uses a paired read. That read applies an anti-
|
|
|
35
33
|
|
|
36
34
|
Phase 1 requires rival mechanisms, for example "agent non-compliant" versus "target legitimately removed". It applies an addressability filter and a self-sufficient severity matrix.
|
|
37
35
|
|
|
38
|
-
**Output** is an evidence bundle ordered by severity. Run à la carte, the skill prints the report to chat. It does not write to disk. It opens no gate. Under
|
|
36
|
+
**Output** is an evidence bundle ordered by severity. Run à la carte, the skill prints the report to chat. It does not write to disk. It opens no gate. Under `/afm:evolve`, it feeds the proposal instead.
|
|
39
37
|
|
|
40
38
|
This scan has no cooldown. It is read-only and cheap. The cycle's cooldown belongs to the orchestrator.
|
|
41
39
|
|
|
42
40
|
## Invariant principles
|
|
43
41
|
|
|
44
|
-
|
|
42
|
+
Most relevant here: #2 (discover-first — diagnose with evidence before any proposal). Also #3 (mechanize-or-demote — the checks must pass the test they audit). Also #5 (no finding without evidence external to the text).
|
|
45
43
|
|
|
46
44
|
**No new principle here.** `diagnose` is a composed materialization. The doctrine lives in the op file.
|
|
47
45
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
Content version: `afm version` prints it.
|
|
46
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -10,11 +10,11 @@ description: |
|
|
|
10
10
|
|
|
11
11
|
> **Questions in this host.** `afm ask <op>` prompts only in a terminal, and the Bash tool has none: it exits 2. Run `afm ask <op> --json` instead and put each pending question to the operator with `AskUserQuestion`: its `header`, `prompt` and `options` as they come, the recommended option first, `multiSelect` as given. 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.
|
|
12
12
|
|
|
13
|
+
> **Procedure.** Run `afm read ops/evolve.md` and follow it; read an on-demand section when its condition holds.
|
|
14
|
+
|
|
13
15
|
This is an orchestrator skill of AFM. The canonical procedure is the op file that `afm path ops/evolve.md` prints.
|
|
14
16
|
|
|
15
|
-
> **
|
|
16
|
-
>
|
|
17
|
-
> **Carve-outs (it does not override existing ops):** `diagnose`/`reflect`/`generalize`/`restructure` are the **mechanisms** (each runs à la carte). `analyze` audits **one feature** (read-only). `reconcile` proposes **one single edit** at the end of a turn. `promote` **records** a finding meant for the plugin (it does not edit the plugin). `evolve` is the **cycle** that chains the mechanisms with one gate and one log — the level no other op covers.
|
|
17
|
+
> **Carve-outs (it does not override existing ops):** `/afm:diagnose`, `/afm:reflect`, `/afm:generalize` and `/afm:restructure` are the **mechanisms** (each runs à la carte). `/afm:analyze` audits **one feature** (read-only). Passive mode (`/afm:reconcile`) proposes **one single edit** at the end of a turn. `/afm:promote` **records** a finding meant for the plugin (it does not edit the plugin). `evolve` is the **cycle** that chains the mechanisms with one gate and one log — the level no other op covers.
|
|
18
18
|
|
|
19
19
|
## When NOT to activate
|
|
20
20
|
|
|
@@ -22,7 +22,7 @@ This section helps someone who already activated the skill decide if it fits. It
|
|
|
22
22
|
|
|
23
23
|
Use a single mechanism instead when the need is narrow. A report is `/afm:diagnose`. Refining a doc that misled you is `/afm:reflect`. Merging gotchas is `/afm:generalize`.
|
|
24
24
|
|
|
25
|
-
A structure or staleness check is `/afm:restructure`. A version bump is `/afm:update`.
|
|
25
|
+
A structure or staleness check is `/afm:restructure`. A version bump is `/afm:update`. Passive mode (`/afm:reconcile`) proposes a one-off additive signal (new gotcha, rule, or ADR) directly.
|
|
26
26
|
|
|
27
27
|
A feature-level check is `/afm:analyze` or `/afm:deliver`. Recording a finding for the plugin is `/afm:promote`.
|
|
28
28
|
|
|
@@ -34,36 +34,16 @@ A feature-level check is `/afm:analyze` or `/afm:deliver`. Recording a finding f
|
|
|
34
34
|
|
|
35
35
|
## Procedure
|
|
36
36
|
|
|
37
|
-
Read the op (`afm path ops/evolve.md`) end to end and follow it exactly. The op has 5 phases
|
|
38
|
-
|
|
39
|
-
**Phase 1 — Evidence collection.** Combine two sources through the suppression contract. `diagnose` is the mechanical scan of the 7 axes (`afm doctor --json` plus the A7 reading), read-only. `reflect` is behavioral evidence of docs that misled the agent. Run `generalize`/`restructure` on demand, when their own trigger signal fires. An empty diagnosis counts as a valid result.
|
|
40
|
-
|
|
41
|
-
**Phase 2 — Proposal.** This phase plays the IMPROVER role. Apply the op's **shared proposal discipline**: retrieval before create, then a dry run before the gate. Split the proposals into 3 buckets.
|
|
42
|
-
|
|
43
|
-
A non-restorable change always goes through the gate. It never invents its own target. Decide here whether to downgrade, archive, or merge an artifact. Cap bucket (b) at 8 items per cycle (`afm evolve gate-check --critical <n> --high <n> --medium <n> --low <n>` computes what to ask and what to stage). Recurring failures come from `afm failures promotable`.
|
|
44
|
-
|
|
45
|
-
**Phase 3 — Single gate.** Ask item by item with `afm ask evolve --scope <item-slug>`, at most 4 questions per call. This gate is never skippable — there is no "go" shortcut.
|
|
46
|
-
|
|
47
|
-
**Phase 4 — Apply and post-conditions.** Re-run `afm doctor --json`, `afm index --check` and `afm detect --for <file>` over the touched docs, and confirm the content root is clean (`git status`, or a timestamp check with no git).
|
|
48
|
-
|
|
49
|
-
**Phase 5 — Log.** Record the cycle in `docs/evolution/NNN-<date>.md`. Suggest `promote` when a finding generalizes beyond this instance.
|
|
37
|
+
Read the op (`afm path ops/evolve.md`) end to end and follow it exactly. The op has 5 phases: evidence collection (diagnose plus reflect), proposal in 3 buckets, a single gate (`afm ask evolve`), apply with post-conditions, and the log in `docs/evolution/`.
|
|
50
38
|
|
|
51
39
|
Consult the rubric `rubrics/when-to-evolve-methodology.md` (`afm path rubrics/when-to-evolve-methodology.md`) to decide between a full cycle, a single mechanism, or a one-off fix.
|
|
52
40
|
|
|
53
|
-
##
|
|
54
|
-
|
|
55
|
-
The single canonical source is `PRINCIPLES.md` (`afm path PRINCIPLES.md`). Universals §1-8 apply. #2 (discover-first) applies: diagnose with evidence before you propose. #3 (mechanize-or-downgrade) applies too: evolve's own signals must pass the same test evolve applies to others.
|
|
56
|
-
|
|
57
|
-
#8 (earned questions, recommendation-first) also applies to this skill.
|
|
41
|
+
## Most relevant principles
|
|
58
42
|
|
|
59
|
-
#
|
|
60
|
-
|
|
61
|
-
**No new principle here** — evolve is a composed materialization. The doctrine lives in the op and the rubric.
|
|
43
|
+
#2 (discover-first): diagnose with evidence before you propose. #3 (mechanize-or-downgrade): evolve's own signals must pass the same test evolve applies to others. #6 (autonomy-first with self-check): the gate is the load-bearing residue, and the bright lines for #7 plugin, deletion, and push still apply. #8 (earned questions, recommendation-first).
|
|
62
44
|
|
|
63
45
|
## Continuous doctrine
|
|
64
46
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
## Version
|
|
47
|
+
Passive mode (`/afm:reconcile`) is always on. It may **suggest** `/afm:evolve` when it detects a Class B signal. That signal is a lived contradiction between docs, or perceived inflation at apply time. Only the user can invoke the full cycle.
|
|
68
48
|
|
|
69
|
-
|
|
49
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -9,8 +9,9 @@ description: |
|
|
|
9
9
|
|
|
10
10
|
> **Questions in this host.** `afm ask <op>` prompts only in a terminal, and the Bash tool has none: it exits 2. Run `afm ask <op> --json` instead and put each pending question to the operator with `AskUserQuestion`: its `header`, `prompt` and `options` as they come, the recommended option first, `multiSelect` as given. 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/export-template.md` and follow it; read an on-demand section when its condition holds.
|
|
13
|
+
|
|
14
|
+
The CLI owns the plan, the diff and the marker. This skill keeps the judgment.
|
|
14
15
|
|
|
15
16
|
## When NOT to activate
|
|
16
17
|
|
|
@@ -34,9 +35,9 @@ stop and suggest `/afm:init` (greenfield) or `/afm:refactor` (brownfield) first.
|
|
|
34
35
|
|
|
35
36
|
## Invariant principles
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
Especially #5 (do not invent metadata when the operator leaves it blank: use `[TBD]` in the JSON). Also #6
|
|
38
|
+
Most relevant here: #5 (do not invent metadata when the operator leaves it blank: use `[TBD]` in the JSON). Also #6
|
|
40
39
|
(autonomy-first, but deleting files is a bright line): confirm the diff before you delete.
|
|
41
40
|
|
|
42
41
|
Passive mode (`/afm:reconcile`) is always on. This skill focuses only on the active conversion to a template.
|
|
42
|
+
|
|
43
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -10,15 +10,15 @@ description: |
|
|
|
10
10
|
|
|
11
11
|
> **Questions in this host.** `afm ask <op>` prompts only in a terminal, and the Bash tool has none: it exits 2. Run `afm ask <op> --json` instead and put each pending question to the operator with `AskUserQuestion`: its `header`, `prompt` and `options` as they come, the recommended option first, `multiSelect` as given. 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.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
> **Procedure.** Run `afm read ops/generalize.md` and follow it; read an on-demand section when its condition holds.
|
|
14
14
|
|
|
15
|
-
> **Carve-out (does not overlap existing ops):**
|
|
15
|
+
> **Carve-out (does not overlap existing ops):** `/afm:promote` **registers** a finding meant for the plugin. It does not write to the plugin. `/afm:generalize` merges **inside the instance** (N gotchas become 1 rule in the same `/docs/`). `/afm:reconcile` **adds** a new gotcha. `/afm:generalize` **merges** gotchas that already exist. `/afm:reflect` refines **one** doc. `/afm:generalize` consolidates **many**. `/afm:evolve` is the **orchestrator** and it composes this skill when `/afm:diagnose` flags inflation from redundant gotchas.
|
|
16
16
|
|
|
17
17
|
## When NOT to activate
|
|
18
18
|
|
|
19
19
|
This is a disambiguation criterion for someone who already activated the skill, not an activation trigger. That is why it lives in the body, not in the resident listing.
|
|
20
20
|
|
|
21
|
-
Sending ONE learning to the plugin is `/afm:promote`. ADDING a new gotcha or rule is
|
|
21
|
+
Sending ONE learning to the plugin is `/afm:promote`. ADDING a new gotcha or rule is `/afm:reconcile` -> `/afm:gotcha`/`/afm:rule` (`/afm:generalize` only merges what already exists). Refining the clarity of ONE doc is `/afm:reflect`. With fewer than 2 similar candidates, there is no generalization to do.
|
|
22
22
|
|
|
23
23
|
## Pre-check
|
|
24
24
|
|
|
@@ -26,24 +26,12 @@ Sending ONE learning to the plugin is `/afm:promote`. ADDING a new gotcha or rul
|
|
|
26
26
|
2. **Does `afm preflight` exit 0?** A non-zero exit says why (docs not bootstrapped, content unresolved, pin mismatch). Report it to the user. Do not fall back silently.
|
|
27
27
|
3. **Is there a batch of >=2** similar gotchas/reflections? If not, report "nothing to generalize (no batch)" and stop. Generalizing from 1 case is forbidden (#5).
|
|
28
28
|
|
|
29
|
-
##
|
|
29
|
+
## Gate
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
The merge is load-bearing and goes through its own earned gate, `afm ask generalize` (suppressed under `/afm:evolve`). Merged entries become tombstones; never delete.
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
## Most relevant here
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
#1 (episodic `gotchas.md` -> semantic `afm.md`), #3 (a merged rule becomes hard only with an executable 0/1 trigger), #5 (no abstraction without a real batch), #6/#8 (self-verify before an earned gate; deletion is a bright line, so archive as tombstones). No new principle here: the doctrine lives in the op.
|
|
36
36
|
|
|
37
|
-
**
|
|
38
|
-
|
|
39
|
-
-> **4. Own gate** (item (b), unavoidable and earned, through `afm ask generalize`; suppressed under `evolve`. On approval: write the rule via `rule.md` (`afm rule new <slug>`) and **archive the merged entries as tombstones**. Never delete) -> **5. Record** the result in `docs/evolution/NNN-<date>.md`. Suggest `promote` if the finding matters beyond this instance.
|
|
40
|
-
|
|
41
|
-
## Invariant principles
|
|
42
|
-
|
|
43
|
-
Single canonical source: `PRINCIPLES.md` (`afm path PRINCIPLES.md`). Universals §1-8 apply here, especially #1 (episodic `gotchas.md` -> semantic `afm.md`). Also #3: a merged rule becomes hard only with an executable 0/1 trigger, the ShowsImprovement step of MetaReflection. Also #5: do not invent an abstraction without a real batch.
|
|
44
|
-
|
|
45
|
-
Also #6/#8: self-verify before an earned gate. Deletion is a bright line. Use tombstones instead. **No new principle here** — `generalize` is a composed materialization. The doctrine lives in the op file.
|
|
46
|
-
|
|
47
|
-
## Version
|
|
48
|
-
|
|
49
|
-
Content version: `afm version` prints it.
|
|
37
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|