@namewta/speculo 1.0.19 → 1.0.21
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/D-project-deploy/D-project-deploy.md +1 -1
- package/template/workflows/ops/H-host-manage/H-host-manage.md +4 -0
- package/template/workflows/ops/H-host-manage/references/host-profiles.md +4 -0
- package/template/workflows/ops/I-initialize/I-initialize.md +1 -1
- package/template/workflows/ops/INDEX.md +2 -0
- package/template/workflows/ops/README.md +7 -3
- package/template/workflows/ops/S-server-connect/S-server-connect.md +5 -5
- package/template/workflows/ops/V-inventory-view/V-inventory-view.md +2 -0
- package/template/workflows/ops/common/CAPABILITIES.md +2 -0
- package/template/workflows/ops/common/USAGE.md +5 -5
- package/template/workflows/ops/common/WORKSPACE-USAGE.md +29 -2
- package/template/workflows/ops/common/examples/README.md +1 -1
- package/template/workflows/ops/common/examples/register.example.json +7 -3
- package/template/workflows/ops/common/examples/server-connection.example.json +11 -0
- package/template/workflows/ops/common/rules/deployment-layout.md +1 -1
- package/template/workflows/ops/common/rules/host-root-and-onboarding.md +47 -0
- package/template/workflows/ops/common/rules/persistence-and-secrets.md +1 -1
- package/template/workflows/ops/common/rules/research-and-decisions.md +8 -0
- package/template/workflows/ops/common/rules/server-onboarding.md +3 -3
- package/template/workflows/ops/common/rules/workspace-and-authorization.md +2 -2
- package/template/workflows/ops/common/schemas/fleet-view.schema.json +64 -0
- package/template/workflows/ops/common/schemas/host.schema.json +19 -0
- package/template/workflows/ops/common/schemas/plan.schema.json +57 -0
- package/template/workflows/ops/common/schemas/root-confirmation.schema.json +118 -0
- package/template/workflows/ops/common/schemas/server-connection.schema.json +67 -0
- package/template/workflows/ops/common/schemas/server-discovery.schema.json +171 -0
- package/template/workflows/ops/common/schemas/spec.schema.json +19 -0
- package/template/workflows/ops/common/schemas/status.schema.json +19 -0
- package/template/workflows/ops/common/templates/FLEET.html +1 -1
- package/template/workflows/ops/common/templates/HOST-README.md +3 -1
- package/template/workflows/ops/common/tests/test_ops.mjs +8 -11
- package/template/workflows/ops/common/tests/test_ops_bootstrap.mjs +101 -16
- package/template/workflows/ops/common/tests/test_ops_onboarding.mjs +225 -0
- package/template/workflows/ops/common/tests/test_ops_workspace.mjs +17 -8
- package/template/workflows/ops/common/tools/demo-local.mjs +4 -0
- package/template/workflows/ops/common/tools/opslib/agent.mjs +26 -0
- package/template/workflows/ops/common/tools/opslib/bootstrap.mjs +52 -26
- package/template/workflows/ops/common/tools/opslib/cli.mjs +1 -0
- package/template/workflows/ops/common/tools/opslib/core.mjs +1 -1
- package/template/workflows/ops/common/tools/opslib/docs.mjs +1 -0
- package/template/workflows/ops/common/tools/opslib/execution.mjs +4 -0
- package/template/workflows/ops/common/tools/opslib/fleet.mjs +26 -4
- package/template/workflows/ops/common/tools/opslib/host_recipes.mjs +34 -0
- package/template/workflows/ops/common/tools/opslib/model.mjs +6 -0
- package/template/workflows/ops/common/tools/opslib/onboarding.mjs +215 -0
- package/template/workflows/ops/common/tools/opslib/planner.mjs +3 -0
- package/template/workflows/ops/common/tools/opslib/transport.mjs +10 -6
- package/template/workflows/ops/common/tools/opslib/workspace_cli.mjs +20 -1
- package/template/workflows/ops/common/tools/server-discover.sh +65 -0
- package/template/workflows/ops/common/tools/validate-ops.mjs +1 -1
- package/template/workflows/ops/manifest.json +12 -5
- 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
|
@@ -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 就删除仍用于安装私有包的既有凭据。
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 版本说明与 GitHub Release 正文
|
|
2
|
+
|
|
3
|
+
CHANGELOG 中已确认的本版本段落是正文来源;保留 Unreleased。项目使用其他权威发布说明时记录来源。自动生成 notes 可作为补充,不冒充实际变更与风险说明。
|
|
4
|
+
|
|
5
|
+
## 提取与验证
|
|
6
|
+
|
|
7
|
+
按项目实际标题格式与语言读取精确版本段落,边界到下一同级版本标题;不要用只适配某种标题的 awk 段落猜测。提取后验证非空、版本一致,包含实际变化、迁移/兼容和风险说明。必要内容缺失则停止发布准备,不用兜底成功文案替代。
|
|
8
|
+
|
|
9
|
+
多语言项目遵守已确定的主语言或合并策略,不擅自丢弃一种语言。生成正文的临时文件仅用于 --notes-file,不成为新的永久知识源。
|
|
10
|
+
|
|
11
|
+
## 交付
|
|
12
|
+
|
|
13
|
+
使用 gh release create/edit 的 --notes-file 或仓库既有 action 的 body_path,按原计划设置 draft/prerelease/latest。调用方必须持有对应远程写入授权。生成器和 API 可能追加 compare 链接,读回时核对关键版本内容而非只看正文非空。
|
|
14
|
+
|
|
15
|
+
## 已发布正文补全
|
|
16
|
+
|
|
17
|
+
先固定 repo/tag/SHA 与当前正文,比较人工变更。只有明确要求补全的准确版本才更新,记录授权、前后摘要和读回结果。已有 npm 包不重发,tag 不移动。批量修复需要明确版本集合,逐项记账,失败停止后续写入。
|
|
18
|
+
|
|
19
|
+
## 归属
|
|
20
|
+
|
|
21
|
+
T 的发布使用原 TRI 回执;其他调用方直接复用时写自己的报告。docs-sync state 与知识仍由 docs-sync/A 原 owner 负责。
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# 发布流水线参考
|
|
2
|
+
|
|
3
|
+
这是按项目改写的示例,不是必须安装的 release.yml。实际名称、触发器、Node/包管理器版本、包集合、registry、渠道和质量闸来自发布预检。示例动作版本在使用时核对官方文档,沿用项目的版本固定策略。
|
|
4
|
+
|
|
5
|
+
## 阶段
|
|
6
|
+
|
|
7
|
+
1. checkout 固定 tag/commit,核对 tag 对应的 release SHA 与包版本。
|
|
8
|
+
2. 安装项目声明的运行时与包管理器,用冻结 lockfile 安装依赖。
|
|
9
|
+
3. 执行项目 test/typecheck/lint/build 及 CLI bin/pack 检查。
|
|
10
|
+
4. 提取已确认的本版本 release notes;必需正文缺失即失败。
|
|
11
|
+
5. 对每个 required 包按明确 registry/access/dist-tag 发布;OIDC/Token 由认证合同选定。
|
|
12
|
+
6. 创建或补全 GitHub Release,prerelease/latest 设置与原发布计划一致。
|
|
13
|
+
7. 返回 run ID、SHA 与发布回执,由 T 重读验证。
|
|
14
|
+
|
|
15
|
+
## GitHub Actions 片段
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
permissions:
|
|
19
|
+
contents: write
|
|
20
|
+
id-token: write # 采用 OIDC/provenance 且确有需要时
|
|
21
|
+
# checkout/setup-node/包管理器的 uses 与版本按项目政策固定
|
|
22
|
+
# 以下变量由已确认的发布计划提供
|
|
23
|
+
steps:
|
|
24
|
+
- run: pnpm install --frozen-lockfile
|
|
25
|
+
- run: pnpm check
|
|
26
|
+
- run: npm pack --dry-run
|
|
27
|
+
- run: npm publish --registry "$REGISTRY" --tag "$DIST_TAG" --access "$PACKAGE_ACCESS"
|
|
28
|
+
- run: gh release create "$TAG" --verify-tag --title "$RELEASE_TITLE" --notes-file release-notes.md
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
此片段省略了项目特定的 job、认证与变量注入,不能原样当成可执行完整 workflow。发布顺序不是回滚保证;npm 成功后后续失败按恢复协议补缺项。多包、可复用 workflow、自建 runner 和人工发布需在预检明确其真实行为。
|
|
32
|
+
|
|
33
|
+
最低权限按实际动作配置,纯 npm 不因示例而增加 packages:write。id-token:write 本身不证明 npm 已配置 trust。远程 workflow 更新仍经正常 I/C 流程,不能由 release-preflight 自动落文件。
|
|
34
|
+
|
|
35
|
+
## 检查发布包
|
|
36
|
+
|
|
37
|
+
核对 name/version、repository、license、private/publishConfig、files/exports/main/types、bin/shebang/执行权限、engines/packageManager 和依赖分类。以 npm pack --dry-run 的实际清单检查缺失入口、秘密文件、测试/缓存误入;CLI 路径从本项目 manifest 获取,不硬编码示例路径。新包的 404 还需区分权限/registry,不直接保证名字可用。
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# 发布预检
|
|
2
|
+
|
|
3
|
+
读取 <Path>{roots.workflows}/specdev/T-triage/triage-run-template.md</Path>,创建或恢复 T 拥有的独立操作记录。预检只读远程与项目事实,不自动修复环境。记录:
|
|
4
|
+
|
|
5
|
+
1. repo、发布分支/渠道、工作区状态、明确的目标 commit SHA、版本、tag;以项目声明为准,无法确定时停止。
|
|
6
|
+
2. package.json、workspace/lockfile、engines 完整版本范围、packageManager、包集合、registry、access、dist-tag;不能把所有版本限制解释为大于等于。
|
|
7
|
+
3. 实际 workflow 路径、trigger、复用 workflow 和调用脚本。npm_target 必须为 required/not-required/unknown;grep 仅作定位,包装脚本或表达式不明时为 unknown 并阻塞 release。
|
|
8
|
+
4. 每个包的目标版本与 registry 是否已有版本,tag 是否存在且指向预期 SHA。冲突先恢复/更换版本,不建议删除远程 tag。
|
|
9
|
+
5. gh 身份和所需的具体权限,发布认证按 <Path>{roots.workflows}/specdev/T-triage/references/release-authentication.md</Path>;不要求无关管理员权限,不保存凭据。
|
|
10
|
+
6. 项目声明的 test/typecheck/lint/build/bin/pack 等闸门与证据、CHANGELOG 版本内容、预期 Release 正文。缺失基础设施交 I;按需参考 <Path>{roots.workflows}/specdev/T-triage/references/workflow-yaml-reference.md</Path>,不在预检中安装。
|
|
11
|
+
7. 需要文档同步时,由 <Path>{roots.commands}/docs-sync.md</Path> 处理其 state、bootstrap 和范围;T 不改 sidecar。
|
|
12
|
+
|
|
13
|
+
完成条件:记录中的 targets 数组及 Targets 正文列出每个包、registry、版本、dist-tag 与发布判定,Evidence 引用固定 SHA 的检查;unknown/冲突保留 blocked。预检通过并不授权 commit/push/tag/发布。
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# npm / GitHub Release 发布
|
|
2
|
+
|
|
3
|
+
先执行 <Path>{roots.workflows}/specdev/T-triage/release-preflight.md</Path>;读取已有 TRI 记录,模式变为 release 并保留预检证据。每阶段原子写入回执并重读。T 不写 docs-sync state,不更改 change 的完成事实。
|
|
4
|
+
|
|
5
|
+
1. 明确发布范围,展示普通提交、docs-sync、版本修改、release commit、分支/tag push、workflow 和发布目标的准确计划。只执行已获授权动作,沿用仍有效授权。
|
|
6
|
+
2. 如有待提交改动,按项目规则显式选路径,不用 stash 隐藏内容。质量闸通过后才能提交。调用 docs-sync 时遵守其范围和提交协议。
|
|
7
|
+
3. 保留 Unreleased,按项目格式迁移本版本 CHANGELOG;同步 package/workspace/lockfile 的必要版本。将版本与发布说明固定于同一 release commit,直接记录 SHA,不从模糊 commit message 推断。
|
|
8
|
+
4. 按批准的仓库策略推送分支并创建/推送精确指向该 SHA 的 tag。不自动 merge、不移动已有 tag。触发的 workflow 必须按准确 SHA、event、workflow 路径和 run ID 定位,不能只看最新一条 run。
|
|
9
|
+
5. 监控该 run;失败进入 <Path>{roots.workflows}/specdev/T-triage/release-recovery.md</Path>。成功后校验 workflow 与 SHA、GitHub Release tag/正文/发布状态,以及每个 required npm 包的明确 package@version 和目标 dist-tag。prerelease/非 latest 按原计划验证。
|
|
10
|
+
6. Release 正文来自已确认版本说明,按需读取 <Path>{roots.workflows}/specdev/T-triage/references/release-notes-injection.md</Path>。需要补记 docs-sync 输入节点时再次调用 docs-sync,由它维护游标;tag 保持不变。
|
|
11
|
+
|
|
12
|
+
记录最终 SHA/tag/run ID、每个目标读回结果、docs-sync 结果或不适用原因。任一 required 目标未知或失败不得标 completed,保留已发布事实和后续恢复条件。全部通过才将 TRI 标 completed,运行 --triage-run 校验并返回报告。
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 恢复原操作
|
|
2
|
+
|
|
3
|
+
输入必须是已有 TRI/PR/capture/publish/来源回写记录的准确路径与原目标。恢复原记录,不另建成功记录替代失败;检查 owner、锁、漂移和仍有效的授权。普通远程动作按 <Path>{roots.workflows}/specdev/T-triage/remote-operations.md</Path> 恢复。
|
|
4
|
+
|
|
5
|
+
发布先重新读取准确 tag/SHA、workflow run、Release、registry 中的 package@version、dist-tag。npm 状态为未知时先解决读取/权限问题,不以未查到日志证明未上传。
|
|
6
|
+
|
|
7
|
+
| 实际状态 | 恢复 |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 尚未发布,原 SHA 未变,失败原因为暂态且已排除 | 展示并执行已授权的指定 run/job 重跑;重跑后完整验证 |
|
|
10
|
+
| 尚未发布,但需要代码/配置变更 | 交 I 修复,形成新的 commit/发布计划;不默认覆盖远程 tag |
|
|
11
|
+
| npm 已发布,GitHub Release/正文失败 | 只补缺失的 GitHub 动作,不重新发布 npm;记录读回 |
|
|
12
|
+
| npm 已发布,包内容错误 | 新版本修复,保留旧版本与 tag 的事实;不尝试 unpublish 后覆盖 |
|
|
13
|
+
| Release 已有人工修改或 SHA 漂移 | 停止受影响更新,比较差异并重新确定计划 |
|
|
14
|
+
| 多包部分成功 | 逐包记账,仅继续确认未发布且仍匹配原计划的目标 |
|
|
15
|
+
|
|
16
|
+
相同根因重试必须记录新证据或与上次的差异;没有差异先停止。不得要求提供 Token 片段作为证明。
|
|
17
|
+
|
|
18
|
+
错误定位:认证失败核对权限/有效期/OIDC 配置;provenance 核对 runner、repository 和 id-token;E422 核对 tag/Release 已存在与正文;EUSAGE 核对实际 CLI 版本和参数。不要通过默认删 tag、force-push 或删除远程对象处理这些错误。恢复后的 completed 仍需原发布协议的所有目标校验。
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# GitHub 远程操作合同
|
|
2
|
+
|
|
3
|
+
本协议及 <Path>{roots.workflows}/specdev/T-triage/scripts/github-transport.mjs</Path> 由 T 唯一维护。C、command 或其他调用方可直接复用:不激活 T、不创建 change、不改 current_work;原调用方拥有报告、授权与回执。
|
|
4
|
+
|
|
5
|
+
## 输入与操作
|
|
6
|
+
|
|
7
|
+
显式传入 repo、目标编号或分支、正文文件和操作。读取失败、分页不完整、对象类型不符、SHA/正文漂移时停止受影响操作。
|
|
8
|
+
|
|
9
|
+
- issue-read / pr-read:完整可见内容;PR 包含评论、reviews、review comments、文件与 diff、不可变 base/head SHA、读取时间和完整性证据。
|
|
10
|
+
- issue-search:候选检索;limit 是检索范围,不代表已穷尽仓库。
|
|
11
|
+
- issue-create:title、body-file、labels,可选 marker;调用方先去重。
|
|
12
|
+
- issue-comment-close:comment-file、marker、reason;按 marker 幂等评论,执行后确认关闭。
|
|
13
|
+
- pr-create:base、head(同仓分支或 owner:branch)、base-sha、head-sha、title、body-file、marker;默认创建 draft。
|
|
14
|
+
- pr-update:number、base-sha、head-sha、expected-body-sha256、title、body-file、marker。
|
|
15
|
+
- pr-ready:number、base-sha、head-sha、expected-body-sha256;另需本次可审查授权。
|
|
16
|
+
|
|
17
|
+
运行脚本 --help 查看完整参数。所有参数使用 argv,不拼 shell。操作返回 JSON,失败退出非零;脚本不写任何 workflow 或 command 状态。
|
|
18
|
+
|
|
19
|
+
## 写入与恢复
|
|
20
|
+
|
|
21
|
+
默认 dry-run,外部写入为零。调用方在写前展示准确目标、内容与动作并取得明确授权后才传 --apply。已授权同一动作不重复索取授权;目标/内容发生实质变化则重新确认范围。PR、push、merge、release 各自独立。
|
|
22
|
+
|
|
23
|
+
对外正文标明 AI 协助。持久工件不保存凭据、Cookie、认证输出、机器绝对路径或未脱敏日志。临时正文文件由调用方管理。
|
|
24
|
+
|
|
25
|
+
执行前重读目标和预期 SHA/正文摘要;执行后重读验证。超时不表示未写入,先查询稳定 marker/目标再恢复,不能盲目重建。重复 marker、多候选、并发漂移或读回不符时返回失败,由调用方保存已完成步骤和恢复条件。本地开发事实不因远程失败回滚。
|