@namewta/speculo 1.0.19 → 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 +7 -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 +156 -28
- package/template/canonical/canonical-specdev-grill-with-docs.md +153 -31
- package/template/canonical/canonical-specdev-spec.md +153 -27
- package/template/canonical/canonical-specdev-tickets.md +153 -27
- package/template/canonical/canonical-specdev-wayfinder.md +142 -27
- package/template/commands/retro.md +11 -9
- 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/{speculo-retro/references/entry-procedure.md → retrospective/SKILL.md} +12 -8
- package/template/skills/{speculo-retro → retrospective}/references/friction-taxonomy.md +22 -13
- package/template/skills/{speculo-retro → retrospective}/references/issue-drafting-sop.md +10 -20
- 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/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/specdev/A-archive-and-consolidate/consolidation-interview.md +3 -3
- package/template/workflows/specdev/C-code-review/C-code-review.md +1 -1
- package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +6 -0
- package/template/workflows/specdev/G-grill-with-docs/references/interview-procedure.md +6 -6
- package/template/workflows/specdev/I-implement/references/implementation-procedure.md +1 -1
- package/template/workflows/specdev/I-implement/tdd-rules.md +4 -0
- package/template/workflows/specdev/I-init-setup/config-template.json +5 -1
- package/template/workflows/specdev/INDEX.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 -3
- 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/references/selected-design.md +1 -1
- package/template/workflows/specdev/README.md +13 -2
- package/template/workflows/specdev/S-spec/S-spec.md +4 -0
- package/template/workflows/specdev/T-tickets/T-tickets.md +4 -0
- package/template/workflows/specdev/T-triage/T-triage.md +31 -25
- 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 +10 -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/common/rules/artifact-contract.md +7 -0
- package/template/workflows/specdev/common/rules/change-completion.md +6 -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/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 -227
- 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/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
|
@@ -23,7 +23,7 @@ C 是独立 review 入口,不实施修复。它拥有 `<Path>{roots.state}/spe
|
|
|
23
23
|
|
|
24
24
|
## 流程
|
|
25
25
|
|
|
26
|
-
1. **解析固定点**:使用 `git rev-parse` 把固定点和 HEAD 固定为 SHA;PR 先通过 `<Path>{roots.
|
|
26
|
+
1. **解析固定点**:使用 `git rev-parse` 把固定点和 HEAD 固定为 SHA;PR 先通过 `<Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path>` 的 `pr-read` 获得 base/head SHA,并确保对应对象可在本地解析。
|
|
27
27
|
2. **冻结输入**:记录 `git diff <fixed>...<head>` 和 `git log <fixed>..<head> --oneline`。引用无效或 diff 为空时失败,不创建报告。
|
|
28
28
|
3. **发现来源**:调用 `<Path>{roots.workflows}/specdev/common/skills/code-review/SKILL.md</Path>`;规范来源缺失时经确认跳过规范轴,标准轴继续。
|
|
29
29
|
4. **隔离审查**:仅按公共 Skill 的完整输入复用门接受既有结果;需要执行的轴在平台支持时并行 reviewer,否则用两个独立完整输入包顺序执行。两轴不得读取对方 finding。
|
|
@@ -69,3 +69,9 @@ node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> \
|
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
根因确认后将本 Work 加入 `works_run` 并清空 `current_work`,返回 diagnosis 和下一 Work:局部修复进入 Tickets/I,公共行为或高风险进入 S/Tickets,缺 seam 进入 R,仍无根因则保持 blocked 或进入 W。
|
|
72
|
+
|
|
73
|
+
## 脱敏与强制变异证据
|
|
74
|
+
|
|
75
|
+
在日志、报告和重现材料中移除 token、Cookie、认证头、秘密配置、个人数据及机器绝对路径;保留项目相对定位和必要错误形态。原始敏感数据不进入长期工件。
|
|
76
|
+
|
|
77
|
+
如果使用强制变异检验测试敏感性,先记录未变异文件的 hash/diff,实际修改目标后读取 git diff 与运行路径,证明变异已落到执行文件。只有测试因预期行为断言失败才算有效 red;编译错误、未选中测试、变异未落地均为无效证据。恢复原内容,复跑基线并核对 diff。D 输出诊断及修复不变量,正式修复仍交 I。
|
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
|
|
41
41
|
分别使用:
|
|
42
42
|
|
|
43
|
-
- `<Path>{roots.workflows}/specdev/
|
|
43
|
+
- `<Path>{roots.workflows}/specdev/common/rules/adr-format.md</Path>`
|
|
44
44
|
- `<Path>{roots.workflows}/specdev/G-grill-with-docs/log-format.md</Path>`
|
|
45
|
-
- `<Path>{roots.workflows}/specdev/
|
|
45
|
+
- `<Path>{roots.workflows}/specdev/common/rules/context-format.md</Path>`
|
|
46
46
|
- `<Path>{roots.workflows}/specdev/common/schemas/design-tree.schema.json</Path>`
|
|
47
47
|
|
|
48
48
|
恢复时先读取四份工件,按 design tree 的节点状态恢复,避免重复询问已关闭问题。
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
|
|
91
91
|
### 5. 同步 change-local 领域模型
|
|
92
92
|
|
|
93
|
-
加载 `<Path>{roots.workflows}/specdev/
|
|
93
|
+
加载 `<Path>{roots.workflows}/specdev/common/rules/domain-modeling.md</Path>`。每轮先写 LOG,再把已确认且本 change 下游必须使用的项目规范术语同步到 change CONTEXT,最后把同时满足三个准入条件、已成为本 change 合同的架构决定写入 change ADR。
|
|
94
94
|
|
|
95
95
|
历史轨迹只留在 LOG;未确认选项不写成已接受 ADR;已有 change ADR 被替代时建立 supersedes 链。同步只更新本 change 工件,不创建、合并或改写永久 `context/`、`adr/`;它记录共识生长过程,不授权产品实现。
|
|
96
96
|
|
|
@@ -127,8 +127,8 @@ frontier 为空时,向用户确认设计树的每个分支均已走过且已
|
|
|
127
127
|
|
|
128
128
|
- 质询协议:`<Path>{roots.workflows}/specdev/G-grill-with-docs/grilling-protocol.md</Path>`
|
|
129
129
|
- 设计树模板:`<Path>{roots.workflows}/specdev/G-grill-with-docs/design-tree-template.json</Path>`
|
|
130
|
-
- 领域建模:`<Path>{roots.workflows}/specdev/
|
|
131
|
-
- ADR 格式:`<Path>{roots.workflows}/specdev/
|
|
132
|
-
- CONTEXT 格式:`<Path>{roots.workflows}/specdev/
|
|
130
|
+
- 领域建模:`<Path>{roots.workflows}/specdev/common/rules/domain-modeling.md</Path>`
|
|
131
|
+
- ADR 格式:`<Path>{roots.workflows}/specdev/common/rules/adr-format.md</Path>`
|
|
132
|
+
- CONTEXT 格式:`<Path>{roots.workflows}/specdev/common/rules/context-format.md</Path>`
|
|
133
133
|
- LOG 格式:`<Path>{roots.workflows}/specdev/G-grill-with-docs/log-format.md</Path>`
|
|
134
134
|
- Stakeholder 问卷:`<Path>{roots.workflows}/specdev/G-grill-with-docs/stakeholder-questionnaire.md</Path>`
|
|
@@ -74,7 +74,7 @@ Ticket 模式下,Lead 根据 Ticket 独立性、路径冲突、上下文、风
|
|
|
74
74
|
|
|
75
75
|
加载 `<Path>{roots.workflows}/specdev/common/rules/codebase-design.md</Path>`,检查模块、接口、类型、不变量、顺序/错误/性能语义、接缝、适配器、依赖分类、测试观察点和既有公共合同。
|
|
76
76
|
|
|
77
|
-
存在多个不改变上层契约的局部设计时,可运行 `<Path>{roots.workflows}/specdev/
|
|
77
|
+
存在多个不改变上层契约的局部设计时,可运行 `<Path>{roots.workflows}/specdev/common/rules/design-it-twice.md</Path>`。超出 Ticket 或改变产品/公共合同/数据/兼容/安全时,返回架构审查、Grill、Spec 或 Ticket owner。陌生外部依赖使用 research Skill。
|
|
78
78
|
|
|
79
79
|
**完成标准**:局部设计与上层契约一致,稳定接缝和依赖策略明确。
|
|
80
80
|
|
|
@@ -15,3 +15,7 @@
|
|
|
15
15
|
- 一个循环只有一个 seam、一个测试和一个最小实现;
|
|
16
16
|
- 测试没有通过删除、跳过、吞错或放宽断言制造绿色;
|
|
17
17
|
- review 前没有以“顺手重构”扩大切片。
|
|
18
|
+
|
|
19
|
+
## 强制变异验证
|
|
20
|
+
|
|
21
|
+
使用强制变异时,先保存基线 hash/diff,修改后核对实际执行文件的 diff 与测试选择。只有预期行为断言 red 才有效;编译错误、错测或变异未落地均不计。恢复原内容、复跑基线并核对 diff,把全过程记入 Evidence。诊断协议见 <Path>{roots.workflows}/specdev/D-diagnose-bugs/D-diagnose-bugs.md</Path>。
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schema_version":
|
|
2
|
+
"schema_version": 6,
|
|
3
3
|
"interaction_language": "zh-CN",
|
|
4
4
|
"artifact_language": "zh-CN",
|
|
5
5
|
"git": {
|
|
@@ -23,5 +23,9 @@
|
|
|
23
23
|
"require_evidence": true,
|
|
24
24
|
"ui_design_default_candidates": 3,
|
|
25
25
|
"ui_design_max_candidates": 4
|
|
26
|
+
},
|
|
27
|
+
"github": {
|
|
28
|
+
"include_external_prs": false,
|
|
29
|
+
"labels": {}
|
|
26
30
|
}
|
|
27
31
|
}
|
|
@@ -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
|
|
@@ -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,12 +2,12 @@
|
|
|
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
|
|
|
@@ -15,6 +15,10 @@ keywords: [prototype, UI 原型, 风格检测, 设计系统, HTML, CSS, 交互,
|
|
|
15
15
|
|
|
16
16
|
激活时读取 `<Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>`,按当前步骤定位输入和证据。
|
|
17
17
|
|
|
18
|
+
## 分支选择
|
|
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 设计权威与离线交付保持。
|
|
21
|
+
|
|
18
22
|
## 输入与所有权
|
|
19
23
|
|
|
20
24
|
- 必需输入:目标项目或新产品设想、核心用户任务,以及当前 SpecDev change。
|
|
@@ -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,7 +11,7 @@
|
|
|
11
11
|
- 新概念加入 change CONTEXT;永久 CONTEXT 不存在时延迟到归档提升;
|
|
12
12
|
- 模糊术语当场精炼;
|
|
13
13
|
- 用户的选择同时难以逆转、没有上下文会令人惊讶且来自真实权衡时,询问是否记录 ADR;任一条件不满足就留在 LOG/Ticket,不制造 ADR;
|
|
14
|
-
- 替代 interface 需要探索时使用 `<Path>{roots.workflows}/specdev/
|
|
14
|
+
- 替代 interface 需要探索时使用 `<Path>{roots.workflows}/specdev/common/rules/design-it-twice.md</Path>`;
|
|
15
15
|
- 如果候选最终只是把复杂性搬家,而不是删掉它,在访谈中直接回退,不把它升级成 Ticket。
|
|
16
16
|
|
|
17
17
|
将选择、访谈状态与结论同步到 Markdown;每次运行只访谈用户选择的候选,不批量迫使用户决定所有卡片。
|
|
@@ -62,11 +62,12 @@ CLI 初始化和刷新保持原 namespace、三方配置合并、schema migrator
|
|
|
62
62
|
- **I-init-setup** — 初始化设置:初始化 SpecDev 的语言、配置、全局状态、本地 change 追踪、领域知识布局、验证命令和并发治理。
|
|
63
63
|
- **L-learn-change** — Change 学习:在开发完成后围绕当前 SpecDev change 回答问题,并用面向零专业背景读者的 Markdown 与 ASCII 图解持续记录理解。
|
|
64
64
|
- **P-goal-plan** — Goal 规划与执行:为单个已拆票 change 或多个 Ready change 规划、执行或恢复 Goal;只在用户要求交付编排或已有 map 需推进时使用,不代替需求探索和 Ticket 编写。
|
|
65
|
-
- **P-prototype** — UI
|
|
65
|
+
- **P-prototype** — 逻辑与 UI 原型:按需验证离线逻辑模型,或检测现有项目的 UI 事实,按产品任务推荐并逐步选择设计风格,生成持久化设计系统文档、多风格 HTML 对照和可运行 HTML/CSS/JS 原型。
|
|
66
|
+
- **R-retro** — 开发复盘:对指定开发活动、环境或协作流程的已观察摩擦做证据化复盘,形成根因、改进 owner 与可检验提案;代码讲解使用 L-learn-change,Speculo 产品反馈使用 retro 命令。
|
|
66
67
|
- **R-review-architecture** — 架构审查:从用户指定范围或 Git 热点扫描代码库中的结构性坏味道、代码 judo 机会和维护性风险,以中文 Markdown 记录高置信候选,并对用户选择的一个方案运行设计树访谈。
|
|
67
68
|
- **S-spec** — 编写 Spec:综合已知事实、设计决定、诊断与代码现状,产出以外部行为和验收合同为权威的 Ready Spec。
|
|
68
69
|
- **T-tickets** — 编写计划型 Tickets:将已澄清的 Spec 或等价获批计划拆为可验收的实施 Ticket,并绑定真实项目 Skill;不用于探索未知需求或执行代码。
|
|
69
|
-
- **T-triage** —
|
|
70
|
+
- **T-triage** — 请求分诊与 GitHub 交付:摄入与核验外部请求、投影本地完成事实、交付 PR,或按明确目标处理 CI、安全告警、npm/GitHub Release 预检、发布和恢复;清晰的本地需求直接进入对应 Work。
|
|
70
71
|
- **W-wayfinder** — 探索大需求与 Change 边界:大需求的 change 边界或实施路线尚不可见时建立探索地图,并分别澄清各 change;已有清晰 Spec 时不触发。
|
|
71
72
|
|
|
72
73
|
<!-- AUTO-INDEX-END -->
|
|
@@ -84,3 +85,13 @@ node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> --
|
|
|
84
85
|
```
|
|
85
86
|
|
|
86
87
|
支持 triage、diagnosis、grill、spec、tickets、goal-plan、implement、learn-change、review、prototype、wayfinder、complete。Goal 总控通过 P 的 map-control 参考使用只读控制器;它不授权或自动执行。只有进行完成转换时必须读取 `<Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>`,票全 done 不替代整体验收。
|
|
88
|
+
|
|
89
|
+
## 远程交付、逻辑原型与复盘
|
|
90
|
+
|
|
91
|
+
T 拥有 <Path>{roots.state}/specdev/triage-runs/TRI-###.md</Path>,首次独立 CI/安全/发布操作时按模板建立,恢复更新原记录。此 namespace 不占用 change.current_work、不写开发状态、不参与默认归档门。其他入口只复用 T 的 remote-operations 时,原调用方仍拥有报告,不创建 TRI 或 change。
|
|
92
|
+
|
|
93
|
+
PR 由 T 写入 <Path>{roots.state}/specdev/changes/{change}/pull-requests/PR-###.md</Path>;R-retro 写入 <Path>{roots.state}/specdev/changes/{change}/retro/RETRO-###.md</Path>;P 的逻辑原型写入 <Path>{roots.state}/specdev/changes/{change}/prototypes/LOGIC-NNN/</Path>。均首次按最小未用 ID 创建,更新原子写入并重读;schema 在 common/schemas,验证由 common/tools/validate-specdev.mjs 负责。
|
|
94
|
+
|
|
95
|
+
config schema v6 增加 github.include_external_prs(boolean,默认 false)与 github.labels(语义名→仓库标签的字符串映射,默认空)。I 初始化,CLI 从合法 v5 通过 staging 升级;已有语言、执行、验证与规划配置保留。标签缺失只阻塞对应远程写操作。全局 status v5 与 change status v6 不变。
|
|
96
|
+
|
|
97
|
+
入口选择:需要活动复盘进入 <Path>{roots.workflows}/specdev/R-retro/R-retro.md</Path>;包发布进入 T 的 release,Ticket→Issue 仍为 publish。Completed/archived 对象的复盘建立独立 review-only change,不修改原完成状态。新工件版本均为 v1,triage 新写入为 v2;旧 v1 仅历史只读,活动分支由 T 明确重验后转换,不由 CLI 批改。
|
|
@@ -28,3 +28,7 @@ node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> --
|
|
|
28
28
|
回读真实 Spec、Ready 结论与状态,按激活合同只更新本 change 与全局索引的所属项。返回 Spec 完整路径、主要行为/验收合同、范围、验证接缝、风险、高影响缺口和验证结果。成功完成本 Work 才更新 `works_run` 并清空 `current_work`;可恢复失败保留入口。
|
|
29
29
|
|
|
30
30
|
只有用户请求或工作流已显式串联时才进入 `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`;产出 Ready Spec 本身不授权实施。
|
|
31
|
+
|
|
32
|
+
## 原型证据
|
|
33
|
+
|
|
34
|
+
可以引用已验证 LOGIC/UI 原型中的行为、边界与已确认决定,记录具体 locator 和验证证据;源码片段可承载设计选择,但不自动成为生产实现。未闭合高影响产品决定返回 G,S 综合已确认设计而不重新开启无关访谈。
|
|
@@ -34,3 +34,7 @@ node <Path>{roots.workflows}/specdev/common/tools/ticket-control.mjs</Path> --ma
|
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
需要正式 Goal、多 change、迁移或跨票 Gate 时交给 `<Path>{roots.workflows}/specdev/P-goal-plan/P-goal-plan.md</Path>`;少量线性票可从 map 按已授权范围调用 `<Path>{roots.workflows}/specdev/I-implement/I-implement.md</Path>`。不得以“精简”为理由静默更换默认工具或少交付。
|
|
37
|
+
|
|
38
|
+
## 原型证据
|
|
39
|
+
|
|
40
|
+
可以引用已验证 LOGIC/UI 原型中的行为、边界与已确认决定,记录具体 locator 和验证证据;源码片段可承载设计选择,但不自动成为生产实现。未闭合高影响产品决定返回 G,S 综合已确认设计而不重新开启无关访谈。
|
|
@@ -2,44 +2,50 @@
|
|
|
2
2
|
id: specdev/triage
|
|
3
3
|
type: workflow-entry
|
|
4
4
|
workflow: specdev
|
|
5
|
-
name:
|
|
6
|
-
description:
|
|
7
|
-
keywords: [triage,
|
|
5
|
+
name: 请求分诊与 GitHub 交付
|
|
6
|
+
description: 摄入与核验外部请求、投影本地完成事实、交付 PR,或按明确目标处理 CI、安全告警、npm/GitHub Release 预检、发布和恢复;清晰的本地需求直接进入对应 Work。
|
|
7
|
+
keywords: [triage, issue, PR, intake, reconcile, publish, capture, queue, release, npm, CI, security, recover]
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
#
|
|
10
|
+
# 请求分诊与 GitHub 交付
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
激活后读取 <Path>{roots.workflows}/specdev/README.md</Path> 与 <Path>{roots.workflows}/specdev/common/rules/activation-and-memory.md</Path>。本地 Spec/Ticket/Map/Goal/Evidence 始终是开发权威,GitHub 不成为开发 tracker。
|
|
13
13
|
|
|
14
14
|
## 选择模式
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
只读取选中分支,publish 专指 Ticket→Issue,release 专指包/GitHub Release。
|
|
17
17
|
|
|
18
|
-
|
|
|
18
|
+
| 模式 | 协议 | owner 与结果 |
|
|
19
19
|
|---|---|---|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
20
|
+
| queue | <Path>{roots.workflows}/specdev/T-triage/queue-protocol.md</Path> | 只读候选,不创建 change |
|
|
21
|
+
| intake | <Path>{roots.workflows}/specdev/T-triage/intake-protocol.md</Path> | 冻结 source/triage,验证与路由 |
|
|
22
|
+
| reconcile | <Path>{roots.workflows}/specdev/T-triage/reconcile-protocol.md</Path> | 来源 Issue 的 external_action |
|
|
23
|
+
| publish | <Path>{roots.workflows}/specdev/T-triage/publish-protocol.md</Path> | 已完成 Ticket 的 publish 账本 |
|
|
24
|
+
| capture | <Path>{roots.workflows}/specdev/T-triage/capture-protocol.md</Path> | workspace capture,保持 Issue open |
|
|
25
|
+
| pr-delivery | <Path>{roots.workflows}/specdev/T-triage/pr-delivery-protocol.md</Path> | change 的 PR 记录 |
|
|
26
|
+
| ci-security | <Path>{roots.workflows}/specdev/T-triage/ci-security-protocol.md</Path> | 独立 TRI 操作记录 |
|
|
27
|
+
| release-preflight | <Path>{roots.workflows}/specdev/T-triage/release-preflight.md</Path> | 只读预检与 TRI 记录 |
|
|
28
|
+
| release | <Path>{roots.workflows}/specdev/T-triage/release-protocol.md</Path> | 已授权发布及逐目标回执 |
|
|
29
|
+
| recover | <Path>{roots.workflows}/specdev/T-triage/release-recovery.md</Path> | 恢复指定原记录 |
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
远程原语统一见 <Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path>。其他调用方可直接复用该协议,不激活 T,也不初始化 SpecDev。
|
|
26
32
|
|
|
27
|
-
##
|
|
33
|
+
## 定位与状态
|
|
28
34
|
|
|
29
|
-
|
|
30
|
-
2. capture **既不创建也不选择 change**,不写 `current_work`,不读取 change-completion;只使用可缺省的 `<Path>{roots.state}/specdev/capture.md</Path>`。`mode=capture` 不写入 change 的 triage。
|
|
31
|
-
3. 其余三模式读取 `<Path>{roots.state}/specdev/changes/{change}/source.md</Path>`、`<Path>{roots.state}/specdev/changes/{change}/triage.md</Path>` 和状态。`current_work` 为空才登记本 Work;他项占用先恢复或显式 handoff。publish 的轻量来源补建仅按其协议进行,不虚构 locator。
|
|
32
|
-
4. 按选中协议执行。远程写入必须有该动作的真实授权,未授权时远程写入为零;通过 `<Path>{roots.skills}/github-npm-ops/SKILL.md</Path>` 操作。失败保留原账本与检查点,不以远程失败改写本地完成事实。
|
|
35
|
+
从 workspace 解析 roots。intake 可创建/恢复 change;reconcile/publish 只选择满足 <Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path> 的现有 change。多个候选先消歧;冻结来源不覆盖。
|
|
33
36
|
|
|
34
|
-
|
|
37
|
+
capture 不创建也不选择 change,不写 current_work,只使用 <Path>{roots.state}/specdev/capture.md</Path>。queue 只返回候选。CI/发布独立记录写入 <Path>{roots.state}/specdev/triage-runs/TRI-###.md</Path>;T 在首次具体操作时选最小未用 ID,按 <Path>{roots.workflows}/specdev/T-triage/triage-run-template.md</Path> 原子写入并重读,不占用 change 状态。recover 使用原账本 owner。
|
|
38
|
+
|
|
39
|
+
尚未完成 change 的 intake 在 current_work 为空时登记 specdev/triage,他项占用先恢复或 handoff;成功去重追加 works_run 并清空 current_work,可恢复失败保留。已完成 change 的 reconcile/publish 和 PR 交付只更新各自账本,不占用 current_work,不重开实现状态。PR 不能修改来源关闭、Ticket publish 或 capture 状态。远程失败不能把已完成代码状态改回未完成。
|
|
35
40
|
|
|
36
|
-
|
|
41
|
+
## 验证与返回
|
|
37
42
|
|
|
38
|
-
|
|
39
|
-
node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> --stage triage <Path>{roots.state}/specdev/changes/{change}</Path>
|
|
40
|
-
node <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path> --capture <Path>{roots.state}/specdev/capture.md</Path>
|
|
41
|
-
```
|
|
43
|
+
使用 <Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path>:
|
|
42
44
|
|
|
43
|
-
|
|
45
|
+
- intake/reconcile/publish:--stage triage,输入当前 change。
|
|
46
|
+
- pr-delivery:--stage pr-delivery,输入当前 change。
|
|
47
|
+
- capture:仅账本存在时 --capture,不为验证创建账本。
|
|
48
|
+
- 独立 TRI:--triage-run,输入原记录。
|
|
49
|
+
- queue:报告检索范围、分页、未知项,不制造完成证据。
|
|
44
50
|
|
|
45
|
-
|
|
51
|
+
回读真实工件、账本和远程回执,返回结果、未完成项、验证命令及完整恢复位置。external_action 的 closed/waived/not-applicable 与 publish_action 的 not-requested/published/waived 各自满足归档门;pending/failed 恢复原模式。PR 仅 requested=true 的未闭合交付挡门,独立发布不自动挡 change 归档。归档交 <Path>{roots.workflows}/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md</Path>。
|
|
@@ -29,7 +29,7 @@ capture **不得**:
|
|
|
29
29
|
失败即停,零远程写入。已有账本行保持原 state。
|
|
30
30
|
|
|
31
31
|
1. 每条纳入记录有 id(`YYYY-MM-DD-<kebab>`)、现在时摘要、且 `kind` 为 bug、feature、refactor、investigation、operations、documentation 或 review。禁止 `mixed`。
|
|
32
|
-
2. 调用 `<Path>{roots.
|
|
32
|
+
2. 调用 `<Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path>` 能读目标 repo、能 dry-run `issue-create`。本协议只用 `issue-search` / `issue-create`。
|
|
33
33
|
3. 分类映射见 `<Path>{roots.workflows}/specdev/T-triage/references/classification-map.md</Path>`。缺 type 标签时 dry-run 表列出将创建的标签,授权后才 `gh label create`。
|
|
34
34
|
4. 用户看见完整 dry-run 表(id、标题、标签、正文、reason)并给出 **本次** 明确确认。
|
|
35
35
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# CI 与安全告警
|
|
2
|
+
|
|
3
|
+
读取 <Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path> 和 <Path>{roots.workflows}/specdev/T-triage/triage-run-template.md</Path>。独立运行记录由 T 写入 <Path>{roots.state}/specdev/triage-runs/TRI-###.md</Path>,不创建 change 或占用 current_work。
|
|
4
|
+
|
|
5
|
+
固定 repo、run/alert ID、commit SHA、workflow、时间和可见权限,使用 gh run view / gh api 读取日志与分页结果。先脱敏再持久化。
|
|
6
|
+
|
|
7
|
+
CI:区分代码/类型/测试、工具版本、依赖、构建产物与临时环境问题。依据同 SHA 的复现、日志、历史与环境差异判断;两次失败不是“非 flaky”的证明。rerun 必须有授权和验证假设,不能靠反复重跑掩盖失败。修复交 <Path>{roots.workflows}/specdev/D-diagnose-bugs/D-diagnose-bugs.md</Path> / <Path>{roots.workflows}/specdev/I-implement/I-implement.md</Path>,记录关联 change 后恢复原 run。
|
|
8
|
+
|
|
9
|
+
安全:按项目政策读取 Dependabot、secret scanning、code scanning 的事实与影响。凭据泄露优先提出撤销/轮换方案,敏感细节保留在受控渠道;公开回复、关闭/删除内容、撤销凭据和修改配置须有准确动作授权。权限不足记 unknown,不能把无法读取当作零告警。修复后依据真实证据关闭,CI 绿不等于依赖安全。
|
|
10
|
+
|
|
11
|
+
不设默认周期或统一 SLA,不自动合并、安装工具或创建监控。返回分类、证据、待授权动作、路由和恢复位置;只有记录完整并通过 --triage-run 校验才标 completed。
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Intake Protocol
|
|
2
2
|
|
|
3
|
-
仅在 Triage `mode=intake`
|
|
3
|
+
仅在 Triage `mode=intake` 时加载。本协议把外部输入转换为不可静默覆盖的本地来源快照。默认不回写源 Issue 标签;显式要求的标签更新按远程协议单独授权、记录并重读。
|
|
4
4
|
|
|
5
5
|
## 1. 解析来源
|
|
6
6
|
|
|
7
|
-
按以下优先级确定 `source_type`:GitHub Issue/PR URL、普通 URL、项目相对文件、用户粘贴内容、当前对话。来源为 GitHub 时调用 `<Path>{roots.
|
|
7
|
+
按以下优先级确定 `source_type`:GitHub Issue/PR URL、普通 URL、项目相对文件、用户粘贴内容、当前对话。来源为 GitHub 时调用 `<Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path>` 的 `issue-read` 或 `pr-read`;其他 URL 使用当前环境可用的只读读取能力。读取失败时保持 blocked,并请求用户提供导出或粘贴内容。
|
|
8
8
|
|
|
9
9
|
只记录规范化 URL、项目相对 Path 或 null;不保存机器绝对路径、认证信息、Cookie 或令牌。
|
|
10
10
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
在 active 和 archive 的 `<Path>{roots.state}/specdev/changes/{change}/source.md</Path>` 或对应归档 Source 中查询相同 `canonical_locator`:
|
|
14
14
|
|
|
15
15
|
- locator 与 hash 相同:恢复已有 change,不创建副本;
|
|
16
|
-
- locator 相同但 hash
|
|
16
|
+
- locator 相同但 hash 不同:展示漂移,不覆盖原快照;仍属当前活动 change 的请求写入 sources/SRC-###.md,supersedes_source 指向前一快照,并更新 triage.source 指向有效版本。已完成/归档或目标范围改变时创建新 change,引用原来源;不重开归档原件;
|
|
17
17
|
- 没有稳定 locator:按用户指定 change 或新 change 继续。
|
|
18
18
|
|
|
19
19
|
若 `<Path>{roots.state}/specdev/capture.md</Path>` 存在,且某行 `url` 或 marker 对应当前 `canonical_locator`:将该行标为 `intaken`。不得把多条 capture 行合并进同一个 source。默认一条 capture 记录对应一次未来 intake / 一个 Change。相关但目标不清时先走 `<Path>{roots.workflows}/specdev/W-wayfinder/W-wayfinder.md</Path>`。缺失捕获账本不影响 intake。
|
|
@@ -35,7 +35,7 @@ GitHub 来源保存 title、body、author、state、labels、created/updated 和
|
|
|
35
35
|
- 重复和漂移分支有唯一结果;
|
|
36
36
|
- 相似归档/ADR 项已展示或明确无匹配;
|
|
37
37
|
- 失败没有生成伪造或不完整的 Ready source;
|
|
38
|
-
-
|
|
38
|
+
- 未请求标签回写时无远程写入;已请求动作有独立授权与回执。
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
## 分诊与交接
|
|
@@ -55,3 +55,9 @@ GitHub 来源保存 title、body、author、state、labels、created/updated 和
|
|
|
55
55
|
| 小型明确变更 | `<Path>{roots.workflows}/specdev/T-tickets/T-tickets.md</Path>`,或获批 Direct Spec |
|
|
56
56
|
|
|
57
57
|
只有目标、范围、验证、路径和风险全部明确且用户批准 Direct Spec,`ready_for_implementation` 才能为 true。相似的归档拒绝或 ADR 只作为决策证据,不自动 wontfix 或回写远程标签。
|
|
58
|
+
|
|
59
|
+
## v2 核验与快照演进
|
|
60
|
+
|
|
61
|
+
摄入时读取 <Path>{roots.workflows}/specdev/T-triage/references/issue-pr-policy.md</Path>。填写 disposition、verification、remote_actions;ready-for-agent 仅在 verification=passed 时使用,仍不代替 Ticket Ready。读取 PR 必须获得完整分页、reviews/review comments/diff、base/head SHA 和 fetched_at,缺失或漂移保持 blocked。
|
|
62
|
+
|
|
63
|
+
<Path>{roots.state}/specdev/changes/{change}/source.md</Path> 不覆盖;后续快照写 sources/SRC-###.md,明确 replaces 和有效版本,按 <Path>{roots.workflows}/specdev/common/rules/artifact-contract.md</Path> 管理。活动 triage v1 只在用户选择该 T 分支后,以原始内容为证据补齐 v2 字段和验证;保留旧版本证据,不自动批量迁移。裸编号先查询对象类型;已有实现、重复、明确拒绝分别记录,已有 PR 输出剩余工作 brief。
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# PR 交付
|
|
2
|
+
|
|
3
|
+
读取 <Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path> 与 <Path>{roots.workflows}/specdev/T-triage/references/issue-pr-policy.md</Path>。选择明确 change、目标 repo、base/head,确认相关代码与本地验证 Evidence;不自动提交或 push。
|
|
4
|
+
|
|
5
|
+
按 <Path>{roots.workflows}/specdev/T-triage/pr-record-template.md</Path> 创建 <Path>{roots.state}/specdev/changes/{change}/pull-requests/PR-###.md</Path>,ID 取最小未用正整数。delivery_target 按请求登记 draft 或 ready;要求 ready 时创建 draft 只是中间步骤,仍挡交付门。T 拥有该记录;不修改 external_action、publish_action 或 capture。
|
|
6
|
+
|
|
7
|
+
1. 固定远程 base/head SHA,核对本地提交对象。未推送的 head 先报告所需独立 push 动作。
|
|
8
|
+
2. 读取目标仓库 PR 模板,形成 Summary、Evidence、Before/After(适用时)、Merge Risk/rollback;记录 AI 协助。Evidence 必须可追溯,未验证项目明确列出。
|
|
9
|
+
3. 固定 marker=specdev:<change>:PR-###,冻结正文摘要。更新已有 PR 前读取 expected-body-sha256 与 SHA,人工变更需比较并重新形成更新内容。
|
|
10
|
+
4. 执行 pr-create/pr-update 的 dry-run,展示精确动作;授权后执行 --apply。默认创建 draft。可审查切换需检查 verification=passed 并单独执行 pr-ready。
|
|
11
|
+
5. 读回 URL、正文、draft 状态与 SHA,原子更新记录并重读,运行 SpecDev --stage pr-delivery。失败保留原记录;超时先按 marker 和分支查询。
|
|
12
|
+
|
|
13
|
+
requested=false 或 waived 的记录不挡归档;明确请求且 pending/failed 的 PR 交付挡对应交付门,不回退已完成代码事实。创建成功不意味着 merge 或 release 已获授权。返回 PR、记录、验证和下一动作。
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 1
|
|
3
|
+
artifact: pull-request
|
|
4
|
+
change: <YYYY-MM-DD-topic>
|
|
5
|
+
id: PR-001
|
|
6
|
+
requested: true
|
|
7
|
+
delivery_target: draft
|
|
8
|
+
status: planned
|
|
9
|
+
repo: owner/repo
|
|
10
|
+
base_sha: <40-hex>
|
|
11
|
+
head_sha: <40-hex>
|
|
12
|
+
body_sha256: <64-hex>
|
|
13
|
+
verification: pending
|
|
14
|
+
url: null
|
|
15
|
+
updated_at: <ISO-8601>
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# PR 交付记录
|
|
19
|
+
|
|
20
|
+
## Summary
|
|
21
|
+
问题、最终行为、仓库模板及 AI 协助说明。
|
|
22
|
+
|
|
23
|
+
## Evidence
|
|
24
|
+
测试命令、退出码、固定提交、未验证项与证据引用。
|
|
25
|
+
|
|
26
|
+
## Before / After
|
|
27
|
+
适用时给出前后行为或视觉证据;不适用注明原因。
|
|
28
|
+
|
|
29
|
+
## Merge Risk
|
|
30
|
+
回退是否可行、影响范围、数据/兼容性风险和回退条件。
|
|
31
|
+
|
|
32
|
+
## Authorization
|
|
33
|
+
动作、准确目标与用户授权出处;无授权时仅 dry-run。
|
|
34
|
+
|
|
35
|
+
## Receipt
|
|
36
|
+
marker、number/URL、读回结果、状态与尝试。
|
|
37
|
+
|
|
38
|
+
## Recovery
|
|
39
|
+
失败步骤、已完成动作、远程漂移和恢复条件。
|
|
@@ -23,7 +23,7 @@ publish **不得**改 Ticket / Spec / Evidence / Goal / change completed 事实
|
|
|
23
23
|
|
|
24
24
|
1. 按 `<Path>{roots.workflows}/specdev/common/rules/change-completion.md</Path>` 重验本地完成。
|
|
25
25
|
2. 至少一张可发布票:status `done`,或用户选择纳入的 `cancelled`。没有 Ticket 文件(纯 Direct Spec)时停止;v1 不发 Change 级单 Issue。
|
|
26
|
-
3. 调用 `<Path>{roots.
|
|
26
|
+
3. 调用 `<Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path>` 能读目标 repo、能 dry-run `issue-create`。
|
|
27
27
|
4. 分类映射见 `<Path>{roots.workflows}/specdev/T-triage/references/classification-map.md</Path>`。缺 type 标签时 dry-run 表列出将创建的标签,授权后才 `gh label create`。
|
|
28
28
|
5. Change `classification` 为 `mixed` 时,确认表上每张纳入票都有 `kind`。
|
|
29
29
|
6. 用户看见完整 dry-run 表(标题、标签、正文、关闭评论、reason)并给出 **本次** 明确确认。
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 候选队列
|
|
2
|
+
|
|
3
|
+
输入明确 repo、检索范围与用户目标。先读 <Path>{roots.workflows}/specdev/T-triage/references/issue-pr-policy.md</Path>,只进行远程读取。返回候选编号、类型、作者关系、证据摘要、重复关系和建议次序,不创建 change。
|
|
4
|
+
|
|
5
|
+
默认查询 Issue。config.github.include_external_prs 为 true 或用户要求纳入时,额外读取 PR;队列中的外部作者排除 OWNER/MEMBER/COLLABORATOR。用户直接指定的 PR 不受该队列筛选限制。裸编号先查询真实对象类型,不能猜测 Issue/PR。
|
|
6
|
+
|
|
7
|
+
注明 query、时间、分页和覆盖范围;无法穷尽时明确不完整,不把“未查到”写成不存在。按影响、阻断程度与证据成熟度排序;尚未接受的候选不是开发 tracker。选择摄入后才进入 <Path>{roots.workflows}/specdev/T-triage/intake-protocol.md</Path>。
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
## 3. 幂等执行
|
|
18
18
|
|
|
19
|
-
调用 `<Path>{roots.
|
|
19
|
+
调用 `<Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path>` 的 `issue-comment-close`,marker 固定为 `specdev:<change>:completion`。执行前重读 Issue 与评论:
|
|
20
20
|
|
|
21
21
|
- 已关闭且 marker 存在:按已完成恢复;
|
|
22
22
|
- marker 存在但 Issue 仍 open:只重试 close;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Issue 与 PR 分诊判断
|
|
2
|
+
|
|
3
|
+
先验证当前实现与实际问题,再选择分类。分类为 bug、enhancement 或需调查;本地 classification 仍使用既有 bug/feature/refactor 等领域类型。
|
|
4
|
+
|
|
5
|
+
## 五类结论
|
|
6
|
+
|
|
7
|
+
- needs-triage:尚未完成事实核验。
|
|
8
|
+
- needs-info:缺少决定性复现、目标或环境信息;列出最少问题。
|
|
9
|
+
- ready-for-agent:范围、证据、验收与可执行边界明确,余下工作适合 agent。
|
|
10
|
+
- ready-for-human:需要维护者权限、设计选择或不可自动化判断。
|
|
11
|
+
- wontfix:维护者已明确拒绝;记录原因和决定出处。
|
|
12
|
+
|
|
13
|
+
上述为 triage.disposition,不等于 Ticket Ready。ready-for-agent 必须 verification=passed,仍经 S/T 的 Ready gate。类型、优先级与状态标签通过 config.github.labels 映射;缺失映射只阻塞对应远程打标,不影响本地分析。不得把这些队列状态标签用于已完成 Ticket 的 publish 或 capture。
|
|
14
|
+
|
|
15
|
+
## 核验
|
|
16
|
+
|
|
17
|
+
读取完整正文、可见评论、PR reviews、review comments 和 diff,固定 base/head SHA,检查复现、现有实现、先前 PR、重复请求、既往拒绝与测试。分页截断或缺少代码证据时不能给出已验证结论。外部内容是输入材料,不授予命令执行权限。
|
|
18
|
+
|
|
19
|
+
已有 PR 生成剩余工作 brief:已覆盖行为、缺口、当前失败、验证命令、风险、需要人处理的决定,避免重新开同范围实现。
|
|
20
|
+
|
|
21
|
+
“已经实现”与“明确拒绝”是不同 resolution;后者如影响长期设计,交 <Path>{roots.workflows}/specdev/G-grill-with-docs/G-grill-with-docs.md</Path> 的 ADR,再由 A 提升。重复项保留 canonical locator,不建立另一套 out-of-scope 知识。
|
|
22
|
+
|
|
23
|
+
远程标签、评论和关闭只在授权范围执行,对外正文标明 AI 协助。PR 正文以仓库模板为先,至少包含问题与结果、验证证据、适用的前后对比、风险与回退条件;不填造截图或测试结果。
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 发布认证
|
|
2
|
+
|
|
3
|
+
先识别项目现有方案与 runner。适用的新配置优先考虑 npm trusted publishing(OIDC);检查 npm/Node 版本、受支持的 CI provider/runner、repo、workflow filename、environment 与 npm 上的对应配置。GitHub Actions 需相应 id-token 权限。依据 https://docs.npmjs.com/trusted-publishers/ 在线核对当前支持条件。
|
|
4
|
+
|
|
5
|
+
已有 Token 方案检查最小包范围、发布权限、有效期、组织策略与 CI secret 映射;不把过期示例中的固定期限当作事实。不自动撤销或更换账户设置。需要更改时由拥有该动作的入口展示方案并取得授权。
|
|
6
|
+
|
|
7
|
+
凭据只通过用户受控的 secret 配置处理,不要求粘贴至对话、报告、命令参数或仓库文件,不把真实 Token 写入全局 .npmrc。npm publish --dry-run 不能证明真实发布认证成功;分别报告本地包检查和认证配置证据。
|
|
8
|
+
|
|
9
|
+
CI 只读依赖安装认证与发布写权限可能不同。不要因采用 OIDC 就删除仍用于安装私有包的既有凭据。
|