review — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited review (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Systematically review spec-forge generated documents for quality, completeness, and internal consistency. Optionally auto-fix issues found.
<!-- REVIEW: {question} --> comment instead of guessing| Severity | Meaning | Example |
|---|---|---|
| Critical | Wrong, contradictory, or misleading content | Feature spec API signature contradicts tech-design, component boundary mismatch |
| Major | Significant gap that would block or confuse implementation | Empty required section, missing error handling spec, undefined edge cases |
| Minor | Quality issue that degrades usefulness but isn't blocking | Vague description, missing cross-reference, inconsistent terminology |
Parse the arguments to determine what to review:
feature_name argument is provided, look for:docs/{feature_name}/srs.md — the delivery contract; review it first, since a defect here propagates into every downstream documentdocs/{feature_name}/tech-design.mddocs/features/ (glob for docs/features/*.md)docs/{feature_name}/prd.md and ideas/{feature_name}/draft.md (if they exist)docs/project-{feature_name}.md (if exists, for multi-split context)docs/ for the most recent SRS and tech-design, plus all feature specs in docs/features/Use AskUserQuestion to ask:
Build the list of documents to review:
docs/{feature_name}/srs.mddocs/{feature_name}/tech-design.mddocs/features/overview.mddocs/features/{component-1}.md, docs/features/{component-2}.md, etc.docs/{feature_name}/prd.md — upstream business case and capability prioritiesideas/{feature_name}/draft.md — upstream demand validationdocs/project-{feature_name}.md — project manifest with sub-feature scopeDisplay the inventory:
Review scope: {feature_name}
Review targets: {N} documents
- docs/{feature_name}/tech-design.md
- docs/features/overview.md
- docs/features/{component-1}.md
- docs/features/{component-2}.md
...
Reference context: {N} documents
- ideas/{feature_name}/draft.mdCheck each review target document against the following checklist:
#### 3.1 Completeness
Fast path (preferred): resolve <sf_scripts> (see @../shared/scripts.md) and run the structural gate per document —
python3 "<sf_scripts>/sf-verify-doc.py" "<file>" --strictfor each review target. This deterministically confirms the document is non-empty and titled, has the recommended sections for its type, has well-formed/unique IDs, and carries no leftover template placeholders or {placeholder} variables; use its findings as the completeness result and fix everything it flags. The script does structure, IDs, and placeholders — you still do the semantic checks (§3.3 specificity, API-signature-matching in §3.2). Fallback: if python3 is unavailable or the script is not found, check by hand:
{placeholder} template variables?#### 3.1a SRS Contract Integrity
The SRS is the delivery contract — what an implementation team is held to and what acceptance is settled against. A gap here is not a documentation blemish; it is an unsettleable dispute waiting to happen, and it propagates into every downstream document. Review it first and apply these checks in addition to §3.1:
INTERNAL_ERROR or "operation failed" standing in for an anticipated condition is Major. Each distinct cause needs its own diagnosable code.FR-*/NFR-* ID was silently renumbered or repurposed. A renumbered ID is Critical — it severs every downstream reference, including any code-forge plan already generated from it.#### 3.2 Internal Consistency
FR-*/NFR-* in the SRS is satisfied by at least one tech-design component, and every component names the requirements it satisfies. An unplaced requirement is Major — it is either a design gap or a requirement that should be renegotiated, and both need to be visible rather than silently dropped. Use sf-trace.py matrix --upstream "<srs.md>" --downstream "<tech-design.md>" for the coverage math, then judge whether each gap is intentional.Fast path (preferred): resolve <sf_scripts> (see @../shared/scripts.md) and run the membership check —
python3 "<sf_scripts>/sf-trace.py" chain --tech-design "<tech-design.md>" --features-dir "docs/features" --overview "docs/features/overview.md"Read its fields: slugs_without_feature_file (a §8.1 component with no matching feature spec), features_not_mentioned_in_tech_design (a feature spec with no matching component), and overview_missing_features (used in §3.4). Fallback: if python3 is unavailable or the script is not found, compare the docs/features/{name}.md slugs against the §8.1 rows by hand.
The script detects the mismatch; you classify the severity by whether it would actually break a downstream consumer like code-forge — do not hardcode Critical. A feature spec deliberately written ahead of the tech-design during iterative authoring is a Minor issue, not Critical; a genuine slug divergence that severs the traceability chain a consumer depends on is Critical.
#### 3.3 Specificity
#### 3.4 Traceability
sf-trace.py chain run in §3.2 reports this as overview_missing_features (feature specs absent from overview.md); fall back to scanning the feature index by hand if the script is unavailable.#### 3.5 Actionability
For each issue found, produce a structured finding:
- [{severity}] {file_path} § {section}: {description of issue} → FIX: {concrete fix instruction}Compile the full review result:
REVIEW_RESULT: {PASS | ISSUES_FOUND}
CRITICAL_COUNT: {N}
MAJOR_COUNT: {N}
MINOR_COUNT: {N}
FINDINGS:
- [{severity}] {file_path} § {section}: {description} → FIX: {fix instruction}
...Display summary:
spec-forge review: {feature_name}
Documents reviewed: {N}
Result: {PASS | ISSUES_FOUND}
Findings: {critical} critical, {major} major, {minor} minor
{If ISSUES_FOUND, list top findings}If REVIEW_RESULT: PASS, inform the user and stop.
If REVIEW_RESULT: ISSUES_FOUND, proceed based on the user's auto-fix preference already collected in Step 1 (there is a single decision point — do not re-ask here):
Convergence, not a fixed count: iterate fix → re-review until the review passes or a round yields no net reduction in findings (typically 1–2 rounds). Stop and report the remaining issues as soon as a round makes no progress — do not keep looping on findings the fixer cannot resolve.
#### 6.1 Apply Fixes
For each finding to fix:
<!-- REVIEW: {question} --> comment instead of guessing#### 6.2 Re-Review
After all fixes are applied, re-run the review (Step 3-4) on the same documents.
spec-forge review: PASS after fixes — {N} issues resolved spec-forge review: {N} issues remain after auto-fix
Remaining issues:
- [{severity}] {file} § {section}: {description}
...
These may require manual attention or domain-specific decisions.Display final status:
spec-forge review complete: {feature_name}
Documents reviewed: {N}
Issues found: {total}
Issues fixed: {fixed}
Issues remaining: {remaining}
Next steps:
/code-forge:plan @docs/features/{component-name}.md → Generate implementation plan
/spec-forge:review {feature_name} → Re-run review after manual fixes~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.