Skip to content

[P0.32] cf tasks generate emits PRD bullets verbatim as tasks — persona traits and raw markdown, no dependencies #1115

Description

@frankbria

Found by the #614 cold-start walkthrough on a clean container, following only the README. Priority P0.32 — severity critical, category correctness. Blocks the beta conversion path.

Problem

cf tasks generate does not decompose the PRD into tasks. It emits PRD bullet points verbatim as "tasks" — including user-persona traits, user goals, and requirement fragments with the markdown still in them. Not one of the 20 generated items is an actionable task.

This is the THINK → BUILD handoff. Everything downstream (cf work start, cf work batch run, PROOF9) then operates on non-tasks.

Reproduction

Clean python:3.11-slim container, source install of main, valid ANTHROPIC_API_KEY. PRD generated by cf prd generate itself (a coherent "Self-Hosted Todo Management REST API" PRD), then:

$ cf tasks generate
Generating tasks from PRD: Self-Hosted Todo Management REST API
Using LLM for task generation...

$ cf tasks list
┃ ID       ┃ Status  ┃ Pri ┃ Deps ┃ Title                                      ┃
│ 7ed42345 │ BACKLOG │  0  │  -   │ Todos scattered across different notes and │
│          │         │     │      │ systems make...                            │
│ 1269b291 │ BACKLOG │  1  │  -   │ Existing SaaS tools add unwanted           │
│          │         │     │      │ subscriptions and exte...                  │
│ e0cac14a │ BACKLOG │  2  │  -   │ No simple, self-hostable solution that     │
│          │         │     │      │ developers can d...                        │
│ 735ba25c │ BACKLOG │  3  │  -   │ Lack of focus when completed items clutter │
│ 78865699 │ BACKLOG │  4  │  -   │ Comfortable with REST APIs and             │
│          │         │     │      │ command-line tools                         │
│ 70666e98 │ BACKLOG │  5  │  -   │ Prefers self-hosted solutions over SaaS    │
│          │         │     │      │ subscriptions                              │
│ f018d8d8 │ BACKLOG │  6  │  -   │ Works on multiple projects simultaneously  │
│ 03219cef │ BACKLOG │  7  │  -   │ Values simplicity and performance over     │
│          │         │     │      │ feature bloat                              │
│ 98caaa2f │ BACKLOG │ 12  │  -   │ Has access to a laptop or small VPS for    │
│          │         │     │      │ hosting                                    │
│ e1294a29 │ BACKLOG │ 15  │  -   │ **Requirement:** Fast, lightweight         │
│          │         │     │      │ endpoint to create n...                    │
│ 906c283d │ BACKLOG │ 16  │  -   │ **Fields:** Description (required),        │
│          │         │     │      │ priority (optional)...                     │
│ 5a60af26 │ BACKLOG │ 17  │  -   │ **Performance:** Sub-50ms response time    │
│          │         │     │      │ for single todo...                         │

Total: 20 | BACKLOG: 20

What is wrong with each class of output

  • Items 0–3 are the PRD's problem statement bullets. "Todos scattered across different notes and systems make…" is a problem, not a task.
  • Items 4–7 and 12–14 are user-persona traits. "Comfortable with REST APIs and command-line tools" and "Has access to a laptop or small VPS for hosting" describe the user. There is nothing to implement.
  • Items 8–11 are user goals ("Centralize task management in a single, reliable system").
  • Items 15–19 are requirement fragments with markdown markers intact**Requirement:**, **Fields:**, **Performance:**, **Validation:**. Literal ** in a task title is proof the text was sliced out of the PRD rather than composed.

Not a single item names a file, an endpoint, or a unit of work. There is no "Implement POST /todos", no "Define the Todo SQLAlchemy model", no "Add pytest fixtures".

Secondary defects visible in the same output

  • No dependencies are inferred. The Deps column is - for all 20. The README advertises "Decompose PRD into atomic tasks with dependencies" and "dependency graphs"; GOLDEN_PATH §3 requires "Automatically detects and assigns task dependencies". --strategy auto has nothing to work with.
  • The command claims LLM decomposition (Using LLM for task generation...) while producing output that looks like a markdown bullet split. Either the LLM path silently fell back to a splitter, or the prompt is asking for the wrong thing. Worth confirming which before fixing.

Downstream impact

cf work start <id> --execute was then run on task 7ed42345 — "Todos scattered across different notes and systems make…". The agent proceeded to act on it, emitting status=SKIPPED for every file it considered (todo_api/database.py, todo_api/models.py, todo_api/crud.py, tests/conftest.py). An unimplementable task consumed a full agent run.

Acceptance criteria

  • cf tasks generate on the PRD in this report produces tasks that name concrete units of work (endpoint, model, module, test), not PRD prose
  • No task title contains raw markdown markers (**, leading -, #)
  • Persona traits, user goals and problem statements from the PRD never become tasks
  • Dependencies are populated for a PRD with obvious ordering (models before CRUD before endpoints before tests)
  • A test asserts task-shape on a fixture PRD — at minimum: no ** in titles, and every task title starts with a verb
  • Confirm whether the LLM path is actually being taken; if it silently falls back to a text splitter, that fallback must be loud

Evidence

Metadata

Metadata

Assignees

No one assigned

    Labels

    P0-blocker-betaCritical blocker - must fix before beta testingtype:bugSomething is broken and needs fixing

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions