@givolt/i3-composer-agent 3.2.1 → 4.0.1

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 (611) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude/commands/i3-build.md +1 -0
  3. package/.claude/commands/i3-code-simplify.md +1 -0
  4. package/.claude/commands/i3-constraints.md +1 -0
  5. package/.claude/commands/i3-plan.md +1 -0
  6. package/.claude/commands/i3-review.md +1 -0
  7. package/.claude/commands/i3-ship.md +1 -0
  8. package/.claude/commands/i3-spec.md +1 -0
  9. package/.claude/commands/i3-test.md +1 -0
  10. package/.claude/commands/i3-webperf.md +1 -0
  11. package/.claude-plugin/marketplace.json +1 -1
  12. package/.claude-plugin/plugin.json +1 -1
  13. package/.codex-plugin/plugin.json +2 -2
  14. package/README.md +31 -25
  15. package/bin/i3-composer-agent.cjs +4 -59
  16. package/bin/install.cjs +6 -14
  17. package/bin/native-layout.cjs +11 -2
  18. package/bin/native-migration.cjs +68 -28
  19. package/bin/retired-custom-fingerprints.json +1597 -0
  20. package/bin/wizard.cjs +2 -13
  21. package/docs/antigravity-setup.md +3 -1
  22. package/docs/codebuddy-setup.md +19 -76
  23. package/docs/codex-setup.md +10 -4
  24. package/docs/comparison.md +1 -1
  25. package/docs/copilot-cli-setup.md +4 -4
  26. package/docs/cursor-setup.md +1 -1
  27. package/docs/gemini-cli-setup.md +1 -1
  28. package/docs/other-hosts.md +2 -2
  29. package/docs/windsurf-setup.md +2 -2
  30. package/docs/workbuddy-setup.md +9 -16
  31. package/evals/README.md +10 -0
  32. package/evals/cases/i3-code-simplification.json +8 -0
  33. package/evals/cases/i3-documentation-and-adrs.json +4 -0
  34. package/evals/cases/i3-enterprise-sop.json +1 -1
  35. package/evals/cases/i3-frontend-ui-engineering.json +1 -1
  36. package/evals/cases/i3-security-and-hardening.json +4 -0
  37. package/evals/cases/i3-ui-demo.json +2 -2
  38. package/evals/cases/i3-using-agent-skills.json +5 -5
  39. package/evals/plugin/simplify-fires-on-pasted-function/graders/behavior-kept-and-explained.md +7 -0
  40. package/evals/plugin/simplify-fires-on-pasted-function/graders/skill-fired.md +5 -0
  41. package/evals/plugin/simplify-fires-on-pasted-function/prompt.md +30 -0
  42. package/evals/plugin/simplify-stays-quiet-on-make-it-fast/graders/not-fired.md +8 -0
  43. package/evals/plugin/simplify-stays-quiet-on-make-it-fast/prompt.md +20 -0
  44. package/evals/zh-CN/cases/i3-code-simplification.json +8 -0
  45. package/evals/zh-CN/cases/i3-documentation-and-adrs.json +4 -0
  46. package/evals/zh-CN/cases/i3-enterprise-sop.json +1 -1
  47. package/evals/zh-CN/cases/i3-frontend-ui-engineering.json +2 -2
  48. package/evals/zh-CN/cases/i3-security-and-hardening.json +4 -0
  49. package/evals/zh-CN/cases/i3-ui-demo.json +2 -2
  50. package/evals/zh-CN/cases/i3-using-agent-skills.json +6 -6
  51. package/hooks/SDD-CACHE.md +1 -1
  52. package/package.json +13 -80
  53. package/plugin.json +15 -2
  54. package/references/accessibility-checklist.md +4 -4
  55. package/references/performance-checklist.md +5 -4
  56. package/references/testing-patterns.md +2 -1
  57. package/scripts/floor-guard-reference-test.js +32 -0
  58. package/scripts/lib/execution-status.js +44 -0
  59. package/scripts/run-evals-test.js +157 -7
  60. package/scripts/run-evals.js +59 -12
  61. package/scripts/ui-demo-test.js +2 -2
  62. package/scripts/validate-artifact-paths-test.js +14 -0
  63. package/scripts/validate-artifact-paths.js +4 -2
  64. package/skills/i3-api-and-interface-design/SKILL.md +3 -1
  65. package/skills/i3-ci-cd-and-automation/SKILL.md +7 -4
  66. package/skills/i3-code-simplification/SKILL.md +3 -3
  67. package/skills/i3-constraint-driven-development/SKILL.md +4 -4
  68. package/skills/i3-constraint-driven-development/references/floor-guard.md +2 -2
  69. package/skills/i3-context-engineering/SKILL.md +1 -1
  70. package/skills/i3-debugging-and-error-recovery/SKILL.md +1 -1
  71. package/skills/i3-deprecation-and-migration/SKILL.md +6 -1
  72. package/skills/i3-documentation-and-adrs/SKILL.md +3 -2
  73. package/skills/i3-enterprise-sop/SKILL.md +38 -71
  74. package/skills/i3-enterprise-sop/references/engineering-skeleton/directory-standard.md +7 -7
  75. package/skills/i3-enterprise-sop/references/handoff.py +149 -120
  76. package/skills/i3-enterprise-sop/references/technical-baseline/baselines/enterprise-application-technical-baseline-v0-0-4.md +24 -24
  77. package/skills/i3-enterprise-sop/references/technical-baseline/templates/technical-baseline.md +8 -8
  78. package/skills/i3-enterprise-sop/references/templates/ad.md +31 -31
  79. package/skills/i3-enterprise-sop/references/templates/brd.md +6 -6
  80. package/skills/i3-enterprise-sop/references/templates/prd.md +37 -37
  81. package/skills/i3-enterprise-sop/references/templates/testcase.md +25 -25
  82. package/skills/i3-frontend-ui-engineering/SKILL.md +6 -10
  83. package/skills/i3-idea-refine/SKILL.md +4 -2
  84. package/skills/i3-incremental-implementation/SKILL.md +0 -4
  85. package/skills/i3-performance-optimization/SKILL.md +2 -2
  86. package/skills/i3-security-and-hardening/references/hardening-patterns.md +5 -0
  87. package/skills/i3-source-driven-development/SKILL.md +3 -2
  88. package/skills/i3-spec-driven-development/SKILL.md +1 -1
  89. package/skills/i3-ui-demo/SKILL.md +3 -1
  90. package/skills/i3-ui-demo/references/dependencies.md +1 -1
  91. package/skills/i3-ui-demo/references/resources.md +1 -1
  92. package/skills/i3-ui-demo/scripts/dependencies.cjs +0 -3
  93. package/skills/i3-using-agent-skills/SKILL.md +2 -2
  94. package/.claude/commands/i3-prototype.md +0 -23
  95. package/.gemini/commands/i3-prototype.toml +0 -23
  96. package/commands/i3-prototype.toml +0 -23
  97. package/evals/cases/i3-ui-prototype.json +0 -158
  98. package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.css +0 -3
  99. package/evals/fixtures/i3-ui-prototype/admin-list/assets/reference.js +0 -8
  100. package/evals/fixtures/i3-ui-prototype/admin-list/capability-definition.json +0 -67
  101. package/evals/fixtures/i3-ui-prototype/admin-list/index.html +0 -89
  102. package/evals/fixtures/i3-ui-prototype/admin-list/readme.md +0 -52
  103. package/evals/fixtures/i3-ui-prototype/admin-list/template.json +0 -8
  104. package/evals/fixtures/i3-ui-prototype/business-brief.md +0 -7
  105. package/evals/zh-CN/cases/i3-ui-prototype.json +0 -165
  106. package/hooks/PROTOTYPE.md +0 -31
  107. package/hooks/codebuddy-upstream.cjs +0 -93
  108. package/hooks/i3-prototype.cjs +0 -7
  109. package/hooks/manage.cjs +0 -169
  110. package/scripts/design-provider-discovery-test.js +0 -190
  111. package/scripts/design-provider-test.js +0 -75
  112. package/scripts/enterprise-template-test.js +0 -205
  113. package/scripts/lib/prototype-fixture.cjs +0 -17
  114. package/scripts/prototype-cache-test.js +0 -55
  115. package/scripts/prototype-generation-entry-test.js +0 -6
  116. package/scripts/prototype-generation-evidence-test.js +0 -10
  117. package/scripts/prototype-generation-native-test.js +0 -78
  118. package/scripts/prototype-generation-test.js +0 -99
  119. package/scripts/prototype-inventory-test.js +0 -43
  120. package/scripts/prototype-locations-test.js +0 -79
  121. package/scripts/prototype-project-test.js +0 -183
  122. package/scripts/template-adapter-test.js +0 -155
  123. package/scripts/ui-prototype-binding-recovery-test.js +0 -84
  124. package/scripts/ui-prototype-buddy-lifecycle-test.js +0 -102
  125. package/scripts/ui-prototype-codebuddy-hook-test.js +0 -112
  126. package/scripts/ui-prototype-content-test.js +0 -123
  127. package/scripts/ui-prototype-dependencies-test.js +0 -226
  128. package/scripts/ui-prototype-devtools-test.js +0 -53
  129. package/scripts/ui-prototype-execution-evidence-test.js +0 -62
  130. package/scripts/ui-prototype-execution-gates-test.js +0 -91
  131. package/scripts/ui-prototype-execution-policy-test.js +0 -53
  132. package/scripts/ui-prototype-execution-runtime-test.js +0 -27
  133. package/scripts/ui-prototype-ide-source-test.js +0 -73
  134. package/scripts/ui-prototype-native-test.js +0 -526
  135. package/scripts/ui-prototype-recovery-test.js +0 -81
  136. package/scripts/ui-prototype-registration-test.js +0 -53
  137. package/scripts/ui-prototype-template-test.js +0 -261
  138. package/scripts/ui-prototype-test.js +0 -124
  139. package/scripts/ui-prototype-transcript-auto-test.js +0 -67
  140. package/skills/i3-ui-prototype/SKILL.md +0 -256
  141. package/skills/i3-ui-prototype/assets/capabilities/generation.json +0 -833
  142. package/skills/i3-ui-prototype/assets/capabilities/management.json +0 -294
  143. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/acceptance.json +0 -51
  144. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/component-map.json +0 -13
  145. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/generation-component-map.json +0 -300
  146. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/index.html +0 -11
  147. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package-lock.json +0 -2298
  148. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/package.json +0 -22
  149. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/public/prototype-config.json +0 -6
  150. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/App.vue +0 -136
  151. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/components/DeviceEditor.vue +0 -111
  152. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/config.ts +0 -19
  153. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/content.ts +0 -28
  154. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/devices.ts +0 -50
  155. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/domain/theme.ts +0 -25
  156. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/main.ts +0 -18
  157. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/style.css +0 -50
  158. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/src/useDevices.ts +0 -66
  159. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/devices.test.ts +0 -44
  160. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tests/theme.test.ts +0 -26
  161. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/tsconfig.json +0 -15
  162. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/legacy-starter/vite.config.ts +0 -4
  163. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/profile.json +0 -174
  164. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/readme.md +0 -61
  165. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/index.html +0 -11
  166. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package-lock.json +0 -2298
  167. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/package.json +0 -22
  168. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/public/prototype-config.json +0 -21
  169. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/App.vue +0 -62
  170. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/PrototypeShell.vue +0 -59
  171. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/config.ts +0 -23
  172. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/presentation.ts +0 -29
  173. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/domain/theme.ts +0 -25
  174. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/main.ts +0 -18
  175. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/src/style.css +0 -26
  176. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/presentation.test.ts +0 -23
  177. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tests/theme.test.ts +0 -26
  178. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/tsconfig.json +0 -15
  179. package/skills/i3-ui-prototype/assets/frameworks/vue-antdv-next/starter/vite.config.ts +0 -4
  180. package/skills/i3-ui-prototype/assets/hosts/codebuddy/profile.json +0 -17
  181. package/skills/i3-ui-prototype/assets/optional-skills/host-targets.json +0 -739
  182. package/skills/i3-ui-prototype/assets/optional-skills/sources.json +0 -27
  183. package/skills/i3-ui-prototype/assets/templates/catalog.js +0 -149
  184. package/skills/i3-ui-prototype/assets/templates/catalog.json +0 -149
  185. package/skills/i3-ui-prototype/assets/templates/classic-admin/manifest.json +0 -9
  186. package/skills/i3-ui-prototype/assets/templates/classic-admin/preset.json +0 -6
  187. package/skills/i3-ui-prototype/assets/templates/common/app/app.mjs +0 -89
  188. package/skills/i3-ui-prototype/assets/templates/common/app/config.json +0 -1
  189. package/skills/i3-ui-prototype/assets/templates/common/app/domain.mjs +0 -20
  190. package/skills/i3-ui-prototype/assets/templates/common/app/index.html +0 -17
  191. package/skills/i3-ui-prototype/assets/templates/common/app/serve.cjs +0 -16
  192. package/skills/i3-ui-prototype/assets/templates/common/app/styles.css +0 -670
  193. package/skills/i3-ui-prototype/assets/templates/common/app/tokens.css +0 -19
  194. package/skills/i3-ui-prototype/assets/templates/common/design-system/master.md +0 -20
  195. package/skills/i3-ui-prototype/assets/templates/common/gallery.html +0 -2
  196. package/skills/i3-ui-prototype/assets/templates/common/mocks/applications.json +0 -5
  197. package/skills/i3-ui-prototype/assets/templates/common/requirements-map.json +0 -8
  198. package/skills/i3-ui-prototype/assets/templates/common/serve-gallery.cjs +0 -16
  199. package/skills/i3-ui-prototype/assets/templates/credits.md +0 -17
  200. package/skills/i3-ui-prototype/assets/templates/data-operations/manifest.json +0 -9
  201. package/skills/i3-ui-prototype/assets/templates/data-operations/preset.json +0 -6
  202. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/capability-definition.json +0 -294
  203. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/component-inventory.json +0 -707
  204. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/design-system.md +0 -32
  205. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/generation.json +0 -49
  206. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/index.html +0 -534
  207. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/manifest.json +0 -9
  208. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline-build.json +0 -265
  209. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/offline.js +0 -8888
  210. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/origin.json +0 -344
  211. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/preset.json +0 -928
  212. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/app.js +0 -22
  213. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/empty.svg +0 -1
  214. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/reference-styles.json +0 -1
  215. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-403.svg +0 -1
  216. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-404.svg +0 -1
  217. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets-manifest.json +0 -334
  218. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/baseline.json +0 -173
  219. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/conversion.md +0 -30
  220. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/credits.md +0 -17
  221. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/design-tokens.json +0 -881
  222. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/index.html +0 -28
  223. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +0 -9
  224. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +0 -22
  225. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +0 -21
  226. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/package.json +0 -12
  227. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/browser-routes.json +0 -298
  228. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/coverage.json +0 -180
  229. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/integrity.json +0 -13
  230. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/keyboard.json +0 -11
  231. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/responsive.json +0 -125
  232. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/review.md +0 -51
  233. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/rules.log +0 -150
  234. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
  235. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
  236. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
  237. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
  238. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
  239. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
  240. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
  241. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
  242. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/selection.json +0 -9
  243. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +0 -342
  244. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/readme.md +0 -73
  245. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/reference.md +0 -59
  246. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/routes.json +0 -178
  247. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/controls.js +0 -99
  248. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dialogs.js +0 -54
  249. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dom.js +0 -264
  250. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/forms.js +0 -47
  251. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/icons.js +0 -41
  252. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/layout.js +0 -47
  253. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/router.js +0 -63
  254. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/state.js +0 -90
  255. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/table.js +0 -41
  256. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/widgets.js +0 -8
  257. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +0 -3
  258. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +0 -36
  259. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +0 -2
  260. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +0 -51
  261. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +0 -3
  262. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +0 -48
  263. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +0 -2
  264. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +0 -6
  265. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +0 -2
  266. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +0 -13
  267. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/data.js +0 -24
  268. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/domain.js +0 -32
  269. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/registry.js +0 -25
  270. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/store.js +0 -85
  271. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +0 -2
  272. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +0 -17
  273. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +0 -2
  274. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +0 -66
  275. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +0 -3
  276. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +0 -38
  277. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +0 -2
  278. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +0 -66
  279. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +0 -2
  280. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +0 -5
  281. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +0 -2
  282. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +0 -12
  283. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +0 -2
  284. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +0 -11
  285. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +0 -2
  286. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +0 -116
  287. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +0 -2
  288. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +0 -32
  289. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +0 -2
  290. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +0 -49
  291. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +0 -2
  292. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +0 -10
  293. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +0 -2
  294. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +0 -77
  295. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/data.js +0 -60
  296. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/domain.js +0 -105
  297. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/store.js +0 -212
  298. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +0 -2
  299. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +0 -18
  300. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +0 -2
  301. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +0 -23
  302. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +0 -2
  303. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +0 -78
  304. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +0 -2
  305. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +0 -55
  306. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +0 -2
  307. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +0 -26
  308. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +0 -2
  309. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +0 -38
  310. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +0 -2
  311. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +0 -7
  312. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +0 -2
  313. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +0 -72
  314. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +0 -2
  315. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +0 -46
  316. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +0 -2
  317. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +0 -52
  318. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.html +0 -2
  319. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.js +0 -19
  320. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +0 -2
  321. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +0 -30
  322. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/data.js +0 -48
  323. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/domain.js +0 -39
  324. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/store.js +0 -129
  325. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +0 -4
  326. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +0 -21
  327. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +0 -2
  328. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +0 -8
  329. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +0 -2
  330. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +0 -37
  331. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +0 -2
  332. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +0 -10
  333. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +0 -2
  334. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +0 -37
  335. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +0 -2
  336. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +0 -49
  337. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +0 -4
  338. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +0 -22
  339. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +0 -2
  340. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +0 -9
  341. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/commands.js +0 -82
  342. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/examples.js +0 -47
  343. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/model.js +0 -61
  344. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/repair.js +0 -68
  345. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/store.js +0 -55
  346. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/types.js +0 -1
  347. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/workbench.js +0 -18
  348. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +0 -3
  349. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +0 -28
  350. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +0 -2
  351. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +0 -18
  352. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +0 -2
  353. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +0 -31
  354. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +0 -2
  355. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +0 -27
  356. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +0 -2
  357. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +0 -16
  358. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +0 -2
  359. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +0 -43
  360. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +0 -4
  361. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +0 -34
  362. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +0 -2
  363. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +0 -30
  364. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +0 -3
  365. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +0 -67
  366. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +0 -2
  367. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +0 -41
  368. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +0 -2
  369. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +0 -31
  370. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +0 -2
  371. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +0 -26
  372. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +0 -2
  373. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +0 -70
  374. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/data.js +0 -8
  375. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/domain.js +0 -62
  376. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/management.js +0 -36
  377. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +0 -49
  378. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/store.js +0 -132
  379. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +0 -2
  380. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +0 -38
  381. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +0 -2
  382. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +0 -11
  383. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +0 -2
  384. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +0 -45
  385. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +0 -2
  386. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +0 -54
  387. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +0 -3
  388. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +0 -27
  389. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +0 -2
  390. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +0 -12
  391. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +0 -2
  392. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +0 -45
  393. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +0 -3
  394. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +0 -38
  395. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/domain.js +0 -61
  396. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/state.js +0 -51
  397. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/store.js +0 -116
  398. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +0 -2
  399. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +0 -45
  400. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +0 -4
  401. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +0 -30
  402. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +0 -2
  403. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +0 -67
  404. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +0 -2
  405. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +0 -5
  406. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +0 -4
  407. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +0 -60
  408. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/commands.js +0 -157
  409. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/model.js +0 -136
  410. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/store.js +0 -76
  411. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +0 -3
  412. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +0 -26
  413. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +0 -2
  414. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +0 -14
  415. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +0 -2
  416. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +0 -113
  417. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +0 -3
  418. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +0 -62
  419. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/commands.js +0 -97
  420. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/model.js +0 -147
  421. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/store.js +0 -13
  422. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +0 -2
  423. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +0 -9
  424. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +0 -2
  425. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +0 -8
  426. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +0 -2
  427. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +0 -37
  428. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +0 -2
  429. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +0 -8
  430. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +0 -2
  431. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +0 -17
  432. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/columns.js +0 -32
  433. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +0 -49
  434. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +0 -12
  435. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +0 -15
  436. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +0 -37
  437. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/policy.js +0 -68
  438. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/session.js +0 -44
  439. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +0 -2
  440. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +0 -25
  441. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +0 -2
  442. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +0 -53
  443. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +0 -10
  444. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +0 -30
  445. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +0 -2
  446. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +0 -10
  447. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +0 -2
  448. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +0 -9
  449. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +0 -3
  450. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/navigation.js +0 -19
  451. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +0 -2
  452. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +0 -8
  453. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +0 -2
  454. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +0 -32
  455. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +0 -2
  456. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +0 -15
  457. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +0 -2
  458. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +0 -11
  459. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +0 -2
  460. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +0 -57
  461. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +0 -2
  462. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +0 -37
  463. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/data.js +0 -20
  464. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/domain.js +0 -55
  465. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/store.js +0 -151
  466. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +0 -3
  467. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +0 -18
  468. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +0 -2
  469. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +0 -40
  470. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +0 -2
  471. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +0 -51
  472. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +0 -2
  473. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +0 -9
  474. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +0 -5
  475. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +0 -48
  476. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/domain.js +0 -204
  477. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +0 -22
  478. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/registry.js +0 -135
  479. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/store.js +0 -137
  480. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +0 -3
  481. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +0 -36
  482. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/model.js +0 -56
  483. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/store.js +0 -15
  484. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +0 -2
  485. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +0 -27
  486. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +0 -4
  487. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +0 -31
  488. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +0 -2
  489. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +0 -68
  490. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +0 -5
  491. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +0 -55
  492. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/data.js +0 -16
  493. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/domain.js +0 -83
  494. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/registry.js +0 -18
  495. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/store.js +0 -61
  496. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/admin.css +0 -60
  497. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/agents.css +0 -46
  498. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/antdv.css +0 -295
  499. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/app.css +0 -102
  500. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/delivery.css +0 -4
  501. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/intents.css +0 -37
  502. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/native.css +0 -22
  503. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/operations.css +0 -2
  504. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pbc.css +0 -3
  505. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/permissions.css +0 -22
  506. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pro.css +0 -1
  507. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/releases.css +0 -4
  508. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reset.css +0 -246
  509. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reviews.css +0 -8
  510. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tasks.css +0 -6
  511. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tokens.css +0 -15
  512. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workbench.css +0 -61
  513. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workflows.css +0 -1
  514. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +0 -96
  515. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/agents.test.js +0 -14
  516. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +0 -37
  517. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +0 -44
  518. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +0 -19
  519. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +0 -14
  520. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operations.test.js +0 -25
  521. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +0 -17
  522. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +0 -24
  523. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +0 -23
  524. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permissions.test.js +0 -24
  525. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/releases.test.js +0 -50
  526. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/reviews.test.js +0 -36
  527. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +0 -28
  528. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +0 -42
  529. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +0 -16
  530. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +0 -11
  531. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/tasks.test.js +0 -27
  532. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workbench.test.js +0 -34
  533. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workflows.test.js +0 -16
  534. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/convert.mjs +0 -168
  535. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/serve.mjs +0 -7
  536. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/styles.mjs +0 -11
  537. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/verify.mjs +0 -24
  538. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/serve.cjs +0 -16
  539. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template-inventory.json +0 -28791
  540. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/template.json +0 -9
  541. package/skills/i3-ui-prototype/assets/templates/enterprise-admin/usability.css +0 -44
  542. package/skills/i3-ui-prototype/assets/templates/gallery/index.html +0 -40
  543. package/skills/i3-ui-prototype/assets/templates/generation-options.js +0 -42
  544. package/skills/i3-ui-prototype/assets/templates/index.html +0 -3
  545. package/skills/i3-ui-prototype/assets/templates/modern-workspace/manifest.json +0 -9
  546. package/skills/i3-ui-prototype/assets/templates/modern-workspace/preset.json +0 -6
  547. package/skills/i3-ui-prototype/assets/templates/presentation.html +0 -17
  548. package/skills/i3-ui-prototype/assets/templates/serve-gallery.cjs +0 -23
  549. package/skills/i3-ui-prototype/references/artifact-contract.md +0 -66
  550. package/skills/i3-ui-prototype/references/content-template.md +0 -81
  551. package/skills/i3-ui-prototype/references/enterprise-admin.md +0 -44
  552. package/skills/i3-ui-prototype/references/entry-contract.md +0 -71
  553. package/skills/i3-ui-prototype/references/execution-evidence.md +0 -51
  554. package/skills/i3-ui-prototype/references/expert-adapter.md +0 -76
  555. package/skills/i3-ui-prototype/references/framework-contract.md +0 -76
  556. package/skills/i3-ui-prototype/references/generation-contract.md +0 -122
  557. package/skills/i3-ui-prototype/references/interaction-acceptance.md +0 -169
  558. package/skills/i3-ui-prototype/references/legacy-native.md +0 -58
  559. package/skills/i3-ui-prototype/references/optional-skills.md +0 -63
  560. package/skills/i3-ui-prototype/references/project-layout.md +0 -92
  561. package/skills/i3-ui-prototype/references/template-adapters.md +0 -63
  562. package/skills/i3-ui-prototype/references/workflow-contract.md +0 -77
  563. package/skills/i3-ui-prototype/scripts/adapters/easel-html.cjs +0 -30
  564. package/skills/i3-ui-prototype/scripts/adapters/legacy-html.cjs +0 -28
  565. package/skills/i3-ui-prototype/scripts/browser-workspace.cjs +0 -72
  566. package/skills/i3-ui-prototype/scripts/buddy-host.cjs +0 -40
  567. package/skills/i3-ui-prototype/scripts/check-design-provider.cjs +0 -9
  568. package/skills/i3-ui-prototype/scripts/check-prototype.cjs +0 -14
  569. package/skills/i3-ui-prototype/scripts/codebuddy-context.cjs +0 -92
  570. package/skills/i3-ui-prototype/scripts/codebuddy-hook.cjs +0 -298
  571. package/skills/i3-ui-prototype/scripts/codebuddy-ide-source.cjs +0 -69
  572. package/skills/i3-ui-prototype/scripts/codebuddy-registration.cjs +0 -125
  573. package/skills/i3-ui-prototype/scripts/content-template.cjs +0 -98
  574. package/skills/i3-ui-prototype/scripts/design-provider-discovery.cjs +0 -128
  575. package/skills/i3-ui-prototype/scripts/enterprise-template.cjs +0 -104
  576. package/skills/i3-ui-prototype/scripts/execution-assertions.cjs +0 -43
  577. package/skills/i3-ui-prototype/scripts/execution-diagnostics.cjs +0 -91
  578. package/skills/i3-ui-prototype/scripts/execution-evidence.cjs +0 -177
  579. package/skills/i3-ui-prototype/scripts/execution-gates.cjs +0 -216
  580. package/skills/i3-ui-prototype/scripts/execution-policy.cjs +0 -62
  581. package/skills/i3-ui-prototype/scripts/execution-recovery.cjs +0 -58
  582. package/skills/i3-ui-prototype/scripts/execution-runtime.cjs +0 -69
  583. package/skills/i3-ui-prototype/scripts/generation-assets.cjs +0 -18
  584. package/skills/i3-ui-prototype/scripts/generation-contract.cjs +0 -214
  585. package/skills/i3-ui-prototype/scripts/generation-evidence.cjs +0 -50
  586. package/skills/i3-ui-prototype/scripts/generation-replan.cjs +0 -34
  587. package/skills/i3-ui-prototype/scripts/hosts/codebuddy.cjs +0 -21
  588. package/skills/i3-ui-prototype/scripts/init-prototype.cjs +0 -8
  589. package/skills/i3-ui-prototype/scripts/manage-baseline.cjs +0 -11
  590. package/skills/i3-ui-prototype/scripts/native-browser.cjs +0 -785
  591. package/skills/i3-ui-prototype/scripts/native-build.cjs +0 -91
  592. package/skills/i3-ui-prototype/scripts/native-command.cjs +0 -35
  593. package/skills/i3-ui-prototype/scripts/native-delivery.cjs +0 -104
  594. package/skills/i3-ui-prototype/scripts/native-devtools.cjs +0 -92
  595. package/skills/i3-ui-prototype/scripts/native-files.cjs +0 -44
  596. package/skills/i3-ui-prototype/scripts/native-pilot-lib.cjs +0 -290
  597. package/skills/i3-ui-prototype/scripts/native-pilot.cjs +0 -59
  598. package/skills/i3-ui-prototype/scripts/native-tool-name.cjs +0 -5
  599. package/skills/i3-ui-prototype/scripts/native-tool-result.cjs +0 -14
  600. package/skills/i3-ui-prototype/scripts/optional-skill-install.cjs +0 -203
  601. package/skills/i3-ui-prototype/scripts/project-registry.cjs +0 -126
  602. package/skills/i3-ui-prototype/scripts/prototype-dependencies.cjs +0 -103
  603. package/skills/i3-ui-prototype/scripts/prototype-hooks.cjs +0 -94
  604. package/skills/i3-ui-prototype/scripts/prototype-lib.cjs +0 -277
  605. package/skills/i3-ui-prototype/scripts/prototype-locations.cjs +0 -69
  606. package/skills/i3-ui-prototype/scripts/ptc-callbacks.cjs +0 -131
  607. package/skills/i3-ui-prototype/scripts/sync-template.cjs +0 -19
  608. package/skills/i3-ui-prototype/scripts/template-adapters.cjs +0 -89
  609. package/skills/i3-ui-prototype/scripts/template-contract.cjs +0 -407
  610. package/skills/i3-ui-prototype/scripts/template-inventory.cjs +0 -78
  611. package/skills/i3-ui-prototype/scripts/validate-result.cjs +0 -117
@@ -1,157 +0,0 @@
1
- import { can } from "../shared/policy.js";
2
- import { allowedReason, actionLabels, captureVersion, releaseChecks, signature, versionOf, canReadRelease, releaseRows, terminalStates } from "./model.js";
3
- export const commandKey = (c) => JSON.stringify([c.action, c.note.trim(), !!c.checked, c.input || null, c.outcome || 'pass']);
4
- export function applyRelease(t, id, a, c) {
5
- const r = t.releases?.find(r => r.id === id);
6
- if (!r || !canReadRelease(t, a))
7
- throw Error('记录不存在或没有查看权限。');
8
- const old = t.releases?.flatMap(x => x.receipts.map(receipt => ({ release: x, receipt }))).find(x => x.receipt.id === c.id);
9
- if (old) {
10
- if (old.release.id !== id || old.receipt.fingerprint !== commandKey(c))
11
- throw Error('同一提交编号不能用于不同内容,请查询原结果。');
12
- return r;
13
- }
14
- if (r.recordVersion !== c.expected)
15
- throw Error('发布单版本已被更新,输入已保留;请核对当前版本再提交。');
16
- const reason = allowedReason(t, r, a, c.action);
17
- if (reason)
18
- throw Error(reason);
19
- if (['approve', 'return', 'pause', 'resume', 'retry', 'rollback', 'stop'].includes(c.action) && (!c.note.trim() || c.note.length > 2000))
20
- throw Error('请填写 1–2000 字的操作说明。');
21
- if (c.action === 'approve' && !c.checked)
22
- throw Error('请勾选确认已核对本版证据、环境和恢复方案。');
23
- const v = versionOf(r), at = new Date().toISOString(), outcome = c.outcome || 'pass';
24
- let detail = c.note.trim() || actionLabels[c.action];
25
- switch (c.action) {
26
- case 'edit': {
27
- if (!c.input)
28
- throw Error('缺少修订内容。');
29
- if (!can(a, 'release:edit', t.tenantId, r.pbcId, c.input.environment))
30
- throw Error('没有新目标环境的编辑权限。');
31
- if (releaseRows(t).some(x => x.id !== r.id && !terminalStates.includes(x.state) && versionOf(x).environment === c.input.environment))
32
- throw Error('新环境已有未结束的发布单。');
33
- r.versions.push(captureVersion(t, a, c.input, v.number + 1));
34
- r.approval = undefined;
35
- r.state = 'draft';
36
- detail = '保存修订版;原检查和授权失效,历史保留。';
37
- break;
38
- }
39
- case 'check':
40
- v.preflight = { signature: signature(v), at, by: a.name, checks: releaseChecks(t, r) };
41
- detail = '发布前检查:' + v.preflight.checks.filter(c => !['pass', 'na'].includes(c.status)).length + ' 项材料待补齐。';
42
- break;
43
- case 'submit':
44
- r.state = 'pending';
45
- detail = '提交本版证据,等待人工授权。';
46
- break;
47
- case 'approve':
48
- r.approval = { actorId: a.id, actor: a.name, at, note: c.note.trim(), version: v.number, signature: signature(v) };
49
- r.state = 'approved';
50
- break;
51
- case 'return':
52
- r.state = 'returned';
53
- r.approval = undefined;
54
- break;
55
- case 'start':
56
- r.state = 'deploying';
57
- r.startedAt = at;
58
- r.executionEnvironment = v.environment;
59
- detail = '启动模拟部署;当前新增版本流量仍为 0%。';
60
- break;
61
- case 'pause':
62
- r.previousState = r.state;
63
- r.state = 'paused';
64
- break;
65
- case 'resume':
66
- r.state = r.previousState;
67
- r.previousState = undefined;
68
- break;
69
- case 'retry':
70
- r.retries++;
71
- r.state = r.failedStage;
72
- r.failedStage = undefined;
73
- detail += '(第 ' + r.retries + '/2 次重试,仅重试失败步骤)';
74
- break;
75
- case 'rollback':
76
- r.state = 'rollingBack';
77
- detail += ';目标 ' + v.materials.rollback.version + ',数据库状态需单独核查。';
78
- break;
79
- case 'stop':
80
- r.state = 'stopped';
81
- r.traffic = 0;
82
- r.finishedAt = at;
83
- detail += ';本次版本已撤流,数据库状态未自动还原。';
84
- break;
85
- case 'advance': {
86
- if (outcome === 'fail') {
87
- r.failedStage = r.state;
88
- r.state = 'failed';
89
- detail = '模拟步骤失败;已完成步骤与当前流量保留,请检查后有限重试或恢复。';
90
- break;
91
- }
92
- if (r.state === 'deploying') {
93
- r.state = 'canary';
94
- r.traffic = v.traffic;
95
- detail = '部署成功,人工授权覆盖首次灰度;本次版本接入 ' + v.traffic + '% 流量。';
96
- }
97
- else if (r.state === 'canary') {
98
- const errorRate = 0.2, latency = 420, pass = errorRate <= v.errorLimit && latency <= v.latencyLimit;
99
- r.observation = { at, errorRate, latency, pass };
100
- r.state = pass ? 'observing' : 'failed';
101
- if (!pass)
102
- r.failedStage = 'canary';
103
- detail = '灰度观测(模拟):错误率 ' + errorRate + '%,P95 ' + latency + 'ms;' + (pass ? '满足本版阈值,可继续全量' : '不满足阈值,禁止全量') + '。';
104
- }
105
- else if (r.state === 'observing') {
106
- if (!r.observation?.pass)
107
- throw Error('尚无合格的本次灰度观测,禁止全量。');
108
- r.state = 'succeeded';
109
- r.traffic = 100;
110
- r.finishedAt = at;
111
- detail = '本次版本已全量(模拟);运行验收另行处理。';
112
- }
113
- else {
114
- r.state = 'rolledBack';
115
- r.traffic = 0;
116
- r.finishedAt = at;
117
- detail = '应用已回滚至 ' + v.materials.rollback.version + '(模拟),本次版本流量 0%;数据库未自动还原,需按迁移方案核查。';
118
- }
119
- break;
120
- }
121
- case 'verify':
122
- detail = '已查询原请求 ' + r.unconfirmed + ';回执已落库,未重复执行。';
123
- r.unconfirmed = undefined;
124
- break;
125
- case 'delete':
126
- r.isDeleted = true;
127
- detail = '逻辑删除未提交草稿。';
128
- break;
129
- }
130
- r.reason = detail;
131
- r.updatedBy = a.name;
132
- r.updatedAt = at;
133
- r.recordVersion++;
134
- r.receipts.push({ id: c.id, action: c.action, fingerprint: commandKey(c), actorId: a.id, actor: a.name, at, note: c.note, version: versionOf(r).number, state: r.state });
135
- r.events.push({ id: c.id, at, actor: a.name, action: actionLabels[c.action], detail, version: versionOf(r).number, traffic: r.traffic });
136
- if (c.unknown)
137
- r.unconfirmed = c.id;
138
- const human = t.stages.find(s => t.binding.flow.body.nodes.find(n => n.id === s.nodeId)?.gate === 'production'), publish = t.stages.find(s => t.binding.flow.body.nodes.find(n => n.id === s.nodeId)?.kind === 'publish');
139
- if (v.environment === 'production') {
140
- if (human) {
141
- human.state = r.approval ? 'done' : 'active';
142
- human.finishedAt = r.approval?.at;
143
- human.detail = r.approval ? r.approval.actor + ' 授权发布单 v' + r.approval.version : '本发布版尚待人工授权';
144
- }
145
- if (r.startedAt && publish) {
146
- publish.state = r.state === 'succeeded' ? 'done' : ['failed', 'rolledBack', 'stopped'].includes(r.state) ? 'failed' : 'active';
147
- publish.startedAt = r.startedAt;
148
- publish.finishedAt = r.finishedAt;
149
- publish.attempts = r.receipts.filter(x => ['start', 'retry'].includes(x.action)).length;
150
- publish.detail = detail;
151
- t.currentId = publish.nodeId;
152
- }
153
- }
154
- if (r.startedAt)
155
- t.reason = detail;
156
- return r;
157
- }
@@ -1,136 +0,0 @@
1
- import { can, metadata } from "../shared/policy.js";
2
- import { clone } from "../tasks/domain.js";
3
- import { captureQuality, reviewsForTask, refsOf } from "../reviews/model.js";
4
- export const environments = [{ value: 'staging', label: '预发布环境' }, { value: 'production', label: '生产环境' }];
5
- export const releaseLabels = { draft: '发布草稿', pending: '待人工授权', returned: '已退回', approved: '已授权 · 待执行', deploying: '部署中', canary: '灰度中', observing: '待全量', succeeded: '发布成功', failed: '发布失败', paused: '已暂停', rollingBack: '回滚中', rolledBack: '已回滚', stopped: '已停止' };
6
- export const releaseColors = { draft: 'default', pending: 'orange', returned: 'orange', approved: 'cyan', deploying: 'blue', canary: 'blue', observing: 'cyan', succeeded: 'green', failed: 'red', paused: 'default', rollingBack: 'orange', rolledBack: 'default', stopped: 'default' };
7
- export const versionOf = (r) => r.versions.at(-1);
8
- export const releaseRows = (t) => t.releases?.filter(r => !r.isDeleted) || [];
9
- export const releaseNeedsAction = (r) => !!r.unconfirmed || !terminalStates.includes(r.state);
10
- export const activeRelease = (t) => releaseRows(t).filter(releaseNeedsAction).sort((a, b) => Number(!!b.unconfirmed) - Number(!!a.unconfirmed) || b.updatedAt.localeCompare(a.updatedAt))[0];
11
- export const currentRelease = (t) => activeRelease(t) || releaseRows(t).at(-1);
12
- export const hasPendingRelease = (t) => !!activeRelease(t) || !releaseRows(t).some(r => versionOf(r).environment === 'production' && terminalStates.includes(r.state));
13
- export const environmentLabel = (id) => environments.find(e => e.value === id)?.label || id;
14
- export const signature = (v) => JSON.stringify([v.number, v.sourceKey, v.version, v.environment, v.materials?.digest, v.config, v.description, v.traffic, v.errorLimit, v.latencyLimit, v.rollbackPlan, v.materials?.rollback]);
15
- export const sourceKey = (t) => JSON.stringify([t.id, t.binding.spec.number, t.binding.spec.source.version, t.binding.flowId, t.binding.flow.number, t.reworks, t.artifacts.filter(a => a.kind !== 'review').map(a => [a.id, a.versions.at(-1)?.number]), reviewsForTask(t).find(r => r.id === captureQuality(t)?.id)?.decision?.requestId || 'machine']);
16
- export function qualityReason(t) {
17
- if (t.isDeleted)
18
- return '来源任务已删除。';
19
- if (t.status !== 'ready' || t.pendingDesignReview)
20
- return '来源尚未完成交付质量检查,请先处理任务。';
21
- const current = captureQuality(t);
22
- if (!current || current.checks.some(c => c.required && c.status !== 'pass'))
23
- return '本轮质量检查或独立验证尚未通过。';
24
- const review = reviewsForTask(t).find(r => r.id === current.id);
25
- if (current.humanRequired && review?.decision?.action !== 'confirm')
26
- return '本轮质量尚待人工确认。';
27
- return '';
28
- }
29
- export function validateInput(input) {
30
- if (!input.name.trim() || input.name.length > 80)
31
- throw Error('请填写 1–80 字的发布名称。');
32
- if (!/^[0-9]+\.[0-9]+\.[0-9]+(?:-[a-zA-Z0-9.]+)?$/.test(input.version))
33
- throw Error('版本号请使用 1.0.0 或 1.0.0-rc.1 格式。');
34
- if (!environments.some(e => e.value === input.environment))
35
- throw Error('请选择有效目标环境。');
36
- if (!input.config.trim() || input.config.length > 100)
37
- throw Error('请填写 1–100 字的配置快照标识。');
38
- if (!Number.isFinite(input.traffic) || input.traffic < 1 || input.traffic > 50)
39
- throw Error('首次灰度比例为 1–50%。');
40
- if (!Number.isFinite(input.errorLimit) || input.errorLimit <= 0 || input.errorLimit > 100 || !Number.isFinite(input.latencyLimit) || input.latencyLimit <= 0)
41
- throw Error('请填写有效的错误率和延迟阈值。');
42
- if (input.description.length > 2000 || input.rollbackPlan.length > 2000)
43
- throw Error('发布说明与回退方案分别最多 2000 字。');
44
- }
45
- export const canReadRelease = (t, a) => !t.isDeleted && can(a, 'task:view', t.tenantId, t.binding.pbcId) && can(a, 'artifact:view', t.tenantId, t.binding.pbcId);
46
- export function captureVersion(t, actor, input, number) {
47
- validateInput(input);
48
- return { ...clone(input), name: input.name.trim(), number, at: new Date().toISOString(), by: actor.name, sourceKey: sourceKey(t), sourceCode: t.code, specVersion: t.binding.spec.number, flowName: t.binding.flow.body.name, flowVersion: t.binding.flow.number, refs: refsOf(t), materials: t.releaseMaterials?.sourceKey === sourceKey(t) ? clone(t.releaseMaterials) : undefined };
49
- }
50
- export const terminalStates = ['succeeded', 'rolledBack', 'stopped'];
51
- export function createRelease(t, actor, input, id) {
52
- if (!canReadRelease(t, actor) || !can(actor, 'release:edit', t.tenantId, t.binding.pbcId, input.environment))
53
- throw Error('没有此任务或目标环境的发布创建权限。');
54
- const fingerprint = JSON.stringify(input), old = t.releases?.find(r => r.id === id);
55
- if (old) {
56
- if (old.receipts[0]?.fingerprint !== fingerprint || old.isDeleted)
57
- throw Error('同一创建编号不能用于不同内容。');
58
- return old;
59
- }
60
- const reason = qualityReason(t);
61
- if (reason)
62
- throw Error(reason);
63
- if (releaseRows(t).some(r => versionOf(r).environment === input.environment && releaseNeedsAction(r)))
64
- throw Error('此任务在目标环境已有未结束的发布单,请继续原发布单。');
65
- const v = captureVersion(t, actor, input, 1), at = v.at;
66
- const r = { ...metadata(actor, at, t.tenantId), id, code: 'REL-' + id.slice(0, 8).toUpperCase(), taskId: t.id, pbcId: t.binding.pbcId, state: 'draft', versions: [v], traffic: 0, retries: 0, reason: '准备发布材料,尚未提交人工授权。', receipts: [{ id, action: 'create', fingerprint, actorId: actor.id, actor: actor.name, at, note: '创建草稿', version: 1, state: 'draft' }], events: [{ id, at, actor: actor.name, action: '创建草稿', detail: '固定来源版本;尚未执行发布。', version: 1, traffic: 0 }] };
67
- (t.releases ||= []).push(r);
68
- return r;
69
- }
70
- export const permissionFor = { edit: 'release:edit', check: 'release:edit', submit: 'release:submit', approve: 'release:approve', return: 'release:approve', start: 'release:execute', advance: 'release:execute', pause: 'release:pause', resume: 'release:execute', retry: 'release:execute', rollback: 'release:rollback', stop: 'release:rollback', verify: 'task:view', delete: 'release:delete' };
71
- export const actionLabels = { edit: '修改发布单', check: '检查发布材料', submit: '提交审核', approve: '授权本次发布', return: '退回修改', start: '开始部署', advance: '推进模拟事件', pause: '暂停发布', resume: '恢复发布', retry: '重试失败步骤', rollback: '回滚至稳定版本', stop: '停止并撤流', verify: '查询原请求回执', delete: '删除草稿' };
72
- export const releaseUrl = (r, execution = false) => '/releases/' + r.taskId + '/' + r.id + (execution ? '/execution' : '');
73
- export function releaseChecks(t, r) {
74
- const v = versionOf(r), m = v.materials;
75
- const check = (id, name, ok, detail) => ({ id, name, status: ok ? 'pass' : 'missing', detail });
76
- return [check('source', '来源版本', v.sourceKey === sourceKey(t) && !qualityReason(t), v.sourceKey === sourceKey(t) ? qualityReason(t) || '当前来源与绑定版本一致' : '来源版本已变化,请修订发布单并重新检查。'),
77
- check('artifact', '提交与制品', !!m?.commit && !!m?.digest, m ? m.commit + ' / ' + m.digest : '缺少独立发布材料;历史质量汇总不代表已构建制品。'),
78
- ...['merge', 'build', 'functional', 'contract', 'eval', 'security', 'migration'].map((id, i) => { const c = m?.checks.find(c => c.id === id); return c ? clone(c) : { id, name: ['合并记录', '构建', '功能测试', '接口契约', 'AI 评估', '安全检查', '迁移兼容性'][i], status: 'missing', detail: '尚无此分项证据。' }; }),
79
- check('config', '配置快照', !!m && m.config === v.config, m?.config === v.config ? '配置已绑定本次材料' : '材料配置与发布配置不一致,须补齐新配置的检查证据。'),
80
- check('plan', '发布与回退方案', !!v.description.trim() && !!v.rollbackPlan.trim(), v.description.trim() && v.rollbackPlan.trim() ? '发布说明与回退方案已填写' : '请填写发布说明与回退方案。'),
81
- check('rollback-target', '恢复路径', !m?.rollback || m.rollback.environment === v.environment, m?.rollback ? '可回滚 ' + m.rollback.version + '(' + environmentLabel(m.rollback.environment) + ');不承诺数据库自动还原。' : '首次发布无稳定版本;失败时停止并撤流,数据另行恢复。')];
82
- }
83
- export function allowedReason(t, r, a, action) {
84
- if (!canReadRelease(t, a) || r.isDeleted)
85
- return '没有任务与产物查看权限,或记录已删除。';
86
- const v = versionOf(r), permission = (['advance', 'resume', 'retry'].includes(action) && (r.state === 'rollingBack' || r.previousState === 'rollingBack' || r.failedStage === 'rollingBack')) ? 'release:rollback' : permissionFor[action];
87
- if (!can(a, permission, t.tenantId, r.pbcId, v.environment))
88
- return '没有此 PBC / 目标环境的操作权限,请在权限管理配置。';
89
- if (action === 'verify')
90
- return r.unconfirmed ? '' : '当前没有待查询的回执。';
91
- if (r.unconfirmed)
92
- return '上次提交响应不明,请先查询原请求回执。';
93
- if (action === 'delete')
94
- return r.state === 'draft' && r.receipts.every(x => ['create', 'edit', 'check'].includes(x.action)) && !r.startedAt ? '' : '只可删除未提交、无授权或执行历史的发布草稿。';
95
- if (action === 'edit')
96
- return !r.startedAt && ['draft', 'returned', 'pending', 'approved'].includes(r.state) ? '' : '执行开始后版本不能修改,请创建后续发布单。';
97
- if (action === 'check')
98
- return ['draft', 'returned'].includes(r.state) ? '' : '请先修订为草稿,再重新检查。';
99
- if (action === 'return')
100
- return r.state === 'pending' ? '' : '当前发布单不在待审核状态。';
101
- if (action === 'pause')
102
- return ['deploying', 'canary', 'observing', 'rollingBack'].includes(r.state) ? '' : '当前没有可暂停的执行步骤。';
103
- if (action === 'rollback')
104
- return r.traffic > 0 && ['canary', 'observing', 'succeeded', 'failed', 'paused'].includes(r.state) && v.materials?.rollback?.environment === v.environment ? '' : '尚无可用的稳定版本回滚目标;首发请停止并撤流。';
105
- if (action === 'stop')
106
- return r.startedAt && !['rolledBack', 'stopped'].includes(r.state) ? '' : '当前没有可停止的发布。';
107
- if (action === 'resume' && r.state !== 'paused')
108
- return '当前发布未暂停。';
109
- if (action === 'retry' && (r.state !== 'failed' || !r.failedStage))
110
- return '当前没有失败步骤。';
111
- if (action === 'retry' && r.retries >= 2)
112
- return '已达到本发布单的 2 次重试次数,请停止或人工恢复。';
113
- if (action === 'advance' && !['deploying', 'canary', 'observing', 'rollingBack'].includes(r.state))
114
- return '当前没有可推进的步骤。';
115
- const recovery = r.state === 'rollingBack' || (['retry', 'resume'].includes(action) && (r.failedStage === 'rollingBack' || r.previousState === 'rollingBack'));
116
- if (recovery)
117
- return '';
118
- if (action === 'start' && r.state !== 'approved')
119
- return '本版本尚未获得人工授权,不能执行发布。';
120
- if (action === 'submit' && !['draft', 'returned'].includes(r.state))
121
- return '当前状态不能提交审核。';
122
- if (action === 'approve' && r.state !== 'pending')
123
- return '本版本不在待人工授权状态。';
124
- if (v.sourceKey !== sourceKey(t) || qualityReason(t))
125
- return '来源或质量版本已经变化,请重新检查并提交发布。';
126
- const failures = releaseChecks(t, r).filter(c => !['pass', 'na'].includes(c.status));
127
- if (failures.length)
128
- return '发布材料或证据尚未齐备:' + failures.map(c => c.name).join('、');
129
- if (!v.preflight || v.preflight.signature !== signature(v))
130
- return '请先完成本版本的发布前检查。';
131
- if (['start', 'advance', 'resume', 'retry'].includes(action) && (!r.approval || r.approval.signature !== signature(v)))
132
- return '人工授权已失效,请重新核对并授权本版本。';
133
- return '';
134
- }
135
- export function taskReleaseLabel(t, a) { const r = currentRelease(t); return canReadRelease(t, a) && r ? (versionOf(r).environment === 'production' ? '' : environmentLabel(versionOf(r).environment) + ' · ') + (r.unconfirmed ? '结果待核实' : releaseLabels[r.state]) : ''; }
136
- export function releaseSummary(r) { return r.unconfirmed ? '本次提交结果尚未核实,请查询原请求回执;核实前保留待办,不重复执行。' : environmentLabel(versionOf(r).environment) + ' · ' + r.reason; }
@@ -1,76 +0,0 @@
1
- import { computed, ref } from '../../runtime/state.js';
2
- import { defineStore } from "../../runtime/state.js";
3
- import { useSession } from "../shared/session.js";
4
- import { usePbcs } from "../pbc/store.js";
5
- import { metadata } from "../shared/policy.js";
6
- import { taskRecords, taskReadError, commitTaskChanges, seedTasks } from "../tasks/registry.js";
7
- import { clone, taskEvent } from "../tasks/domain.js";
8
- import { applyRelease } from "./commands.js";
9
- import { allowedReason, canReadRelease, createRelease, sourceKey, qualityReason, releaseRows } from "./model.js";
10
- export const useReleases = defineStore('releases', () => {
11
- const session = useSession(), pbcs = usePbcs(), scene = ref('normal'), response = ref('success');
12
- const tasks = computed(() => taskRecords.value.filter(t => canReadRelease(t, session.actor)));
13
- const rows = computed(() => tasks.value.flatMap(task => releaseRows(task).map(release => ({ id: release.id, task, release, project: task.binding.project, recordVersion: release.recordVersion }))).sort((a, b) => b.release.updatedAt.localeCompare(a.release.updatedAt)));
14
- const find = (id) => rows.value.find(r => r.id === id);
15
- const pbcReason = (t) => { const p = pbcs.catalog.find(p => p.id === t.binding.pbcId); return !p || p.isDeleted || p.state !== 'active' ? 'PBC 不存在或已归档,请先处理 PBC 状态。' : ''; };
16
- const sourceReason = (t) => pbcReason(t) || qualityReason(t);
17
- function reason(row, action) { return session.state !== 'active' ? '登录状态已失效,请重新登录。' : (!['rollback', 'stop', 'pause', 'verify', 'delete'].includes(action) ? pbcReason(row.task) : '') || allowedReason(row.task, row.release, session.actor, action); }
18
- function current(id) { const t = tasks.value.find(t => t.id === id); if (!t)
19
- throw Error('任务不存在或无权访问。'); return clone(t); }
20
- function persist(t, expected, action) { t.recordVersion++; t.updatedBy = session.actor.name; t.updatedAt = new Date().toISOString(); taskEvent(t, session.actor.name, action, '发布单、版本证据及操作回执已同步(模拟)。'); commitTaskChanges([t], [{ id: t.id, version: expected }]); }
21
- function create(taskId, input, id, expected) { session.require('release:edit', undefined, undefined, input.environment); const t = current(taskId); if (t.recordVersion !== expected && !t.releases?.some(r => r.id === id))
22
- throw Error('来源任务已更新,输入保留,请核对当前版本。'); const reason = sourceReason(t); if (reason)
23
- throw Error(reason); session.writeCheck(); const prior = t.releases?.find(r => r.id === id), mode = response.value; response.value = 'success'; if (mode === 'failure' && !prior)
24
- throw Error('创建提交失败,尚未保存;输入已保留。'); const r = createRelease(t, session.actor, input, id); if (!prior) {
25
- if (mode === 'unknown')
26
- r.unconfirmed = id;
27
- persist(t, t.recordVersion, '创建发布草稿');
28
- } return r; }
29
- function apply(taskId, id, command) { session.require('task:view'); const t = current(taskId), r = t.releases?.find(r => r.id === id); if (!r)
30
- throw Error('发布单不存在。'); const replay = r.receipts.some(x => x.id === command.id); if (!replay) {
31
- const row = find(id);
32
- const why = reason(row, command.action);
33
- if (why)
34
- throw Error(why);
35
- } session.writeCheck(); const mode = response.value; response.value = 'success'; if (mode === 'failure' && !replay)
36
- throw Error('提交失败(模拟服务不可用),未执行本次操作;输入保留。'); const result = applyRelease(t, id, session.actor, { ...command, unknown: mode === 'unknown' && command.action !== 'verify' }); if (!replay)
37
- persist(t, t.recordVersion, '发布:' + command.action); return result; }
38
- function checkDelete(target) { const row = find(target.id); if (!row)
39
- throw Error('记录不存在或无权访问。'); if (row.recordVersion !== target.recordVersion)
40
- throw Error('记录已更新,请重新选择。'); const why = reason(row, 'delete'); if (why)
41
- throw Error(why); }
42
- function removeMany(targets) { targets.forEach(checkDelete); session.writeCheck(); const changed = new Map(), expected = []; for (const target of targets) {
43
- const row = find(target.id);
44
- let t = changed.get(row.task.id);
45
- if (!t) {
46
- t = clone(row.task);
47
- changed.set(t.id, t);
48
- expected.push({ id: t.id, version: t.recordVersion });
49
- }
50
- applyRelease(t, target.id, session.actor, { id: crypto.randomUUID(), action: 'delete', expected: target.recordVersion, note: '删除未提交草稿' });
51
- } for (const t of changed.values()) {
52
- t.recordVersion++;
53
- t.updatedBy = session.actor.name;
54
- t.updatedAt = new Date().toISOString();
55
- taskEvent(t, session.actor.name, '批量删除发布草稿', '仅删除本次选择的未提交草稿;历史记录保留。');
56
- } commitTaskChanges([...changed.values()], expected); }
57
- function addExamples() { session.require('task:create', 'heating', 'pbc-0'); session.require('task:operate', 'heating', 'pbc-0'); session.writeCheck(); const changes = []; for (let i = 0; i < 2; i++) {
58
- const id = 'release-example-' + i;
59
- if (taskRecords.value.some(t => t.id === id))
60
- continue;
61
- const t = clone(seedTasks()[6]);
62
- t.id = id;
63
- t.code = 'DEL-RELEASE-00' + (i + 1);
64
- t.name = i ? '智能分诊 · 稳定版本升级样例' : '智能分诊 · 首次发布样例';
65
- Object.assign(t, metadata(session.actor, new Date().toISOString(), 'heating'));
66
- t.owner = session.actor.name;
67
- t.note = 'PT-06a 独立模拟样例;材料与观测均为预置,不代表真实 CI 或发布。';
68
- for (const a of t.artifacts)
69
- for (const v of a.versions)
70
- v.taskId = id;
71
- t.releaseMaterials = { sourceKey: sourceKey(t), commit: 'demo-commit-' + i, digest: 'sha256:demo-artifact-' + i, config: 'config-v1', by: '发布材料演示器', at: new Date().toISOString(), migration: i ? 'expand-contract' : 'none', checks: ['merge', 'build', 'functional', 'contract', 'eval', 'security', 'migration'].map((id, j) => ({ id, name: ['合并记录', '构建', '功能测试', '接口契约', 'AI 评估', '安全检查', '迁移兼容性'][j], status: 'pass', detail: '预置模拟证据:' + (id === 'migration' ? (i ? '采用兼容扩展迁移;应用回滚后数据库仍需核查。' : '本次无数据库变更。') : '本版检查通过(未连接真实 CI)。') })), rollback: i ? { version: '0.9.0', digest: 'sha256:demo-stable', config: 'config-stable', environment: 'production' } : undefined };
72
- changes.push(t);
73
- } if (changes.length)
74
- commitTaskChanges(changes, changes.map(t => ({ id: t.id }))); return changes.length; }
75
- return { session, tasks, rows, find, reason, sourceReason, create, apply, removeMany, checkDelete, addExamples, scene, response, notice: taskReadError };
76
- });
@@ -1,3 +0,0 @@
1
- <!-- 来源:src/reviews/ReviewDetail.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Result" data-if="(!row)" status="403" title="评审记录不存在或无权访问"><template data-slot="extra"><template data-component="Button" data-on-click="(router.push('/reviews'))">返回评审列表</template></template></template><template data-else=""><div class="page-heading"><div><template data-component="Button" type="link" class="agent-back" data-on-click="(router.push('/reviews'))">← 返回评审列表</template><div class="agent-title"><h1>{{ (row.review.title) }}</h1><template data-component="Tag" data-bind-color="(stateColors[row.status])">{{ (stateLabels[row.status]) }}</template></div><p>{{ (row.task.name) }} · {{ (row.review.code) }}</p></div><template data-component="Space" wrap=""><template data-component="Button" data-on-click="(router.push('/tasks/' + row.task.id))">交付任务</template><template data-component="Button" data-bind-disabled="(!store.session.can('pbc:view', row.task.tenantId, row.task.binding.pbcId))" data-on-click="(router.push('/pbcs/' + row.task.binding.pbcId + '/workspace'))">PBC 工作区</template></template></div><template data-component="Alert" data-if="(error)" type="error" show-icon="" data-bind-title="(error)" class="page-alert"></template><template data-component="Alert" data-if="(row.status === 'superseded')" type="warning" show-icon="" title="此记录依据的版本已经更新" description="历史证据保留,继续处理请进入当前评审。" class="page-alert"><template data-slot="action"><template data-component="Button" data-if="(current)" data-on-click="(router.push(reviewUrl(row.task.id, current.id)))">打开当前评审</template></template></template><template data-component="Alert" data-if="(row.status === 'automatic')" type="success" show-icon="" title="当前质量点按已登记策略由机器检查通过" description="没有增加额外人工批准。生产发布仍需人工授权,当前尚未发布。" class="page-alert"></template><div class="review-detail-grid"><section class="agent-panel"><template data-component="Tabs" data-model-active-key="(tab)" data-bind-items="([{ key: 'evidence', label: '检查与版本证据' }, { key: 'history', label: '处理记录' }, { key: 'metadata', label: '基础信息' }])"></template><template data-component="ReviewEvidence" data-if="(tab === 'evidence')" data-bind-row="(row)"></template><template data-else-if="(tab === 'history')"><h2>本次处理结果</h2><template data-if="(row.review.decision)"><template data-component="Tag" data-bind-color="(stateColors[row.status])">{{ (stateLabels[row.status]) }}</template><p>{{ (row.review.decision.actor) }} · {{ (formatDate(row.review.decision.at)) }}</p><p class="review-text">{{ (row.review.decision.note) }}</p><p data-if="(row.review.decision.impact)" class="review-text">影响说明:{{ (row.review.decision.impact) }}</p><template data-component="Button" data-if="(row.review.decision.nextReviewId)" type="primary" data-on-click="(router.push(reviewUrl(row.task.id, row.review.decision.nextReviewId)))">查看新设计 v{{ (row.review.decision.newVersion) }}</template></template><p data-else="" class="muted">本记录尚无人工作出处理;不会用 Agent 的文字代替人工批准。</p><h3>同一任务的评审历史</h3><ol class="review-history"><li data-each="r in (store.rows.filter(r =&gt; r.task.id === row.task.id))" data-bind-key="(r.id)"><template data-component="Button" type="link" data-on-click="router.push(reviewUrl(r.task.id, r.review.id));
3
- tab = 'history';">{{ (r.review.code) }} · {{ (r.review.title) }}</template><template data-component="Tag" data-bind-color="(stateColors[r.status])">{{ (stateLabels[r.status]) }}</template><small>{{ (formatDate(r.review.updatedAt)) }} · {{ (r.review.decision?.actor || r.review.verifier) }}</small></li></ol><p class="muted">审批和验证历史只读保留,不适用删除。</p></template><template data-else=""><template data-component="RecordMetadata" data-bind-record="(row.review)"></template><p>所属 PBC:{{ (row.project) }} · {{ (tenantLabel(row.task.tenantId)) }}</p><p>实际处理人:{{ (row.review.decision?.actor || '尚未处理') }} · {{ (formatDate(row.review.decision?.at || '')) }}</p></template></section><aside class="review-aside"><section data-if="(!closed)" class="agent-panel quality-review-actions"><h2>处理当前评审</h2><div data-each="a in ['confirm', 'edit', 'replan']" data-bind-key="(a)"><template data-component="Tooltip" data-bind-title="(store.reason(row, a))"><span><template data-component="Button" block="" data-bind-type="(a === 'confirm' ? 'primary' : 'default')" data-bind-disabled="(!!store.reason(row, a))" data-on-click="(process(a))">{{ (names[a]) }}</template></span></template><small data-if="(store.reason(row, a))" class="muted">{{ (store.reason(row, a)) }}</small></div><p class="review-footnote">处理只作用于本记录的版本。质量确认完成后,仍须进入后续发布授权。</p></section><section class="agent-panel"><h2>本次评审依据</h2><dl class="task-trace"><dt>PBC</dt><dd>{{ (row.project) }}</dd><dt>交付任务</dt><dd>{{ (row.task.code) }}</dd><dt>来源规格</dt><dd>{{ (row.task.binding.spec.source.code) }} · 规格 v{{ (row.task.binding.spec.number) }}<br>{{ (row.task.binding.spec.confirmedBy) }} · {{ (formatDate(row.task.binding.spec.confirmedAt || '')) }}</dd><dt>流程版本</dt><dd>{{ (row.task.binding.flow.body.name) }} · v{{ (row.task.binding.flow.number) }}</dd><dt>独立验证者</dt><dd>{{ (row.review.verifier) }}</dd><dt>验证时间</dt><dd>{{ (formatDate(row.review.verificationAt || '')) }}</dd><dt>分级与适用确认点</dt><dd><template data-component="Tag">{{ (row.review.grade ? row.review.grade + ' 档(已登记样例)' : '任务未登记分级') }}</template><p>{{ (row.review.policyReason) }}</p></dd><dt>处理轮次</dt><dd>第 {{ (row.review.iteration + 1) }} 轮 · 当前已处理 {{ (row.task.reworks) }} / {{ (reviewBudget(row.task)) }} 次(原型上限)</dd></dl><template data-component="Button" data-bind-disabled="(!store.session.can('spec:view', row.task.tenantId))" data-on-click="(router.push('/intents/' + row.task.binding.intentId + '/spec'))">查看当前需求规格</template><p class="muted">当前规格可能有新版本;本记录始终引用上述绑定版本。</p></section><section data-if="(row.review.kind === 'design' &amp;&amp; ['checking', 'blocked'].includes(row.status))" class="agent-panel review-demo"><h2>模拟设计复核</h2><p>仅用于演示针对新设计版本的检查响应。</p><template data-component="Select" data-model-value="(outcome)" aria-label="设计复核演示结果" data-bind-options="([{ value: 'pass', label: '本次复核通过' }, { value: 'fail', label: '本次复核未通过' }])"></template><template data-component="Button" data-bind-disabled="(!store.session.can('task:operate', row.task.tenantId, row.task.binding.pbcId))" data-on-click="(validate)">接收一次模拟复核结果</template></section></aside></div></template>
@@ -1,26 +0,0 @@
1
- import { computed, ref, watch } from '../../runtime/state.js';
2
- import { useRoute, useRouter } from "../../runtime/router.js";
3
- import { Alert, Button, Result, Space, Tabs, Tag, Select, Tooltip } from "../../runtime/widgets.js";
4
- import { useReviews } from "./store.js";
5
- import { stateLabels, stateColors, reviewUrl, actionableReview, reviewBudget } from "./model.js";
6
- import { formatDate, tenantLabel } from "../shared/policy.js";
7
- import RecordMetadata from "../shared/RecordMetadata.js";
8
- import ReviewEvidence from "./ReviewEvidence.js";
9
- import { createComponent } from '../../runtime/dom.js';
10
- export default createComponent({ name: 'ReviewDetail', propKeys: [], template: new URL('./ReviewDetail.html', import.meta.url).href, setup(__props, __emit) {
11
- const store = useReviews(), route = useRoute(), router = useRouter(), tab = ref(String(route.query.tab || 'evidence')), error = ref(''), outcome = ref('pass');
12
- const row = computed(() => store.find(String(route.params.taskId), String(route.params.reviewId))), current = computed(() => row.value && actionableReview(row.value.task));
13
- watch(() => route.query.tab, value => tab.value = String(value || 'evidence'));
14
- const closed = computed(() => row.value && ['approved', 'edited', 'replanned', 'automatic', 'superseded'].includes(row.value.status));
15
- function process(action) { if (row.value)
16
- router.push(reviewUrl(row.value.task.id, row.value.review.id) + '/process?action=' + action); }
17
- function validate() { if (!row.value)
18
- return; error.value = ''; try {
19
- store.tasks.reviewValidation(row.value.task.id, row.value.task.recordVersion, row.value.review.id, outcome.value);
20
- }
21
- catch (e) {
22
- error.value = e.message;
23
- } }
24
- const names = { confirm: '确认', edit: '修改', replan: '重新规划' };
25
- return { computed, ref, watch, useRoute, useRouter, Alert, Button, Result, Space, Tabs, Tag, Select, Tooltip, useReviews, stateLabels, stateColors, reviewUrl, actionableReview, reviewBudget, formatDate, tenantLabel, RecordMetadata, ReviewEvidence, store, route, router, tab, error, outcome, row, current, closed, process, validate, names };
26
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/reviews/ReviewEvidence.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <section class="review-section"><div class="section-heading"><div><h2>检查结果</h2><p>查看汇总与独立验证;未提供的分项证据明确列出。</p></div><template data-component="Tag">绑定当前评审版本</template></div><div class="review-checks"><details data-each="c in (row.review.checks)" data-bind-key="(c.id)" data-bind-open="(c.status === 'fail')"><summary><template data-component="Tag" data-bind-color="(c.status === 'pass' ? 'green' : c.status === 'fail' ? 'red' : c.status === 'pending' ? 'blue' : 'default')">{{ ({ pass: '通过(模拟)', fail: '未通过', pending: '待验证', unavailable: '未提供' }[c.status]) }}</template><strong>{{ (c.name) }}</strong><span data-if="(c.required)" class="muted">本次必需</span></summary><pre>{{ (c.detail) }}</pre></details></div></section><section class="review-section"><div class="section-heading"><div><h2>评审发现</h2><p>每项问题保留检查项编号、严重度、位置和依据。</p></div><template data-component="Select" data-model-value="(dimension)" aria-label="评审发现维度" data-bind-options="([{ value: 'all', label: '全部维度' }, ...dimensions.map(d =&gt; ({ value: d.id, label: d.id + ' · ' + d.label }))])"></template></div><div class="review-dimensions"><button data-each="d in (dimensions)" data-bind-key="(d.id)" data-bind-aria-pressed="(dimension === d.id)" data-on-click="(dimension = dimension === d.id ? 'all' : d.id)"><strong>{{ (d.id) }} <span>{{ (d.label) }}</span></strong><small>{{ (row.review.findings.filter(f =&gt; f.dimension === d.id).length) }} 项登记发现</small></button></div><template data-component="Alert" class="page-alert" type="info" show-icon="" title="维度计数仅表示报告中登记的问题" description="未登记问题不等于该维度已经完成检查。ARC 包含数据结构、迁移安全、租户与审计字段及索引;本地样例没有真实数据库验证。"></template><article data-each="f in (findings)" data-bind-key="(f.id)" class="review-finding"><div><template data-component="Tag" color="red">{{ (f.severity === 'high' ? '严重' : f.severity === 'medium' ? '重要' : '建议') }}</template><span class="mono">{{ (f.id) }}</span><h3>{{ (f.title) }}</h3></div><pre>{{ (f.detail) }}</pre><template data-component="Button" type="link" data-on-click="(router.push('/tasks/' + row.task.id + '/artifacts/' + f.artifactId + '?version=' + f.version))">查看依据:{{ (row.task.artifacts.find(a =&gt; a.id === f.artifactId)?.name) }} v{{ (f.version) }}</template></article><p data-if="(!findings.length)" class="muted">{{ (dimension === 'all' ? '本报告没有登记具体发现,请同时核对上方必需检查。' : '该维度没有登记发现。') }}</p></section><section class="review-section"><div class="section-heading"><div><h2>依据产物与版本差异</h2><p>所有引用指向本次评审的固定版本。</p></div><template data-component="Select" data-model-value="(selected)" aria-label="选择评审依据产物" data-bind-options="(row.review.refs.map(r =&gt; ({ value: r.id, label: r.name + ' · v' + r.version })))" data-bind-placeholder="(refItem?.name)"></template></div><template data-component="Space" wrap="" class="review-ref-links"><template data-component="Button" data-each="r in (row.review.refs)" data-bind-key="(r.id)" size="small" data-on-click="(router.push(artifactUrl(r)))">{{ (r.name) }} v{{ (r.version) }}</template></template><template data-if="(version)"><h3>{{ (refItem?.name) }} · v{{ (version.number) }}</h3><pre class="review-document">{{ (version.content) }}</pre><details data-if="(previous)" class="review-diff"><summary>与 v{{ (previous.number) }} 对比 · 新增/移除内容</summary><pre data-each="(line,i) in (diff)" data-bind-key="(i)" class="task-diff-line" data-bind-class="(line.kind)">{{ (line.kind === 'added' ? '+ ' : '− ') }}{{ (line.text) }}</pre><p data-if="(!diff.length)">正文相同,版本与执行记录仍分别保留。</p></details></template><template data-component="Alert" data-else="" type="warning" show-icon="" title="该版本内容已不可访问,请核对来源,不可据此确认。"></template></section>
@@ -1,14 +0,0 @@
1
- import { computed, ref } from '../../runtime/state.js';
2
- import { Button, Select, Space, Tag, Alert } from "../../runtime/widgets.js";
3
- import { useRouter } from "../../runtime/router.js";
4
- import { dimensions, evidenceVersion } from "./model.js";
5
- import { createComponent } from '../../runtime/dom.js';
6
- export default createComponent({ name: 'ReviewEvidence', propKeys: ["row"], template: new URL('./ReviewEvidence.html', import.meta.url).href, setup(__props, __emit) {
7
- const props = __props, router = useRouter(), dimension = ref('all'), selected = ref('');
8
- const findings = computed(() => props.row.review.findings.filter(f => dimension.value === 'all' || f.dimension === dimension.value));
9
- const refItem = computed(() => props.row.review.refs.find(r => r.id === selected.value) || props.row.review.refs.find(r => r.kind === 'design') || props.row.review.refs[0]);
10
- const version = computed(() => refItem.value && evidenceVersion(props.row.task, refItem.value)), previous = computed(() => props.row.task.artifacts.find(a => a.id === refItem.value?.id)?.versions.find(v => v.number === (version.value?.number || 1) - 1));
11
- const diff = computed(() => { const old = previous.value?.content.split('\n') || [], current = version.value?.content.split('\n') || []; return [...old.filter(t => !current.includes(t)).map(text => ({ kind: 'removed', text })), ...current.filter(t => !old.includes(t)).map(text => ({ kind: 'added', text }))]; });
12
- const artifactUrl = (r) => '/tasks/' + props.row.task.id + '/artifacts/' + r.id + '?version=' + r.version;
13
- return { computed, ref, Button, Select, Space, Tag, Alert, useRouter, dimensions, evidenceVersion, props, router, dimension, selected, findings, refItem, version, previous, diff, artifactUrl };
14
- } });
@@ -1,2 +0,0 @@
1
- <!-- 来源:src/reviews/ReviewProcess.vue;HTML / 原生 DOM 绑定,不含 Vue 运行时。 -->
2
- <template data-component="Result" data-if="(!row)" status="403" title="评审记录不存在或无权访问"><template data-slot="extra"><template data-component="Button" data-on-click="(router.push('/reviews'))">返回评审列表</template></template></template><template data-else=""><div class="page-heading"><div><template data-component="Button" type="link" class="agent-back" data-on-click="(router.push(reviewUrl(row.task.id, row.review.id)))">← 返回评审证据</template><h1>{{ (result ? '处理结果' : names[action]) }}</h1><p>{{ (row.task.name) }} · {{ (row.review.code) }}</p></div><template data-component="Tag">本地交互原型</template></div><section data-if="(result)" class="agent-panel review-result"><template data-component="Result" status="success" data-bind-title="({ confirm: '本版本评审已确认', edit: '修改已保存,等待重新验证', replan: '规划意见已保存,等待重新验证' }[result.action])" data-bind-sub-title="(result.action === 'confirm' ? (row.review.kind === 'quality' ? '质量确认已记录。生产发布尚未授权,也尚未执行。' : '确认已写入原任务,可以继续后续实现与检查。') : '新设计尚未获得批准。复核与人工确认后,才继续生成代码和新的测试、验证证据。')"></template><dl class="task-trace"><dt>处理人 / 时间</dt><dd>{{ (result.actor) }} · {{ (formatDate(result.at)) }}</dd><dt>本次说明</dt><dd class="review-text">{{ (result.note) }}</dd><template data-if="(result.impact)"><dt>影响说明</dt><dd class="review-text">{{ (result.impact) }}</dd></template><dt>提交编号</dt><dd class="mono">{{ (result.requestId) }}</dd><dt>版本依据</dt><dd>{{ (row.review.refs.map(r =&gt; r.name + ' v' + r.version).join(' · ')) }}</dd></dl><template data-component="Space" wrap=""><template data-component="Button" data-if="(result.nextReviewId)" type="primary" data-on-click="(router.push(reviewUrl(row.task.id, result.nextReviewId)))">查看新设计 v{{ (result.newVersion) }} 的评审</template><template data-component="Button" data-bind-type="(result.nextReviewId ? 'default' : 'primary')" data-on-click="(router.push('/tasks/' + row.task.id))">返回交付任务</template><template data-component="Button" data-on-click="(router.push('/workbench'))">回到工作台</template><template data-component="Button" data-on-click="(router.push(reviewUrl(row.task.id, row.review.id) + '?tab=history'))">查看处理记录</template></template></section><div data-else="" class="review-process-grid"><section class="agent-panel"><template data-component="Alert" data-if="(unknown)" class="page-alert" type="warning" show-icon="" title="提交结果待核实" description="提交响应未能确认。请先查询同一提交编号的结果,避免重复处理。输入和编号已保留。"><template data-slot="action"><template data-component="Button" data-on-click="(verify)">核实本次提交</template></template></template><template data-component="Alert" data-if="(draftNotice)" class="page-alert" type="info" show-icon="" data-bind-title="(draftNotice)"></template><div data-if="(error)" id="review-errors" role="alert" tabindex="-1" class="review-error"><strong>未完成提交</strong><p>{{ (error) }}</p></div><template data-component="Alert" data-if="(reason &amp;&amp; !unknown)" type="warning" show-icon="" data-bind-title="(reason)" class="page-alert"></template><template data-component="Alert" data-if="(row.task.recordVersion !== expected &amp;&amp; !unknown)" type="warning" show-icon="" title="任务记录已有更新" description="已保留输入;请先核对最新证据,旧记录版本不能直接提交。" class="page-alert"><template data-slot="action"><template data-component="Button" data-bind-disabled="(!!reason)" data-on-click="(recheck)">载入当前记录并重新核对</template></template></template><form data-on-submit.prevent="(submit)"><div data-if="(action === 'edit')" class="review-field"><label for="review-content">修改后的设计内容 <span>*</span></label><p id="review-content-help" class="muted">只生成新的设计版本;原设计、代码、报告与验证证据均保留。</p><template data-component="Input.TextArea" id="review-content" data-model-value="(content)" aria-describedby="review-content-help" data-bind-rows="(14)" data-bind-maxlength="(20000)" show-count="" data-bind-disabled="(unknown)"></template></div><div data-if="(action === 'replan')" class="review-field"><label for="review-impact">调整范围与影响 <span>*</span></label><p class="muted">说明要调整的步骤、影响的产物和需要再次验证的内容。原任务绑定的需求规格与流程版本保持可追溯。</p><template data-component="Input.TextArea" id="review-impact" data-model-value="(impact)" data-bind-rows="(5)" data-bind-maxlength="(2000)" show-count="" data-bind-disabled="(unknown)" placeholder="例如:补充重复确认的幂等设计,重新实现派单逻辑并覆盖并发重试测试。"></template></div><div class="review-field"><label for="review-note">{{ (action === 'confirm' ? '确认说明' : action === 'edit' ? '本次修改原因' : '重新规划意见') }} <span>*</span></label><template data-component="Input.TextArea" id="review-note" data-model-value="(note)" data-bind-rows="(4)" data-bind-maxlength="(1000)" show-count="" data-bind-disabled="(unknown)" placeholder="请说明判断依据、处理原因或仍需关注的事项。"></template></div><div data-if="(action === 'confirm')" class="review-field"><template data-component="Checkbox" id="review-checked" data-model-checked="(checked)" data-bind-disabled="(unknown)">我已核对本记录引用的版本、检查结论及适用确认点。</template></div><p class="review-footnote">{{ (action === 'confirm' ? '确认只对本次引用的版本有效;不代替后续生产发布授权。' : '提交后形成新的设计与评审记录,重新验证及确认后才继续实现。') }} 输入暂存在此身份使用的本浏览器。</p><div class="review-submit"><template data-component="Button" data-on-click="(router.push(reviewUrl(row.task.id, row.review.id)))">返回并保留输入</template><template data-component="Button" type="primary" html-type="submit" data-bind-loading="(busy)" data-bind-disabled="(!!reason || unknown || row.task.recordVersion !== expected)">{{ (action === 'confirm' ? '提交确认' : action === 'edit' ? '保存为新设计版本' : '提交规划意见并生成设计建议') }}</template></div></form></section><aside class="agent-panel review-aside"><h2>本次处理对象</h2><p>{{ (row.review.title) }}</p><p>{{ (row.project) }}</p><dl class="task-trace"><dt>绑定需求与流程</dt><dd>{{ (row.task.binding.spec.source.code) }} · 规格 v{{ (row.task.binding.spec.number) }}<br>{{ (row.task.binding.flow.body.name) }} · v{{ (row.task.binding.flow.number) }}</dd><dt>引用产物</dt><dd><p data-each="r in (row.review.refs)" data-bind-key="(r.id)">{{ (r.name) }} · v{{ (r.version) }}</p></dd><dt>处理对象的记录版本</dt><dd>v{{ (expected) }}</dd><dt>提交编号</dt><dd class="mono">{{ (requestId) }}</dd></dl><template data-component="Button" data-on-click="(router.push(reviewUrl(row.task.id, row.review.id)))">重新阅读版本证据</template><p class="muted">返回证据再进入此页,输入会保留。</p></aside></div></template>
@@ -1,113 +0,0 @@
1
- import { computed, ref, watch, nextTick } from '../../runtime/state.js';
2
- import { useRoute, useRouter } from "../../runtime/router.js";
3
- import { Alert, Button, Checkbox, Input, Result, Space, Tag } from "../../runtime/widgets.js";
4
- import { useReviews } from "./store.js";
5
- import { reviewUrl } from "./model.js";
6
- import { latestArtifact } from "../tasks/domain.js";
7
- import { formatDate } from "../shared/policy.js";
8
- import { createComponent } from '../../runtime/dom.js';
9
- export default createComponent({ name: 'ReviewProcess', propKeys: [], template: new URL('./ReviewProcess.html', import.meta.url).href, setup(__props, __emit) {
10
- const store = useReviews(), route = useRoute(), router = useRouter();
11
- const row = computed(() => store.find(String(route.params.taskId), String(route.params.reviewId)));
12
- const action = computed(() => ['edit', 'replan'].includes(String(route.query.action)) ? route.query.action : 'confirm');
13
- const names = { confirm: '确认评审', edit: '修改设计', replan: '重新规划' };
14
- const note = ref(''), content = ref(''), impact = ref(''), checked = ref(false), requestId = ref(''), expected = ref(0), error = ref(''), draftNotice = ref(''), unknown = ref(false), busy = ref(false), receipt = ref(), loaded = ref(false);
15
- const draftKey = computed(() => ['i3-prototype-antdv-review-draft-v012', store.session.actor.id, route.params.taskId, route.params.reviewId, action.value].join(':'));
16
- const reason = computed(() => row.value ? store.reason(row.value, action.value) : '记录不可访问。');
17
- const result = computed(() => receipt.value || (!unknown.value ? row.value?.review.decision : undefined));
18
- function boot() {
19
- loaded.value = false;
20
- error.value = '';
21
- draftNotice.value = '';
22
- receipt.value = undefined;
23
- unknown.value = false;
24
- note.value = '';
25
- impact.value = '';
26
- checked.value = false;
27
- requestId.value = crypto.randomUUID();
28
- expected.value = row.value?.task.recordVersion || 0;
29
- content.value = row.value ? (latestArtifact(row.value.task, 'design')?.content || '设计建议(模拟)\n依据规格 v' + row.value.task.binding.spec.number + '\n' + row.value.task.binding.spec.content.requirements) : '';
30
- try {
31
- const raw = localStorage.getItem(draftKey.value);
32
- if (raw) {
33
- const d = JSON.parse(raw);
34
- if (typeof d.note === 'string' && typeof d.requestId === 'string' && Number.isInteger(d.expected)) {
35
- note.value = d.note;
36
- content.value = typeof d.content === 'string' ? d.content : content.value;
37
- impact.value = typeof d.impact === 'string' ? d.impact : '';
38
- checked.value = !!d.checked;
39
- requestId.value = d.requestId;
40
- expected.value = d.expected;
41
- unknown.value = !!d.unknown;
42
- draftNotice.value = '已恢复此身份在本浏览器保存的输入。提交前请重新核对版本。';
43
- }
44
- }
45
- }
46
- catch {
47
- draftNotice.value = '本浏览器无法读取先前输入,请重新填写。';
48
- }
49
- loaded.value = true;
50
- }
51
- watch(draftKey, boot, { immediate: true });
52
- watch([note, content, impact, checked, expected, unknown], () => { if (!loaded.value || result.value)
53
- return; try {
54
- localStorage.setItem(draftKey.value, JSON.stringify({ note: note.value, content: content.value, impact: impact.value, checked: checked.value, requestId: requestId.value, expected: expected.value, unknown: unknown.value }));
55
- }
56
- catch {
57
- draftNotice.value = '浏览器未能保存草稿;离开页面前请保留输入。';
58
- } }, { flush: 'sync' });
59
- async function fail(message, id) { error.value = message; await nextTick(); {
60
- const target = document.getElementById(id || 'review-errors');
61
- (target?.querySelector('input') || target)?.focus();
62
- } }
63
- function finish(value) { receipt.value = value; unknown.value = false; try {
64
- localStorage.removeItem(draftKey.value);
65
- }
66
- catch { /* The receipt remains in the task record. */ } }
67
- async function submit() {
68
- if (!row.value || busy.value || unknown.value)
69
- return;
70
- if (!note.value.trim())
71
- return fail('请填写处理说明。', 'review-note');
72
- if (action.value === 'confirm' && !checked.value)
73
- return fail('请先勾选并核对本次绑定的版本与证据。', 'review-checked');
74
- if (action.value === 'edit' && !content.value.trim())
75
- return fail('请填写修改后的设计内容。', 'review-content');
76
- if (action.value === 'replan' && !impact.value.trim())
77
- return fail('请填写重新规划的影响说明。', 'review-impact');
78
- error.value = '';
79
- busy.value = true;
80
- try {
81
- const response = store.tasks.review(row.value.task.id, expected.value, row.value.review.id, { action: action.value, note: note.value, content: action.value === 'edit' ? content.value : undefined, impact: action.value === 'replan' ? impact.value : undefined, checked: checked.value, requestId: requestId.value });
82
- if (response.unknown) {
83
- unknown.value = true;
84
- try {
85
- localStorage.setItem(draftKey.value, JSON.stringify({ note: note.value, content: content.value, impact: impact.value, checked: checked.value, requestId: requestId.value, expected: expected.value, unknown: true }));
86
- }
87
- catch { }
88
- }
89
- else
90
- finish(response.receipt);
91
- }
92
- catch (e) {
93
- await fail(e.message);
94
- }
95
- finally {
96
- busy.value = false;
97
- }
98
- }
99
- async function verify() { if (!row.value)
100
- return; try {
101
- const value = store.tasks.reviewReceipt(row.value.task.id, requestId.value);
102
- if (value)
103
- finish(value);
104
- else
105
- await fail('尚未查到此提交结果,保留输入与提交编号,稍后再次核实。');
106
- }
107
- catch (e) {
108
- await fail(e.message);
109
- } }
110
- function recheck() { if (!row.value)
111
- return; expected.value = row.value.task.recordVersion; checked.value = false; error.value = ''; draftNotice.value = '已载入当前记录版本,输入保留。请再次阅读证据后提交。'; }
112
- return { computed, ref, watch, nextTick, useRoute, useRouter, Alert, Button, Checkbox, Input, Result, Space, Tag, useReviews, reviewUrl, latestArtifact, formatDate, store, route, router, row, action, names, note, content, impact, checked, requestId, expected, error, draftNotice, unknown, busy, receipt, loaded, draftKey, reason, result, boot, fail, finish, submit, verify, recheck };
113
- } });