关于 construct
construct 是一项技能及免依赖的 Node 脚本,可将产品构想整理为经过研究的 Software Requirements Document 文档套件。它引导访谈、证据收集、SRD 编写与验证,让需求关联引用研究而非猜测。
主要功能
- 01通过访谈形成产品简报
- 02研究市场、OSS 与技术资料
- 03生成关联证据的 SRD
- 04检查结构与证据覆盖度
- 05显示进度及下一条命令
适用场景
- 01为从零开始的产品规格提供依据
- 02查找需求中的证据缺口
- 03构建前验证已编写的 SRD
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ maxgfr/ construct --skill construct安装后在 Claude Code 中输入/construct确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlreferences/acceptance-criteria.mdadversarial-review.mdbrainstorm-playbook.mdbrief-example.mdbuild-playbook.mdcitation-format.mddesign-system-authoring.mdengine-evidence.mdforbidden-patterns.mdgrounding-coverage.mdinterview-playbook.mdorchestration.mdpresenting.mdprovider-apis.mdrequirements-rubric.mdresearch-playbook.mdsemantic-setup.mdsrd-authoring.mdverify.mdweb-discovery.md详细介绍
construct — 将产品构想落地为可构建的 SRD
关于引擎证据和覆盖范围限制,请阅读 engine-evidence。
construct 会将产品构想转化为一套软件需求文档(SRD),其中的需求和决策都以真实研究为依据,而非来自模型的记忆。确定性引擎(scripts/construct.mjs,零依赖 Node)会通过代码完成搜索、资料汇编、SRD 渲染和验证;你的工作是进行访谈、推动研究,并将渲染后的框架充实为精确且依据充分的 SRD。
核心原则: 优先采用有依据的需求,而不是猜测的需求。使用引擎检索到的研究(竞品、开源软件先例、技术文档、StackOverflow)为范围、NFR 和架构决策提供依据,并使用
[E#]引用证据。默认情况下,依据检查是建议性的:construct check会报告引用覆盖率。传入--min-grounding <0-100>可在覆盖率低于所需阈值时使检查失败。覆盖率统计的是引用数量;请使用review和check --semantic验证引用的证据是否确实支持相关主张。
一句话说明整个流程
[brainstorm] → interview → research → analyze → drill → render → enrich → red-team → check → present → [build]
construct status --out <run> 会打印现有内容以及确切的下一条命令。
每次恢复运行或忘记进度时,都请使用它。
哪些情况下不要运行 construct
在第 1 个问题之前确认是否适用;选错会浪费整个流程。
- 已有代码库。 construct 用于规划从零开始的产品。若要记录或改进已有仓库,请改用
reconstruct。 - 一次提出多个产品。 一次运行对应一个产品。说明如何拆分,建议优先编写哪个产品的规格,并将其余产品暂时搁置。
- 没有清晰可表达的构想。
init需要一句话描述。如果用户无法用一句话说明问题,请运行construct brainstorm,不断发散探索,直到构想成形——不要围绕“一个 AI 的东西”启动流程。 - 用户只想要图表、名称或估算。 直接回答;SRD 套件不是他们要求的交付物。
根据情况选择流程
| 用户…… | 从这里开始 | 阅读 |
|---|---|---|
| 有初步构想,想进一步探索 | 第 0 步,brainstorm | references/brainstorm-playbook.md |
| 构想明确 | 第 1 步,访谈 | references/interview-playbook.md |
已有 brief.json | 第 2 步,research | references/research-playbook.md |
| 已有渲染好的 SRD,想进一步完善 | 第 4 步,补充,然后第 5 步 | references/srd-authoring.md |
| 已有通过验证的 SRD,想构建应用 | 第 8 步,将 verify 用作裁判 | references/build-playbook.md |
| 提到的功能超过 6 项或采用模块化布局 | 第 1 步 + 模块拆分 | references/srd-authoring.md |
| 希望强制要求依据,而非仅提供建议 | check --min-grounding N,然后 review | references/grounding-coverage.md |
| 只想要一次性规格,而非用于构建 | render --level light | references/srd-authoring.md |
首次运行按 1 → 2 → 3 → 4 → 5 → 6 → 7 的顺序进行。恢复运行时,通常先执行
status,再从它指出的位置继续。
八条命令走完理想流程
node scripts/construct.mjs init --idea "<one-liner>" --out ./my-idea # then interview → brief.json
node scripts/construct.mjs research --out ./my-idea --angles market,oss,tech
node scripts/construct.mjs analyze --out ./my-idea # what is thin + the drill for each gap
node scripts/construct.mjs research --out ./my-idea --angles market,oss,tech --url <proven,urls>
node scripts/construct.mjs render --out ./my-idea --level complex
# … enrich SRD.json, then:
node scripts/construct.mjs render --out ./my-idea --from-srd
node scripts/construct.mjs check --out ./my-idea
node scripts/construct.mjs review --out ./my-idea # adjudicate → check --semantic
脚本
一个已提交、无依赖的工具包:node scripts/construct.mjs <command>。
无需 npm install,也无需 API 密钥。完整命令列表请查看 --help;这里是流程概览。
| 命令 | 功能 |
|---|---|
init --idea "<s>" --out <run> | 创建运行文件夹和 brief.json |
brainstorm --out <run> [--merge] | 可选的发散式讨论板;--merge 会将保留的想法并入简报,将暂存的想法并入 openQuestions(会阻塞关卡 🧠) |
research --out <run> [--angles …] [--url …] [--docs-url …] | 将证据收集到 <run>/evidence/。这是唯一会为内容提供依据的命令。 |
analyze --out <run> | 找出薄弱之处——列出所有会渲染为 UNGROUNDED 的声明,以及修复它们的深入调查。永远不会阻塞关卡。 |
web | oss | tech | so --out <run> | 深入调查一个角度。输出到 stdout;不会持久化任何内容,包括 --url/--docs-url。 |
render --out <run> [--level light|complex] | 渲染 SRD 树和 SRD.json。--level 默认为 light——只要有可能进行构建,就传入 complex。 |
render --out <run> --from-srd | 根据**已编辑的 SRD.json**重新生成树。这是持久化补充内容的方式。 |
check --out <run> | 严格的结构关卡检查 + 建议性的依据报告 |
review --out <run> [--apply <f>] | 生成声明↔证据工作清单,然后生成 check --semantic 依据其进行关卡检查的判定记录 |
verify --out <run> [--app <dir>] [--acceptance] [--run-tests] [--strict] | 默认执行静态一致性检查;--acceptance --run-tests 会执行当前与验收标准绑定的命令(--app 默认为 conventions.appDir) |
status --out <run> [--json] | 显示已有内容和下一条命令;--json 会额外显示构建前沿 |
orchestrate --out <run> [--phase …] [--eco] | 输出此运行的扇出任务(见下文) |
semantic up|down|status | 可选的本地 Docker 栈 |
firecrawl up|down|status | 可选的本地 Firecrawl 栈——无需密钥即可提取正文。运行期间,每个页面都会通过它清理,而非使用内置 HTML 剥离器;未运行时则不会有任何变化。 |
cache status|clean [--all] | 页面缓存,可让 research 几乎无需成本地重新运行 |
以下三种行为值得提前了解,以免遇到时措手不及:
--prd会持续生效。 后续省略该选项的render会拒绝运行,而不是删除requirements/prd/——请重新传入--prd,或传入--no-prd主动删除。check --semantic采用失败即关闭策略。 缺失、无法读取或尚未完成裁定的VERIFY.json都会导致 FAIL;与其他渲染结果进行裁定的文件也会导致 FAIL。--allow-unverified会将其降级为警告——使用时请说明。check在complex级别遇到渲染器脚手架内容会直接失败。 此级别用于认证构建就绪状态;未编写的验收标准不具备任何认证作用。 (references/requirements-rubric.md。)
约定。 --out <run>(别名 --run);--q <focus>(别名
--question)。--refresh 会忽略页面缓存并重新克隆 OSS 仓库;
--offline 仅使用缓存,并如实报告缓存未命中。
--web-engine auto|searxng|ddg|claude|firecrawl 用于指定发现引擎(firecrawl 只能显式指定——auto 不会探测它);--firecrawl <url|off> 用于将提取层指向其他位置,或强制使用内置提取器。--concurrency <n>
(默认为 4)限制每个角度的并发抓取数;--max-tech <n>(默认为 3)限制 tech 为其提供依据的候选技术数量;--per-source <n>(默认为 6)限制每个来源保留的证据数量;--source <kind> 用于重新分类 web --url
页面。大多数命令都支持 --json——根据结果进行分支判断时优先使用它。
退出代码。 0 正常 · 1 关卡失败、用法错误或运行时错误 · 2
编排前置条件失败,包括工作清单尚不存在的阶段(消息会指出生成该清单的命令)。analyze 永远不会阻塞关卡。
语义裁定绑定到完整声明及引用的证据内容,包括展示摘录之外的文本。裁定时请保留生成的 VERIFY.todo.json:只有引擎确认其仍与当前 SRD 和证据匹配后,最简裁定行才会继承其中的指纹。请在自包含裁定中保留指纹。旧版或缺失的工作清单无法绑定旧的未绑定行;check --semantic 会拒绝这些行。内容发生变化时,请重新运行 review 并重新裁定。--allow-unverified 会明确将绑定失败降级为警告。
工作流
系统会调用你一次,并期望你返回完整且有依据的 SRD。请推动整个流程完成;只有在需要用户做出实际决策时才暂停提问。
-
头脑风暴——可选、发散,且在访谈之前进行。 当用户还无法清晰表达想法,或希望先探索选项时,运行
construct brainstorm --out <run>(在init之后),与用户围绕六个角度生成候选想法,然后通过--merge将保留的想法合并到brief.json。如果用户已经清楚自己的需求,则跳过此步骤。请遵循references/brainstorm-playbook.md。 -
访谈用户——每次只问一个问题。 先明确产品,再开展调研。遵循
references/interview-playbook.md(以及references/brief-example.md,其中包含填写好的 brief 和形成其中最难填写字段的交流记录):问题、目标用户、核心价值、必须具备/应该具备/可以具备的功能、限制条件(预算、时间线、团队、合规)、候选技术,以及任何竞品/开源项目线索。每个问题都提供一个建议答案;不要一次性抛出整份问卷。将答案写入brief.json(先运行construct init创建该文件)。 模块拆分: 当产品天然适合模块化(功能大约超过 6 个,或用户提出src/modules/…这类模块化架构)时,提出模块拆分方案并记录下来——在brief.modules中记录模块(id/name/description/dependsOn),并为每项功能指定一个module。随后,Render 会为每个模块生成一份 PRD,而check会强制执行分区要求(必须全部分配:每项功能都必须归属某个模块)。模块 id 会成为文件夹名——请使用类似 slug 的格式,并确保不同模块中的功能标题不重复(BUILD-PLAN 进度按标题索引)。 -
调研——为想法提供依据。 运行:
node scripts/construct.mjs research --out <run> --angles market,oss,tech此步骤会在网上发现竞品、挖掘可比的开源项目(以及其中真实反映问题的 issues/PR),并获取候选技术文档和 StackOverflow 内容。请阅读
<run>/evidence/EVIDENCE.md。 -
深入研究——直到
analyze没有问题,或用户让你停下。 运行:node scripts/construct.mjs analyze --out <run>它会准确指出哪些方面薄弱——功能、竞争对手、候选技术,以及缺乏可匹配证据的开源种子项目——并打印出弥补每个缺口的深入调查命令。并行展开:如果可以启动并行子 Agent,就为每个缺口分派一个(引擎会生成可直接启动的命令:
node scripts/construct.mjs orchestrate --out <run> --phase research); 每个子 Agent 都会收到简短项目简介、缺口说明、对应的深入调查命令和独立的 WebSearch,并返回不超过 5 行的摘要及值得用作依据的 URL。子 Agent 不得写入运行文件夹——深入调查命令只会向 stdout 输出内容;只有construct research会写入研究档案,而且只能由你运行。通过一次研究重新运行纳入调查结果,并固定已证实的 URL:construct research --out <run> --angles market,oss,tech --url <u,...> [--docs-url <d,...>]→ 重新运行analyze。每次研究运行都会仅根据所提供的角度和 URL 重建研究档案——务必传入所有角度,否则之前运行中的证据会丢失。固定的 URL 不会被预算删掉,任何预算削减都会在研究档案的备注中说明。重新运行时,[E#]ID 保持不变,因此已写入 SRD 的引用仍会指向同一来源。(如果没有子 Agent,就自己逐个深入调查缺口。)告诉用户你的发现,并让他们决定方向——优先处理必需功能和关键决策,在用户表示足够时停止。参见references/orchestration.md和references/research-playbook.md。 -
生成 SRD。 简介内容充实、研究档案丰富后:
node scripts/construct.mjs render --out <run> --level complex只要存在任何构建可能,就选择
complex;之后再切换级别会重新编号 FR ID(参见references/srd-authoring.md)。 这会生成 SRD 文件树(见下文)。数据模型和接口会根据项目简介通过推断预先填充——务必核实,切勿盲目信任。 然后完善内容:处理每一项🧠 Decide:提示,细化模板生成的验收标准和 NFR 指标,将其改为可测试且有明确边界的陈述(遵循references/acceptance-criteria.md——在complex级别,残留的渲染器模板化标准属于严重错误,而非警告:该级别用于认证项目已做好构建准备);修正或扩展数据模型和接口,并从研究档案中为其依据的需求和决策添加[E#]引用。通过编辑SRD.json并使用render --out <run> --from-srd重新生成,持久化完善后的内容——这样可以使 Markdown 与受控清单保持同步;只手动编辑已渲染的.md文件,会在下次生成时被覆盖。参见references/srd-authoring.md和references/citation-format.md。 在complex级别,还要完善设计系统(design/):将预填的设计令牌替换为产品真实的品牌值,核实组件和屏幕/流程清单,并按照目标标准细化无障碍标准(根据项目简介确定,默认为 WCAG 2.2 AA)。参见references/design-system-authoring.md。 -
对抗性审查——让新视角来找茬。 启动一名审查子 Agent,除了运行文件夹路径和
references/adversarial-review.md外,不提供任何上下文(如果不能启动子 Agent,就自己 执行审查,并严格遵循该清单,以敌对读者的视角进行)。它必须尝试找出 SRD 的问题—— 歧义、无法测试的标准、缺失的失败路径、引用洗白、矛盾——并返回带标签的发现。修复所有[blocker],酌情处理[advisory],然后重新运行check。持续循环,直到没有新问题—— 当某一轮没有发现新的阻塞项时就停止(只需一轮无新问题的审查;不要默认进行三轮)。 兜底方案:如果 3 轮后仍发现阻塞项,就停止并把剩余问题交给用户——3 轮后仍无法清除 阻塞项的 SRD 存在值得人工处理的结构性问题。 对于complex级别、确实存在争议且难以撤销的 ADR,还要运行references/orchestration.md中的 3 名评审者小组(发出该流程:orchestrate --out <run> --phase adr-judges --adr <id>)。 -
验证(三个层面)。
- 结构验证(硬性):
node scripts/construct.mjs check --out <run>。遇到任何尚未解决的🧠、完全没有功能需求、某个 FR 没有验收标准、实体/接口/NFR 引用悬空、缺少必需的 NFR 类别,或 ADR 格式错误时,都会失败。持续修复,直到通过。 - 依据验证(建议): 同一命令会输出覆盖率——有多少比例的需求/决策引用了证据。在关键
之处(即承重决策)提高覆盖率;参见
references/grounding-coverage.md。默认情况下, 它永远不会导致构建失败,因此请自行判断。用户要求强制执行依据验证时,添加可选门槛:check --out <run> --min-grounding 70。 - 主张支持验证(可选门槛,启用后失败即关闭): 覆盖率只统计引用数量,不检查引用内容
是否成立。
construct review --out <run>会生成主张↔证据工作清单;逐对裁定(按照references/orchestration.md中的模式 4 分派——通过orchestrate --out <run> --phase claim-review发出),整理出verdicts.json, 执行review --apply verdicts.json,然后运行check --out <run> --semantic。 只有在运行review --apply后才运行--semantic: 它会断言支持门槛确实已启用, 因此缺失/不完整的VERIFY.json——或针对较早版本的渲染结果作出的裁定——会导致检查 失败,而不是悄然通过。在提交前,值得对承重 FR/ADR 做一轮检查。 循环执行步骤 3–6,直到check通过结构验证、审查者未发现新的阻塞项,且依据覆盖率真实可信。
- 结构验证(硬性):
-
呈现结果。 先讲决策,而不是产出物:研究带来了哪些改变、承重 ADR 及其代价和对应的
[E#]、范围边界,以及仍有哪些未知事项——明确标出,不要刻意淡化。诚实报告各项门槛:check通过表示结构完整,不代表内容良好;覆盖率统计的是引用数量,并不验证引用内容 是否成立。然后询问用户接下来想做什么;未经提示不要开始构建。遵循references/presenting.md。 -
构建应用(当用户需要的是应用,而不仅是 SRD 时)。 渲染过程还会生成
BUILD-PLAN.json,这是机器可读的任务 DAG(T-000 骨架任务 + 每个 FR 对应一个任务,按 must → should → could 排序,并包含实体感知型依赖项),其中的acceptance条目指向SRD.json。**所有应用代码都由你编写;引擎负责评审。**遵循references/build-playbook.md:- 执行
T-000(脚手架、测试框架、CI);在BUILD-PLAN.json中设置conventions.appDir和conventions.testCommand。 - 按拓扑顺序逐个处理任务:从
SRD.json读取验收标准;用 TDD 实现——每项测试都要注明其 FR id(例如describe("FR-001 …");verify会搜索这个标记);记录artifacts和tests;将status设为"done";运行node scripts/construct.mjs verify --out <run>,并在开始下一个任务前修复所有错误。 - 同一里程碑内的任务之间没有依赖边,因此可以并行构建其就绪任务集合(
status --out <run> --json)——每个任务使用一个独立的 git 工作树;由你独自将结果合并到BUILD-PLAN.json中(references/orchestration.md中的模式 5;并行分派:orchestrate --out <run> --phase build)。 - 每个里程碑完成后:运行
verify --out <run> --run-tests --strict,然后进行一次里程碑对抗性审查——以全新视角查找是否有验收标准未被任何测试实际覆盖(参见 playbook;references/verify.md说明了 verify 能证明和不能证明的内容)。 - 如果构建过程中发现某个 FR 不正确,修改需求简报、重新渲染(进度会按功能标题合并)、重新标记调整过的 FR id,然后重新运行
check。 - 在声称应用已实现之前,遵循
references/verify.md中的标准绑定协议,并运行verify --out <run> --strict --acceptance --run-tests --json。当前每项标准都必须为passed;failed或not-tested都会阻止你作出此声明。检查专门的断言:退出码为 0 只能证明命令成功,不能证明被跳过、为空或被弱化的测试满足业务要求。
- 执行
出现问题时
| 症状 | 处理方法 |
|---|---|
check 因 🧠 提示框失败 | 作出决定。将其纳入 ADR、需求或范围,或从 brief.openQuestions 中移除,然后重新渲染。这是一个门槛,因为延迟决定就是规格中的缺陷。 |
check 失败并指出是渲染器搭建的脚手架 | 这些标准/契约从未经过编写。重写它们(references/requirements-rubric.md),如果这只是一次性规格,也可以降至 --level light。 |
render 拒绝执行并提示“requirements/prd exists” | 上次渲染使用了 --prd。再次传入 --prd 以重新生成,或传入 --no-prd 有意删除它。 |
check --semantic 因未知原因以状态码 1 退出 | 它采用失败关闭策略。运行 review,裁定每一对,再运行 review --apply,然后运行 --semantic。如果审查后又重新渲染,审查结果也会失效。 |
orchestrate --phase <p> 以状态码 2 退出 | 该阶段的任务列表尚不存在;提示信息会指出生成它的命令。 |
| 研究没有返回结果 | 明确具体地描述含糊的 candidateTech/competitors,然后重新运行。接着使用你自己的 WebSearch 并固定页面:research --url <u,...>。连续两次尝试都无结果后就停止——记录一项假设或 openQuestion,然后继续。内容精简但诚实的 SRD,胜过捏造的引用。 |
| 测试引用了 SRD 中已不存在的 FR id | 重新渲染时 FR 编号变了。重新标记测试;verify 会列出过时的 id。 |
| 一次运行意外耗时过长 | 执行 construct cache status。冷缓存需要为每个页面完整抓取一次;--offline 仅使用缓存运行。每个角度的成本记录在 evidence/meta.json 和 EVIDENCE.md 末尾。 |
常见错误
- 把检索当成依据。
web/oss/tech/so会打印结果。只有research --url/research --docs-url会保存可供引用的证据。 - 减少检索角度后重新运行
research。 它会完全根据你提供的内容重新构建档案——务必传入所有角度,否则先前的证据会丢失。 - 明明可以构建,却仍用默认的
light模式渲染。 之后再切换会重新编号 FR id,并使测试标签失效。 - 编辑渲染后的
.md文件,然后就此收工。 下次渲染会覆盖这些修改。 编辑SRD.json,然后运行render --from-srd。 - 让子 Agent 写入运行目录。 只能有一个写入者——就是你。子 Agent 只返回文本。
- 尚未通过
check就开始展示。 覆盖率百分比不是门槛;未解决的 🧠 才是。
如何判断已完成
只有满足以下所有条件,SRD 才算完成——请逐项明确检查,不要想当然:
construct check以状态码 0 退出。- 每项
must需求都有一条故障路径验收标准,描述具体行为,而不是“显示错误”。 - 每项关键决策(技术栈、数据存储、构建还是购买、差异化优势)都引用了确实支持相应论点的证据——你至少抽查了三项。
- 数据模型和接口经过了验证,而不是留给渲染器推断。
- 红队评审没有发现新的阻碍。
- 所有仍未知的内容都记录为假设或
openQuestion,而不是悄悄猜测。
**自测:**一个从未与你交流过的开发者,能否仅凭这份 SRD 实现所有必需项,并正确实现各项约定,而不只是把握大意? 如果有任何问题需要通过交流才能回答,SRD 就还没有完成。
编排——按执行环境选择方式
四个阶段基于按单元划分、由文件支撑的状态并行展开:research(每个 analyze 缺口对应一名研究者)、claim-review(每对 VERIFY.todo.json 对应一名质疑者)、adr-judges
(针对一个有争议的 ADR 组成固定的三视角评审小组)和 build(每项就绪任务对应一名在独立 worktree 中工作的构建者)。orchestrate 会根据运行目录的当前状态生成这些任务,并预先填入绝对路径和实际的工作清单单元:
node scripts/construct.mjs orchestrate --out <run> [--phase research|claim-review|adr-judges|build] [--adr <id>] [--eco] [--list]
| 你的执行环境 | 各阶段的运行方式 |
|---|---|
| 有 Workflow 工具 | orchestrate --phase <p>,然后运行 Workflow({ scriptPath: "<run>/orchestration/<p>.workflow.mjs" }) |
| 有子 Agent,但没有 Workflow 工具 | 同样运行 orchestrate;按批次为每个 <run>/orchestration/agents/<role>.md 派发一个子 Agent |
| Eco 模式,或没有子 Agent | orchestrate --eco → 按 <run>/orchestration/RUNBOOK.md 顺序执行 |
两个规则在所有层级都适用。 子 Agent 绝不写入运行目录——它们只返回片段,由你将其整合进来(构建者只在自己的 git worktree 中写代码)。并且,并行展开只是优化手段,绝非必要条件:每个阶段都有产出相同制品的顺序执行方案,因此门槛与执行环境无关。模式、输出约定和预算指南:references/orchestration.md。
生成内容(--out 下的 SRD 目录树)
00-overview/ VISION.md · SCOPE.md (+ 🧠 open decisions)
requirements/ FUNCTIONAL.md (FR-NNN · priority · Given/When/Then · [E#];
an index linking each FR to its module PRD in modules mode)
NON-FUNCTIONAL.md (NFR-NNN by category · metric · [E#])
prd/PRD-FR-NNN-*.md (+ README index — only with --prd)
prd/ README.md · <module>/PRD.md (modules mode only: one PRD per
module — full FR blocks, NFR refs, data/interface slices, deps)
architecture/ SYSTEM-CONTEXT.md · DATA-MODEL.md · INTERFACES.md
decisions/NNNN-*.md (ADRs)
design/ PRINCIPLES.md · DESIGN-TOKENS.md (+ design-tokens.json) · COMPONENTS.md
SCREENS.md · ACCESSIBILITY.md (complex only; --no-design to skip)
competitive/ LANDSCAPE.md (competitors + OSS prior art)
BUILD-PLAN.md · BUILD-PLAN.json (task DAG for the build phase; tasks carry their
module in modules mode)
TRACEABILITY.md (FR ↔ module ↔ NFR ↔ ADR ↔ entity ↔ interface ↔ component ↔ screen)
evidence/ EVIDENCE.md · evidence.json · meta.json · ids.json (the [E#]
ledger — do not hand-edit; it is what keeps citations stable)
VERIFY.md · VERIFY.todo.json · VERIFY.json (the claim-support worklist and its
adjudicated ledger — written by `review` / `review --apply`)
orchestration/ <phase>.workflow.mjs · agents/<role>.md · RUNBOOK.md
(written by `orchestrate`; `out/` is where subagents may return)
brief.json · SRD.json
evidence/、VERIFY.md 和 orchestration/ 是检索或生成的文本——
check 特意不会扫描其中的 🧠/TODO,因此证据片段可以引用任何内容,不会触发门槛。
light 模式保持精简;complex 会增加完整的 NFR 集、第二个 ADR、故障路径验收标准、完整的可追溯性矩阵,以及设计系统子目录(design/:设计原则、令牌、组件、界面/流程、无障碍约定——可通过 --no-design 选择不包含)。添加 --merge 可生成单文件 SRD.md(即使在 modules 模式下也始终包含完整的 FR 区块)。
可选本地栈(完全本地运行,无需 API 密钥)
construct semantic up 会启动本地 Docker 栈(Qdrant + Ollama + SearXNG);然后运行
research --angles market,oss,tech,semantic --semantic,即可按嵌入相关性对收集到的证据重新排序。任何数据都不会离开本机;如果栈未运行,--semantic 会记录提示并继续使用词法排序。
construct firecrawl up 会启动第二个、占用资源更多的栈(约 3 GB,使用独立的
extract 配置文件——不会由 semantic up 启动)。运行期间,研究流水线抓取的每个页面都会使用 Firecrawl 的正文 Markdown 进行清理,而不是使用内置的 HTML 提取器,因此即使页面由 JS 渲染,也能提取到证据。同样无需密钥。所有失败路径都会回退到内置提取器,并在档案备注中注明这一点,因此即使栈已停止,最坏的情况也只是恢复到之前的行为。
请参阅 references/semantic-setup.md。
参考资料
references/brainstorm-playbook.md— 可选的发散步骤:从六个角度生成候选创意,并将保留的创意整合到简报中。references/interview-playbook.md— 如何一次提出一个问题来引导完成简报。references/brief-example.md— 填写完整的brief.json、产生其中最难填写字段的对话,以及它奏效的原因。references/research-playbook.md— 选择角度并深入研究,直到达到“足够好”的程度。references/orchestration.md— 三层动态工作流模型及子 Agent 模式:研究扇出、红队、评审小组、论据支持审查扇出、构建扇出(以及单一写入者规则)。construct orchestrate会生成可直接启动的扇出模式。references/adversarial-review.md— 红队检查清单及其发现项规范。references/srd-authoring.md— 处理 🧠 提示框、编写可测试需求和 ADR。references/design-system-authoring.md— 扩展complex设计系统:令牌、组件、屏幕/流程和无障碍规范。references/requirements-rubric.md— ISO/IEC/IEEE 29148:2018 的特性,check会据此评估需求;还介绍两种严重级别,以及绿色门禁的含义与局限。references/acceptance-criteria.md— 不佳→良好的 Given/When/Then 改写示例,以及可量化的 NFR 指标模式。references/forbidden-patterns.md— 审查中绝不会通过的措辞,以及对应的替代写法。references/citation-format.md—[E#]溯源规范。references/grounding-coverage.md— 说明建议性覆盖率报告的含义及如何提高覆盖率。references/build-playbook.md— 构建循环:任务 TDD、FR 标签规范、里程碑门禁和里程碑审查。references/verify.md— 说明每项verify检查能证明什么,以及哪些内容仍需人工检查。references/presenting.md— 第 7 步:交付 SRD 时该说什么,以及如何如实报告门禁结果。references/provider-apis.md— 如何按主机抓取 OSS issue/PR,无需密钥。references/web-discovery.md— 分层、免密钥的网页搜索。references/semantic-setup.md— 可选的本地 Docker 栈。