Files
msd-core/get-shit-done/references/universal-anti-patterns.md
Rezolv 86fb9c85c3 docs(sdk): registry docs and gsd-sdk query call sites (#2302 Track B) (#2340)
* feat(sdk): golden parity harness and query handler CJS alignment (#2302 Track A)

Golden/read-only parity tests and registry alignment, query handler fixes
(check-completion, state-mutation, commit, validate, summary, etc.), and
WAITING.json dual-write for .gsd/.planning readers.

Refs gsd-build/get-shit-done#2341

* fix(sdk): getMilestoneInfo matches GSD ROADMAP (🟡, last bold, STATE fallback)

- Recognize in-flight 🟡 milestone bullets like 🚧.
- Derive from last **vX.Y Title** before ## Phases when emoji absent.
- Fall back to STATE.md milestone when ROADMAP is missing; use last bare vX.Y
  in cleaned text instead of first (avoids v1.0 from shipped list).
- Fixes init.execute-phase milestone_version and buildStateFrontmatter after
  state.begin-phase (syncStateFrontmatter).

* feat(sdk): phase list, plan task structure, requirements extract handlers

- Register phase.list-plans, phase.list-artifacts, plan.task-structure,
  requirements.extract-from-plans (SDK-only; golden-policy exceptions).
- Add unit tests; document in QUERY-HANDLERS.md.
- writeProfile: honor --output, render dimensions, return profile_path and dimensions_scored.

* feat(sdk): centralize getGsdAgentsDir in query helpers

Extract agent directory resolution to helpers (GSD_AGENTS_DIR, primary
~/.claude/agents, legacy path). Use from init and docs-init init bundles.

docs(15): add 15-CONTEXT for autonomous phase-15 run.

* feat(sdk): query CLI CJS fallback and session correlation

- createRegistry(eventStream, sessionId) threads correlation into mutation events
- gsd-sdk query falls back to gsd-tools.cjs when no native handler matches
  (disable with GSD_QUERY_FALLBACK=off); stderr bridge warnings
- Export createRegistry from @gsd-build/sdk; add sdk/README.md
- Update QUERY-HANDLERS.md and registry module docs for fallback + sessionId
- Agents: prefer node dist/cli.js query over cat/grep for STATE and plans

* fix(sdk): init phase_found parity, docs-init agents path, state field extract

- Normalize findPhase not-found to null before roadmap fallback (matches findPhaseInternal)

- docs-init: use detectRuntime + resolveAgentsDir for checkAgentsInstalled

- state.cjs stateExtractField: horizontal whitespace only after colon (YAML progress guard)

- Tests: commit_docs default true; config-get golden uses temp config; golden integration green

Refs: #2302

* refactor(sdk): share SessionJsonlRecord in profile-extract-messages

CodeRabbit nit: dedupe JSONL record shape for isGenuineUserMessage and streamExtractMessages.

* fix(sdk): address CodeRabbit major threads (paths, gates, audit, verify)

- Resolve @file: and CLI JSON indirection relative to projectDir; guard empty normalized query command

- plan.task-structure + intel extract/patch-meta: resolvePathUnderProject containment

- check.config-gates: safe string booleans; plan_checker alias precedence over plan_check default

- state.validate/sync: phaseTokenMatches + comparePhaseNum ordering

- verify.schema-drift: token match phase dirs; files_modified from parsed frontmatter

- audit-open: has_scan_errors, unreadable rows, human report when scans fail

- requirements PLANNED key PLAN for root PLAN.md; gsd-tools timeout note

- ingest-docs: repo-root path containment; classifier output slug-hash

Golden parity test strips has_scan_errors until CJS adds field.

* fix: Resolve CodeRabbit security and quality findings
- Secure intel.ts and cli.ts against path traversal
- Catch and validate git add status in commit.ts
- Expand roadmap milestone marker extraction
- Fix parsing array-of-objects in frontmatter YAML
- Fix unhandled config evaluations
- Improve coverage test parity mapping

* docs(sdk): registry docs and gsd-sdk query call sites (#2302 Track B)

Update CHANGELOG, architecture and user guides, workflow call sites, and read-guard tests for gsd-sdk query; sync ARCHITECTURE.md command/workflow counts and directory-tree totals with the repo (80 commands, 77 workflows).

Address CodeRabbit: fix markdown tables and emphasis; align CLI-TOOLS GSDTools and state.read docs with implementation; correct roadmap handler name in universal-anti-patterns; resolve settings workflow config path without relying on config_path from state.load.

Refs gsd-build/get-shit-done#2340

* test: raise planner character extraction limit to 48K

* fix(sdk): resolve build TS error and doc conflict markers
2026-04-20 18:09:21 -04:00

6.1 KiB

Universal Anti-Patterns

Rules that apply to ALL workflows and agents. Individual workflows may have additional specific anti-patterns.


Context Budget Rules

  1. Never read agent definition files (agents/*.md) -- subagent_type auto-loads them. Reading agent definitions into the orchestrator wastes context for content automatically injected into subagent sessions.
  2. Never inline large files into subagent prompts -- tell agents to read files from disk instead. Agents have their own context windows.
  3. Read depth scales with context window -- check context_window in .planning/config.json. At < 500000: read only frontmatter, status fields, or summaries. At >= 500000 (1M model): full body reads permitted when content is needed for inline decisions. See references/context-budget.md for the complete table.
  4. Delegate heavy work to subagents -- the orchestrator routes, it does not build, analyze, research, investigate, or verify.
  5. Proactive pause warning: If you have already consumed significant context (large file reads, multiple subagent results), warn the user: "Context budget is getting heavy. Consider checkpointing progress."

File Reading Rules

  1. SUMMARY.md read depth scales with context window -- at context_window < 500000: read frontmatter only from prior phase SUMMARYs. At >= 500000: full body reads permitted for direct-dependency phases. Transitive dependencies (2+ phases back) remain frontmatter-only regardless.
  2. Never read full PLAN.md files from other phases -- only current phase plans.
  3. Never read .planning/logs/ files -- only the health workflow reads these.
  4. Do not re-read full file contents when frontmatter is sufficient -- frontmatter contains status, key_files, commits, and provides fields. Exception: at >= 500000, re-reading full body is acceptable when semantic content is needed.

Subagent Rules

  1. NEVER use non-GSD agent types (general-purpose, Explore, Plan, Bash, feature-dev, etc.) -- ALWAYS use subagent_type: "gsd-{agent}" (e.g., gsd-phase-researcher, gsd-executor, gsd-planner). GSD agents have project-aware prompts, audit logging, and workflow context. Generic agents bypass all of this.
  2. Do not re-litigate decisions that are already locked in CONTEXT.md (or PROJECT.md ## Context section) -- respect locked decisions unconditionally.

Questioning Anti-Patterns

Reference: references/questioning.md for the full anti-pattern list.

  1. Do not walk through checklists -- checklist walking (asking items one by one from a list) is the #1 anti-pattern. Instead, use progressive depth: start broad, dig where interesting.
  2. Do not use corporate speak -- avoid jargon like "stakeholder alignment", "synergize", "deliverables". Use plain language.
  3. Do not apply premature constraints -- don't narrow the solution space before understanding the problem. Ask about the problem first, then constrain.

State Management Anti-Patterns

  1. No direct Write/Edit to STATE.md or ROADMAP.md for mutations. Always use gsd-sdk query for registered state/roadmap handlers (e.g. state.update, state.advance-plan, roadmap.update-plan-progress), or legacy node …/gsd-tools.cjs for CLI-only commands. Direct Write tool usage bypasses safe update logic and is unsafe in multi-session environments. Exception: first-time creation of STATE.md from template is allowed.

Behavioral Rules

  1. Do not create artifacts the user did not approve -- always confirm before writing new planning documents.
  2. Do not modify files outside the workflow's stated scope -- check the plan's files_modified list.
  3. Do not suggest multiple next actions without clear priority -- one primary suggestion, alternatives listed secondary.
  4. Do not use git add . or git add -A -- stage specific files only.
  5. Do not include sensitive information (API keys, passwords, tokens) in planning documents or commits.

Error Recovery Rules

  1. Git lock detection: Before any git operation, if it fails with "Unable to create lock file", check for stale .git/index.lock and advise the user to remove it (do not remove automatically).
  2. Config fallback awareness: Config loading returns null silently on invalid JSON. If your workflow depends on config values, check for null and warn the user: "config.json is invalid or missing -- running with defaults."
  3. Partial state recovery: If STATE.md references a phase directory that doesn't exist, do not proceed silently. Warn the user and suggest diagnosing the mismatch.

GSD-Specific Rules

  1. Do not check for mode === 'auto' or mode === 'autonomous' -- GSD uses yolo config flag. Check yolo: true for autonomous mode, absence or false for interactive mode.
  2. Prefer gsd-sdk query for orchestration when a handler exists; when shelling out to the legacy CLI, use gsd-tools.cjs (not gsd-tools.js or any other filename) — GSD ships the programmatic API as CommonJS for Node.js CLI compatibility.
  3. Plan files MUST follow {padded_phase}-{NN}-PLAN.md pattern (e.g., 01-01-PLAN.md). Never use PLAN-01.md, plan-01.md, or any other variation -- gsd-tools detection depends on this exact pattern.
  4. Do not start executing the next plan before writing the SUMMARY.md for the current plan -- downstream plans may reference it via @ includes.

iOS / Apple Platform Rules

  1. NEVER use Package.swift + .executableTarget (or .target) as the primary build system for iOS apps. SPM executable targets produce macOS CLI binaries, not iOS .app bundles. They cannot be installed on iOS devices or submitted to the App Store. Use XcodeGen (project.yml + xcodegen generate) to create a proper .xcodeproj. See references/ios-scaffold.md for the full pattern.
  2. Verify SwiftUI API availability before use. Many SwiftUI APIs require a specific minimum iOS version (e.g., NavigationSplitView is iOS 16+, List(selection:) with multi-select and @Observable require iOS 17). If a plan uses an API that exceeds the declared IPHONEOS_DEPLOYMENT_TARGET, raise the deployment target or add #available guards.