create-yss-spec 3.1.0 → 3.1.3

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.
Files changed (139) hide show
  1. package/README.md +117 -91
  2. package/bin/create-yss-spec.js +11 -3
  3. package/package.json +9 -2
  4. package/src/api/_sync-service.js +191 -0
  5. package/src/api/index.js +22 -0
  6. package/src/api/project-diff.js +9 -0
  7. package/src/api/project-doctor.js +10 -0
  8. package/src/api/template-apply.js +10 -0
  9. package/src/api/template-plan.js +9 -0
  10. package/src/cli/args.js +60 -0
  11. package/src/cli/error-output.js +52 -0
  12. package/src/cli/flags.js +9 -0
  13. package/src/cli/help.js +95 -0
  14. package/src/cli/index.js +82 -0
  15. package/src/cli/plan-output.js +61 -0
  16. package/src/cli/prompts.js +91 -0
  17. package/src/cli/router.js +41 -0
  18. package/src/cli.js +5 -2253
  19. package/src/commands/attach.js +280 -0
  20. package/src/commands/diff.js +23 -0
  21. package/src/commands/doctor.js +417 -0
  22. package/src/commands/init.js +193 -0
  23. package/src/commands/sync.js +146 -0
  24. package/src/commands/update.js +14 -0
  25. package/src/contracts/apply-result-v1.json +45 -0
  26. package/src/contracts/customization-policy-v1.json +28 -0
  27. package/src/contracts/doctor-report-v1.json +29 -0
  28. package/src/contracts/error-envelope-v1.json +24 -0
  29. package/src/contracts/generator-policy-v1.json +24 -0
  30. package/src/contracts/ownership-policy-v1.json +40 -0
  31. package/src/contracts/plan-schema-v1.json +115 -0
  32. package/src/family-identity.js +365 -0
  33. package/src/family-runtime.js +23 -0
  34. package/src/filesystem/apply-plan.js +44 -0
  35. package/src/filesystem/copy-path.js +28 -0
  36. package/src/filesystem/path-utils.js +67 -0
  37. package/src/filesystem/transaction-runner.js +41 -0
  38. package/src/filesystem/transaction.js +153 -0
  39. package/src/git/submodule.js +115 -0
  40. package/src/git/worktree.js +69 -0
  41. package/src/template/attach-planner-runtime.js +51 -0
  42. package/src/template/attach-planner.js +160 -0
  43. package/src/template/instance-runtime.js +463 -0
  44. package/src/template/lifecycle-metadata.js +99 -0
  45. package/src/template/lifecycle-policy.js +129 -0
  46. package/src/template/lifecycle-runtime.js +90 -0
  47. package/src/template/migration-planner.js +95 -0
  48. package/src/template/migration-runtime.js +247 -0
  49. package/src/template/ownership-metadata.js +79 -0
  50. package/src/template/ownership-policy.js +149 -0
  51. package/src/template/ownership-runtime.js +109 -0
  52. package/src/template/plan-schema.js +36 -0
  53. package/src/template/sync-planner-runtime.js +57 -0
  54. package/src/template/sync-planner.js +206 -0
  55. package/src/template/verification-runtime.js +154 -0
  56. package/src/validation/identity.js +41 -0
  57. package/src/validation/metadata.js +105 -0
  58. package/src/validation/security.js +67 -0
  59. package/src/validation/snapshot.js +47 -0
  60. package/template/.agents/skills/.strategic-design-skills-manifest.json +1 -1
  61. package/template/.agents/skills/yss-frontend-scaffold-generator/SKILL.md +2 -0
  62. package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
  63. package/template/.agents/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +6 -0
  64. package/template/.agents/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +2 -0
  65. package/template/.agents/skills/yss-product-lifecycle/SKILL.md +2 -0
  66. package/template/.agents/skills/yss-ui/SKILL.md +2 -0
  67. package/template/.claude/skills/yss-frontend-scaffold-generator/SKILL.md +2 -0
  68. package/template/.claude/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
  69. package/template/.claude/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +6 -0
  70. package/template/.claude/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +2 -0
  71. package/template/.claude/skills/yss-product-lifecycle/SKILL.md +2 -0
  72. package/template/.claude/skills/yss-ui/SKILL.md +2 -0
  73. package/template/.codex/skills/yss-frontend-scaffold-generator/SKILL.md +2 -0
  74. package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
  75. package/template/.codex/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +6 -0
  76. package/template/.codex/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +2 -0
  77. package/template/.codex/skills/yss-product-lifecycle/SKILL.md +2 -0
  78. package/template/.codex/skills/yss-ui/SKILL.md +2 -0
  79. package/template/.cursor/skills/yss-frontend-scaffold-generator/SKILL.md +2 -0
  80. package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
  81. package/template/.cursor/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +6 -0
  82. package/template/.cursor/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +2 -0
  83. package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +2 -0
  84. package/template/.cursor/skills/yss-ui/SKILL.md +2 -0
  85. package/template/.pi/skills/yss-frontend-scaffold-generator/SKILL.md +2 -0
  86. package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
  87. package/template/.pi/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +6 -0
  88. package/template/.pi/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +2 -0
  89. package/template/.pi/skills/yss-product-lifecycle/SKILL.md +2 -0
  90. package/template/.pi/skills/yss-ui/SKILL.md +2 -0
  91. package/template/.qoder/skills/yss-frontend-scaffold-generator/SKILL.md +2 -0
  92. package/template/.qoder/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
  93. package/template/.qoder/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +6 -0
  94. package/template/.qoder/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +2 -0
  95. package/template/.qoder/skills/yss-product-lifecycle/SKILL.md +2 -0
  96. package/template/.qoder/skills/yss-ui/SKILL.md +2 -0
  97. package/template/.trae/skills/yss-frontend-scaffold-generator/SKILL.md +2 -0
  98. package/template/.trae/skills/yss-implementation-contract-compiler/SKILL.md +2 -0
  99. package/template/.trae/skills/yss-implementation-contract-compiler/references/compiler-contract.yaml +6 -0
  100. package/template/.trae/skills/yss-implementation-contract-compiler/references/slice-implementation-contract.md +2 -0
  101. package/template/.trae/skills/yss-product-lifecycle/SKILL.md +2 -0
  102. package/template/.trae/skills/yss-ui/SKILL.md +2 -0
  103. package/template/CONTEXT.md +2 -0
  104. package/template/README.md +4 -0
  105. package/template/docs/agents/digital-human-roles.yaml +1 -0
  106. package/template/docs/process/frontend-backend-delivery.md +72 -0
  107. package/template/docs/process/implementation-repo-integration.md +2 -0
  108. package/template/docs/process/lifecycle-artifact-map.md +1 -0
  109. package/template/docs/process/lifecycle-registry-baseline.json +2 -1
  110. package/template/docs/process/lifecycle-registry.yaml +5 -0
  111. package/template/docs/process/schemas/backend-delivery-verification.schema.json +113 -0
  112. package/template/docs/process/schemas/backend-delivery.schema.json +301 -0
  113. package/template/docs/process/schemas/digital-human-task-package.schema.json +8 -0
  114. package/template/docs/process/schemas/frontend-delivery-acceptance.schema.json +200 -0
  115. package/template/docs/process/schemas/frontend-implementation-evidence.schema.json +3 -0
  116. package/template/docs/process/template-verification-profiles.yaml +6 -0
  117. package/template/docs/user-guide//346/210/230/346/234/257/350/256/276/350/256/241/345/255/220/351/241/271/347/233/256/347/224/250/346/210/267/346/211/213/345/206/214.md +20 -206
  118. package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214.md +63 -963
  119. package/template/docs/user-guide//347/224/250/346/210/267/346/211/213/345/206/214/347/264/242/345/274/225.md +11 -14
  120. package/template/docs/user-guide//350/256/276/345/244/207/345/200/237/347/224/250/350/264/257/347/251/277/346/241/210/344/276/213.md +127 -0
  121. package/template/scripts/backend-delivery +14 -0
  122. package/template/scripts/fixtures/backend-delivery/revision-server.mjs +11 -0
  123. package/template/scripts/instantiate-harness +69 -0
  124. package/template/scripts/lib/backend-delivery.mjs +164 -0
  125. package/template/scripts/lib/frontend-delivery-boundary.mjs +49 -0
  126. package/template/scripts/lib/frontend-delivery.mjs +73 -0
  127. package/template/scripts/lib/harness-execution-scope.mjs +52 -0
  128. package/template/scripts/lib/implementation-contract-compiler.mjs +12 -2
  129. package/template/scripts/lib/lifecycle-transition.mjs +7 -0
  130. package/template/scripts/lib/strategic-handoff-consumption.mjs +14 -7
  131. package/template/scripts/lib/strategic-handoff.mjs +1 -1
  132. package/template/scripts/lib/task-package.mjs +7 -0
  133. package/template/scripts/sync-strategic-handoff-tools +3 -1
  134. package/template/scripts/verify-frontend-delivery +9 -0
  135. package/template/scripts/verify-frontend-delivery-scenarios +131 -0
  136. package/template/scripts/verify-frontend-implementation-evidence +2 -0
  137. package/template/skills-lock.json +11 -11
  138. package/template.manifest.json +43 -1
  139. package/template.snapshot.json +5 -5
@@ -53,6 +53,8 @@ Agent 先问清六件事:谁遇到什么问题并想得到什么结果;事
53
53
 
54
54
  ## 前端实现还原硬检查
55
55
 
56
+ 采用专职前端 profile 或显式 `frontend_delivery` 绑定时,先按 `docs/process/frontend-backend-delivery.md` 实际核验战略与后端联合交付。缺任一输入只能诊断和回交;输入通过后准备计划/合同,正式实现、生成和恢复仍须当前批准的 Slice Contract 冻结接收摘要。接口或部署版本漂移时重新接收,不复用旧成功输出。
57
+
56
58
  原型通过不等于前端实现通过。`ready-for-agent` 前先产生 `frontend_implementation_plan`,绑定批准且 digest 当前的 Visual Baseline manifest,并按垂直切片选择 `case_id`;实现完成、发布前再产生 `frontend_implementation_verification`,逐 case 配对基准图、实现图、diff/mask 与差异解释,同时补齐交互、console warning、实际 `pnpm` 命令和退出码。模型必须先读 manifest 与语义引用再查看图片,禁止通过目录 glob 猜测含义。差异未解释、图片或摘要缺失、只做 type-check 或只声称“已对齐”均为 `blocked`;Visual Baseline 版本或 digest 变化使实现计划和 Slice Contract `stale`,新 API、状态或视觉行为返回 `new_impacts`/`drift` 并重新路由。优先使用 `yss-ui/references/verification.md` 的分层验证和既有 `pnpm` scripts。
57
59
 
58
60
  ## 真实用户决定
@@ -22,6 +22,8 @@ description: Use when implementing or reviewing YSS Vue pages that combine YSS w
22
22
 
23
23
  ## 2. 执行前版本预检
24
24
 
25
+ 采用专职前端 profile 或显式 `frontend_delivery` 绑定时,先按 `docs/process/frontend-backend-delivery.md` 实际核验战略与后端联合交付。缺任一输入只能诊断和回交;输入通过后准备计划/合同,正式实现、生成和恢复仍须当前批准的 Slice Contract 冻结接收摘要。接口或部署版本漂移时重新接收,不复用旧成功输出。
26
+
25
27
  进入实现前从前端工程根目录执行:
26
28
 
27
29
  ```bash
@@ -30,6 +30,8 @@ branch: template
30
30
 
31
31
  ## Workflow
32
32
 
33
+ 采用专职前端 profile 或显式 `frontend_delivery` 绑定时,先按 `docs/process/frontend-backend-delivery.md` 实际核验战略与后端联合交付。缺任一输入只能诊断和回交;输入通过后准备计划/合同,正式实现、生成和恢复仍须当前批准的 Slice Contract 冻结接收摘要。接口或部署版本漂移时重新接收,不复用旧成功输出。
34
+
33
35
  1. 确认当前任务已经通过 Harness 入口分诊,且实现位置已记录在 proposal、design、build entry review、实施计划或实现路由记录中。
34
36
  2. 确认目标是外部实现仓库;只有用户明确选择时才输出到 Harness 仓库的 `apps/frontend/<project>/`。`apps/frontend/` 只能作为项目容器,`app/frontend/`、`app/backend/` 及其子路径禁止作为输出位置。`git-submodule` 只能在已初始化且附加分支的子仓工作树生成;空 gitlink、detached HEAD、`--force` 覆盖挂载点不得当成普通目录。
35
37
  3. 只读检查模板分支是否可访问:`git ls-remote --heads <repo> template`。
@@ -26,6 +26,8 @@ description: Use when a YSS vertical slice is entering implementation, spans mul
26
26
 
27
27
  ## 硬规则
28
28
 
29
+ 采用专职前端 profile 或显式 `frontend_delivery` 绑定时,先按 `docs/process/frontend-backend-delivery.md` 实际核验战略与后端联合交付。缺任一输入只能诊断和回交;输入通过后准备计划/合同,正式实现、生成和恢复仍须当前批准的 Slice Contract 冻结接收摘要。接口或部署版本漂移时重新接收,不复用旧成功输出。
30
+
29
31
  - 编译器不得输出 `approved`、`ready-for-agent` 或 `completed`。
30
32
  - Registry、Slice Contract 或编译器合同 schema v1 一律拒绝并给出迁移到 v2 的提示;不自动升级,不提供旧技能名兼容。
31
33
  - `required_capabilities` 与 `required_skills` 必须同时冻结;Registry 或编译器摘要变化后合同立即 `stale`,重新编译后仍须交生命周期重新批准。
@@ -61,6 +61,12 @@ readiness:
61
61
  data_impact: [data_architecture]
62
62
  backend_impact: [engineering_baseline, backend_repository, maven_wrapper]
63
63
  cross_repo: [repository_registry, delivery_order, integration_verification, rollback_order]
64
+ frontend_delivery:
65
+ when: specialized-frontend-profile-or-explicit-frontend-delivery-binding
66
+ source: docs/process/frontend-backend-delivery.md
67
+ verifier: scripts/verify-frontend-delivery
68
+ output_binding: frontend.delivery
69
+ inputs_verified_is_implementation_approval: false
64
70
 
65
71
  compiler_input_required:
66
72
  - slice_id
@@ -4,6 +4,8 @@
4
4
 
5
5
  `yss-implementation-contract-compiler` 生成草案;`yss-product-lifecycle` 核验、批准并持久化。合同缺少必填字段时状态为 `blocked`。schema v1 已停止支持,必须重新编译为 v2,不提供自动升级。
6
6
 
7
+ 采用专职前端 profile 时,`frontend.delivery` 绑定 `{acceptance_ref, digest}`,来自 `scripts/verify-frontend-delivery` 的当前结果;也可由 `resolution.frontend_delivery` 承载,两处并存时必须一致。正式执行从持久化合同读取并重验输入。细则见 `docs/process/frontend-backend-delivery.md`。
8
+
7
9
  ```yaml
8
10
  slice_contract:
9
11
  schema_version: 2
@@ -53,6 +53,8 @@ Agent 先问清六件事:谁遇到什么问题并想得到什么结果;事
53
53
 
54
54
  ## 前端实现还原硬检查
55
55
 
56
+ 采用专职前端 profile 或显式 `frontend_delivery` 绑定时,先按 `docs/process/frontend-backend-delivery.md` 实际核验战略与后端联合交付。缺任一输入只能诊断和回交;输入通过后准备计划/合同,正式实现、生成和恢复仍须当前批准的 Slice Contract 冻结接收摘要。接口或部署版本漂移时重新接收,不复用旧成功输出。
57
+
56
58
  原型通过不等于前端实现通过。`ready-for-agent` 前先产生 `frontend_implementation_plan`,绑定批准且 digest 当前的 Visual Baseline manifest,并按垂直切片选择 `case_id`;实现完成、发布前再产生 `frontend_implementation_verification`,逐 case 配对基准图、实现图、diff/mask 与差异解释,同时补齐交互、console warning、实际 `pnpm` 命令和退出码。模型必须先读 manifest 与语义引用再查看图片,禁止通过目录 glob 猜测含义。差异未解释、图片或摘要缺失、只做 type-check 或只声称“已对齐”均为 `blocked`;Visual Baseline 版本或 digest 变化使实现计划和 Slice Contract `stale`,新 API、状态或视觉行为返回 `new_impacts`/`drift` 并重新路由。优先使用 `yss-ui/references/verification.md` 的分层验证和既有 `pnpm` scripts。
57
59
 
58
60
  ## 真实用户决定
@@ -22,6 +22,8 @@ description: Use when implementing or reviewing YSS Vue pages that combine YSS w
22
22
 
23
23
  ## 2. 执行前版本预检
24
24
 
25
+ 采用专职前端 profile 或显式 `frontend_delivery` 绑定时,先按 `docs/process/frontend-backend-delivery.md` 实际核验战略与后端联合交付。缺任一输入只能诊断和回交;输入通过后准备计划/合同,正式实现、生成和恢复仍须当前批准的 Slice Contract 冻结接收摘要。接口或部署版本漂移时重新接收,不复用旧成功输出。
26
+
25
27
  进入实现前从前端工程根目录执行:
26
28
 
27
29
  ```bash
@@ -70,6 +70,8 @@ context_schema_version: 1
70
70
  | 执行证据 | 用于证明工作单元结果、门禁裁决或完成结论的可读取引用和实际验证记录。 | — | 口头声明、计划执行的命令或无法解析的引用不构成执行证据。 |
71
71
  | 单一事实来源(Single Source of Truth) | 对某一类流程事实拥有唯一定义权的权威资产。 | — | 其他资产只引用或解释,不重复定义同一规则。 |
72
72
  | 战略交接快照包 | 将批准的战略资产及证据冻结为可离线验证的完整目录或 ZIP,并提供规则和场景的派生索引。 | — | 源规则由战略方维护;包内快照与索引不成为目标仓词汇权威。 |
73
+ | 后端交付包 | 将后端当前切片的战略基线、冻结接口、批准合同及构建、部署和验证证据绑定为可独立接收的交付快照。 | — | 验包通过不代表真实服务当前可用,也不代表前端已获准实现。 |
74
+ | 前端联合接收 | 前端对战略交接快照与后端交付包进行版本、词汇、场景、接口和运行条件核验的过程。 | — | 输入就绪允许准备实现计划和合同;写代码仍需批准且当前的 Slice Implementation Contract。 |
73
75
  | 战术承接记录 | 将源规则和关键场景关联到战术落点、测试 seam、处置结论及依赖切片的结构化记录。 | — | 延期登记不等于依赖切片可实现;冲突回交战略方,未知依赖扩大阻断。 |
74
76
  | 流程模板资产 | 可被不同项目复用的文档模板、技能说明、校验脚本、流程规范和目录占位文件。 | — | 不包含某个具体产品的 Spec、设计、OpenAPI 或 Ticket。 |
75
77
  | 模板维护流程 | 用于评估影响、修改权威资产、同步投影、执行压力验证并审查模板演进的工作流。 | — | 面向模板源仓库,不默认生成具体产品的 Spec、原型、OpenAPI 或垂直切片 Ticket。 |
@@ -130,3 +130,7 @@ scripts/verify-template-fast
130
130
  | [docs/templates/implementation-repo-registry-template.md](./docs/templates/implementation-repo-registry-template.md) | 外部实现仓库登记 |
131
131
  | [docs/templates/cross-repo-slice-template.md](./docs/templates/cross-repo-slice-template.md) | 跨仓库垂直切片记录 |
132
132
  | [docs/architecture/templates/architecture-deepening-template.md](./docs/architecture/templates/architecture-deepening-template.md) | 架构 deepening 候选与 seam 设计 |
133
+
134
+ ## 按职责使用与升级
135
+
136
+ [五类项目用户手册](docs/user-guide/用户手册.md)提供选型、初始化及升级;[设备借用贯穿案例](docs/user-guide/设备借用贯穿案例.md)演示战略、后端、前端与统一验收。[全部手册](docs/user-guide/用户手册索引.md)区分日常使用与维护入口。GitHub 当前能力与 npm 发布快照分别核对。
@@ -215,6 +215,7 @@ gate_policy:
215
215
  - gate.design-reviewed
216
216
  - gate.architecture-reviewed
217
217
  evidence_only:
218
+ - gate.frontend-delivery-inputs-verified
218
219
  - gate.repository-identity-valid
219
220
  - gate.prototype-verified
220
221
  orchestrator:
@@ -0,0 +1,72 @@
1
+ # 前后端交付与联合接收
2
+
3
+ 本合同适用于 `profile_id: harness.frontend-delivery`、profile 中 `frontend_delivery.required: true` 或显式绑定 `frontend_delivery` 的工作。它补充既有切片就绪和前端还原验证条件,不另起生命周期或批准入口。旧通用研发 profile 未选择该路线时维持原行为。
4
+
5
+ ## 职责与先后关系
6
+
7
+ 战略方维护业务规则、Spec、页面流程和视觉基线;后端维护 API 及后端交付;前端维护工程设计、页面和验收证据;统一管理方维护基线引用、跨仓切片与业务验收汇总。
8
+
9
+ 前端消费需求可在上游设计时提前反馈。前端项目在战略和后端交付尚未齐备时,只能验包、诊断和回交缺口。两类输入通过接收核验后,可以准备前端工程设计、实现计划和 Slice Contract;合同获准前不得写代码。
10
+
11
+ ## 后端导出与前端导入
12
+
13
+ 后端每个交付包绑定一个窄业务切片。交付描述采用 `schemas/backend-delivery.schema.json`,包含战略包路径与摘要、切片规则/场景、OpenAPI operationId、冻结接口和后端 Slice Contract 的批准绑定、构建与部署身份、测试数据准备说明及验证证据。
14
+
15
+ 接口和 Slice Contract 的 `digest` 均为原文件字节 SHA-256,分别由既有 `gate.openapi-frozen` 和 `gate.slice-contract-approved` 的批准记录绑定。同包携带源角色政策及所需用户决定/批准证据;接收端按源政策验证,不能只填 `status: approved`。
16
+
17
+ 验证记录采用 `schemas/backend-delivery-verification.schema.json`,`subject_digest` 使用 `backendDeliveryBasis()`。实际命令、执行时间、零退出码与日志摘要必须齐备;契约验证逐条覆盖交付接口及场景的成功/失败结果。`supporting_files` 显式列出批准或用户决定的其余本地依赖;导出时通过临时源视图验证闭包,漏文件会失败。
18
+
19
+ ```bash
20
+ scripts/backend-delivery export --source-root <backend> --delivery <relative-delivery.json> --output <new-directory> --zip
21
+ scripts/backend-delivery verify --bundle <directory-or-zip>
22
+ scripts/backend-delivery import --bundle <directory-or-zip> --target-root <frontend>
23
+ ```
24
+
25
+ 后端交付保存于 `docs/backend-deliveries/<delivery-id>/<version>/`。战略快照自动通过既有工具导入 `docs/handoffs/`;两种包各自原子落盘、重复导入幂等,同身份版本不同内容拒绝。后端接收失败后已成功导入的战略快照可以保留并在重试时复用,不自动放行工作。
26
+
27
+ 目录和 ZIP 使用同一逻辑包摘要。只携带不可变文件与包内路径映射,不要求源仓或兄弟仓存在,不执行来源代码,不打包运行时凭据;目标根 `CONTEXT.md` 仍由目标维护者对账。
28
+
29
+ ## 接收与启动
30
+
31
+ 导入只产生 `frontend-acceptance-draft.json`,不会批准资产。接收方完成正式词汇对账并按 `schemas/frontend-delivery-acceptance.schema.json` 准备接收记录:
32
+
33
+ - `backend_delivery` 绑定后端导入收据和包摘要。
34
+ - `strategic_handoff` 绑定战略导入收据、包摘要、正式 `context_reconciliation_ref` 和全部源规则/关键场景的承接 rows。
35
+ - `frontend_cases` 绑定业务规则/场景、成功或失败结果、已交付接口、Visual Baseline `case_id` 和可读取的用例说明。
36
+ - 已规划的承接使用 `mapped`,表示已映射用例,不声称代码已实现。当前交付范围必须 mapped 到当前切片;其他范围的 pending、conflict、deferred 或 not-applicable 沿用战略逐条承接的理由、证据和依赖阻断规则。
37
+
38
+ 完成接收核对后记录 `status: accepted` 并执行:
39
+
40
+ ```bash
41
+ scripts/verify-frontend-delivery --root <frontend> --slice <slice-id> <relative-acceptance.json>
42
+ ```
43
+
44
+ 工具重新验两类包及批准、当前目标词汇、已知战略变更、最新已导入后端版本、场景映射和真实服务。成功仅返回 `inputs-verified`、`ready_for_agent: false`,供准备前端实现资产使用;`accepted` 字段本身不能证明就绪。
45
+
46
+ 编译输入传入 `slice_id`、`frontend_delivery.acceptance_ref`;编译结果冻结 `frontend_delivery.digest`(接收文件字节摘要)。正式 Slice Contract 保存为 `frontend.delivery`,也可消费 `resolution.frontend_delivery`。两个位置同时出现时须相同。实施、派发和恢复从已持久化合同读取这组绑定,再实际运行校验器;旧成功输出不作为新的放行证据。
47
+
48
+ 前端计划和正式验证证据绑定 `slice_id` 与 `frontend_delivery`;验证阶段另绑定 `slice_contract_ref`。Task Package 的实现任务从 `contract.slice_contract_ref` 读取绑定,准备任务使用 `slice_id` 与 `frontend_delivery`。模板维护或只读接收诊断不冒充产品实现任务。
49
+
50
+ ## 真实服务检查
51
+
52
+ 环境提供一个可只读探测的 JSON 版本响应,`revision_path` 和 JSON Pointer 由交付描述登记,不假定业务服务已有固定端点。响应须匹配 `deployment_id`、`source_commit`、`openapi_digest`、`artifact_digest` 和 `test_data_digest`;最后一项绑定已准备的数据说明/数据集版本。不能提供这些可核验身份时先补部署证据与探测能力。
53
+
54
+ 探测使用 GET、同 origin、不跟随重定向和有界超时。受保护探测通过 `authorization_env` 指定当前执行环境提供 Authorization 值的变量名;包和输出不携带其值。
55
+
56
+ 版本响应通过只证明当前服务身份可达,业务接口正确性仍依赖同基线的后端契约测试及后续真实联调。离线验包不能证明服务当前可用,也不能证明未同步源仓没有新变化。
57
+
58
+ ## 变更与完成
59
+
60
+ 战略变化使用现有规则/场景及设计基线的依赖失效规则。最新已导入的同身份后端交付使旧接收记录失效。不同切片采用不同后端交付身份,避免不相关切片互相阻塞。依赖未知时扩大阻断;缺口回交资产维护方,业务规则冲突回战略方。
61
+
62
+ 后端可交接、前端可验收和业务切片完成分开记录。最终业务验收绑定同一战略、API、后端部署和前端版本,复用既有视觉、交互、权限/失败场景、端到端和 Fresh Verification 条件;验包不替代其中任何一项。
63
+
64
+ ## 维护与验证
65
+
66
+ 共享实现由当前主模板维护,通过 `scripts/sync-strategic-handoff-tools` 分发;canonical Skill 变更后生成运行时投影与 lock。新/旧模板的实例初始化与 sync 不静默转换 profile。场景入口为 `scripts/verify-frontend-delivery-scenarios`,通过临时实例和明确标注的合成测试服务验证行为,不作为具体产品的交付证据。
67
+
68
+ 前端 `frontend_cases` 的 `evidence_ref` 必须同时绑定 `evidence_digest`(原始文件字节 SHA-256)。用例内容变化后须更新接收记录并重编译依赖合同。
69
+
70
+ OpenAPI Freeze 的来源门禁兼容综合模板 `gate.openapi-frozen` 与研发模板 `gate.openapi-freeze-confirmed`;仍严格校验来源角色策略及批准字节绑定,不允许其他门禁代替。每个交付范围至少包含一个带成功/失败验证的战略场景。
71
+
72
+ 生命周期中的稳定入口为 `gate.frontend-delivery-inputs-verified`,定义见各自 `lifecycle-registry.yaml`;角色表将它登记为 evidence_only,实际核验仍由脚本执行,不增设人工批准,也不替代 Slice Contract 的批准门禁。
@@ -66,6 +66,8 @@ apps/
66
66
 
67
67
  ## 2. 影响面路由
68
68
 
69
+ 采用后端交付驱动前端的专职项目,按 [前后端交付与联合接收](frontend-backend-delivery.md) 执行输入校验。该条件同时进入合同编译、任务派发、生命周期实施/恢复和正式前端证据检查;原通用研发 profile 保留兼容,不能以兼容入口替专职项目跳过接收。
70
+
69
71
  | 影响面 | 必须绑定的记录 | 本变更结论 |
70
72
  |---|---|---|
71
73
  | Harness-only | change、文档路径、压力场景、fresh verification、checkpoint | required:模板仓库、CLI 仓库 |
@@ -26,6 +26,7 @@
26
26
 
27
27
  | 稳定 ID | 门禁 | 所属阶段 | 触发条件 | 前置门禁 | 必须留下的证据 |
28
28
  |---|---|---|---|---|---|
29
+ | `gate.frontend-delivery-inputs-verified` | 前端联合输入核验 | `stage.system-data-engineering` | 专职前端 profile 或显式 frontend_delivery 绑定的任务启动、恢复、合同编译、实现和验证;实际执行 scripts/verify-frontend-delivery,输入就绪不等于实现获批。 | 无 | `evidence.fresh-verification` |
29
30
  | `gate.repository-identity-valid` | 仓库身份校验 | `stage.entry-triage` | 每次进入流程。 | 无 | `evidence.repository-identity-check` |
30
31
  | `gate.domain-strategy-approved` | 业务边界与规则确认 | `stage.discovery` | 需要确定业务板块、业务责任区、统一业务词汇、协作关系或关键规则。 | 无 | `evidence.domain-strategy-review`、`evidence.approval-record` |
31
32
  | `gate.stage-decision-package-approved` | 阶段决策包批准 | `stage.discovery` | Discovery 到 Spec 入口需要稳定的阶段决策合同。 | `gate.domain-strategy-approved` | `evidence.stage-decision-package`、`evidence.approval-record` |
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema_version": 1,
3
3
  "registry_id": "yss.lifecycle",
4
- "semantic_sha256": "f745204885a0c335b7f87dc1e1f5fd162a556b84e4543d6e1f356da41f6c081a",
4
+ "semantic_sha256": "7757565261e3290046cd31d6b4287fc1e5ec8bdf7fae4735b0be8ac882e87b8d",
5
5
  "published_ids": [
6
6
  "artifact.architecture-review",
7
7
  "artifact.data-architecture",
@@ -55,6 +55,7 @@
55
55
  "gate.design-reviewed",
56
56
  "gate.domain-strategy-approved",
57
57
  "gate.engineering-baseline-accepted",
58
+ "gate.frontend-delivery-inputs-verified",
58
59
  "gate.frontend-implementation-verified",
59
60
  "gate.openapi-draft-reviewed",
60
61
  "gate.openapi-frozen",
@@ -112,6 +112,11 @@ evidence:
112
112
  description: 可追溯的变更边界、发布记录和恢复动作。
113
113
 
114
114
  gates:
115
+ - id: gate.frontend-delivery-inputs-verified
116
+ name: 前端联合输入核验
117
+ stage: stage.system-data-engineering
118
+ trigger: 专职前端 profile 或显式 frontend_delivery 绑定的任务启动、恢复、合同编译、实现和验证;实际执行 scripts/verify-frontend-delivery,输入就绪不等于实现获批。
119
+ evidence: [evidence.fresh-verification]
115
120
  - id: gate.repository-identity-valid
116
121
  name: 仓库身份校验
117
122
  stage: stage.entry-triage
@@ -0,0 +1,113 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "properties": {
6
+ "schema_version": {
7
+ "const": 1
8
+ },
9
+ "kind": {
10
+ "enum": [
11
+ "backend-contract",
12
+ "backend-deployment"
13
+ ]
14
+ },
15
+ "subject_digest": {
16
+ "type": "string",
17
+ "pattern": "^sha256:[0-9a-f]{64}$"
18
+ },
19
+ "results": {
20
+ "type": "array",
21
+ "items": {
22
+ "type": "object",
23
+ "additionalProperties": false,
24
+ "properties": {
25
+ "command": {
26
+ "type": "string",
27
+ "minLength": 1
28
+ },
29
+ "executed_at": {
30
+ "type": "string",
31
+ "minLength": 1
32
+ },
33
+ "exit_code": {
34
+ "const": 0
35
+ },
36
+ "evidence": {
37
+ "type": "array",
38
+ "items": {
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "properties": {
42
+ "ref": {
43
+ "type": "string",
44
+ "minLength": 1
45
+ },
46
+ "digest": {
47
+ "type": "string",
48
+ "pattern": "^sha256:[0-9a-f]{64}$"
49
+ }
50
+ },
51
+ "required": [
52
+ "ref",
53
+ "digest"
54
+ ]
55
+ },
56
+ "minItems": 1,
57
+ "uniqueItems": true
58
+ }
59
+ },
60
+ "required": [
61
+ "command",
62
+ "executed_at",
63
+ "exit_code",
64
+ "evidence"
65
+ ]
66
+ },
67
+ "minItems": 1,
68
+ "uniqueItems": true
69
+ },
70
+ "operation_ids": {
71
+ "type": "array",
72
+ "items": {
73
+ "type": "string",
74
+ "minLength": 1
75
+ },
76
+ "minItems": 0,
77
+ "uniqueItems": true
78
+ },
79
+ "coverage": {
80
+ "type": "array",
81
+ "items": {
82
+ "type": "object",
83
+ "additionalProperties": false,
84
+ "properties": {
85
+ "source_id": {
86
+ "type": "string",
87
+ "minLength": 1
88
+ },
89
+ "outcome": {
90
+ "enum": [
91
+ "success",
92
+ "failure"
93
+ ]
94
+ }
95
+ },
96
+ "required": [
97
+ "source_id",
98
+ "outcome"
99
+ ]
100
+ },
101
+ "minItems": 0,
102
+ "uniqueItems": true
103
+ }
104
+ },
105
+ "required": [
106
+ "schema_version",
107
+ "kind",
108
+ "subject_digest",
109
+ "results",
110
+ "operation_ids",
111
+ "coverage"
112
+ ]
113
+ }
@@ -0,0 +1,301 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "properties": {
6
+ "schema_version": {
7
+ "const": 1
8
+ },
9
+ "delivery_id": {
10
+ "type": "string",
11
+ "pattern": "^backend-delivery\\.[a-z0-9][a-z0-9.-]*$"
12
+ },
13
+ "version": {
14
+ "type": "string",
15
+ "pattern": "^v[1-9][0-9]*$"
16
+ },
17
+ "status": {
18
+ "const": "verified"
19
+ },
20
+ "strategic_bundle_ref": {
21
+ "type": "string",
22
+ "minLength": 1
23
+ },
24
+ "strategic_bundle_digest": {
25
+ "type": "string",
26
+ "pattern": "^sha256:[0-9a-f]{64}$"
27
+ },
28
+ "scope": {
29
+ "type": "object",
30
+ "additionalProperties": false,
31
+ "properties": {
32
+ "slice_id": {
33
+ "type": "string",
34
+ "minLength": 1
35
+ },
36
+ "source_ids": {
37
+ "type": "array",
38
+ "items": {
39
+ "type": "string",
40
+ "minLength": 1
41
+ },
42
+ "minItems": 1,
43
+ "uniqueItems": true
44
+ },
45
+ "operation_ids": {
46
+ "type": "array",
47
+ "items": {
48
+ "type": "string",
49
+ "minLength": 1
50
+ },
51
+ "minItems": 1,
52
+ "uniqueItems": true
53
+ }
54
+ },
55
+ "required": [
56
+ "slice_id",
57
+ "source_ids",
58
+ "operation_ids"
59
+ ]
60
+ },
61
+ "openapi": {
62
+ "type": "object",
63
+ "additionalProperties": false,
64
+ "properties": {
65
+ "id": {
66
+ "type": "string",
67
+ "minLength": 1
68
+ },
69
+ "version": {
70
+ "type": "string",
71
+ "minLength": 1
72
+ },
73
+ "ref": {
74
+ "type": "string",
75
+ "minLength": 1
76
+ },
77
+ "digest": {
78
+ "type": "string",
79
+ "pattern": "^sha256:[0-9a-f]{64}$"
80
+ },
81
+ "approval_ref": {
82
+ "type": "string",
83
+ "minLength": 1
84
+ }
85
+ },
86
+ "required": [
87
+ "id",
88
+ "version",
89
+ "ref",
90
+ "digest",
91
+ "approval_ref"
92
+ ]
93
+ },
94
+ "slice_contract": {
95
+ "type": "object",
96
+ "additionalProperties": false,
97
+ "properties": {
98
+ "id": {
99
+ "type": "string",
100
+ "minLength": 1
101
+ },
102
+ "version": {
103
+ "type": "string",
104
+ "minLength": 1
105
+ },
106
+ "ref": {
107
+ "type": "string",
108
+ "minLength": 1
109
+ },
110
+ "digest": {
111
+ "type": "string",
112
+ "pattern": "^sha256:[0-9a-f]{64}$"
113
+ },
114
+ "approval_ref": {
115
+ "type": "string",
116
+ "minLength": 1
117
+ }
118
+ },
119
+ "required": [
120
+ "id",
121
+ "version",
122
+ "ref",
123
+ "digest",
124
+ "approval_ref"
125
+ ]
126
+ },
127
+ "build": {
128
+ "type": "object",
129
+ "additionalProperties": false,
130
+ "properties": {
131
+ "source_commit": {
132
+ "type": "string",
133
+ "pattern": "^[0-9a-f]{40}$"
134
+ },
135
+ "artifact_digest": {
136
+ "type": "string",
137
+ "pattern": "^sha256:[0-9a-f]{64}$"
138
+ }
139
+ },
140
+ "required": [
141
+ "source_commit",
142
+ "artifact_digest"
143
+ ]
144
+ },
145
+ "environment": {
146
+ "type": "object",
147
+ "additionalProperties": false,
148
+ "properties": {
149
+ "id": {
150
+ "type": "string",
151
+ "minLength": 1
152
+ },
153
+ "base_url": {
154
+ "type": "string",
155
+ "minLength": 1
156
+ },
157
+ "deployment_id": {
158
+ "type": "string",
159
+ "minLength": 1
160
+ },
161
+ "revision_path": {
162
+ "type": "string",
163
+ "minLength": 1
164
+ },
165
+ "revision_pointers": {
166
+ "type": "object",
167
+ "additionalProperties": false,
168
+ "properties": {
169
+ "deployment_id": {
170
+ "type": "string",
171
+ "minLength": 1
172
+ },
173
+ "source_commit": {
174
+ "type": "string",
175
+ "minLength": 1
176
+ },
177
+ "openapi_digest": {
178
+ "type": "string",
179
+ "minLength": 1
180
+ },
181
+ "artifact_digest": {
182
+ "type": "string",
183
+ "minLength": 1
184
+ },
185
+ "test_data_digest": {
186
+ "type": "string",
187
+ "minLength": 1
188
+ }
189
+ },
190
+ "required": [
191
+ "deployment_id",
192
+ "source_commit",
193
+ "openapi_digest",
194
+ "artifact_digest",
195
+ "test_data_digest"
196
+ ]
197
+ },
198
+ "test_data": {
199
+ "type": "object",
200
+ "additionalProperties": false,
201
+ "required": [
202
+ "ref",
203
+ "digest"
204
+ ],
205
+ "properties": {
206
+ "ref": {
207
+ "type": "string",
208
+ "minLength": 1
209
+ },
210
+ "digest": {
211
+ "type": "string",
212
+ "pattern": "^sha256:[0-9a-f]{64}$"
213
+ }
214
+ }
215
+ },
216
+ "authorization_env": {
217
+ "type": "string",
218
+ "pattern": "^[A-Z][A-Z0-9_]+$"
219
+ }
220
+ },
221
+ "required": [
222
+ "id",
223
+ "base_url",
224
+ "deployment_id",
225
+ "revision_path",
226
+ "revision_pointers",
227
+ "test_data"
228
+ ]
229
+ },
230
+ "verification": {
231
+ "type": "object",
232
+ "additionalProperties": false,
233
+ "properties": {
234
+ "contract": {
235
+ "type": "object",
236
+ "additionalProperties": false,
237
+ "properties": {
238
+ "ref": {
239
+ "type": "string",
240
+ "minLength": 1
241
+ },
242
+ "digest": {
243
+ "type": "string",
244
+ "pattern": "^sha256:[0-9a-f]{64}$"
245
+ }
246
+ },
247
+ "required": [
248
+ "ref",
249
+ "digest"
250
+ ]
251
+ },
252
+ "deployment": {
253
+ "type": "object",
254
+ "additionalProperties": false,
255
+ "properties": {
256
+ "ref": {
257
+ "type": "string",
258
+ "minLength": 1
259
+ },
260
+ "digest": {
261
+ "type": "string",
262
+ "pattern": "^sha256:[0-9a-f]{64}$"
263
+ }
264
+ },
265
+ "required": [
266
+ "ref",
267
+ "digest"
268
+ ]
269
+ }
270
+ },
271
+ "required": [
272
+ "contract",
273
+ "deployment"
274
+ ]
275
+ },
276
+ "supporting_files": {
277
+ "type": "array",
278
+ "items": {
279
+ "type": "string",
280
+ "minLength": 1
281
+ },
282
+ "minItems": 0,
283
+ "uniqueItems": true
284
+ }
285
+ },
286
+ "required": [
287
+ "schema_version",
288
+ "delivery_id",
289
+ "version",
290
+ "status",
291
+ "strategic_bundle_ref",
292
+ "strategic_bundle_digest",
293
+ "scope",
294
+ "openapi",
295
+ "slice_contract",
296
+ "build",
297
+ "environment",
298
+ "verification",
299
+ "supporting_files"
300
+ ]
301
+ }