* test: add failing tests for planner modular decomposition - Assert gsd-planner.md is under 45K after extraction (currently ~50K) - Assert three reference files exist (gap-closure, revision, reviews) - Assert planner contains reference pointers to each extracted file - Assert each reference file contains key content from the original mode * feat(agents): modular decomposition of gsd-planner.md to fix 50K char limit Extracts three non-standard mode sections from gsd-planner.md into dedicated reference files loaded on-demand, and calibrates the security scanner to use a per-file-type threshold (100K for agent source files vs 50K for user input). Structural changes: - Extract <gap_closure_mode> → get-shit-done/references/planner-gap-closure.md - Extract <revision_mode> → get-shit-done/references/planner-revision.md - Extract <reviews_mode> → get-shit-done/references/planner-reviews.md - Add <load_mode_context> step in execution_flow (conditional lazy loading) - gsd-planner.md: 50,112 → 45,352 chars (well under new 45K target) Security scanner fix: - Split agent file check: injection patterns (unchanged) + separate 100K size limit - The 50K strict-mode limit was designed for user-supplied input, not trusted source files - Agent files still have a size guard to catch accidental bloat Partially addresses #1495 * fix(tests): normalize CRLF before measuring planner file size Windows git checkouts add \r per line, inflating String.length by ~1150 chars for a 1,400-line file. The 45K threshold test failed on windows-latest because 45,352 chars (Linux) became 46,507 chars (Windows). Apply the same CRLF normalization pattern used in tests/reachability-check.test.cjs. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1.8 KiB
1.8 KiB
Gap Closure Mode — Planner Reference
Triggered by --gaps flag. Creates plans to address verification or UAT failures.
1. Find gap sources:
Use init context (from load_project_state) which provides phase_dir:
# Check for VERIFICATION.md (code verification gaps)
ls "$phase_dir"/*-VERIFICATION.md 2>/dev/null
# Check for UAT.md with diagnosed status (user testing gaps)
grep -l "status: diagnosed" "$phase_dir"/*-UAT.md 2>/dev/null
2. Parse gaps: Each gap has: truth (failed behavior), reason, artifacts (files with issues), missing (things to add/fix).
3. Load existing SUMMARYs to understand what's already built.
4. Find next plan number: If plans 01-03 exist, next is 04.
5. Group gaps into plans by: same artifact, same concern, dependency order (can't wire if artifact is stub → fix stub first).
6. Create gap closure tasks:
<task name="{fix_description}" type="auto">
<files>{artifact.path}</files>
<action>
{For each item in gap.missing:}
- {missing item}
Reference existing code: {from SUMMARYs}
Gap reason: {gap.reason}
</action>
<verify>{How to confirm gap is closed}</verify>
<done>{Observable truth now achievable}</done>
</task>
7. Assign waves using standard dependency analysis (same as assign_waves step):
- Plans with no dependencies → wave 1
- Plans that depend on other gap closure plans → max(dependency waves) + 1
- Also consider dependencies on existing (non-gap) plans in the phase
8. Write PLAN.md files:
---
phase: XX-name
plan: NN # Sequential after existing
type: execute
wave: N # Computed from depends_on (see assign_waves)
depends_on: [...] # Other plans this depends on (gap or existing)
files_modified: [...]
autonomous: true
gap_closure: true # Flag for tracking
---