bmad-module-skill-forge 0.2.0 → 0.3.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/README.md +88 -44
- package/docs/agents.md +1 -1
- package/docs/architecture.md +49 -20
- package/docs/examples.md +13 -2
- package/docs/getting-started.md +15 -13
- package/docs/index.md +3 -1
- package/docs/workflows.md +2 -2
- package/package.json +5 -3
- package/src/forger/forge-tier.yaml +1 -1
- package/src/forger/preferences.yaml +8 -1
- package/src/knowledge/doc-fetcher.md +55 -0
- package/src/knowledge/overview.md +17 -16
- package/src/knowledge/progressive-capability.md +9 -1
- package/src/knowledge/provenance-tracking.md +31 -23
- package/src/knowledge/qmd-registry.md +132 -0
- package/src/knowledge/skf-knowledge-index.csv +2 -0
- package/src/workflows/analyze-source/data/skill-brief-schema.md +24 -4
- package/src/workflows/analyze-source/steps-c/step-01-init.md +19 -9
- package/src/workflows/analyze-source/steps-c/step-01b-continue.md +2 -2
- package/src/workflows/analyze-source/steps-c/step-02-scan-project.md +10 -2
- package/src/workflows/analyze-source/steps-c/step-04-map-and-detect.md +17 -2
- package/src/workflows/analyze-source/steps-c/step-05-recommend.md +2 -1
- package/src/workflows/analyze-source/steps-c/step-06-generate-briefs.md +3 -3
- package/src/workflows/analyze-source/templates/analysis-report-template.md +1 -1
- package/src/workflows/analyze-source/validation-report.md +1 -1
- package/src/workflows/analyze-source/workflow-plan-analyze-source.md +1 -1
- package/src/workflows/analyze-source/workflow.md +1 -1
- package/src/workflows/audit-skill/steps-c/step-01-init.md +8 -5
- package/src/workflows/audit-skill/steps-c/step-02-re-index.md +12 -2
- package/src/workflows/audit-skill/validation-report.md +2 -2
- package/src/workflows/audit-skill/workflow-plan-audit-skill.md +1 -1
- package/src/workflows/brief-skill/data/scope-templates.md +60 -0
- package/src/workflows/brief-skill/data/skill-brief-schema.md +38 -3
- package/src/workflows/brief-skill/steps-c/step-01-gather-intent.md +20 -4
- package/src/workflows/brief-skill/steps-c/step-03-scope-definition.md +20 -64
- package/src/workflows/brief-skill/steps-c/step-04-confirm-brief.md +1 -1
- package/src/workflows/brief-skill/steps-c/step-05-write-brief.md +60 -5
- package/src/workflows/brief-skill/workflow.md +2 -1
- package/src/workflows/create-skill/data/compile-assembly-rules.md +110 -0
- package/src/workflows/create-skill/data/extraction-patterns.md +248 -0
- package/src/workflows/create-skill/data/skill-sections.md +79 -25
- package/src/workflows/create-skill/data/source-resolution-protocols.md +130 -0
- package/src/workflows/create-skill/steps-c/step-01-load-brief.md +7 -4
- package/src/workflows/create-skill/steps-c/step-02-ecosystem-check.md +10 -7
- package/src/workflows/create-skill/steps-c/step-03-extract.md +49 -9
- package/src/workflows/create-skill/steps-c/step-03b-fetch-temporal.md +238 -0
- package/src/workflows/create-skill/steps-c/step-03c-fetch-docs.md +220 -0
- package/src/workflows/create-skill/steps-c/step-04-enrich.md +40 -10
- package/src/workflows/create-skill/steps-c/step-05-compile.md +48 -81
- package/src/workflows/create-skill/steps-c/step-06-validate.md +149 -63
- package/src/workflows/create-skill/steps-c/step-07-generate-artifacts.md +53 -3
- package/src/workflows/create-skill/steps-c/step-08-report.md +1 -1
- package/src/workflows/create-skill/workflow-plan-create-skill.md +42 -10
- package/src/workflows/create-skill/workflow.md +3 -2
- package/src/workflows/create-stack-skill/data/stack-skill-template.md +20 -7
- package/src/workflows/create-stack-skill/steps-c/step-01-init.md +2 -2
- package/src/workflows/create-stack-skill/steps-c/step-04-parallel-extract.md +14 -0
- package/src/workflows/create-stack-skill/steps-c/step-06-compile-stack.md +28 -7
- package/src/workflows/create-stack-skill/steps-c/step-07-generate-output.md +10 -7
- package/src/workflows/create-stack-skill/steps-c/step-08-validate.md +66 -68
- package/src/workflows/create-stack-skill/validation-report.md +1 -1
- package/src/workflows/create-stack-skill/workflow-plan-create-stack-skill.md +4 -4
- package/src/workflows/export-skill/data/managed-section-format.md +1 -0
- package/src/workflows/export-skill/data/snippet-format.md +33 -14
- package/src/workflows/export-skill/steps-c/step-01-load-skill.md +16 -2
- package/src/workflows/export-skill/steps-c/step-03-generate-snippet.md +29 -22
- package/src/workflows/export-skill/steps-c/step-04-update-context.md +1 -1
- package/src/workflows/export-skill/steps-c/step-05-token-report.md +1 -1
- package/src/workflows/export-skill/validation-report.md +1 -1
- package/src/workflows/export-skill/workflow-plan-export-skill.md +8 -8
- package/src/workflows/quick-skill/data/skill-template.md +27 -7
- package/src/workflows/quick-skill/steps-c/step-04-compile.md +44 -13
- package/src/workflows/quick-skill/steps-c/step-05-validate.md +79 -16
- package/src/workflows/quick-skill/validation-report.md +4 -4
- package/src/workflows/quick-skill/workflow-plan-quick-skill.md +4 -4
- package/src/workflows/quick-skill/workflow.md +2 -0
- package/src/workflows/setup-forge/steps-c/step-01-detect-and-tier.md +12 -3
- package/src/workflows/setup-forge/steps-c/step-02-write-config.md +10 -2
- package/src/workflows/setup-forge/steps-c/step-03-auto-index.md +111 -40
- package/src/workflows/setup-forge/steps-c/step-04-report.md +13 -0
- package/src/workflows/setup-forge/workflow.md +1 -0
- package/src/workflows/test-skill/data/scoring-rules.md +14 -6
- package/src/workflows/test-skill/data/source-access-protocol.md +37 -0
- package/src/workflows/test-skill/steps-c/step-01-init.md +38 -13
- package/src/workflows/test-skill/steps-c/step-02-detect-mode.md +2 -3
- package/src/workflows/test-skill/steps-c/step-03-coverage-check.md +25 -5
- package/src/workflows/test-skill/steps-c/step-04-coherence-check.md +18 -43
- package/src/workflows/test-skill/steps-c/step-04b-external-validators.md +213 -0
- package/src/workflows/test-skill/steps-c/step-05-score.md +24 -27
- package/src/workflows/test-skill/steps-c/step-06-report.md +9 -4
- package/src/workflows/test-skill/templates/test-report-template.md +2 -1
- package/src/workflows/test-skill/validation-report.md +1 -1
- package/src/workflows/test-skill/workflow-plan-test-skill.md +7 -3
- package/src/workflows/test-skill/workflow.md +1 -1
- package/src/workflows/update-skill/data/remote-source-resolution.md +43 -0
- package/src/workflows/update-skill/steps-c/step-01-init.md +13 -7
- package/src/workflows/update-skill/steps-c/step-02-detect-changes.md +26 -0
- package/src/workflows/update-skill/steps-c/step-03-re-extract.md +37 -9
- package/src/workflows/update-skill/steps-c/step-04-merge.md +3 -3
- package/src/workflows/update-skill/steps-c/step-05-validate.md +63 -67
- package/src/workflows/update-skill/steps-c/step-06-write.md +37 -14
- package/src/workflows/update-skill/steps-c/step-07-report.md +1 -1
- package/src/workflows/update-skill/validation-report.md +4 -4
- package/src/workflows/update-skill/workflow-plan-update-skill.md +4 -4
- package/src/workflows/update-skill/workflow.md +1 -1
- package/tools/cli/commands/status.js +4 -4
- package/tools/cli/commands/uninstall.js +1 -1
- package/tools/cli/commands/update.js +2 -2
- package/tools/cli/lib/ui.js +60 -16
- package/tools/cli/lib/version-check.js +2 -2
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Source Access Protocol
|
|
2
|
+
|
|
3
|
+
## Source API Surface Definition
|
|
4
|
+
|
|
5
|
+
**Source API surface** = the package's top-level public exports. These are the symbols reachable from the primary entry point without importing internal modules:
|
|
6
|
+
|
|
7
|
+
- **Python:** symbols exported in `__init__.py` (including re-exports) — exclude private (`_prefixed`) names
|
|
8
|
+
- **TypeScript/JavaScript:** named exports from `index.ts` / `index.js` — exclude unexported locals
|
|
9
|
+
- **Go:** exported identifiers (capitalized) from the package's public-facing files
|
|
10
|
+
- **Rust:** items in `pub use` from `lib.rs` or `mod.rs`
|
|
11
|
+
|
|
12
|
+
Internal module symbols are **excluded** from the coverage denominator unless they are explicitly documented in SKILL.md (in which case they count as documented extras, not missing coverage).
|
|
13
|
+
|
|
14
|
+
This matches the extraction-patterns.md convention used during skill creation: coverage measures how well SKILL.md documents what users actually import, not the entire internal codebase.
|
|
15
|
+
|
|
16
|
+
## Source Access Resolution
|
|
17
|
+
|
|
18
|
+
Before analysis, determine source access level. Walk through these states in order — use the first that succeeds:
|
|
19
|
+
|
|
20
|
+
**State 1 — Local source available:**
|
|
21
|
+
Check if `{source_path}` (from metadata.json `source_root`) exists on disk. If yes → full analysis at detected tier (AST + signatures). Set `analysis_confidence: full`.
|
|
22
|
+
|
|
23
|
+
**State 2 — Local absent, provenance-map exists:**
|
|
24
|
+
Check `{forge_data_folder}/{skill_name}/provenance-map.json`. If present, use it as the baseline export inventory — each entry contains structured fields: `export_name`, `export_type`, `params[]`, `return_type`, `source_file`, `source_line`, `confidence`, and `ast_node_type`. Cross-reference against SKILL.md documented exports for name-matching and param-by-param coverage. Signature verification compares SKILL.md's documented params/return types against provenance-map entries directly. If remote reading tools are available (zread, deepwiki, gh API, or similar), supplement by reading the entry point file for live signature verification. Set `analysis_confidence: provenance-map`.
|
|
25
|
+
|
|
26
|
+
**State 3 — No provenance-map, metadata exports exist (quick-skill path):**
|
|
27
|
+
If no provenance-map.json exists (typical for quick-skill output), fall back to `metadata.json`'s `exports[]` array for the export name list. Coverage check becomes a self-consistency comparison: are all names in `exports[]` documented in SKILL.md with description, parameters, and return type? Signatures cannot be verified. If remote reading tools are available, supplement by reading the entry point for live export comparison. Set `analysis_confidence: metadata-only`.
|
|
28
|
+
|
|
29
|
+
**State 4 — No local source, no forge-data, remote tools available:**
|
|
30
|
+
If neither provenance-map nor metadata exports provide a usable baseline, but remote reading tools (zread, deepwiki, gh API, or similar) are available and `source_repo` is set in metadata.json, read the entry point remotely to build the export inventory from scratch. Name-matching only — no AST. Set `analysis_confidence: remote-only`.
|
|
31
|
+
|
|
32
|
+
**State 5 — No source access at all:**
|
|
33
|
+
If none of the above succeed, fall through to docs-only mode (section 0 already handles this). Set `analysis_confidence: docs-only`. Warn: "**No source access available.** Coverage check evaluates documentation self-consistency only. Re-run with local clone or remote access for source-backed verification."
|
|
34
|
+
|
|
35
|
+
Set `analysis_confidence` in context for use in Section 2 analysis depth, step-05 output, and step-05 scoring.
|
|
36
|
+
|
|
37
|
+
**Confidence tier mapping:** `full` = T1, `provenance-map` = T1, `metadata-only` = T1-low, `remote-only` = T1-low, `docs-only` = T3. This aligns with the T1/T1-low/T2/T3 scale used across all SKF workflows.
|
|
@@ -3,7 +3,7 @@ name: 'step-01-init'
|
|
|
3
3
|
description: 'Discover skill, load forge tier state, validate inputs, create test report'
|
|
4
4
|
|
|
5
5
|
nextStepFile: './step-02-detect-mode.md'
|
|
6
|
-
outputFile: '{
|
|
6
|
+
outputFile: '{forge_data_folder}/{skill_name}/test-report-{skill_name}.md'
|
|
7
7
|
templateFile: '../templates/test-report-template.md'
|
|
8
8
|
sidecarFile: '{sidecar_path}/forge-tier.yaml'
|
|
9
9
|
skillsOutputFolder: '{skills_output_folder}'
|
|
@@ -87,12 +87,32 @@ HALT — do not proceed.
|
|
|
87
87
|
**If metadata.json missing:**
|
|
88
88
|
"**Warning:** metadata.json not found. Proceeding with limited metadata. Some checks may be skipped."
|
|
89
89
|
|
|
90
|
-
### 3.
|
|
90
|
+
### 3. Validate Frontmatter Compliance
|
|
91
|
+
|
|
92
|
+
Before proceeding to content analysis, verify that SKILL.md has valid agentskills.io frontmatter. This catches compliance issues early, regardless of which workflow generated the skill.
|
|
93
|
+
|
|
94
|
+
**Check the following:**
|
|
95
|
+
- [ ] SKILL.md begins with `---` and has a closing `---` (frontmatter present)
|
|
96
|
+
- [ ] `name` field exists, non-empty, lowercase alphanumeric + hyphens, 1-64 chars
|
|
97
|
+
- [ ] `name` matches the skill directory name
|
|
98
|
+
- [ ] `description` field exists, non-empty, 1-1024 chars
|
|
99
|
+
- [ ] No unknown frontmatter fields (only `name`, `description`, `license`, `compatibility`, `metadata`, `allowed-tools` are permitted)
|
|
100
|
+
|
|
101
|
+
**If frontmatter is missing or invalid:**
|
|
102
|
+
"**Warning: SKILL.md frontmatter is non-compliant with agentskills.io specification.**
|
|
103
|
+
|
|
104
|
+
{list specific issues}
|
|
105
|
+
|
|
106
|
+
This skill will fail `npx skills add` and `npx skill-check check`. Consider fixing frontmatter before proceeding (run `npx skill-check check <skill-dir> --fix` to auto-fix deterministic issues)."
|
|
107
|
+
|
|
108
|
+
Log each issue as a pre-check finding. Continue with testing — frontmatter issues will be reported in the gap report alongside coverage/coherence findings.
|
|
109
|
+
|
|
110
|
+
### 4. Load Forge Tier State
|
|
91
111
|
|
|
92
112
|
Read `{sidecarFile}` to determine available analysis depth.
|
|
93
113
|
|
|
94
114
|
**If forge-tier.yaml exists:**
|
|
95
|
-
- Read `
|
|
115
|
+
- Read `tier` value (Quick, Forge, or Deep)
|
|
96
116
|
- Read tool availability flags (ast_grep, gh_cli, qmd)
|
|
97
117
|
|
|
98
118
|
**If forge-tier.yaml missing:**
|
|
@@ -102,18 +122,22 @@ Run **setup-forge** to enable deeper analysis with AST-backed verification."
|
|
|
102
122
|
|
|
103
123
|
Default to Quick tier and continue.
|
|
104
124
|
|
|
105
|
-
###
|
|
125
|
+
### 4b. Apply Tier Override (if set)
|
|
126
|
+
|
|
127
|
+
Read `{sidecar_path}/preferences.yaml`. If `tier_override` is set and is a valid tier value (Quick, Forge, or Deep), update `detected_tier` to the override value for use in subsequent steps and output documents.
|
|
128
|
+
|
|
129
|
+
### 5. Load Skill Metadata
|
|
106
130
|
|
|
107
131
|
Read `metadata.json` to extract:
|
|
108
|
-
- `
|
|
109
|
-
- `skill_type` —
|
|
132
|
+
- `name` — display name
|
|
133
|
+
- `skill_type` — single or stack (needed for mode detection)
|
|
110
134
|
- `source_path` — path to source code (if present)
|
|
111
|
-
- `
|
|
112
|
-
- `
|
|
135
|
+
- `generation_date` — when skill was generated
|
|
136
|
+
- `confidence_tier` — tier used during creation
|
|
113
137
|
|
|
114
138
|
If source path override was provided as optional input, use that instead.
|
|
115
139
|
|
|
116
|
-
###
|
|
140
|
+
### 6. Create Output Document
|
|
117
141
|
|
|
118
142
|
Create `{outputFile}` from `{templateFile}` with initial frontmatter:
|
|
119
143
|
|
|
@@ -121,18 +145,19 @@ Create `{outputFile}` from `{templateFile}` with initial frontmatter:
|
|
|
121
145
|
---
|
|
122
146
|
workflowType: 'test-skill'
|
|
123
147
|
skillName: '{skill_name}'
|
|
148
|
+
skillDir: '{skill_path}'
|
|
124
149
|
testMode: ''
|
|
125
150
|
forgeTier: '{detected_tier}'
|
|
126
151
|
testResult: ''
|
|
127
152
|
score: ''
|
|
128
|
-
|
|
153
|
+
analysisConfidence: ''
|
|
129
154
|
testDate: '{current_date}'
|
|
130
155
|
stepsCompleted: ['step-01-init']
|
|
131
156
|
nextWorkflow: ''
|
|
132
157
|
---
|
|
133
158
|
```
|
|
134
159
|
|
|
135
|
-
###
|
|
160
|
+
### 7. Report Initialization Status
|
|
136
161
|
|
|
137
162
|
"**Test initialization complete.**
|
|
138
163
|
|
|
@@ -144,7 +169,7 @@ nextWorkflow: ''
|
|
|
144
169
|
|
|
145
170
|
**Proceeding to mode detection...**"
|
|
146
171
|
|
|
147
|
-
###
|
|
172
|
+
### 8. Auto-Proceed
|
|
148
173
|
|
|
149
174
|
Display: "**Proceeding to mode detection...**"
|
|
150
175
|
|
|
@@ -168,7 +193,7 @@ ONLY WHEN all required files are validated, forge tier is loaded, output documen
|
|
|
168
193
|
### ✅ SUCCESS:
|
|
169
194
|
|
|
170
195
|
- Skill path validated (SKILL.md exists)
|
|
171
|
-
- Forge tier state loaded (or gracefully defaulted to Quick)
|
|
196
|
+
- Forge tier state loaded (or gracefully defaulted to Quick), override applied if set in preferences.yaml
|
|
172
197
|
- Skill metadata extracted
|
|
173
198
|
- Output document created from template with initial frontmatter
|
|
174
199
|
- Initialization status reported clearly
|
|
@@ -3,7 +3,7 @@ name: 'step-02-detect-mode'
|
|
|
3
3
|
description: 'Determine naive (individual) vs contextual (stack) testing mode'
|
|
4
4
|
|
|
5
5
|
nextStepFile: './step-03-coverage-check.md'
|
|
6
|
-
outputFile: '{
|
|
6
|
+
outputFile: '{forge_data_folder}/{skill_name}/test-report-{skill_name}.md'
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# Step 2: Detect Mode
|
|
@@ -59,7 +59,7 @@ Examine the skill metadata to determine whether this is an individual skill (nai
|
|
|
59
59
|
Read the skill metadata (loaded in step 01) and check:
|
|
60
60
|
|
|
61
61
|
**Individual Skill indicators:**
|
|
62
|
-
- `skill_type: '
|
|
62
|
+
- `skill_type: 'single'` in metadata
|
|
63
63
|
- Single source library/package
|
|
64
64
|
- No cross-references to other skills
|
|
65
65
|
- Self-contained API surface
|
|
@@ -99,7 +99,6 @@ Append the **Test Summary** section to `{outputFile}`:
|
|
|
99
99
|
**Skill:** {skill_name}
|
|
100
100
|
**Test Mode:** {naive|contextual}
|
|
101
101
|
**Forge Tier:** {detected_tier}
|
|
102
|
-
**Threshold:** {threshold}%
|
|
103
102
|
|
|
104
103
|
**Mode Rationale:** {brief explanation of why this mode was selected}
|
|
105
104
|
|
|
@@ -3,8 +3,9 @@ name: 'step-03-coverage-check'
|
|
|
3
3
|
description: 'Compare documented exports in SKILL.md against actual source API surface'
|
|
4
4
|
|
|
5
5
|
nextStepFile: './step-04-coherence-check.md'
|
|
6
|
-
outputFile: '{
|
|
6
|
+
outputFile: '{forge_data_folder}/{skill_name}/test-report-{skill_name}.md'
|
|
7
7
|
scoringRulesFile: '../data/scoring-rules.md'
|
|
8
|
+
sourceAccessProtocol: '../data/source-access-protocol.md'
|
|
8
9
|
---
|
|
9
10
|
|
|
10
11
|
# Step 3: Coverage Check
|
|
@@ -32,7 +33,7 @@ Compare the exports, functions, classes, types, and interfaces documented in SKI
|
|
|
32
33
|
|
|
33
34
|
### Step-Specific Rules:
|
|
34
35
|
|
|
35
|
-
- 🎯 Use subprocess optimization for per-file AST analysis
|
|
36
|
+
- 🎯 Use subprocess optimization for per-file AST analysis when available
|
|
36
37
|
- 💬 Subprocess returns structured findings only, not full file contents
|
|
37
38
|
- 🚫 DO NOT BE LAZY — For EACH source file, launch a subprocess for deep analysis
|
|
38
39
|
- ⚙️ If subprocess unavailable, perform analysis in main thread sequentially
|
|
@@ -56,6 +57,22 @@ Compare the exports, functions, classes, types, and interfaces documented in SKI
|
|
|
56
57
|
|
|
57
58
|
**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise unless user explicitly requests a change.
|
|
58
59
|
|
|
60
|
+
### 0. Check for Docs-Only Mode
|
|
61
|
+
|
|
62
|
+
**If metadata.json indicates `confidence_tier: "Quick"` and all SKILL.md citations are `[EXT:...]` format (docs-only skill):**
|
|
63
|
+
|
|
64
|
+
Coverage scoring adapts: instead of comparing SKILL.md against source code exports, compare SKILL.md documented items against themselves for internal completeness (every documented function has a description, parameters, and return type). Score based on documentation completeness rather than source coverage. Set `docs_only_mode: true` in context for step-05 scoring.
|
|
65
|
+
|
|
66
|
+
"**Docs-only skill detected.** Coverage check evaluates documentation completeness rather than source code coverage."
|
|
67
|
+
|
|
68
|
+
**If source-based skill:** Continue with standard coverage check below.
|
|
69
|
+
|
|
70
|
+
### 0b. Load Source Access Protocol
|
|
71
|
+
|
|
72
|
+
Load `{sourceAccessProtocol}` and follow both sections:
|
|
73
|
+
1. **Source API Surface Definition** — determines what counts as the public API for coverage denominator
|
|
74
|
+
2. **Source Access Resolution** — 5-state waterfall to determine how source files will be read and sets `analysis_confidence`
|
|
75
|
+
|
|
59
76
|
### 1. Extract Documented Exports from SKILL.md
|
|
60
77
|
|
|
61
78
|
Read SKILL.md and extract all documented items:
|
|
@@ -70,14 +87,16 @@ Build the **documented inventory** — a list of everything the SKILL.md claims
|
|
|
70
87
|
|
|
71
88
|
### 2. Analyze Source Code (Tier-Dependent)
|
|
72
89
|
|
|
90
|
+
Start from the package entry point (see 0b) and identify the public API surface. Then analyze those exports at the appropriate tier depth.
|
|
91
|
+
|
|
73
92
|
**Quick Tier (no tools):**
|
|
74
|
-
- Read
|
|
75
|
-
- Identify
|
|
93
|
+
- Read the entry point file(s) directly
|
|
94
|
+
- Identify public exports by scanning for `export` keywords, `module.exports`, `__init__.py` imports, or language-specific export patterns
|
|
76
95
|
- Compare against documented inventory by name matching
|
|
77
96
|
- Cannot verify signatures — note as "unverified" in report
|
|
78
97
|
|
|
79
98
|
**Forge Tier (ast-grep available):**
|
|
80
|
-
DO NOT BE LAZY — For EACH source file
|
|
99
|
+
DO NOT BE LAZY — For EACH source file that defines public API exports, launch a subprocess that:
|
|
81
100
|
1. Uses ast-grep to extract all exported symbols with their full signatures
|
|
82
101
|
2. Matches each export against the documented inventory
|
|
83
102
|
3. Returns structured findings:
|
|
@@ -140,6 +159,7 @@ Append the **Coverage Analysis** section to `{outputFile}`:
|
|
|
140
159
|
## Coverage Analysis
|
|
141
160
|
|
|
142
161
|
**Tier:** {forge_tier}
|
|
162
|
+
**Source Access:** {analysis_confidence} (full | provenance-map | metadata-only | remote-only | docs-only)
|
|
143
163
|
**Source Path:** {source_path}
|
|
144
164
|
**Files Analyzed:** {count}
|
|
145
165
|
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
name: 'step-04-coherence-check'
|
|
3
3
|
description: 'Validate internal consistency — references, types, and integration patterns'
|
|
4
4
|
|
|
5
|
-
nextStepFile: './step-
|
|
6
|
-
outputFile: '{
|
|
5
|
+
nextStepFile: './step-04b-external-validators.md'
|
|
6
|
+
outputFile: '{forge_data_folder}/{skill_name}/test-report-{skill_name}.md'
|
|
7
7
|
outputFormatsFile: '../data/output-section-formats.md'
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -32,7 +32,7 @@ Validate internal consistency of the skill documentation. In contextual mode (st
|
|
|
32
32
|
|
|
33
33
|
### Step-Specific Rules:
|
|
34
34
|
|
|
35
|
-
- 🎯 Use subprocess optimization:
|
|
35
|
+
- 🎯 Use subprocess optimization: grep for references across files, then per-reference deep validation
|
|
36
36
|
- 💬 Subprocess returns structured findings only, not full file contents
|
|
37
37
|
- 🚫 DO NOT BE LAZY — For EACH reference in contextual mode, launch a subprocess to validate the target
|
|
38
38
|
- ⚙️ If subprocess unavailable, perform validation in main thread sequentially
|
|
@@ -47,7 +47,7 @@ Validate internal consistency of the skill documentation. In contextual mode (st
|
|
|
47
47
|
|
|
48
48
|
## CONTEXT BOUNDARIES:
|
|
49
49
|
|
|
50
|
-
- Available: SKILL.md, source files, testMode, forge tier, coverage results from step 03
|
|
50
|
+
- Available: SKILL.md, source files, testMode, forge tier, coverage results from step 03, evidence-report.md from skill's forge-data directory (Deep tier only)
|
|
51
51
|
- Focus: Internal consistency and reference validation only — coverage was step 03
|
|
52
52
|
- Limits: Do NOT recalculate coverage scores — use results from step 03
|
|
53
53
|
- Dependencies: step-03 must have completed coverage analysis
|
|
@@ -102,22 +102,7 @@ Scan SKILL.md for all cross-references:
|
|
|
102
102
|
- Type imports (`import { Type } from './module'`)
|
|
103
103
|
- Integration pattern references (middleware chains, plugin hooks, shared state)
|
|
104
104
|
|
|
105
|
-
Launch a subprocess
|
|
106
|
-
1. Runs grep/regex across SKILL.md for reference patterns (file paths, import statements, skill names)
|
|
107
|
-
2. Returns all found references with their line numbers
|
|
108
|
-
|
|
109
|
-
```json
|
|
110
|
-
{
|
|
111
|
-
"references_found": [
|
|
112
|
-
{"line": 15, "type": "file_path", "target": "./shared/types.ts"},
|
|
113
|
-
{"line": 42, "type": "skill_ref", "target": "auth-skill"},
|
|
114
|
-
{"line": 78, "type": "type_import", "target": "SharedConfig from ./config"}
|
|
115
|
-
],
|
|
116
|
-
"total_references": 3
|
|
117
|
-
}
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
If subprocess unavailable, scan SKILL.md in main thread.
|
|
105
|
+
Launch a subprocess to grep/regex SKILL.md for reference patterns and return all found references with line numbers as structured JSON (`references_found[]` with line, type, target fields). If subprocess unavailable, scan in main thread.
|
|
121
106
|
|
|
122
107
|
### 4. Contextual Mode: Validate Each Reference
|
|
123
108
|
|
|
@@ -129,29 +114,7 @@ DO NOT BE LAZY — For EACH reference found, launch a subprocess that:
|
|
|
129
114
|
- Type imports: type is actually exported from the referenced module
|
|
130
115
|
- Skill references: referenced skill exists in skills output folder
|
|
131
116
|
- Integration patterns: documented pattern matches actual implementation
|
|
132
|
-
3. Returns structured validation
|
|
133
|
-
|
|
134
|
-
```json
|
|
135
|
-
{
|
|
136
|
-
"reference": "./shared/types.ts",
|
|
137
|
-
"line": 15,
|
|
138
|
-
"target_exists": true,
|
|
139
|
-
"type_match": true,
|
|
140
|
-
"signature_match": true,
|
|
141
|
-
"issues": []
|
|
142
|
-
}
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
Or for failures:
|
|
146
|
-
|
|
147
|
-
```json
|
|
148
|
-
{
|
|
149
|
-
"reference": "auth-skill",
|
|
150
|
-
"line": 42,
|
|
151
|
-
"target_exists": false,
|
|
152
|
-
"issues": ["Referenced skill 'auth-skill' not found in skills output folder"]
|
|
153
|
-
}
|
|
154
|
-
```
|
|
117
|
+
3. Returns structured validation JSON per reference (reference, line, target_exists, type_match, signature_match, issues[])
|
|
155
118
|
|
|
156
119
|
If subprocess unavailable, validate each reference in main thread.
|
|
157
120
|
|
|
@@ -180,6 +143,18 @@ Build integration completeness findings:
|
|
|
180
143
|
}
|
|
181
144
|
```
|
|
182
145
|
|
|
146
|
+
### 5b. Contextual Mode + Deep Tier: Section 4b Verification
|
|
147
|
+
|
|
148
|
+
**Only execute if forge tier is Deep.** Skip silently for Quick/Forge tiers.
|
|
149
|
+
|
|
150
|
+
Check whether SKILL.md contains a "Migration & Deprecation Warnings" section (Section 4b). Then check the skill's `evidence-report.md` (at `forge-data/{skill_name}/evidence-report.md`) for T2-future annotation counts.
|
|
151
|
+
|
|
152
|
+
- **If T2-future annotations > 0 AND Section 4b is absent:** Flag as Medium severity gap: "Migration section missing — T2-future annotations exist but Section 4b is not present in SKILL.md Tier 1."
|
|
153
|
+
- **If T2-future annotations = 0 AND Section 4b is present:** Flag as Medium severity gap: "Migration section unexpected — Section 4b is present but no T2-future annotations were produced."
|
|
154
|
+
- **If evidence-report.md is unavailable:** Skip this check silently. Note: "Section 4b verification skipped — evidence-report.md not found."
|
|
155
|
+
|
|
156
|
+
Add findings to the coherence analysis results.
|
|
157
|
+
|
|
183
158
|
### 6. Append Coherence Analysis to Output
|
|
184
159
|
|
|
185
160
|
Load `{outputFormatsFile}` and use the appropriate Coherence Analysis section format (naive or contextual) to append findings to `{outputFile}`.
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 'step-04b-external-validators'
|
|
3
|
+
description: 'Run external validation tools (skill-check, tessl) and capture scores for scoring step'
|
|
4
|
+
|
|
5
|
+
nextStepFile: './step-05-score.md'
|
|
6
|
+
outputFile: '{forge_data_folder}/{skill_name}/test-report-{skill_name}.md'
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Step 4b: External Validators
|
|
10
|
+
|
|
11
|
+
## STEP GOAL:
|
|
12
|
+
|
|
13
|
+
Run external validation tools (`skill-check` and `tessl`) against the skill directory, capture their scores and findings, and append results to the test report. These tools catch complementary issues that internal coverage and coherence checks miss: `skill-check` validates spec compliance while `tessl` evaluates content quality and actionability.
|
|
14
|
+
|
|
15
|
+
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
16
|
+
|
|
17
|
+
### Universal Rules:
|
|
18
|
+
|
|
19
|
+
- 📖 CRITICAL: Read the complete step file before taking any action
|
|
20
|
+
- 🎯 ALWAYS follow the exact instructions in the step file
|
|
21
|
+
- ⚙️ TOOL/SUBPROCESS FALLBACK: If any instruction references a tool you do not have access to, you MUST still achieve the outcome in your main context thread
|
|
22
|
+
- ✅ YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the config `{communication_language}`
|
|
23
|
+
|
|
24
|
+
### Role Reinforcement:
|
|
25
|
+
|
|
26
|
+
- ✅ You are a skill auditor running external quality gates
|
|
27
|
+
- ✅ Both tools are optional — unavailability is a skip, never a halt
|
|
28
|
+
- ✅ Report scores factually — do not editorialize on the results
|
|
29
|
+
|
|
30
|
+
### Step-Specific Rules:
|
|
31
|
+
|
|
32
|
+
- 🎯 Run each tool independently — one tool's failure does not affect the other
|
|
33
|
+
- 🚫 FORBIDDEN to halt the workflow if either tool is unavailable or fails
|
|
34
|
+
- 🚫 FORBIDDEN to modify skill content — this step only measures and reports
|
|
35
|
+
- ⚠️ Ignore non-zero exit codes if the tool produces parseable output
|
|
36
|
+
|
|
37
|
+
## EXECUTION PROTOCOLS:
|
|
38
|
+
|
|
39
|
+
- 🎯 Follow MANDATORY SEQUENCE exactly
|
|
40
|
+
- 💾 Append External Validation section to {outputFile}
|
|
41
|
+
- 📖 Update stepsCompleted in {outputFile}
|
|
42
|
+
- 📖 Store scores in context for step-05 scoring
|
|
43
|
+
|
|
44
|
+
## CONTEXT BOUNDARIES:
|
|
45
|
+
|
|
46
|
+
- Available: skill directory path, testMode, forge tier from previous steps
|
|
47
|
+
- Focus: External tool execution and score capture only
|
|
48
|
+
- Limits: Do NOT modify skill content or recalculate internal scores
|
|
49
|
+
- Dependencies: steps 03 and 04 must have completed
|
|
50
|
+
|
|
51
|
+
## MANDATORY SEQUENCE
|
|
52
|
+
|
|
53
|
+
**CRITICAL:** Follow this sequence exactly. Do not skip, reorder, or improvise.
|
|
54
|
+
|
|
55
|
+
### 1. Resolve Skill Directory
|
|
56
|
+
|
|
57
|
+
Read {outputFile} frontmatter to get the skill directory path (`skillDir`).
|
|
58
|
+
|
|
59
|
+
### 2. Run skill-check
|
|
60
|
+
|
|
61
|
+
**Check availability:**
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
npx skill-check -h
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
If unavailable, record `skill_check_score: N/A` and skip to section 3.
|
|
68
|
+
|
|
69
|
+
**Run validation:**
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npx skill-check check {skillDir} --format json --no-security-scan
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Parse JSON output** to extract:
|
|
76
|
+
- `qualityScore` — overall score (0-100)
|
|
77
|
+
- `diagnostics[]` — any remaining issues
|
|
78
|
+
- `errorCount` and `warningCount`
|
|
79
|
+
|
|
80
|
+
**Note:** `skill-check` may return a non-zero exit code even when `errorCount` is 0. Always rely on the parsed JSON output, not the shell exit code.
|
|
81
|
+
|
|
82
|
+
Store in context: `skill_check_score`, `skill_check_diagnostics`
|
|
83
|
+
|
|
84
|
+
**If skill-check fails entirely:** Record `skill_check_score: N/A`, log warning, continue.
|
|
85
|
+
|
|
86
|
+
### 3. Run tessl
|
|
87
|
+
|
|
88
|
+
**Check availability:**
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
npx -y tessl --version
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
If unavailable, record `tessl_score: N/A` and skip to section 4.
|
|
95
|
+
|
|
96
|
+
**Run review:**
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
npx -y tessl skill review {skillDir}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Parse the output** to extract:
|
|
103
|
+
- `description_score` — percentage (e.g., 100%)
|
|
104
|
+
- `content_score` — percentage (e.g., 45%)
|
|
105
|
+
- `average_score` — percentage (e.g., 73%)
|
|
106
|
+
- `validation_result` — PASSED/FAILED
|
|
107
|
+
- `judge_suggestions[]` — list of improvement suggestions
|
|
108
|
+
|
|
109
|
+
The tessl output is human-readable text, not JSON. Parse the percentage values from lines like "Description: 100%", "Content: 45%", "Average Score: 73%".
|
|
110
|
+
|
|
111
|
+
Store in context: `tessl_description_score`, `tessl_content_score`, `tessl_average_score`, `tessl_suggestions`
|
|
112
|
+
|
|
113
|
+
**If tessl content score < 70%:** Flag a warning:
|
|
114
|
+
|
|
115
|
+
"**Content quality warning:** tessl scored content at {score}%. This often indicates SKILL.md lacks inline actionable content (e.g., after split-body). Consider inlining Quick Start and common workflows directly in SKILL.md."
|
|
116
|
+
|
|
117
|
+
**If tessl fails entirely:** Record `tessl_score: N/A`, log warning, continue.
|
|
118
|
+
|
|
119
|
+
### 4. Calculate Combined External Score
|
|
120
|
+
|
|
121
|
+
**If both tools ran:**
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
external_score = (skill_check_score + tessl_average_score) / 2
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Note: `skill_check_score` is 0-100, `tessl_average_score` is 0-100%. Both are on the same scale.
|
|
128
|
+
|
|
129
|
+
**If only one tool ran:** Use that tool's score as the external score.
|
|
130
|
+
|
|
131
|
+
**If neither tool ran:** Record `external_score: N/A`. The scoring step will redistribute the external validation weight.
|
|
132
|
+
|
|
133
|
+
### 5. Append External Validation to Output
|
|
134
|
+
|
|
135
|
+
Append to `{outputFile}`:
|
|
136
|
+
|
|
137
|
+
```markdown
|
|
138
|
+
## External Validation
|
|
139
|
+
|
|
140
|
+
### skill-check
|
|
141
|
+
- **Available:** {yes/no}
|
|
142
|
+
- **Quality Score:** {score}/100
|
|
143
|
+
- **Errors:** {count}
|
|
144
|
+
- **Warnings:** {count}
|
|
145
|
+
- **Diagnostics:** {list or "none"}
|
|
146
|
+
|
|
147
|
+
### tessl
|
|
148
|
+
- **Available:** {yes/no}
|
|
149
|
+
- **Validation:** {PASSED/FAILED}
|
|
150
|
+
- **Description Score:** {score}%
|
|
151
|
+
- **Content Score:** {score}%
|
|
152
|
+
- **Average Score:** {score}%
|
|
153
|
+
- **Suggestions:**
|
|
154
|
+
{bulleted list of judge suggestions}
|
|
155
|
+
|
|
156
|
+
### Combined External Score
|
|
157
|
+
- **External Validation Score:** {external_score}%
|
|
158
|
+
- **Tools used:** {list of tools that ran}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 6. Report Results
|
|
162
|
+
|
|
163
|
+
"**External validation complete.**
|
|
164
|
+
|
|
165
|
+
| Tool | Score | Status |
|
|
166
|
+
|------|-------|--------|
|
|
167
|
+
| skill-check | {score}/100 | {available/skipped} |
|
|
168
|
+
| tessl | {average}% | {available/skipped} |
|
|
169
|
+
| **Combined** | **{external_score}%** | |
|
|
170
|
+
|
|
171
|
+
{content quality warning if tessl content < 70%}
|
|
172
|
+
|
|
173
|
+
**Proceeding to scoring...**"
|
|
174
|
+
|
|
175
|
+
### 7. Auto-Proceed
|
|
176
|
+
|
|
177
|
+
#### Menu Handling Logic:
|
|
178
|
+
|
|
179
|
+
- After external validation is complete, update {outputFile} frontmatter stepsCompleted, then immediately load, read entire file, then execute {nextStepFile}
|
|
180
|
+
|
|
181
|
+
#### EXECUTION RULES:
|
|
182
|
+
|
|
183
|
+
- This is an auto-proceed validation step with no user choices
|
|
184
|
+
- Tool unavailability is a skip, not a halt
|
|
185
|
+
- Proceed directly to next step after external validation
|
|
186
|
+
|
|
187
|
+
## CRITICAL STEP COMPLETION NOTE
|
|
188
|
+
|
|
189
|
+
ONLY WHEN external validation results are appended to {outputFile} and scores are stored in context will you proceed to load `{nextStepFile}` for scoring.
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## 🚨 SYSTEM SUCCESS/FAILURE METRICS
|
|
194
|
+
|
|
195
|
+
### ✅ SUCCESS:
|
|
196
|
+
|
|
197
|
+
- skill-check executed and quality score captured (or skipped with N/A if unavailable)
|
|
198
|
+
- tessl executed and description/content/average scores captured (or skipped with N/A)
|
|
199
|
+
- Content quality warning raised if tessl content < 70%
|
|
200
|
+
- Combined external score calculated
|
|
201
|
+
- External Validation section appended to output
|
|
202
|
+
- Scores stored in context for step-05
|
|
203
|
+
- Auto-proceeded to step-05
|
|
204
|
+
|
|
205
|
+
### ❌ SYSTEM FAILURE:
|
|
206
|
+
|
|
207
|
+
- Halting the workflow because a tool is unavailable or fails
|
|
208
|
+
- Not recording N/A when a tool is skipped (step-05 needs to know)
|
|
209
|
+
- Modifying skill content based on validation results
|
|
210
|
+
- Not parsing tessl content score (the key insight this tool provides)
|
|
211
|
+
- Fabricating scores not from actual tool output
|
|
212
|
+
|
|
213
|
+
**Master Rule:** External validators inform — they do not block. Run what's available, capture the scores, report factually, and proceed.
|
|
@@ -3,7 +3,7 @@ name: 'step-05-score'
|
|
|
3
3
|
description: 'Calculate completeness score from coverage and coherence findings'
|
|
4
4
|
|
|
5
5
|
nextStepFile: './step-06-report.md'
|
|
6
|
-
outputFile: '{
|
|
6
|
+
outputFile: '{forge_data_folder}/{skill_name}/test-report-{skill_name}.md'
|
|
7
7
|
scoringRulesFile: '../data/scoring-rules.md'
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -11,7 +11,7 @@ scoringRulesFile: '../data/scoring-rules.md'
|
|
|
11
11
|
|
|
12
12
|
## STEP GOAL:
|
|
13
13
|
|
|
14
|
-
Calculate the overall completeness score by aggregating coverage and
|
|
14
|
+
Calculate the overall completeness score by aggregating coverage, coherence, and external validation category scores with the appropriate weight distribution (naive or contextual), apply the pass/fail threshold, and determine the test result.
|
|
15
15
|
|
|
16
16
|
## MANDATORY EXECUTION RULES (READ FIRST):
|
|
17
17
|
|
|
@@ -46,10 +46,10 @@ Calculate the overall completeness score by aggregating coverage and coherence c
|
|
|
46
46
|
|
|
47
47
|
## CONTEXT BOUNDARIES:
|
|
48
48
|
|
|
49
|
-
- Available: Coverage Analysis (step 03)
|
|
49
|
+
- Available: Coverage Analysis (step 03), Coherence Analysis (step 04), and External Validation (step 04b) in {outputFile}
|
|
50
50
|
- Focus: Score calculation and pass/fail determination only
|
|
51
51
|
- Limits: Do NOT generate gap remediation — that's step 06
|
|
52
|
-
- Dependencies: steps 03 and
|
|
52
|
+
- Dependencies: steps 03, 04, and 04b must have appended their analysis sections
|
|
53
53
|
|
|
54
54
|
## MANDATORY SEQUENCE
|
|
55
55
|
|
|
@@ -76,33 +76,15 @@ Read `{outputFile}` and extract the category scores calculated in previous steps
|
|
|
76
76
|
- Combined Coherence: {percentage}% (contextual mode only)
|
|
77
77
|
- Or: not scored (naive mode — weight redistributed)
|
|
78
78
|
|
|
79
|
+
**From External Validation (step 04b):**
|
|
80
|
+
- External Validation Score: {percentage}% (combined skill-check + tessl average)
|
|
81
|
+
- Or: N/A (if neither tool was available — weight redistributed to other categories)
|
|
82
|
+
|
|
79
83
|
### 3. Apply Weight Distribution
|
|
80
84
|
|
|
81
85
|
**Read testMode from {outputFile} frontmatter.**
|
|
82
86
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
| Category | Score | Weight | Weighted |
|
|
86
|
-
|----------|-------|--------|----------|
|
|
87
|
-
| Export Coverage | {N}% | 50% | {N * 0.50}% |
|
|
88
|
-
| Signature Accuracy | {N}% | 30% | {N * 0.30}% |
|
|
89
|
-
| Type Coverage | {N}% | 20% | {N * 0.20}% |
|
|
90
|
-
| **Total** | | **100%** | **{sum}%** |
|
|
91
|
-
|
|
92
|
-
**IF contextual mode — use full weights:**
|
|
93
|
-
|
|
94
|
-
| Category | Score | Weight | Weighted |
|
|
95
|
-
|----------|-------|--------|----------|
|
|
96
|
-
| Export Coverage | {N}% | 40% | {N * 0.40}% |
|
|
97
|
-
| Signature Accuracy | {N}% | 25% | {N * 0.25}% |
|
|
98
|
-
| Type Coverage | {N}% | 15% | {N * 0.15}% |
|
|
99
|
-
| Coherence | {N}% | 20% | {N * 0.20}% |
|
|
100
|
-
| **Total** | | **100%** | **{sum}%** |
|
|
101
|
-
|
|
102
|
-
**Quick tier adjustment:**
|
|
103
|
-
If Signature Accuracy and Type Coverage are N/A (Quick tier, no AST):
|
|
104
|
-
- Naive: Export Coverage gets 100% weight
|
|
105
|
-
- Contextual: Export Coverage 60%, Coherence 40%
|
|
87
|
+
Apply the weight distribution from `{scoringRulesFile}` for the detected mode (naive or contextual). The scoring rules define category weights, external validation redistribution when unavailable, and Quick tier adjustments. Calculate the weighted score for each category and sum for the total.
|
|
106
88
|
|
|
107
89
|
### 4. Determine Pass/Fail
|
|
108
90
|
|
|
@@ -139,6 +121,7 @@ Append the **Completeness Score** section to `{outputFile}`:
|
|
|
139
121
|
| Signature Accuracy | {N}% | {W}% | {WS}% |
|
|
140
122
|
| Type Coverage | {N}% | {W}% | {WS}% |
|
|
141
123
|
| Coherence | {N}% | {W}% | {WS}% |
|
|
124
|
+
| External Validation | {N}% | {W}% | {WS}% |
|
|
142
125
|
| **Total** | | **100%** | **{total}%** |
|
|
143
126
|
|
|
144
127
|
### Result
|
|
@@ -149,6 +132,18 @@ Append the **Completeness Score** section to `{outputFile}`:
|
|
|
149
132
|
|
|
150
133
|
**Weight Distribution:** {naive (redistributed) | contextual (full)}
|
|
151
134
|
**Tier Adjustment:** {none | Quick tier — signature and type coverage not scored}
|
|
135
|
+
**External Validators:** {both available | skill-check only | tessl only | none — weight redistributed}
|
|
136
|
+
**Analysis Confidence:** {full | provenance-map | metadata-only | remote-only | docs-only}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
If `analysis_confidence` is not `full`, append a degradation notice:
|
|
140
|
+
|
|
141
|
+
```markdown
|
|
142
|
+
### Access Degradation Notice
|
|
143
|
+
|
|
144
|
+
**Resolved via:** {analysis_confidence}
|
|
145
|
+
**Impact:** {describe limitation — e.g., "Signature checks limited to name-matching. Source file:line citations from provenance-map, not live AST."}
|
|
146
|
+
**Recommendation:** Re-run with local clone for full AST-backed verification.
|
|
152
147
|
```
|
|
153
148
|
|
|
154
149
|
### 7. Update Output Frontmatter
|
|
@@ -157,6 +152,7 @@ Update `{outputFile}` frontmatter:
|
|
|
157
152
|
- `testResult: '{pass|fail}'`
|
|
158
153
|
- `score: '{total}%'`
|
|
159
154
|
- `threshold: '{threshold}%'`
|
|
155
|
+
- `analysisConfidence: '{analysis_confidence}'`
|
|
160
156
|
- `nextWorkflow: '{export-skill|update-skill}'`
|
|
161
157
|
- Append `'step-05-score'` to `stepsCompleted`
|
|
162
158
|
|
|
@@ -172,6 +168,7 @@ Update `{outputFile}` frontmatter:
|
|
|
172
168
|
| Signature Accuracy | {N}% | {WS}% |
|
|
173
169
|
| Type Coverage | {N}% | {WS}% |
|
|
174
170
|
| Coherence | {N}% | {WS}% |
|
|
171
|
+
| External Validation | {N}% | {WS}% |
|
|
175
172
|
|
|
176
173
|
**Threshold:** {threshold}%
|
|
177
174
|
**Recommendation:** {export-skill if pass | update-skill if fail}
|