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
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+
3
+ const OWNERSHIP_TYPES = new Set([
4
+ "managed",
5
+ "managed-customizable",
6
+ "generated",
7
+ "user-owned",
8
+ "protected",
9
+ ]);
10
+ const MERGE_STRATEGIES = new Set(["replace-with-force", "manual"]);
11
+
12
+ function assertPositiveInteger(value, name) {
13
+ if (value !== undefined && (!Number.isInteger(value) || value < 1)) {
14
+ throw new Error(`模板元数据 ${name} 必须是正整数`);
15
+ }
16
+ }
17
+
18
+ function assertSha256(value, name) {
19
+ if (value !== undefined && !/^[0-9a-f]{64}$/.test(value)) {
20
+ throw new Error(`模板元数据 ${name} 必须是 64 位 sha256`);
21
+ }
22
+ }
23
+
24
+ function validateTemplateMetadata(metadata, {
25
+ currentSchemaVersion = 2,
26
+ templateName,
27
+ templateSource,
28
+ } = {}) {
29
+ if (!metadata || typeof metadata !== "object" || Array.isArray(metadata)) {
30
+ throw new Error("模板元数据必须是 JSON 对象");
31
+ }
32
+ if (metadata.metadataSchemaVersion !== undefined && (!Number.isInteger(metadata.metadataSchemaVersion) || metadata.metadataSchemaVersion < 1)) {
33
+ throw new Error("模板元数据 metadataSchemaVersion 必须是正整数");
34
+ }
35
+ if (metadata.metadataSchemaVersion > currentSchemaVersion) {
36
+ throw new Error(`不支持的模板元数据版本:${metadata.metadataSchemaVersion}`);
37
+ }
38
+ if (metadata.managedFiles !== undefined && (typeof metadata.managedFiles !== "object" || metadata.managedFiles === null || Array.isArray(metadata.managedFiles))) {
39
+ throw new Error("模板元数据 managedFiles 必须是 JSON 对象");
40
+ }
41
+
42
+ assertPositiveInteger(metadata.ownershipPolicyVersion, "ownershipPolicyVersion");
43
+ assertSha256(metadata.ownershipPolicyHash, "ownershipPolicyHash");
44
+ assertPositiveInteger(metadata.customizationPolicyVersion, "customizationPolicyVersion");
45
+ assertSha256(metadata.customizationPolicyHash, "customizationPolicyHash");
46
+ assertPositiveInteger(metadata.generatorPolicyVersion, "generatorPolicyVersion");
47
+ assertSha256(metadata.generatorPolicyHash, "generatorPolicyHash");
48
+
49
+ for (const [relativePath, record] of Object.entries(metadata.managedFiles || {})) {
50
+ if (!record || typeof record !== "object" || Array.isArray(record)) {
51
+ throw new Error(`模板元数据 managedFiles.${relativePath} 必须是对象`);
52
+ }
53
+ if (record.ownership !== undefined && !OWNERSHIP_TYPES.has(record.ownership)) {
54
+ throw new Error(`模板元数据 managedFiles.${relativePath}.ownership 非法:${record.ownership}`);
55
+ }
56
+ if (
57
+ record.mergeStrategy !== undefined &&
58
+ !MERGE_STRATEGIES.has(record.mergeStrategy)
59
+ ) {
60
+ throw new Error(
61
+ `模板元数据 managedFiles.${relativePath}.mergeStrategy 非法:${record.mergeStrategy}`,
62
+ );
63
+ }
64
+ if (
65
+ record.generatorId !== undefined &&
66
+ !/^[a-z][a-z0-9-]*$/.test(record.generatorId)
67
+ ) {
68
+ throw new Error(
69
+ `模板元数据 managedFiles.${relativePath}.generatorId 非法:${record.generatorId}`,
70
+ );
71
+ }
72
+ if (
73
+ record.generatorVersion !== undefined &&
74
+ (!Number.isInteger(record.generatorVersion) || record.generatorVersion < 1)
75
+ ) {
76
+ throw new Error(
77
+ `模板元数据 managedFiles.${relativePath}.generatorVersion 必须是正整数`,
78
+ );
79
+ }
80
+ }
81
+
82
+ if (metadata.metadataSchemaVersion === currentSchemaVersion) {
83
+ if (templateName !== undefined && metadata.templateName !== templateName) {
84
+ throw new Error("模板元数据 templateName 与当前 CLI 不匹配");
85
+ }
86
+ if (typeof metadata.cliVersion !== "string" || !metadata.cliVersion) {
87
+ throw new Error("模板元数据 cliVersion 缺失或非法");
88
+ }
89
+ if (templateSource !== undefined && metadata.templateSource !== templateSource) {
90
+ throw new Error("模板元数据 templateSource 缺失或非法");
91
+ }
92
+ if (!/^[0-9a-f]{40}$/.test(metadata.templateCommit || "")) {
93
+ throw new Error("模板元数据必须包含 40 位不可变 templateCommit");
94
+ }
95
+ if (!/^[0-9a-f]{64}$/.test(metadata.managedFilesManifestVersion || "")) {
96
+ throw new Error("模板元数据 managedFilesManifestVersion 缺失或非法");
97
+ }
98
+ if (typeof metadata.variables !== "object" || metadata.variables === null || Array.isArray(metadata.variables)) {
99
+ throw new Error("模板元数据 variables 必须是 JSON 对象");
100
+ }
101
+ }
102
+ return metadata;
103
+ }
104
+
105
+ module.exports = { validateTemplateMetadata };
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ const path = require("node:path");
4
+ const { collectGitRoots, inspectCheckoutState } = require("../git/worktree");
5
+ const { isGitSubmoduleMount } = require("../git/submodule");
6
+
7
+ const DEFAULT_UNMANAGED_USER_PATHS = new Set([".gitmodules"]);
8
+
9
+ function gitlinkWriteViolation(targetDir, { force = false, packageRoot = null, deps = {} } = {}) {
10
+ const resolved = path.resolve(targetDir);
11
+ const roots = (deps.collectGitRoots || collectGitRoots)(resolved);
12
+ for (const root of roots) {
13
+ if (packageRoot && path.resolve(root) === path.resolve(packageRoot)) continue;
14
+ let current = resolved;
15
+ while (true) {
16
+ if ((deps.isGitSubmoduleMount || isGitSubmoduleMount)(root, current, deps)) {
17
+ const checkout = (deps.inspectCheckoutState || inspectCheckoutState)(root, current, deps);
18
+ if (checkout === "empty-gitlink" || checkout === "uninitialized") {
19
+ return "空 gitlink 不得当成普通目录写入;gitlink 不得由 CLI 覆盖";
20
+ }
21
+ if (checkout === "detached-head") {
22
+ return "detached HEAD 不得当成普通目录写入;gitlink 不得由 CLI 覆盖";
23
+ }
24
+ if (path.resolve(current) === resolved) {
25
+ return force
26
+ ? "--force 不得把 git-submodule 挂载点当成普通目录覆盖"
27
+ : "git-submodule gitlink 不得由 CLI 覆盖;先 git submodule update --init,在子仓附加分支的工作树内操作,或改用独立目录";
28
+ }
29
+ }
30
+ if (path.resolve(current) === path.resolve(root)) break;
31
+ const parent = path.dirname(current);
32
+ if (parent === current) break;
33
+ current = parent;
34
+ }
35
+ }
36
+ return null;
37
+ }
38
+
39
+ function assertTargetWorkingTreeWritable(targetDir, options = {}) {
40
+ const violation = gitlinkWriteViolation(targetDir, options);
41
+ if (violation) throw new Error(violation);
42
+ }
43
+
44
+ function unmanagedPathReason(targetDir, relativePath, { packageRoot = null, unmanagedPaths = DEFAULT_UNMANAGED_USER_PATHS, deps = {} } = {}) {
45
+ const normalized = String(relativePath).split(path.sep).join("/");
46
+ if (unmanagedPaths.has(normalized) || normalized.split("/")[0] === ".gitmodules") {
47
+ return ".gitmodules 是用户资产,不属于受管模板文件";
48
+ }
49
+ const absolutePath = path.resolve(targetDir, normalized);
50
+ const roots = (deps.collectGitRoots || collectGitRoots)(targetDir);
51
+ for (const root of roots) {
52
+ if (packageRoot && path.resolve(root) === path.resolve(packageRoot)) continue;
53
+ let current = absolutePath;
54
+ while (true) {
55
+ if ((deps.isGitSubmoduleMount || isGitSubmoduleMount)(root, current, deps)) {
56
+ return "gitlink / apps 挂载工作树是用户资产,不属于受管模板文件";
57
+ }
58
+ if (path.resolve(current) === path.resolve(root)) break;
59
+ const parent = path.dirname(current);
60
+ if (parent === current) break;
61
+ current = parent;
62
+ }
63
+ }
64
+ return null;
65
+ }
66
+
67
+ module.exports = { DEFAULT_UNMANAGED_USER_PATHS, gitlinkWriteViolation, assertTargetWorkingTreeWritable, unmanagedPathReason };
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ const path = require("node:path");
4
+
5
+ function normalizeRelativePath(value) {
6
+ return String(value).split(path.sep).join("/");
7
+ }
8
+
9
+ function validateTemplateSnapshot(snapshot, { manifestHash, treeHash } = {}) {
10
+ if (!snapshot || typeof snapshot !== "object" || Array.isArray(snapshot)) {
11
+ throw new Error("模板快照元数据必须是 JSON 对象");
12
+ }
13
+ if (!/^[0-9a-f]{40}$/.test(snapshot.templateCommit || "")) {
14
+ throw new Error("模板快照必须绑定 40 位不可变 templateCommit");
15
+ }
16
+ if (!/^[0-9a-f]{64}$/.test(snapshot.snapshotHash || "")) {
17
+ throw new Error("模板快照必须包含 64 位 snapshotHash");
18
+ }
19
+ if (manifestHash !== undefined && snapshot.manifestHash !== manifestHash) {
20
+ throw new Error("模板快照与当前 template.manifest.json 不一致,请重新构建 CLI 包");
21
+ }
22
+ if (snapshot.encodedPaths !== undefined && (typeof snapshot.encodedPaths !== "object" || snapshot.encodedPaths === null || Array.isArray(snapshot.encodedPaths))) {
23
+ throw new Error("模板快照 encodedPaths 必须是 JSON 对象");
24
+ }
25
+
26
+ const encodedTargets = new Set();
27
+ for (const [logicalPath, encodedPath] of Object.entries(snapshot.encodedPaths || {})) {
28
+ for (const value of [logicalPath, encodedPath]) {
29
+ const normalized = normalizeRelativePath(value);
30
+ if (!normalized || normalized === "." || normalized.startsWith("../") || normalized.includes("/../") || path.posix.isAbsolute(normalized)) {
31
+ throw new Error(`模板快照包含越界路径:${value}`);
32
+ }
33
+ }
34
+ const normalizedTarget = normalizeRelativePath(encodedPath);
35
+ if (encodedTargets.has(normalizedTarget)) {
36
+ throw new Error(`模板快照 encodedPaths 存在重复目标:${encodedPath}`);
37
+ }
38
+ encodedTargets.add(normalizedTarget);
39
+ }
40
+
41
+ if (treeHash !== undefined && snapshot.snapshotHash !== treeHash) {
42
+ throw new Error("模板快照内容 hash 不匹配,请重新构建 CLI 包");
43
+ }
44
+ return snapshot;
45
+ }
46
+
47
+ module.exports = { validateTemplateSnapshot, normalizeRelativePath };
@@ -3,7 +3,7 @@
3
3
  "source": "iloveZzz/yss-harness-design-agent",
4
4
  "source_type": "git-submodule",
5
5
  "source_root": ".agents/skills",
6
- "source_revision": "31189d2b4b78821ea8bef202d8516ac85b7a3c79",
6
+ "source_revision": "5c1c98225bb181c7c1add8972c1e44b866205f76",
7
7
  "adaptation_ref": "docs/agents/strategic-design-skills-integration.md",
8
8
  "skills": [
9
9
  {
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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