# Goal Generation Heuristics ## Goal Quality Criteria A good goal: 1. **Mechanically verifiable** — `check` is a shell command that exits 0 (pass) or non-zero (fail). No human judgment required. 2. **Descriptive** — `description` says what it measures, not how. "Go CLI compiles without errors" not "run go build". 3. **Weighted by impact** — 5 = build/test integrity, 3-4 = feature fitness, 1-2 = hygiene. 4. **Pillar-mapped** — Maps to one of: knowledge-compounding, validated-acceleration, goal-driven-automation, zero-friction-workflow. Infrastructure goals omit `pillar`. 5. **Not trivially true** — Check can actually fail in a realistic scenario. `test -f README.md` is trivially true. 6. **Not duplicative** — No two goals test the same thing. Check existing IDs before proposing. ## Scan Sources | Source | What to look for | Goal type | |--------|-----------------|-----------| | `PRODUCT.md` | Value props, design principles, theoretical pillars without goals | Pillar | | `README.md` | Claims, badges, features without verification | Pillar | | `skills/*/SKILL.md` | Skills with no goal referencing them | Pillar or Infra | | `tests/`, `hooks/` | Scripts not covered by goals | Infrastructure | | `docs/` | Doc files referenced but not covered | Infrastructure | | Existing goals | Checks referencing deleted paths | Prune candidates | ## Theoretical Pillar Coverage Generate mode should check that all 4 theoretical pillars have goals: ### 1. Systems Theory (Meadows) Targets leverage points #3-#6 (information flows, rules, self-organization, goals). Goals should verify that the system operates at these leverage points rather than lower ones (parameters, buffers). ### 2. DevOps (Three Ways) - **Flow** maps to `zero-friction-workflow` and `goal-driven-automation` - **Feedback** maps to `validated-acceleration` - **Continual Learning** maps to `knowledge-compounding` Goals should cover all three ways. ### 3. Brownian Ratchet The pattern: chaos + filter + ratchet = directional progress from undirected energy. Goals should verify: - Chaos source exists (agent sessions generate varied outputs) - Filter exists (council validates, vibe checks) - Ratchet exists (knowledge flywheel captures and persists gains) ### 4. Knowledge Flywheel Escape velocity condition: `signal_rate x retrieval_rate > decay_rate` (informally: you learn faster than you forget). Goals should verify: - Signal generation (extract, forge, retro produce learnings) - Retrieval (inject loads learnings into sessions) - Decay resistance (learnings are persisted, not just in-memory) ## Weight Guidelines | Weight | Category | Examples | |--------|----------|----------| | 5 | **Critical** | Build passes, tests pass, manifests valid | | 4 | **Important** | Full test suite, hook safety, mission alignment | | 3 | **Feature fitness** | Skill behaviors, positioning, documentation | | 2 | **Hygiene** | Lint, coverage floors, doc counts | | 1 | **Nice to have** | Stubs, aspirational checks | ## ID Conventions - Use kebab-case: `go-cli-builds`, `readme-compounding-hero` - Prefix with domain: `readme-`, `go-`, `skill-`, `hook-` - Keep under 40 characters - Must be unique across all goals ## Directive Quality Criteria When generating or evaluating directives for GOALS.md: 1. **Actionable** — Describes work that can be decomposed into issues. "Expand test coverage" not "Be better at testing." 2. **Steerable** — Has a clear direction (increase/decrease/hold/explore). If you can't assign a steer, it's too vague. 3. **Measurable progress** — You can tell whether work addressed it (even if not fully completed). 4. **Not a gate** — Directives describe intent, not pass/fail thresholds. "Reduce complexity" is a directive; "complexity < 15" is a gate. 5. **Prioritized** — Lower number = higher priority. Directive 1 is worked before directive 2. 6. **Evidence-grounded** — Every directive SHOULD cite a specific metric or finding that motivated it. Vague directives ("improve testing") are a smell. Good: "Close the multi-runtime promise gap — runtime-specific tests are quarantined (8 dirs in `tests/_quarantine/`)". Bad: "Ship more tests." 7. **Balanced across dimensions** — A healthy directive set includes both engineering directives (test, build, refactor) and product/growth directives (onboarding, adoption, user outcomes). If all directives are engineering-flavored, the goals file is incomplete. ### Steer Values | Steer | Meaning | Example | |-------|---------|---------| | `increase` | Do more of this | "Expand test coverage" | | `decrease` | Reduce this | "Reduce complexity budget" | | `hold` | Maintain current level | "Keep API compatibility" | | `explore` | Investigate options | "Evaluate new CI provider" | ### Directive-Gate Relationship Directives generate gates over time: - Directive "Expand test coverage" → Gate `test-coverage-floor` (check: coverage > 80%) - Directive "Reduce complexity" → Gate `complexity-budget` (check: gocyclo -over 15 = 0 findings) When a directive is fully addressed (gate exists and passes), consider removing the directive and keeping the gate. ## Product Directive Patterns Engineering directives target code quality. Product directives target user outcomes. A complete GOALS.md needs both. ### Product Directive Examples | Pattern | Example | Steer | |---------|---------|-------| | Onboarding friction | "Gate the install path — 3 install scripts have zero automated testing" | increase (install scripts with smoke tests) | | Adoption barrier | "Restructure quickstart to reach first validated workflow in under 5 min" | decrease (time to first value) | | Retention signal | "Verify knowledge lifecycle end-to-end — capture through injection to retrieval" | increase (lifecycle stages gated) | | Growth lever | "Maintain competitive awareness — refresh comparison docs within 45 days" | decrease (stale comparison doc count) | | User outcome | "Reduce false-positive council verdicts below 5%" | decrease (false positive rate) | ### How to Generate Product Directives 1. **Check PRODUCT.md** — if Known Gaps section exists, each gap is a candidate directive 2. **Check install/onboarding paths** — untested install = highest-risk product gap 3. **Check user-facing promises** — README claims without verification = directive candidates 4. **Check retention infrastructure** — knowledge flywheel, session handoff, learning retrieval 5. **Ask the user** — "What's your biggest product gap?" and "What metric would tell you the product is working?" ### Evidence Sources for Grounding Directives When writing directives, cite specific data when available: | Source | What to extract | Example citation | |--------|----------------|------------------| | `gh api repos/{owner}/{repo}` | Stars, forks, clones, traffic | "2,317 clones/14d" | | `.agents/defrag/latest.json` | Flywheel metrics | "σ=0.02 decay, 1.2% promotion rate" | | `tests/_quarantine/` | Quarantined test count | "8 test dirs disabled" | | `.agents/retro/` | Failure patterns | "3 of 5 retros cite missing install gates" | | `ao goals measure --json` | Gate pass rates | "5/7 passing (71%)" | | Council FAIL verdicts | Root causes | "#1 cause: missing mechanical verification" | ## Anti-Star Generation Anti-stars define what the project explicitly avoids. The best anti-stars come from proven failure modes, not hypothetical bad practices. ### Auto-Discovery Scan these sources for failure patterns to convert into anti-stars: 1. **`.agents/retro/`** — recurring themes in retrospectives (e.g., "scope bundling caused 3 failed epics") 2. **Council FAIL verdicts** — root causes from `.agents/council/` or council index (e.g., "missing mechanical verification" → anti-star: "Product promises with no automated verification") 3. **`.agents/learnings/`** — learnings tagged as anti-patterns or mistakes ### Conversion Pattern | Failure mode | Anti-star | |-------------|-----------| | Knowledge stored but never retrieved | "Capture without compounding" | | Gates pass but product doesn't improve | "Goals that measure code metrics instead of user outcomes" | | Tests quarantined indefinitely | "Quarantined tests that hide real regression risk" | | Features built without user demand | "Building features nobody asked for" | ### Fallback If no `.agents/` data exists, use generic anti-stars: - "Shipping without validation" - "Measuring activity instead of outcomes" - "Optimizing for metrics that don't correlate with user value" ## North Star Quality North stars should describe outcomes, not features. | Weaker (feature-focused) | Stronger (outcome-focused) | |--------------------------|---------------------------| | "Skills work across 4 runtimes" | "Skills work identically across Claude Code, Codex CLI, Cursor, and OpenCode" | | "Knowledge flywheel captures learnings" | "Knowledge captured in one session is retrieved and applied in the next" | | "Fast onboarding" | "A new user goes from install to first validated workflow in under 5 minutes" | When reviewing north stars, ask: "If this star is achieved, does a user's life actually improve?" If the answer is "only if other things also happen," the star is too narrow. ## Product Gate Patterns Product gates verify product health alongside code health. Suggest gates based on what infrastructure exists: | Infrastructure | Gate ID | Check | Weight | |---------------|---------|-------|--------| | `.agents/learnings/` + flywheel CLI | `flywheel-compounding` | `ao flywheel status --json \| jq -e '.escape_velocity_compounding == true'` | 8 | | `skills/quickstart/` | `quickstart-under-5min` | `bash scripts/check-quickstart-timing.sh` | 5 | | `docs/comparisons/` | `competitive-freshness` | `bash scripts/check-competitive-freshness.sh` | 3 | | `PRODUCT.md` with Known Gaps | `product-gaps-tracked` | `grep -c '|' PRODUCT.md \| test $(cat) -gt 0` | 3 | | `ao flywheel status` works | `flywheel-promotion-rate` | `ao flywheel status --json \| jq -e '.promotion_rate > 0.05'` | 4 | Only suggest product gates for infrastructure that actually exists in the project. Don't create aspirational gates — they'll just fail and get ignored.