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: 8 additions & 4 deletions commands/tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -122,17 +122,21 @@ Skip this step if `SKIP_TESTS = true`.
## Step 4: Write the Task List

1. Write the complete slice/task list to `tasks.md` in the chosen spec directory. **Write the file without waiting for approval** — generating a task list is reversible (re-run `/awos:tasks` to revise), so the deliverable must never be gated behind a confirmation that an unattended run cannot answer.
2. If `SKIP_TESTS = true`, record a one-line note at the top of the generated `tasks.md` so that downstream commands (e.g. `/awos:verify`) can detect the choice: `<!-- skip-tests: true -->`.
2. Record a one-line marker at the very top of the generated `tasks.md`: `<!-- not-user-reviewed -->`. The file is written before review (Step 5), so it starts as a draft; Step 5 removes this marker once the user has reviewed it. Keep the marker shape exactly — downstream automations grep for it to tell a draft from a reviewed plan.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The <!-- not-user-reviewed --> marker now shares "the top" with <!-- skip-tests: true --> (Step 4.3) whenever SKIP_TESTS = true. Both minor:

  • Step 5.3 says "remove the <!-- not-user-reviewed --> marker from the top of tasks.md" — naming the exact string is the right call, but worth stating explicitly to leave any <!-- skip-tests: true --> line intact. That one has to survive review, and a less careful pass could read "remove the top comment" as the whole block.
  • On write, the relative order of the two is unspecified. Harmless for grep (it's position-independent), but pinning "not-user-reviewed first, skip-tests second" reads cleaner.

Optional hardening, not a blocker.

3. If `SKIP_TESTS = true`, record a one-line note at the top of the generated `tasks.md` so that downstream commands (e.g. `/awos:verify`) can detect the choice: `<!-- skip-tests: true -->`.

## Step 5: Surface for Review and Recommend Next Step

1. Report the saved path and present the slice/task plan for review. If the user requests changes (adjust, split, merge slices or tasks, or reassign subagents), apply them and re-save; otherwise they can revise later by re-running `/awos:tasks`.
2. If any tasks were assigned to `general-purpose` (because no specialist exists) or verification cannot be performed (missing MCPs/services), surface a table:
1. Report the saved path and present the slice/task plan for review.
2. Ask for review feedback strictly via the `AskUserQuestion` tool (e.g. options "Looks good — keep it as saved" / "I want changes") — never in plain text, which would end a non-interactive turn before the review outcome can be reported.
3. **When the user responds** (either "looks good" or after you apply their requested changes and re-save): remove the `<!-- not-user-reviewed -->` marker from the top of `tasks.md`, since the plan has now been reviewed. If they requested changes, apply them — adjust, split, merge slices or tasks, or reassign subagents — and re-save before removing the marker.
4. **If the review question goes unanswered** (dismissed, or the run is non-interactive): leave the file exactly as saved, marker included. Its presence is the signal that the plan was written but not reviewed; do not remove it.
5. If any tasks were assigned to `general-purpose` (because no specialist exists) or verification cannot be performed (missing MCPs/services), surface a table:

| Task/Slice | Issue | Recommendation |
| --------------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------- |
| Slice 2: Task 3 | Assigned to `general-purpose` — no TypeScript specialist | Install `typescript-pro` agent for proper delegation |
| Slice N (QA) | Feature Testing & Regression slice uses `general-purpose` — no QA-coded agent hired | Run `/awos:hire` to install `testing-expert` |
| Slice 3: Verification | Browser MCP not available | Install browser MCP to enable UI verification |

3. Report the next command: `/awos:implement`.
6. Report the next command: `/awos:implement`.
18 changes: 18 additions & 0 deletions tests/lint-prompts.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,24 @@ test('commands/tasks.md documents the skip-tests opt-out and persists it', () =>
);
});

test('commands/tasks.md marks an unreviewed tasks.md and clears it on review', () => {
// tasks.md is written before review (Step 4), so it starts as a
// draft carrying a "<!-- not-user-reviewed -->" marker that Step 5
// removes once the user reviews it. The marker shape is the contract
// — awos-qa greps the saved file to tell a draft from a reviewed
// plan, so a reword here would silently break that detection. Lock
// the shape, plus the removal-on-review instruction.
const body = readUtf8(path.join(commandsDir, 'tasks.md'));
assert.ok(
body.includes('<!-- not-user-reviewed -->'),
'commands/tasks.md must record the literal "<!-- not-user-reviewed -->" marker so awos-qa can detect a draft-grade tasks.md'
);
assert.ok(
/remove the `<!-- not-user-reviewed -->` marker/i.test(body),
'commands/tasks.md Step 5 must remove the not-user-reviewed marker once the plan has been reviewed'
);
});

test('commands/verify.md acknowledges the skip-tests marker', () => {
// The Slack thread feedback frames /awos:verify as look-and-feel +
// spec-freshness rather than a test runner. The skip-tests marker
Expand Down
Loading