{ "_doc": "Mock fixture for PM Agent — drives P1 acceptance (todo-demo project). Produces the full PRD multi-page site + pm agent-state + history snapshot.", "chunks": [ "## 第 1 步: 解析 idea\n", "用户要求做一个 TODO 列表 API + Vue 前端。\n", "\n## 第 2 步: 初始化 prd/ 站点\n", "(在真实运行时这里会调 bootstrap_prd_site)\n", "\n## 第 3 步: 写章节\n", "background / personas / scope / feature-tree / user-flows / prototype\n", "\n## 完成\n", "PRD v1 已生成,可交付给 Architect。\n" ], "result": "mock-ok devloop-pm: PRD scaffolded (todo-demo, rev=1)", "files": [ { "path": "prd/index.html", "content": "PRD · todo-demo

项目首页

todo-demo · 一个 TODO 列表 API + 前端

章节路径
背景product/background.html
flow: list -> add -> done
导航卡片
更多

站点入口

" }, { "path": "prd/reading-guide.html", "content": "Reading Guide

阅读顺序

建议按 background → personas → scope → feature-tree → user-flows → prototype 阅读。

├── product\n├── feature\n└── flow
第 1 步product/background
tip
" }, { "path": "prd/product/background.html", "content": "背景

背景

个人 / 小团队需要轻量 TODO 工具,不愿引入 Notion / Jira。

痛点解法
无快速记录极简 API
需求 → API → 前端
scope: MVP
" }, { "path": "prd/product/personas.html", "content": "用户

用户画像

独立开发者 / 学生 / 产品经理 — 单人或 ≤3 人小团队。

画像场景
开发者记 bug / 任务
persona-a / persona-b
primary: dev
" }, { "path": "prd/product/scope.html", "content": "范围

本期范围

POST /todos 新增 · GET /todos 列表 · Vue 简单列表前端。不做用户系统、不做拖拽排序。

InOut
CRUD登录
scope: api + fe
MVP
" }, { "path": "prd/feature/feature-tree.html", "content": "功能树

功能树

todo-be(POST/GET /todos) · todo-fe(Vue 列表) · 可选 todo-db(SQLite schema)。

模块说明
todo-beAPI 服务
todo-fe前端
├── todo-be\n├── todo-fe\n└── todo-db
3 unit
" }, { "path": "prd/flow/user-flows.html", "content": "用户流

核心流程

打开页面 → 看到列表 → 输入 → 提交 → 刷新看到新条目。

步骤动作
1GET /todos
2POST /todos
user -> fe -> be -> db
主流程
" }, { "path": "prd/prototype/proto-list.html", "content": "原型 · 列表

原型 · TODO 列表

顶部 input + 按钮,下方列表展示。

组件事件
inputenter
+----------+\n| input    |\n+----------+\n| item 1   |\n| item 2   |\n+----------+
UI 草图
" }, { "path": "prd/assets/shell.css", "content": "/* shell.css placeholder (P1 mock) */\nbody { font-family: system-ui; max-width: 960px; margin: 2em auto; }\n.card { padding: 8px; border: 1px solid #ccc; border-radius: 4px; }\n" }, { "path": "prd/assets/shell.js", "content": "/* shell.js placeholder (P1 mock) */\nconsole.log('[devloop-prd] shell loaded');\n" }, { "path": "prd/assets/search-index.json", "content": "{\"version\":\"1\",\"pages\":8,\"entries\":[]}" }, { "path": "history/prd-rev-001.html", "content": "PRD rev 1 snapshot

Snapshot

Archive of PRD rev 1, see prd/index.html for live version.

" }, { "path": "agent-state/pm.json", "content": "{\"agent\":\"devloop-pm\",\"status\":\"idle\",\"current_step\":8,\"total_steps\":8,\"last_call_id\":\"call-mock-pm\",\"updated_at\":\"2026-05-13T10:00:01.000Z\"}" }, { "path": "agent-state/pm-todo.json", "content": "{\"agent\":\"devloop-pm\",\"call_id\":\"call-mock-pm\",\"created_at\":\"2026-05-13T10:00:00.000Z\",\"items\":[{\"id\":\"step-001\",\"description\":\"bootstrap_prd_site\",\"status\":\"done\",\"depends_on\":[]},{\"id\":\"step-002\",\"description\":\"write index.html\",\"status\":\"done\",\"depends_on\":[\"step-001\"]},{\"id\":\"step-003\",\"description\":\"write product/*.html\",\"status\":\"done\",\"depends_on\":[\"step-002\"]},{\"id\":\"step-004\",\"description\":\"write feature/* + flow/* + prototype/*\",\"status\":\"done\",\"depends_on\":[\"step-002\"]},{\"id\":\"step-005\",\"description\":\"update_search_index\",\"status\":\"done\",\"depends_on\":[\"step-004\"]},{\"id\":\"step-006\",\"description\":\"validate_prd_site\",\"status\":\"done\",\"depends_on\":[\"step-005\"]},{\"id\":\"step-007\",\"description\":\"archive_doc → history/\",\"status\":\"done\",\"depends_on\":[\"step-006\"]},{\"id\":\"step-008\",\"description\":\"echo_diff\",\"status\":\"done\",\"depends_on\":[\"step-007\"]}],\"current\":null,\"progress_pct\":100}" } ] }