bmad-module-skill-forge 1.8.0 → 1.9.0
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/.claude-plugin/marketplace.json +1 -1
- package/docs/_data/pinned.yaml +1 -1
- package/docs/bmad-synergy.md +16 -0
- package/docs/deepwiki.md +89 -0
- package/docs/verifying-a-skill.md +8 -2
- package/docs/workflows.md +17 -11
- package/package.json +2 -2
- package/src/shared/_known-workarounds.yaml +155 -0
- package/src/shared/references/pipeline-contracts.md +11 -2
- package/src/shared/scripts/schemas/skf-brief-result-envelope.v1.json +6 -1
- package/src/shared/scripts/skf-detect-docs.py +412 -0
- package/src/shared/scripts/skf-emit-brief-result-envelope.py +12 -1
- package/src/shared/scripts/skf-preapply.py +192 -0
- package/src/shared/scripts/skf-shape-detect.py +563 -0
- package/src/shared/scripts/skf-validate-pins.py +368 -0
- package/src/skf-analyze-source/SKILL.md +26 -20
- package/src/skf-analyze-source/references/init.md +30 -0
- package/src/skf-analyze-source/references/step-auto-scope.md +525 -0
- package/src/skf-analyze-source/references/step-shape-detect.md +79 -0
- package/src/skf-audit-skill/SKILL.md +1 -0
- package/src/skf-audit-skill/assets/drift-report-template.md +6 -0
- package/src/skf-audit-skill/references/report.md +4 -0
- package/src/skf-audit-skill/references/severity-classify.md +1 -1
- package/src/skf-audit-skill/references/step-doc-drift.md +147 -0
- package/src/skf-brief-skill/SKILL.md +7 -3
- package/src/skf-brief-skill/references/gather-intent.md +14 -0
- package/src/skf-brief-skill/references/step-auto-brief.md +171 -0
- package/src/skf-brief-skill/references/step-auto-validate.md +209 -0
- package/src/skf-create-skill/SKILL.md +3 -0
- package/src/skf-create-skill/assets/skill-sections.md +2 -0
- package/src/skf-create-skill/references/compile.md +1 -1
- package/src/skf-create-skill/references/step-auto-shard.md +110 -0
- package/src/skf-create-skill/references/step-doc-rot.md +109 -0
- package/src/skf-create-skill/references/step-doc-sources.md +114 -0
- package/src/skf-forger/SKILL.md +8 -2
- package/src/skf-test-skill/SKILL.md +8 -7
- package/src/skf-test-skill/customize.toml +2 -1
- package/src/skf-test-skill/references/external-validators.md +1 -1
- package/src/skf-test-skill/references/init.md +16 -1
- package/src/skf-test-skill/references/report.md +5 -1
- package/src/skf-test-skill/references/score.md +95 -6
- package/src/skf-test-skill/references/step-hard-gate.md +73 -0
- package/src/skf-test-skill/templates/test-report-template.md +1 -0
package/docs/_data/pinned.yaml
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
# Enforced two ways: (1) release.yaml bumps this line in the same commit
|
|
27
27
|
# as package.json + marketplace.json on every release; (2) validate-docs-drift.js
|
|
28
28
|
# cross-checks this value against package.json.version and fails on mismatch.
|
|
29
|
-
skf_version: "1.
|
|
29
|
+
skf_version: "1.9.0"
|
|
30
30
|
|
|
31
31
|
# Path to the oh-my-skills repo, resolved relative to this repo's root.
|
|
32
32
|
# Override at runtime with the OMS environment variable if oh-my-skills
|
package/docs/bmad-synergy.md
CHANGED
|
@@ -25,6 +25,22 @@ When a BMAD agent runs a workflow, that workflow can consult SKF content skills
|
|
|
25
25
|
|
|
26
26
|
---
|
|
27
27
|
|
|
28
|
+
## SKF Without BMM
|
|
29
|
+
|
|
30
|
+
SKF works standalone — no BMAD installation required. If you found this page from a search and don't use the BMAD Method, this section is for you.
|
|
31
|
+
|
|
32
|
+
The fastest way to start is [`deepwiki`](../deepwiki/). One command produces a verified wiki skill in 3–5 minutes with zero configuration:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
@Ferris deepwiki https://github.com/honojs/hono
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
That's it. No brief file, no scope decisions, no multi-step pipeline to learn. deepwiki handles analysis, scoping, compilation, testing (with a 90% quality gate), and export automatically. See the [deepwiki guide](../deepwiki/) for the full syntax and input types.
|
|
39
|
+
|
|
40
|
+
If you later adopt the BMAD Method, the skills you created via deepwiki integrate seamlessly into BMM phases — they become the verified content skills that BMAD workflows consult during planning and implementation. The [phase-by-phase playbook](#skf-and-bmm-phase-by-phase-playbook) below shows exactly where each SKF workflow fits.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
28
44
|
## SKF and BMM: Phase-by-Phase Playbook
|
|
29
45
|
|
|
30
46
|
BMM is BMAD's core [4-phase workflow](https://docs.bmad-method.org/) (Analysis → Planning → Solutioning → Implementation). SKF has five concrete entry points across those phases. The diagram below shows the end-to-end picture; the subsections that follow give the trigger, command, and artifact flow for each phase.
|
package/docs/deepwiki.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: deepwiki
|
|
3
|
+
description: Zero-ceremony wiki-skill creation — one command turns a GitHub repo, doc URL, or pinned version into a verified wiki skill
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
deepwiki is a [pipeline alias](../workflows/#pipeline-aliases) that chains five workflows into a single command. Give it a repo URL, a documentation URL, or a pinned version, and it produces a verified wiki skill in 3–5 minutes with zero configuration.
|
|
7
|
+
|
|
8
|
+
If you're new to SKF and want to try it without reading anything else, start here.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Invocation
|
|
13
|
+
|
|
14
|
+
Three input types, one command pattern:
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
@Ferris deepwiki https://github.com/honojs/hono — repo URL
|
|
18
|
+
@Ferris deepwiki https://docs.example.com — doc URL (docs-only)
|
|
19
|
+
@Ferris deepwiki https://github.com/honojs/hono --pin v4.6.0 — pinned version
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- **Repo URL** — analyzes the full source repository, extracts exports, and compiles a wiki skill from code + docs.
|
|
23
|
+
- **Doc URL** — skips source analysis entirely and builds the skill from documentation alone. Useful for closed-source libraries or when the docs are the canonical reference.
|
|
24
|
+
- **`--pin <version>`** — targets a specific release. The version tag is resolved during analysis so the resulting skill is locked to that exact API surface.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Pipeline Stages
|
|
29
|
+
|
|
30
|
+
deepwiki expands to `AN[auto] BS[auto] CS TS[min:90] EX`. Each stage runs in [headless mode](../workflows/#headless-mode) — no confirmation gates, no interactive prompts.
|
|
31
|
+
|
|
32
|
+
| Stage | Workflow | Mode | What Happens |
|
|
33
|
+
|-------|----------|------|-------------|
|
|
34
|
+
| 1 | **Analyze Source** (AN) | `[auto]` | Scans the target, detects shape (library/framework/tool/app), discovers exports, and generates a scope + brief automatically. |
|
|
35
|
+
| 2 | **Brief Skill** (BS) | `[auto]` | Enriches the auto-generated brief with doc detection results. No interactive scoping — the brief is assembled from AN's output. |
|
|
36
|
+
| 3 | **Create Skill** (CS) | standard | Compiles the skill from the enriched brief. Extracts exports, resolves documentation sources, validates structure. |
|
|
37
|
+
| 4 | **Test Skill** (TS) | `[min:90]` | Verifies completeness with a **90% quality threshold** (stricter than the default 80%). Fail halts the pipeline. |
|
|
38
|
+
| 5 | **Export Skill** (EX) | standard | Validates the package, generates context snippets, and injects into your IDE's context file. |
|
|
39
|
+
|
|
40
|
+
Data flows automatically between stages — the brief path from AN feeds BS, the skill name from CS feeds TS, and so on. See [Pipeline Mode](../workflows/#pipeline-mode) for the general mechanics.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Automatic Behaviors
|
|
45
|
+
|
|
46
|
+
deepwiki's `[auto]` flags activate several behaviors that normally require manual input:
|
|
47
|
+
|
|
48
|
+
- **Auto-scope** — shape detection (library, framework, tool, application) drives scope decisions. No interactive scope confirmation.
|
|
49
|
+
- **Auto-brief** — the brief is generated and enriched with doc-detection results in one pass, without the interactive discovery flow that `BS` uses standalone.
|
|
50
|
+
- **Coexistence detection** — if a skill for the same target already exists, deepwiki detects it and offers three options: create alongside (new version), merge into the existing skill, or skip.
|
|
51
|
+
- **Auto-decomposition** — for massive repos (>500 exports or >3 packages), AN automatically decomposes into multiple analysis units before proceeding.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Expected Output
|
|
56
|
+
|
|
57
|
+
A successful deepwiki run produces a complete skill package in your forge data directory, exported and ready for use. The skill includes:
|
|
58
|
+
|
|
59
|
+
- `SKILL.md` — the compiled wiki skill with provenance-cited instructions
|
|
60
|
+
- `metadata.json` — version, source, confidence tier breakdown
|
|
61
|
+
- Context snippet injected into your IDE context file (CLAUDE.md, .cursorrules, AGENTS.md, etc.)
|
|
62
|
+
|
|
63
|
+
The quality threshold is 90% — if the skill scores below that, the pipeline halts at TS with a gap report. Run `@Ferris US` to address gaps, then `@Ferris TS EX` to re-test and export.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Timing
|
|
68
|
+
|
|
69
|
+
A typical library (50–200 exports) takes **3–5 minutes** end to end. Factors that increase time:
|
|
70
|
+
|
|
71
|
+
- Massive repos (>500 exports) trigger auto-decomposition, adding 1–3 minutes
|
|
72
|
+
- Doc-only targets depend on documentation site size and structure
|
|
73
|
+
- Deep-tier projects (with QMD and CCC) spend more time on enrichment
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Migration from onboard
|
|
78
|
+
|
|
79
|
+
deepwiki replaces the older `onboard` alias. `onboard` still works but shows a deprecation notice on every invocation and will be removed in v2.0.
|
|
80
|
+
|
|
81
|
+
The key difference: `onboard` runs `AN CS TS EX` with standard (interactive) modes. deepwiki adds auto-scope, auto-brief, a stricter quality gate (90% vs 80%), and accepts repo URLs and doc URLs — not just project paths.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## Related
|
|
86
|
+
|
|
87
|
+
- [Workflows](../workflows/) — pipeline mode mechanics, headless mode, circuit breakers
|
|
88
|
+
- [Concepts](../concepts/) — provenance, confidence tiers, drift, version pinning
|
|
89
|
+
- [BMAD Synergy](../bmad-synergy/) — how deepwiki fits into BMAD phases, and standalone SKF usage
|
|
@@ -156,16 +156,22 @@ Your forge tier determines which categories can be scored:
|
|
|
156
156
|
|
|
157
157
|
When categories are skipped, their combined weight is redistributed proportionally to the remaining active categories. A Quick-tier skill and a Deep-tier skill both pass at the same 80% threshold — the score reflects what your tier can actually measure.
|
|
158
158
|
|
|
159
|
+
### Hard gate
|
|
160
|
+
|
|
161
|
+
Before scoring, a hard gate scans all findings for **Critical** and **High** severity. If any are present, the pipeline blocks immediately — no score is computed and the skill cannot pass regardless of coverage percentage. Medium, Low, and Info findings pass through to scoring.
|
|
162
|
+
|
|
159
163
|
### Pass/fail
|
|
160
164
|
|
|
161
165
|
```
|
|
162
|
-
threshold = custom_threshold OR 80% (default)
|
|
166
|
+
threshold = pipeline_default OR custom_threshold OR 80% (default)
|
|
163
167
|
|
|
164
168
|
score >= threshold → PASS → Recommend export-skill
|
|
165
169
|
score < threshold → FAIL → Recommend update-skill
|
|
166
170
|
```
|
|
167
171
|
|
|
168
|
-
The default is 80
|
|
172
|
+
The default threshold is **80%**. Pipeline aliases declare their own defaults: `deepwiki` targets **90%**, `forge` and `forge-quick` target **80%**. You can override any default with a custom threshold (e.g., `TS[min:85]`).
|
|
173
|
+
|
|
174
|
+
When a skill scores between 80% and its target threshold (e.g., 82% against a 90% target), the soft gate falls back to the 80% floor — the skill passes, but an evidence report is written to `forge-data/{skill}/{version}/evidence-report-fallback.md` documenting the quality compromise.
|
|
169
175
|
|
|
170
176
|
### Gap severities
|
|
171
177
|
|
package/docs/workflows.md
CHANGED
|
@@ -52,7 +52,7 @@ Trigger workflows by typing commands to [Ferris](../agents/). See [Concepts](../
|
|
|
52
52
|
|
|
53
53
|
**When to Use:** After Brief Skill, or with an existing skill-brief.yaml.
|
|
54
54
|
|
|
55
|
-
**Key Steps:** Load brief → Ecosystem check → Extract (AST + scripts/assets) → QMD enrich (Deep) → Compile → Validate → Generate
|
|
55
|
+
**Key Steps:** Load brief → Ecosystem check → Extract (AST + scripts/assets) → QMD enrich (Deep) → Compile → Doc sources → Auto-shard → Doc-rot → Validate → Generate
|
|
56
56
|
|
|
57
57
|
**Agent:** Ferris (Architect mode)
|
|
58
58
|
|
|
@@ -141,7 +141,7 @@ Trigger workflows by typing commands to [Ferris](../agents/). See [Concepts](../
|
|
|
141
141
|
|
|
142
142
|
**When to Use:** To check if a skill has fallen out of date with its source code. Works for both individual skills and stack skills.
|
|
143
143
|
|
|
144
|
-
**Key Steps:** Load skill → Re-index source → Structural diff (incl. script/asset drift) → Semantic diff (Deep) → Classify severity → Report
|
|
144
|
+
**Key Steps:** Load skill → Re-index source → Structural diff (incl. script/asset drift) → Semantic diff (Deep) → Classify severity → Doc drift → Report
|
|
145
145
|
|
|
146
146
|
**Stack skill support:** Code-mode stacks are audited per-library against their sources. Compose-mode stacks check constituent freshness via metadata hash comparison — if a constituent skill was updated after the stack was composed, audit flags it as constituent drift. Stack skills that need updating are redirected to `@Ferris SS` for re-composition (surgical update is not supported for stacks).
|
|
147
147
|
|
|
@@ -157,9 +157,9 @@ Trigger workflows by typing commands to [Ferris](../agents/). See [Concepts](../
|
|
|
157
157
|
|
|
158
158
|
**When to Use:** After creating or updating a skill, before exporting.
|
|
159
159
|
|
|
160
|
-
**Key Steps:** Load skill → Detect mode → Coverage check → Coherence check → External validation (skill-check, tessl) → Score → Gap report
|
|
160
|
+
**Key Steps:** Load skill → Detect mode → Coverage check → Coherence check → External validation (skill-check, tessl) → Hard gate → Score → Gap report
|
|
161
161
|
|
|
162
|
-
**Scored Categories:** Export Coverage (36%), Signature Accuracy (22%), Type Coverage (14%), Coherence (18%), External Validation (10%). Default pass threshold: **80
|
|
162
|
+
**Scored Categories:** Export Coverage (36%), Signature Accuracy (22%), Type Coverage (14%), Coherence (18%), External Validation (10%). Default pass threshold: **80%** (per-pipeline defaults: deepwiki 90%, forge 80%). Pass routes to Export Skill; fail routes to Update Skill with a gap report. See [Completeness Scoring](../verifying-a-skill/#how-the-score-is-computed) for the full formula and tier adjustments.
|
|
163
163
|
|
|
164
164
|
**Agent:** Ferris (Audit mode)
|
|
165
165
|
|
|
@@ -289,7 +289,7 @@ flowchart TD
|
|
|
289
289
|
| Category | Workflows | Description |
|
|
290
290
|
| ------------------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
|
291
291
|
| Core | SF, BS, CS, US | Setup, brief, create, and update skills |
|
|
292
|
-
| Feature | QS, SS, AN | Quick skill, stack skill, and analyze source
|
|
292
|
+
| Feature | QS, SS, AN | Quick skill, stack skill, and analyze source — the [`deepwiki`](#pipeline-aliases) alias chains AN + BS + CS + TS + EX for zero-ceremony wiki-skill creation |
|
|
293
293
|
| Quality | AS, TS | Detect skill drift (AS) and verify skill completeness (TS) |
|
|
294
294
|
| Architecture Verification | VS, RA | Pre-code architecture feasibility and refinement |
|
|
295
295
|
| Management | RS, DS | Rename and drop skill versions with transactional safety |
|
|
@@ -313,12 +313,15 @@ Instead of running one workflow per session, you can chain multiple workflows in
|
|
|
313
313
|
|
|
314
314
|
### Pipeline Aliases
|
|
315
315
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
|
319
|
-
|
|
|
320
|
-
| `
|
|
321
|
-
| `
|
|
316
|
+
The `deepwiki` alias is the recommended way to create wiki skills — one command, zero configuration. It chains five workflows with auto-mode flags so you get a verified skill without touching a brief or scope file.
|
|
317
|
+
|
|
318
|
+
| Alias | Expands To | First Workflow | Required Target |
|
|
319
|
+
| ------------- | -------------------------------------- | -------------- | -------------------------------------------- |
|
|
320
|
+
| `deepwiki` | `AN[auto] BS[auto] CS TS[min:90] EX` | AN | GitHub URL, doc URL, or `--pin <version>` |
|
|
321
|
+
| `forge` | `BS CS TS EX` | BS | GitHub URL or local path **+** skill name |
|
|
322
|
+
| `forge-quick` | `QS TS EX` | QS | GitHub URL **or** package name |
|
|
323
|
+
| `onboard` | `AN CS TS EX` *(deprecated — use deepwiki)* | AN | Project path (defaults to current directory) |
|
|
324
|
+
| `maintain` | `AS US TS EX` | AS | Existing skill name |
|
|
322
325
|
|
|
323
326
|
**The first workflow's input contract defines what arguments the pipeline needs.** A bare package name works for `forge-quick` (QS resolves packages via the registry) but **not** for `forge` — BS requires both an unambiguous target (URL or path) and a skill name.
|
|
324
327
|
|
|
@@ -334,6 +337,9 @@ Instead of running one workflow per session, you can chain multiple workflows in
|
|
|
334
337
|
### Examples
|
|
335
338
|
|
|
336
339
|
```
|
|
340
|
+
@Ferris deepwiki https://github.com/honojs/hono — zero-ceremony wiki skill
|
|
341
|
+
@Ferris deepwiki https://docs.example.com — docs-only wiki skill
|
|
342
|
+
@Ferris deepwiki https://github.com/honojs/hono --pin v4.6.0 — pinned version
|
|
337
343
|
@Ferris forge-quick @tanstack/query — QS + TS + EX for TanStack Query
|
|
338
344
|
@Ferris forge https://github.com/topoteretes/cognee cognee — BS + CS + TS + EX, explicit URL + name
|
|
339
345
|
@Ferris forge https://github.com/topoteretes/cognee cognee "public API only" — with scope hint
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "bmad-module-skill-forge",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.9.0",
|
|
5
5
|
"description": "BMAD module — Turn code and docs into instructions AI agents can actually follow. Progressive capability tiers (Quick/Forge/Forge+/Deep).",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"bmad",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"test:cli": "node test/test-cli-integration.js",
|
|
54
54
|
"test:install": "node test/test-installation-components.js",
|
|
55
55
|
"test:knowledge": "node test/test-knowledge-base.js",
|
|
56
|
-
"test:python": "uv run --with pytest --with pyyaml --with jsonschema pytest test/test-compute-score-contract.py test/test-skf-preflight.py test/test-skf-skill-inventory.py test/test-skf-validate-output.py test/test-skf-validate-frontmatter.py test/test-skf-manifest-ops.py test/test-skf-rebuild-managed-sections.py test/test-skf-atomic-write.py test/test-skf-severity-classify.py test/test-skf-structural-diff.py test/test-skf-detect-tools.py test/test-skf-forge-tier-rw.py test/test-skf-emit-result-envelope.py test/test-skf-qmd-classify-collections.py test/test-skf-merge-ccc-exclusions.py test/test-skf-resolve-package.py test/test-skf-extract-public-api.py test/test-skf-render-quick-metadata.py test/test-skf-validate-brief-inputs.py test/test-skf-emit-brief-result-envelope.py test/test-skf-write-skill-brief.py test/test-skf-detect-workspaces.py test/test-skf-recommend-scope-type.py test/test-skf-detect-language.py test/test-skf-description-guard.py test/test-skf-detect-scripts-assets.py test/test-skf-hash-content.py test/test-skf-validate-brief-schema.py test/test-skf-check-workspace-drift.py test/test-skf-update-active-symlink.py test/test-skf-build-change-manifest.py test/test-skf-provenance-gap-dispatch.py test/test-skf-resolve-authoritative-files.py test/test-skf-scan-manifests.py test/test-skf-pair-intersect.py test/test-skf-enumerate-stack-skills.py test/test-skf-compare-file-hashes.py test/test-skf-load-provenance.py test/test-skf-scan-skill-md-structure.py test/test-skf-disqualify-candidates.py test/test-skf-chain-reachability.py -v",
|
|
56
|
+
"test:python": "uv run --with pytest --with pyyaml --with jsonschema pytest test/test-compute-score-contract.py test/test-skf-preflight.py test/test-skf-skill-inventory.py test/test-skf-validate-output.py test/test-skf-validate-frontmatter.py test/test-skf-manifest-ops.py test/test-skf-rebuild-managed-sections.py test/test-skf-atomic-write.py test/test-skf-severity-classify.py test/test-skf-structural-diff.py test/test-skf-detect-tools.py test/test-skf-forge-tier-rw.py test/test-skf-emit-result-envelope.py test/test-skf-qmd-classify-collections.py test/test-skf-merge-ccc-exclusions.py test/test-skf-resolve-package.py test/test-skf-extract-public-api.py test/test-skf-render-quick-metadata.py test/test-skf-validate-brief-inputs.py test/test-skf-emit-brief-result-envelope.py test/test-skf-write-skill-brief.py test/test-skf-detect-workspaces.py test/test-skf-recommend-scope-type.py test/test-skf-detect-language.py test/test-skf-description-guard.py test/test-skf-detect-scripts-assets.py test/test-skf-hash-content.py test/test-skf-validate-brief-schema.py test/test-skf-check-workspace-drift.py test/test-skf-update-active-symlink.py test/test-skf-build-change-manifest.py test/test-skf-provenance-gap-dispatch.py test/test-skf-resolve-authoritative-files.py test/test-skf-scan-manifests.py test/test-skf-pair-intersect.py test/test-skf-enumerate-stack-skills.py test/test-skf-compare-file-hashes.py test/test-skf-load-provenance.py test/test-skf-scan-skill-md-structure.py test/test-skf-disqualify-candidates.py test/test-skf-chain-reachability.py test/test-skf-shape-detect.py test/test-skf-detect-docs.py test/test-skf-step-doc-sources.py test/test-skf-step-doc-drift.py test/test-skf-step-hard-gate.py test/test-skf-per-pipeline-thresholds.py test/test-skf-evidence-report-fallback.py test/test-skf-validate-pins.py test/test-skf-auto-shard.py test/test-skf-preapply.py test/test-skf-step-doc-rot.py -v",
|
|
57
57
|
"test:schemas": "node test/test-agent-schema.js",
|
|
58
58
|
"test:workflow": "node test/test-workflow-state.js",
|
|
59
59
|
"validate:refs": "node tools/validate-file-refs.js --strict",
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
version: 1
|
|
2
|
+
workarounds:
|
|
3
|
+
- fingerprint: "```api\nGET /api/v1/skills/compile"
|
|
4
|
+
fix: "```\nskf compile --target <skill-dir>"
|
|
5
|
+
source: gmc-batch-2024-q4
|
|
6
|
+
severity: high
|
|
7
|
+
description: Hallucinated REST API endpoint replaced with correct CLI invocation
|
|
8
|
+
|
|
9
|
+
- fingerprint: 'requires-python = ">=3.8"'
|
|
10
|
+
fix: 'requires-python = ">=3.9"'
|
|
11
|
+
source: gmc-batch-2024-q4
|
|
12
|
+
severity: medium
|
|
13
|
+
description: Stale Python 3.8 minimum version updated to 3.9 baseline
|
|
14
|
+
|
|
15
|
+
- fingerprint: "## outputs\n\n## steps"
|
|
16
|
+
fix: "## Outputs\n\n## Steps"
|
|
17
|
+
source: gmc-batch-2025-q1
|
|
18
|
+
severity: high
|
|
19
|
+
description: Lowercase heading violates skill-sections spec capitalization rules
|
|
20
|
+
|
|
21
|
+
- fingerprint: "confidence: unverified"
|
|
22
|
+
fix: "confidence: T1-inferred"
|
|
23
|
+
source: gmc-batch-2025-q1
|
|
24
|
+
severity: medium
|
|
25
|
+
description: Missing provenance tier replaced with correct T1 annotation
|
|
26
|
+
|
|
27
|
+
- fingerprint: "[source: unknown]"
|
|
28
|
+
fix: "[source: repo-readme]"
|
|
29
|
+
source: gmc-batch-2024-q4
|
|
30
|
+
severity: low
|
|
31
|
+
description: Placeholder source attribution replaced with actual provenance
|
|
32
|
+
|
|
33
|
+
- fingerprint: "See [API Reference](./api-reference.md)"
|
|
34
|
+
fix: "See the API reference in the repository documentation."
|
|
35
|
+
source: gmc-batch-2025-q1
|
|
36
|
+
severity: high
|
|
37
|
+
description: Broken cross-reference to non-existent api-reference.md file
|
|
38
|
+
|
|
39
|
+
- fingerprint: "## Steps\n## Outputs"
|
|
40
|
+
fix: "## Steps\n\n## Outputs"
|
|
41
|
+
source: gmc-batch-2024-q4
|
|
42
|
+
severity: low
|
|
43
|
+
description: Missing blank line between heading sections fails markdown lint
|
|
44
|
+
|
|
45
|
+
- fingerprint: "(v1.0.0+)"
|
|
46
|
+
fix: ""
|
|
47
|
+
source: gmc-batch-2025-q1
|
|
48
|
+
severity: low
|
|
49
|
+
description: Inline version stamp removed per documentation conventions
|
|
50
|
+
|
|
51
|
+
- fingerprint: "tier: gold"
|
|
52
|
+
fix: "tier: verified"
|
|
53
|
+
source: gmc-batch-2024-q4
|
|
54
|
+
severity: medium
|
|
55
|
+
description: Non-standard tier label replaced with canonical tier vocabulary
|
|
56
|
+
|
|
57
|
+
- fingerprint: "```javascript\nfetch('/api/skill"
|
|
58
|
+
fix: "```bash\nskf"
|
|
59
|
+
source: gmc-batch-2025-q1
|
|
60
|
+
severity: high
|
|
61
|
+
description: Hallucinated JavaScript fetch call replaced with CLI command
|
|
62
|
+
|
|
63
|
+
- fingerprint: "## References\n## Steps"
|
|
64
|
+
fix: "## Steps"
|
|
65
|
+
source: gmc-batch-2024-q4
|
|
66
|
+
severity: high
|
|
67
|
+
description: References section misplaced before Steps violates section ordering
|
|
68
|
+
|
|
69
|
+
- fingerprint: "source: (generated)"
|
|
70
|
+
fix: "source: compilation-output"
|
|
71
|
+
source: gmc-batch-2025-q1
|
|
72
|
+
severity: low
|
|
73
|
+
description: Vague generated marker replaced with specific compilation-output source
|
|
74
|
+
|
|
75
|
+
- fingerprint: "# Skill Name\n# Overview"
|
|
76
|
+
fix: "# Skill Name\n\n## Overview"
|
|
77
|
+
source: gmc-batch-2024-q4
|
|
78
|
+
severity: high
|
|
79
|
+
description: Duplicate H1 heading replaced with correct H2 for Overview section
|
|
80
|
+
|
|
81
|
+
- fingerprint: "[ref: SKILL-SPEC-2.0](./spec.md)"
|
|
82
|
+
fix: "See the skill specification."
|
|
83
|
+
source: gmc-batch-2025-q1
|
|
84
|
+
severity: medium
|
|
85
|
+
description: Broken spec reference link to non-existent file
|
|
86
|
+
|
|
87
|
+
- fingerprint: "version: 0.9-draft"
|
|
88
|
+
fix: "version: 1"
|
|
89
|
+
source: gmc-batch-2024-q4
|
|
90
|
+
severity: medium
|
|
91
|
+
description: Draft version string replaced with release version
|
|
92
|
+
|
|
93
|
+
- fingerprint: "\\bconfidence:\\s*(?:none|n/a|unset)\\b"
|
|
94
|
+
fix: "confidence: T1-inferred"
|
|
95
|
+
source: gmc-batch-2025-q1
|
|
96
|
+
severity: medium
|
|
97
|
+
description: Empty or null confidence values normalized to T1-inferred
|
|
98
|
+
regex: true
|
|
99
|
+
|
|
100
|
+
- fingerprint: " - tool: compile-skill\n endpoint: /compile"
|
|
101
|
+
fix: " - tool: skf-compile\n invocation: CLI"
|
|
102
|
+
source: gmc-batch-2024-q4
|
|
103
|
+
severity: high
|
|
104
|
+
description: Hallucinated tool entry with REST endpoint replaced with correct CLI tool
|
|
105
|
+
|
|
106
|
+
- fingerprint: "## setup\n"
|
|
107
|
+
fix: "## Setup\n"
|
|
108
|
+
source: gmc-batch-2025-q1
|
|
109
|
+
severity: low
|
|
110
|
+
description: Lowercase Setup heading fails skill-check validation
|
|
111
|
+
|
|
112
|
+
- fingerprint: "\\[citation needed\\]"
|
|
113
|
+
fix: ""
|
|
114
|
+
source: gmc-batch-2024-q4
|
|
115
|
+
severity: low
|
|
116
|
+
description: Wikipedia-style citation placeholder removed from compiled output
|
|
117
|
+
regex: true
|
|
118
|
+
|
|
119
|
+
- fingerprint: "Last updated: 2023"
|
|
120
|
+
fix: ""
|
|
121
|
+
source: gmc-batch-2025-q1
|
|
122
|
+
severity: low
|
|
123
|
+
description: Stale 2023 date stamp removed from compiled skill content
|
|
124
|
+
|
|
125
|
+
- fingerprint: "## Inputs\n## inputs"
|
|
126
|
+
fix: "## Inputs"
|
|
127
|
+
source: gmc-batch-2024-q4
|
|
128
|
+
severity: medium
|
|
129
|
+
description: Duplicate Inputs section with inconsistent casing collapsed
|
|
130
|
+
|
|
131
|
+
- fingerprint: "\\bsee also:\\s*\\[.*\\]\\(https?://internal\\..*\\)"
|
|
132
|
+
fix: ""
|
|
133
|
+
source: gmc-batch-2025-q1
|
|
134
|
+
severity: high
|
|
135
|
+
description: Internal-only URL references removed from public skill output
|
|
136
|
+
regex: true
|
|
137
|
+
|
|
138
|
+
- fingerprint: "provenance: []\n"
|
|
139
|
+
fix: "provenance:\n - source: compilation-output\n confidence: T1-inferred\n"
|
|
140
|
+
source: gmc-batch-2024-q4
|
|
141
|
+
severity: medium
|
|
142
|
+
description: Empty provenance array populated with minimal compilation metadata
|
|
143
|
+
|
|
144
|
+
- fingerprint: "## Steps\n\n\n\n## Outputs"
|
|
145
|
+
fix: "## Steps\n\n## Outputs"
|
|
146
|
+
source: gmc-batch-2025-q1
|
|
147
|
+
severity: low
|
|
148
|
+
description: Excessive blank lines between sections reduced to standard single blank
|
|
149
|
+
|
|
150
|
+
- fingerprint: "\\|\\s*Step\\s*\\|\\s*Status\\s*\\|\\n\\|[-\\s|]+\\|\\n(?=\\|\\s*Step)"
|
|
151
|
+
fix: ""
|
|
152
|
+
source: gmc-batch-2024-q4
|
|
153
|
+
severity: medium
|
|
154
|
+
description: Duplicated markdown table header removed from compiled output
|
|
155
|
+
regex: true
|
|
@@ -19,9 +19,10 @@ The forger also accepts common pipeline aliases:
|
|
|
19
19
|
|
|
20
20
|
| Alias | Expands To | Description |
|
|
21
21
|
|-------|-----------|-------------|
|
|
22
|
+
| `deepwiki` | `AN[auto] BS[auto] CS TS[min:90] EX` | Full zero-ceremony wiki-skill pipeline |
|
|
22
23
|
| `forge` | `BS CS TS EX` | Full skill creation pipeline (brief through export) |
|
|
23
24
|
| `forge-quick` | `QS TS EX` | Quick skill pipeline |
|
|
24
|
-
| `onboard` | `AN CS TS EX` | Full brownfield onboarding (
|
|
25
|
+
| `onboard` | `AN CS TS EX` | Full brownfield onboarding (deprecated — use deepwiki) |
|
|
25
26
|
| `maintain` | `AS US TS EX` | Maintenance cycle (audit → update → test → export) |
|
|
26
27
|
|
|
27
28
|
## Pipeline Rules
|
|
@@ -33,12 +34,17 @@ The forger also accepts common pipeline aliases:
|
|
|
33
34
|
5. **Error halts propagate** — if any workflow hard-halts, the pipeline stops immediately
|
|
34
35
|
6. **Progress reporting** — the forger reports completion of each workflow before starting the next
|
|
35
36
|
|
|
37
|
+
## Pipeline Arguments
|
|
38
|
+
|
|
39
|
+
Pipeline-level arguments (e.g., `--pin <version>`) are passed to the first workflow's data context. The workflow decides how to consume them. For the `deepwiki` pipeline, `--pin` flows to AN, where `step-auto-scope.md §0b` uses it for pin resolution.
|
|
40
|
+
|
|
36
41
|
## Data Flow
|
|
37
42
|
|
|
38
43
|
How outputs from one workflow become inputs to the next:
|
|
39
44
|
|
|
40
45
|
| From | To | Data Passed | How |
|
|
41
46
|
|------|-----|------------|-----|
|
|
47
|
+
| AN | BS | `brief_path` from generated brief | Forger passes the `brief_path` from AN's output to BS[auto], which loads and enriches the brief |
|
|
42
48
|
| AN | CS | `skill-brief.yaml` paths from generated briefs | Forger passes each `brief_path` written by AN to CS; in batch mode, CS processes all sequentially |
|
|
43
49
|
| BS | CS | `skill-brief.yaml` path | Forger passes the brief path written by BS as `brief_path` to CS |
|
|
44
50
|
| CS | TS | skill name (derived from brief) | Forger passes the `skill_name` from the completed CS to TS |
|
|
@@ -57,7 +63,7 @@ Circuit breakers halt the pipeline when a workflow's output doesn't meet a quali
|
|
|
57
63
|
|----------|-------|-------------------|----------------|
|
|
58
64
|
| AN | recommended units count | min: 1 | Zero skillable units found |
|
|
59
65
|
| CS | compilation success | must complete | Hard error during compilation |
|
|
60
|
-
| TS | completeness score | min: 60 | Score below threshold |
|
|
66
|
+
| TS | completeness score | min: 60 (per-pipeline defaults apply — see init.md §1b) | Score below 80% floor (scores between 80% and per-pipeline threshold produce a fallback PASS with evidence report — pipeline continues) |
|
|
61
67
|
| AS | drift score | not CRITICAL | Critical drift found |
|
|
62
68
|
| VS | feasibility verdict | not BLOCKED | All integrations blocked |
|
|
63
69
|
|
|
@@ -68,6 +74,7 @@ Override syntax: `TS[min:80]` sets the test-skill threshold to 80 for this pipel
|
|
|
68
74
|
Brackets after a workflow code (`CODE[value]`) are parsed as follows:
|
|
69
75
|
|
|
70
76
|
- **Circuit breaker override**: `min:N` where N is a number — e.g., `TS[min:80]` sets the threshold for that workflow
|
|
77
|
+
- **Mode flag**: `auto` — e.g., `AN[auto]` activates auto mode for that workflow. The workflow's first step reads the flag from pipeline data context and routes to the appropriate auto-mode step file.
|
|
71
78
|
- **Target argument**: any other value — e.g., `CS[cocoindex]` passes "cocoindex" as the target to CS
|
|
72
79
|
|
|
73
80
|
Only workflows with a circuit breaker entry (AN, CS, TS, AS, VS) accept `min:N` overrides. All other workflows ignore `min:N` brackets. Target arguments are valid for any workflow that accepts a named input (CS, QS, BS, US, etc.).
|
|
@@ -78,12 +85,14 @@ The forger tracks pipeline state in memory during execution:
|
|
|
78
85
|
|
|
79
86
|
```yaml
|
|
80
87
|
pipeline:
|
|
88
|
+
alias: "forge" # pipeline alias name, or null for ad-hoc sequences
|
|
81
89
|
workflows: [AN, CS, TS, EX]
|
|
82
90
|
current_index: 1
|
|
83
91
|
completed:
|
|
84
92
|
- {code: AN, status: ok, output: {units: 3, briefs: [...]}}
|
|
85
93
|
pending: [CS, TS, EX]
|
|
86
94
|
data:
|
|
95
|
+
pipeline_alias: "forge" # forwarded to each workflow's data context (consumed by TS init.md §1b for per-pipeline threshold lookup)
|
|
87
96
|
skill_name: "cocoindex"
|
|
88
97
|
brief_path: "/path/to/skill-brief.yaml"
|
|
89
98
|
target: "cocoindex"
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"description": "Single-line JSON document emitted by skf-brief-skill step 5 §4b when {headless_mode} is true, prefixed with the literal 'SKF_BRIEF_RESULT_JSON: '. Pipelines grep one line out of the workflow log to branch on the brief outcome without parsing prose. Schema mirrors the contract in src/skf-brief-skill/SKILL.md Result Contract section.",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
|
-
"required": ["status", "brief_path", "skill_name", "version", "language", "scope_type", "exit_code", "halt_reason"],
|
|
8
|
+
"required": ["status", "brief_path", "skill_name", "version", "language", "scope_type", "exit_code", "halt_reason", "mode"],
|
|
9
9
|
"properties": {
|
|
10
10
|
"status": {
|
|
11
11
|
"type": "string",
|
|
@@ -53,6 +53,11 @@
|
|
|
53
53
|
"user-cancelled"
|
|
54
54
|
],
|
|
55
55
|
"description": "Null on success. One of the documented HALT classes on error. Pipelines branch on this to surface the right operator message without grepping the prose error."
|
|
56
|
+
},
|
|
57
|
+
"mode": {
|
|
58
|
+
"type": ["string", "null"],
|
|
59
|
+
"enum": ["auto", null],
|
|
60
|
+
"description": "'auto' when BS was invoked with the [auto] bracket modifier (pipeline auto-brief generation). Null otherwise (interactive or headless-without-auto)."
|
|
56
61
|
}
|
|
57
62
|
}
|
|
58
63
|
}
|