doc-req-fixer
npx skills add https://github.com/vladm3105/aidoc-flow-framework --skill doc-req-fixer
Agent 安装分布
Skill 文档
doc-req-fixer
Purpose
Automated fix skill that reads the latest review report and applies fixes to REQ (Requirements Specification) documents. This skill bridges the gap between doc-req-reviewer (which identifies issues) and the corrected REQ, enabling iterative improvement cycles.
Layer: 7 (REQ Quality Improvement)
Upstream: REQ document, Review Report (REQ-NN.A_audit_report_vNNN.md preferred, REQ-NN.R_review_report_vNNN.md legacy-compatible, or REQ-NN-SSS.R_review_report_vNNN.md), SYS (for system design alignment)
Downstream: Fixed REQ, Fix Report (REQ-NN.F_fix_report_vNNN.md or REQ-NN-SSS.F_fix_report_vNNN.md)
When to Use This Skill
Use doc-req-fixer when:
- After Review: Run after
doc-req-revieweridentifies issues - Iterative Improvement: Part of Review -> Fix -> Review cycle
- Automated Pipeline: CI/CD integration for quality gates
- Batch Fixes: Apply fixes to multiple REQ documents based on review reports
Do NOT use when:
- No review report exists (run
doc-req-reviewerfirst) - Creating new REQ (use
doc-reqordoc-req-autopilot) - Only need validation (use
doc-req-validator)
Skill Dependencies
| Skill | Purpose | When Used |
|---|---|---|
doc-req-reviewer |
Source of issues to fix | Input (reads review report) |
doc-naming |
Element ID standards | Fix element IDs |
doc-req |
REQ creation rules | Create missing sections |
doc-sys |
SYS alignment reference | Verify system traceability |
Workflow Overview
flowchart TD
A[Input: REQ Path] --> B[Find Latest Review Report]
B --> C{Review Found?}
C -->|No| D[Run doc-req-reviewer First]
C -->|Yes| E[Parse Review Report]
E --> F[Categorize Issues]
subgraph FixPhases["Fix Phases"]
F --> F0[Phase 0: Fix Structure Violations]
F0 --> G[Phase 1: Create Missing Files]
G --> H[Phase 2: Fix Broken Links]
H --> I[Phase 3: Fix Element IDs]
I --> J[Phase 4: Fix Content Issues]
J --> K[Phase 5: Update References]
K --> K2[Phase 6: Handle Upstream Drift]
end
K2 --> L[Write Fixed REQ]
L --> M[Generate Fix Report]
M --> N{Re-run Review?}
N -->|Yes| O[Invoke doc-req-reviewer]
O --> P{Score >= Threshold?}
P -->|No, iterations < max| F
P -->|Yes| Q[COMPLETE]
N -->|No| Q
Fix Phases
Phase 0: Fix Structure Violations (CRITICAL)
Fixes REQ documents that are not in nested folders. This phase runs FIRST because all subsequent phases depend on correct folder structure.
Nested Folder Rule: ALL REQ documents MUST be in nested folders regardless of document size.
Required Structure:
| REQ Type | Required Location |
|---|---|
| Monolithic | docs/07_REQ/REQ-NN_{slug}/REQ-NN_{slug}.md |
Fix Actions:
| Issue Code | Issue | Fix Action |
|---|---|---|
| REV-STR001 | REQ not in nested folder | Create folder, move file, update all links |
| REV-STR002 | REQ folder name doesn’t match REQ ID | Rename folder to match |
| REV-STR003 | Monolithic REQ >25KB should be sectioned | Flag for manual review |
Structure Fix Workflow:
def fix_req_structure(req_path: str) -> list[Fix]:
"""Fix REQ structure violations."""
fixes = []
filename = os.path.basename(req_path)
parent_folder = os.path.dirname(req_path)
# Extract REQ ID and slug from filename
match = re.match(r'REQ-(\d+)_([^/]+)\.md', filename)
if not match:
return [] # Cannot auto-fix invalid filename
req_id = match.group(1)
slug = match.group(2)
expected_folder = f"REQ-{req_id}_{slug}"
# Check if already in nested folder
if os.path.basename(parent_folder) != expected_folder:
# Create nested folder
new_folder = os.path.join(os.path.dirname(parent_folder), expected_folder)
os.makedirs(new_folder, exist_ok=True)
# Move file
new_path = os.path.join(new_folder, filename)
shutil.move(req_path, new_path)
fixes.append(f"Moved {req_path} to {new_path}")
# Update upstream links in moved file
content = Path(new_path).read_text()
updated_content = content.replace('../06_SYS/', '../../06_SYS/')
updated_content = updated_content.replace('../05_ADR/', '../../05_ADR/')
Path(new_path).write_text(updated_content)
fixes.append(f"Updated relative links for nested folder structure")
return fixes
Link Path Updates After Move:
| Original Path | Updated Path |
|---|---|
../06_SYS/SYS-01_slug/SYS-01.md |
../../06_SYS/SYS-01_slug/SYS-01.md |
Phase 1: Create Missing Files
Creates files that are referenced but don’t exist.
Scope:
| Missing File | Action | Template Used |
|---|---|---|
REQ-00_INDEX.md |
Create REQ index | Index template |
REQ-00_GLOSSARY.md |
Create requirements glossary | Glossary template |
UC_*.md |
Create placeholder use case doc | Use Case template |
Reference docs (*_REF_*.md) |
Create placeholder | REF template |
REQ Index Template:
---
title: "REQ-00: Requirements Specifications Index"
tags:
- req
- index
- reference
custom_fields:
document_type: index
artifact_type: REQ-REFERENCE
layer: 7
---
# REQ-00: Requirements Specifications Index
Master index of all Requirements Specifications for this project.
## Functional Requirements
| REQ ID | Module | Status | Priority | SYS Refs |
|--------|--------|--------|----------|----------|
| REQ-01 | [Name] | Draft/Approved | P1/P2/P3 | SYS-01 |
## Non-Functional Requirements
| REQ ID | Category | Status | Priority |
|--------|----------|--------|----------|
| REQ-NFR-01 | Performance | Draft | P1 |
| REQ-NFR-02 | Security | Draft | P1 |
## Requirements by Priority
| Priority | REQ IDs | Count |
|----------|---------|-------|
| P1 (Critical) | | 0 |
| P2 (Important) | | 0 |
| P3 (Nice-to-have) | | 0 |
## Coverage Matrix
| SYS Component | REQ Coverage | Gaps |
|---------------|--------------|------|
| SYS-01 | REQ-01, REQ-02 | None |
---
*Maintained by doc-req-fixer. Update when adding new REQ documents.*
REQ Glossary Template:
---
title: "REQ-00: Requirements Glossary"
tags:
- req
- glossary
- reference
custom_fields:
document_type: glossary
artifact_type: REQ-REFERENCE
layer: 7
---
# REQ-00: Requirements Glossary
Common terminology used across all Requirements Specification documents.
## Requirement Types
| Term | Definition | Example |
|------|------------|---------|
| FR | Functional Requirement | System shall authenticate users |
| NFR | Non-Functional Requirement | Response time < 200ms |
| UC | Use Case | User login flow |
| AC | Acceptance Criteria | Given/When/Then statement |
## Priority Levels
| Level | Definition | SLA |
|-------|------------|-----|
| P1 | Critical - Must have for MVP | Immediate |
| P2 | Important - Should have | Sprint N+1 |
| P3 | Nice-to-have - Could have | Backlog |
## Status Values
| Status | Definition | Next State |
|--------|------------|------------|
| Draft | Initial documentation | Review |
| Review | Under stakeholder review | Approved/Rejected |
| Approved | Accepted for implementation | Implemented |
| Implemented | Code complete | Verified |
| Verified | Testing complete | Closed |
## Domain Terms
<!-- Add project-specific terminology below -->
| Term | Definition | Context |
|------|------------|---------|
| [Term] | [Definition] | [Where used] |
---
*Maintained by doc-req-fixer. Update when terminology changes.*
Use Case Placeholder Template:
---
title: "Use Case: [Use Case Name]"
tags:
- use-case
- requirements
- reference
custom_fields:
document_type: use-case
status: placeholder
created_by: doc-req-fixer
---
# Use Case: [Use Case Name]
> **Status**: Placeholder - Requires completion
## 1. Overview
| Attribute | Value |
|-----------|-------|
| UC ID | UC-NN |
| Actor | [Primary Actor] |
| Priority | P1/P2/P3 |
| Status | Placeholder |
## 2. Description
[TODO: Describe the use case purpose]
## 3. Preconditions
| # | Precondition |
|---|--------------|
| 1 | [Condition that must be true] |
## 4. Main Flow
| Step | Actor | System |
|------|-------|--------|
| 1 | [Actor action] | [System response] |
## 5. Alternative Flows
[TODO: Document alternative scenarios]
## 6. Postconditions
| # | Postcondition |
|---|---------------|
| 1 | [State after successful completion] |
## 7. Acceptance Criteria
| AC ID | Criteria | Type |
|-------|----------|------|
| AC-01 | [Given/When/Then] | Functional |
---
*Created by doc-req-fixer as placeholder. Complete this document to resolve broken link issues.*
Phase 2: Fix Broken Links
Updates links to point to correct locations.
Fix Actions:
| Issue Code | Issue | Fix Action |
|---|---|---|
| REV-L001 | Broken internal link | Update path or create target file |
| REV-L002 | External link unreachable | Add warning comment, keep link |
| REV-L003 | Absolute path used | Convert to relative path |
| REV-L004 | Missing SYS traceability link | Add link to corresponding SYS |
Path Resolution Logic:
def fix_link_path(req_location: str, target_path: str) -> str:
"""Calculate correct relative path based on REQ location."""
# Monolithic REQ: docs/07_REQ/REQ-01.md
# Sectioned REQ: docs/07_REQ/REQ-01_slug/REQ-01-003_section.md
if is_sectioned_req(req_location):
# Need to go up one more level
return "../" + calculate_relative_path(req_location, target_path)
else:
return calculate_relative_path(req_location, target_path)
Cross-Layer Link Fix:
| Source | Target | Link Pattern |
|---|---|---|
| REQ | SYS | ../06_SYS/SYS-NN.md |
| REQ | CTR | ../08_CTR/CTR-NN.md |
| REQ | SPEC | ../09_SPEC/SPEC-NN.md |
Phase 3: Fix Element IDs
Converts invalid element IDs to correct format.
Conversion Rules:
| Pattern | Issue | Conversion |
|---|---|---|
REQ.NN.13.SS |
Code 13 invalid for REQ | REQ.NN.01.SS (Functional Req) |
FR-XXX |
Legacy pattern | REQ.NN.01.SS |
NFR-XXX |
Legacy pattern | REQ.NN.27.SS |
UC-XXX |
Legacy pattern | REQ.NN.05.SS |
AC-XXX |
Legacy pattern | REQ.NN.06.SS |
Type Code Mapping (REQ-specific valid codes: 01, 05, 06, 27):
| Code | Element Type | Description |
|---|---|---|
| 01 | Functional Requirement | System function specification |
| 05 | Use Case | User interaction scenario |
| 06 | Acceptance Criteria | Testable success criteria |
| 27 | Non-Functional Requirement | Quality attribute requirement |
Invalid Code Conversions:
| Invalid Code | Valid Code | Element Type |
|---|---|---|
| 13 | 01 | Functional Requirement (was Decision Context) |
| 14 | 05 | Use Case (was Decision Statement) |
| 17 | 01 | Functional Requirement (was Component) |
| 18 | 06 | Acceptance Criteria (was Interface) |
| 22 | 01 | Functional Requirement (was Feature Item) |
Regex Patterns:
# Find element IDs with invalid type codes for REQ
invalid_req_type_13 = r'REQ\.(\d{2})\.13\.(\d{2})'
replacement_13 = r'REQ.\1.01.\2'
invalid_req_type_14 = r'REQ\.(\d{2})\.14\.(\d{2})'
replacement_14 = r'REQ.\1.05.\2'
invalid_req_type_17 = r'REQ\.(\d{2})\.17\.(\d{2})'
replacement_17 = r'REQ.\1.01.\2'
# Find legacy patterns
legacy_fr = r'###\s+FR-(\d+):'
legacy_nfr = r'###\s+NFR-(\d+):'
legacy_uc = r'###\s+UC-(\d+):'
legacy_ac = r'###\s+AC-(\d+):'
Phase 4: Fix Content Issues
Addresses placeholders and incomplete content.
Fix Actions:
| Issue Code | Issue | Fix Action |
|---|---|---|
| REV-P001 | [TODO] placeholder |
Flag for manual completion (cannot auto-fix) |
| REV-P002 | [TBD] placeholder |
Flag for manual completion (cannot auto-fix) |
| REV-P003 | Template date YYYY-MM-DD |
Replace with current date |
| REV-P004 | Template name [Name] |
Replace with metadata author or flag |
| REV-P005 | Empty section | Add minimum template content |
| REV-P006 | Missing requirement status | Add “Draft” as default status |
| REV-P007 | Missing priority | Add “P2” as default priority |
Auto-Replacements:
replacements = {
'YYYY-MM-DDTHH:MM:SS': datetime.now().strftime('%Y-%m-%dT%H:%M:%S'),
'YYYY-MM-DD': datetime.now().strftime('%Y-%m-%d'),
'MM/DD/YYYY': datetime.now().strftime('%m/%d/%Y'),
'[Current date]': datetime.now().strftime('%Y-%m-%dT%H:%M:%S'),
'[Status]': 'Draft',
'[Priority]': 'P2',
'[Version]': '0.1',
}
REQ-Specific Content Fixes:
| Section | Missing Content | Auto-Fill |
|---|---|---|
| Status | Empty | “Draft” |
| Priority | Empty | “P2” |
| Version | Empty | “0.1” |
| Last Updated | Empty | Current date |
| Verification Method | Empty | “Test” |
Phase 5: Update References
Ensures traceability and cross-references are correct.
Fix Actions:
| Issue | Fix Action |
|---|---|
Missing @ref: for created files |
Add reference tag |
| Incorrect cross-REQ path | Update to correct relative path |
| Missing SYS traceability | Add @trace: SYS-NN.SS tag |
| Missing CTR forward reference | Add @trace: CTR-NN.SS tag |
| Missing SPEC forward reference | Add @trace: SPEC-NN.SS tag |
Traceability Matrix Update:
## Traceability
| REQ Element | Traces From | Traces To | Type |
|-------------|-------------|-----------|------|
| REQ.01.01.01 | SYS.01.17.01 | SPEC.01.01.01 | Requirement->Spec |
| REQ.01.05.01 | SYS.01.05.01 | BDD.01.09.01 | UseCase->Behavior |
| REQ.01.06.01 | REQ.01.01.01 | TSPEC.01.01.01 | Criteria->TestSpec |
Phase 6: Handle Upstream Drift (Auto-Merge)
Addresses issues where upstream source documents (SYS) have changed since REQ creation. This phase implements a tiered auto-merge system that automatically integrates upstream changes based on change magnitude.
6.0.1 Hash Validation Fixes
FIX-H001: Invalid Hash Placeholder
Trigger: Hash contains placeholder instead of SHA-256
Fix:
sha256sum <upstream_file_path> | cut -d' ' -f1
Update cache with: sha256:<64_hex_output>
FIX-H002: Missing Hash Prefix
Trigger: 64 hex chars but missing sha256: prefix
Fix: Prepend sha256: to value
FIX-H003: Upstream File Not Found
Trigger: Cannot compute hash (file missing)
Fix: Set drift_detected: true, add to manual review
| Code | Description | Auto-Fix | Severity |
|---|---|---|---|
| FIX-H001 | Replace placeholder hash with actual SHA-256 | Yes | Error |
| FIX-H002 | Add missing sha256: prefix | Yes | Warning |
| FIX-H003 | Upstream file not found | Partial | Error |
Upstream: SYS (Layer 6 – System Design) Downstream: CTR (Layer 8 – Contracts), SPEC (Layer 9 – Specifications)
ID Pattern: REQ.NN.TT.SS where:
NN= Module number (01-99)TT= Type code (01=Functional, 05=UseCase, 06=AcceptanceCriteria, 27=NFR)SS= Sequence number (01-99)
Tiered Auto-Merge Thresholds
| Tier | Change % | Action | Version Bump | Human Review |
|---|---|---|---|---|
| Tier 1 | < 5% | Auto-merge additions | Patch (1.0 -> 1.0.1) | No |
| Tier 2 | 5-15% | Auto-merge with changelog | Minor (1.0 -> 1.1) | Optional |
| Tier 3 | > 15% | Archive + Regenerate | Major (1.x -> 2.0) | Yes |
Change Percentage Calculation
def calculate_change_percentage(sys_current: str, sys_baseline: str) -> float:
"""
Calculate percentage of change between SYS versions.
Algorithm:
1. Tokenize both documents (sections, components, interfaces)
2. Calculate added tokens (new content)
3. Calculate modified tokens (changed content)
4. Calculate removed tokens (deleted content - weighted 2x)
5. Return: (added + modified + 2*removed) / total_baseline * 100
"""
baseline_tokens = tokenize_sys_document(sys_baseline)
current_tokens = tokenize_sys_document(sys_current)
added = len(current_tokens - baseline_tokens)
removed = len(baseline_tokens - current_tokens)
modified = count_modified_tokens(baseline_tokens, current_tokens)
total_baseline = len(baseline_tokens)
if total_baseline == 0:
return 100.0 # New document = 100% change
change_score = added + modified + (2 * removed)
return (change_score / total_baseline) * 100
def tokenize_sys_document(content: str) -> set:
"""Extract meaningful tokens from SYS document."""
tokens = set()
# Extract component definitions (SYS.NN.17.SS)
tokens.update(re.findall(r'SYS\.\d{2}\.17\.\d{2}', content))
# Extract interface definitions (SYS.NN.18.SS)
tokens.update(re.findall(r'SYS\.\d{2}\.18\.\d{2}', content))
# Extract decision references (SYS.NN.13.SS)
tokens.update(re.findall(r'SYS\.\d{2}\.13\.\d{2}', content))
# Extract section headers
tokens.update(re.findall(r'^##+ .+$', content, re.MULTILINE))
return tokens
Tier 1: Auto-Merge Additions (< 5% Change)
Trigger: Minor additions to SYS that extend existing components.
Actions:
- Identify new SYS elements (components, interfaces)
- Generate corresponding REQ elements with auto-assigned IDs
- Insert new requirements in appropriate sections
- Increment patch version (1.0 -> 1.0.1)
- Update drift cache with merge record
Auto-ID Generation:
def generate_next_req_id(existing_ids: list, module: str, type_code: str) -> str:
"""
Generate next available REQ ID.
Example: If REQ.01.01.12 exists, next is REQ.01.01.13
"""
pattern = f"REQ.{module}.{type_code}."
max_seq = 0
for id in existing_ids:
if id.startswith(pattern):
seq = int(id.split('.')[-1])
max_seq = max(max_seq, seq)
next_seq = str(max_seq + 1).zfill(2)
return f"REQ.{module}.{type_code}.{next_seq}"
# Example: REQ.01.01.12 exists -> new ID is REQ.01.01.13
Tier 1 Merge Template:
<!-- AUTO-MERGED from SYS-01 v1.2 | Tier 1 | 2026-02-10T16:00:00 -->
### REQ.01.01.13: [New Requirement Title]
| Attribute | Value |
|-----------|-------|
| ID | REQ.01.01.13 |
| Status | Draft |
| Priority | P2 |
| Source | SYS.01.17.05 (auto-merged) |
| Version Added | 1.0.1 |
**Description**: [Auto-extracted from SYS component description]
**Acceptance Criteria**:
- [ ] AC-01: [Derived from SYS interface contracts]
@trace: SYS.01.17.05
Tier 2: Auto-Merge with Changelog (5-15% Change)
Trigger: Moderate changes including new sections or modified components.
Actions:
- Perform all Tier 1 actions
- Generate detailed changelog section
- Mark modified existing requirements with
[UPDATED]tag - Increment minor version (1.0 -> 1.1)
- Create merge summary for optional human review
Changelog Format:
## Changelog (Auto-Merged v1.1)
**Merge Date**: 2026-02-10T16:00:00
**Source**: SYS-01 v1.3 (baseline: v1.1)
**Change Percentage**: 8.5%
**Tier**: 2 (Auto-Merge with Changelog)
### Added Requirements
| REQ ID | Title | Source SYS Element |
|--------|-------|-------------------|
| REQ.01.01.13 | New Data Validation | SYS.01.17.05 |
| REQ.01.01.14 | Extended Logging | SYS.01.17.06 |
### Updated Requirements
| REQ ID | Change Type | Previous | Current |
|--------|-------------|----------|---------|
| REQ.01.01.03 | Priority | P3 | P2 |
| REQ.01.01.07 | Description | [truncated] | [truncated] |
### Deprecated (No Deletion)
| REQ ID | Reason | Superseded By |
|--------|--------|---------------|
| REQ.01.01.02 | Component removed in SYS | REQ.01.01.13 |
No Deletion Policy:
Requirements are NEVER deleted. Instead, mark as deprecated:
### REQ.01.01.02: Legacy Authentication [DEPRECATED]
> **DEPRECATED**: This requirement is superseded by REQ.01.01.13 as of v1.1.
> Reason: Source component SYS.01.17.02 removed in SYS v1.3.
> Retained for historical traceability.
| Attribute | Value |
|-----------|-------|
| ID | REQ.01.01.02 |
| Status | **Deprecated** |
| Deprecated Date | 2026-02-10 |
| Superseded By | REQ.01.01.13 |
Tier 3: Archive and Regenerate (> 15% Change)
Trigger: Major architectural changes in SYS requiring fundamental REQ restructure.
Actions:
- Create archive manifest
- Archive current REQ version
- Trigger full REQ regeneration via
doc-req-autopilot - Increment major version (1.x -> 2.0)
- Require human review before finalization
Archive Manifest:
---
title: "REQ-01 Archive Manifest"
archive_date: "2026-02-10T16:00:00"
archive_reason: "Tier 3 upstream drift (>15% change)"
archived_version: "1.2"
new_version: "2.0"
---
# REQ-01 Archive Manifest
## Archive Summary
| Attribute | Value |
|-----------|-------|
| Document | REQ-01 |
| Archived Version | 1.2 |
| Archive Date | 2026-02-10T16:00:00 |
| Change Percentage | 23.7% |
| Trigger | Tier 3 Upstream Drift |
| Upstream Source | SYS-01 v2.0 |
## Archived Files
| File | Archive Location | Hash |
|------|------------------|------|
| REQ-01.md | archive/REQ-01_v1.2/ | sha256:abc123... |
| REQ-01.F_fix_report_v003.md | archive/REQ-01_v1.2/ | sha256:def456... |
## Migration Notes
| Old REQ ID | Status | New REQ ID | Notes |
|------------|--------|------------|-------|
| REQ.01.01.01 | Retained | REQ.01.01.01 | No change |
| REQ.01.01.02 | Deprecated | - | Functionality removed |
| REQ.01.01.03 | Merged | REQ.01.01.02 | Combined with REQ.01.01.04 |
| - | New | REQ.01.01.10 | New from SYS.01.17.08 |
## Regeneration Trigger
```bash
/doc-req-autopilot SYS-01 --from-archive REQ-01_v1.2 --target-version 2.0
**Archive Directory Structure**:
docs/07_REQ/ âââ archive/ â âââ REQ-01_v1.2/ â âââ ARCHIVE_MANIFEST.md â âââ REQ-01.md â âââ REQ-01.F_fix_report_v003.md â âââ .drift_cache.json âââ REQ-01.md (v2.0 – regenerated) âââ REQ-00_INDEX.md
---
#### Enhanced Drift Cache with Merge History
After processing drift issues, update `.drift_cache.json`:
```json
{
"req_version": "1.1",
"req_updated": "2026-02-10T16:00:00",
"drift_reviewed": "2026-02-10T16:00:00",
"upstream_hashes": {
"../../06_SYS/SYS-01.md": "sha256:a1b2c3d4e5f6...",
"../../06_SYS/SYS-01.md#component-3": "sha256:g7h8i9j0k1l2..."
},
"merge_history": [
{
"merge_date": "2026-02-10T16:00:00",
"tier": 2,
"change_percentage": 8.5,
"version_before": "1.0",
"version_after": "1.1",
"upstream_version": "SYS-01 v1.3",
"added_ids": ["REQ.01.01.13", "REQ.01.01.14"],
"updated_ids": ["REQ.01.01.03", "REQ.01.01.07"],
"deprecated_ids": ["REQ.01.01.02"]
}
],
"acknowledged_drift": [
{
"document": "SYS-01.md",
"acknowledged_date": "2026-02-08",
"reason": "Reviewed - cosmetic changes only",
"hash_at_acknowledgment": "sha256:xyz789..."
}
],
"downstream_notifications": {
"CTR-01": {
"notified": "2026-02-10T16:05:00",
"req_version": "1.1",
"pending_review": true
},
"SPEC-01": {
"notified": "2026-02-10T16:05:00",
"req_version": "1.1",
"pending_review": true
}
}
}
Drift Issue Codes (Updated)
| Code | Severity | Description | Tier | Auto-Fix |
|---|---|---|---|---|
| REV-D001 | Info | SYS minor addition (< 5%) | 1 | Yes |
| REV-D002 | Warning | SYS moderate change (5-15%) | 2 | Yes |
| REV-D003 | Info | Upstream version incremented | 1 | Yes |
| REV-D004 | Warning | New component added to SYS | 1-2 | Yes |
| REV-D005 | Error | Major upstream modification (> 15%) | 3 | No (archive) |
| REV-D006 | Warning | Deprecated upstream element | 2 | Yes (mark deprecated) |
Command Options for Drift Handling
# Auto-merge with tier detection
/doc-req-fixer REQ-01 --auto-merge
# Force specific tier (override auto-detection)
/doc-req-fixer REQ-01 --auto-merge --force-tier 2
# Preview merge without applying
/doc-req-fixer REQ-01 --auto-merge --dry-run
# Acknowledge drift without merge
/doc-req-fixer REQ-01 --acknowledge-drift
# View merge history
/doc-req-fixer REQ-01 --show-merge-history
# Restore from archive
/doc-req-fixer REQ-01 --restore-archive v1.2
Command Usage
Basic Usage
# Fix REQ based on latest review
/doc-req-fixer REQ-01
# Fix sectioned REQ
/doc-req-fixer REQ-01-003
# Fix with explicit review report
/doc-req-fixer REQ-01 --review-report REQ-01.R_review_report_v001.md
# Fix and re-run review
/doc-req-fixer REQ-01 --revalidate
# Fix with iteration limit
/doc-req-fixer REQ-01 --revalidate --max-iterations 3
Options
| Option | Default | Description |
|---|---|---|
--review-report |
latest | Specific review report to use |
--revalidate |
false | Run reviewer after fixes |
--max-iterations |
3 | Max fix-review cycles |
--fix-types |
all | Specific fix types (comma-separated) |
--create-missing |
true | Create missing reference files |
--backup |
true | Backup REQ before fixing |
--dry-run |
false | Preview fixes without applying |
--acknowledge-drift |
false | Interactive drift acknowledgment mode |
--update-drift-cache |
true | Update .drift_cache.json after fixes |
--auto-merge |
false | Enable tiered auto-merge for upstream drift |
--force-tier |
auto | Force specific merge tier (1, 2, or 3) |
--show-merge-history |
false | Display merge history from drift cache |
--restore-archive |
none | Restore REQ from archived version (e.g., v1.2) |
--notify-downstream |
true | Notify CTR/SPEC of REQ changes after merge |
Fix Types
| Type | Description |
|---|---|
missing_files |
Create missing index, glossary, use case docs |
broken_links |
Fix link paths |
element_ids |
Convert invalid/legacy element IDs |
content |
Fix placeholders, dates, status, priority |
references |
Update traceability and cross-references |
drift |
Handle upstream drift detection issues |
drift_merge |
Auto-merge upstream SYS changes (tiered) |
drift_archive |
Archive current version for Tier 3 changes |
deprecate |
Mark obsolete requirements as deprecated (no deletion) |
all |
All fix types (default) |
Output Artifacts
Fix Report
Nested Folder Rule: ALL REQ use nested folders (REQ-NN_{slug}/) regardless of size. Fix reports are stored alongside the REQ document in the nested folder.
File Naming: REQ-NN.F_fix_report_vNNN.md or REQ-NN-SSS.F_fix_report_vNNN.md
Location: Inside the REQ nested folder: docs/07_REQ/REQ-NN_{slug}/
Structure:
---
title: "REQ-NN.F: Fix Report v001"
tags:
- req
- fix-report
- quality-assurance
custom_fields:
document_type: fix-report
artifact_type: REQ-FIX
layer: 7
parent_doc: REQ-NN
source_review: REQ-NN.R_review_report_v001.md
fix_date: "YYYY-MM-DDTHH:MM:SS"
fix_tool: doc-req-fixer
fix_version: "1.0"
---
# REQ-NN Fix Report v001
## Summary
| Metric | Value |
|--------|-------|
| Source Review | REQ-NN.R_review_report_v001.md |
| Issues in Review | 18 |
| Issues Fixed | 15 |
| Issues Remaining | 3 (manual review required) |
| Files Created | 3 |
| Files Modified | 5 |
## Files Created
| File | Type | Location |
|------|------|----------|
| REQ-00_INDEX.md | REQ Index | docs/07_REQ/ |
| REQ-00_GLOSSARY.md | REQ Glossary | docs/07_REQ/ |
| UC_UserLogin.md | Use Case Placeholder | docs/00_REF/use-cases/ |
## Fixes Applied
| # | Issue Code | Issue | Fix Applied | File |
|---|------------|-------|-------------|------|
| 1 | REV-L001 | Broken index link | Created REQ-00_INDEX.md | REQ-01.md |
| 2 | REV-L001 | Broken glossary link | Created REQ-00_GLOSSARY.md | REQ-01.md |
| 3 | REV-L001 | Broken use case link | Created placeholder UC file | REQ-01.md |
| 4 | REV-N004 | Element type 13 invalid | Converted to type 01 | REQ-01.md |
| 5 | REV-N004 | Legacy FR-XXX pattern | Converted to REQ.NN.01.SS | REQ-01.md |
| 6 | REV-P007 | Missing priority | Added P2 default | REQ-02.md |
## Issues Requiring Manual Review
| # | Issue Code | Issue | Location | Reason |
|---|------------|-------|----------|--------|
| 1 | REV-P001 | [TODO] placeholder | REQ-01:L67 | Domain expertise needed |
| 2 | REV-D001 | SYS drift detected | REQ-01:L145 | Review system changes |
| 3 | REV-R001 | Missing acceptance criteria | REQ-01:L200 | Define testable criteria |
## Validation After Fix
| Metric | Before | After | Delta |
|--------|--------|-------|-------|
| Review Score | 82 | 93 | +11 |
| Errors | 5 | 0 | -5 |
| Warnings | 8 | 3 | -5 |
## Next Steps
1. Complete UC_UserLogin.md placeholder
2. Address remaining [TODO] placeholders
3. Add missing acceptance criteria for requirements
4. Review SYS drift and update requirements if needed
5. Run `/doc-req-reviewer REQ-01` to verify fixes
Integration with Autopilot
This skill is invoked by doc-req-autopilot in the Review -> Fix cycle:
flowchart LR
subgraph Phase5["Phase 5: Review & Fix Cycle"]
A[doc-req-reviewer] --> B{Score >= 90?}
B -->|No| C[doc-req-fixer]
C --> D{Iteration < Max?}
D -->|Yes| A
D -->|No| E[Flag for Manual Review]
B -->|Yes| F[PASS]
end
Autopilot Integration Points:
| Phase | Action | Skill |
|---|---|---|
| Phase 5a | Run initial review | doc-req-reviewer |
| Phase 5b | Apply fixes if issues found | doc-req-fixer |
| Phase 5c | Re-run review | doc-req-reviewer |
| Phase 5d | Repeat until pass or max iterations | Loop |
Error Handling
Recovery Actions
| Error | Action |
|---|---|
| Review report not found | Prompt to run doc-req-reviewer first |
| Cannot create file (permissions) | Log error, continue with other fixes |
| Cannot parse review report | Abort with clear error message |
| Max iterations exceeded | Generate report, flag for manual review |
Backup Strategy
Before applying any fixes:
- Create backup in
tmp/backup/REQ-NN_YYYYMMDD_HHMMSS/ - Copy all REQ files to backup location
- Apply fixes to original files
- If error during fix, restore from backup
Related Skills
| Skill | Relationship |
|---|---|
doc-req-reviewer |
Provides review report (input) |
doc-req-autopilot |
Orchestrates Review -> Fix cycle |
doc-req-validator |
Structural validation |
doc-naming |
Element ID standards |
doc-req |
REQ creation rules |
doc-sys |
Upstream system design |
doc-ctr |
Downstream contracts reference |
doc-spec |
Downstream specifications reference |
Version History
| Version | Date | Changes |
|---|---|---|
| 2.1 | 2026-02-11 | Structure Compliance: Added Phase 0 for nested folder rule enforcement (REV-STR001-STR003); Runs FIRST before other fix phases |
| 2.0 | 2026-02-10 | Enhanced Phase 6 Auto-Merge System: Tiered auto-merge thresholds (Tier 1 <5%, Tier 2 5-15%, Tier 3 >15%); Change percentage calculation algorithm; Auto-generated IDs for new requirements (REQ.NN.TT.SS pattern); No deletion policy – mark as [DEPRECATED] instead; Archive manifest creation for Tier 3; Enhanced drift cache with merge history and downstream notifications; New options: –auto-merge, –force-tier, –show-merge-history, –restore-archive, –notify-downstream; New fix types: drift_merge, drift_archive, deprecate; Semantic versioning (patch/minor/major) based on change tier |
| 1.0 | 2026-02-10 | Initial skill creation; 6-phase fix workflow; REQ Index, Glossary, and Use Case file creation; Element ID conversion (types 01, 05, 06, 27); Broken link fixes; SYS upstream drift handling; Support for sectioned REQ naming (REQ-NN-SSS); Integration with autopilot Review->Fix cycle |