Loading...
Loading...
Compare original and translation side by side
This skill is pack guidance. The platformskill (read/write/preview/linking/grounding rules) still governs every markdown operation — this layers spec-writing craft on top./open-knowledge
specs/specs/NNN-name/spec.mdplan.mdtasks.mdstatusspec.mddraft → ... → shipped这是 pack 指导。平台skill(read/write/preview/linking/grounding 规则)仍管辖所有 markdown 操作——本 skill 在其基础上叠加 spec 编写技巧。/open-knowledge
specs/specs/NNN-name/spec.mdplan.mdtasks.mdspec.mdstatusdraft → ... → shipped| Mode | Behavior | How entered |
|---|---|---|
| Supervised (default) | STOP at the Step 2 scoping gate for user confirmation of Goals / Non-goals / change shape. Route open decisions interactively. | Default when a user drives the session. |
| Headless | Auto-confirm the scoping proposal after presenting it; auto-select routing decisions. All other gates (parent-proposal check, current-system mapping, Decision Log, validation, grounding) still enforced. | Explicit "don't wait for me", "just proceed", "run headless" — or non-interactive container environments. |
| 模式 | 行为 | 进入方式 |
|---|---|---|
| Supervised(默认) | 在 Step 2 范围界定 gate 处停止,等待用户确认 Goals / Non-goals / change shape。以交互方式处理 open decisions。 | 用户主导会话时默认。 |
| Headless | 展示范围界定方案后自动确认;自动选择路由决策。所有其他 gate(parent-proposal check、current-system mapping、Decision Log、validation、grounding)仍须执行。 | 明确说出 "don't wait for me"、"just proceed"、"run headless",或处于非交互式容器环境。 |
## Designspec.mdspecNNNplan.mdtasks.mddraft## Designspec.mdspecNNNplan.mdtasks.mddraftexec("ls -A proposals/")exec("ls -A decisions/")search({ query: "<feature name or problem statement>" })exec("cat proposals/0004-x.md")parent_proposal:draftfcprejected<path>status: <x>/frame-a-proposalspec.mdexec("ls -A proposals/")exec("ls -A decisions/")decisions/search({ query: "<feature name or problem statement>" })exec("cat proposals/0004-x.md")parent_proposal:draftfcprejected<path>status<x>/frame-a-proposalspec.md## Design## Migration.ts.pyexec("ls -A specs/")exec("cat specs/003-x/spec.md")exec("ls -A guides/")exec("cat guides/<runbook>.md")search({ query: "<subsystem name>" })src/foo/bar.tshandleXwidgets## Design## Design## Migration.ts.pyexec("ls -A specs/")exec("cat specs/003-x/spec.md")exec("ls -A guides/")exec("cat guides/<runbook>.md")search({ query: "<subsystem name>" })src/foo/bar.tshandleXwidgets## Designundefinedundefined
**Supervised mode:** STOP and WAIT for confirmation. Do not create the spec folder until the user confirms or adjusts.
**Headless mode:** present the scope AND proceed; note the auto-confirmation in the Decision Log.
Scoping discipline:
- If the feature is vague, narrow it here, not in the Design. "Which surfaces? For whom? What's explicitly deferred?"
- Name the beneficiary of each goal — a goal with no one who benefits is scope creep.
- Do not invent requirements the proposal never established (see Non-goals for this skill). If a goal isn't traceable to the parent proposal, flag it and ask.
---
**Supervised 模式:**停止并等待确认。在用户确认或调整之前,不要创建 spec 文件夹。
**Headless 模式:**展示范围并继续执行;在 Decision Log 中注明此次自动确认。
范围界定纪律:
- 如果功能描述含糊,应在此处收窄,而不是留到 Design 中。“涉及哪些界面?面向谁?明确推迟了什么?”
- 指明每个 goal 的受益者——没有受益者的 goal 就是 scope creep。
- 不要发明 proposal 从未确立的 requirements(参见本 skill 的 Non-goals)。如果某个 goal 无法追溯到父级 proposal,请指出并询问。
---spec.mdspec.mdNNNexec("ls -A specs/")NNN-name/NNN003004specs/004-payment-retries/write({ document: { path: "specs/004-payment-retries/spec.md", template: "spec" } })spec## Goals## Non-goals## Design## Migration## Test plantype: spec
description: "<one line: what this spec delivers>"
status: draft
owner: <user>
target_release:
created: <today YYYY-MM-DD>
parent_proposal: ./proposals/0004-payment-retries.md # or note the skip
tags: [spec]parent_proposal:target_release:NNNexec("ls -A specs/")NNN-name/NNN003004specs/004-payment-retries/write({ document: { path: "specs/004-payment-retries/spec.md", template: "spec" } })spec## Goals## Non-goals## Design## Migration## Test plantype: spec
description: "<one line: what this spec delivers>"
status: draft
owner: <user>
target_release:
created: <today YYYY-MM-DD>
parent_proposal: ./proposals/0004-payment-retries.md # or note the skip
tags: [spec]parent_proposal:target_release:## Goals## Non-goalsedit({ ... })retryCountedit({ ... })## Goals## Non-goalsretryCount## Design## Designspec## Decision Logspec.md## Test planundefinedspecspec.md## Test plan## Decision Logundefined
Discipline:
- One entry per one-way-door choice from Step 5, plus any process decision (e.g. "proceeded without a parent proposal per the user's acknowledgement on <date>").
- The `Reverses if` line is not optional — a decision with no stated reversal condition can never be re-examined honestly.
- This log is scoped to THIS spec. It is not the project's decision record. Recording an architecture decision in `decisions/` is the sibling `/record-a-decision` skill's job; do not write ADRs here.
---
纪律:
- Step 5 中的每个 one-way-door 选择对应一条记录;任何流程性决定也需记录,例如“根据用户在 `<date>` 的确认,在没有父级 proposal 的情况下继续”。
- `Reverses if` 一行不可省略——没有明确反转条件的决定永远无法被诚实地重新审视。
- 此日志仅限于 THIS spec。它不是项目的 decision record。在 `decisions/` 中记录架构决策是同类 `/record-a-decision` skill 的职责;不要在这里编写 ADR。
---## Open Questionsundefined## Open Questionsundefined
Discipline:
- If a question blocks a Decision Log entry, say so in both places — the log entry stays provisional until the question closes.
- Prefer "we don't know yet, here's how we'd find out" over a confident guess. The boundary of what you know is information; a fabricated answer is a hazard.
- As questions close during the spec's life, flip `Status: open` to `resolved → DL-N` and move the resolution into the Decision Log — don't just delete the question.
---
纪律:
- 如果某个问题阻塞 Decision Log 中的一项记录,应在这两处都注明——在问题关闭之前,该记录保持暂定状态。
- 优先采用“我们还不知道,但可以这样查明”,而不是自信地猜测。知道与不知道之间的边界本身就是信息;编造答案则会造成危险。
- 当问题在 spec 生命周期内关闭时,将 `Status: open` 改为 `resolved → DL-N`,并把解决方案移入 Decision Log——不要只是删除问题。
---## Migration## Test plan## Migration## Test planplan.mdtasks.mdplan.mdtasks.mdstatus: draftwrite({ document: { path: "specs/004-payment-retries/plan.md", template: "spec-plan" } })
write({ document: { path: "specs/004-payment-retries/tasks.md", template: "spec-tasks" } })parent_spec: ./spec.mdplan.md## Approach## Phases## Risks + unknowns## Dependencies## RolloutRisks + unknownsRollouttasks.md## Tasks## Done when## Out of scope## Done when## Out of scopestatus: draftwrite({ document: { path: "specs/004-payment-retries/plan.md", template: "spec-plan" } })
write({ document: { path: "specs/004-payment-retries/tasks.md", template: "spec-tasks" } })parent_spec: ./spec.mdplan.md## Approach## Phases## Risks + unknowns## Dependencies## RolloutRisks + unknownsRollouttasks.md## Tasks## Done when## Out of scope## Done when## Out of scopederived from [Payment retries proposal](./proposals/0004-payment-retries.md)decisions/links({ kind: "backlinks", ... })audit({ path: "specs/004-payment-retries/spec.md" })typedescriptionstatusownerparent_proposalcreatedtagsderived from [Payment retries proposal](./proposals/0004-payment-retries.md)decisions/links({ kind: "backlinks", ... })audit({ path: "specs/004-payment-retries/spec.md" })typedescriptionstatusownerparent_proposalcreatedtagsundefinedundefineddraft
State plainly what is still open. A spec's honesty about its own gaps is what makes it trustworthy.
---draft
明确说明仍然开放的事项。spec 对自身缺口的坦诚,是它值得信赖的基础。
---decisions//record-a-decision## Designshippedstatusdraftshipped/write-a-postmortemdecisions//record-a-decision## Designshippedstatusdraftshipped/write-a-postmortem