* feat(gsd-tools): add history-digest, atomic state operations, and summary variants Adds new performance-focused commands to gsd-tools and introduces specialized summary templates to reduce context tax: - history-digest: Compiles phase summaries into structured JSON for JIT loading - state get/patch: Enables atomic STATE.md operations instead of full rewrites - template select: Automatically chooses optimal summary template based on plan complexity - Adds minimal, standard, and complex summary templates Part of the "Hydra" architecture for GSD context optimization. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * chore: add project config * docs: define v1 requirements * docs: create roadmap (6 phases) * feat(history-digest): fix nested YAML parsing and add tests - Fix extractFrontmatter() to handle nested YAML structures like dependency-graph.provides, tech-stack.added using stack-based parsing - Add test infrastructure with Node test runner (npm test) - Update gsd-planner to use digest fields directly instead of reading full SUMMARY.md files - Add 6 schema validation tests covering nested fields, merging, malformed files, and backward compatibility Closes: HIST-01, HIST-02, HIST-03, HIST-04 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix(planner): use digest for selection, full SUMMARY for understanding The previous commit went too far by eliminating full SUMMARY reads. The digest is an index for smart selection, not a replacement for understanding what actually happened. Two-step approach: 1. Digest to score/select relevant phases (2-4 typically) 2. Full SUMMARY read for selected phases (implementation details) 3. Digest-level context retained for unselected phases Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat(gsd-tools): add phases, roadmap, and phase commands TDD implementation of three new commands to replace repetitive bash: phases list [--type plans|summaries] [--phase N] - Lists phase directories sorted numerically (handles decimals) - Filter by file type or specific phase - Replaces: ls -d .planning/phases/*/ | sort -V (22 occurrences) roadmap get-phase <N> - Extracts phase section from ROADMAP.md - Returns name, goal, full section content - Replaces: grep -A20 "Phase X:" ROADMAP.md (19 occurrences) phase next-decimal <N> - Calculates next decimal phase (06 → 06.1, 06.2 → 06.3) - Handles gaps, normalizes input - Replaces: complex bash math in insert-phase (3 occurrences) 16 new tests, all passing. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * refactor: migrate agents/workflows to use gsd-tools commands Replace inline bash patterns with centralized gsd-tools commands: phases list: - audit-milestone.md: ls -d .planning/phases/*/ | sort -V - plan-milestone-gaps.md: ls -d ... | sort -V | tail -1 roadmap get-phase: - plan-phase.md: grep -A5 "Phase X:" ROADMAP.md (2 occurrences) - research-phase.md: grep patterns (2 occurrences) - verify-phase.md: grep -A5 pattern - gsd-verifier.md: grep -A5 pattern - gsd-plan-checker.md: grep -A10 pattern - commands/gsd/research-phase.md: grep patterns (2 occurrences) phase next-decimal: - insert-phase.md: complex bash decimal calculation - decimal-phase-calculation.md: reference doc rewritten phase-argument-parsing.md: updated to reference gsd-tools Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
7.4 KiB
GSD Context Optimization: Action Plan
Consensus Across All Syntheses
All three proposals agree on the first two phases. Divergence begins at Phase 3 (how far to push deterministic orchestration). This plan executes the consensus first, then evaluates before committing to architectural changes.
Phase 1: Quick Wins (Do First)
Why first: Highest ROI, lowest risk, validates the approach before bigger changes.
1.1 History Digest
What: Add gsd-tools history-digest command that extracts frontmatter from SUMMARY.md files into a structured JSON.
Why: 10 summaries = 500-1000 lines → 2KB JSON. 80-90% reduction in history context.
Implementation:
// bin/gsd-tools.js
case 'history-digest':
const summaries = glob.sync('.planning/phases/*/*-SUMMARY.md');
const digest = { phases: {}, decisions: [], tech_stack: new Set() };
for (const file of summaries) {
const frontmatter = extractFrontmatter(file);
// Extract: provides, patterns, affects, decisions, tech-stack
}
console.log(JSON.stringify(digest, null, 2));
Acceptance: Planner uses digest instead of reading full summaries.
1.2 Atomic State Operations
What: Add gsd-tools state get <section> and gsd-tools state patch --key value.
Why: Agents currently hold full STATE.md (50-100 lines) throughout execution. Patch operations read/write only what's needed.
Implementation:
case 'state':
if (args[1] === 'get') {
// Return specific section as JSON
}
if (args[1] === 'patch') {
// Parse flags, apply atomic updates
}
Acceptance: Executor uses state patch instead of rewriting full file.
1.3 Summary Template Variants
What: Create three templates: summary-minimal.md (~30 lines), summary-standard.md (~60 lines), summary-complex.md (~100 lines).
Why: A 2-task config change doesn't need a 114-line summary template.
Selection logic:
- Minimal: ≤2 tasks, ≤3 files, no decisions
- Complex: Has decisions OR >6 files
- Standard: Everything else
Acceptance: Executor selects template based on plan metadata.
1.4 Finish Compound Init Sweep
What: Ensure all major workflows use compound init calls.
Why: Already proven in v1.12.x. Consolidates 5-10 atomic calls into single payload.
Targets: new-project.md, complete-milestone.md, verify-work.md, transition.md, help.md, discuss-phase.md
Phase 2: Tiered Agent Architecture (Do Second)
Why second: Addresses the biggest context hogs (planner: 55KB, executor: 19KB) but requires more careful refactoring.
2.1 Split Executor
What: Extract protocols into separate reference files, load conditionally.
Before:
agents/gsd-executor.md (382 lines, ~19KB)
- deviation_rules (60 lines) - always loaded
- checkpoint_protocol (40 lines) - always loaded
- tdd_execution (30 lines) - always loaded
- continuation_handling (20 lines) - always loaded
After:
agents/gsd-executor-core.md (~150 lines)
references/executor/
deviation-rules.md # Always loaded (core identity)
tdd-execution.md # Loaded if task.tdd="true"
checkpoint-protocol.md # Loaded if task.type="checkpoint:*"
continuation.md # Loaded if <completed_tasks> present
Loading logic: Executor uses @ references conditionally based on task metadata.
Acceptance: Executor base context drops from ~19KB to ~8KB.
2.2 Split Planner
What: Extract mode-specific logic into extensions.
Before:
agents/gsd-planner.md (1,116 lines, ~55KB)
After:
agents/gsd-planner-core.md (~300 lines)
- role, philosophy, context_fidelity
- task_breakdown (core)
- plan_format
- execution_flow (standard path)
agents/gsd-planner-ext/
gap-closure.md # Loaded if --gaps flag
revision.md # Loaded if checker issues
tdd.md # Loaded if TDD candidates detected
checkpoints.md # Loaded if phase has checkpoints
Orchestrator assembles prompt dynamically based on flags and phase characteristics.
Acceptance: Planner base context drops from ~55KB to ~20KB.
Phase 3: Compiled Plans (Do Third)
Why third: Depends on stable tiered agents. Provides incremental gains on top of Phase 2.
3.1 Implement compile-plan
What: Add gsd-tools compile-plan <path> that:
- Inlines all
@references - Strips sections unused by this plan (no TDD tasks → remove TDD sections)
- Outputs
.compiled.mdready for execution
Why: Eliminates runtime @ resolution. Pre-strips unused protocols.
Staleness handling:
- Check mtime before execution
.compiled.mdin .gitignore- Recompile on GSD update
Acceptance: Plans execute from compiled form, ~30-40% context reduction.
Phase 4: Evaluate Railroad (Decide Later)
Why later: High effort, architectural risk. Phases 1-3 may provide sufficient improvement.
The question: Should gsd-tools become a state machine that tells Claude "do this next" instead of Claude reading workflow files?
Arguments for:
- Maximum context reduction
- Deterministic execution (can't skip steps)
- LLM focuses purely on task, not process
Arguments against:
- Loses adaptive intelligence
- Can't handle mid-execution surprises
- Debugging split across code and prompts
- Near-total rewrite
Decision point: After Phase 3, measure context usage. If still >40% at task start, consider Railroad. If <40%, skip.
Phase 5: Semantic Queries (Optional)
Why optional: gsd-memory MCP exists. Only invest here if grep-based lookups prove insufficient after other optimizations.
What: Extend gsd-memory with structured queries:
gsd_memory_what_uses({ symbol: "User", type: "model" })
gsd_memory_pattern_for({ domain: "auth" })
Decision point: After Phase 3, evaluate if history/pattern lookups are still a bottleneck.
Execution Order Summary
IMMEDIATE (Phase 1) - 1-2 days
├── 1.1 history-digest command
├── 1.2 state get/patch commands
├── 1.3 Summary template variants
└── 1.4 Compound init sweep completion
NEXT (Phase 2) - 3-5 days
├── 2.1 Split gsd-executor into core + references
└── 2.2 Split gsd-planner into core + extensions
THEN (Phase 3) - 3-5 days
└── 3.1 compile-plan command
EVALUATE (Phase 4) - Decision point
└── Measure: Is context <40%?
└── Yes → Done
└── No → Consider Railroad architecture
OPTIONAL (Phase 5)
└── Semantic MCP queries (only if needed)
Success Metrics
| Metric | Current | Phase 1 | Phase 2 | Phase 3 | Target |
|---|---|---|---|---|---|
| Executor base | ~19KB | ~19KB | ~8KB | ~6KB | <8KB |
| Planner base | ~55KB | ~55KB | ~20KB | ~18KB | <20KB |
| History (10 phases) | ~20KB | ~2KB | ~2KB | ~2KB | <3KB |
| Task start context | ~25% | ~18% | ~12% | ~10% | <15% |
What NOT To Do
-
Don't implement Railroad before Phase 3 measurement. The architectural cost is high; validate simpler solutions first.
-
Don't compress instructional content. The teaching content is GSD's value. Optimize when it loads, not what it says.
-
Don't over-engineer caching. Simple mtime checks work. No cache invalidation logic until proven necessary.
-
Don't parallelize phases. Each phase validates assumptions for the next. Sequential execution reduces risk.
Next Action
Start Phase 1.1: Implement gsd-tools history-digest.