@namewta/speculo 0.7.3 → 0.7.5
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 +2 -2
- package/dist/src/migrations.js +190 -39
- package/dist/src/migrations.js.map +1 -1
- package/package.json +1 -1
- package/template/canonical/README.md +208 -63
- package/template/canonical/canonical-person-steelman-deliberation.md +518 -0
- package/template/canonical/canonical-specdev-engineering-cognitive-mentor.md +51 -15
- package/template/canonical/canonical-specdev-goal-plan.md +183 -116
- package/template/canonical/canonical-specdev-grill-with-docs.md +51 -15
- package/template/canonical/canonical-specdev-spec.md +61 -21
- package/template/canonical/canonical-specdev-tickets.md +83 -43
- package/template/canonical/canonical-specdev-wayfinder.md +51 -15
- package/template/skills/engineering-standards-builder/README.md +43 -0
- package/template/skills/engineering-standards-builder/SKILL.md +233 -0
- package/template/skills/engineering-standards-builder/examples/README.md +15 -0
- package/template/skills/engineering-standards-builder/examples/fallback/kotlin-gradle/build.gradle.kts +5 -0
- package/template/skills/engineering-standards-builder/examples/fallback/kotlin-gradle/expected.json +12 -0
- package/template/skills/engineering-standards-builder/examples/fallback/kotlin-gradle/src/main/kotlin/example/App.kt +2 -0
- package/template/skills/engineering-standards-builder/examples/go/service/.golangci.yml +3 -0
- package/template/skills/engineering-standards-builder/examples/go/service/cmd/api/main.go +3 -0
- package/template/skills/engineering-standards-builder/examples/go/service/expected.json +23 -0
- package/template/skills/engineering-standards-builder/examples/go/service/go.mod +3 -0
- package/template/skills/engineering-standards-builder/examples/go/service/internal/service/service.go +2 -0
- package/template/skills/engineering-standards-builder/examples/go/service/internal/service/service_test.go +3 -0
- package/template/skills/engineering-standards-builder/examples/java/spring-boot-maven/expected.json +22 -0
- package/template/skills/engineering-standards-builder/examples/java/spring-boot-maven/pom.xml +12 -0
- package/template/skills/engineering-standards-builder/examples/java/spring-boot-maven/src/main/java/dev/speculo/orders/OrdersApplication.java +7 -0
- package/template/skills/engineering-standards-builder/examples/java/spring-boot-maven/src/test/java/dev/speculo/orders/OrdersApplicationTest.java +3 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/.github/workflows/ci.yml +11 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/apps/web/package.json +11 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/apps/web/src/App.vue +2 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/apps/web/tsconfig.json +8 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/expected.json +22 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/package.json +11 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/pnpm-workspace.yaml +2 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/services/orders/pom.xml +12 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/services/orders/src/main/java/dev/speculo/orders/OrdersApplication.java +7 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/services/worker/go.mod +3 -0
- package/template/skills/engineering-standards-builder/examples/polyglot/monorepo/services/worker/main.go +2 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/Cargo.toml +7 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/crates/cli/Cargo.toml +8 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/crates/cli/src/main.rs +1 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/crates/core/Cargo.toml +5 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/crates/core/src/lib.rs +3 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/expected.json +14 -0
- package/template/skills/engineering-standards-builder/examples/rust/workspace/rust-toolchain.toml +3 -0
- package/template/skills/engineering-standards-builder/examples/typescript/react-vite/expected.json +21 -0
- package/template/skills/engineering-standards-builder/examples/typescript/react-vite/package.json +20 -0
- package/template/skills/engineering-standards-builder/examples/typescript/react-vite/src/App.test.tsx +2 -0
- package/template/skills/engineering-standards-builder/examples/typescript/react-vite/src/App.tsx +1 -0
- package/template/skills/engineering-standards-builder/examples/typescript/react-vite/src/main.tsx +3 -0
- package/template/skills/engineering-standards-builder/examples/typescript/react-vite/tsconfig.json +10 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/expected.json +22 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/package.json +21 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/src/App.test.ts +2 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/src/App.vue +7 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/src/main.ts +4 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/tsconfig.json +11 -0
- package/template/skills/engineering-standards-builder/examples/typescript/vue-vite/vite.config.ts +2 -0
- package/template/skills/engineering-standards-builder/manifest.txt +112 -0
- package/template/skills/engineering-standards-builder/references/go/00-detection-and-scope.md +37 -0
- package/template/skills/engineering-standards-builder/references/go/01-language-and-idioms.md +34 -0
- package/template/skills/engineering-standards-builder/references/go/02-modules-packages-and-layout.md +34 -0
- package/template/skills/engineering-standards-builder/references/go/03-errors-context-and-concurrency.md +38 -0
- package/template/skills/engineering-standards-builder/references/go/04-testing-tooling-quality-gates.md +46 -0
- package/template/skills/engineering-standards-builder/references/go/README.md +9 -0
- package/template/skills/engineering-standards-builder/references/java/00-detection-and-scope.md +40 -0
- package/template/skills/engineering-standards-builder/references/java/01-language-packages-and-api.md +35 -0
- package/template/skills/engineering-standards-builder/references/java/02-build-modules-and-dependencies.md +39 -0
- package/template/skills/engineering-standards-builder/references/java/03-errors-nullability-resources-concurrency.md +36 -0
- package/template/skills/engineering-standards-builder/references/java/04-testing-tooling-quality-gates.md +36 -0
- package/template/skills/engineering-standards-builder/references/java/README.md +10 -0
- package/template/skills/engineering-standards-builder/references/java/frameworks/spring-boot.md +74 -0
- package/template/skills/engineering-standards-builder/references/rules/00-governance-and-precedence.md +52 -0
- package/template/skills/engineering-standards-builder/references/rules/01-project-discovery.md +79 -0
- package/template/skills/engineering-standards-builder/references/rules/02-evidence-topology-and-scope.md +87 -0
- package/template/skills/engineering-standards-builder/references/rules/03-interview-and-decisions.md +77 -0
- package/template/skills/engineering-standards-builder/references/rules/04-architecture-and-dependency-boundaries.md +58 -0
- package/template/skills/engineering-standards-builder/references/rules/05-files-directories-and-naming.md +53 -0
- package/template/skills/engineering-standards-builder/references/rules/06-apis-errors-resources-and-concurrency.md +53 -0
- package/template/skills/engineering-standards-builder/references/rules/07-documentation-and-comments.md +46 -0
- package/template/skills/engineering-standards-builder/references/rules/08-testing-strategy.md +45 -0
- package/template/skills/engineering-standards-builder/references/rules/09-security-configuration-and-data.md +44 -0
- package/template/skills/engineering-standards-builder/references/rules/10-performance-observability-and-i18n.md +36 -0
- package/template/skills/engineering-standards-builder/references/rules/11-tooling-quality-gates-and-ci.md +69 -0
- package/template/skills/engineering-standards-builder/references/rules/12-git-review-and-delivery.md +46 -0
- package/template/skills/engineering-standards-builder/references/rules/13-adoption-exceptions-and-ratchets.md +60 -0
- package/template/skills/engineering-standards-builder/references/rules/14-generation-contract.md +105 -0
- package/template/skills/engineering-standards-builder/references/rules/15-validation-contract.md +65 -0
- package/template/skills/engineering-standards-builder/references/rules/16-language-adapter-contract.md +55 -0
- package/template/skills/engineering-standards-builder/references/rules/README.md +23 -0
- package/template/skills/engineering-standards-builder/references/rust/00-detection-and-scope.md +38 -0
- package/template/skills/engineering-standards-builder/references/rust/01-language-api-and-safety.md +35 -0
- package/template/skills/engineering-standards-builder/references/rust/02-crates-workspaces-and-layout.md +36 -0
- package/template/skills/engineering-standards-builder/references/rust/03-errors-ownership-and-concurrency.md +37 -0
- package/template/skills/engineering-standards-builder/references/rust/04-testing-tooling-quality-gates.md +44 -0
- package/template/skills/engineering-standards-builder/references/rust/README.md +9 -0
- package/template/skills/engineering-standards-builder/references/typescript/00-detection-and-scope.md +58 -0
- package/template/skills/engineering-standards-builder/references/typescript/01-language-and-type-system.md +49 -0
- package/template/skills/engineering-standards-builder/references/typescript/02-modules-packages-and-runtime-boundaries.md +49 -0
- package/template/skills/engineering-standards-builder/references/typescript/03-functions-async-errors-resources.md +42 -0
- package/template/skills/engineering-standards-builder/references/typescript/04-testing-tooling-quality-gates.md +51 -0
- package/template/skills/engineering-standards-builder/references/typescript/README.md +27 -0
- package/template/skills/engineering-standards-builder/references/typescript/app-types/cli.md +11 -0
- package/template/skills/engineering-standards-builder/references/typescript/app-types/library.md +11 -0
- package/template/skills/engineering-standards-builder/references/typescript/frameworks/react.md +71 -0
- package/template/skills/engineering-standards-builder/references/typescript/frameworks/vue.md +131 -0
- package/template/skills/engineering-standards-builder/references/typescript/runtimes/browser.md +15 -0
- package/template/skills/engineering-standards-builder/references/typescript/runtimes/electron.md +25 -0
- package/template/skills/engineering-standards-builder/references/typescript/runtimes/node.md +13 -0
- package/template/skills/engineering-standards-builder/scripts/discover-project.mjs +957 -0
- package/template/skills/engineering-standards-builder/scripts/self-test.mjs +203 -0
- package/template/skills/engineering-standards-builder/scripts/sync-manifest.mjs +105 -0
- package/template/skills/engineering-standards-builder/scripts/validate-builder.mjs +255 -0
- package/template/skills/engineering-standards-builder/scripts/validate-generated-skill.mjs +286 -0
- package/template/skills/engineering-standards-builder/templates/README.md +18 -0
- package/template/skills/engineering-standards-builder/templates/compatibility/agents-typescript--standards.md +6 -0
- package/template/skills/engineering-standards-builder/templates/compatibility/agents-typescript-standards.md +6 -0
- package/template/skills/engineering-standards-builder/templates/compatibility/claude-engineering-standards.md +6 -0
- package/template/skills/engineering-standards-builder/templates/compatibility/claude-typescript-standards.md +6 -0
- package/template/skills/engineering-standards-builder/templates/project-skill/SKILL.md.template +26 -0
- package/template/skills/engineering-standards-builder/templates/project-skill/references/project/00-project-profile.md.template +26 -0
- package/template/skills/engineering-standards-builder/templates/project-skill/references/project/01-module-map.md.template +27 -0
- package/template/skills/engineering-standards-builder/templates/project-skill/references/project/02-decisions-and-exceptions.md.template +31 -0
- package/template/skills/engineering-standards-builder/templates/project-skill/references/project/review-checklist.md.template +14 -0
- package/template/skills/migrate-runtime-state/references/migration-contract.md +3 -3
- package/template/skills/migrate-runtime-state/scripts/migrate-runtime-state.mjs +94 -12
- package/template/skills/source-code-zip-skill/SKILL.md +343 -0
- package/template/skills/source-code-zip-skill/scripts/zip_source_code.py +638 -0
- package/template/workflows/person/INDEX.md +1 -0
- package/template/workflows/person/S-steelman-deliberation/S-steelman-deliberation.md +218 -0
- package/template/workflows/person/S-steelman-deliberation/_templates/decision-template.md +51 -0
- package/template/workflows/person/S-steelman-deliberation/_templates/steelman-dossier-template.md +96 -0
- package/template/workflows/person/S-steelman-deliberation/deliberate.md +127 -0
- package/template/workflows/person/S-steelman-deliberation/evidence-gate.md +37 -0
- package/template/workflows/person/S-steelman-deliberation/judge.md +69 -0
- package/template/workflows/person/S-steelman-deliberation/tools/validate-steelman-change.mjs +697 -0
- package/template/workflows/specdev/I-implement/I-implement.md +27 -26
- package/template/workflows/specdev/I-implement/evidence-template.md +18 -12
- package/template/workflows/specdev/I-implement/execution-preflight.md +11 -9
- package/template/workflows/specdev/I-init-setup/I-init-setup.md +2 -2
- package/template/workflows/specdev/I-init-setup/change-status-template.json +3 -3
- package/template/workflows/specdev/I-init-setup/config-template.json +5 -2
- package/template/workflows/specdev/INDEX.md +6 -6
- package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +16 -16
- package/template/workflows/specdev/P-goal-plan/completion-control.md +8 -8
- package/template/workflows/specdev/P-goal-plan/goal-plan-template.md +20 -14
- package/template/workflows/specdev/P-goal-plan/lead-orchestration.md +5 -5
- package/template/workflows/specdev/P-goal-plan/orchestration-protocol.md +13 -13
- package/template/workflows/specdev/P-goal-plan/planning-modes.md +27 -15
- package/template/workflows/specdev/P-prototype/ui-prototype.md +1 -1
- package/template/workflows/specdev/T-tickets/T-tickets.md +4 -4
- package/template/workflows/specdev/T-tickets/ticket-readiness.md +3 -3
- package/template/workflows/specdev/T-tickets/ticket-template.md +6 -6
- package/template/workflows/specdev/T-tickets/tickets-map-template.md +2 -2
- package/template/workflows/specdev/common/README.md +1 -1
- package/template/workflows/specdev/common/rules/change-completion.md +2 -2
- package/template/workflows/specdev/common/rules/evidence-and-verification.md +10 -6
- package/template/workflows/specdev/common/rules/path-ownership.md +4 -4
- package/template/workflows/specdev/common/schemas/change-status.schema.json +31 -4
- package/template/workflows/specdev/common/schemas/config.schema.json +12 -6
- package/template/workflows/specdev/common/schemas/goal-plan.schema.json +15 -6
- package/template/workflows/specdev/common/skills/dev-worktree/SKILL.md +3 -3
- package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +1 -1
- package/template/workflows/specdev/common/skills/subagent-delivery/SKILL.md +4 -4
- package/template/workflows/specdev/common/skills/subagent-delivery/references/external-web-subagent.md +1 -1
- package/template/workflows/specdev/common/skills/subagent-delivery/references/native-subagent.md +4 -4
- package/template/workflows/specdev/common/tools/README.md +2 -1
- package/template/workflows/specdev/common/tools/validate-specdev.mjs +261 -66
- package/template/skills/typescript-standards-builder/README.md +0 -53
- package/template/skills/typescript-standards-builder/SKILL.md +0 -245
- package/template/skills/typescript-standards-builder/examples/sample-generated-tree.md +0 -30
- package/template/skills/typescript-standards-builder/examples/sample-interview-decisions.md +0 -26
- package/template/skills/typescript-standards-builder/manifest.txt +0 -29
- package/template/skills/typescript-standards-builder/references/00-governance-and-fixed-defaults.md +0 -77
- package/template/skills/typescript-standards-builder/references/01-project-discovery.md +0 -100
- package/template/skills/typescript-standards-builder/references/02-interview-workflow.md +0 -129
- package/template/skills/typescript-standards-builder/references/03-project-architecture-and-directory-layout.md +0 -84
- package/template/skills/typescript-standards-builder/references/04-file-directory-and-symbol-naming.md +0 -92
- package/template/skills/typescript-standards-builder/references/05-modules-imports-exports-and-dependencies.md +0 -63
- package/template/skills/typescript-standards-builder/references/06-typescript-type-system.md +0 -64
- package/template/skills/typescript-standards-builder/references/07-functions-async-errors-and-resources.md +0 -42
- package/template/skills/typescript-standards-builder/references/08-comments-jsdoc-and-documentation.md +0 -51
- package/template/skills/typescript-standards-builder/references/09-testing-strategy.md +0 -58
- package/template/skills/typescript-standards-builder/references/10-react-and-frontend.md +0 -39
- package/template/skills/typescript-standards-builder/references/11-node-cli-and-cross-platform.md +0 -31
- package/template/skills/typescript-standards-builder/references/12-formatting-lint-and-complexity.md +0 -58
- package/template/skills/typescript-standards-builder/references/13-configuration-dependencies-and-ci.md +0 -71
- package/template/skills/typescript-standards-builder/references/14-security-performance-and-i18n.md +0 -32
- package/template/skills/typescript-standards-builder/references/15-git-review-and-delivery.md +0 -28
- package/template/skills/typescript-standards-builder/references/16-adoption-exceptions-and-migration.md +0 -61
- package/template/skills/typescript-standards-builder/references/17-generation-contract.md +0 -104
- package/template/skills/typescript-standards-builder/references/README.md +0 -37
- package/template/skills/typescript-standards-builder/templates/agents-compat-skill/SKILL.md +0 -1
- package/template/skills/typescript-standards-builder/templates/claude-skill/SKILL.md +0 -1
- package/template/skills/typescript-standards-builder/templates/project-skill/SKILL.md.template +0 -34
- package/template/skills/typescript-standards-builder/templates/project-skill/references/00-project-profile.md.template +0 -17
- package/template/skills/typescript-standards-builder/templates/project-skill/references/10-review-checklist.md +0 -23
- package/template/skills/typescript-standards-builder/templates/project-skill/references/11-decisions-and-exceptions.md.template +0 -19
|
@@ -6,7 +6,7 @@ Lead 是主会话中的唯一编排 owner,保留需求解释、DAG/Wave/Gate
|
|
|
6
6
|
|
|
7
7
|
## 2. 派单类型
|
|
8
8
|
|
|
9
|
-
- **implementation
|
|
9
|
+
- **implementation**:写入 Goal Plan 选择的 current workspace 或 Ticket worktree 的授权项目路径,运行非 E2E 检查并返回 implementation/source commit;
|
|
10
10
|
- **review**:只读审查固定 checkpoint,返回 findings;
|
|
11
11
|
- **research**:只读收集代码或外部事实,返回来源与结论;
|
|
12
12
|
- **test-observation**:只读运行或观察已授权检查,返回命令与结果,不拥有 E2E Gate。
|
|
@@ -15,20 +15,20 @@ Lead 在 Ticket 可以独立执行、写路径不冲突、上下文足够且平
|
|
|
15
15
|
|
|
16
16
|
## 3. 并发
|
|
17
17
|
|
|
18
|
-
implementation subagent
|
|
18
|
+
required 模式 implementation subagent 上限取 Goal Plan、config 与平台能力的最小值;current 模式保持单 writer 串行安全不变量;Lead 不计入。review/research/test-observation agent 不设置 SpecDev 数字上限,但 Lead 必须避免测试资源冲突、重复工作和上下文失控。
|
|
19
19
|
|
|
20
20
|
## 4. 写入边界
|
|
21
21
|
|
|
22
|
-
implementation subagent
|
|
22
|
+
implementation subagent 只写分配的 current workspace 或 worktree 中的项目路径和其 Git commit,不写 Ticket、Map、Goal Plan、Evidence、change status 或父分支。current 模式 commit 直接落在 parent branch;required 模式 commit 落在 source branch。其他 subagent 全部只读。Lead 接收返回后独立核对,再写所有 SpecDev 状态。
|
|
23
23
|
|
|
24
24
|
## 5. 动态 Dispatch Packet
|
|
25
25
|
|
|
26
|
-
每次派单必须绑定 Ticket、Goal Plan、依赖 Evidence、不可变 `base_sha`、branch/workspace locator、writable/read-only/shared paths、provider、允许动作、非 E2E 验证、停止条件和返回格式。provider 或模型按当次能力与授权选择;外部 provider 需要独立的数据发送授权。
|
|
26
|
+
每次派单必须绑定 Ticket、Goal Plan、依赖 Evidence、不可变 `base_sha`、branch/workspace locator、workspace strategy、writable/read-only/shared paths、provider、允许动作、非 E2E 验证、停止条件和返回格式。provider 或模型按当次能力与授权选择;外部 provider 需要独立的数据发送授权。
|
|
27
27
|
|
|
28
28
|
implementation 返回至少包含:Ticket ID、workspace locator、最终 commit、dirty 状态、修改路径、检查命令/结果、未验证项、冲突与阻塞。review/research 返回固定输入、findings、来源和未验证声明。
|
|
29
29
|
|
|
30
30
|
## 6. Lead 验收
|
|
31
31
|
|
|
32
|
-
Lead 核对基线、路径、commit、dirty 状态、项目事实与非 E2E 结果;不接受 subagent 自报的 Evidence 或 E2E pass。implementation 候选进入 dev-worktree candidate-merge;read-only 结果由 Lead 复核后写入对应权威工件。失败返回同一
|
|
32
|
+
Lead 核对基线、路径、commit、dirty 状态、项目事实与非 E2E 结果;不接受 subagent 自报的 Evidence 或 E2E pass。required implementation 候选进入 dev-worktree candidate-merge;current implementation 由 Lead 在同一 parent branch/current workspace 做 direct-parent 验证。read-only 结果由 Lead 复核后写入对应权威工件。失败返回同一 workspace/worktree 修正或标记 blocked。
|
|
33
33
|
|
|
34
34
|
**完成标准**:每次写入只有一个 Ticket/owner/worktree;所有 SpecDev 状态由 Lead 落盘;派单和返回可从 Evidence 恢复。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Goal Plan 核心编排协议
|
|
2
2
|
|
|
3
|
-
本文件定义 DAG、Wave、Gate、路径所有权、Ticket
|
|
3
|
+
本文件定义 DAG、Wave、Gate、路径所有权、Ticket workspace 策略、Evidence 返回和父分支集成队列。
|
|
4
4
|
|
|
5
5
|
## 1. DAG 与关键路径
|
|
6
6
|
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
|
|
12
12
|
## 2. Wave 与实现并发
|
|
13
13
|
|
|
14
|
-
Wave 内 Ticket 必须 Ready、依赖 Evidence 完整、项目写路径不相交、shared owner 已稳定、适用 Gate 已打开且基线一致。
|
|
14
|
+
required 模式的 Wave 内 Ticket 必须 Ready、依赖 Evidence 完整、项目写路径不相交、shared owner 已稳定、适用 Gate 已打开且基线一致。current 模式即使 DAG 存在可并行节点,也强制一次只执行一个 Ticket。
|
|
15
15
|
|
|
16
|
-
Lead
|
|
16
|
+
Lead 根据当前事实决定自行实现或派单。required 模式同时活跃的 implementation subagent 不得超过 Goal Plan、config 与平台能力的共同上限;current 模式保持单 writer 串行安全不变量。Lead 不计入。Wave 是可并发性,不是必须填满的目标。只读 review/research/test-observation agent 不写固定数字上限,但不得写项目或 SpecDev 状态,也不得争用同一可变测试环境。
|
|
17
17
|
|
|
18
18
|
## 3. Gate
|
|
19
19
|
|
|
@@ -24,20 +24,20 @@ Gate 用可验证状态定义,必须写明:工程/业务状态、开启条
|
|
|
24
24
|
遵循 `<Path>{roots.workflows}/specdev/common/rules/path-ownership.md</Path>`:
|
|
25
25
|
|
|
26
26
|
1. 专用 owner Ticket 修改共享路径;
|
|
27
|
-
2.
|
|
28
|
-
3.
|
|
29
|
-
4.
|
|
27
|
+
2. required 模式在其 source worktree 形成 commit 与非 E2E 证据;current 模式在当前 workspace 形成 commit 与证据;
|
|
28
|
+
3. required 模式通过 Lead candidate-merge 进入父分支;current 模式由 Lead 在父分支 direct-parent 验证并推进;
|
|
29
|
+
4. required 模式下游 Ticket 基于新的父分支 checkpoint 创建或刷新 worktree;current 模式仅在前一 Ticket 完成后开始下一个;
|
|
30
30
|
5. 共享合同变化时暂停消费者并修订上游,不让多个执行者竞争写入。
|
|
31
31
|
|
|
32
|
-
## 5. 每 Ticket
|
|
32
|
+
## 5. 每 Ticket workspace 记录
|
|
33
33
|
|
|
34
|
-
每个进入 I-implement 的 Ticket
|
|
34
|
+
每个进入 I-implement 的 Ticket 建立唯一记录。current 模式使用 `workspace_ref=current`、`branch=parent_branch`,记录 implementation/source/result SHA 与 direct-parent 验证;required 模式使用唯一 `specdev-worktree/<ticket-id>`,记录 source/candidate/result SHA 与验证状态。Lead 自行实现或派 subagent 不改变所选策略。
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
required 模式同一 Ticket 在 candidate 验证失败后保留来源 worktree 并继续修正。新的 source commit 替换当前 `source_checkpoint`,旧 commit 继续由 Git/Evidence 可追溯。成功集成不自动清理 branch/worktree。
|
|
37
37
|
|
|
38
38
|
## 6. 父分支集成队列
|
|
39
39
|
|
|
40
|
-
Lead 串行集成 Ready 候选:
|
|
40
|
+
required 模式 Lead 串行集成 Ready 候选:
|
|
41
41
|
|
|
42
42
|
1. 冻结最新 `parent_before_sha`;
|
|
43
43
|
2. 在 Lead-owned parent integration checkout 组合父分支与 `source_checkpoint`;
|
|
@@ -47,10 +47,10 @@ Lead 串行集成 Ready 候选:
|
|
|
47
47
|
6. 检查通过且父 HEAD 未变时,父分支 fast-forward 到 candidate;
|
|
48
48
|
7. 重读父 HEAD/tree,写入 `result_sha` 后才允许 Ticket Done。
|
|
49
49
|
|
|
50
|
-
父分支是 source checkpoint 的祖先时 candidate/result 可等于 source SHA,方法为 `fast-forward`;否则 candidate 必须是独立 merge commit。候选失败时父分支保持不变,Ticket 回到 `in_progress` 或 `blocked`。
|
|
50
|
+
父分支是 source checkpoint 的祖先时 candidate/result 可等于 source SHA,方法为 `fast-forward`;否则 candidate 必须是独立 merge commit。候选失败时父分支保持不变,Ticket 回到 `in_progress` 或 `blocked`。current 模式跳过候选 checkout,Lead 在 current workspace 核对 implementation commit、运行集成检查并记录 `method=direct-parent`;失败时父 HEAD 不推进。
|
|
51
51
|
|
|
52
52
|
## 7. Expand-contract
|
|
53
53
|
|
|
54
|
-
标准顺序为 expand → migrate → observe → contract → verify。每批迁移独立 commit
|
|
54
|
+
标准顺序为 expand → migrate → observe → contract → verify。每批迁移独立 commit、按所选策略验证和父分支集成;收缩依据旧调用/数据/协议归零证据,不依据 Ticket 数量推断。
|
|
55
55
|
|
|
56
|
-
**完成标准**:每个 Ticket 从父基线、source commit
|
|
56
|
+
**完成标准**:每个 Ticket 从父基线、implementation/source commit、对应 integration 到 result 都可恢复;父分支只包含已通过所选门禁的 Ticket。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Goal Plan 规划模式与输入门禁
|
|
2
2
|
|
|
3
|
-
规划模式描述 Goal Plan
|
|
3
|
+
规划模式描述 Goal Plan 需要额外解决的工程问题。Goal Plan 创建时单独询问 Ticket 是否开启 worktree,默认使用当前 workspace;worktree 与 direct-parent/candidate-merge 由该次 Goal Plan 固定。
|
|
4
4
|
|
|
5
5
|
## 1. 输入门禁
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
- Tickets Map 与全部 Ticket 存在、Ready、DAG 无环;
|
|
11
11
|
- 每个验收合同被 Ticket 覆盖;
|
|
12
12
|
- writable/shared path 有唯一 owner,Wave 候选无写冲突;
|
|
13
|
-
- config schema
|
|
13
|
+
- config schema v5,`max_implementation_agents` 与 `max_integration_attempts` 为正整数;原型变体范围读取 planning 配置;
|
|
14
14
|
- 父分支可定位,implementation commit 与本地 integration 已获授权;
|
|
15
15
|
- Deep Ticket 的迁移、兼容、监控、恢复和不可逆批准点完整。
|
|
16
16
|
- 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>` 和当前代码事实不存在未处理冲突;
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
- 当前源码基线、父分支、工作区状态和现有用户改动已经实测;
|
|
19
19
|
- 外部合同、标准、参考实现或依赖版本已经固定,不使用浮动的“最新”描述。
|
|
20
20
|
|
|
21
|
-
缺失上游事实返回其 owner;非
|
|
21
|
+
缺失上游事实返回其 owner;非 v5 Goal Plan 必须按当前合同重新规划,不能只修改版本号。
|
|
22
22
|
|
|
23
23
|
## 2. 可组合模式
|
|
24
24
|
|
|
@@ -29,29 +29,41 @@
|
|
|
29
29
|
|
|
30
30
|
没有适用模式时 `modes: []`。模式只增加对应 Gate、证据和恢复,不改变 Lead、worktree 或集成基本合同。
|
|
31
31
|
|
|
32
|
-
## 3.
|
|
32
|
+
## 3. Goal Plan 工作区选择
|
|
33
33
|
|
|
34
|
-
-
|
|
35
|
-
- `ticket_workspace_policy:
|
|
36
|
-
- `integration_gate: candidate-merge`;
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
34
|
+
- 创建 Goal Plan 时询问“是否开启 worktree 开发?”,默认 `否`;
|
|
35
|
+
- 用户选择 `否` 时写入 `ticket_workspace_policy: current` 与 `integration_gate: direct-parent`;
|
|
36
|
+
- 用户选择 `是` 时写入 `ticket_workspace_policy: required` 与 `integration_gate: candidate-merge`;
|
|
37
|
+
- 该选择只作用于当前 Goal Plan,不读取或修改全局配置;
|
|
38
|
+
- `current` 模式下所有 Ticket 必须串行,并持有唯一 implementation writer 锁;
|
|
39
|
+
- `required` 模式继续使用每 Ticket source worktree 和 Lead-owned candidate integration;
|
|
40
|
+
- `orchestration` 固定为 `lead-directed`;implementation agent 与 integration attempt 上限读取 config,并可在本计划中进一步降低。
|
|
41
41
|
|
|
42
42
|
## 4. Ready 停止条件
|
|
43
43
|
|
|
44
44
|
存在以下任一情况时 `ready_for_execution: false`:
|
|
45
45
|
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
- Ticket 无法建立独立 worktree 或父分支不明确;
|
|
46
|
+
- Goal Plan 工作区选择未记录;
|
|
47
|
+
- `current` 模式下 Ticket 无法串行排序或当前 workspace 不是唯一项目写入 owner;
|
|
48
|
+
- `required` 模式下 Ticket 无法建立独立 worktree 或父分支不明确;
|
|
49
|
+
- 当前模式所需的 implementation commit 或 direct-parent/candidate integration 授权缺失;
|
|
49
50
|
- shared path 没有唯一 owner;
|
|
50
51
|
- E2E 是否需要会改变验收结论但尚未确定;
|
|
51
52
|
- 项目验证命令不能执行或无法观察目标行为,且没有批准的替代证据;
|
|
52
53
|
- 当前源码/工作区基线未实测,或外部合同版本仍然浮动;
|
|
53
54
|
- Ticket 与 Spec、ADR、`<Path>{roots.state}/specdev/adr/</Path>`、`<Path>{roots.state}/specdev/context/</Path>` 或代码事实存在未处理冲突;
|
|
54
55
|
- 迁移、发布、不可逆动作或恢复存在高影响未知项;
|
|
55
|
-
- 实现 agent 上限超过
|
|
56
|
+
- 实现 agent 或 integration attempt 上限超过 config 或平台能力。
|
|
57
|
+
|
|
58
|
+
## 5. 固定执行拓扑
|
|
59
|
+
|
|
60
|
+
- `orchestration: lead-directed`;
|
|
61
|
+
- `ticket_workspace_policy: current | required`;
|
|
62
|
+
- `integration_gate: direct-parent | candidate-merge`;
|
|
63
|
+
- `current` 与 `direct-parent` 必须成对;`required` 与 `candidate-merge` 必须成对;
|
|
64
|
+
- `implementation_agent_limit` 不大于 config 与平台能力;`integration_attempt_limit` 不大于 config;current 模式保持单 writer 串行安全不变量;
|
|
65
|
+
- Lead 不计入 implementation subagent 数量;
|
|
66
|
+
- review/research/test-observation agent 无 SpecDev 固定数字上限,但必须保持只读且不竞争同一可变环境;
|
|
67
|
+
- provider 与派单在执行期决定,不成为 Goal Plan 的静态枚举。
|
|
56
68
|
|
|
57
69
|
**完成标准**:所有固定字段、适用模式、授权、Lead、父分支和阻塞均可验证;没有替代编排模型或空占位。
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
## 变体
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
变体数量读取 `<Path>{roots.state}/specdev/config.json</Path>` 的 `planning.ui_prototype_default_variants` 与 `planning.ui_prototype_max_variants`。每个变体必须在布局、信息层级或主要操作入口上结构不同,不能只换颜色或文案。使用项目现有组件和样式系统,但不要共享会限制结构探索的布局抽象。
|
|
12
12
|
|
|
13
13
|
## 切换器
|
|
14
14
|
|
|
@@ -111,8 +111,8 @@ Ticket 是**决策完备的微型执行计划**:它消除执行者在目标、
|
|
|
111
111
|
- 有序执行路线和安全落点;
|
|
112
112
|
- expected、writable、read-only、shared 路径;
|
|
113
113
|
- 正常、失败和回归验证矩阵;
|
|
114
|
-
- 每个 Ticket 的
|
|
115
|
-
- 每个实现 Ticket
|
|
114
|
+
- 每个 Ticket 按 Goal Plan 的 workspace 策略定义 current-workspace/direct-parent 或 source-worktree/parent-candidate 检查,以及按实际跨边界风险判定的 E2E disposition;
|
|
115
|
+
- 每个实现 Ticket 的 implementation commit 与对应父分支完成条件;仅 required 模式创建独立 worktree;
|
|
116
116
|
- Deep 的迁移、兼容窗口、监控、回滚和不可逆批准点;
|
|
117
117
|
- 可判定验收标准。
|
|
118
118
|
|
|
@@ -140,8 +140,8 @@ Ticket 是**决策完备的微型执行计划**:它消除执行者在目标、
|
|
|
140
140
|
- 依赖缺失或 DAG 有环;
|
|
141
141
|
- 可写路径不明确或并行所有权冲突;
|
|
142
142
|
- 验证方法不能执行且没有批准的替代证据;
|
|
143
|
-
- Ticket 未声明 E2E required/not-required
|
|
144
|
-
- 无法形成实现 commit 与 candidate-merge 父分支出口;
|
|
143
|
+
- Ticket 未声明 E2E required/not-required 及理由,或在 required 模式把 E2E 安排到 source worktree;
|
|
144
|
+
- 无法形成实现 commit 与 Goal Plan 所选 direct-parent/candidate-merge 父分支出口;
|
|
145
145
|
- 单个新上下文无法完成;
|
|
146
146
|
- Standard/Deep 缺少有序执行路线;
|
|
147
147
|
- Deep 缺少迁移、兼容、监控、回滚或批准点。
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
- [ ] 每个 shared path 在 `shared_path_owners` 中有唯一 owner。
|
|
16
16
|
- [ ] 正常、失败和回归至少各有一条验证,或有可信的不适用原因。
|
|
17
17
|
- [ ] 明确 `E2E disposition: required | not-required: reason`;required 场景、预期和接缝可执行。
|
|
18
|
-
- [ ]
|
|
19
|
-
- [ ] Ticket
|
|
18
|
+
- [ ] 按 Goal Plan 策略定义 current-workspace 或 source-worktree 的非 E2E 检查;E2E owner 固定为 Lead,运行环境分别为 current-workspace 或 parent-candidate。
|
|
19
|
+
- [ ] Ticket 完成合同包含 implementation commit、direct-parent 或 candidate-merge、父分支 result SHA 和 Lead Evidence;仅 required 模式需要独立 worktree。
|
|
20
20
|
- [ ] Evidence 位置明确为 `<Path>{roots.state}/specdev/changes/{change}/evidence/{ticket-id}.md</Path>`。
|
|
21
21
|
- [ ] 单个全新上下文能够完成;否则已拆分。
|
|
22
22
|
- [ ] 所有内部文件与目录引用使用完整根变量 Path 标签。
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
|
|
33
33
|
- [ ] 迁移顺序、兼容窗口、监控、回滚或前向恢复、收缩条件和批准点完整。
|
|
34
34
|
- [ ] 安全、隐私、资金或数据完整性风险有缓解与验证。
|
|
35
|
-
- [ ] 跨 implementation owner
|
|
35
|
+
- [ ] 跨 implementation owner 的路径所有权和所选 direct-parent/parent-candidate 集成 Gate 明确。
|
|
36
36
|
- [ ] expand-contract 的收缩条件可通过扫描、指标、查询或测试证明。
|
|
37
37
|
|
|
38
38
|
## Ready 状态
|
|
@@ -102,12 +102,12 @@ shared_path_owners: []
|
|
|
102
102
|
|
|
103
103
|
不适用的关键风险类别必须写“不适用:原因”。
|
|
104
104
|
|
|
105
|
-
- **
|
|
105
|
+
- **Workspace checks:** 按 Goal Plan 在 current workspace 或 source worktree 运行单元、组件、静态、类型、lint/build 等适用非 E2E 检查。
|
|
106
106
|
- **E2E disposition:** required / not-required:原因。
|
|
107
|
-
- **E2E owner/environment:** Lead / parent-candidate;required 时写明场景、接缝与预期。
|
|
108
|
-
- **Integration evidence:** source commit、parent before
|
|
107
|
+
- **E2E owner/environment:** Lead / current-workspace 或 parent-candidate;required 时写明场景、接缝与预期。
|
|
108
|
+
- **Integration evidence:** implementation/source commit、parent before、适用 candidate/result SHA 和父分支包含关系。
|
|
109
109
|
|
|
110
|
-
E2E 由实际跨边界行为与风险决定,不限于 UI
|
|
110
|
+
E2E 由实际跨边界行为与风险决定,不限于 UI;required 模式不得在 Ticket source worktree 运行或声明通过。
|
|
111
111
|
|
|
112
112
|
## 9. 发布、迁移与恢复
|
|
113
113
|
|
|
@@ -125,7 +125,7 @@ E2E 由实际跨边界行为与风险决定,不限于 UI;不得在 Ticket so
|
|
|
125
125
|
- [ ] `AC-001`:<可判定结果>。
|
|
126
126
|
- [ ] 验证矩阵全部执行并记录到 `<Path>{roots.state}/specdev/changes/{change}/evidence/T-01.md</Path>`。
|
|
127
127
|
- [ ] 实际项目修改未超出 `writable_paths`,shared path 由指定 owner 修改。
|
|
128
|
-
- [ ] Ticket
|
|
129
|
-
- [ ] E2E disposition 已执行;required E2E 在 parent-candidate 由 Lead 完成。
|
|
128
|
+
- [ ] Ticket 已按 Goal Plan 策略形成非空 implementation/source commit,direct-parent 或 candidate 验证通过且父分支 result 已记录。
|
|
129
|
+
- [ ] E2E disposition 已执行;required 模式 E2E 在 parent-candidate、current 模式在 current workspace 由 Lead 完成。
|
|
130
130
|
- [ ] 未发生未批准的范围、契约或发布偏差。
|
|
131
131
|
- [ ] Ticket、Tickets Map 和 Evidence 状态一致。
|
|
@@ -46,11 +46,11 @@ T-01 [READY]
|
|
|
46
46
|
|
|
47
47
|
## 5. 并行与路径所有权
|
|
48
48
|
|
|
49
|
-
- implementation subagent 上限来自 `<Path>{roots.state}/specdev/config.json</Path
|
|
49
|
+
- implementation subagent 上限来自 `<Path>{roots.state}/specdev/config.json</Path>`,Goal Plan 可进一步降低且不含 Lead。
|
|
50
50
|
- review/research/test-observation agent 不设 SpecDev 数字上限,但保持只读。
|
|
51
51
|
- shared owner 为专用 Ticket;Lead 是 SpecDev 状态与父分支 integration owner。
|
|
52
52
|
- 项目路径契约以 Ticket frontmatter 为准。
|
|
53
|
-
- 每个实现 Ticket
|
|
53
|
+
- 每个实现 Ticket 的 workspace 由 Goal Plan 选择;current 模式串行使用当前 workspace,required 模式使用独立 worktree;只读调查不进入 I-implement Ticket。
|
|
54
54
|
|
|
55
55
|
| Ticket A | Ticket B | Writable 交集 | 真实依赖 | 处理 |
|
|
56
56
|
|---|---|---|---|---|
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
- 包与 change 校验器:`<Path>{roots.workflows}/specdev/common/tools/validate-specdev.mjs</Path>`
|
|
45
45
|
- 校验器说明:`<Path>{roots.workflows}/specdev/common/tools/README.md</Path>`
|
|
46
46
|
- 外部技术研究 Skill:`<Path>{roots.workflows}/specdev/common/skills/research/SKILL.md</Path>`
|
|
47
|
-
- Ticket/原型 worktree Skill:`<Path>{roots.workflows}/specdev/common/skills/dev-worktree/SKILL.md</Path
|
|
47
|
+
- Ticket/原型 worktree Skill:`<Path>{roots.workflows}/specdev/common/skills/dev-worktree/SKILL.md</Path>`;仅 required Ticket 使用 source → parent-candidate → parent 状态机,current Ticket 使用 current workspace/direct-parent,原型保持临时生命周期
|
|
48
48
|
- 动态 Agent 交付合同 Skill:`<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/SKILL.md</Path>`;P-goal-plan 建立 Lead 合同,I-implement 在执行期派单与验收
|
|
49
49
|
- 双轴代码审查 Skill:`<Path>{roots.workflows}/specdev/common/skills/code-review/SKILL.md</Path>`
|
|
50
50
|
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
一个 change 只有同时满足以下条件才能 completed:
|
|
8
8
|
|
|
9
9
|
1. 所有计划内 Ticket 为 done,或因权威事实无需改动而记录为 cancelled;Direct Spec/非实现流程有等价验收。
|
|
10
|
-
2.
|
|
10
|
+
2. required Ticket 有 source commit、passed candidate、父分支 result SHA,且父分支包含 source commit;current Ticket 有 implementation commit、passed direct-parent 验证和父分支 result SHA;对应 workspace 记录均为完成状态。
|
|
11
11
|
3. 每个行为有 Lead Evidence,全部 Spec 合同与 Goal Gate 可定位。
|
|
12
|
-
4. source-worktree 非 E2E 检查、parent-candidate 集成/回归和 required E2E 已通过;not-required 有理由。
|
|
12
|
+
4. current Ticket 的 current-workspace 检查/回归和适用 E2E,或 required Ticket 的 source-worktree 非 E2E 检查、parent-candidate 集成/回归和 required E2E 已通过;not-required 有理由。
|
|
13
13
|
5. 迁移、发布、监控、恢复和不可逆批准已完成或明确不适用。
|
|
14
14
|
6. 没有未批准 deviation、blocker、unverified、活动 candidate 或未集成 source checkpoint。
|
|
15
15
|
7. Ticket、Map、Goal Plan、Evidence、change status 与实际 Git 一致。
|
|
@@ -8,19 +8,23 @@
|
|
|
8
8
|
|
|
9
9
|
| 行为或风险 | 接缝 | 命令/方法 | 环境 | 预期 | Evidence |
|
|
10
10
|
|---|---|---|---|---|---|
|
|
11
|
-
| 正常/失败路径 | 公共接口或稳定接缝 | 定向测试 | source-worktree | 合同成立 | Ticket Evidence |
|
|
12
|
-
| 跨模块回归 | 集成接缝 | 回归命令 | parent-candidate | 组合状态成立 | Ticket Evidence |
|
|
13
|
-
| E2E required | 真实端到端边界 | 场景步骤 | parent-candidate | 外部行为成立 | Ticket Evidence |
|
|
11
|
+
| 正常/失败路径 | 公共接口或稳定接缝 | 定向测试 | current-workspace 或 source-worktree | 合同成立 | Ticket Evidence |
|
|
12
|
+
| 跨模块回归 | 集成接缝 | 回归命令 | current-workspace 或 parent-candidate | 组合状态成立 | Ticket Evidence |
|
|
13
|
+
| E2E required | 真实端到端边界 | 场景步骤 | current-workspace 或 parent-candidate | 外部行为成立 | Ticket Evidence |
|
|
14
14
|
|
|
15
15
|
## 2. 两层验证
|
|
16
16
|
|
|
17
|
+
### Current workspace
|
|
18
|
+
|
|
19
|
+
current 模式的 implementation owner 在当前父分支和当前 workspace 工作。Ticket 必须严格串行,workspace clean 后形成非空 implementation commit;Lead 在同一 workspace 执行适用集成/回归和 E2E,并在父 HEAD 未漂移时将 Ticket commit 记录为 result SHA。
|
|
20
|
+
|
|
17
21
|
### Source-worktree
|
|
18
22
|
|
|
19
23
|
implementation owner 运行最接近目标行为的单元/组件测试、静态分析、类型、lint/build 等适用非 E2E 检查。来源实现必须在 clean worktree 形成 commit。任何 source-worktree E2E pass 声明无效。
|
|
20
24
|
|
|
21
25
|
### Parent-candidate
|
|
22
26
|
|
|
23
|
-
Lead 在最新父分支与 source commit 的 candidate 状态运行受影响集成/回归、项目父状态检查和适用 E2E。E2E 由实际跨边界风险决定,不限于 UI;not-required 必须写理由。required E2E 未运行或失败时不得推进父分支。
|
|
27
|
+
required 模式下,Lead 在最新父分支与 source commit 的 candidate 状态运行受影响集成/回归、项目父状态检查和适用 E2E。E2E 由实际跨边界风险决定,不限于 UI;not-required 必须写理由。required E2E 未运行或失败时不得推进父分支。
|
|
24
28
|
|
|
25
29
|
### Direct Spec
|
|
26
30
|
|
|
@@ -40,8 +44,8 @@ subagent 只返回候选命令与结果,不写 Evidence。Lead 重读 workspac
|
|
|
40
44
|
|
|
41
45
|
## 5. Evidence 最低内容
|
|
42
46
|
|
|
43
|
-
每个 Ticket Evidence 至少包含:Lead、Dispatch/返回(若有)、base/source/
|
|
47
|
+
每个 Ticket Evidence 至少包含:Lead、Dispatch/返回(若有)、workspace 策略、base/source/result SHA、candidate 字段(required 模式适用,current 模式明确不适用)、实际路径、每条命令/环境/退出状态、合同映射、双轴审查、E2E disposition、未运行项、失败分类、偏差、残余风险和父分支重读结果。
|
|
44
48
|
|
|
45
|
-
Ticket Done 必须有 source commit、通过 candidate、父分支 result 与 Lead Evidence。无法运行 required 验证、存在未批准偏差、父分支未包含
|
|
49
|
+
required Ticket Done 必须有 source commit、通过 candidate、父分支 result 与 Lead Evidence;current Ticket Done 必须有 implementation commit、通过 direct-parent 验证、父分支 result 与 Lead Evidence。无法运行 required 验证、存在未批准偏差、父分支未包含 Ticket commit 或 Evidence 不完整时不得 Done。
|
|
46
50
|
|
|
47
51
|
Direct Spec Evidence 至少包含:用户批准与轻量合同、Lead、实施前/最终 checkpoint、实际路径、定向/回归/E2E 命令及环境、验收映射、未运行项、偏差、残余风险和提交授权状态。
|
|
@@ -20,14 +20,14 @@
|
|
|
20
20
|
5. 越界前停止并按 deviation control 提出 ownership change;不得先改后报。
|
|
21
21
|
6. 上游 Ticket 改变目录/合同后,下游基于已集成父分支重新解析路径和 preflight。
|
|
22
22
|
|
|
23
|
-
## 3. Ticket
|
|
23
|
+
## 3. Ticket workspace strategy
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
Goal Plan 创建时选择 Ticket workspace strategy,默认 `current`。`current` 模式的 Ticket 使用当前分支、当前 workspace 和严格串行执行;允许一个 implementation subagent 写入当前 workspace,但前一 Ticket 必须完成 commit、Lead 验收和 direct-parent 验证后才能开始下一个。`required` 模式每个 Ticket 使用唯一来源 worktree `specdev-worktree/<ticket-id>`,并通过 candidate-merge 集成。没有 Ticket 的获批 Direct Spec 继续由 current workspace 唯一 owner 执行;只读调查不创建实现 worktree。
|
|
26
26
|
|
|
27
|
-
workspace/implementation owner 可以是 Lead 或动态 implementation subagent;integration owner 固定为 Lead
|
|
27
|
+
workspace/implementation owner 可以是 Lead 或动态 implementation subagent;integration owner 固定为 Lead。current 模式 Lead 在父分支直接验收和推进,required 模式 Lead 建立 parent-candidate、运行适用 E2E 并推进父分支。required 生命周期由 `<Path>{roots.workflows}/specdev/common/skills/dev-worktree/SKILL.md</Path>` 管理,current 生命周期由 I-implement 的 direct-parent 规则管理。
|
|
28
28
|
|
|
29
29
|
## 4. 并发
|
|
30
30
|
|
|
31
|
-
implementation subagent
|
|
31
|
+
required 模式 implementation subagent 上限取 Goal Plan、config 和平台能力共同约束,Lead 不计入。current 模式保持单 writer 串行安全不变量,Ticket 严格串行。review/research/test-observation agent 不设置 SpecDev 数字上限,但 Lead 必须避免重复工作与可变环境争用。
|
|
32
32
|
|
|
33
33
|
**完成标准**:每个项目写入映射到唯一 Ticket、owner 和来源 worktree;shared 与父分支写入 owner 唯一。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "urn:speculo:specdev:change-status:
|
|
3
|
+
"$id": "urn:speculo:specdev:change-status:v6",
|
|
4
4
|
"title": "SpecDev Change Status",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"required": [
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"completed_at", "archived", "archive_path", "blockers", "deviations", "worktrees"
|
|
10
10
|
],
|
|
11
11
|
"properties": {
|
|
12
|
-
"schema_version": {"const":
|
|
12
|
+
"schema_version": {"const": 6},
|
|
13
13
|
"artifact": {"const": "change-status"},
|
|
14
14
|
"change": {"type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*$"},
|
|
15
15
|
"change_status": {"enum": ["active", "blocked", "completed", "archived"]},
|
|
@@ -113,12 +113,39 @@
|
|
|
113
113
|
"base_sha": {"type": "string", "minLength": 1},
|
|
114
114
|
"parent_branch": {"type": "string", "minLength": 1},
|
|
115
115
|
"branch": {"type": "string", "minLength": 1},
|
|
116
|
-
"workspace_ref": {"type": "string", "pattern": "^specdev-worktree/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*/T-[0-9]{2,}$"},
|
|
116
|
+
"workspace_ref": {"type": "string", "pattern": "^(?:current|specdev-worktree/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*/T-[0-9]{2,})$"},
|
|
117
117
|
"source_checkpoint": {"type": ["string", "null"]},
|
|
118
118
|
"integration": {"$ref": "#/$defs/integration"},
|
|
119
119
|
"status": {"enum": ["planned", "active", "review", "integrating", "integrated", "removed", "blocked"]},
|
|
120
120
|
"updated_at": {"type": "string", "minLength": 1}
|
|
121
121
|
},
|
|
122
|
+
"allOf": [
|
|
123
|
+
{
|
|
124
|
+
"if": {"properties": {"workspace_ref": {"const": "current"}}, "required": ["workspace_ref"]},
|
|
125
|
+
"then": {
|
|
126
|
+
"properties": {
|
|
127
|
+
"integration": {
|
|
128
|
+
"allOf": [{
|
|
129
|
+
"properties": {
|
|
130
|
+
"candidate_sha": {"const": null},
|
|
131
|
+
"candidate_tree_sha": {"const": null},
|
|
132
|
+
"candidate_branch": {"const": null},
|
|
133
|
+
"candidate_workspace_ref": {"const": null},
|
|
134
|
+
"method": {"enum": [null, "direct-parent"]}
|
|
135
|
+
}
|
|
136
|
+
}]
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"else": {
|
|
141
|
+
"properties": {
|
|
142
|
+
"integration": {
|
|
143
|
+
"allOf": [{"properties": {"method": {"enum": [null, "fast-forward", "merge-commit"]}}}]
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
],
|
|
122
149
|
"additionalProperties": false
|
|
123
150
|
},
|
|
124
151
|
"integration": {
|
|
@@ -134,7 +161,7 @@
|
|
|
134
161
|
"candidate_branch": {"type": ["string", "null"]},
|
|
135
162
|
"candidate_workspace_ref": {"anyOf": [{"type": "null"}, {"type": "string", "pattern": "^specdev-worktree/\\.integration/[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*/T-[0-9]{2,}$"}]},
|
|
136
163
|
"result_sha": {"type": ["string", "null"]},
|
|
137
|
-
"method": {"enum": [null, "fast-forward", "merge-commit"]},
|
|
164
|
+
"method": {"enum": [null, "direct-parent", "fast-forward", "merge-commit"]},
|
|
138
165
|
"conflict_paths": {"type": "array", "items": {"type": "string"}},
|
|
139
166
|
"verification": {"enum": ["pending", "passed", "failed"]},
|
|
140
167
|
"full_suite": {"$ref": "#/$defs/full-suite"},
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "urn:speculo:specdev:config:
|
|
3
|
+
"$id": "urn:speculo:specdev:config:v5",
|
|
4
4
|
"title": "SpecDev Configuration",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"required": ["schema_version", "interaction_language", "artifact_language", "git", "execution", "verification", "planning"],
|
|
7
7
|
"properties": {
|
|
8
|
-
"schema_version": {"const":
|
|
8
|
+
"schema_version": {"const": 5},
|
|
9
9
|
"interaction_language": {"type": "string", "minLength": 1},
|
|
10
10
|
"artifact_language": {"type": "string", "minLength": 1},
|
|
11
11
|
"git": {
|
|
@@ -18,9 +18,10 @@
|
|
|
18
18
|
},
|
|
19
19
|
"execution": {
|
|
20
20
|
"type": "object",
|
|
21
|
-
"required": ["max_implementation_agents", "deep_ticket_human_approval", "shared_path_owner"],
|
|
21
|
+
"required": ["max_implementation_agents", "max_integration_attempts", "deep_ticket_human_approval", "shared_path_owner"],
|
|
22
22
|
"properties": {
|
|
23
|
-
"max_implementation_agents": {"type": "integer", "minimum": 1
|
|
23
|
+
"max_implementation_agents": {"type": "integer", "minimum": 1},
|
|
24
|
+
"max_integration_attempts": {"type": "integer", "minimum": 1},
|
|
24
25
|
"deep_ticket_human_approval": {"type": "boolean"},
|
|
25
26
|
"shared_path_owner": {"type": "string", "minLength": 1}
|
|
26
27
|
},
|
|
@@ -39,14 +40,19 @@
|
|
|
39
40
|
},
|
|
40
41
|
"planning": {
|
|
41
42
|
"type": "object",
|
|
42
|
-
"required": ["default_depth", "require_ready_gate", "require_evidence"],
|
|
43
|
+
"required": ["default_depth", "require_ready_gate", "require_evidence", "ui_prototype_default_variants", "ui_prototype_max_variants"],
|
|
43
44
|
"properties": {
|
|
44
45
|
"default_depth": {"enum": ["lite", "standard", "deep"]},
|
|
45
46
|
"require_ready_gate": {"type": "boolean"},
|
|
46
|
-
"require_evidence": {"type": "boolean"}
|
|
47
|
+
"require_evidence": {"type": "boolean"},
|
|
48
|
+
"ui_prototype_default_variants": {"type": "integer", "minimum": 1},
|
|
49
|
+
"ui_prototype_max_variants": {"type": "integer", "minimum": 1}
|
|
47
50
|
},
|
|
48
51
|
"additionalProperties": true
|
|
49
52
|
}
|
|
50
53
|
},
|
|
54
|
+
"allOf": [{
|
|
55
|
+
"$comment": "ui_prototype_default_variants <= ui_prototype_max_variants is enforced by validate-specdev.mjs because JSON Schema cannot compare sibling numeric values."
|
|
56
|
+
}],
|
|
51
57
|
"additionalProperties": false
|
|
52
58
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "urn:speculo:specdev:goal-plan:
|
|
3
|
+
"$id": "urn:speculo:specdev:goal-plan:v6",
|
|
4
4
|
"title": "SpecDev Goal Plan Frontmatter",
|
|
5
5
|
"type": "object",
|
|
6
6
|
"required": [
|
|
7
7
|
"schema_version", "artifact", "change", "status", "modes", "orchestration",
|
|
8
|
-
"lead", "implementation_agent_limit", "ticket_workspace_policy", "integration_gate",
|
|
8
|
+
"lead", "implementation_agent_limit", "integration_attempt_limit", "ticket_workspace_policy", "integration_gate",
|
|
9
9
|
"ready_for_execution"
|
|
10
10
|
],
|
|
11
11
|
"properties": {
|
|
12
|
-
"schema_version": {"const":
|
|
12
|
+
"schema_version": {"const": 6},
|
|
13
13
|
"artifact": {"const": "goal-plan"},
|
|
14
14
|
"change": {"type": "string", "minLength": 1},
|
|
15
15
|
"status": {"enum": ["draft", "ready", "in_progress", "completed", "blocked"]},
|
|
@@ -20,12 +20,21 @@
|
|
|
20
20
|
},
|
|
21
21
|
"orchestration": {"const": "lead-directed"},
|
|
22
22
|
"lead": {"type": "string", "minLength": 1},
|
|
23
|
-
"implementation_agent_limit": {"type": "integer", "minimum": 1
|
|
24
|
-
"
|
|
25
|
-
"
|
|
23
|
+
"implementation_agent_limit": {"type": "integer", "minimum": 1},
|
|
24
|
+
"integration_attempt_limit": {"type": "integer", "minimum": 1},
|
|
25
|
+
"ticket_workspace_policy": {"enum": ["current", "required"]},
|
|
26
|
+
"integration_gate": {"enum": ["direct-parent", "candidate-merge"]},
|
|
26
27
|
"ready_for_execution": {"type": "boolean"}
|
|
27
28
|
},
|
|
28
29
|
"allOf": [
|
|
30
|
+
{
|
|
31
|
+
"if": {"properties": {"ticket_workspace_policy": {"const": "current"}}, "required": ["ticket_workspace_policy"]},
|
|
32
|
+
"then": {"properties": {"integration_gate": {"const": "direct-parent"}}}
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"if": {"properties": {"ticket_workspace_policy": {"const": "required"}}, "required": ["ticket_workspace_policy"]},
|
|
36
|
+
"then": {"properties": {"integration_gate": {"const": "candidate-merge"}}}
|
|
37
|
+
},
|
|
29
38
|
{
|
|
30
39
|
"if": {"properties": {"status": {"enum": ["draft", "blocked", "completed"]}}, "required": ["status"]},
|
|
31
40
|
"then": {"properties": {"ready_for_execution": {"const": false}}}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dev-worktree
|
|
3
|
-
description: 管理 SpecDev Ticket 或原型的 Git worktree;为 Ticket 创建隔离来源 workspace、固定实现 commit,并由 Lead 在 parent-candidate checkout 验证后推进父分支。
|
|
3
|
+
description: 管理 SpecDev required Ticket 或原型的 Git worktree;为 required Ticket 创建隔离来源 workspace、固定实现 commit,并由 Lead 在 parent-candidate checkout 验证后推进父分支。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Dev Worktree
|
|
7
7
|
|
|
8
|
-
本 Skill 由 T-tickets/P-goal-plan/I-implement 和 P-prototype 复用。`purpose=ticket`
|
|
8
|
+
本 Skill 由 T-tickets/P-goal-plan/I-implement 和 P-prototype 复用。`purpose=ticket` 仅在 Goal Plan 选择 `required` 时使用完整 source → candidate → parent 状态机;`current` Ticket 不调用本 Skill。`purpose=prototype` 只使用调用方批准的临时生命周期。
|
|
9
9
|
|
|
10
10
|
## 输入
|
|
11
11
|
|
|
@@ -15,7 +15,7 @@ description: 管理 SpecDev Ticket 或原型的 Git worktree;为 Ticket 创建
|
|
|
15
15
|
- workspace、implementation 和 integration owner;
|
|
16
16
|
- 允许动作、路径合同、验证合同、调用方状态记录位置。
|
|
17
17
|
|
|
18
|
-
Ticket 还必须提供 Ready Ticket、Goal Plan(若存在)、Evidence 路径、implementation commit 与本地 candidate integration/父分支更新授权。缺失时返回 blocked
|
|
18
|
+
required Ticket 还必须提供 Ready Ticket、Goal Plan(若存在)、Evidence 路径、implementation commit 与本地 candidate integration/父分支更新授权。缺失时返回 blocked;current Ticket 应按 I-implement 的 direct-parent 规则执行。
|
|
19
19
|
|
|
20
20
|
## 1. 创建或恢复
|
|
21
21
|
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
- 项目要求的 typecheck/lint/build 或其他父状态检查;
|
|
32
32
|
- 仅当 Ticket/Goal Plan `e2e.required=true` 时运行对应 E2E。
|
|
33
33
|
|
|
34
|
-
每条命令记录运行环境 `parent-candidate`、退出码与摘要。E2E required 未运行或失败时 integration `verification=failed`、`status=failed`;父分支保持 `parent_before_sha
|
|
34
|
+
每条命令记录运行环境 `parent-candidate`、退出码与摘要。E2E required 未运行或失败时 integration `verification=failed`、`status=failed`;父分支保持 `parent_before_sha`。机械修正次数不得超过 Goal Plan 快照的 `integration_attempt_limit`;不得放宽断言、删除检查或发明行为。
|
|
35
35
|
|
|
36
36
|
## 4. 推进父分支
|
|
37
37
|
|
|
@@ -15,15 +15,15 @@ description: 动态派单合同:为 Lead 生成受限的 implementation/review
|
|
|
15
15
|
- `operation=dispatch`:提供 `task_kind=implementation | review | research | test-observation`、已存在 Goal Plan(若有)、Ticket/固定审查目标、依赖 Evidence、适用合同、repository、不可变 checkpoint、项目 Agent 指令、workspace/session locator、provider、允许动作、路径边界、检查、停止条件与返回格式;
|
|
16
16
|
- `operation=accept`:提供原 Dispatch Packet、subagent 返回、当前 repository/workspace、预期与实际 checkpoint,以及 Lead 可用于独立核对的 Git/命令事实。
|
|
17
17
|
|
|
18
|
-
`operation=dispatch` 且 `task_kind=implementation`
|
|
18
|
+
`operation=dispatch` 且 `task_kind=implementation` 时,必须提供 Goal Plan 的 workspace strategy、branch、`base_sha`、writable/shared owner、implementation commit 授权与对应检查。`required` 必须提供独立 Ticket worktree 和 source-worktree 非 E2E 检查;`current` 必须提供 `workspace_ref=current`、parent branch 和 current-workspace 串行锁。缺失时返回 blocked,不推断策略或并发权限。
|
|
19
19
|
|
|
20
20
|
## 1. 固定 Lead 与任务类型
|
|
21
21
|
|
|
22
22
|
Lead 保留需求解释、DAG/Wave/Gate、shared owner、权限、SpecDev 工件、Evidence、candidate-merge、父分支和最终回复。subagent 不写 Ticket、Map、Goal Plan、Evidence、change status 或父分支。
|
|
23
23
|
|
|
24
|
-
- implementation
|
|
24
|
+
- implementation 可以在 required 模式写唯一 Ticket worktree,或在 current 模式按串行锁写当前 workspace,并在授权时创建实现 commit;
|
|
25
25
|
- review/research/test-observation 只读,返回 findings、来源或命令观察;
|
|
26
|
-
- E2E Gate 永远由 Lead 拥有,不能派给 implementation 或只读 agent;Ticket E2E 在 parent-candidate 状态执行,Direct Spec E2E 在 Lead-owned current workspace 执行。
|
|
26
|
+
- E2E Gate 永远由 Lead 拥有,不能派给 implementation 或只读 agent;required Ticket E2E 在 parent-candidate 状态执行,current Ticket 和 Direct Spec E2E 在 Lead-owned current workspace 执行。
|
|
27
27
|
|
|
28
28
|
**完成标准**:Lead、task kind、写入边界和 E2E owner 唯一。
|
|
29
29
|
|
|
@@ -44,7 +44,7 @@ Lead 保留需求解释、DAG/Wave/Gate、shared owner、权限、SpecDev 工件
|
|
|
44
44
|
- 原生 Agent:加载 `<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/references/native-subagent.md</Path>`;
|
|
45
45
|
- 外部网页 Agent:加载 `<Path>{roots.workflows}/specdev/common/skills/subagent-delivery/references/external-web-subagent.md</Path>`。
|
|
46
46
|
|
|
47
|
-
implementation Packet
|
|
47
|
+
implementation Packet 必须适合一个上下文独立完成;required 模式多个 implementation subagent 由 Lead 控制在 Goal Plan、config 与平台能力共同上限内,current 模式保持单 writer 串行。只读 agent 不设置 SpecDev 数字上限,但不得争用可变环境。
|
|
48
48
|
|
|
49
49
|
**完成标准**:Packet 可独立投递;目标、checkpoint、路径、权限、检查和返回均可判定。
|
|
50
50
|
|