@namewta/speculo 1.0.18 → 1.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -7
- package/THIRD-PARTY-NOTICES.md +33 -0
- package/dist/src/agent-files.js +2 -2
- package/dist/src/agent-files.js.map +1 -1
- package/dist/src/agent-skills.d.ts +81 -0
- package/dist/src/agent-skills.js +530 -0
- package/dist/src/agent-skills.js.map +1 -0
- package/dist/src/cli.js +11 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/config.js +5 -3
- package/dist/src/config.js.map +1 -1
- package/dist/src/doctor.js +7 -2
- package/dist/src/doctor.js.map +1 -1
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.js +23 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/manifest.d.ts +9 -0
- package/dist/src/manifest.js +45 -7
- package/dist/src/manifest.js.map +1 -1
- package/dist/src/refresh.js +40 -0
- package/dist/src/refresh.js.map +1 -1
- package/dist/src/structured.js +15 -4
- package/dist/src/structured.js.map +1 -1
- package/dist/src/transaction.d.ts +24 -3
- package/dist/src/transaction.js +191 -12
- package/dist/src/transaction.js.map +1 -1
- package/package.json +10 -4
- package/scripts/validate-skills.mjs +56 -0
- package/template/AGENTS.md +1 -1
- package/template/CLAUDE.md +1 -1
- package/template/canonical/canonical-specdev-goal-plan.md +158 -30
- package/template/canonical/canonical-specdev-grill-with-docs.md +155 -33
- package/template/canonical/canonical-specdev-spec.md +162 -161
- package/template/canonical/canonical-specdev-tickets.md +155 -29
- package/template/canonical/canonical-specdev-wayfinder.md +144 -29
- package/template/commands/handoff.md +16 -0
- package/template/commands/retro.md +12 -10
- package/template/skills/archive-and-consolidate/SKILL.md +163 -7
- package/template/skills/archive-and-consolidate/references/cleanup-rules.md +1 -1
- package/template/skills/docs-sync/references/agents/claude-redirect.md +8 -8
- package/template/skills/docs-sync/references/agents/content-contract.md +1 -1
- package/template/skills/docs-sync/references/agents/manifest-discovery.md +7 -7
- package/template/skills/docs-sync/references/agents/role-classification.md +4 -4
- package/template/skills/docs-sync/references/agents-contract.md +1 -1
- package/template/skills/engineering-standards-builder/SKILL.md +149 -9
- package/template/skills/engineering-standards-builder/agents/openai.yaml +2 -0
- package/template/skills/engineering-standards-builder/manifest.txt +2 -1
- package/template/skills/engineering-standards-builder/references/rules/09-mechanical-guardrails.md +9 -0
- package/template/skills/engineering-standards-builder/scripts/validate-builder.mjs +4 -7
- package/template/skills/git-history-squash/SKILL.md +87 -11
- package/template/skills/git-history-squash/agents/openai.yaml +2 -0
- package/template/skills/optimize-codex-config/SKILL.md +71 -11
- package/template/skills/retrospective/SKILL.md +43 -0
- package/template/skills/{speculo-retro → retrospective}/references/friction-taxonomy.md +22 -13
- package/template/skills/{speculo-retro → retrospective}/references/issue-drafting-sop.md +13 -21
- package/template/skills/source-code-zip/SKILL.md +44 -8
- package/template/skills/source-code-zip/references/{entry-procedure.md → cli-reference.md} +0 -43
- package/template/skills/upstream-fork-sync/SKILL.md +71 -8
- package/template/skills/{writing-great-skills → writing-for-agents}/GLOSSARY.md +1 -1
- package/template/skills/writing-for-agents/SKILL.md +22 -0
- package/template/skills/writing-for-agents/agents/openai.yaml +2 -0
- package/template/skills/{writing-great-skills/references/entry-procedure.md → writing-for-agents/references/authoring-principles.md} +2 -9
- package/template/workflows/learning/A-archive/A-archive.md +2 -5
- package/template/workflows/learning/A-assess-and-plan/A-assess-and-plan.md +2 -5
- package/template/workflows/learning/C-consolidate/C-consolidate.md +2 -5
- package/template/workflows/learning/G-goal/G-goal.md +5 -23
- package/template/workflows/learning/H-homework/H-homework.md +2 -5
- package/template/workflows/learning/I-init-setup/I-init-setup.md +4 -9
- package/template/workflows/learning/L-lesson/L-lesson.md +2 -5
- package/template/workflows/learning/Q-question/Q-question.md +16 -8
- package/template/workflows/learning/Q-question/inquiry-template.md +2 -0
- package/template/workflows/learning/Q-question/tools/validate-inquiry.mjs +112 -0
- package/template/workflows/learning/R-review/R-review.md +3 -6
- package/template/workflows/learning/README.md +2 -2
- package/template/workflows/learning/common/rules/knowledge-organization.md +1 -1
- package/template/workflows/learning/common/rules/mastery-policy.md +1 -1
- package/template/workflows/learning/common/skills/socratic-questioning/SKILL.md +1 -1
- package/template/workflows/ops/D-project-deploy/D-project-deploy.md +6 -2
- package/template/workflows/ops/H-host-manage/H-host-manage.md +10 -18
- package/template/workflows/ops/H-host-manage/references/host-profiles.md +21 -0
- package/template/workflows/ops/I-initialize/I-initialize.md +4 -4
- package/template/workflows/ops/README.md +22 -84
- package/template/workflows/ops/S-server-connect/S-server-connect.md +3 -3
- package/template/workflows/ops/V-inventory-view/V-inventory-view.md +2 -2
- package/template/workflows/ops/common/rules/deployment-layout.md +51 -0
- package/template/workflows/ops/common/rules/recovery.md +6 -0
- package/template/workflows/ops/common/rules/server-onboarding.md +6 -0
- package/template/workflows/ops/common/tests/test_ops.mjs +5 -8
- package/template/workflows/ops/common/tests/test_ops_bootstrap.mjs +71 -14
- package/template/workflows/ops/common/tests/test_ops_workspace.mjs +17 -8
- package/template/workflows/ops/common/tools/opslib/bootstrap.mjs +4 -4
- package/template/workflows/ops/common/tools/opslib/transport.mjs +3 -3
- package/template/workflows/person/M-mao-zedong-cognitive-os/M-mao-zedong-cognitive-os.md +13 -68
- package/template/workflows/person/S-steelman-deliberation/S-steelman-deliberation.md +11 -123
- package/template/workflows/person/S-steelman-deliberation/references/state-and-publication.md +86 -0
- package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +2 -17
- package/template/workflows/specdev/A-archive-and-consolidate/consolidation-interview.md +13 -4
- package/template/workflows/specdev/C-code-review/C-code-review.md +4 -15
- package/template/workflows/specdev/C-code-review/code-review-template.md +4 -0
- package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +4 -20
- package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +2 -2
- package/template/workflows/specdev/G-grill-with-docs/references/interview-procedure.md +6 -6
- package/template/workflows/specdev/I-implement/I-implement.md +2 -2
- package/template/workflows/specdev/I-implement/evidence-template.md +8 -0
- package/template/workflows/specdev/I-implement/references/implementation-procedure.md +9 -43
- package/template/workflows/specdev/I-implement/tdd-rules.md +4 -0
- package/template/workflows/specdev/I-init-setup/I-init-setup.md +16 -117
- package/template/workflows/specdev/I-init-setup/config-template.json +5 -1
- package/template/workflows/specdev/I-init-setup/references/first-setup.md +46 -0
- package/template/workflows/specdev/INDEX.md +2 -2
- package/template/workflows/specdev/L-learn-change/L-learn-change.md +11 -89
- package/template/workflows/specdev/L-learn-change/references/lesson-format.md +47 -0
- package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +2 -2
- package/template/workflows/specdev/P-goal-plan/planning-modes.md +1 -1
- package/template/workflows/specdev/P-prototype/P-prototype.md +7 -17
- package/template/workflows/specdev/P-prototype/logic-protocol.md +11 -0
- package/template/workflows/specdev/P-prototype/logic-template.md +27 -0
- package/template/workflows/specdev/P-prototype/project-preview-protocol.md +9 -0
- package/template/workflows/specdev/R-retro/R-retro.md +26 -0
- package/template/workflows/specdev/R-retro/retro-template.md +27 -0
- package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +19 -57
- package/template/workflows/specdev/R-review-architecture/architecture-review-template.md +2 -1
- package/template/workflows/specdev/R-review-architecture/references/selected-design.md +23 -0
- package/template/workflows/specdev/R-review-architecture/review-rubric.md +2 -2
- package/template/workflows/specdev/README.md +17 -6
- package/template/workflows/specdev/S-spec/S-spec.md +13 -136
- package/template/workflows/specdev/T-tickets/T-tickets.md +6 -2
- package/template/workflows/specdev/T-triage/T-triage.md +32 -141
- package/template/workflows/specdev/T-triage/capture-protocol.md +1 -1
- package/template/workflows/specdev/T-triage/ci-security-protocol.md +11 -0
- package/template/workflows/specdev/T-triage/intake-protocol.md +29 -4
- package/template/workflows/specdev/T-triage/pr-delivery-protocol.md +13 -0
- package/template/workflows/specdev/T-triage/pr-record-template.md +39 -0
- package/template/workflows/specdev/T-triage/publish-protocol.md +1 -1
- package/template/workflows/specdev/T-triage/queue-protocol.md +7 -0
- package/template/workflows/specdev/T-triage/reconcile-protocol.md +1 -1
- package/template/workflows/specdev/T-triage/references/issue-pr-policy.md +23 -0
- package/template/workflows/specdev/T-triage/references/release-authentication.md +9 -0
- package/template/workflows/specdev/T-triage/references/release-notes-injection.md +21 -0
- package/template/workflows/specdev/T-triage/references/workflow-yaml-reference.md +37 -0
- package/template/workflows/specdev/T-triage/release-preflight.md +13 -0
- package/template/workflows/specdev/T-triage/release-protocol.md +12 -0
- package/template/workflows/specdev/T-triage/release-recovery.md +18 -0
- package/template/workflows/specdev/T-triage/remote-operations.md +25 -0
- package/template/workflows/specdev/T-triage/scripts/github-transport.mjs +208 -0
- package/template/workflows/specdev/T-triage/source-template.md +7 -0
- package/template/workflows/specdev/T-triage/triage-run-template.md +34 -0
- package/template/workflows/specdev/T-triage/triage-template.md +4 -1
- package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +2 -2
- package/template/workflows/specdev/common/rules/artifact-contract.md +7 -0
- package/template/workflows/specdev/common/rules/change-completion.md +6 -0
- package/template/workflows/specdev/common/rules/deployment-handoff.md +23 -0
- package/template/workflows/specdev/common/rules/workflow-routing.md +6 -0
- package/template/workflows/specdev/common/rules/workflow-state-and-lifecycle.md +1 -1
- package/template/workflows/specdev/common/schemas/config.schema.json +137 -26
- package/template/workflows/specdev/common/schemas/logic-prototype.schema.json +62 -0
- package/template/workflows/specdev/common/schemas/pull-request.schema.json +90 -0
- package/template/workflows/specdev/common/schemas/retrospective.schema.json +58 -0
- package/template/workflows/specdev/common/schemas/triage-run.schema.json +149 -0
- package/template/workflows/specdev/common/schemas/triage.schema.json +117 -15
- package/template/workflows/specdev/common/skills/code-review/SKILL.md +5 -4
- package/template/workflows/specdev/common/skills/code-review/references/result-reuse.md +15 -0
- package/template/workflows/specdev/common/tools/delivery-artifacts.mjs +95 -0
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +60 -19
- package/template/workflows/specdev/runtime-contract.json +4 -2
- package/template/skills/archive-and-consolidate/references/entry-procedure.md +0 -178
- package/template/skills/docs-sync/references/entry-procedure.md +0 -3
- package/template/skills/engineering-standards-builder/references/entry-procedure.md +0 -154
- package/template/skills/git-history-squash/references/entry-procedure.md +0 -94
- package/template/skills/github-npm-ops/SKILL.md +0 -19
- package/template/skills/github-npm-ops/references/ci-and-security-ops.md +0 -178
- package/template/skills/github-npm-ops/references/entry-procedure.md +0 -25
- package/template/skills/github-npm-ops/references/failure-recovery.md +0 -123
- package/template/skills/github-npm-ops/references/issue-pr-triage.md +0 -219
- package/template/skills/github-npm-ops/references/issue-transport.md +0 -26
- package/template/skills/github-npm-ops/references/package-json-checklist.md +0 -171
- package/template/skills/github-npm-ops/references/preflight-checklist.md +0 -39
- package/template/skills/github-npm-ops/references/publish-detection.md +0 -68
- package/template/skills/github-npm-ops/references/release-notes-injection.md +0 -238
- package/template/skills/github-npm-ops/references/release-pipeline.md +0 -108
- package/template/skills/github-npm-ops/references/setup-npm-token.md +0 -63
- package/template/skills/github-npm-ops/references/troubleshooting-playbook.md +0 -293
- package/template/skills/github-npm-ops/references/version-bump-flow.md +0 -217
- package/template/skills/github-npm-ops/references/workflow-yaml-reference.md +0 -268
- package/template/skills/github-npm-ops/scripts/issue-transport.mjs +0 -227
- package/template/skills/optimize-codex-config/references/entry-procedure.md +0 -78
- package/template/skills/speculo-retro/SKILL.md +0 -19
- package/template/skills/speculo-retro/references/entry-procedure.md +0 -23
- package/template/skills/upstream-fork-sync/references/entry-procedure.md +0 -78
- package/template/skills/writing-great-skills/SKILL.md +0 -23
- /package/template/skills/{writing-great-skills → writing-for-agents}/references/document-contract.md +0 -0
- /package/template/workflows/specdev/{G-grill-with-docs → common/rules}/adr-format.md +0 -0
- /package/template/workflows/specdev/{G-grill-with-docs → common/rules}/context-format.md +0 -0
- /package/template/workflows/specdev/{I-implement → common/rules}/design-it-twice.md +0 -0
- /package/template/workflows/specdev/{G-grill-with-docs/domain-modeling-rules.md → common/rules/domain-modeling.md} +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 首次配置与缺失骨架
|
|
2
|
+
|
|
3
|
+
只在配置或状态尚不存在时读取;已有文件先按入口验证,不重新初始化。
|
|
4
|
+
|
|
5
|
+
### 3. 询问不可发现偏好
|
|
6
|
+
|
|
7
|
+
仅在上下文未提供时询问:
|
|
8
|
+
|
|
9
|
+
- 交互语言与持久化工件语言;
|
|
10
|
+
- implementation subagent、集成尝试次数和 UI 设计候选上限(初始化时写入 config,Lead 不计入);
|
|
11
|
+
- Deep Ticket 的迁移、发布和不可逆操作是否必须人工批准;
|
|
12
|
+
|
|
13
|
+
不询问可由仓库事实回答的文件位置、脚本名或默认分支。
|
|
14
|
+
|
|
15
|
+
### 4. 写入配置
|
|
16
|
+
|
|
17
|
+
以 `<Path>{roots.workflows}/specdev/I-init-setup/config-template.json</Path>` 为模板写入 `<Path>{roots.state}/specdev/config.json</Path>`。
|
|
18
|
+
|
|
19
|
+
要求:
|
|
20
|
+
|
|
21
|
+
- 字段满足 `<Path>{roots.workflows}/specdev/common/schemas/config.schema.json</Path>`;
|
|
22
|
+
- 验证命令来自仓库事实或显式用户决定;
|
|
23
|
+
- 未确认命令写 `null`,不得虚构;
|
|
24
|
+
- 不写入令牌、凭据、Cookie、个人隐私或敏感环境变量值;
|
|
25
|
+
- Ticket 的实现 commit 与本地 candidate integration 仍由具体 Goal Plan/I-implement 取得授权,不存为全局自动副作用开关。
|
|
26
|
+
|
|
27
|
+
### 5. 初始化目录与状态
|
|
28
|
+
|
|
29
|
+
创建或确认以下目录和文件:
|
|
30
|
+
|
|
31
|
+
- 以 `<Path>{roots.workflows}/specdev/I-init-setup/status-template.json</Path>` 生成 `<Path>{roots.state}/specdev/status.json</Path>`
|
|
32
|
+
- `<Path>{roots.state}/specdev/.config/</Path>`
|
|
33
|
+
- `<Path>{roots.state}/specdev/changes/</Path>`
|
|
34
|
+
- `<Path>{roots.state}/specdev/adr/</Path>`
|
|
35
|
+
- `<Path>{roots.state}/specdev/context/</Path>`
|
|
36
|
+
- `<Path>{roots.state}/specdev/research/</Path>`
|
|
37
|
+
- `<Path>{roots.state}/specdev/archive/</Path>`
|
|
38
|
+
|
|
39
|
+
若全局状态或 config 已存在,先检查各自 `schema_version`。版本未知、JSON 不可解析或状态与当前 workflow 契约不一致时,停止当前 Work;不得在 Work 内迁移、兼容或猜测旧状态。`speculo init` 只会对 `<Path>{roots.workflows}/specdev/runtime-contract.json</Path>` 已登记且存在显式 migrator 的旧版本升级,其他冲突会保留当前安装并报告具体 blocker。只有状态不存在时才从当前 schema 模板创建。
|
|
40
|
+
|
|
41
|
+
从模板生成:
|
|
42
|
+
|
|
43
|
+
- `<Path>{roots.workflows}/specdev/I-init-setup/tracking-template.md</Path>` → `<Path>{roots.state}/specdev/.config/tracking.md</Path>`
|
|
44
|
+
- `<Path>{roots.workflows}/specdev/I-init-setup/domain-layout-template.md</Path>` → `<Path>{roots.state}/specdev/.config/domain-layout.md</Path>`
|
|
45
|
+
|
|
46
|
+
已有永久知识不得被初始化过程清空。已有配置应先验证和展示差异,再按用户授权更新。
|
|
@@ -3,8 +3,8 @@ id: specdev
|
|
|
3
3
|
type: workflow
|
|
4
4
|
workflow: specdev
|
|
5
5
|
name: SpecDev Workflow
|
|
6
|
-
description:
|
|
7
|
-
keywords: [specdev, local-first, 规格驱动开发, decision-complete, prototype, code-review, TDD, 证据]
|
|
6
|
+
description: 以本地工件为开发权威,覆盖来源分诊、诊断、设计、逻辑/UI 原型、规格、Ticket、编排、实现、审查、复盘、GitHub/PR/包发布交付与知识归档。
|
|
7
|
+
keywords: [specdev, local-first, 规格驱动开发, decision-complete, prototype, code-review, TDD, retro, PR, release, 证据]
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# SpecDev Index
|
|
@@ -9,98 +9,20 @@ keywords: [learn-change, change 学习, 开发后提问, 零基础, 大一新生
|
|
|
9
9
|
|
|
10
10
|
# Change 学习:给零基础新生的图解
|
|
11
11
|
|
|
12
|
-
>
|
|
12
|
+
激活后读取 `<Path>{roots.workflows}/specdev/README.md</Path>` 与 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`。只解释当前 change 已验证的实现与测试事实,不作产品/架构决定或授予实现权限。
|
|
13
13
|
|
|
14
|
-
##
|
|
15
|
-
|
|
16
|
-
1. 先读取 `<Path>{roots.workflows}/specdev/README.md</Path>` 与当前 Work 的状态入口。
|
|
17
|
-
2. 再读取 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`,按当前分支、状态和关键词定位最小相关工件。
|
|
18
|
-
3. 只在本 Work 明确要求恢复、冲突、执行安全或归档证据时扩展为全量读取;缺少匹配证据或 owner/gateway 时停止受影响分支。
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
## 读者与职责
|
|
22
|
-
|
|
23
|
-
读者是刚入大学、没有专业背景(零专业背景)的新生。读者能理解日常因果和简单流程,但不应被假定知道代码、网络、数学或行业背景。
|
|
24
|
-
|
|
25
|
-
本 Work 用于在 change 开发完成后回答与该 change 有关的问题。它只解释,不作产品决定、架构决定或实现授权;它把当前 change 中已验证的工件、实现和测试事实写成可恢复的 Markdown 图解。图比段落更先出现,文字只负责读懂图。
|
|
26
|
-
|
|
27
|
-
```text
|
|
28
|
-
已完成 change 的已验证事实
|
|
29
|
-
|
|
|
30
|
-
v
|
|
31
|
-
用户关于 change 的问题
|
|
32
|
-
|
|
|
33
|
-
v
|
|
34
|
-
ASCII 全图 + 分步图 + 简短说明
|
|
35
|
-
|
|
|
36
|
-
v
|
|
37
|
-
learning/01_<topic>.md、02_<topic>.md、...
|
|
38
|
-
|
|
|
39
|
-
v
|
|
40
|
-
learning/index.md(图解目录)
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
主题:`$ARGUMENTS`
|
|
44
|
-
|
|
45
|
-
## 输出格式
|
|
46
|
-
|
|
47
|
-
在当前 change 的 `<Path>{roots.state}/specdev/changes/{change}/learning/</Path>` 内原子写入一份新的 `<Path>{roots.state}/specdev/changes/{change}/learning/{number}_{topic}.md</Path>`,并原子更新索引 `<Path>{roots.state}/specdev/changes/{change}/learning/index.md</Path>`。这些产物属于 SpecDev change,不写入 `<Path>{roots.state}/learning/</Path>`。文档必须是纯 Markdown,不生成 HTML、CSS、SVG、图片链接或浏览器专属交互。
|
|
48
|
-
|
|
49
|
-
`<number>` 是两位起始、持续递增的序号:先读取索引和同目录已有的图解文件,取最大序号加一,因此第一次为 `01`,下一次为 `02`;不为旧文件重编号。`<topic>` 是主题的简短、可作文件名的标签,可使用中文、字母、数字、`-` 或 `_`,但不能含空格、`/`、`\\` 或 `..`。同主题再次解释也创建新编号文件。
|
|
50
|
-
|
|
51
|
-
索引是唯一目录,使用下列 Markdown 表格;每新增一份图解就在表末追加一行,并保留既有行。文件列只写同目录的文件名:
|
|
52
|
-
|
|
53
|
-
```markdown
|
|
54
|
-
# Change 学习图解索引
|
|
55
|
-
|
|
56
|
-
| 编号 | 文件 | 主题 | 简介 |
|
|
57
|
-
| --- | --- | --- | --- |
|
|
58
|
-
| 01 | 01_<topic>.md | <主题> | <一句话说明它解释什么> |
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
按主题选择最贴切的图,但优先用多个短小 ASCII 图代替长文字:
|
|
62
|
-
|
|
63
|
-
```text
|
|
64
|
-
结构图:
|
|
65
|
-
[系统]
|
|
66
|
-
|
|
|
67
|
-
+-- [部件 A]
|
|
68
|
-
+-- [部件 B]
|
|
14
|
+
## 执行
|
|
69
15
|
|
|
70
|
-
|
|
71
|
-
|
|
16
|
+
1. **选择现有 change**:使用用户指定或唯一未归档 change;没有时返回缺失输入,不创建空 change。只读归档不追加学习材料。按原交接规则登记 `current_work=specdev/learn-change`,不把 `change_status=completed` 重新打开为开发中。
|
|
17
|
+
2. **确定主题**:使用 `$ARGUMENTS` 调用参数或用户最新问题;缺少时只询问主题。读者是刚入大学、零专业背景的新生,先确定“它是什么、为什么需要、怎样流动或被调用”三个答案。
|
|
18
|
+
3. **定位事实**:按主题读取 Source、Spec、Ticket、Evidence、review、实际代码/测试与可靠来源。区分已验证事实、类比与未知;旧计划和实现冲突时明确差异,以当前代码、测试、Evidence 为实现事实,不让类比代替证据。
|
|
19
|
+
4. **生成与保存**:读取 `<Path>{roots.workflows}/specdev/L-learn-change/references/lesson-format.md</Path>` 的完整格式和命名合同。先画 ASCII 全图,再按实际关系画短小结构/数据/调用/状态图;用短句解释箭头,术语先日常解释再给专业名字。验证零背景读者能复述三个答案;不能时拆图或换词,不灌长文。
|
|
20
|
+
5. **追加而非覆盖**:从 `<Path>{roots.state}/specdev/changes/{change}/learning/index.md</Path>` 及同目录真实图解的最大编号取下一号;先原子创建 `<Path>{roots.state}/specdev/changes/{change}/learning/{number}_{topic}.md</Path>` 新图解,再更新索引并回读。重讲同主题仍新增编号,保留旧文件、原顺序和全部历史行。产物仅为纯 Markdown/ASCII,不生成 HTML、CSS、SVG、图片或浏览器依赖,不写 `<Path>{roots.state}/learning/</Path>`、生产代码、永久知识或远程系统。
|
|
72
21
|
|
|
73
|
-
|
|
74
|
-
[用户动作] -> [入口] -> [服务] -> [回应]
|
|
22
|
+
## 验收与恢复
|
|
75
23
|
|
|
76
|
-
|
|
77
|
-
|
|
24
|
+
```bash
|
|
25
|
+
node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> --stage learn-change <Path>{roots.state}/specdev/changes/{change}</Path>
|
|
78
26
|
```
|
|
79
27
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
1. `## 先看全图`:一个能说清“谁和谁有关”的 ASCII 图。
|
|
83
|
-
2. `## 一步一步看`:按箭头顺序解释。流程、数据或调用会移动时,再给对应的 ASCII 图。
|
|
84
|
-
3. `## 术语小词典`:只保留读图必需的词。每个词先用日常语言解释,再给它的专业名字。例如:`临时便签(缓存)`,意思是“把常用结果先放在手边,下一次不用重新找”。
|
|
85
|
-
4. `## 你现在能复述什么`:用短句归纳“它是什么、为什么需要它、它怎样流动或被调用”。
|
|
86
|
-
|
|
87
|
-
图中的方框名称使用普通名词和动词,不用缩写;箭头必须有方向。一个图只讲一个问题。确有边界、失败或例外时,单独画一张小图说明,不把它塞进主图。
|
|
88
|
-
|
|
89
|
-
## 执行
|
|
90
|
-
|
|
91
|
-
1. 按 `<Path>{roots.workflows}/specdev/README.md</Path>` 读取全局状态和当前 change 状态。只选择用户指定或唯一未归档的现有 change;没有可用 change 时说明必须先完成或指定一个 SpecDev change,不创建空 change。已归档 change 保持只读,不在归档目录追加学习产物。`current_work` 为空时设为 `specdev/learn-change`;若指向其他 Work,先完成显式交接。`change_status=completed` 不因本 Work 被重新打开为开发中。
|
|
92
|
-
2. 将调用中的 `$ARGUMENTS` 解析为主题;直接提出的问题以用户最新消息为主题。主题缺失时只询问问题或主题,不猜测。先写下读者要带走的三个答案:它是什么、为什么需要它、它怎样流动或被调用。
|
|
93
|
-
3. 按需读取当前 change 的 Source、Spec、Ticket、Evidence、review、项目实现、测试和可靠来源。区分已验证事实、便于理解的类比和未知处;实现事实与旧计划冲突时以当前代码、测试和 Evidence 为准,并显式指出差异。类比只能帮助理解,不能替代事实或掩盖边界。
|
|
94
|
-
4. 先画 `先看全图`,再按实际关系补充结构图、数据流图、调用流图或状态变化图。每张图旁只用短句解释箭头;避免长段落、术语堆叠、缩写和先备知识。
|
|
95
|
-
5. 首次使用术语时,先写日常解释,再在括号中给专业名字。读完后从读者角度检查:没有背景知识的人能否仅靠图和短句复述三个答案;若不能,拆图或替换术语,不增加大段说明。
|
|
96
|
-
6. 读取 `<Path>{roots.state}/specdev/changes/{change}/learning/index.md</Path>` 和 `<Path>{roots.state}/specdev/changes/{change}/learning/</Path>` 内已有图解文件。从两者的最大序号计算下一个编号,先原子创建新的图解文件,再原子更新索引;不覆盖、重命名或重排已有图解。重读确认新文件是 Markdown,包含四个必需章节、至少一个 ASCII 图且没有 HTML 标记或图片依赖;索引的文件名、主题和简介都与新文件对应。
|
|
97
|
-
7. 运行 `<Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path>` 的 `--stage learn-change`。成功后把 `specdev/learn-change` 去重加入 `works_run`,清空 `current_work`,并返回新 Markdown 与索引的完整路径;失败时保留 `current_work` 和阻塞原因,便于恢复,但不改变 change 的开发完成状态。
|
|
98
|
-
|
|
99
|
-
## 完成标准
|
|
100
|
-
|
|
101
|
-
- `<Path>{roots.state}/specdev/changes/{change}/learning/index.md</Path>` 存在,按序列出每份图解的编号、文件、主题和简介;每个文件名都对应同目录真实文件。
|
|
102
|
-
- 新的 `<Path>{roots.state}/specdev/changes/{change}/learning/{number}_{topic}.md</Path>` 存在,是纯 Markdown,并含有全部四个必需章节和至少一个 ASCII 图;编号比既有最大编号大一,旧文件未被重排或覆盖。
|
|
103
|
-
- 文档面向刚上大一、没有专业背景的读者;用图和短句回答当前 change 的问题,而不是把专业长文换成更简单的字。
|
|
104
|
-
- 图解覆盖主题需要的结构、数据流、调用流或状态变化;能画图的地方优先画图,且每张图的箭头方向与事实一致。
|
|
105
|
-
- 术语首次出现前有日常解释;类比不把读者带向相反结论;计划与最终实现的差异没有被隐藏。
|
|
106
|
-
- 状态已原子更新;所有学习产物只写入当前 SpecDev change 的 `learning/` namespace,没有修改项目代码、永久知识、Learning workflow state 或远程系统。
|
|
28
|
+
图解符合格式参考的四节、至少一个 ASCII 图和连续编号;索引指向真实新文件且主题/简介一致,箭头方向与事实相符。验证通过才去重更新 `works_run`、清空 `current_work`,返回新图解和索引完整路径。失败保留恢复位置与原因,不改变 change 原有开发完成状态。
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Change 学习图解格式
|
|
2
|
+
|
|
3
|
+
写图解与分配编号时读取;这是产物格式权威,不是另一套学习状态。
|
|
4
|
+
|
|
5
|
+
## 输出格式
|
|
6
|
+
|
|
7
|
+
在当前 change 的 `<Path>{roots.state}/specdev/changes/{change}/learning/</Path>` 内原子写入一份新的 `<Path>{roots.state}/specdev/changes/{change}/learning/{number}_{topic}.md</Path>`,并原子更新索引 `<Path>{roots.state}/specdev/changes/{change}/learning/index.md</Path>`。这些产物属于 SpecDev change,不写入 `<Path>{roots.state}/learning/</Path>`。文档必须是纯 Markdown,不生成 HTML、CSS、SVG、图片链接或浏览器专属交互。
|
|
8
|
+
|
|
9
|
+
`<number>` 是两位起始、持续递增的序号:先读取索引和同目录已有的图解文件,取最大序号加一,因此第一次为 `01`,下一次为 `02`;不为旧文件重编号。`<topic>` 是主题的简短、可作文件名的标签,可使用中文、字母、数字、`-` 或 `_`,但不能含空格、`/`、`\\` 或 `..`。同主题再次解释也创建新编号文件。
|
|
10
|
+
|
|
11
|
+
索引是唯一目录,使用下列 Markdown 表格;每新增一份图解就在表末追加一行,并保留既有行。文件列只写同目录的文件名:
|
|
12
|
+
|
|
13
|
+
```markdown
|
|
14
|
+
# Change 学习图解索引
|
|
15
|
+
|
|
16
|
+
| 编号 | 文件 | 主题 | 简介 |
|
|
17
|
+
| --- | --- | --- | --- |
|
|
18
|
+
| 01 | 01_<topic>.md | <主题> | <一句话说明它解释什么> |
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
按主题选择最贴切的图,但优先用多个短小 ASCII 图代替长文字:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
结构图:
|
|
25
|
+
[系统]
|
|
26
|
+
|
|
|
27
|
+
+-- [部件 A]
|
|
28
|
+
+-- [部件 B]
|
|
29
|
+
|
|
30
|
+
数据流图:
|
|
31
|
+
[输入] -> [处理] -> [结果]
|
|
32
|
+
|
|
33
|
+
调用流图:
|
|
34
|
+
[用户动作] -> [入口] -> [服务] -> [回应]
|
|
35
|
+
|
|
36
|
+
状态变化图:
|
|
37
|
+
[等待] -> [进行中] -> [完成]
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
每份图解至少包含以下四节:
|
|
41
|
+
|
|
42
|
+
1. `## 先看全图`:一个能说清“谁和谁有关”的 ASCII 图。
|
|
43
|
+
2. `## 一步一步看`:按箭头顺序解释。流程、数据或调用会移动时,再给对应的 ASCII 图。
|
|
44
|
+
3. `## 术语小词典`:只保留读图必需的词。每个词先用日常语言解释,再给它的专业名字。例如:`临时便签(缓存)`,意思是“把常用结果先放在手边,下一次不用重新找”。
|
|
45
|
+
4. `## 你现在能复述什么`:用短句归纳“它是什么、为什么需要它、它怎样流动或被调用”。
|
|
46
|
+
|
|
47
|
+
图中的方框名称使用普通名词和动词,不用缩写;箭头必须有方向。一个图只讲一个问题。确有边界、失败或例外时,单独画一张小图说明,不把它塞进主图。
|
|
@@ -13,9 +13,9 @@ keywords: [goal, 目标, plan, run, resume, replan, verify, Lead]
|
|
|
13
13
|
|
|
14
14
|
## 读取范围
|
|
15
15
|
|
|
16
|
-
先读 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`,定位用户指定的 change 或 map,再读状态、当前 map
|
|
16
|
+
先读 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`,定位用户指定的 change 或 map,再读状态、当前 map 和所选模式。每次只展开实际进入 frontier 的 Ticket、直接依赖 Evidence、命中的项目 Skill、当前 Gate 与恢复证据;不默认通读所有 Ticket 或永久索引。
|
|
17
17
|
|
|
18
|
-
##
|
|
18
|
+
## 按意图选择模式与权威
|
|
19
19
|
|
|
20
20
|
| 用户意图 | 模式 | 必须按需读取 |
|
|
21
21
|
|---|---|---|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
- 等待真实上游产物的未来 Ticket 保持 `status: draft`、`ready: false`,在未决问题中记录缺口、生产者 Ticket、所需证据和 DoR 重审条件;不编造版本、路径或验证入口;
|
|
14
14
|
- 每个验收合同被 Ticket 覆盖;
|
|
15
15
|
- writable/shared path 有唯一 owner,Wave 候选无写冲突;
|
|
16
|
-
- config schema
|
|
16
|
+
- config schema v6,`max_implementation_agents` 与 `max_integration_attempts` 为正整数;UI 设计候选范围读取 planning 配置;
|
|
17
17
|
- 父分支可定位,implementation commit 与本地 integration 的授权状态已记录;`plan` 可以列出待批准项并保持 `ready_for_execution: false`;
|
|
18
18
|
- 待执行 Deep Ticket 的迁移、兼容、监控、恢复和不可逆批准点完整。
|
|
19
19
|
- Ticket 与 `<Path>{roots.state}/specdev/changes/{change}/spec.md</Path>`、`<Path>{roots.state}/specdev/changes/{change}/ADR.md</Path>`、`<Path>{roots.state}/specdev/adr/</Path>`、`<Path>{roots.state}/specdev/context/</Path>` 和当前代码事实不存在未处理冲突;
|
|
@@ -2,23 +2,22 @@
|
|
|
2
2
|
id: specdev/prototype
|
|
3
3
|
type: workflow-entry
|
|
4
4
|
workflow: specdev
|
|
5
|
-
name: UI
|
|
6
|
-
description:
|
|
5
|
+
name: 逻辑与 UI 原型
|
|
6
|
+
description: 按需验证离线逻辑模型,或检测现有项目的 UI 事实,按产品任务推荐并逐步选择设计风格,生成持久化设计系统文档、多风格 HTML 对照和可运行 HTML/CSS/JS 原型。
|
|
7
7
|
keywords: [prototype, UI 原型, 风格检测, 设计系统, HTML, CSS, 交互, design tokens]
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# UI
|
|
10
|
+
# 逻辑与 UI 原型
|
|
11
11
|
|
|
12
12
|
> 激活本 Work 后,先读取 `<Path>{roots.workflows}/specdev/README.md</Path>`,再执行本入口。
|
|
13
13
|
|
|
14
14
|
本 Work 的主导词是**设计定向**:先从项目事实识别现状,再让用户看到基于功能而非流行色推荐的候选,最后把选择固化为既可阅读又可运行的 UI 设计包。P 不修改生产 UI;后续 S、Tickets 和 I 以设计包为视觉与交互权威。
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
激活时读取 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`,按当前步骤定位输入和证据。
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
2. 再读取 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`,按当前分支、状态和关键词定位最小相关工件。
|
|
20
|
-
3. 只在本 Work 明确要求恢复、冲突、执行安全或归档证据时扩展为全量读取;缺少匹配证据或 owner/gateway 时停止受影响分支。
|
|
18
|
+
## 分支选择
|
|
21
19
|
|
|
20
|
+
逻辑/状态/规则验证读取 <Path>{roots.workflows}/specdev/P-prototype/logic-protocol.md</Path>,跳过下方 UI 专属步骤。UI 仍默认离线持久化,默认 3 个、最多 4 个方案。只有用户明确要求项目内预览时读取 <Path>{roots.workflows}/specdev/P-prototype/project-preview-protocol.md</Path>;其临时写集与清理由该分支管理,下方 UI 设计权威与离线交付保持。
|
|
22
21
|
|
|
23
22
|
## 输入与所有权
|
|
24
23
|
|
|
@@ -36,7 +35,7 @@ P 拥有 `<Path>{roots.state}/specdev/changes/{change}/prototypes/{design-id}/</
|
|
|
36
35
|
3. **建立功能候选**:读取 `<Path>{roots.workflows}/specdev/P-prototype/design-library/INDEX.md</Path>`,依据产品任务、平台和信息密度从八种风格及六种布局中推荐 2-4 个候选。每个候选写明适合原因、需要保留/调整/替换的现有事实、参考项目和迁移成本。
|
|
37
36
|
4. **逐项选择并持久化**:加载 `<Path>{roots.workflows}/specdev/P-prototype/style-selection-protocol.md</Path>`。每轮只处理一个决策层;每个答案立即写回设计系统主文档并重读。高影响偏好未确认时保持 `status: selecting`,不得自行标记 Ready。
|
|
38
37
|
5. **生成可视对照与最终原型**:加载 `<Path>{roots.workflows}/specdev/P-prototype/generate-design-package.md</Path>`。为每个候选生成独立 comparison variant,再生成 comparison 索引。用户确认或明确组合后,把最终 HTML/CSS/JS 作为具名代码块写入设计系统主文档,再物化到 final 目录。
|
|
39
|
-
6. **验证并封板**:运行 `<Path>{roots.workflows}/specdev/P-prototype/tools/materialize-prototype.mjs</Path> --check` 和 `<Path>{roots.workflows}/specdev/P-prototype/tools/validate-design-package.mjs</Path>`;随后运行 SpecDev `--stage prototype
|
|
38
|
+
6. **验证并封板**:运行 `<Path>{roots.workflows}/specdev/P-prototype/tools/materialize-prototype.mjs</Path> --check` 和 `<Path>{roots.workflows}/specdev/P-prototype/tools/validate-design-package.mjs</Path>`;随后运行 SpecDev `--stage prototype`。对照 `<Path>{roots.workflows}/specdev/P-prototype/design-package.schema.json</Path>`,全部通过且选择闭合后设置 `status: ready`,更新 `works_run` 并清空 `current_work`。缺少项目事实或用户决定时设置 `blocked` 并保留恢复位置。
|
|
40
39
|
7. **返回路由**:返回设计包、comparison 和 final 的完整路径、验证命令与结果、未决问题和下一 Work。需要补足产品决定时返回 G;需要写外部行为合同返回 S;需要拆实施工作返回 Tickets;已有 Ready Ticket 才返回 I。Wayfinder 调用时只把设计包与 comparison locator 写入对应 solution comment。
|
|
41
40
|
|
|
42
41
|
## 完成标准
|
|
@@ -48,12 +47,3 @@ P 拥有 `<Path>{roots.state}/specdev/changes/{change}/prototypes/{design-id}/</
|
|
|
48
47
|
- 字体、间距、圆角、色彩、层级、控件状态、异步反馈、响应式、键盘、focus 和 reduced motion 均有明确合同。
|
|
49
48
|
- Markdown 代码块与 `final/` 文件逐字一致,schema、局部校验和 SpecDev stage 校验全部通过。
|
|
50
49
|
- 设计包不包含机器绝对路径、敏感值、生产数据写入、发布动作或未授权的生产实现。
|
|
51
|
-
|
|
52
|
-
## 子文件引用
|
|
53
|
-
|
|
54
|
-
- 检测:`<Path>{roots.workflows}/specdev/P-prototype/detect-existing-style.md</Path>`,仅在步骤 2 加载。
|
|
55
|
-
- 选择:`<Path>{roots.workflows}/specdev/P-prototype/style-selection-protocol.md</Path>`,仅在步骤 4 加载。
|
|
56
|
-
- 生成:`<Path>{roots.workflows}/specdev/P-prototype/generate-design-package.md</Path>`,仅在步骤 5 加载。
|
|
57
|
-
- 模板:`<Path>{roots.workflows}/specdev/P-prototype/design-system-template.md</Path>`,创建设计包时加载。
|
|
58
|
-
- 设计库:`<Path>{roots.workflows}/specdev/P-prototype/design-library/INDEX.md</Path>`,建立候选或查具体规则时渐进读取。
|
|
59
|
-
- Schema:`<Path>{roots.workflows}/specdev/P-prototype/design-package.schema.json</Path>`。
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# 逻辑原型
|
|
2
|
+
|
|
3
|
+
用于验证状态、算法、规则和交互因果。先读取 <Path>{roots.workflows}/specdev/P-prototype/logic-template.md</Path>。P 拥有 <Path>{roots.state}/specdev/changes/{change}/prototypes/LOGIC-NNN/</Path>,ID 最小未用;不修改生产代码或创建 branch/worktree。
|
|
4
|
+
|
|
5
|
+
1. 选择当前问题的最小纯逻辑,明确初始状态、输入、状态转换、不变量、非法输入及希望验证的决定;有缺口先返回 G。
|
|
6
|
+
2. 写 logic.md 作为决定和证据记录;生成 index.html,所有 CSS/JS 内联,无远程字体、CDN、网络调用或外部文件依赖。使用内存状态,reset 回到同一初始状态。
|
|
7
|
+
3. 提供可见状态、自由操作、带解释的引导场景与 reset;场景包括正常、边界和非法输入。不要用动画或精美 UI 替代规则反馈。
|
|
8
|
+
4. 在实际浏览器离线验证上述场景,记录观察和失败;静态脚本校验不能冒充浏览器观察。通过后 status=ready、verification=passed,保存 SHA-256 摘要。
|
|
9
|
+
5. 运行 SpecDev --stage prototype,返回产物与已确认/未确认决定,路由 G/S/T。网页只是原型,不能自动复制为生产实现或把模拟结果当作后端真实行为。
|
|
10
|
+
|
|
11
|
+
记录按 <Path>{roots.workflows}/specdev/common/schemas/logic-prototype.schema.json</Path> 校验。不能运行浏览器时保持 draft/blocked,报告可运行文件与未验证项。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 1
|
|
3
|
+
artifact: logic-prototype
|
|
4
|
+
change: <YYYY-MM-DD-topic>
|
|
5
|
+
id: LOGIC-001
|
|
6
|
+
status: draft
|
|
7
|
+
verification: pending
|
|
8
|
+
html_sha256: null
|
|
9
|
+
updated_at: <ISO-8601>
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 逻辑原型
|
|
13
|
+
|
|
14
|
+
## Model
|
|
15
|
+
状态、初值、输入、纯转换、不变量与非法输入。
|
|
16
|
+
|
|
17
|
+
## Scenarios
|
|
18
|
+
自由操作、引导路径、正常/边界/非法输入与每次 reset 的预期状态。
|
|
19
|
+
|
|
20
|
+
## Evidence
|
|
21
|
+
浏览器、离线运行、实际观察、失败与修复、index.html 摘要;未执行写未验证。
|
|
22
|
+
|
|
23
|
+
## Decisions
|
|
24
|
+
已确认的行为、仍需产品选择的事项与 S/T 可以引用的决定。
|
|
25
|
+
|
|
26
|
+
## Handoff
|
|
27
|
+
产物位置、验证结果、下一 Work;不得自动进入生产实现。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 显式项目内 UI 预览
|
|
2
|
+
|
|
3
|
+
仅在用户明确要求项目内预览时加载;默认仍是离线持久化 UI 包,候选默认 3、最多 4,不改变 design-system.md 权威。
|
|
4
|
+
|
|
5
|
+
记录项目路由/启动命令、允许的临时文件写集、现有未提交改动和清理方案。用当前项目真实组件与布局环境,加隔离 mock/stub 阻断生产写入;不连接真实付款、发信或数据变更服务。使用 ?variant= 或项目等价参数切换方案,可加底部切换器;快捷键不能劫持输入框、编辑区或浏览器功能。
|
|
6
|
+
|
|
7
|
+
每个候选决定与项目相对证据回写 design-system.md。验证相同任务、viewport、状态与交互,用户选定后仍生成离线 comparison/final 并通过原有两个局部校验器。临时预览不是另一权威源。
|
|
8
|
+
|
|
9
|
+
只清理本次明确拥有且内容未漂移的临时修改,保留原有用户内容;发现 owner/内容冲突时停止该清理并记录剩余写集。清理完成或明确 handoff 后才能把项目预览分支标完成。不自动创建分支、提交、推送或删除 worktree。
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: specdev/retro
|
|
3
|
+
type: workflow-entry
|
|
4
|
+
workflow: specdev
|
|
5
|
+
name: 开发复盘
|
|
6
|
+
description: 对指定开发活动、环境或协作流程的已观察摩擦做证据化复盘,形成根因、改进 owner 与可检验提案;代码讲解使用 L-learn-change,Speculo 产品反馈使用 retro 命令。
|
|
7
|
+
keywords: [retro, retrospective, 复盘, 环境, 反馈, 改进]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 开发复盘
|
|
11
|
+
|
|
12
|
+
先读 <Path>{roots.workflows}/specdev/README.md</Path> 和 <Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>。本 Work 不自动修代码、提 Issue 或改永久知识。
|
|
13
|
+
|
|
14
|
+
## 流程
|
|
15
|
+
|
|
16
|
+
1. 固定本次会话/活动范围,按来源 ID 定位 change、测试、CI、交接和失败证据,不全读历史。缺失资料列 unknown;范围清楚且证据可定位才开始分析。
|
|
17
|
+
2. 未归档且尚未 completed 的当前 change 使用其 retro 目录。completed 或 archived 来源以及独立复盘建立非实现 review change,引用原 locator;不重开来源状态或改写归档。按 <Path>{roots.workflows}/specdev/common/rules/workflow-state-and-lifecycle.md</Path> 初始化/恢复;他项占用 current_work 时先 handoff。
|
|
18
|
+
3. 调用 <Path>{roots.skills}/retrospective/SKILL.md</Path>,检查约束是否缺失、已有检查是否失效或未接入;区分环境事实、机械检查和判断规则。每个发现有因果证据或明确假设,建议有 owner、正反验收与路由。
|
|
19
|
+
4. 按 <Path>{roots.workflows}/specdev/R-retro/retro-template.md</Path> 创建 <Path>{roots.state}/specdev/changes/{change}/retro/RETRO-###.md</Path>,选择最小未占用 ID。原子保存并重读,运行 SpecDev --stage retro;修订保留来源与被替代结论。
|
|
20
|
+
5. 验证通过后追加 works_run=specdev/retro 并清空 current_work;证据不足可完成一份 outcome=insufficient-evidence 的诚实报告,不冒充解决问题。只读复盘不创建 Spec/Ticket 或 implementation Evidence。review-only change 按专用完成门关闭。
|
|
21
|
+
|
|
22
|
+
## 结果与路由
|
|
23
|
+
|
|
24
|
+
合法 outcome:findings、no-findings、insufficient-evidence。发现的 disposition 为 file-issue / lesson-only / discard / duplicate;每项记录理由,允许没有发现。
|
|
25
|
+
|
|
26
|
+
代码问题交 <Path>{roots.workflows}/specdev/D-diagnose-bugs/D-diagnose-bugs.md</Path>,计划改进交 <Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>,远程反馈交 <Path>{roots.workflows}/specdev/T-triage/T-triage.md</Path>;永久知识交 <Path>{roots.workflows}/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md</Path>。返回完整报告、已验证与未验证项、下一入口;不自动推进这些后续副作用。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 1
|
|
3
|
+
artifact: retrospective
|
|
4
|
+
change: <YYYY-MM-DD-topic>
|
|
5
|
+
id: RETRO-001
|
|
6
|
+
status: completed
|
|
7
|
+
outcome: findings
|
|
8
|
+
sources: []
|
|
9
|
+
updated_at: <ISO-8601>
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 开发复盘
|
|
13
|
+
|
|
14
|
+
## Scope
|
|
15
|
+
本次活动、会话、change 与来源 locator。扩大范围必须有来源。
|
|
16
|
+
|
|
17
|
+
## Evidence
|
|
18
|
+
原始现象、证据与未知项;已归档来源只引用不修改。
|
|
19
|
+
|
|
20
|
+
## Findings
|
|
21
|
+
逐项:ID、根因/假设、影响和频率、已有约束是否失效/未接入、remediation_axis、owner、disposition、合并/重复关系。没有发现明确写 none;不能强造 Issue。
|
|
22
|
+
|
|
23
|
+
## Acceptance
|
|
24
|
+
每项建议的正反样例、验证命令/方法与完成条件;区分机械检查和人的判断。
|
|
25
|
+
|
|
26
|
+
## Routes
|
|
27
|
+
下一入口、所需授权、未完成项及恢复条件;无后续动作注明原因。
|
|
@@ -11,18 +11,13 @@ keywords: [架构审查, 维护性, 浅模块, 深模块, 局部性, 杠杆, 接
|
|
|
11
11
|
|
|
12
12
|
> 激活本 Work 后,先读取 `<Path>{roots.workflows}/specdev/README.md</Path>`,再执行本入口。
|
|
13
13
|
|
|
14
|
-
本 work
|
|
14
|
+
本 work 根据可定位的代码压力审查当前范围:先找会让 module 变浅的结构性坏味道,再找能删掉复杂性的 `code-judo` 机会,再找真正值得深化的 seam。行为正确不构成通过;如果存在更简单的路径,就优先把复杂性删掉,而不是搬家。
|
|
15
15
|
|
|
16
16
|
本 work 只审查、呈现和访谈,不直接修改产品代码。报告阶段只产出 Markdown 决策记录,不生成 HTML。
|
|
17
17
|
|
|
18
|
-
本 work 的候选筛选、排序和删除测试见 `<Path>{roots.workflows}/specdev/R-review-architecture/review-rubric.md</Path
|
|
18
|
+
本 work 的候选筛选、排序和删除测试见 `<Path>{roots.workflows}/specdev/R-review-architecture/review-rubric.md</Path>`。沿用 CONTEXT 与共享设计词汇(module、interface、depth、seam、adapter、leverage、locality)准确表达含义,不为机械出现英文而牺牲理解。
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
1. 先读取 `<Path>{roots.workflows}/specdev/README.md</Path>` 与当前 Work 的状态入口。
|
|
23
|
-
2. 再读取 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`、`<Path>{roots.workflows}/specdev/common/rules/codebase-design.md</Path>` 和 `<Path>{roots.workflows}/specdev/common/rules/evidence-and-verification.md</Path>`,按当前分支、状态和关键词定位最小相关工件。
|
|
24
|
-
3. 只在本 Work 明确要求恢复、冲突、执行安全或归档证据时扩展为全量读取;缺少匹配证据或 owner/gateway 时停止受影响分支。
|
|
25
|
-
4. 用户指定范围优先于 Git 热点;若未指定,则从最近 churn、重复编辑和报错/回归轨迹中找出最值得审查的 module。
|
|
20
|
+
激活时读取 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`,按当前步骤定位输入和证据。
|
|
26
21
|
|
|
27
22
|
## 输入与产物
|
|
28
23
|
|
|
@@ -43,7 +38,14 @@ keywords: [架构审查, 维护性, 浅模块, 深模块, 局部性, 杠杆, 接
|
|
|
43
38
|
|
|
44
39
|
每个候选都必须说明:files、structural problem、code-judo move、deleted complexity、dependency class、strength、ADR conflict、interview state 和 user conclusion。文件若因为本次变化接近或超过 1k lines,必须显式标注 decomposition pressure,不得默默吞掉。
|
|
45
40
|
|
|
46
|
-
##
|
|
41
|
+
## 选择交付分支
|
|
42
|
+
|
|
43
|
+
- `report`(默认):用户只请求 review/扫描时完成下方探索与报告,候选保持 `unselected`;没有候选是有效结果,不要求用户先选方案才完成报告。
|
|
44
|
+
- `selected-design`:只有用户已经选择一个候选并请求深入设计,才加载 `<Path>{roots.workflows}/specdev/R-review-architecture/references/selected-design.md</Path>`。输入是可回读报告和所选候选;来源漂移先核对影响,不用旧结论代替当前代码。
|
|
45
|
+
|
|
46
|
+
两分支均不修改生产代码,报告不授权访谈、建票或实施。
|
|
47
|
+
|
|
48
|
+
## Report 流程
|
|
47
49
|
|
|
48
50
|
### 1. 探索
|
|
49
51
|
|
|
@@ -53,18 +55,8 @@ keywords: [架构审查, 维护性, 浅模块, 深模块, 局部性, 杠杆, 接
|
|
|
53
55
|
- 否则翻阅足够长的 `git log --oneline`,找出反复出现的 files、call sites 和 test surfaces;
|
|
54
56
|
- 变更散落、没有明确热点时才扩大搜索范围;
|
|
55
57
|
- 只接受能通过删除测试的候选:删掉该 module 后,复杂性应集中或消失,而不是换一个地方继续蔓延;
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
|
|
59
|
-
首先阅读项目领域词汇和接触区域的 ADR。然后有机探索 codebase,注意哪里会让 maintenance knowledge 分散:
|
|
60
|
-
|
|
61
|
-
- 哪些 module 是 shallow,interface 几乎与 implementation 一样复杂;
|
|
62
|
-
- 哪些 seam 正在 leak;
|
|
63
|
-
- 哪些纯函数只是为了可测试性被拆出,但 bug 实际藏在缺少 locality 的调用方式中;
|
|
64
|
-
- 哪些模块因为 ad-hoc conditionals、mode flags 或 one-off branches 变得更 spaghetti;
|
|
65
|
-
- 哪些区域正在把 feature logic 泄漏进 shared path 或 canonical helper 之外;
|
|
66
|
-
- 哪些结构已经逼近或超过 1k lines,应该先 decomposition 再 review;
|
|
67
|
-
- 哪些 orchestration 本可以并行或更 atomic,却被无谓串行化。
|
|
58
|
+
- 逐项应用 `<Path>{roots.workflows}/specdev/R-review-architecture/review-rubric.md</Path>` 的结构压力、删除测试与排序规则;
|
|
59
|
+
- 先读取项目领域词汇及当前区域 ADR;探索真实调用和测试表面,过滤仅 rearrange complexity 的提案。
|
|
68
60
|
|
|
69
61
|
对每个怀疑对象应用删除测试。候选必须有真实路径、调用或测试证据,并说明不做的实际后果。与业务目标、近期变化压力、测试改善或风险降低无关的候选过滤掉。若没有任何候选通过这条线,明确写出“没有高置信候选”,不要为了填表而硬造一个。
|
|
70
62
|
|
|
@@ -86,46 +78,16 @@ keywords: [架构审查, 维护性, 浅模块, 深模块, 局部性, 杠杆, 接
|
|
|
86
78
|
- **依赖类别**——`in-process | local-substitutable | ports & adapters | mock`;
|
|
87
79
|
- **ADR 冲突**——只在摩擦真实到值得重审时显示警告。
|
|
88
80
|
|
|
89
|
-
报告以“最佳推荐”结束;若没有高置信候选,就明确写
|
|
81
|
+
报告以“最佳推荐”结束;若没有高置信候选,就明确写 `无高置信候选`。报告阶段**不提出 interface**;返回候选和证据即可,不强制追加选择问题。
|
|
90
82
|
|
|
91
83
|
**完成标准**:每个候选字段完整、最佳推荐唯一或明确为空,Markdown 已原子写入并重读。
|
|
92
84
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
用户选择候选后,调用 `<Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path>`,用完整 frontier 遍历约束、依赖、deep module 形状、seam 后面的内容和保留测试。
|
|
96
|
-
|
|
97
|
-
决策结晶时保持领域模型同步:
|
|
98
|
-
|
|
99
|
-
- 新概念加入 change CONTEXT;永久 CONTEXT 不存在时延迟到归档提升;
|
|
100
|
-
- 模糊术语当场精炼;
|
|
101
|
-
- 用户的选择同时难以逆转、没有上下文会令人惊讶且来自真实权衡时,询问是否记录 ADR;任一条件不满足就留在 LOG/Ticket,不制造 ADR;
|
|
102
|
-
- 替代 interface 需要探索时使用 `<Path>{roots.workflows}/specdev/I-implement/design-it-twice.md</Path>`;
|
|
103
|
-
- 如果候选最终只是把复杂性搬家,而不是删掉它,在访谈中直接回退,不把它升级成 Ticket。
|
|
104
|
-
|
|
105
|
-
将选择、访谈状态与结论同步到 Markdown;每次运行只访谈用户选择的候选,不批量迫使用户决定所有卡片。
|
|
106
|
-
|
|
107
|
-
**完成标准**:被选候选的设计树达到共识或明确 blocked;领域词汇、LOG、ADR 和审查报告一致。
|
|
108
|
-
|
|
109
|
-
### 4. 转化为执行工作
|
|
110
|
-
|
|
111
|
-
只有被接受且有具体变更压力的提案进入 `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`。加载 `<Path>{roots.workflows}/specdev/R-review-architecture/proposal-to-ticket.md</Path>`,按 Prefactor、Standard 或 Deep/expand-contract 建立 Ready 治理;只有能删除复杂性的提案才继续,纯重排和 thin wrapper 不进入 Ticket。
|
|
85
|
+
## 分支完成、状态与返回
|
|
112
86
|
|
|
113
|
-
|
|
87
|
+
`report` 完成条件:范围有依据;高置信候选满足删除测试且每项有当前文件/调用/测试证据、前后对比、收益、强度和 ADR 冲突处理;最佳推荐唯一或明确为“无高置信候选”;Markdown 已原子写入并回读。未选择或拒绝的候选不变成 Ticket。
|
|
114
88
|
|
|
115
|
-
-
|
|
116
|
-
- 每个候选通过删除测试并有真实代码压力;
|
|
117
|
-
- 领域使用 CONTEXT 词汇,架构严格使用共享词汇;
|
|
118
|
-
- Markdown 决策记录可重读;
|
|
119
|
-
- 每个候选有前后对比、强度、收益和 ADR 冲突处理;
|
|
120
|
-
- 报告阶段没有提前设计 interface;
|
|
121
|
-
- 用户选择的一个候选完成完整 frontier 访谈;
|
|
122
|
-
- 接受项进入 Ticket 治理,没有直接修改产品代码;
|
|
123
|
-
- 没有把结构性弱候选包装成最佳推荐。
|
|
89
|
+
`selected-design` 完成条件:用户选定的一个候选完成参考中的完整 frontier 访谈,或明确 blocked/rejected;只有接受且达成共识的方案才按原 Ticket 治理交接。其他候选保持未选择,不批量要求决定。
|
|
124
90
|
|
|
125
|
-
|
|
91
|
+
按本分支真实结果更新 Work 状态:成功才把本 Work 去重加入 `works_run` 并清空 `current_work`,blocked 保留恢复键和原因。报告完成不是产品交付;只有请求本来以非实现审查为终点且满足 `<Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>`,该终点 owner 才可关闭 change。
|
|
126
92
|
|
|
127
|
-
|
|
128
|
-
- 证据与验证:`<Path>{roots.workflows}/specdev/common/rules/evidence-and-verification.md</Path>`
|
|
129
|
-
- 审查准则:`<Path>{roots.workflows}/specdev/R-review-architecture/review-rubric.md</Path>`
|
|
130
|
-
- Markdown 模板:`<Path>{roots.workflows}/specdev/R-review-architecture/architecture-review-template.md</Path>`
|
|
131
|
-
- 提案转 Ticket:`<Path>{roots.workflows}/specdev/R-review-architecture/proposal-to-ticket.md</Path>`
|
|
93
|
+
返回分支、报告完整路径、审查范围/排除范围、代码证据、候选结论、实际验证与未验证项;有选择时再返回相应设计树/下一 Work。结构检查不证明设计判断正确,不能把弱候选包装成最佳推荐。
|
|
@@ -64,5 +64,6 @@ status: draft
|
|
|
64
64
|
|
|
65
65
|
## 5. 下一步
|
|
66
66
|
|
|
67
|
-
-
|
|
67
|
+
- 当前请求:report / selected-design。report 到此完成,访谈状态可为 unselected;无高置信候选也可交付。
|
|
68
|
+
- 用户选择原文与候选 ID:仅 selected-design 填写;未选择时不虚构结论、不自动转票。
|
|
68
69
|
- 达成共识的接受项进入 `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`。
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# 已选架构候选的设计与转票
|
|
2
|
+
|
|
3
|
+
用户选定一个候选后读取;保持审查报告和 change 内决策同步,不修改生产代码。
|
|
4
|
+
|
|
5
|
+
### 3. 访谈用户选择的一个候选
|
|
6
|
+
|
|
7
|
+
用户选择候选后,调用 `<Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path>`,用完整 frontier 遍历约束、依赖、deep module 形状、seam 后面的内容和保留测试。
|
|
8
|
+
|
|
9
|
+
决策结晶时保持领域模型同步:
|
|
10
|
+
|
|
11
|
+
- 新概念加入 change CONTEXT;永久 CONTEXT 不存在时延迟到归档提升;
|
|
12
|
+
- 模糊术语当场精炼;
|
|
13
|
+
- 用户的选择同时难以逆转、没有上下文会令人惊讶且来自真实权衡时,询问是否记录 ADR;任一条件不满足就留在 LOG/Ticket,不制造 ADR;
|
|
14
|
+
- 替代 interface 需要探索时使用 `<Path>{roots.workflows}/specdev/common/rules/design-it-twice.md</Path>`;
|
|
15
|
+
- 如果候选最终只是把复杂性搬家,而不是删掉它,在访谈中直接回退,不把它升级成 Ticket。
|
|
16
|
+
|
|
17
|
+
将选择、访谈状态与结论同步到 Markdown;每次运行只访谈用户选择的候选,不批量迫使用户决定所有卡片。
|
|
18
|
+
|
|
19
|
+
**完成标准**:被选候选的设计树达到共识或明确 blocked;领域词汇、LOG、ADR 和审查报告一致。
|
|
20
|
+
|
|
21
|
+
### 4. 转化为执行工作
|
|
22
|
+
|
|
23
|
+
只有被接受且有具体变更压力的提案进入 `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`。加载 `<Path>{roots.workflows}/specdev/R-review-architecture/proposal-to-ticket.md</Path>`,按 Prefactor、Standard 或 Deep/expand-contract 建立 Ready 治理;只有能删除复杂性的提案才继续,纯重排和 thin wrapper 不进入 Ticket。
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# 架构审查准则
|
|
2
2
|
|
|
3
|
-
本准则只在 `<Path>{roots.workflows}/specdev/R-review-architecture/R-review-architecture.md</Path>`
|
|
3
|
+
本准则只在 `<Path>{roots.workflows}/specdev/R-review-architecture/R-review-architecture.md</Path>` 激活时生效。它把实际维护压力转成候选筛选和排序规则;每个结论都要有路径、调用或测试证据。
|
|
4
4
|
|
|
5
|
-
使用 `<Path>{roots.workflows}/specdev/common/rules/codebase-design.md</Path>` 的术语:module、interface、depth、seam、adapter、leverage、locality
|
|
5
|
+
使用 `<Path>{roots.workflows}/specdev/common/rules/codebase-design.md</Path>` 的术语:module、interface、depth、seam、adapter、leverage、locality。优先保持项目共享含义;中文解释可与专业词并列,不要求机械复述每个词。
|
|
6
6
|
|
|
7
7
|
## 重点观察
|
|
8
8
|
|