@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
|
@@ -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/gotcha.md` and follow it; read an on-demand section when its condition holds.
|
|
13
|
+
|
|
14
|
+
The CLI owns the entry gate, the number, the frontmatter the trigger index reads and the index. This skill
|
|
15
|
+
keeps only the judgment.
|
|
14
16
|
|
|
15
17
|
## When NOT to activate
|
|
16
18
|
|
|
@@ -34,9 +36,11 @@ signal belongs to `/afm:remediate`.
|
|
|
34
36
|
|
|
35
37
|
## Invariant principles
|
|
36
38
|
|
|
37
|
-
|
|
39
|
+
Most relevant here: #5 (do not
|
|
38
40
|
invent a gotcha without a real case; the 2x entry check is a strong gate) and #6 (autonomy-first: save the
|
|
39
41
|
result and report it).
|
|
40
42
|
|
|
41
43
|
Passive mode (`/afm:reconcile`) is always on and can propose `/afm:gotcha` when it detects the signal "the
|
|
42
44
|
same runtime surprise blocked work twice." This skill covers only active registration.
|
|
45
|
+
|
|
46
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -71,14 +71,11 @@ procedure is in `afm path interview/bootstrap` § Alternate branch. `.afm-versio
|
|
|
71
71
|
|
|
72
72
|
## Invariant principles
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
#9 (retroactive ADR, load-bearing) does NOT apply to init. Bootstrap forbids a retroactive ADR.
|
|
74
|
+
For this skill (greenfield), #9 (retroactive ADR, load-bearing) does NOT apply to init. Bootstrap forbids a retroactive ADR.
|
|
76
75
|
|
|
77
76
|
## Continuous doctrine
|
|
78
77
|
|
|
79
|
-
Passive mode (`/afm:reconcile`)
|
|
78
|
+
Passive mode (`/afm:reconcile`) stays always-on in any AFM
|
|
80
79
|
project session. This skill covers only the active bootstrap procedure.
|
|
81
80
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
`afm version` prints the version in use. History: `afm path CHANGELOG`.
|
|
81
|
+
**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 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/plan.md` and follow it; read an on-demand section when its condition holds.
|
|
13
13
|
|
|
14
14
|
## When NOT to activate
|
|
15
15
|
|
|
16
|
-
There is no `spec.md` yet: run `/afm:specify` first. An end-to-end delivery is
|
|
16
|
+
There is no `spec.md` yet: run `/afm:specify` first. An end-to-end delivery is `/afm:deliver`, which composes this op.
|
|
17
17
|
|
|
18
18
|
## Pre-check
|
|
19
19
|
|
|
@@ -25,12 +25,10 @@ Read the stack from `docs/ach.md` and never reopen it. Infer the components, dec
|
|
|
25
25
|
|
|
26
26
|
## Invariant principles
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
Most relevant here: #2 (discover-first: scan before you ask), #5 (do not invent contracts or a stack) and #8 (a question carries a recommendation).
|
|
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 planning.
|
|
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,7 +7,7 @@ description: |
|
|
|
7
7
|
|
|
8
8
|
# AFM — Policy (report the organisation layer)
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
> **Procedure.** Run `afm read ops/policy.md` and follow it; read an on-demand section when its condition holds.
|
|
11
11
|
|
|
12
12
|
## When not to activate
|
|
13
13
|
|
|
@@ -26,6 +26,4 @@ Run `afm policy report` and read it by family. Say plainly that a policy bundle
|
|
|
26
26
|
nothing, and name what the reader may not edit here and who owns it. Never report a policy rule as
|
|
27
27
|
enforced.
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
Single canonical source: `afm path PRINCIPLES`. Universals §1-8 apply.
|
|
29
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -7,7 +7,7 @@ description: |
|
|
|
7
7
|
|
|
8
8
|
# AFM — Promote
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
> **Procedure.** Run `afm read ops/promote.md` and follow it; read an on-demand section when its condition holds.
|
|
11
11
|
|
|
12
12
|
## When NOT to activate
|
|
13
13
|
|
|
@@ -31,7 +31,7 @@ bring the plugin INTO the instance (the opposite direction).
|
|
|
31
31
|
|
|
32
32
|
## Invariant principles
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
Most relevant here: #5: never record a
|
|
35
35
|
project-specific learning, and never one without a real case; the list grows on demand.
|
|
36
36
|
|
|
37
37
|
It also includes #6/#7: the plugin boundary is **absolute**. This op records a finding and never applies a
|
|
@@ -39,3 +39,5 @@ change.
|
|
|
39
39
|
|
|
40
40
|
Passive mode (`/afm:reconcile`) is always on and can propose `/afm:promote` when it detects a signal that a
|
|
41
41
|
learning generalizes to any project.
|
|
42
|
+
|
|
43
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -7,8 +7,9 @@ description: |
|
|
|
7
7
|
|
|
8
8
|
# AFM — Protocol (declared autonomy posture)
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
> **Procedure.** Run `afm read ops/protocol.md` and follow it; read an on-demand section when its condition holds.
|
|
11
|
+
|
|
12
|
+
Field and preset definitions are in `afm path core/protocol`.
|
|
12
13
|
|
|
13
14
|
> **A protocol is data, not a new execution path.** It parametrizes operations that already exist. A project
|
|
14
15
|
> with no `protocol:` declared uses the defaults, which reproduce pre-v4 behavior.
|
|
@@ -35,8 +36,10 @@ Outside the three presets, the file must already exist: never invent one.
|
|
|
35
36
|
|
|
36
37
|
## Invariant principles
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
Most relevant here: #4 and #5.
|
|
39
40
|
|
|
40
41
|
#4: `[TBD]` beats invention. An instance with no declared posture does not receive an assumed one.
|
|
41
42
|
|
|
42
43
|
#5: Do not invent a preset without a real case.
|
|
44
|
+
|
|
45
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -6,6 +6,8 @@ description: |
|
|
|
6
6
|
|
|
7
7
|
# AFM — Reconcile (passive mode, always-on)
|
|
8
8
|
|
|
9
|
+
> **Procedure.** Run `afm read ops/reconcile.md` and follow it; read an on-demand section when its condition holds.
|
|
10
|
+
|
|
9
11
|
The always-on skill. It loads the continuous doctrine and the passive-mode procedure, and it is the only skill that activates by default in any AFM project session. Every other skill needs explicit invocation or specific natural language.
|
|
10
12
|
|
|
11
13
|
## When NOT to activate
|
|
@@ -24,7 +26,7 @@ One criterion decides where something belongs (universal principle #1, source in
|
|
|
24
26
|
|
|
25
27
|
`docs/` holds rules, decisions, gotchas, architecture, persona, flows and cross-module contracts. The agent's memory holds only the user's style and durable preferences ("small PRs, not big bundles") and personal context (role, years of experience, current focus).
|
|
26
28
|
|
|
27
|
-
`docs/` is a living source, **not a frozen bootstrap artifact**: it evolves through the whole session by passive reconcile. The signal table is `afm path interview/triggers.md`.
|
|
29
|
+
`docs/` is a living source, **not a frozen bootstrap artifact**: it evolves through the whole session by passive reconcile. The signal table is `afm path interview/triggers.md`.
|
|
28
30
|
|
|
29
31
|
## Procedure (always-on)
|
|
30
32
|
|
|
@@ -42,8 +44,6 @@ Never apply an edit without proposing it first, never save a project rule in mem
|
|
|
42
44
|
|
|
43
45
|
## Invariant principles
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
## Version
|
|
47
|
+
Most relevant here: #1 (the one criterion for memory against doc), #5 (no gotcha or rule without a case) and #6 (reconcile PROPOSES at the end of the turn).
|
|
48
48
|
|
|
49
|
-
`afm version
|
|
49
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -72,15 +72,12 @@ For brownfield projects without `docs/.afm-version`:
|
|
|
72
72
|
|
|
73
73
|
## Invariant principles
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
For this skill (brownfield), **all** principles apply: the 8 universals
|
|
76
76
|
§1-8 plus the addition §9 (a retroactive ADR is load-bearing-only). #9 separates refactor from init. Init
|
|
77
77
|
forbids retroactive ADRs.
|
|
78
78
|
|
|
79
79
|
## Continuous doctrine
|
|
80
80
|
|
|
81
|
-
Passive mode (`/afm:reconcile`) is
|
|
82
|
-
project session. This skill covers only the active refactor procedure.
|
|
81
|
+
Passive mode (`/afm:reconcile`) is always-on in any AFM project session. This skill covers only the active refactor procedure.
|
|
83
82
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
`afm version` prints the version in use. History: `afm path CHANGELOG`.
|
|
83
|
+
**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: reflect
|
|
3
3
|
description: |
|
|
4
|
-
Finds where the local docs failed AS A HARNESS in
|
|
4
|
+
Finds where the local docs failed AS A HARNESS in the live session and the project's sessions since the last cycle. Examples are an ambiguous rule applied wrong, a doc that misled, and a user correction against the doc. The evidence is the session trajectory, never a static scan. It proposes edits that make the docs more assertive.
|
|
5
5
|
Activates: `/afm:reflect`, "this rule is ambiguous", "the doc sent me the wrong way", "why do I keep getting this wrong when the doc covers it?".
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -10,46 +10,40 @@ 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/reflect.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:reconcile` works **code to docs, and is additive**. It learns a new fact and proposes adding it. `reflect` works **docs to docs, and refines**. An existing doc guided the agent wrong, so `reflect` proposes a clearer version. `/afm:diagnose` runs a **static** scan. `reflect` uses **behavioral** evidence from the session trajectory. Only the agent sees its own stumble. `/afm:evolve` is the **orchestrator**. It composes `reflect` and `/afm:diagnose` into one cycle with a single gate.
|
|
16
16
|
|
|
17
17
|
## When not to activate
|
|
18
18
|
|
|
19
19
|
This is a disambiguation criterion for a skill already active, not an activation criterion. That is why it lives in the body, not in the resident listing.
|
|
20
20
|
|
|
21
|
-
Learning a new fact, gotcha, or decision belongs to `
|
|
21
|
+
Learning a new fact, gotcha, or decision belongs to passive mode (`/afm:reconcile`). Route it to `/afm:gotcha`, `/afm:rule`, or `/afm:adr`. A static mechanical scan belongs to `/afm:diagnose`. Merging N gotchas belongs to `/afm:generalize`. A failure with an external signal belongs to `/afm:remediate`. The full cycle belongs to `/afm:evolve`.
|
|
22
22
|
|
|
23
23
|
## Pre-check
|
|
24
24
|
|
|
25
25
|
1. **Does `<consumer>/docs/.afm-version` exist?** If not, stop. Suggest `/afm:init` (greenfield) or `/afm:refactor` (brownfield) first.
|
|
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
|
-
3. **Did the session hit a doc-friction event** (or an articulated symptom)? If
|
|
27
|
+
3. **Did the live session or the project's sessions since the last cycle hit a doc-friction event** (or an articulated symptom)? Read the window with `afm sessions --since reflect --json` and `afm sessions signals --since reflect --json`. If the whole window has no signal, report "no doc friction observed" and stop. Reflection without behavioral evidence is forbidden (#5).
|
|
28
28
|
|
|
29
29
|
## Procedure
|
|
30
30
|
|
|
31
|
-
Read the op (`afm path ops/reflect.md`) end to end. Follow it literally.
|
|
32
|
-
|
|
33
31
|
The steps are:
|
|
34
32
|
|
|
35
|
-
**1. Collection.** Build the behavioral signature φ_b = `(symptom-lived, doc-causal-status, mechanism)`. Cite both the doc passage **and** the session event.
|
|
33
|
+
**1. Collection.** Build the behavioral signature φ_b = `(symptom-lived, doc-causal-status, mechanism)`. Cite both the doc passage **and** the session event (`session:<id>@<ts>`). Weight: one signal in the live session suffices; a past-session signal needs 2 or more sessions, an explicit correction, or `regressed`, and `regressed` comes first. A repeated prompt is a finding: propose the artifact that stops the retyping.
|
|
36
34
|
|
|
37
35
|
**2. Self-critique.** Consider a rival hypothesis: it was me, not the doc. Apply the guardrail: a violated rule is not a wrong rule. Apply an addressability filter.
|
|
38
36
|
|
|
39
37
|
**3. Proposal.** Refine instructiveness: rewrite the ambiguous part, add an executable trigger, and remove ambiguity. Add suggestions for the human. This step follows the **shared proposal discipline** in `evolve.md` (`afm path ops/evolve.md`) and does not duplicate it.
|
|
40
38
|
|
|
41
|
-
**4. Own gate.** Ask item by item, earned, with `afm ask reflect --scope <item-slug>`.
|
|
39
|
+
**4. Own gate.** Ask item by item, earned, with `afm ask reflect --scope <item-slug>`. `/afm:evolve` suppresses this gate.
|
|
42
40
|
|
|
43
|
-
**5. Record.** Write to `docs/evolution/NNN-<date>.md`. Add
|
|
41
|
+
**5. Record.** Write to `docs/evolution/NNN-<date>.md`. Add an `/afm:promote` suggestion when the finding generalizes. Hand off to passive mode (`/afm:reconcile`).
|
|
44
42
|
|
|
45
43
|
## Invariant principles
|
|
46
44
|
|
|
47
|
-
The single canonical source is `PRINCIPLES.md` (`afm path PRINCIPLES.md`). Universals §1-8 apply.
|
|
48
|
-
|
|
49
45
|
Rule #1 applies: refine the doc's instructiveness, not the agent's memory. Rule #5 applies: no lived event, no finding. Rule #6 applies: self-verify, then report. The gate is a load-bearing residue. Bright lines #7 for plugin, deletion, and push apply.
|
|
50
46
|
|
|
51
47
|
Rule #8 applies: a suggestion or question must be earned, recommendation-first. **No new principle here.** `reflect` is a composed materialization. The doctrine lives in the op file.
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
Content version: `afm version` prints it.
|
|
49
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -10,7 +10,7 @@ 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/remediate.md` and follow it; read an on-demand section when its condition holds.
|
|
14
14
|
|
|
15
15
|
## When NOT to activate
|
|
16
16
|
|
|
@@ -26,16 +26,14 @@ Use `afm.md § 5.1` for an in-task retry at the moment of the error. Use `/afm:g
|
|
|
26
26
|
|
|
27
27
|
## Procedure
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
The op includes the promotion gate (#5): 1 user correction OR at least 2 mechanical occurrences promote a failure. A transient failure does not promote. It also includes classification through the rubric `rubrics/failure-classification.md` (`afm path rubrics/failure-classification.md`). For each delta, propose the artifact (procedure or learning) and cite the source `sig=` (hard rule 19). Ask the artifact question with `afm ask remediate --scope <sig>`, materialize the result, close the signature with `afm failures close --sig <sig> --as remediated`, and report it (#6).
|
|
30
30
|
|
|
31
31
|
## Invariant principles
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
Most relevant here: #3 (CRITIC corollary — recognition by tool, not self-judgment). See also #5 (do not promote a failure without recurrence or an oracle) and #6 (propose only, the human approves).
|
|
34
34
|
|
|
35
35
|
## Continuous doctrine
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
Passive mode (`/afm:reconcile`) is always on. It reads `afm failures promotable` at the end of the turn and can propose remediation with no explicit command. The `/afm:evolve` cycle uses the failure events as evidence for `/afm:reflect`, toward a final remediation. This skill is the active record of the loop.
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
Content version: `afm version` prints it.
|
|
39
|
+
**Principles and version.** `afm path PRINCIPLES.md` (universals §1-8 apply). `afm version` prints the version; history: `afm path CHANGELOG.md`.
|
|
@@ -10,9 +10,9 @@ 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/restructure.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: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
|
|
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
|
|
|
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 `
|
|
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.
|
|
39
|
-
5. **Record.** Write the result to `docs/evolution/NNN-<date>.md`. Suggest
|
|
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 `
|
|
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 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
|
-
|
|
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 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/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
|
|
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: 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
|
|
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 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/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
|
+
the `Workflow` tool (an ultracode run), with a light model per agent (`haiku` as the `model` of each agent call) 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 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/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`.
|