create-yss-spec 3.4.9 → 3.5.0
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/package.json +1 -1
- package/src/api/_sync-service.js +111 -18
- package/src/cli/args.js +1 -0
- package/src/cli/help.js +10 -1
- package/src/cli/index.js +3 -0
- package/src/cli/prompts.js +5 -1
- package/src/cli/router.js +2 -0
- package/src/commands/attach.js +12 -2
- package/src/commands/init.js +2 -0
- package/src/commands/skills.js +253 -0
- package/src/commands/sync.js +3 -0
- package/src/family-identity.js +1 -1
- package/src/template/asset-runtime.js +220 -0
- package/src/template/attach-planner.js +5 -0
- package/src/template/distribution-runtime.js +165 -0
- package/src/template/instance-runtime.js +76 -29
- package/src/template/ownership-policy.js +17 -1
- package/src/template/prune-planner.js +6 -1
- package/src/template/sync-planner.js +8 -0
- package/src/template/verification-runtime.js +56 -1
- package/src/validation/metadata.js +24 -1
- package/template/.agents/skills/.strategic-design-skills-manifest.json +1 -1
- package/template/.agents/skills/yss-cache/SKILL.md +6 -5
- package/template/.agents/skills/yss-cache/references/annotations.md +3 -1
- package/template/.agents/skills/yss-cache/references/architecture.md +4 -2
- package/template/.agents/skills/yss-cache/references/configuration.md +6 -3
- package/template/.agents/skills/yss-cache/references/jetcache.md +21 -0
- package/template/.agents/skills/yss-cache/references/redis-fallback.md +5 -3
- package/template/.agents/skills/yss-cache/references/verification.md +10 -4
- package/template/.agents/skills/yss-cache/scripts/verify-cache-component.sh +26 -20
- package/template/.agents/skills/yss-distributed-id/SKILL.md +14 -58
- package/template/.agents/skills/yss-distributed-id/agents/openai.yaml +2 -2
- package/template/.agents/skills/yss-distributed-id/references/README.md +11 -47
- package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
- package/template/.agents/skills/yss-mybatis/SKILL.md +14 -2
- package/template/.agents/skills/yss-openapi-draft-review/SKILL.md +2 -0
- package/template/.agents/skills/yss-openapi-governance/SKILL.md +4 -0
- package/template/.agents/skills/yss-product-lifecycle/SKILL.md +11 -5
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +68 -5
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration.md +2 -2
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +8 -8
- package/template/.agents/skills/yss-prototype-stage/SKILL.md +4 -2
- package/template/.agents/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs +2 -2
- package/template/.agents/skills/yss-repository/SKILL.md +1 -0
- package/template/.agents/skills/yss-stage-decision/SKILL.md +2 -0
- package/template/.agents/skills/yss-tactical-design/SKILL.md +2 -0
- package/template/.agents/skills/yss-technical-design/SKILL.md +2 -0
- package/template/.agents/skills/yss-technical-design/scripts/engineering-design.mjs +1 -1
- package/template/.agents/skills/yss-technical-design/scripts/validate-technical-design.mjs +11 -8
- package/template/.codex/skills/yss-cache/SKILL.md +6 -5
- package/template/.codex/skills/yss-cache/references/annotations.md +3 -1
- package/template/.codex/skills/yss-cache/references/architecture.md +4 -2
- package/template/.codex/skills/yss-cache/references/configuration.md +6 -3
- package/template/.codex/skills/yss-cache/references/jetcache.md +21 -0
- package/template/.codex/skills/yss-cache/references/redis-fallback.md +5 -3
- package/template/.codex/skills/yss-cache/references/verification.md +10 -4
- package/template/.codex/skills/yss-cache/scripts/verify-cache-component.sh +26 -20
- package/template/.codex/skills/yss-distributed-id/SKILL.md +14 -58
- package/template/.codex/skills/yss-distributed-id/agents/openai.yaml +2 -2
- package/template/.codex/skills/yss-distributed-id/references/README.md +11 -47
- package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
- package/template/.codex/skills/yss-mybatis/SKILL.md +14 -2
- package/template/.codex/skills/yss-openapi-draft-review/SKILL.md +2 -0
- package/template/.codex/skills/yss-openapi-governance/SKILL.md +4 -0
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +11 -5
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +68 -5
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration.md +2 -2
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +8 -8
- package/template/.codex/skills/yss-prototype-stage/SKILL.md +4 -2
- package/template/.codex/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs +2 -2
- package/template/.codex/skills/yss-repository/SKILL.md +1 -0
- package/template/.codex/skills/yss-stage-decision/SKILL.md +2 -0
- package/template/.codex/skills/yss-tactical-design/SKILL.md +2 -0
- package/template/.codex/skills/yss-technical-design/SKILL.md +2 -0
- package/template/.codex/skills/yss-technical-design/scripts/engineering-design.mjs +1 -1
- package/template/.codex/skills/yss-technical-design/scripts/validate-technical-design.mjs +11 -8
- package/template/.cursor/skills/yss-cache/SKILL.md +6 -5
- package/template/.cursor/skills/yss-cache/references/annotations.md +3 -1
- package/template/.cursor/skills/yss-cache/references/architecture.md +4 -2
- package/template/.cursor/skills/yss-cache/references/configuration.md +6 -3
- package/template/.cursor/skills/yss-cache/references/jetcache.md +21 -0
- package/template/.cursor/skills/yss-cache/references/redis-fallback.md +5 -3
- package/template/.cursor/skills/yss-cache/references/verification.md +10 -4
- package/template/.cursor/skills/yss-cache/scripts/verify-cache-component.sh +26 -20
- package/template/.cursor/skills/yss-distributed-id/SKILL.md +14 -58
- package/template/.cursor/skills/yss-distributed-id/agents/openai.yaml +2 -2
- package/template/.cursor/skills/yss-distributed-id/references/README.md +11 -47
- package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
- package/template/.cursor/skills/yss-mybatis/SKILL.md +14 -2
- package/template/.cursor/skills/yss-openapi-draft-review/SKILL.md +2 -0
- package/template/.cursor/skills/yss-openapi-governance/SKILL.md +4 -0
- package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +11 -5
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +68 -5
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration.md +2 -2
- package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +8 -8
- package/template/.cursor/skills/yss-prototype-stage/SKILL.md +4 -2
- package/template/.cursor/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs +2 -2
- package/template/.cursor/skills/yss-repository/SKILL.md +1 -0
- package/template/.cursor/skills/yss-stage-decision/SKILL.md +2 -0
- package/template/.cursor/skills/yss-tactical-design/SKILL.md +2 -0
- package/template/.cursor/skills/yss-technical-design/SKILL.md +2 -0
- package/template/.cursor/skills/yss-technical-design/scripts/engineering-design.mjs +1 -1
- package/template/.cursor/skills/yss-technical-design/scripts/validate-technical-design.mjs +11 -8
- package/template/.pi/skills/yss-cache/SKILL.md +6 -5
- package/template/.pi/skills/yss-cache/references/annotations.md +3 -1
- package/template/.pi/skills/yss-cache/references/architecture.md +4 -2
- package/template/.pi/skills/yss-cache/references/configuration.md +6 -3
- package/template/.pi/skills/yss-cache/references/jetcache.md +21 -0
- package/template/.pi/skills/yss-cache/references/redis-fallback.md +5 -3
- package/template/.pi/skills/yss-cache/references/verification.md +10 -4
- package/template/.pi/skills/yss-cache/scripts/verify-cache-component.sh +26 -20
- package/template/.pi/skills/yss-distributed-id/SKILL.md +14 -58
- package/template/.pi/skills/yss-distributed-id/agents/openai.yaml +2 -2
- package/template/.pi/skills/yss-distributed-id/references/README.md +11 -47
- package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
- package/template/.pi/skills/yss-mybatis/SKILL.md +14 -2
- package/template/.pi/skills/yss-openapi-draft-review/SKILL.md +2 -0
- package/template/.pi/skills/yss-openapi-governance/SKILL.md +4 -0
- package/template/.pi/skills/yss-product-lifecycle/SKILL.md +11 -5
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +68 -5
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration.md +2 -2
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +8 -8
- package/template/.pi/skills/yss-prototype-stage/SKILL.md +4 -2
- package/template/.pi/skills/yss-prototype-stage/scripts/visual-baseline-contract.mjs +2 -2
- package/template/.pi/skills/yss-repository/SKILL.md +1 -0
- package/template/.pi/skills/yss-stage-decision/SKILL.md +2 -0
- package/template/.pi/skills/yss-tactical-design/SKILL.md +2 -0
- package/template/.pi/skills/yss-technical-design/SKILL.md +2 -0
- package/template/.pi/skills/yss-technical-design/scripts/engineering-design.mjs +1 -1
- package/template/.pi/skills/yss-technical-design/scripts/validate-technical-design.mjs +11 -8
- package/template/AGENTS.md +2 -0
- package/template/CONTEXT.md +2 -1
- package/template/README.md +3 -5
- package/template/docs/agents/issue-tracker.md +7 -0
- package/template/docs/agents/skill-migrations.md +4 -0
- package/template/docs/agents/yss-skill-registry.yaml +7 -6
- package/template/docs/design/README.md +0 -1
- package/template/docs/design/design.md +2 -2
- package/template/docs/design/templates/interaction-spec-template.md +1 -1
- package/template/docs/engineering/evidence/aliyun-artifact-resolution.json +446 -0
- package/template/docs/process/contract-reading.md +46 -0
- package/template/docs/process/lifecycle-artifact-map.md +2 -2
- package/template/docs/process/lifecycle-registry-baseline.json +2 -1
- package/template/docs/process/lifecycle-registry.yaml +10 -4
- package/template/docs/process/schemas/api-contract-decision-v2.schema.json +198 -0
- package/template/docs/process/schemas/digital-human-task-package.schema.json +8 -0
- package/template/docs/process/schemas/lifecycle-checkpoint.schema.json +259 -0
- package/template/docs/process/schemas/stage-tracking.schema.json +259 -0
- package/template/docs/process/stage-tracking.md +62 -0
- package/template/docs/process/strategic-handoff-package.md +8 -0
- package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214.md +2 -0
- package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214/347/264/242/345/274/225.md +1 -0
- package/template/docs/user-guide//351/230/266/346/256/265/346/216/245/345/205/245/344/270/216/344/272/247/347/211/251/345/244/215/347/224/250/344/275/277/347/224/250/346/211/213/345/206/214.md +243 -0
- package/template/scripts/api-contract-decision +16 -0
- package/template/scripts/complete-backend-delivery +17 -0
- package/template/scripts/contract +13 -0
- package/template/scripts/design-md +2 -0
- package/template/scripts/dispatch-slice-task +13 -0
- package/template/scripts/lib/api-contract-decision.mjs +45 -4
- package/template/scripts/lib/approval-record.mjs +1 -1
- package/template/scripts/lib/approved-execution-context.mjs +35 -7
- package/template/scripts/lib/backend-architecture.mjs +2 -2
- package/template/scripts/lib/backend-delivery-terminal.mjs +51 -0
- package/template/scripts/lib/backend-platform-provenance.mjs +1 -1
- package/template/scripts/lib/backend-platform.mjs +1 -1
- package/template/scripts/lib/backend-scaffold-prerequisites.mjs +1 -1
- package/template/scripts/lib/context-contract.mjs +1 -1
- package/template/scripts/lib/context-reconciliation.mjs +1 -1
- package/template/scripts/lib/contract-source.mjs +22 -0
- package/template/scripts/lib/contract-views.mjs +109 -0
- package/template/scripts/lib/delivery-preflight.mjs +3 -2
- package/template/scripts/lib/design-md.mjs +230 -0
- package/template/scripts/lib/digital-human-roles.mjs +1 -1
- package/template/scripts/lib/existing-backend-architecture.mjs +4 -3
- package/template/scripts/lib/existing-ui-baseline.mjs +4 -2
- package/template/scripts/lib/frontend-delivery-boundary.mjs +1 -1
- package/template/scripts/lib/frontend-delivery.mjs +1 -1
- package/template/scripts/lib/harness-execution-scope.mjs +15 -1
- package/template/scripts/lib/implementation-contract-compiler.mjs +4 -4
- package/template/scripts/lib/json-schema.mjs +19 -4
- package/template/scripts/lib/lifecycle-context-query.mjs +5 -1
- package/template/scripts/lib/lifecycle-controls.mjs +1 -1
- package/template/scripts/lib/lifecycle-execution-scope.mjs +92 -0
- package/template/scripts/lib/lifecycle-registry.mjs +2 -1
- package/template/scripts/lib/lifecycle-transition.mjs +21 -3
- package/template/scripts/lib/openapi-draft-validation.mjs +2 -1
- package/template/scripts/lib/skill-registry.mjs +10 -3
- package/template/scripts/lib/skill-supply-chain.mjs +33 -14
- package/template/scripts/lib/slice-contract-preparation.mjs +16 -14
- package/template/scripts/lib/slice-contract-views.mjs +1 -1
- package/template/scripts/lib/slice-contract.mjs +18 -3
- package/template/scripts/lib/slice-execution-preflight.mjs +7 -3
- package/template/scripts/lib/slice-repositories.mjs +1 -1
- package/template/scripts/lib/slice-task-package.mjs +3 -2
- package/template/scripts/lib/stage-tracking-migration.mjs +176 -0
- package/template/scripts/lib/stage-tracking.mjs +184 -0
- package/template/scripts/lib/strategic-handoff-consumption.mjs +5 -4
- package/template/scripts/lib/strategic-handoff-io.mjs +5 -2
- package/template/scripts/lib/strategic-handoff-routing.mjs +31 -0
- package/template/scripts/lib/strategic-handoff.mjs +4 -2
- package/template/scripts/lib/task-package.mjs +2 -0
- package/template/scripts/lib/technical-design-boundary.mjs +4 -2
- package/template/scripts/lib/ui-baseline.mjs +1 -1
- package/template/scripts/lib/user-decision.mjs +1 -1
- package/template/scripts/lib/validation-phase.mjs +72 -0
- package/template/scripts/stage-tracking +25 -0
- package/template/scripts/strategic-consumer-entry +47 -0
- package/template/scripts/verify-context-reconciliation +4 -3
- package/template/scripts/verify-lifecycle-checkpoint +10 -0
- package/template/scripts/verify-project-instance +11 -10
- package/template/skills-lock.json +17 -32
- package/template.manifest.json +18 -3
- package/template.snapshot.json +5 -5
- package/template/.agents/skills/grill-me/SKILL.md +0 -7
- package/template/.agents/skills/grill-me/agents/openai.yaml +0 -5
- package/template/.agents/skills/yss-distributed-id/assets/AutoIdInterceptor.java +0 -246
- package/template/.agents/skills/yss-distributed-id/assets/EnableDistributedId.java +0 -25
- package/template/.agents/skills/yss-distributed-id/assets/LeafConf.java +0 -36
- package/template/.codex/skills/grill-me/SKILL.md +0 -7
- package/template/.codex/skills/grill-me/agents/openai.yaml +0 -5
- package/template/.codex/skills/yss-distributed-id/assets/AutoIdInterceptor.java +0 -246
- package/template/.codex/skills/yss-distributed-id/assets/EnableDistributedId.java +0 -25
- package/template/.codex/skills/yss-distributed-id/assets/LeafConf.java +0 -36
- package/template/.cursor/skills/grill-me/SKILL.md +0 -7
- package/template/.cursor/skills/grill-me/agents/openai.yaml +0 -5
- package/template/.cursor/skills/yss-distributed-id/assets/AutoIdInterceptor.java +0 -246
- package/template/.cursor/skills/yss-distributed-id/assets/EnableDistributedId.java +0 -25
- package/template/.cursor/skills/yss-distributed-id/assets/LeafConf.java +0 -36
- package/template/.pi/skills/grill-me/SKILL.md +0 -7
- package/template/.pi/skills/grill-me/agents/openai.yaml +0 -5
- package/template/.pi/skills/yss-distributed-id/assets/AutoIdInterceptor.java +0 -246
- package/template/.pi/skills/yss-distributed-id/assets/EnableDistributedId.java +0 -25
- package/template/.pi/skills/yss-distributed-id/assets/LeafConf.java +0 -36
- package/template/docs/agents/yss-plugin-dependency-contract.md +0 -45
- package/template/docs/api/.gitkeep +0 -0
- package/template/docs/api/specs/.gitkeep +0 -0
- package/template/docs/architecture/.gitkeep +0 -0
- package/template/docs/design/facts/antdv-next/1.5.2/cli-help.txt +0 -38
- package/template/docs/design/facts/antdv-next/1.5.2/component-list.json +0 -434
- package/template/docs/design/facts/antdv-next/1.5.2/components/Alert/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Alert/info.json +0 -246
- package/template/docs/design/facts/antdv-next/1.5.2/components/Alert/semantic.json +0 -40
- package/template/docs/design/facts/antdv-next/1.5.2/components/Alert/token.json +0 -32
- package/template/docs/design/facts/antdv-next/1.5.2/components/Button/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Button/info.json +0 -190
- package/template/docs/design/facts/antdv-next/1.5.2/components/Button/semantic.json +0 -20
- package/template/docs/design/facts/antdv-next/1.5.2/components/Button/token.json +0 -256
- package/template/docs/design/facts/antdv-next/1.5.2/components/Input/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Input/info.json +0 -460
- package/template/docs/design/facts/antdv-next/1.5.2/components/Input/semantic.json +0 -70
- package/template/docs/design/facts/antdv-next/1.5.2/components/Input/token.json +0 -123
- package/template/docs/design/facts/antdv-next/1.5.2/components/Modal/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Modal/info.json +0 -646
- package/template/docs/design/facts/antdv-next/1.5.2/components/Modal/semantic.json +0 -50
- package/template/docs/design/facts/antdv-next/1.5.2/components/Modal/token.json +0 -130
- package/template/docs/design/facts/antdv-next/1.5.2/components/Select/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Select/info.json +0 -640
- package/template/docs/design/facts/antdv-next/1.5.2/components/Select/semantic.json +0 -70
- package/template/docs/design/facts/antdv-next/1.5.2/components/Select/token.json +0 -172
- package/template/docs/design/facts/antdv-next/1.5.2/components/Table/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Table/info.json +0 -1010
- package/template/docs/design/facts/antdv-next/1.5.2/components/Table/semantic.json +0 -70
- package/template/docs/design/facts/antdv-next/1.5.2/components/Table/token.json +0 -263
- package/template/docs/design/facts/antdv-next/1.5.2/components/Tag/demo-basic.json +0 -7
- package/template/docs/design/facts/antdv-next/1.5.2/components/Tag/info.json +0 -321
- package/template/docs/design/facts/antdv-next/1.5.2/components/Tag/semantic.json +0 -25
- package/template/docs/design/facts/antdv-next/1.5.2/components/Tag/token.json +0 -25
- package/template/docs/design/facts/antdv-next/1.5.2/design-md.json +0 -3
- package/template/docs/design/facts/antdv-next/1.5.2/manifest.json +0 -215
- package/template/docs/design/facts/antdv-next/1.5.2/resolution-probe.json +0 -5
- package/template/docs/design/prototypes/.gitkeep +0 -1
- package/template/docs/implementation/.gitkeep +0 -1
- package/template/docs/plan/IDEATION.md +0 -96
- package/template/docs/process/PDCA-SCRUM.md +0 -10
- package/template/docs/process/harness-executive-blueprint.md +0 -10
- package/template/docs/releases/.gitkeep +0 -1
- package/template/docs/requirements/README.md +0 -85
- package/template/docs/requirements/tickets/.gitkeep +0 -1
- package/template/docs/templates/agent-brief-template.md +0 -46
- package/template/docs/templates/architecture-proposal-template.md +0 -18
- package/template/docs/templates/implementation-plan-template.md +0 -16
- package/template/docs/templates/implementation-routing-template.md +0 -350
- package/template/docs/templates/requirement-freeze-template.md +0 -63
- package/template/docs/templates/risk-register-template.md +0 -11
- package/template/docs/templates/user-story-template.md +0 -20
- package/template/docs/testing/README.md +0 -110
|
@@ -3,15 +3,17 @@
|
|
|
3
3
|
## 组件
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
|
-
./mvnw -f yss-microservice-components/yss-component-cache-parent/pom.xml verify
|
|
6
|
+
./mvnw -f yss-microservice-components/yss-component-cache-parent/pom.xml clean verify
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
跨模块测试使用父 reactor 的 `-pl <module> -am`,避免解析本地旧 SNAPSHOT。也可运行:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
scripts/verify-cache-component.sh --source-root /path/to/yss-cloud-microservice
|
|
12
|
+
scripts/verify-cache-component.sh --platform-line boot3-java17 --source-root /path/to/boot3/yss-cloud-microservice
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
+
运行前将 `JAVA_HOME` 与 `PATH` 设为所选平台的 JDK(Boot 2 为 Java 8,Boot 3 为 Java 17);脚本从 `clean verify` 后的每个 cache class 检查 major,无法读取任一 class 即失败。
|
|
16
|
+
|
|
15
17
|
## 消费项目
|
|
16
18
|
|
|
17
19
|
```bash
|
|
@@ -22,13 +24,17 @@ scripts/verify-cache-component.sh --source-root /path/to/yss-cloud-microservice
|
|
|
22
24
|
|
|
23
25
|
## 验收矩阵
|
|
24
26
|
|
|
27
|
+
通用命中、隔离和失效项适用于所选平台线;下述 `failure-mode`、区域策略、`empty-key-eviction` 与 JetCache 场景核验的是当前 Boot 3 / Java 17 组件。Boot 2 的对应行为按其源码和实际配置另行验证。
|
|
28
|
+
|
|
25
29
|
- 首次调用执行业务,第二次相同 key 命中缓存。
|
|
26
30
|
- 不同租户/业务 key 不串值。
|
|
27
31
|
- 更新、删除、状态变更后旧值失效。
|
|
28
32
|
- `condition`、`unless` 和异常返回行为符合预期。
|
|
29
33
|
- 默认 TTL 和枚举覆盖 TTL 在后端物理存在。
|
|
30
|
-
- Redis
|
|
34
|
+
- Redis 故障时 fail-fast、bypass、fallback 的查询与显式写行为分别符合配置;恢复时脏 Redis 区域必须失效,失效失败不得切回。
|
|
35
|
+
- 区域 TTL/容量/空值策略按实际后端生效;`SimpleKey.EMPTY` 在 legacy-clear 与 evict 下分别执行清区与单 key 删除。
|
|
36
|
+
- JetCache 分别验证包装器与原生 `QuickConfig`:包装器即使配置广播频道也不自动同步本地失效;原生 `BOTH + syncLocal(true)` 在频道、相同 area/name 和订阅生效后,用两个独立 JVM 验证更新、删除与未订阅时的旧值边界;第二次创建不改变首次缓存配置。
|
|
31
37
|
- Sentinel/Cluster 创建正确连接工厂,Cluster 使用 DB 0。
|
|
32
38
|
- Docker 可用时真实 Redis 认证、JSON template、JDK cache serialization 和 TTL 测试实际执行。
|
|
33
|
-
- Java 8
|
|
39
|
+
- 所选 Boot 2 / Java 8 源码 class major 为 52;Boot 3 / Java 17 为 61。两条平台线分别使用匹配的源码根运行脚本,Docker 不可用时单独报告真实 Redis 集成测试未执行。
|
|
34
40
|
- `git diff --check` 通过,消费 starter 构建通过。
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
set -u
|
|
3
3
|
|
|
4
|
+
platform_line=""
|
|
4
5
|
source_root=""
|
|
5
6
|
consumer_root=""
|
|
6
7
|
consumer_module=""
|
|
7
8
|
|
|
8
9
|
usage() {
|
|
9
|
-
echo "Usage: $0 [--source-root PATH] [--consumer-root PATH --consumer-module MODULE]" >&2
|
|
10
|
+
echo "Usage: $0 --platform-line <boot2-java8|boot3-java17> [--source-root PATH] [--consumer-root PATH --consumer-module MODULE]" >&2
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
while [ "$#" -gt 0 ]; do
|
|
13
14
|
case "$1" in
|
|
15
|
+
--platform-line) [ "$#" -ge 2 ] || { usage; exit 2; }; platform_line=$2; shift 2 ;;
|
|
14
16
|
--source-root) [ "$#" -ge 2 ] || { usage; exit 2; }; source_root=$2; shift 2 ;;
|
|
15
17
|
--consumer-root) [ "$#" -ge 2 ] || { usage; exit 2; }; consumer_root=$2; shift 2 ;;
|
|
16
18
|
--consumer-module) [ "$#" -ge 2 ] || { usage; exit 2; }; consumer_module=$2; shift 2 ;;
|
|
@@ -19,21 +21,19 @@ while [ "$#" -gt 0 ]; do
|
|
|
19
21
|
esac
|
|
20
22
|
done
|
|
21
23
|
|
|
24
|
+
case "$platform_line" in
|
|
25
|
+
boot2-java8) expected_major=52; configured_root=${YSS_SOURCE_ROOT_BOOT2_JAVA8:-} ;;
|
|
26
|
+
boot3-java17) expected_major=61; configured_root=${YSS_SOURCE_ROOT_BOOT3_JAVA17:-} ;;
|
|
27
|
+
*) usage; exit 2 ;;
|
|
28
|
+
esac
|
|
29
|
+
|
|
22
30
|
if [ -z "$source_root" ]; then
|
|
23
|
-
source_root=$
|
|
24
|
-
fi
|
|
25
|
-
if [ -z "$source_root" ]; then
|
|
26
|
-
for candidate in "$PWD" "$PWD/.." "$HOME/Projects/yss-cloud-microservice" "$HOME/Documents/yss-project/yss-cloud-microservice"; do
|
|
27
|
-
if [ -d "$candidate/yss-microservice-components/yss-component-cache-parent" ]; then
|
|
28
|
-
source_root=$candidate
|
|
29
|
-
break
|
|
30
|
-
fi
|
|
31
|
-
done
|
|
31
|
+
source_root=$configured_root
|
|
32
32
|
fi
|
|
33
33
|
|
|
34
34
|
parent="${source_root%/}/yss-microservice-components/yss-component-cache-parent"
|
|
35
35
|
if [ -z "$source_root" ] || [ ! -f "$parent/pom.xml" ]; then
|
|
36
|
-
echo "ERROR: cannot locate cache parent; use --source-root or YSS_SOURCE_ROOT" >&2
|
|
36
|
+
echo "ERROR: cannot locate cache parent for $platform_line; use --source-root or its generation-specific YSS_SOURCE_ROOT variable" >&2
|
|
37
37
|
exit 2
|
|
38
38
|
fi
|
|
39
39
|
if [ ! -x "$source_root/mvnw" ]; then
|
|
@@ -46,7 +46,7 @@ if { [ -n "$consumer_root" ] && [ -z "$consumer_module" ]; } || { [ -z "$consume
|
|
|
46
46
|
fi
|
|
47
47
|
|
|
48
48
|
echo "== Cache reactor verify =="
|
|
49
|
-
(cd "$source_root" && ./mvnw -f "$parent/pom.xml" verify) || exit 1
|
|
49
|
+
(cd "$source_root" && ./mvnw -f "$parent/pom.xml" clean verify) || exit 1
|
|
50
50
|
|
|
51
51
|
echo "== Docker integration status =="
|
|
52
52
|
report="$parent/yss-component-redis-cache/target/surefire-reports/TEST-com.yss.cloud.cache.redis.config.RedisStandaloneIntegrationTest.xml"
|
|
@@ -66,14 +66,14 @@ fi
|
|
|
66
66
|
|
|
67
67
|
echo "== Diff whitespace =="
|
|
68
68
|
if command -v git >/dev/null 2>&1 && git -C "$source_root" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
|
69
|
-
git -C "$source_root" diff --check || exit 1
|
|
69
|
+
git -C "$source_root" diff --check -- yss-microservice-components/yss-component-cache-parent || exit 1
|
|
70
70
|
else
|
|
71
71
|
echo "SKIP: source root is not a Git worktree"
|
|
72
72
|
fi
|
|
73
73
|
|
|
74
|
-
echo "==
|
|
75
|
-
|
|
76
|
-
if [
|
|
74
|
+
echo "== $platform_line bytecode (major $expected_major) =="
|
|
75
|
+
class_count=$(find "$parent" -path '*/target/classes/*.class' -type f | wc -l | tr -d ' ')
|
|
76
|
+
if [ "$class_count" -eq 0 ]; then
|
|
77
77
|
echo "ERROR: no compiled cache class found" >&2
|
|
78
78
|
exit 1
|
|
79
79
|
fi
|
|
@@ -81,12 +81,18 @@ if ! command -v javap >/dev/null 2>&1; then
|
|
|
81
81
|
echo "ERROR: javap is required for bytecode verification" >&2
|
|
82
82
|
exit 2
|
|
83
83
|
fi
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
major_lines=$(find "$parent" -path '*/target/classes/*.class' -type f -exec javap -verbose {} \; 2>/dev/null | sed -n 's/.*major version: *//p')
|
|
85
|
+
checked_count=$(printf '%s\n' "$major_lines" | sed '/^$/d' | wc -l | tr -d ' ')
|
|
86
|
+
if [ "$checked_count" -ne "$class_count" ]; then
|
|
87
|
+
echo "ERROR: javap inspected $checked_count of $class_count compiled cache classes" >&2
|
|
88
|
+
exit 1
|
|
89
|
+
fi
|
|
90
|
+
majors=$(printf '%s\n' "$major_lines" | sort -u)
|
|
91
|
+
if [ "$majors" != "$expected_major" ]; then
|
|
92
|
+
echo "ERROR: expected only $platform_line major version $expected_major, found: $majors" >&2
|
|
87
93
|
exit 1
|
|
88
94
|
fi
|
|
89
|
-
echo "PASS: all cache classes use major version
|
|
95
|
+
echo "PASS: all cache classes use major version $expected_major"
|
|
90
96
|
|
|
91
97
|
if [ -n "$consumer_root" ]; then
|
|
92
98
|
echo "== Consumer build =="
|
|
@@ -1,72 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yss-distributed-id
|
|
3
|
-
description: "接入或排查 YSS 分布式 ID
|
|
3
|
+
description: "接入或排查 YSS 分布式 ID 的 Segment、Snowflake、主键注入与迁移;旧 CosId/远程调用仅按既有平台线分诊。"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# yss-distributed-id
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
处理 `yss-component-distributed-id` 及 Leaf 消费项目的发号、主键填充与迁移。先从批准的 `platform_configuration.component_platform_line` 选择 [源码索引](references/source-index.md);Boot 2 的历史能力不能推定为 Boot 3 可用能力。无批准合同的既有工程故障可只读分诊,不据此改策略或宣布兼容。
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## 接入决策
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
1. 核对实际组件 GAV、平台线、依赖树及当前源码,再确定已有主键策略、注入模式和数据库约束。保持既有 Long 主键及调用方类型,策略变更单独评估数据和 API 影响。
|
|
13
|
+
2. Boot 3 的数值分布式发号使用本地 Leaf Segment / Snowflake;拦截器仍有 String UUID 分支,但它不是数值发号方案。CosId、Feign/远程注入及旧注解参数是迁移分诊线索,不作为新接入选项;Boot 2 维护以其独立源码索引为准。
|
|
14
|
+
3. Boot 3 默认 `local + Segment`:引入组件后核对 DataSource、JDBC 驱动、目标方言建表脚本及 `leaf_alloc`。不发号的应用应显式关闭注入及 Segment;选 Snowflake 时显式启用 Snowflake、关闭 Segment,并验证 worker-id 唯一、时钟回拨处理和节点重启行为。`local` 注入须且只能启用一种算法,不要把 ZooKeeper 当作当前 Snowflake 的默认依赖。
|
|
15
|
+
4. Segment 缺失标签策略、声明、step 和初始水位必须与真实业务表及既有分配记录一致。自动建标签不建表、也不读取业务表最大 ID;迁移前固定停写/切换边界,起点不得低于已分配号段上界,不重置 `leaf_alloc`。
|
|
16
|
+
5. 主键填充同时核对实体注解、插入方法和参数形态。`IdType.AUTO` 保留数据库自增;`ASSIGN_ID` 或显式 Segment/Snowflake 才走组件发号。已有非零值应保留;生成值与 `Long`、十进制 `String`、`Integer` 的转换及溢出必须验证,不能只凭注解推断批量入口已被拦截。
|
|
15
17
|
|
|
16
|
-
##
|
|
18
|
+
## 排障与验证
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
- 启动失败:按自动配置、注入模式、算法开关、DataSource、`leaf_alloc`、方言顺序定位。`disabled` 仅关闭自动注入;完全不用 Segment 时还须核对其算法开关。
|
|
21
|
+
- 重号/错号:核对跨服务业务 tag、控制表唯一键、当前水位、历史号段、Snowflake worker-id 与时钟;先保留现场,不用重建表或清空控制记录排障。
|
|
22
|
+
- 插入缺 ID:核对 `TableId`/生成策略、实体字段类型、当前公开批量方法及 MyBatis 参数包装是否经过拦截器;再检查消费者自定义 `IdentifierGenerator` 是否接管。
|
|
23
|
+
- 行为修改使用组件父 reactor 的根 `./mvnw` 验证启动、单条/批量主键、迁移边界和目标数据库方言;H2 不能证明生产方言。只读故障分诊与已执行验证分别记录。
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
- 源码位置不要假设固定目录;先按 `yss-skill-source-index-refresh/references/source-location.md` 定位。
|
|
26
|
-
- 当前技能索引:`references/source-index.md`
|
|
27
|
-
- 重点源码入口通常包括 `EnableDistributedId`、`AutoIdInterceptor`、Leaf 配置、Leaf REST/Feign/gRPC 模块、ID 策略相关类。
|
|
28
|
-
|
|
29
|
-
当组件源码变化后,用 `yss-skill-source-index-refresh` 刷新索引;刷新或读取前先按源码定位策略确认真实位置。
|
|
30
|
-
|
|
31
|
-
## 检查清单
|
|
32
|
-
|
|
33
|
-
- 启动类是否启用了分布式 ID 能力。
|
|
34
|
-
- 当前策略是否与部署条件匹配。
|
|
35
|
-
- 批量插入链路是否会经过拦截器。
|
|
36
|
-
- 实体主键类型与生成策略是否兼容。
|
|
37
|
-
- Leaf Segment 场景下 `leaf_alloc` 是否已初始化。
|
|
38
|
-
- MyBatis/MyBatis-Plus 的插入方法是否绕过了自动 ID 拦截逻辑。
|
|
39
|
-
- 多服务共享号段时,业务 tag/key 是否唯一且稳定。
|
|
40
|
-
|
|
41
|
-
## 策略建议
|
|
42
|
-
|
|
43
|
-
- 追求稳定和趋势递增时,优先 Leaf Segment。
|
|
44
|
-
- 依赖 ZooKeeper 且要求高吞吐时,可考虑 Snowflake。
|
|
45
|
-
- 若项目已有 CosId 统一方案,沿用现有生态。
|
|
46
|
-
- 除非业务明确允许,否则不要把 Long 主键切到 String UUID。
|
|
47
|
-
|
|
48
|
-
## 修改约束
|
|
49
|
-
|
|
50
|
-
- 不要混用多种主键生成策略而不说明边界。
|
|
51
|
-
- 不要仅改实体注解而忽略底层配置和依赖。
|
|
52
|
-
- 如果用户只是在做普通 MyBatis-Plus 主键配置,不要过度引入新组件。
|
|
53
|
-
- 不要在已有 Long 主键生态里随意改成 String UUID,除非调用方和数据库约束都确认兼容。
|
|
54
|
-
|
|
55
|
-
## 排障顺序
|
|
56
|
-
|
|
57
|
-
1. 确认启用注解和 starter 依赖。
|
|
58
|
-
2. 确认实体主键类型、注解和插入方法。
|
|
59
|
-
3. 确认拦截器是否参与 MyBatis 调用链。
|
|
60
|
-
4. Leaf 场景确认服务、号段表和业务 key。
|
|
61
|
-
5. Snowflake/CosId 场景确认机器号、时钟、注册中心或 worker 分配。
|
|
62
|
-
6. 批量插入失败时确认是否调用了项目推荐批量方法。
|
|
63
|
-
|
|
64
|
-
## 按需读取
|
|
65
|
-
|
|
66
|
-
- 源码索引:`references/source-index.md`
|
|
67
|
-
- 拦截器与自动注入:`assets/AutoIdInterceptor.java`
|
|
68
|
-
- 启用注解:`assets/EnableDistributedId.java`
|
|
69
|
-
- Leaf 配置相关:`assets/LeafConf.java`
|
|
25
|
+
当前源码入口与平台差异见 [能力与迁移说明](references/README.md)。不要从 Skill 的历史示例或旧资产复制生产源码;精确类名、配置和默认值以选定平台线的当前源码为准。
|
|
70
26
|
|
|
71
27
|
## 平台与源码门禁
|
|
72
28
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
version: 1
|
|
2
2
|
interface:
|
|
3
3
|
display_name: "YSS Distributed ID"
|
|
4
|
-
short_description: "Leaf、
|
|
5
|
-
default_prompt: "Use $yss-distributed-id to configure or debug
|
|
4
|
+
short_description: "Leaf Segment、Snowflake 与主键注入排障"
|
|
5
|
+
default_prompt: "Use $yss-distributed-id to configure or debug platform-bound Leaf Segment, Snowflake, and MyBatis ID injection; treat CosId and remote modes as legacy migration cases."
|
|
@@ -1,51 +1,15 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 分布式 ID 能力与迁移说明
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
本文件只说明选择和核验边界。类名、配置默认值及方法签名以所选平台线的生成索引和匹配的干净源码为准,不复制组件实现。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
| 场景 | Boot 3 / Java 17 当前工作树观察 | 核验重点 |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| Segment | 本地号段;默认 local + Segment | DataSource、目标方言建表、`biz_tag` 唯一键、已分配水位、缺失标签策略 |
|
|
8
|
+
| Snowflake | 本地节点发号;可配置 worker-id,未指定时按节点地址派生 | 所有实例 worker-id 无冲突、时钟回拨和序列等待;不假设 ZooKeeper 注册 |
|
|
9
|
+
| 主键自动填充 | MyBatis 拦截与 MyBatis-Plus `IdentifierGenerator` 两条入口 | `AUTO` 与 `ASSIGN_ID` 区分、已有值保留、批量参数形态、`Integer` 溢出 |
|
|
10
|
+
| String UUID | 本地拦截器仍有 UUID 字符串分支 | 仅核对显式 UUID 策略及 String 字段,不当作 Segment/Snowflake 的数值主键迁移替代 |
|
|
11
|
+
| CosId、Feign/远程注入 | 当前 Boot 3 主线不提供 | 仅对既有项目按其实际平台线和源码做迁移分诊,不把旧模块写成新接入依赖 |
|
|
6
12
|
|
|
7
|
-
|
|
8
|
-
**位置**: `../assets/AutoIdInterceptor.java`
|
|
13
|
+
Segment 从现有业务表接管 ID 时,先记录业务表最大值、`leaf_alloc.max_id` 和尚未用尽的已分配号段,再在停写窗口确定不回退的起点。缺失标签自动创建不会计算这些值;不得删除或重置控制记录。Snowflake 切换需验证新旧机器位语义及所有活跃节点,不在混合写流量时直接换算法。遗留 `feign_segment` 注解仍是明确的拒绝路径,迁移须清理旧注解及依赖,不能用已有非零 ID 掩盖它。
|
|
9
14
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
**拦截逻辑**:
|
|
13
|
-
- **拦截点**: `StatementHandler.prepare` 方法。
|
|
14
|
-
- **判断条件**: 仅拦截 `INSERT` 语句。
|
|
15
|
-
- **处理流程**:
|
|
16
|
-
1. 获取 SQL 绑定的参数对象 (`parameterObject`)。
|
|
17
|
-
2. 支持处理单对象、`List`、`Array` 和 `Map` (MyBatis 多参数封装)。
|
|
18
|
-
3. 遍历参数对象的实体类,检查是否有 `@Entity` (JPA) 或 `@TableName` (MP) 注解。
|
|
19
|
-
4. 扫描实体字段,查找 `@GeneratedValue` 或 `@TableId` 注解。
|
|
20
|
-
5. 根据注解指定的策略 (`segment`, `snowflake`, `cosid_segment` 等),调用对应的 ID 生成器获取 ID。
|
|
21
|
-
6. 通过反射将 ID 设置到实体的相应字段中。
|
|
22
|
-
|
|
23
|
-
### 2. EnableDistributedId.java
|
|
24
|
-
**位置**: `../assets/EnableDistributedId.java`
|
|
25
|
-
|
|
26
|
-
开启分布式 ID 功能的注解。
|
|
27
|
-
|
|
28
|
-
**属性**:
|
|
29
|
-
- `autoRegister`: 是否自动注册配置,默认为 `true`。
|
|
30
|
-
- `cosid`: 是否开启 CosId 模式,默认为 `false` (即默认使用 Leaf 模式)。
|
|
31
|
-
|
|
32
|
-
**作用**:
|
|
33
|
-
- 导入 `LeafDataSourceConfiguration` 和 `EnableDistributedImportSelector`,从而根据配置加载相应的 Bean。
|
|
34
|
-
|
|
35
|
-
### 3. LeafConf.java
|
|
36
|
-
**位置**: `../assets/LeafConf.java`
|
|
37
|
-
|
|
38
|
-
Leaf 模式的配置类,对应 `spring.leaf` 配置项。
|
|
39
|
-
|
|
40
|
-
**属性**:
|
|
41
|
-
- `leafSegmentEnable`: 是否开启号段模式。
|
|
42
|
-
- `leafSnowflakeEnable`: 是否开启雪花算法模式。
|
|
43
|
-
|
|
44
|
-
## ID 生成策略详解
|
|
45
|
-
|
|
46
|
-
| 策略名称 | 依赖组件 | 描述 | 适用场景 |
|
|
47
|
-
| :--- | :--- | :--- | :--- |
|
|
48
|
-
| **Leaf Segment** | DB (MySQL) | 基于数据库号段,每次从 DB 获取一个号段到内存,高性能,ID 趋势递增。 | 大多数业务场景,高可用要求高。 |
|
|
49
|
-
| **Leaf Snowflake** | Zookeeper | 基于 Twitter 雪花算法,依赖 ZK 进行 WorkerID 管理。 | 对 ID 生成速度要求极高,且不依赖 DB 的场景。 |
|
|
50
|
-
| **CosId Segment** | DB (MySQL) | CosId 的号段模式实现,支持更丰富的配置(如步长动态调整)。 | 需要 CosId 特性或作为 Leaf 的替代方案。 |
|
|
51
|
-
| **UUID** | JDK | 标准 UUID。 | 无需有序、不关心存储空间的场景。 |
|
|
15
|
+
只读分诊可参考当前组件 `readme.md` 和源码路径提示;组件子树 dirty、索引 tree 不一致或兼容证据未 verified 时,这些观察不构成精确接入或发布结论。
|
|
@@ -5,6 +5,8 @@ description: "编译或重验 YSS Slice Implementation Contract、最小 Skill
|
|
|
5
5
|
|
|
6
6
|
# YSS Implementation Contract Compiler
|
|
7
7
|
|
|
8
|
+
已有生命周期资产优先用 `scripts/contract view <资产> --kind <类型>` 阅读;执行任务用 `--profile task --unit <ID>`,绑定与校验明细用 `--profile full`。视图不授予执行权限,仍按本 Skill 的原始来源和批准门禁处理。类型、准备和迁移见 `docs/process/contract-reading.md`。
|
|
9
|
+
|
|
8
10
|
阶段 7 的实现合同编译器。它把已批准的生命周期资产、垂直切片、capability 和窄 Recipe 编译为 `Slice Implementation Contract` v3 草案;不批准合同、不写业务代码、不设置 `ready-for-agent`。
|
|
9
11
|
|
|
10
12
|
文档输出时按 `lifecycle-document-output` 条件调用 `i-have-adhd`,读取 `docs/process/document-writing.md`;作用域仅限当前产物,派发时传递条件及引用。
|
|
@@ -33,6 +33,18 @@ description: 用于 YSS MyBatis / MyBatis-Plus 组件能力核验、接入决策
|
|
|
33
33
|
<!-- yss-rule {"id":"mybatis.transaction","when":"mybatis","level":"mandatory","evidence":"code-and-verification"} -->
|
|
34
34
|
- 事务边界归批准的 Application 用例或 MVC service/core;Repository 不临时声明新的业务事务。
|
|
35
35
|
|
|
36
|
+
## 能力选择记录
|
|
37
|
+
|
|
38
|
+
| 既有工程调用 seam | 选择与核验 |
|
|
39
|
+
|---|---|
|
|
40
|
+
| `PageQuery` 经组件切面进入 Repository/Gateway | 核对代理切点、参数位置、PageHelper 开关、实际 SQL 与 `tempTotalCount`;不能因 Bean 注册就认定切面命中。 |
|
|
41
|
+
| Mapper 使用 MyBatis-Plus `IPage` | 核对 MP 分页开关、方言、实际 SQL 与 total;同一次查询不得叠加 PageHelper 上下文。两插件都注册不等于查询已双分页。 |
|
|
42
|
+
| 原生 Mapper/Example/ListMapper | 按当前源码和实体映射选择 `BaseRepository<T,D>`;与完整 MP `BasePlusRepository<T>` 不可直接互换,混用或复合键须验证主键方法、XML 与映射。 |
|
|
43
|
+
| SQL 级批量写入 | 核对公开入口、分片大小、目标方言生成的单批 SQL、审计填充和 ID;多个分片整体回滚由上层用例事务保证。若 batch size 存在进程级可变状态,多 Spring Context 不得据此宣称配置隔离。 |
|
|
44
|
+
| 命名数据源 | Holder 中有多个 DataSource 不证明动态路由;记录实际 Mapper 的 `SqlSessionFactory`/DataSource、主池与自建池所有权,以及事务绑定。 |
|
|
45
|
+
|
|
46
|
+
以上仅对命中的能力记录,不改变两套分页插件的当前默认注册行为;选择由批准 Profile、消费工程配置和运行测试共同证明。
|
|
47
|
+
|
|
36
48
|
## 任务分流
|
|
37
49
|
|
|
38
50
|
| 请求 | 本 Skill 动作 | 后续路由 |
|
|
@@ -48,8 +60,8 @@ description: 用于 YSS MyBatis / MyBatis-Plus 组件能力核验、接入决策
|
|
|
48
60
|
2. 装配与开关:自动配置、条件属性、Mapper 扫描和 XML location 是否真实生效。
|
|
49
61
|
3. 调用 seam:代理是否命中、分页参数位置/类型、分页插件链和 total 回填责任。
|
|
50
62
|
4. 映射:接口签名、XML namespace、resultMap、字段、逻辑删除和主键策略。
|
|
51
|
-
5.
|
|
52
|
-
6.
|
|
63
|
+
5. 批量:是否调用当前公开批量入口、分批与方言是否匹配、是否退化为循环单条;核对 batch size 在多个应用上下文中的作用域。
|
|
64
|
+
6. 数据源:先确认组件只提供了什么,再检查 Mapper 实际绑定的会话工厂、上层路由与事务进入顺序;不得假设存在当前线程数据源上下文。
|
|
53
65
|
7. 最后检查 SQL、绑定参数、数据库方言与执行计划。
|
|
54
66
|
|
|
55
67
|
## Review 输入
|
|
@@ -5,6 +5,8 @@ description: "审查 YSS OpenAPI Draft 的需求覆盖、页面动作、响应
|
|
|
5
5
|
|
|
6
6
|
# YSS OpenAPI Draft Review
|
|
7
7
|
|
|
8
|
+
已有生命周期资产优先用 `scripts/contract view <资产> --kind <类型>` 阅读;执行任务用 `--profile task --unit <ID>`,绑定与校验明细用 `--profile full`。视图不授予执行权限,仍按本 Skill 的原始来源和批准门禁处理。类型、准备和迁移见 `docs/process/contract-reading.md`。
|
|
9
|
+
|
|
8
10
|
Use this skill after OpenAPI Draft creation and before Engineering Baseline / YSS DDD Review. It is a fail-closed contract review skill for design-time OpenAPI files under `docs/.scratch/<feature>/api/`; it does not bundle JSON or generate Orval clients.
|
|
9
11
|
|
|
10
12
|
## Required Inputs
|
|
@@ -5,6 +5,8 @@ description: "维护、校验、冻结或导出 YSS OpenAPI 3.1 设计合同;
|
|
|
5
5
|
|
|
6
6
|
# YSS OpenAPI Governance
|
|
7
7
|
|
|
8
|
+
已有生命周期资产优先用 `scripts/contract view <资产> --kind <类型>` 阅读;执行任务用 `--profile task --unit <ID>`,绑定与校验明细用 `--profile full`。视图不授予执行权限,仍按本 Skill 的原始来源和批准门禁处理。类型、准备和迁移见 `docs/process/contract-reading.md`。
|
|
9
|
+
|
|
8
10
|
本 skill 负责 YSS OpenAPI 的 **YAML-first** 工作流:
|
|
9
11
|
|
|
10
12
|
```text
|
|
@@ -114,3 +116,5 @@ pnpm exec redocly bundle \
|
|
|
114
116
|
## 输出契约
|
|
115
117
|
|
|
116
118
|
执行治理或导出时,按 [输出契约](references/governance-output.md) 记录 YAML 权威、当前校验证据、JSON 派生与交接。不能只给自然语言完成声明;未冻结时不生成可供实现消费的 JSON。
|
|
119
|
+
|
|
120
|
+
API Contract Decision 可用 `scripts/api-contract-decision prepare` 自动生成来源摘要;v1 显式迁移用 `migrate --version <新版本> --output <新路径>`。候选保持 draft,审查、Freeze 绑定和工程契约批准仍由现有生命周期核验。
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yss-product-lifecycle
|
|
3
|
-
description: 编排 YSS
|
|
3
|
+
description: 编排 YSS 研发全生命周期;当阶段、产物、门禁或 Skill 路由不清晰时使用。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# YSS Product Lifecycle
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
合同阅读:`scripts/contract view`;见 `docs/process/contract-reading.md`。
|
|
9
|
+
|
|
10
|
+
主控识别请求、仓库身份和可信阶段,计算 frontier、派发与验收工作单元;专项 Skill 负责设计、实现和独立审查。
|
|
9
11
|
|
|
10
12
|
文档按 `document_writing` 条件调用 `i-have-adhd`,并传递 `docs/process/document-writing.md` 规范。
|
|
11
13
|
|
|
@@ -21,7 +23,7 @@ description: 编排 YSS 产品或模块从机会调研到 Spec、原型、技术
|
|
|
21
23
|
| 数字人角色、运行时和会签策略 | `docs/agents/digital-human-roles.yaml` |
|
|
22
24
|
| 影响面、裁剪和模板维护强度 | `docs/process/harness-process-tailoring.md`、`docs/process/maintenance-intensity.yaml` |
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
用 `scripts/query-lifecycle-context` 查询合同:
|
|
25
27
|
|
|
26
28
|
```bash
|
|
27
29
|
scripts/query-lifecycle-context --mode route --stage stage.plan --work-unit work-unit.plan-requirements --include execution_efficiency
|
|
@@ -54,6 +56,8 @@ Plan 入口读取 `docs/plan/README.md` 和 `docs/process/plan-migration.md`,
|
|
|
54
56
|
|
|
55
57
|
聚合批准见 `gate_consolidation`。普通功能默认一个独立审查者,按能力缺口、冲突或外部制度增员;相邻检查组合审查、逐项留证。
|
|
56
58
|
|
|
59
|
+
项目职责与后端终点见 `execution_scopes`;恢复、编译和派发必须复验。保留产品设计门禁,后端交付不等于业务完成或发布。
|
|
60
|
+
|
|
57
61
|
### 用户决定
|
|
58
62
|
|
|
59
63
|
按角色表 `user_decision_policy` 和 `references/user-decisions.md` 先展示可审阅资产、范围、风险及后续动作,再取得提问者或其指定生物人的原始回复。数字人、超时和默认项不能代答。已有授权优先用 `continuation_ref` 核验延续;未知/实质变化或强制审批缺失才重新决定。缺陷和缺证据阻断,建议记待办;合同、验证及外部动作授权仍须满足。
|
|
@@ -71,7 +75,7 @@ Plan 入口读取 `docs/plan/README.md` 和 `docs/process/plan-migration.md`,
|
|
|
71
75
|
5. 先对照用户目标逐项验收,检查遗漏诉求、错误假设与尚未解决的问题,再验收 `Workflow Execution Result`:工作单元、合同、允许写路径、`context_reconciliation`、证据、实际验证、延期 seam、漂移和下一路由必须可核验。实现派发额外绑定当前 Slice Implementation Contract v3;其他阶段不得伪造该合同。
|
|
72
76
|
6. 在授权边界内继续下一工作单元;遇到人工决定、新授权、证据冲突、专项失败或合并/发布结论时暂停。暂停不得阻断无依赖的独立工作。
|
|
73
77
|
|
|
74
|
-
每个 `project-instance`
|
|
78
|
+
每个 `project-instance` 工作单元批准或流转前,回写稳定术语到唯一根 `CONTEXT.md`,并生成通过校验的 `context_reconciliation`。候选术语、错误路径、摘要漂移或未决冲突必须阻断。质量标准只由 `engineering-baseline` 定义一次;高风险影响按裁剪合同补充反证和残余风险。
|
|
75
79
|
|
|
76
80
|
## 面向业务角色
|
|
77
81
|
|
|
@@ -85,10 +89,12 @@ Plan → Spec(含正式草稿、恢复与显式 `to-spec`)写入前,按 `d
|
|
|
85
89
|
|
|
86
90
|
## 结果与暂停
|
|
87
91
|
|
|
88
|
-
|
|
92
|
+
咨询直接回答;工作单元保留完整结果,对外仅展示当前决定所需信息。
|
|
89
93
|
|
|
90
94
|
工作单元结果至少包含:模式、仓库身份、当前阶段和工作单元、影响面、资产与门禁状态、证据、新鲜度、Ticket/垂直切片/合同状态、`ready-for-agent` 结论、阻塞项、本轮动作、下一工作单元、暂停或继续理由、Ticket 同步和 Git checkpoint 判断。
|
|
91
95
|
|
|
92
96
|
暂停会签时追加门禁 ID、`role_id`、`runtime_id`、会签文件路径、推荐答案和恢复动作;恢复前运行适用验证器。只有同一候选快照通过全部适用审查轴与 fresh verification,才能提出合并、发布或完成结论;发布仍须生物人决定。
|
|
93
97
|
|
|
94
98
|
专项合同加载索引见 `references/orchestration.md`。
|
|
99
|
+
|
|
100
|
+
Plan / Spec / Design 追踪按 `docs/process/stage-tracking.md`。
|
|
@@ -53,7 +53,7 @@ review_verification:
|
|
|
53
53
|
|
|
54
54
|
checkpoint_policy:
|
|
55
55
|
strategy: consolidated
|
|
56
|
-
flush_on: [human_pause, handoff, implementation_entry, merge, release]
|
|
56
|
+
flush_on: [stage_exit, human_pause, handoff, implementation_entry, merge, release]
|
|
57
57
|
flush_immediately_on: [blocked, responsibility_changed, asset_approval]
|
|
58
58
|
preserve_stage_causality: true
|
|
59
59
|
required_stage_trace_fields: [stage, upstream_refs, artifact_refs, gate_decisions, downstream_impacts]
|
|
@@ -286,7 +286,7 @@ task_package:
|
|
|
286
286
|
# may prepare, validate and accept their results, but cannot invoke them or create
|
|
287
287
|
# their formal artifacts on their behalf.
|
|
288
288
|
matt_invocation_boundary:
|
|
289
|
-
user_invoked_skills: [grill-
|
|
289
|
+
user_invoked_skills: [grill-with-docs, handoff, implement, improve-codebase-architecture, setup-matt-pocock-skills, to-questionnaire, to-spec, to-tickets, triage, wait-what, wayfinder]
|
|
290
290
|
lifecycle_managed_user_entries: [setup-matt-pocock-skills, grill-with-docs, to-spec, to-tickets, implement]
|
|
291
291
|
model_invoked_skills: [code-review, codebase-design, diagnosing-bugs, domain-modeling, grilling, prototype, resolving-merge-conflicts, tdd, writing-for-agents, yss-research]
|
|
292
292
|
lifecycle_allowed_model_invoked_skills: [code-review, codebase-design, diagnosing-bugs, domain-modeling, grilling, prototype, tdd, yss-research]
|
|
@@ -299,7 +299,7 @@ skill_source_contract:
|
|
|
299
299
|
lock_version: 3
|
|
300
300
|
source_revisions_required: [mattpocock/skills, iloveZzz/yss-ui]
|
|
301
301
|
adaptation_ref_required_when_effective_diff: true
|
|
302
|
-
retired_shared_skills: [yss-antd-design, yss-antdv-next-design, ask-matt, batch-grill-me, dispatching-parallel-agents, loop-me, migrate-to-shoehorn, product-design-prototype, prototype-page-acceptance, scaffold-exercises, setup-pre-commit, setup-ts-deep-modules, teach, writing-beats, writing-fragments, writing-shape, yss-components, yss-dictionary, yss-jdbc, yss-log, yss-microapp-commit, yss-mvc-scaffold-generator, yss-mvc-design, yss-mvc-data-analysis-project-initializer, yss-backend-scaffold-parent, yss-page-module-development, yss-taskflow, yss-backend-scaffold-application, yss-backend-scaffold-domain, yss-backend-scaffold-infrastructure, yss-backend-scaffold-web, yss-backend-scaffold-adapter, yss-application-layer-reference, yss-domain-layer-reference, yss-infrastructure-layer-reference, yss-web-layer-reference]
|
|
302
|
+
retired_shared_skills: [yss-antd-design, yss-antdv-next-design, ask-matt, batch-grill-me, grill-me, dispatching-parallel-agents, loop-me, migrate-to-shoehorn, product-design-prototype, prototype-page-acceptance, scaffold-exercises, setup-pre-commit, setup-ts-deep-modules, teach, writing-beats, writing-fragments, writing-shape, yss-components, yss-dictionary, yss-jdbc, yss-log, yss-microapp-commit, yss-mvc-scaffold-generator, yss-mvc-design, yss-mvc-data-analysis-project-initializer, yss-backend-scaffold-parent, yss-page-module-development, yss-taskflow, yss-backend-scaffold-application, yss-backend-scaffold-domain, yss-backend-scaffold-infrastructure, yss-backend-scaffold-web, yss-backend-scaffold-adapter, yss-application-layer-reference, yss-domain-layer-reference, yss-infrastructure-layer-reference, yss-web-layer-reference]
|
|
303
303
|
|
|
304
304
|
# 生命周期默认走原生工作单元;Matt user-invoked skill 仅保留为兼容入口。
|
|
305
305
|
lifecycle_native_entries:
|
|
@@ -481,6 +481,15 @@ work_unit_routes:
|
|
|
481
481
|
skills: [yss-ui, yss-design-system, code-review]
|
|
482
482
|
applies_when: ui_impact
|
|
483
483
|
not_applicable_reason: no_ui_impact
|
|
484
|
+
work-unit.backend-delivery:
|
|
485
|
+
native: {source: yss-product-lifecycle, skill: yss-product-lifecycle, invocation_mode: model-invoked}
|
|
486
|
+
primary_skill: yss-product-lifecycle
|
|
487
|
+
supporting_skills: [code-review]
|
|
488
|
+
skills: [yss-product-lifecycle, code-review]
|
|
489
|
+
applies_when: execution_scope_plan_to_backend
|
|
490
|
+
not_applicable_reason: outside_plan_to_backend_execution_scope
|
|
491
|
+
verifier: scripts/complete-backend-delivery
|
|
492
|
+
completion: current-source-and-exported-package-verified
|
|
484
493
|
work-unit.code-review:
|
|
485
494
|
native: {source: yss-product-lifecycle, skill: code-review, invocation_mode: model-invoked}
|
|
486
495
|
primary_skill: code-review
|
|
@@ -628,6 +637,11 @@ transition_graph:
|
|
|
628
637
|
work-unit.technical-analysis: [work-unit.implementation-repository-preparation]
|
|
629
638
|
work-unit.implementation-repository-preparation: [work-unit.ticket-decomposition]
|
|
630
639
|
work-unit.ticket-decomposition: [work-unit.slice-implementation]
|
|
640
|
+
work-unit.slice-implementation: [work-unit.frontend-implementation-verification, work-unit.code-review]
|
|
641
|
+
work-unit.frontend-implementation-verification: [work-unit.code-review]
|
|
642
|
+
work-unit.code-review: [work-unit.release-and-retrospective, work-unit.slice-implementation, work-unit.backend-delivery]
|
|
643
|
+
work-unit.backend-delivery: []
|
|
644
|
+
work-unit.release-and-retrospective: []
|
|
631
645
|
forbidden_shortcuts:
|
|
632
646
|
- {from: work-unit.spec-synthesis, to: work-unit.implementation-repository-preparation}
|
|
633
647
|
- {from: work-unit.prototype-design, to: work-unit.implementation-repository-preparation}
|
|
@@ -1030,6 +1044,7 @@ ready_for_agent:
|
|
|
1030
1044
|
parent_ticket_as_implementation_ref: forbidden
|
|
1031
1045
|
|
|
1032
1046
|
frontend_implementation_plan:
|
|
1047
|
+
scope_interpretation: product_ui_impact_requires_design_but_only_owned_frontend_implementation_requires_this_plan
|
|
1033
1048
|
applies_when: [ui_impact]
|
|
1034
1049
|
required_before: [ready_for_agent]
|
|
1035
1050
|
required: [prototype_ref, spec_ref, visual_baseline, route_and_page_inventory, baseline_case_ids, desktop_viewport, narrow_viewport, state_cases, pnpm_commands]
|
|
@@ -1061,7 +1076,7 @@ impact_propagation:
|
|
|
1061
1076
|
targets:
|
|
1062
1077
|
- {kind: artifact, name: product-design, level: direct, when: ui_impact}
|
|
1063
1078
|
- {kind: artifact, name: prototype, level: direct, when: ui_impact}
|
|
1064
|
-
- {kind: gate, name:
|
|
1079
|
+
- {kind: gate, name: gate.product-design-approved, level: direct, when: ui_impact}
|
|
1065
1080
|
- {kind: artifact, name: openapi-draft, level: transitive, when: api_impact}
|
|
1066
1081
|
- {kind: gate, name: openapi-freeze, level: transitive, when: api_impact}
|
|
1067
1082
|
- {kind: artifact, name: vertical-slice-tickets, level: transitive, when: always}
|
|
@@ -1082,7 +1097,8 @@ impact_propagation:
|
|
|
1082
1097
|
- {kind: artifact, name: product-design, level: direct, when: ui_impact}
|
|
1083
1098
|
- {kind: artifact, name: system-architecture, level: direct, when: always}
|
|
1084
1099
|
- {kind: artifact, name: data-architecture, level: direct, when: data_impact}
|
|
1085
|
-
- {kind: gate, name:
|
|
1100
|
+
- {kind: gate, name: gate.spec-baseline-approved, level: direct, when: always}
|
|
1101
|
+
- {kind: gate, name: gate.product-design-approved, level: direct, when: ui_impact}
|
|
1086
1102
|
- {kind: artifact, name: openapi-draft, level: transitive, when: api_impact}
|
|
1087
1103
|
- {kind: gate, name: design-review, level: transitive, when: always}
|
|
1088
1104
|
- {kind: gate, name: openapi-freeze, level: transitive, when: api_impact}
|
|
@@ -1196,3 +1212,50 @@ gate_consolidation:
|
|
|
1196
1212
|
invalidation: affected_dependencies_or_authorization_change_only
|
|
1197
1213
|
historical_gate_records: read_only_no_automatic_approval_migration
|
|
1198
1214
|
verifier: scripts/verify-lifecycle-checkpoint
|
|
1215
|
+
|
|
1216
|
+
# 项目 opt-in 只选择此权威策略,不能传入自定义工作单元白名单。
|
|
1217
|
+
execution_scopes:
|
|
1218
|
+
plan-to-backend:
|
|
1219
|
+
activation_ref: .yss-execution-scope.yaml
|
|
1220
|
+
validator: scripts/lib/lifecycle-execution-scope.mjs
|
|
1221
|
+
terminal_work_unit: work-unit.backend-delivery
|
|
1222
|
+
terminal_record: .yss-backend-delivery.json
|
|
1223
|
+
allowed_work_units: [work-unit.entry-triage, work-unit.plan-opportunity, work-unit.plan-requirements, work-unit.domain-strategy-design, work-unit.stage-decision, work-unit.spec-synthesis, work-unit.prototype-design, work-unit.technical-analysis, work-unit.implementation-repository-preparation, work-unit.scaffold-generation, work-unit.ticket-decomposition, work-unit.slice-implementation, work-unit.code-review, work-unit.backend-delivery]
|
|
1224
|
+
route_overrides:
|
|
1225
|
+
work-unit.code-review: [work-unit.slice-implementation, work-unit.backend-delivery]
|
|
1226
|
+
work-unit.slice-implementation: [work-unit.code-review]
|
|
1227
|
+
work-unit.backend-delivery: []
|
|
1228
|
+
product_ui_design: retain-all-triggered-gates
|
|
1229
|
+
implementation_delivery_roles: [backend]
|
|
1230
|
+
implementation_ui_impact: false
|
|
1231
|
+
downstream_frontend_required_when_product_ui_impact: [owner, ticket_ref, verification_plan, target_version]
|
|
1232
|
+
consumer_capabilities: [backend-technical-design]
|
|
1233
|
+
completion_claim: backend-delivery-only
|
|
1234
|
+
business_completion: forbidden
|
|
1235
|
+
release: forbidden
|
|
1236
|
+
resume: revalidate-current-scope-approvals-and-delivery
|
|
1237
|
+
|
|
1238
|
+
# Package wire IDs remain immutable; each target resolves its own executable entry.
|
|
1239
|
+
consumer_entry_routes:
|
|
1240
|
+
yss-full-lifecycle:
|
|
1241
|
+
backend-technical-design:
|
|
1242
|
+
source_work_unit: work-unit.technical-design
|
|
1243
|
+
target_work_unit: work-unit.technical-analysis
|
|
1244
|
+
plan-to-backend:
|
|
1245
|
+
backend-technical-design:
|
|
1246
|
+
source_work_unit: work-unit.technical-design
|
|
1247
|
+
target_work_unit: work-unit.technical-analysis
|
|
1248
|
+
harness.backend-delivery:
|
|
1249
|
+
backend-technical-design:
|
|
1250
|
+
source_work_unit: work-unit.technical-design
|
|
1251
|
+
target_work_unit: work-unit.technical-design
|
|
1252
|
+
|
|
1253
|
+
stage_tracking:
|
|
1254
|
+
contract: docs/process/stage-tracking.md
|
|
1255
|
+
schema: docs/process/schemas/stage-tracking.schema.json
|
|
1256
|
+
verifier: scripts/stage-tracking
|
|
1257
|
+
configuration: tracker.lifecycle_tracking_version
|
|
1258
|
+
machine_state_owner: checkpoint.stage_tracking
|
|
1259
|
+
transition_checkpoint_ref: checkpoint_ref
|
|
1260
|
+
flush_on: [stage_exit, blocked, responsibility_changed, asset_approval]
|
|
1261
|
+
preserves: [ticket-state, gate-approval, profile-scope]
|
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
1. 按 `orchestration-contract.yaml.request_triage` 理解请求并选择模式,再识别仓库身份、任务规模和影响面;问题理解与澄清细节见 [请求分诊协议](request-triage.md)。
|
|
6
6
|
2. `setup readiness`:每个任务只执行一次,核对 tracker、五态标签和领域文档布局,并在本轮缓存结果;仅在 tracker、主远端、真实标签或配置变化时重查。
|
|
7
|
-
3. 加载父 Ticket/checkpoint
|
|
7
|
+
3. 加载父 Ticket/checkpoint 与真实资产,计算最近可信阶段;按 `docs/process/stage-tracking.md` 登记、恢复并核验当前阶段工作项,写入前确保 checkpoint 已持久化,工作单元结果带 checkpoint_ref。
|
|
8
8
|
4. 评估资产、门禁和 `stale`,选择第一个未阻塞工作单元。进入 `work-unit.slice-implementation` 前,必须先通过 `scripts/lib/lifecycle-transition.mjs` 的 Ticket 正式化、垂直切片绑定和合法 `next_route` 校验;父 Ticket、缺少垂直切片或 `ready-for-human` 的切片一律 `blocked`。
|
|
9
9
|
5. 执行最小生命周期工作单元:主控先按 `docs/process/schemas/digital-human-task-package.schema.json` 编译并校验任务包,再只实际调用允许的 model-invoked skill;原生工作单元可直接持有正式资产,Matt 兼容 user-invoked skill 仅作为 workflow reference,仍由用户显式启动。将结果归一化为 `Workflow Execution Result`,验收输出并回写状态与证据。任务包的 `contract.kind` 按工作单元选择;只有实现子任务使用 `slice-implementation` 并消费 Slice Implementation Contract,其他阶段不伪造该合同。
|
|
10
10
|
6. 若仍在授权和自动推进边界内,回到第 3 步;否则暂停。
|
|
11
11
|
|
|
12
12
|
不要仅输出下一个提示词后结束 `orchestrate`/`resume`。不要因进入业务代码阶段而退出主控;应把实现交给专项 skill,并在返回后继续核验。
|
|
13
13
|
|
|
14
|
-
连续阶段自动推进时累积 Ticket 同步和 Git
|
|
14
|
+
连续阶段自动推进时累积 Ticket 同步和 Git 判断证据,在阶段退出、人工暂停、handoff、进入实现、合并或发布边界集中 checkpoint。发生阻塞、责任人变化或资产需要单独批准时立即落 checkpoint,不因合并记录而丢失阶段因果关系。
|
|
15
15
|
|
|
16
16
|
## 执行成本
|
|
17
17
|
|
|
@@ -83,17 +83,17 @@ Git 动作分别保存 `commit_authorized`、`commit_scope`、`commit_authorizat
|
|
|
83
83
|
lifecycle:
|
|
84
84
|
schema_version: 1
|
|
85
85
|
mode: resume
|
|
86
|
-
stage:
|
|
87
|
-
status:
|
|
86
|
+
stage: stage.spec-architecture
|
|
87
|
+
status: needs-human
|
|
88
88
|
workflow:
|
|
89
89
|
matt_flow: main
|
|
90
|
-
active_skill: yss-
|
|
90
|
+
active_skill: yss-product-lifecycle
|
|
91
91
|
status: paused
|
|
92
92
|
artifacts:
|
|
93
|
-
spec: {status:
|
|
93
|
+
spec: {status: ready-for-human, ref: docs/.scratch/example/spec.md}
|
|
94
94
|
openapi: {status: stale, ref: docs/.scratch/example/api/example.yaml, stale_by: [spec]}
|
|
95
95
|
gates:
|
|
96
|
-
|
|
96
|
+
gate.spec-baseline-approved: {status: needs-human}
|
|
97
97
|
tracker:
|
|
98
98
|
kind: local-markdown
|
|
99
99
|
root: docs/.scratch
|
|
@@ -101,10 +101,10 @@ tracker:
|
|
|
101
101
|
role: ready-for-human
|
|
102
102
|
pause:
|
|
103
103
|
reason_code: human-gate
|
|
104
|
-
gate_ref:
|
|
104
|
+
gate_ref: gate.spec-baseline-approved
|
|
105
105
|
owner_or_authority: product-owner
|
|
106
|
-
resume_condition:
|
|
107
|
-
next_work_unit:
|
|
106
|
+
resume_condition: gate.spec-baseline-approved approved
|
|
107
|
+
next_work_unit: work-unit.technical-analysis
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
## Schema 兼容与迁移
|