agent-skillboard 0.1.2 → 0.2.1
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/README.md +154 -631
- package/docs/adapters.md +96 -96
- package/docs/ai-skill-routing-goal.md +112 -0
- package/docs/capabilities.md +6 -0
- package/docs/install.md +155 -105
- package/docs/plans/skillboard-variant-lifecycle-handoff.md +56 -0
- package/docs/policy-model.md +266 -214
- package/docs/positioning.md +94 -94
- package/docs/reference.md +349 -0
- package/docs/routing.md +85 -0
- package/docs/user-flow.md +75 -16
- package/docs/value-proof.md +190 -0
- package/docs/variant-lifecycle.md +86 -0
- package/docs/versioning.md +149 -138
- package/examples/multi-source-skills/anthropic/docx/SKILL.md +8 -8
- package/examples/multi-source-skills/anthropic/skill-creator/SKILL.md +8 -8
- package/examples/multi-source-skills/matt/grill-me/SKILL.md +8 -8
- package/examples/multi-source-skills/matt/tdd/SKILL.md +8 -8
- package/examples/multi-source-skills/omo/review-work/SKILL.md +8 -8
- package/examples/multi-source-skills/omo/ulw-plan/SKILL.md +8 -8
- package/examples/multi-source-skills/private/tdd-work-continuity/SKILL.md +8 -8
- package/examples/multi-source-skills/private/workflow-router/SKILL.md +8 -8
- package/examples/multi-source-skills/wshobson/python-testing/SKILL.md +8 -8
- package/examples/multi-source-skills/wshobson/security-review/SKILL.md +8 -8
- package/examples/skills/grill-me/SKILL.md +9 -9
- package/examples/skills/grill-with-docs/SKILL.md +9 -9
- package/examples/skills/requirement-intake/SKILL.md +9 -9
- package/examples/skills/tdd/SKILL.md +8 -8
- package/package.json +7 -3
- package/src/advisor/guidance.mjs +232 -0
- package/src/advisor/schema.mjs +2 -0
- package/src/advisor/skills.mjs +2 -0
- package/src/advisor.mjs +36 -7
- package/src/brief-cli.mjs +6 -5
- package/src/brief-renderer.mjs +225 -8
- package/src/cli.mjs +574 -27
- package/src/config-helpers.mjs +34 -18
- package/src/conflicts.mjs +70 -0
- package/src/control/can-use-guard.mjs +8 -3
- package/src/control/skill-crud.mjs +142 -0
- package/src/control/skill-variants.mjs +221 -0
- package/src/control/source-trust.mjs +1 -0
- package/src/control/variant-files.mjs +265 -0
- package/src/control/variant-lifecycle-config.mjs +156 -0
- package/src/control/variant-reset.mjs +171 -0
- package/src/control/variant-status.mjs +75 -0
- package/src/control.mjs +13 -1
- package/src/domain/rules/skills.mjs +60 -0
- package/src/domain/rules/workflows.mjs +13 -0
- package/src/impact.mjs +21 -12
- package/src/index.mjs +13 -1
- package/src/lifecycle-cli.mjs +18 -7
- package/src/lifecycle-content.mjs +29 -22
- package/src/route.mjs +537 -0
- package/src/source-verification.mjs +7 -3
- package/src/workspace.mjs +141 -43
- package/tsconfig.lsp.json +1 -1
package/docs/install.md
CHANGED
|
@@ -1,34 +1,51 @@
|
|
|
1
|
-
# Install And Bootstrap
|
|
2
|
-
|
|
3
|
-
SkillBoard sits one layer above skill installers, plugin marketplaces, harness
|
|
4
|
-
bundles, and local skill repositories.
|
|
5
|
-
|
|
1
|
+
# Install And Bootstrap
|
|
2
|
+
|
|
3
|
+
SkillBoard sits one layer above skill installers, plugin marketplaces, harness
|
|
4
|
+
bundles, and local skill repositories.
|
|
5
|
+
|
|
6
|
+
After install, ask your AI questions like "what skills can you use in this
|
|
7
|
+
project?" or "can you make this reviewed skill available for the current
|
|
8
|
+
workflow?" The AI runs SkillBoard behind the scenes: it reads the current brief,
|
|
9
|
+
uses one current action id only after confirmation when policy would change, and
|
|
10
|
+
runs the guard automatically before actual skill use. For already-allowed
|
|
11
|
+
skills, the AI should tell you which skill it is about to use and which skill it
|
|
12
|
+
used in the result instead of asking for another approval. That disclosure is an
|
|
13
|
+
audit trace, not a permission prompt. You do not need to memorize the SkillBoard
|
|
14
|
+
command loop.
|
|
15
|
+
|
|
6
16
|
## Install From npm
|
|
7
17
|
|
|
8
|
-
Use npx when you want to bootstrap a project
|
|
9
|
-
SkillBoard binary installed:
|
|
18
|
+
Use no-prompt npx package execution when you want to bootstrap a project
|
|
19
|
+
without keeping a global SkillBoard binary installed:
|
|
20
|
+
|
|
21
|
+
AI/automation/operator details:
|
|
10
22
|
|
|
11
23
|
```bash
|
|
12
|
-
npx agent-skillboard init
|
|
13
|
-
npx agent-skillboard
|
|
14
|
-
npx agent-skillboard
|
|
24
|
+
npx --yes --package agent-skillboard skillboard init
|
|
25
|
+
npx --yes --package agent-skillboard skillboard doctor --summary
|
|
26
|
+
npx --yes --package agent-skillboard skillboard brief --workflow <workflow-from-init>
|
|
15
27
|
```
|
|
16
28
|
|
|
17
29
|
SkillBoard does not make installed skills automatically callable. It imports
|
|
18
30
|
trusted local skills as manual-only and keeps runtime/plugin skills quarantined
|
|
19
|
-
until reviewed.
|
|
31
|
+
until reviewed. When `init` creates or discovers workflows, use one of the
|
|
32
|
+
workflow names it prints for the first brief. If `init` does not print a
|
|
33
|
+
workflow, run the unscoped `brief` command it prints instead. The explicit
|
|
34
|
+
package/binary spelling avoids an extra npx install prompt and keeps the
|
|
35
|
+
executable name clear.
|
|
20
36
|
|
|
21
|
-
|
|
37
|
+
The equivalent `npm exec` spelling is also no-prompt and works well in scripts:
|
|
22
38
|
|
|
23
39
|
```bash
|
|
24
|
-
npx --yes --package agent-skillboard skillboard init
|
|
25
|
-
npx --yes --package agent-skillboard skillboard doctor --summary
|
|
26
40
|
npm exec --yes --package agent-skillboard -- skillboard init
|
|
27
41
|
npm exec --yes --package agent-skillboard -- skillboard doctor --summary
|
|
42
|
+
npm exec --yes --package agent-skillboard -- skillboard brief --workflow <workflow-from-init>
|
|
28
43
|
```
|
|
29
44
|
|
|
30
45
|
For repeated local use, install the CLI globally:
|
|
31
46
|
|
|
47
|
+
AI/automation/operator details:
|
|
48
|
+
|
|
32
49
|
```bash
|
|
33
50
|
npm install -g agent-skillboard
|
|
34
51
|
skillboard init
|
|
@@ -43,10 +60,12 @@ The executable remains `skillboard` even though the npm package name is
|
|
|
43
60
|
Use GitHub npx only when you intentionally want the current repository state
|
|
44
61
|
before the next npm release:
|
|
45
62
|
|
|
63
|
+
AI/automation/operator details:
|
|
64
|
+
|
|
46
65
|
```bash
|
|
47
66
|
npx --yes --package github:NyXXiR/skillboard skillboard init
|
|
48
|
-
npx --yes --package github:NyXXiR/skillboard skillboard brief
|
|
49
67
|
npx --yes --package github:NyXXiR/skillboard skillboard doctor --summary
|
|
68
|
+
npx --yes --package github:NyXXiR/skillboard skillboard brief --workflow <workflow-from-init>
|
|
50
69
|
```
|
|
51
70
|
|
|
52
71
|
The equivalent `npm exec` spelling is explicit about the package and binary:
|
|
@@ -54,35 +73,38 @@ The equivalent `npm exec` spelling is explicit about the package and binary:
|
|
|
54
73
|
```bash
|
|
55
74
|
npm exec --yes --package github:NyXXiR/skillboard -- skillboard init
|
|
56
75
|
npm exec --yes --package github:NyXXiR/skillboard -- skillboard doctor --summary
|
|
76
|
+
npm exec --yes --package github:NyXXiR/skillboard -- skillboard brief --workflow <workflow-from-init>
|
|
57
77
|
```
|
|
58
78
|
|
|
59
79
|
## Install From A Clone
|
|
60
80
|
|
|
61
81
|
Use a clone when developing SkillBoard itself or testing unreleased changes:
|
|
62
82
|
|
|
83
|
+
AI/automation/operator details:
|
|
84
|
+
|
|
63
85
|
```bash
|
|
64
86
|
git clone https://github.com/NyXXiR/skillboard.git
|
|
65
87
|
cd skillboard
|
|
66
88
|
npm install
|
|
67
89
|
node bin/skillboard.mjs init --dir /path/to/your/project
|
|
68
|
-
node bin/skillboard.mjs brief --dir /path/to/your/project
|
|
69
90
|
node bin/skillboard.mjs doctor --dir /path/to/your/project --summary
|
|
91
|
+
node bin/skillboard.mjs brief --dir /path/to/your/project --workflow <workflow-from-init>
|
|
70
92
|
```
|
|
71
|
-
|
|
72
|
-
## What init Does
|
|
73
|
-
|
|
93
|
+
|
|
94
|
+
## What init Does
|
|
95
|
+
|
|
74
96
|
`skillboard init` is the safe mutating step. npm installation itself does not
|
|
75
97
|
modify a project, but init creates the files that let agents discover the control
|
|
76
98
|
plane without a manual prompt and inventories already installed local agent
|
|
77
99
|
skills.
|
|
78
|
-
|
|
79
|
-
Created project files:
|
|
80
|
-
|
|
81
|
-
- `skillboard.config.yaml`: desired state for workflows, capabilities, skills,
|
|
82
|
-
harnesses, and install units.
|
|
83
|
-
- `skills/`: local skill root.
|
|
84
|
-
- `.skillboard/reports/`: generated dashboard and reconcile output location.
|
|
85
|
-
- `.skillboard/profiles/`: project-specific source profile location.
|
|
100
|
+
|
|
101
|
+
Created project files:
|
|
102
|
+
|
|
103
|
+
- `skillboard.config.yaml`: desired state for workflows, capabilities, skills,
|
|
104
|
+
harnesses, and install units.
|
|
105
|
+
- `skills/`: local skill root.
|
|
106
|
+
- `.skillboard/reports/`: generated dashboard and reconcile output location.
|
|
107
|
+
- `.skillboard/profiles/`: project-specific source profile location.
|
|
86
108
|
- `AGENTS.md`: Codex-style project instruction bridge.
|
|
87
109
|
- `CLAUDE.md`: Claude Code project instruction bridge.
|
|
88
110
|
|
|
@@ -120,16 +142,30 @@ CI or automation gate. Use `--json` for an agent-readable health payload, or
|
|
|
120
142
|
report. `skillboard status` is the same report under a shorter command name.
|
|
121
143
|
|
|
122
144
|
For AI-mediated use, the generated bridge tells agents to answer availability
|
|
123
|
-
questions
|
|
124
|
-
`SKILL.md` bodies. The brief is read-only and organizes the
|
|
125
|
-
"What your AI can use now", decisions the user can make once,
|
|
126
|
-
blocks, inactive installed skills, and suggested action cards. Text
|
|
127
|
-
action cards by default; JSON keeps them opt-in with
|
|
128
|
-
default text brief is compact for large skill sets: it
|
|
129
|
-
categories, the next safe action, short section previews, and
|
|
130
|
-
summaries. Use `skillboard brief --verbose` when
|
|
131
|
-
copyable command details. Agents should still run
|
|
132
|
-
immediately before an actual skill invocation.
|
|
145
|
+
questions by reading the current brief with `skillboard brief --json`, not from
|
|
146
|
+
memory or from raw `SKILL.md` bodies. The brief is read-only and organizes the
|
|
147
|
+
response around "What your AI can use now", decisions the user can make once,
|
|
148
|
+
hard safety blocks, inactive installed skills, and suggested action cards. Text
|
|
149
|
+
briefs show action cards by default; JSON keeps them opt-in with
|
|
150
|
+
`--include-actions`. The default text brief is compact for large skill sets: it
|
|
151
|
+
keeps counts, top categories, the next safe action, short section previews, and
|
|
152
|
+
short action summaries. Use `skillboard brief --verbose` when an operator needs
|
|
153
|
+
the full list or full copyable command details. Agents should still run
|
|
154
|
+
`skillboard guard use ...` immediately before an actual skill invocation. A
|
|
155
|
+
passing guard is not a user prompt; the agent should disclose the selected skill
|
|
156
|
+
at the start and completion, and ask only if the guard denies use or a
|
|
157
|
+
policy-changing action is needed.
|
|
158
|
+
|
|
159
|
+
When the user asks which skill fits a task, the bridge tells agents to use
|
|
160
|
+
`skillboard brief --intent <request> --json`, read `assistant_guidance.route`,
|
|
161
|
+
and use `recommended_skill`, `fallback_skills`, `route_candidates`,
|
|
162
|
+
`post_use_policy_suggestion`, and `guard_command` instead of guessing from raw
|
|
163
|
+
skill text. Inspect
|
|
164
|
+
`route_candidates` when several skills match so denied candidates and selected
|
|
165
|
+
fallbacks are clear. If `post_use_policy_suggestion` is present, the agent
|
|
166
|
+
should use the allowed routed skill first, then ask after completion whether to
|
|
167
|
+
remember the suggested policy. If no skill matches, the agent should ask a
|
|
168
|
+
clarifying question before choosing a skill.
|
|
133
169
|
|
|
134
170
|
Action cards are change suggestions. Before an agent applies one that changes
|
|
135
171
|
policy, trust, hooks, reset state, or skill references, it should request user
|
|
@@ -152,20 +188,34 @@ system prompt for the managed project:
|
|
|
152
188
|
|
|
153
189
|
```text
|
|
154
190
|
Use SkillBoard as the source of truth for agent skill availability.
|
|
155
|
-
|
|
156
|
-
|
|
191
|
+
Use the workflow generated by init, such as `hermes-codex-local-manual`, or a
|
|
192
|
+
workflow you explicitly created for that Hermes profile.
|
|
193
|
+
|
|
194
|
+
Before answering what skills can be used in that workflow, run:
|
|
195
|
+
skillboard brief --workflow <workflow-name> --json --include-actions --dir /path/to/your/project
|
|
196
|
+
|
|
197
|
+
When the user asks which skill fits a task, run:
|
|
198
|
+
skillboard brief --workflow <workflow-name> --intent <request> --json --dir /path/to/your/project
|
|
199
|
+
Read assistant_guidance.route. Use recommended_skill, fallback_skills,
|
|
200
|
+
route_candidates, post_use_policy_suggestion, and guard_command. Inspect
|
|
201
|
+
route_candidates when several skills match so denied candidates and selected
|
|
202
|
+
fallbacks are clear. If post_use_policy_suggestion is present, use the allowed
|
|
203
|
+
routed skill first, then ask after completion whether to remember the suggested
|
|
204
|
+
policy. If no skill matches, ask a clarifying question before choosing a skill.
|
|
157
205
|
|
|
158
206
|
Do not infer availability from installed SKILL.md files. Immediately before
|
|
159
207
|
invoking a skill, run:
|
|
160
208
|
skillboard guard use <skill-id> --workflow <workflow-name> --dir /path/to/your/project
|
|
161
209
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
210
|
+
If the guard allows an already-approved skill, do not ask the user for another
|
|
211
|
+
approval. Say at the start: "I will use <skill-id> for this request." Say at
|
|
212
|
+
completion: "I used <skill-id> for this request." Treat that disclosure as an
|
|
213
|
+
audit trace, not a permission prompt.
|
|
166
214
|
|
|
167
|
-
|
|
168
|
-
|
|
215
|
+
For suggested policy changes, ask the user to approve one current action id from
|
|
216
|
+
the `--include-actions` brief, then run:
|
|
217
|
+
skillboard apply-action <action-id> --workflow <workflow-name> --dir /path/to/your/project --yes --json
|
|
218
|
+
```
|
|
169
219
|
|
|
170
220
|
After installing a new local agent skill pack, plugin, workflow bundle, or
|
|
171
221
|
harness, rescan before enabling anything:
|
|
@@ -275,24 +325,24 @@ may be wired into local agent/runtime configuration. Combine `--reset-config`,
|
|
|
275
325
|
SkillBoard-owned lifecycle scaffolding while preserving local `skills/`.
|
|
276
326
|
|
|
277
327
|
## Upper-Layer Control
|
|
278
|
-
|
|
279
|
-
After installing skill packs or harness bundles, represent them as install
|
|
280
|
-
units:
|
|
281
|
-
|
|
282
|
-
```bash
|
|
283
|
-
skillboard import \
|
|
284
|
-
--profile github.mattpocock.skills \
|
|
285
|
-
--source-root /path/to/mattpocock-skills \
|
|
286
|
-
--out .skillboard/reports/mattpocock-import.yaml
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
The import output is a reviewable YAML fragment. Merge the accepted `skills` and
|
|
290
|
-
`install_units` into `skillboard.config.yaml`; imported skills stay inactive
|
|
291
|
-
until workflows and policies explicitly use them.
|
|
292
|
-
|
|
293
|
-
For a direct but still safe apply path:
|
|
294
|
-
|
|
295
|
-
```bash
|
|
328
|
+
|
|
329
|
+
After installing skill packs or harness bundles, represent them as install
|
|
330
|
+
units:
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
skillboard import \
|
|
334
|
+
--profile github.mattpocock.skills \
|
|
335
|
+
--source-root /path/to/mattpocock-skills \
|
|
336
|
+
--out .skillboard/reports/mattpocock-import.yaml
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
The import output is a reviewable YAML fragment. Merge the accepted `skills` and
|
|
340
|
+
`install_units` into `skillboard.config.yaml`; imported skills stay inactive
|
|
341
|
+
until workflows and policies explicitly use them.
|
|
342
|
+
|
|
343
|
+
For a direct but still safe apply path:
|
|
344
|
+
|
|
345
|
+
```bash
|
|
296
346
|
skillboard import \
|
|
297
347
|
--profile github.mattpocock.skills \
|
|
298
348
|
--source-root /path/to/mattpocock-skills \
|
|
@@ -325,45 +375,45 @@ changes.
|
|
|
325
375
|
|
|
326
376
|
```yaml
|
|
327
377
|
install_units:
|
|
328
|
-
github.mattpocock.skills:
|
|
329
|
-
kind: marketplace
|
|
330
|
-
source: npx skills@latest add mattpocock/skills
|
|
331
|
-
scope: user-global
|
|
332
|
-
provided_components:
|
|
333
|
-
- skills
|
|
334
|
-
components:
|
|
335
|
-
skills:
|
|
336
|
-
- matt.tdd
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
Then link each governed skill back to its owner:
|
|
340
|
-
|
|
341
|
-
```yaml
|
|
342
|
-
skills:
|
|
343
|
-
matt.tdd:
|
|
344
|
-
path: matt/tdd
|
|
345
|
-
status: active
|
|
346
|
-
invocation: workflow-auto
|
|
347
|
-
exposure: exported
|
|
348
|
-
owner_install_unit: github.mattpocock.skills
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
Run:
|
|
352
|
-
|
|
353
|
-
```bash
|
|
354
|
-
skillboard check --config skillboard.config.yaml --skills skills
|
|
355
|
-
skillboard dashboard --config skillboard.config.yaml --skills skills --out .skillboard/reports/skill-map.md
|
|
356
|
-
```
|
|
357
|
-
|
|
358
|
-
This keeps multiple installed repositories visible as managed units instead of
|
|
359
|
-
turning every skill into a global invocation candidate.
|
|
360
|
-
|
|
361
|
-
## Adapter Direction
|
|
362
|
-
|
|
363
|
-
Import support should be profile-driven, not hardcoded. A popular source such as
|
|
364
|
-
`mattpocock/skills` or `oh-my-openagent` may ship with a built-in source profile,
|
|
365
|
-
but that profile should be data that maps repository layout and defaults into the
|
|
366
|
-
same install-unit model. Source-specific code should be limited to detector
|
|
367
|
-
plugins for layouts that cannot be described declaratively.
|
|
368
|
-
|
|
369
|
-
See [adapters.md](adapters.md).
|
|
378
|
+
github.mattpocock.skills:
|
|
379
|
+
kind: marketplace
|
|
380
|
+
source: npx skills@latest add mattpocock/skills
|
|
381
|
+
scope: user-global
|
|
382
|
+
provided_components:
|
|
383
|
+
- skills
|
|
384
|
+
components:
|
|
385
|
+
skills:
|
|
386
|
+
- matt.tdd
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
Then link each governed skill back to its owner:
|
|
390
|
+
|
|
391
|
+
```yaml
|
|
392
|
+
skills:
|
|
393
|
+
matt.tdd:
|
|
394
|
+
path: matt/tdd
|
|
395
|
+
status: active
|
|
396
|
+
invocation: workflow-auto
|
|
397
|
+
exposure: exported
|
|
398
|
+
owner_install_unit: github.mattpocock.skills
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
Run:
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
skillboard check --config skillboard.config.yaml --skills skills
|
|
405
|
+
skillboard dashboard --config skillboard.config.yaml --skills skills --out .skillboard/reports/skill-map.md
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
This keeps multiple installed repositories visible as managed units instead of
|
|
409
|
+
turning every skill into a global invocation candidate.
|
|
410
|
+
|
|
411
|
+
## Adapter Direction
|
|
412
|
+
|
|
413
|
+
Import support should be profile-driven, not hardcoded. A popular source such as
|
|
414
|
+
`mattpocock/skills` or `oh-my-openagent` may ship with a built-in source profile,
|
|
415
|
+
but that profile should be data that maps repository layout and defaults into the
|
|
416
|
+
same install-unit model. Source-specific code should be limited to detector
|
|
417
|
+
plugins for layouts that cannot be described declaratively.
|
|
418
|
+
|
|
419
|
+
See [adapters.md](adapters.md).
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# SkillBoard Variant Lifecycle Handoff Plan
|
|
2
|
+
|
|
3
|
+
This document was the handoff point for continuing the SkillBoard variant lifecycle implementation in `/home/nyxxir/skillboard`.
|
|
4
|
+
|
|
5
|
+
## Status
|
|
6
|
+
|
|
7
|
+
Completed on 2026-06-29.
|
|
8
|
+
|
|
9
|
+
The authoritative execution plan was `.omo/plans/skillboard-variant-lifecycle.md`; all Todos 1-8 and final verification wave F1-F4 were completed. Ignored orchestration artifacts under `.omo/` and `.agent-work/` contain the detailed evidence and continuity logs.
|
|
10
|
+
|
|
11
|
+
## Implemented Scope
|
|
12
|
+
|
|
13
|
+
The feature adds a manual, auditable lifecycle for cross-agent skill variants:
|
|
14
|
+
|
|
15
|
+
- `skillboard variant fork`
|
|
16
|
+
- `skillboard variant status`
|
|
17
|
+
- `skillboard variant approve`
|
|
18
|
+
- `skillboard variant reset`
|
|
19
|
+
- nested `skills.<id>.variant` metadata
|
|
20
|
+
- digest-backed raw `SKILL.md` snapshots
|
|
21
|
+
- documentation and tests for manual cross-agent adaptation
|
|
22
|
+
|
|
23
|
+
## Product Decisions Preserved
|
|
24
|
+
|
|
25
|
+
- `variant add` remains the existing immediate policy-registration command.
|
|
26
|
+
- New lifecycle commands are additive: `fork`, `status`, `approve`, `reset`.
|
|
27
|
+
- A draft fork is policy-valid but not callable:
|
|
28
|
+
- top-level `status: candidate`
|
|
29
|
+
- top-level `invocation: manual-only`
|
|
30
|
+
- no workflow active/preferred/fallback role until approval
|
|
31
|
+
- `variant.status` is nested lifecycle metadata only. Top-level skill statuses were not expanded with `draft` or `approved`.
|
|
32
|
+
- Snapshot files are raw `SKILL.md` content only.
|
|
33
|
+
- Snapshot paths are config-relative and stay under `.skillboard/variant-snapshots/`.
|
|
34
|
+
- Drift is computed from file digests; `drifted` is not persisted in config.
|
|
35
|
+
- The implementation does not add automatic prompt conversion, LLM calls, new dependencies, or prompt rewriting.
|
|
36
|
+
|
|
37
|
+
## Verification Summary
|
|
38
|
+
|
|
39
|
+
Final verification passed:
|
|
40
|
+
|
|
41
|
+
- `npm run check` → 244/244 tests pass.
|
|
42
|
+
- Focused lifecycle suite → 24/24 tests pass.
|
|
43
|
+
- Manual CLI QA evidence was written under `.omo/evidence/manual-variant-lifecycle/`.
|
|
44
|
+
- F1-F4 evidence files were written under `.omo/evidence/`.
|
|
45
|
+
- Independent final no-edit review passed with no blockers.
|
|
46
|
+
- `git diff --check` and untracked whitespace checks passed.
|
|
47
|
+
|
|
48
|
+
## Final Commit
|
|
49
|
+
|
|
50
|
+
Planned commit message:
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
feat(control): add variant lifecycle management
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Do not push unless the user explicitly asks.
|