Skip to content

spec-to-plan: multi-plan bundles with frontmatter-typed Plan/Task#13

Merged
kreneskyp merged 5 commits into
mainfrom
spec-to-plan-multi-plan-bundles
Jun 21, 2026
Merged

spec-to-plan: multi-plan bundles with frontmatter-typed Plan/Task#13
kreneskyp merged 5 commits into
mainfrom
spec-to-plan-multi-plan-bundles

Conversation

@kreneskyp

Copy link
Copy Markdown
Contributor

Why

spec-to-plan produced one flat plan/plan.md per project, and task metadata (deps/status/track) lived in prose — so nothing downstream could build the DAG or sync to GitHub issues.

What

Rework to multiple plan bundles under plan/<Plan-id>-<slug>/, each a self-describing OKF unit:

  • plan.md (type: Plan), tasks/Task-NNN-*.md (type: Task), index.md (type: index), log.md (type: log).
  • Step 0 (plan selection): continue an existing plan or start a new one; skipped when the target plan is already in context.
  • Frontmatter is the machine contract: task relationships: depends_on (DAG) / references (requirement ownership) / verifies (test traces), plus flat status/track/priority.
  • Workflow parity (def.yaml target + template type: Plan).

Depends on / pairs with

Verification

make build + 102 tests pass. A migrated electron-hello bundle passes quire validate --scope <proj> "plan/**/*.md", and the github-projects parser extracts the full DAG from it.

Follow-ups in this PR

  • Update the spec-to-plan eval scenario + any single-plan user-story language.

🤖 Generated with Claude Code

Rework spec-to-plan from one flat plan/plan.md per project to multiple
plan bundles under plan/<Plan-id>-<slug>/. Each bundle is a self-describing
OKF unit: plan.md (type: Plan), tasks/Task-NNN-*.md (type: Task),
index.md (type: index), log.md (type: log).

- Add Step 0 (plan selection): continue an existing plan or start a new one;
  skip when the target plan is already fixed in context.
- Task metadata is now the machine contract in frontmatter: relationships
  depends_on (DAG) / references (requirement ownership) / verifies (test
  traces), plus flat status/track/priority. Replaces prose status.
- Steps 1-3 parameterized to the bundle path; tasks/README.md replaced by
  index.md; log.md records plan lifecycle.
- Workflow parity: def.yaml target -> plan/<id>-<slug>/plan.md; template
  type implementation-plan -> Plan.

Adopts the registered Plan/Task archetypes from spec-artifacts-process so
bundles are quire-validatable and parseable for GitHub-issue sync.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kreneskyp kreneskyp requested a review from a team as a code owner June 21, 2026 20:05
Agent IX and others added 4 commits June 21, 2026 13:13
Cover the new multi-plan output: a scenario driving spec-to-plan to author
a plan bundle (type: Plan plan.md + reserved index/log + >=3 type: Task
files with relationships depends_on/references/verifies) and assert it via
the artifacts (Plan>=1, Task>=3) + files + quire-validate checks. Adds the
matching EV-027 row to spec/evals.md (TM-002).

Closes the eval coverage gap for the multi-plan bundle shape; Step-0
multi-plan selection remains a follow-up scenario.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a dedicated user story for the multi-plan capability: a project holds
several focused plans, each a self-describing bundle, and the planner can
start a new plan or continue an existing one (Step 0 selection). Wire it
into the eval matrix (TM-002 covers US-008) and retag EV-027 to US-008.

Add EV-028: Step-0 multi-plan selection — seed an existing Plan-001 bundle,
drive spec-to-plan to start a second independent Plan-002, assert >=2 Plan
artifacts and a Plan-002 bundle, all validating.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The seeded Plan-001 fixture hardcoded mixed-case ids (Plan-001/Task-001),
which the published spec-artifacts-process schema (uppercase-only id regex)
rejects — so EV-028 failed quire validate on the FIXTURE, not the agent's
output (the agent authored valid uppercase ids and a correct Plan-002 bundle;
EV-027 passed the same way). Use uppercase PLAN-001/TASK-001 in the seed,
valid under both the published schema and the loosened (mixed-case) schema
from the schema PR, so the scenario no longer depends on that PR. Correct the
now-inaccurate "requires mixed-case" comments on EV-027/EV-028.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add the common "spec changed, regenerate the plan" flow that was missing
(EV-027 only creates, EV-028 only starts a second plan):

- EV-029: seed a PLAN-001-core bundle covering FR-001, add FR-002 to the
  spec, drive spec-to-plan to UPDATE that plan in place (add a task, refresh
  index/log) without spawning a second plan. Validated via agent-pty (PASS):
  the agent added TASK-003/004 for FR-002, updated references/index/log, and
  left a single plan.
- Harness: add `absentFiles` (globs that must match zero files) and an
  `artifacts` `max` bound so a scenario can assert exactly one Plan.
- Skill: flesh out Step 0's thin "continue → appends/updates" into an
  "Updating an existing plan" section (diff coverage, add only missing tasks,
  preserve in-progress/done status, reconcile changed/removed requirements,
  refresh index+log, never spawn a second plan).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@kreneskyp kreneskyp merged commit 4e5f4cb into main Jun 21, 2026
6 checks passed
@kreneskyp kreneskyp deleted the spec-to-plan-multi-plan-bundles branch June 21, 2026 23:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant