Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@ Please choose versions by [Semantic Versioning](http://semver.org/).
* MINOR version when you add functionality in a backwards-compatible manner, and
* PATCH version when you make backwards-compatible bug fixes.

## Unreleased

- feat(launch-goal): add new `/vault-cli:launch-goal` interview-driven goal framing command — discovery → fan-out exploration (5 parallel semantic searches + duplicate-check gate) → 3-lens framing (parallel subagents → top-3 candidates) → sharpen → draft-to-disk with `status: draft` + Obsidian link → parallel verify (Adversarial Laziness Test + outcome traceability + hedge-word grep) → audit fan-out (goal-auditor + graph-auditor + late dup-check) → status flip on PASS. Resolves the "create-goal jumps straight to writing" failure mode by forcing an outcome-sentence confirmation gate before file creation. Mirrors `/launch-agent` shape; positions as the rigorous front door beside `create-goal`'s template fast-path
- docs(goal-writing): add § "Tooling-Category Exception" extending Title sniff test — artifact-shaped titles ("Multi-Provider Claude Code Proxy", "Goal-Writing Assistant") accepted for goals where the artifact IS the deliverable; rule: don't bounce tool-existence framings back to outcome-only
- docs(goal-writing): add § "Tasks as Business-Value Milestones" — tasks are shippable outcomes, not WBS slices; explicit decomposition hierarchy (Goal → linked Tasks (wikilinks, separate files) → inline Subtasks (checkboxes in task file)); MUST render as `[[Wikilinks]]`, NOT bold text; 1-8 is soft cap NOT floor; foundation/skeleton work allowed when explicitly framed
- docs(goal-writing): add § "Evidence Shape per Success Criterion" — borrowed from `dark-factory/docs/rules/spec-writing.md`; every SC declares observable evidence (exit code / log line / file content / state transition / metric delta / negative evidence / file artifact); kills "tests pass" / "it works" vagueness
- docs(goal-writing): add § "Adversarial Laziness Test" — borrowed from `dark-factory/docs/rules/spec-writing.md`; read SCs assuming laziest possible implementation; if `[x]` everywhere tomorrow would feel "done" without doing the work, SCs are under-specified
- docs(goal-writing): add § "Anti-pattern: soak-time DoD on personal-laptop tools" under Definition of Done — operator IS the runtime monitor for laptop tools; prefer exercise-now verification ("all paths reached in one session") over time-based bake ("runs N days without incident"); soak-time reserved for prod services with silent-degradation risk; updates Tasks-section bullet in Required sections to mandate `[[Wikilink]]` format
- docs(task-writing): add § "Subtask Hierarchy" under Task Structure — Goal → linked Tasks (wikilink files) → inline Subtasks (checkboxes inside task file); subtasks are atomic work units with no independent identity, no separate files; decision rule: shippable milestone → N tasks, sequential steps within one milestone → N inline subtasks; never recreate file-link hierarchy below task level
- feat(goal-creator): step 9 `# Tasks` body composition now requires `[[Wikilink]]` format when tasks supplied at creation time (NOT bold text + description); step 12 audit checks expanded to grep for bold-text task entries and flag soak-time DoD anti-pattern phrases
- feat(goal-auditor): item 8 "Tasks Quality" extended with WARN flags for (a) bold-text tasks instead of `[[Wikilinks]]` (disables Obsidian auto-create-on-click), (b) WBS-shaped task titles (≥3 tasks starting with `Implement`/`Define`/`Add <noun>`/`Refactor`/`Migrate`/`Wire`/`Configure`); count guidance updated to "1-8 soft cap, NOT a floor" — don't flag 1-3 tasks as under-count. Item 12 "Definition of Done Quality" extended with WARN flag for soak-time DoD phrases (`runs for N hours/days`, `one real working day's worth`, `no regressions for a week`) on tooling-category goals; don't flag on production-service goals where soak-time is appropriate

## v0.88.0

- feat(auditors): goal-auditor + task-auditor flag missing/empty `# Definition of Done` section as MAJOR; severity matrix uses `DOD_REQUIRED_AS_OF=2026-06-26` constant with grandfathering (pages `created` before cutoff → WARN, not MAJOR); task-auditor adds dev → prod ladder check for multi-environment shipping-class artifacts (detection requires explicit `dev` + `prod` co-occurrence, not container keywords); 4 new dishonest-tick phrases added to anti-pattern list (`tested on dev only`, `ci passed = tested`, `auto-release tagged ≠ shipped`, `deferred to follow-up goal`)
Expand Down
30 changes: 28 additions & 2 deletions agents/goal-auditor.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,10 @@ Expert Obsidian goal auditor specializing in evaluating goal pages against the G
- **Comprehensive**: 3-5 criteria covering key outcomes

### 8. Tasks Quality
- **Count**: 4-8 major tasks
- **Linked**: Major tasks link to standalone task pages `[[Task Name]]`
- **Count**: 1-8 major tasks. The 4-8 range is a soft cap, NOT a floor — small goals can have 1 task ("Implement the proxy"). Don't flag 1-3 tasks as under-count; only flag >8 as over-count. See `docs/goal-writing.md` § Tasks as Business-Value Milestones.
- **Linked as wikilinks (WARN if not)**: tasks MUST render as `[[Wikilink Task Title]]`, NOT bold text + description. Detect with `grep -nE '^\s*[0-9]+\.\s+\*\*[^[]' <file>` in the `# Tasks` section — any match is bold-text-task and disables Obsidian auto-create-on-click. Recommendation: "Convert bold-text task entries to `[[Wikilinks]]` so clicking in Obsidian auto-creates the task file."
- **Business-value milestones (WARN if WBS-shaped)**: each task delivers a *shippable improvement*, not a code-change slice. Detect WBS-shaped titles by leading-verb pattern: titles starting with `Implement`, `Define`, `Add` (when followed by a noun like "schema", "field", "adapter"), `Refactor`, `Migrate`, `Wire`, `Configure` are likely WBS rows. If ≥3 of the goal's tasks fit this pattern, flag as WARN with: "Tasks read as code-change slices, not business-value milestones. Consider collapsing into 1-3 shippable-milestone tasks; move the code-change breakdown to inline subtasks inside each task file (see `docs/goal-writing.md` § Tasks as Business-Value Milestones)."
- **Foundation work allowed when explicitly framed**: tasks like "Set Up Project Skeleton" advance no SC by design. Don't flag as orphan if the task body explicitly says "foundation; enables iteration" or similar — accept the framing. Otherwise apply the orphan rule from Task-Goal Alignment below.
- **Structured**: Logical order or phased approach

### 9. SMART Compliance
Expand Down Expand Up @@ -119,6 +121,30 @@ The `# Definition of Done` section is the closure gate. Goals that lack it (or h

**Reference checks:** The DoD section should reference `[[Goal Closure Checklist]]` (generic 6-section structure) and/or `[[Closure Patterns]]` (per-artifact blocks) — recommend, don't require.

**Soak-time DoD anti-pattern (WARN):** flag DoD checkboxes whose evidence is time-based bake. The check is **gated on category** and runs in two ordered steps — gate first, grep second.

**Step 1 — category gate (apply ONLY if BOTH hold):**

1. **Tooling category match** — frontmatter `category: tooling`, OR title/summary contains a personal-laptop-tool keyword (`slash command`, `CLI`, `script`, `daemon`, `plugin`, `extension`, `proxy`, `wrapper`, `helper`) — **case-insensitive substring match**.
2. **No production signal** — title, summary, and DoD do NOT contain any of: `prod`, `production`, `k8s`, `kubernetes`, `multi-user`, `customers`, `tenants`, `trading hot path`, `live traffic`, `SLA`, `uptime` — **case-insensitive substring match**.

If EITHER step-1 condition fails → do NOT scan; skip soak-time check entirely. Soak-time DoD is appropriate on production-service goals (k8s, multi-user, trading hot path) and on goals where prod-shape is named explicitly.

**Step 2 — phrase grep (run only after step 1 passes):**

Detect by phrase matching in the DoD section (case-insensitive):

- `runs for N (hour|day|week)s? without (incident|regression|workaround)` and variants
- `one (real )?(working )?day's? worth of`
- `no regressions for a (week|day|N (hours|days|weeks))`
- `runs unattended for N (hours|days|weeks)`
- `runs reliably (over|for) N`
- `stable for N (days|weeks)`

On any hit, emit WARN with: "Soak-time DoD on a personal-laptop tool — the operator IS the runtime monitor and notices breakage immediately. Replace with exercise-now verification ('all paths reached in one session, evidence: log line per path'). See `docs/goal-writing.md` § Anti-pattern: soak-time DoD on personal-laptop tools."

**Rationale for the two-step gate:** phrase-grep alone over-triggers — a k8s prod goal can legitimately say "runs for 24h without incident on prod" and that's correct DoD for that artifact type. The category gate enforces "this check applies ONLY when the artifact is a personal-laptop tool"; the prod-signal carve-out catches the edge case of a tooling-category goal that still has prod implications (e.g. a CLI used by a multi-user service).

## Goal Scope Fit (CRITICAL — flag at top of report if mismatch)

**Goals exist to organize coherent multi-task achievement.** Bloated goals (10+ tasks, mixed concerns) hide scope creep; thin goals (1-2 tasks) are usually a single task in disguise. Evaluate on these signals:
Expand Down
4 changes: 3 additions & 1 deletion agents/goal-creator.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ If a template body was loaded in step 7, use it. Otherwise, generate the standar
5. `# Status Summary` — Progress / Current / Next / Blockers placeholders
6. `# Success Criteria` — measurable outcomes as checkboxes
7. `# Non-goals` — explicit out-of-scope items (3–7 concrete deferrals; placeholder if author drafting). Forces scope articulation at write-time; mirrors dark-factory spec convention. See Goal Writing Guide section 7.
8. `# Tasks` — placeholder for linked subtasks (created later)
8. `# Tasks` — placeholder for linked tasks (created later). When tasks ARE supplied at creation time, render each as a `[[Wikilink Task Title]]` (one per line, numbered or bulleted), NOT bold text + description — Obsidian auto-creates the task file when the operator clicks the wikilink (primary task-creation path); bold-text disables this path. Tasks are **business-value milestones**, not WBS slices — see `docs/goal-writing.md` § Tasks as Business-Value Milestones. The 1-8 range is a soft cap, NOT a floor: small goals can have 1 task; don't pad. Title-Case names, no `/`, `.`, backticks, `:`, `*`, `?`, `"`, `<`, `>`, `|`.
9. `# Related` — themes / related goals / docs

## 10. Check for filename collision
Expand Down Expand Up @@ -165,6 +165,8 @@ Run a light self-audit against the file:
- Title is outcome-shaped (no verb-first activity openings: "Build X" / "Refactor Y" / "Set up Z" / "Migrate Y")
- Summary first sentence is outcome-shaped (no `via X` / `by doing Y` / `through Z`, AND no verb-first activity opening: "Build X" / "Refactor Y" / "Set up Z" / "Split X and build Y")
- Body has Success Criteria + Tasks sections (or template body)
- Tasks (if supplied) are `[[Wikilinks]]`, NOT bold text + description (`grep -E '^\s*[0-9]+\.\s+\*\*' <file> | head -1` should return empty in the `# Tasks` section — bold-text task entries break Obsidian auto-create-on-click)
- DoD has no soak-time anti-pattern items (no "runs for N hours/days", "no regressions for a week"); for personal-laptop tools, prefer exercise-now verification — see `docs/goal-writing.md` § Anti-pattern: soak-time DoD
- If `timeline` is set, validate it is ≤ 4 weeks
- No accidental empty sections

Expand Down
Loading
Loading