Skip to content

Restructure the product task workflow around vertical subtasks - #3629

Merged
tom2drum merged 2 commits into
mainfrom
claude/task-workflow-refinements-d5ec9b
Aug 11, 2026
Merged

Restructure the product task workflow around vertical subtasks#3629
tom2drum merged 2 commits into
mainfrom
claude/task-workflow-refinements-d5ec9b

Conversation

@tom2drum

Copy link
Copy Markdown
Collaborator

Description

Refines the spec-driven product task workflow in .agents/. Documentation only — no application code is touched.

A task that fits in one subtask no longer gets a spec. It is grilled, implemented, and opened as a PR inside a single session, with the reasoning going into the PR description. A spec exists to hand work to a session that wasn't in the room; a task that never leaves the room doesn't need one. The small / medium / large vocabulary goes with it — a deferred subtask is marked by having only a brief.md, which is exactly what large used to record, and nothing mechanical ever read the label.

A subtask is now a vertical slice, bounded to one fresh context window and one commit, while the leaves inside it stay layer-shaped — one project skill each. The two levels answer different questions: what an agent can execute without judgement (a leaf) versus what a human can judge (a subtask). Recorded as ADR 0002, since it deviates from the tracer-bullet norm and looks wrong without its context.

That regrouping is what let the rest fall out:

  • Review and commit move from the leaf to the subtask. Reviewing every leaf spent a subagent per axis on each step, and much of what it caught was churn the next leaf rewrote. A subtask's whole uncommitted diff is now one review and one commit.
  • Acceptance criteria replace the [verify] tag. Each subtask spec carries a checklist; a (human) criterion is what pauses an unattended chain. The list is the gate, so no separate tag can drift from it — and the review's spec axis finally has a concrete target.
  • Blocked by: edges replace implicit ordering. Numbers become identity rather than sequence, which is what lets a deferred subtask expand into appended siblings with no renumbering.
  • Nesting and the sub-branch / sub-PR scheme are gone. They existed because a "big subtask" spanned several commits; with one commit per subtask that category no longer exists.

Skill-level changes:

  • to-spec becomes a pure writer. Slack harvesting is dropped — reading replies is something the developer does in-session — and outreach moves to grill-the-task, where the questions are born and where a spec-less task needs it too.
  • grill-the-task loses its size-classification step and gains a quiz loop over the breakdown (granularity, context-window fit, edges, prefactor-first), then forks: implement in-session, or hand off to to-spec.
  • review-changes gates its spec axis on a spec existing — with none it runs two axes and says so, rather than inventing a standard to judge against.
  • create-pr now always carries the why, sourced from the conversation, the issue, or the diff.

Environment variables

None.

Minimum API version

None.

Breaking or incompatible changes

None for any deployment. Within the workflow, specs written under the old shape (Size header row, [verify] tags, leaf-level breakdowns) are left untouched — a finished spec is a frozen record of what was decided then, and only new tasks follow the new structure.

Additional information

pnpm lint:doc-links and pnpm lint:cspell both pass. The new subtask-template.md needs no symlink: .claude/skills is a directory symlink, so it is picked up automatically.

Tasks that fit in a single subtask no longer get a spec: they are grilled,
implemented, and opened as a PR in one session, with the reasoning in the PR
description. The size vocabulary goes with them — a deferred subtask is marked
by having only a brief.md, which is what "large" used to record.

A subtask is now a vertical slice, bounded to one fresh context window and one
commit; its leaves stay layer-shaped, one project skill each (ADR 0002). Review
and commit move from the leaf to the subtask, so an unattended chain no longer
spends a subagent per axis on every step. Acceptance criteria replace the
[verify] tag — a (human) criterion is what pauses the chain — and Blocked by
edges replace implicit ordering, which keeps subtask numbers as identity and
lets a deferred subtask expand into appended siblings. Nesting and the
sub-branch/sub-PR scheme are gone.

to-spec is now a pure writer: Slack harvesting is dropped and outreach moves to
grill-the-task, where the questions are born and where a spec-less task needs it
too. The spec axis of review-changes is gated on a spec existing, and create-pr
carries the why for the PRs that have no spec behind them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

@tom2drum tom2drum left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 618a794f994db5df6b9a7579e45724de2cc9400b9a9183a680d23a57c0342428f7c1d03f3d99215b
Round 1 of 3
Findings 2 blocker · 4 major · 2 nit
By axis Spec skipped (no product-task spec) · Standards 3 · Correctness 4
Outcome blocked

Instruction-surface PR only — Spec axis not dispatched.

Comment thread .agents/skills/grill-the-task/SKILL.md Outdated
Comment thread .agents/skills/implement-task/SKILL.md
Comment thread .agents/skills/grill-the-task/SKILL.md Outdated
Comment thread .agents/skills/implement-task/SKILL.md
Comment thread .agents/adr/0002-layer-shaped-subtask-leaves.md Outdated
Comment thread .agents/skills/to-spec/subtask-template.md Outdated
Comment thread .agents/AGENTS.md Outdated
Comment thread .agents/adr/0002-layer-shaped-subtask-leaves.md Outdated
The main index checkbox is what `Blocked by:` edges and PR finalization read, so
it now moves at commit time rather than in the spec-update step — checking it
early let an unverified, uncommitted subtask release its dependents.

Three gaps in the handoff paths: `grill-the-task` had no subtask-mode branch, so
scoping a deferred subtask matched the single-subtask path and would implement
instead of writing the sub-spec; its input front-loading was gated on subtask
count rather than on whether a later session executes the work, which skipped
every subtask-mode run; and `implement-task` had no route from a `[human]` leaf
that ends its subtask into verification and commit, which the default UI split
makes the common case.

Also drops `ready` from the subtask template — nothing set it, and stored
readiness is what the derived model replaced — and trims restatements of the
subtask model from the ADR, the subtask template, and AGENTS.md, leaving the
definition with `.agents/tasks/README.md` alone.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

@tom2drum tom2drum left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 618a794f994db5df6b9a7579e45724de2cc9400b7f470d41f830aca47bb41818e9e2aca15ef18862
Round 2 of 3
Findings 0 blocker · 0 major · 0 nit
By axis Spec skipped · Standards n/a (arbitration) · Correctness n/a (arbitration)
Outcome clear

Arbitration of Round 1: all 8 claimed fixes verified in 7f470d41f (subtask-mode handoff, index-at-commit, front-load gate, human-leaf → Step 5, ADR/template restatement, subtask ready dropped, AGENTS.md pointer-only, ADR Consequences trimmed). No regressions from the fix commit.

— Reviewed by Cursor Grok 4.5

@tom2drum
tom2drum merged commit 194522b into main Aug 11, 2026
3 checks passed
@tom2drum
tom2drum deleted the claude/task-workflow-refinements-d5ec9b branch August 11, 2026 19:12
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