cabloy 5.1.194 → 5.1.195

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 (87) hide show
  1. package/.cabloy-version +1 -1
  2. package/.github/workflows/agent-governance.yml +1 -0
  3. package/CHANGELOG.md +16 -0
  4. package/README.md +13 -24
  5. package/package.json +2 -1
  6. package/repo-agent-governance/managed-assets.json +138 -33
  7. package/repo-agent-governance/scripts/pack-check.mjs +17 -0
  8. package/repo-agent-governance/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -0
  9. package/repo-agent-governance/skills/cabloy-domain-planning/SKILL.md +5 -3
  10. package/repo-agent-governance/skills/cabloy-spec-execution/SKILL.md +13 -8
  11. package/repo-agent-governance/skills/cabloy-spec-execution/evals/evals.json +108 -12
  12. package/repo-agent-governance/skills/cabloy-spec-execution/evals/files/scenarios.json +84 -0
  13. package/repo-agent-governance/skills/cabloy-spec-execution/evals/protocol.md +9 -0
  14. package/repo-agent-governance/skills/cabloy-spec-execution/references/execution-protocol.md +21 -5
  15. package/repo-agent-governance/skills/cabloy-spec-execution/references/status-and-evidence.md +5 -3
  16. package/repo-agent-governance/skills/cabloy-spec-generation/SKILL.md +78 -168
  17. package/repo-agent-governance/skills/cabloy-spec-generation/evals/evals.json +165 -17
  18. package/repo-agent-governance/skills/cabloy-spec-generation/evals/files/scenarios.json +114 -0
  19. package/repo-agent-governance/skills/cabloy-spec-generation/evals/protocol.md +44 -0
  20. package/repo-agent-governance/skills/cabloy-spec-generation/references/canonical-spec-input.md +145 -0
  21. package/repo-agent-governance/skills/cabloy-spec-generation/references/repo-aware-discovery.md +55 -57
  22. package/repo-agent-governance/skills/cabloy-spec-generation/references/repo-specs-document-set.md +6 -4
  23. package/repo-agent-governance/skills/cabloy-spec-generation/references/traceability-and-status-rules.md +12 -8
  24. package/repo-agent-governance/tests/governance.test.mjs +10 -1
  25. package/repo-agent-governance/tests/spec-audit.test.mjs +255 -0
  26. package/repo-agent-governance/tools/spec-audit/audit.mjs +427 -0
  27. package/repo-agent-governance/tools/spec-charts/generate-implementation-charts.mjs +97 -408
  28. package/repo-agent-governance/tools/spec-charts/generate-implementation-charts.test.mjs +462 -1
  29. package/repo-agent-governance/tools/spec-charts/spec-parser.mjs +561 -0
  30. package/repo-docs/.vitepress/config.mjs +54 -29
  31. package/repo-docs/ai/playbook-spec-execution.md +10 -4
  32. package/repo-docs/ai/playbook-spec-generation.md +40 -3
  33. package/repo-docs/ai/skills.md +3 -3
  34. package/repo-docs/backend/controller-aop-guide.md +10 -0
  35. package/repo-docs/backend/field-indexes.md +25 -0
  36. package/repo-docs/blogs/cabloy-fullstack-resource-addressing/index.md +1 -1
  37. package/repo-docs/fullstack/contract-loop-playbook.md +1 -1
  38. package/repo-docs/fullstack/development-history.md +24 -0
  39. package/repo-docs/fullstack/introduction.md +25 -156
  40. package/repo-docs/fullstack/quickstart.md +1 -1
  41. package/repo-docs/fullstack/ssr-entry-modes.md +52 -0
  42. package/repo-docs/fullstack/ssr-site-and-flavor-setup.md +3 -1
  43. package/repo-docs/fullstack/tutorial-5-backend-contract-sharing.md +13 -7
  44. package/repo-docs/fullstack/tutorial-6-one-contract-four-uses.md +11 -15
  45. package/repo-docs/fullstack/tutorials-overview.md +2 -2
  46. package/repo-docs/index.md +23 -45
  47. package/repo-docs/public/cabloy.png +0 -0
  48. package/repo-docs/public/cabloy.svg +3 -0
  49. package/repo-docs/public/favicon.svg +3 -0
  50. package/repo-docs/reference/repo-scripts.md +6 -1
  51. package/scripts/bootstrapAgentGovernance.mjs +1 -0
  52. package/scripts/upgrade.ts +1 -0
  53. package/vona/packages-cli/cli/package.json +1 -1
  54. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudBasic/snippets/2-meta.index.ts +4 -10
  55. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudStart/snippets/2-meta.index.ts +4 -10
  56. package/vona/packages-cli/cli-set-api/package.json +8 -2
  57. package/vona/packages-cli/cli-set-api/src/index.ts +1 -0
  58. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.masterDetail.ts +9 -12
  59. package/vona/packages-cli/cli-set-api/src/lib/mergeMetaIndex.ts +121 -0
  60. package/vona/packages-cli/cli-set-api/test/indexSnippets.test.ts +41 -0
  61. package/vona/packages-cli/cli-set-api/test/mergeMetaIndex.test.ts +78 -0
  62. package/vona/packages-vona/vona/package.json +1 -1
  63. package/vona/pnpm-lock.yaml +5 -5
  64. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/service/sku.ts +25 -4
  65. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/skuUniqueness.test.ts +161 -0
  66. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/meta.index.ts +21 -20
  67. package/vona/src/suite/a-commerce/modules/commerce-payment/test/paymentIndexes.test.ts +165 -0
  68. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/bean/meta.index.ts +16 -13
  69. package/vona/src/suite/a-commerce/modules/commerce-promotion/test/promotionIndexes.test.ts +82 -0
  70. package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/meta.index.ts +23 -21
  71. package/vona/src/suite/a-commerce/modules/commerce-trade/test/tradeIndexes.test.ts +86 -0
  72. package/vona/src/suite-vendor/a-cabloy/modules/a-rbac/package.json +1 -1
  73. package/vona/src/suite-vendor/a-cabloy/package.json +2 -2
  74. package/vona/src/suite-vendor/a-pay/modules/a-pay/package.json +1 -1
  75. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/meta.index.ts +35 -26
  76. package/vona/src/suite-vendor/a-pay/modules/pay-mock/package.json +1 -1
  77. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/package.json +1 -1
  78. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/package.json +1 -1
  79. package/vona/src/suite-vendor/a-pay/package.json +5 -5
  80. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
  81. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/transactionFiber_.ts +6 -2
  82. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/transaction_.ts +4 -1
  83. package/vona/src/suite-vendor/a-vona/modules/a-ormutils/package.json +1 -1
  84. package/vona/src/suite-vendor/a-vona/modules/a-ormutils/src/lib/columns.ts +3 -1
  85. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
  86. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  87. /package/repo-docs/{.vitepress/public → public}/CNAME +0 -0
package/.cabloy-version CHANGED
@@ -1 +1 @@
1
- 5.1.194
1
+ 5.1.195
@@ -35,5 +35,6 @@ jobs:
35
35
  npm run agent:governance:pack-check
36
36
  npm run test:spec-charts
37
37
  npm run spec:charts:check -- a-commerce
38
+ npm run spec:charts:check -- home-user
38
39
  - name: build documentation
39
40
  run: npm run docs:build
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.1.195
4
+
5
+ ### Features
6
+
7
+ - Update application features.
8
+
9
+ ### Bug Fixes
10
+
11
+ - Fix metadata index merging and preserve indexes on the same table in metadata and generators.
12
+
13
+ ### Improvements
14
+
15
+ - Enhance transaction handling and specification skills.
16
+ - Refine the commerce specification and clarify the tutorial’s OpenAPI workflow and contract model.
17
+ - Update the controller AOP guide, SSR comparison, development history, introduction, README, and site icon.
18
+
3
19
  ## 5.1.194
4
20
 
5
21
  ### Bug Fixes
package/README.md CHANGED
@@ -6,32 +6,31 @@
6
6
  [![Docs](https://img.shields.io/badge/docs-cabloy-4f46e5.svg?style=flat-square)](https://cabloy.com)
7
7
  [![Demo](https://img.shields.io/badge/demo-cabloy.com-059669.svg?style=flat-square)](https://cabloy.com/demo)
8
8
 
9
- Cabloy is a Node.js fullstack framework for AI vibe coding, with AI Spec-Driven Development for traceable, evidence-backed delivery.
9
+ Cabloy is a Node.js fullstack framework for AI vibe coding, with AI Spec-Driven Development guiding work from confirmed specs to verifiable delivery.
10
10
 
11
- **One fullstack system for AI vibe coding—bidirectional type sync, CLI-first workflows, docs, skills, and traceable delivery from product intent to verifiable evidence.**
12
-
13
- Instead of stitching separate backend and frontend stacks together, Cabloy keeps their contracts, tooling, and guidance connected in one repository. [AI Spec-Driven Development](https://cabloy.com/ai/ai-spec-driven-development) provides the disciplined path from confirmed Specs to evidence-backed delivery; its precise engineering method is Traceable Spec Delivery. Vona is its backend framework and runtime layer, and Zova is its frontend framework and application layer. Cabloy Basic and Cabloy Start are related, complete edition baselines built on that shared architecture; see [Editions Overview](https://cabloy.com/editions/overview) for their deliberate differences.
11
+ Cabloy Basic and Cabloy Start are complete editions built on this shared architecture; see [Editions Overview](https://cabloy.com/editions/overview) for their differences.
14
12
 
15
13
  [Documentation](https://cabloy.com) · [npm](https://www.npmjs.com/package/cabloy) · [Demo](https://cabloy.com/demo) · [GitHub](https://github.com/cabloy/cabloy)
16
14
 
17
15
  ## Fullstack Principles
18
16
 
19
- Cabloy’s fullstack model is built around two core principles:
17
+ Cabloy connects Vona and Zova in two ways:
20
18
 
21
- 1. **Frontend build output participates directly in backend SSR**
22
- - Zova owns the frontend application source
23
- - the generated frontend bundle and SSR-related artifacts are consumed by the Vona-side SSR flow
24
- - backend rendering and frontend hydration stay on one coordinated delivery path
19
+ 1. **Integrated SSR.** Zova builds the frontend and SSR artifacts. In Vona integrated SSR, Vona consumes those artifacts to render the page, and Zova hydrates it in the browser.
25
20
 
26
- 2. **Type information flows in both directions**
27
- - **Backend -> Frontend**: Vona emits Swagger/OpenAPI contracts that Zova can use to generate SDKs and related schema-aware helpers
28
- - **Frontend -> Backend**: Zova generates structural metadata and typing surfaces such as routes, components, and icons that can improve backend-side tooling and type hints
21
+ 2. **Bidirectional contract flow.** Vona's OpenAPI contracts generate Zova SDKs and schema-aware helpers. Zova's generated metadata and types for routes, components, and icons feed back into Vona's tooling and type hints.
29
22
 
30
- For the complete explanation, see [Fullstack Introduction](https://cabloy.com/fullstack/introduction), [Vona + Zova Integration](https://cabloy.com/fullstack/vona-zova-integration), [Backend OpenAPI to Frontend SDK](https://cabloy.com/fullstack/openapi-to-sdk), and [Frontend Metadata Back to Backend](https://cabloy.com/fullstack/frontend-metadata-to-backend).
23
+ Learn more about [Vona + Zova Integration](https://cabloy.com/fullstack/vona-zova-integration) and the [Contract Loop](https://cabloy.com/fullstack/contract-loop-playbook).
31
24
 
32
25
  ## Get Started
33
26
 
34
- See the [Fullstack Quickstart](https://cabloy.com/fullstack/quickstart).
27
+ Create a new Cabloy Basic project:
28
+
29
+ ```bash
30
+ npm create cabloy
31
+ ```
32
+
33
+ For Cabloy Start, clone the [Cabloy Start repository](https://github.com/cabloy/cabloy-start) and run `npm run init` from its root. See the [Fullstack Quickstart](https://cabloy.com/fullstack/quickstart) for prerequisites and development commands.
35
34
 
36
35
  ## AI Spec-Driven Development
37
36
 
@@ -78,16 +77,6 @@ Included demonstration suites give AI vibe coding agents high-quality, project-n
78
77
 
79
78
  > “Not included” means that the suite is not part of the default edition baseline. It does not limit what can be built with Cabloy.
80
79
 
81
- ## Highlights
82
-
83
- - **One fullstack system** — build backend and frontend together instead of assembling separate stacks
84
- - **Bidirectional type sync** — use the contract loop to keep backend contracts and frontend metadata aligned in both directions
85
- - **CLI-first workflows** — use explicit commands for scaffolding, generation, refactors, and verification
86
- - **Docs and skills** — give people and AI agents reusable, source-grounded guidance for the current repository
87
- - **AI Spec-Driven Development** — use Traceable Spec Delivery to connect product intent, contracts, bounded work, acceptance procedures, and verifiable evidence
88
- - **Vona + Zova** — use aligned backend and frontend layers for code sharing and cross-stack consistency
89
- - **Modular delivery** — organize capabilities as suites and modules, then deliver SSR, SPA, Web, and Admin applications with shared conventions
90
-
91
80
  ## Technology Stack
92
81
 
93
82
  ### General
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cabloy",
3
- "version": "5.1.194",
3
+ "version": "5.1.195",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A Node.js fullstack framework",
6
6
  "keywords": [
@@ -60,6 +60,7 @@
60
60
  "test:spec-charts": "node --test repo-agent-governance/tools/spec-charts/generate-implementation-charts.test.mjs",
61
61
  "spec:charts": "node ./repo-agent-governance/tools/spec-charts/generate-implementation-charts.mjs",
62
62
  "spec:charts:check": "node ./repo-agent-governance/tools/spec-charts/generate-implementation-charts.mjs --check",
63
+ "spec:check": "node ./repo-agent-governance/tools/spec-audit/audit.mjs",
63
64
  "docs:dev": "pnpm --dir repo-docs docs:dev",
64
65
  "docs:build": "pnpm --dir repo-docs docs:build",
65
66
  "docs:preview": "pnpm --dir repo-docs docs:preview",
@@ -18,7 +18,7 @@
18
18
  {
19
19
  "adapter": "codex",
20
20
  "category": "skill",
21
- "sha256": "5ac94eb98e3c89abef06b5164298f953ea16759fc24e8d57d18f5d6c40c4168f",
21
+ "sha256": "88e6ca8c60d8caeb68ab932f2a7e22810a31911400b4428fd0756d076dbc78e8",
22
22
  "source": "skills/cabloy-backend-scaffold/references/follow-up-checklist.md",
23
23
  "target": ".agents/skills/cabloy-backend-scaffold/references/follow-up-checklist.md"
24
24
  },
@@ -67,7 +67,7 @@
67
67
  {
68
68
  "adapter": "codex",
69
69
  "category": "skill",
70
- "sha256": "0cc583277837d9e7ec8b54df86eeb43a42efef3b0ac08405c91a6f6345b6b377",
70
+ "sha256": "aceca7a587634f574301cafad267b9a2d620db1c5a5c1dd8cec9483870fc0400",
71
71
  "source": "skills/cabloy-domain-planning/SKILL.md",
72
72
  "target": ".agents/skills/cabloy-domain-planning/SKILL.md"
73
73
  },
@@ -158,63 +158,98 @@
158
158
  {
159
159
  "adapter": "codex",
160
160
  "category": "skill",
161
- "sha256": "00b614b97e4cfca37ecb5245e9a58ddd69e744e67b3cae32145499bec01f1812",
161
+ "sha256": "1d5a93d8285e85778e281c1a82d141f44d6f74112a295fc1d8ad977e2af2b3c3",
162
162
  "source": "skills/cabloy-spec-execution/evals/evals.json",
163
163
  "target": ".agents/skills/cabloy-spec-execution/evals/evals.json"
164
164
  },
165
165
  {
166
166
  "adapter": "codex",
167
167
  "category": "skill",
168
- "sha256": "ec7d25e9de7f4ecc12e1937e7692dab880892958155d914e086133708878fdd0",
168
+ "sha256": "187c45fea775846326bcdea17b20a465850e563cd98a9c189725ca5aac5fdee5",
169
+ "source": "skills/cabloy-spec-execution/evals/files/scenarios.json",
170
+ "target": ".agents/skills/cabloy-spec-execution/evals/files/scenarios.json"
171
+ },
172
+ {
173
+ "adapter": "codex",
174
+ "category": "skill",
175
+ "sha256": "4272ada10c6802a70c3fd926aab858724a65e975a716775ac716d6f0ba85c25a",
176
+ "source": "skills/cabloy-spec-execution/evals/protocol.md",
177
+ "target": ".agents/skills/cabloy-spec-execution/evals/protocol.md"
178
+ },
179
+ {
180
+ "adapter": "codex",
181
+ "category": "skill",
182
+ "sha256": "788f9c94a93753f2ad16d0a1f772fe61785514ab69e2564a2a2454f4efb46086",
169
183
  "source": "skills/cabloy-spec-execution/references/execution-protocol.md",
170
184
  "target": ".agents/skills/cabloy-spec-execution/references/execution-protocol.md"
171
185
  },
172
186
  {
173
187
  "adapter": "codex",
174
188
  "category": "skill",
175
- "sha256": "f8c69f36ac2ea5fc4800ca70fdc5a3d8362e944ca54cd9d657ded6465695e160",
189
+ "sha256": "ec93b6999fcf87f35f8f1f18eed54bb08ee2753862b34f6c474480f2c88ee7e0",
176
190
  "source": "skills/cabloy-spec-execution/references/status-and-evidence.md",
177
191
  "target": ".agents/skills/cabloy-spec-execution/references/status-and-evidence.md"
178
192
  },
179
193
  {
180
194
  "adapter": "codex",
181
195
  "category": "skill",
182
- "sha256": "150c826e78616763d73f8e81f2e3d85c0e05eedb649ac2a069359c6ce074d507",
196
+ "sha256": "52a1a0ae16f72345a761d657130fd65b681535c20937a86d1d6f279772c9bb31",
183
197
  "source": "skills/cabloy-spec-execution/SKILL.md",
184
198
  "target": ".agents/skills/cabloy-spec-execution/SKILL.md"
185
199
  },
186
200
  {
187
201
  "adapter": "codex",
188
202
  "category": "skill",
189
- "sha256": "8ce8a4bc07ef33a40f8b745e34966202be27e6682c995c3fa0c351e1d85af904",
203
+ "sha256": "4ef681f7bb98e605514e770bfa129d171f915e8562025d6195de0f8dfecaa80a",
190
204
  "source": "skills/cabloy-spec-generation/evals/evals.json",
191
205
  "target": ".agents/skills/cabloy-spec-generation/evals/evals.json"
192
206
  },
193
207
  {
194
208
  "adapter": "codex",
195
209
  "category": "skill",
196
- "sha256": "988b4aee132dd64156e7b237653f7ba37f0f088b75f669219c3931b35336ec04",
210
+ "sha256": "c5a1923be3cf387d3d31535af816e8ecadd52762ebb847a1be0d7cd1fe7c3d61",
211
+ "source": "skills/cabloy-spec-generation/evals/files/scenarios.json",
212
+ "target": ".agents/skills/cabloy-spec-generation/evals/files/scenarios.json"
213
+ },
214
+ {
215
+ "adapter": "codex",
216
+ "category": "skill",
217
+ "sha256": "4fa0405277092948d79cbde3d5b9b0f2e258dac58bf7e462dffea56da5fdd45f",
218
+ "source": "skills/cabloy-spec-generation/evals/protocol.md",
219
+ "target": ".agents/skills/cabloy-spec-generation/evals/protocol.md"
220
+ },
221
+ {
222
+ "adapter": "codex",
223
+ "category": "skill",
224
+ "sha256": "85b5a174c20111d31e50071a826f555c1e9b810e52078305af2850f3593f3603",
225
+ "source": "skills/cabloy-spec-generation/references/canonical-spec-input.md",
226
+ "target": ".agents/skills/cabloy-spec-generation/references/canonical-spec-input.md"
227
+ },
228
+ {
229
+ "adapter": "codex",
230
+ "category": "skill",
231
+ "sha256": "0c482b23c42c893dae4a027a786117ff2ad4b5686e3fc29de0a117d7e4958a49",
197
232
  "source": "skills/cabloy-spec-generation/references/repo-aware-discovery.md",
198
233
  "target": ".agents/skills/cabloy-spec-generation/references/repo-aware-discovery.md"
199
234
  },
200
235
  {
201
236
  "adapter": "codex",
202
237
  "category": "skill",
203
- "sha256": "77c90b159387320059b82d83ccdab42d116f4ade2cb844aec2b0dad86d60fcd3",
238
+ "sha256": "772e83aea0d7a3ad3d5a91d4ecedd09f6cd24ae9eb146399f0834ded3f074185",
204
239
  "source": "skills/cabloy-spec-generation/references/repo-specs-document-set.md",
205
240
  "target": ".agents/skills/cabloy-spec-generation/references/repo-specs-document-set.md"
206
241
  },
207
242
  {
208
243
  "adapter": "codex",
209
244
  "category": "skill",
210
- "sha256": "168e58f7acf2a3085a79e745862acb4972c703271563df9769bb23fff2a48d93",
245
+ "sha256": "242d3b7dd6f9266fa836918443c06add6bf9d2308d7f4288112412ee3a6224f5",
211
246
  "source": "skills/cabloy-spec-generation/references/traceability-and-status-rules.md",
212
247
  "target": ".agents/skills/cabloy-spec-generation/references/traceability-and-status-rules.md"
213
248
  },
214
249
  {
215
250
  "adapter": "codex",
216
251
  "category": "skill",
217
- "sha256": "0aacce954ed495a8482d01d28fdcf863757262eae9998234dd4849aa728c3fca",
252
+ "sha256": "7b66c1f77130d14e44bea6f6f09e0de53fe4ae251ad888e78195dab48246301d",
218
253
  "source": "skills/cabloy-spec-generation/SKILL.md",
219
254
  "target": ".agents/skills/cabloy-spec-generation/SKILL.md"
220
255
  },
@@ -319,7 +354,7 @@
319
354
  {
320
355
  "adapter": "claude",
321
356
  "category": "skill",
322
- "sha256": "5ac94eb98e3c89abef06b5164298f953ea16759fc24e8d57d18f5d6c40c4168f",
357
+ "sha256": "88e6ca8c60d8caeb68ab932f2a7e22810a31911400b4428fd0756d076dbc78e8",
323
358
  "source": "skills/cabloy-backend-scaffold/references/follow-up-checklist.md",
324
359
  "target": ".claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md"
325
360
  },
@@ -368,7 +403,7 @@
368
403
  {
369
404
  "adapter": "claude",
370
405
  "category": "skill",
371
- "sha256": "0cc583277837d9e7ec8b54df86eeb43a42efef3b0ac08405c91a6f6345b6b377",
406
+ "sha256": "aceca7a587634f574301cafad267b9a2d620db1c5a5c1dd8cec9483870fc0400",
372
407
  "source": "skills/cabloy-domain-planning/SKILL.md",
373
408
  "target": ".claude/skills/cabloy-domain-planning/SKILL.md"
374
409
  },
@@ -459,63 +494,98 @@
459
494
  {
460
495
  "adapter": "claude",
461
496
  "category": "skill",
462
- "sha256": "00b614b97e4cfca37ecb5245e9a58ddd69e744e67b3cae32145499bec01f1812",
497
+ "sha256": "1d5a93d8285e85778e281c1a82d141f44d6f74112a295fc1d8ad977e2af2b3c3",
463
498
  "source": "skills/cabloy-spec-execution/evals/evals.json",
464
499
  "target": ".claude/skills/cabloy-spec-execution/evals/evals.json"
465
500
  },
466
501
  {
467
502
  "adapter": "claude",
468
503
  "category": "skill",
469
- "sha256": "ec7d25e9de7f4ecc12e1937e7692dab880892958155d914e086133708878fdd0",
504
+ "sha256": "187c45fea775846326bcdea17b20a465850e563cd98a9c189725ca5aac5fdee5",
505
+ "source": "skills/cabloy-spec-execution/evals/files/scenarios.json",
506
+ "target": ".claude/skills/cabloy-spec-execution/evals/files/scenarios.json"
507
+ },
508
+ {
509
+ "adapter": "claude",
510
+ "category": "skill",
511
+ "sha256": "4272ada10c6802a70c3fd926aab858724a65e975a716775ac716d6f0ba85c25a",
512
+ "source": "skills/cabloy-spec-execution/evals/protocol.md",
513
+ "target": ".claude/skills/cabloy-spec-execution/evals/protocol.md"
514
+ },
515
+ {
516
+ "adapter": "claude",
517
+ "category": "skill",
518
+ "sha256": "788f9c94a93753f2ad16d0a1f772fe61785514ab69e2564a2a2454f4efb46086",
470
519
  "source": "skills/cabloy-spec-execution/references/execution-protocol.md",
471
520
  "target": ".claude/skills/cabloy-spec-execution/references/execution-protocol.md"
472
521
  },
473
522
  {
474
523
  "adapter": "claude",
475
524
  "category": "skill",
476
- "sha256": "f8c69f36ac2ea5fc4800ca70fdc5a3d8362e944ca54cd9d657ded6465695e160",
525
+ "sha256": "ec93b6999fcf87f35f8f1f18eed54bb08ee2753862b34f6c474480f2c88ee7e0",
477
526
  "source": "skills/cabloy-spec-execution/references/status-and-evidence.md",
478
527
  "target": ".claude/skills/cabloy-spec-execution/references/status-and-evidence.md"
479
528
  },
480
529
  {
481
530
  "adapter": "claude",
482
531
  "category": "skill",
483
- "sha256": "150c826e78616763d73f8e81f2e3d85c0e05eedb649ac2a069359c6ce074d507",
532
+ "sha256": "52a1a0ae16f72345a761d657130fd65b681535c20937a86d1d6f279772c9bb31",
484
533
  "source": "skills/cabloy-spec-execution/SKILL.md",
485
534
  "target": ".claude/skills/cabloy-spec-execution/SKILL.md"
486
535
  },
487
536
  {
488
537
  "adapter": "claude",
489
538
  "category": "skill",
490
- "sha256": "8ce8a4bc07ef33a40f8b745e34966202be27e6682c995c3fa0c351e1d85af904",
539
+ "sha256": "4ef681f7bb98e605514e770bfa129d171f915e8562025d6195de0f8dfecaa80a",
491
540
  "source": "skills/cabloy-spec-generation/evals/evals.json",
492
541
  "target": ".claude/skills/cabloy-spec-generation/evals/evals.json"
493
542
  },
494
543
  {
495
544
  "adapter": "claude",
496
545
  "category": "skill",
497
- "sha256": "988b4aee132dd64156e7b237653f7ba37f0f088b75f669219c3931b35336ec04",
546
+ "sha256": "c5a1923be3cf387d3d31535af816e8ecadd52762ebb847a1be0d7cd1fe7c3d61",
547
+ "source": "skills/cabloy-spec-generation/evals/files/scenarios.json",
548
+ "target": ".claude/skills/cabloy-spec-generation/evals/files/scenarios.json"
549
+ },
550
+ {
551
+ "adapter": "claude",
552
+ "category": "skill",
553
+ "sha256": "4fa0405277092948d79cbde3d5b9b0f2e258dac58bf7e462dffea56da5fdd45f",
554
+ "source": "skills/cabloy-spec-generation/evals/protocol.md",
555
+ "target": ".claude/skills/cabloy-spec-generation/evals/protocol.md"
556
+ },
557
+ {
558
+ "adapter": "claude",
559
+ "category": "skill",
560
+ "sha256": "85b5a174c20111d31e50071a826f555c1e9b810e52078305af2850f3593f3603",
561
+ "source": "skills/cabloy-spec-generation/references/canonical-spec-input.md",
562
+ "target": ".claude/skills/cabloy-spec-generation/references/canonical-spec-input.md"
563
+ },
564
+ {
565
+ "adapter": "claude",
566
+ "category": "skill",
567
+ "sha256": "0c482b23c42c893dae4a027a786117ff2ad4b5686e3fc29de0a117d7e4958a49",
498
568
  "source": "skills/cabloy-spec-generation/references/repo-aware-discovery.md",
499
569
  "target": ".claude/skills/cabloy-spec-generation/references/repo-aware-discovery.md"
500
570
  },
501
571
  {
502
572
  "adapter": "claude",
503
573
  "category": "skill",
504
- "sha256": "77c90b159387320059b82d83ccdab42d116f4ade2cb844aec2b0dad86d60fcd3",
574
+ "sha256": "772e83aea0d7a3ad3d5a91d4ecedd09f6cd24ae9eb146399f0834ded3f074185",
505
575
  "source": "skills/cabloy-spec-generation/references/repo-specs-document-set.md",
506
576
  "target": ".claude/skills/cabloy-spec-generation/references/repo-specs-document-set.md"
507
577
  },
508
578
  {
509
579
  "adapter": "claude",
510
580
  "category": "skill",
511
- "sha256": "168e58f7acf2a3085a79e745862acb4972c703271563df9769bb23fff2a48d93",
581
+ "sha256": "242d3b7dd6f9266fa836918443c06add6bf9d2308d7f4288112412ee3a6224f5",
512
582
  "source": "skills/cabloy-spec-generation/references/traceability-and-status-rules.md",
513
583
  "target": ".claude/skills/cabloy-spec-generation/references/traceability-and-status-rules.md"
514
584
  },
515
585
  {
516
586
  "adapter": "claude",
517
587
  "category": "skill",
518
- "sha256": "0aacce954ed495a8482d01d28fdcf863757262eae9998234dd4849aa728c3fca",
588
+ "sha256": "7b66c1f77130d14e44bea6f6f09e0de53fe4ae251ad888e78195dab48246301d",
519
589
  "source": "skills/cabloy-spec-generation/SKILL.md",
520
590
  "target": ".claude/skills/cabloy-spec-generation/SKILL.md"
521
591
  },
@@ -634,7 +704,7 @@
634
704
  {
635
705
  "adapter": "cursor",
636
706
  "category": "skill",
637
- "sha256": "5ac94eb98e3c89abef06b5164298f953ea16759fc24e8d57d18f5d6c40c4168f",
707
+ "sha256": "88e6ca8c60d8caeb68ab932f2a7e22810a31911400b4428fd0756d076dbc78e8",
638
708
  "source": "skills/cabloy-backend-scaffold/references/follow-up-checklist.md",
639
709
  "target": ".cursor/skills/cabloy-backend-scaffold/references/follow-up-checklist.md"
640
710
  },
@@ -683,7 +753,7 @@
683
753
  {
684
754
  "adapter": "cursor",
685
755
  "category": "skill",
686
- "sha256": "0cc583277837d9e7ec8b54df86eeb43a42efef3b0ac08405c91a6f6345b6b377",
756
+ "sha256": "aceca7a587634f574301cafad267b9a2d620db1c5a5c1dd8cec9483870fc0400",
687
757
  "source": "skills/cabloy-domain-planning/SKILL.md",
688
758
  "target": ".cursor/skills/cabloy-domain-planning/SKILL.md"
689
759
  },
@@ -774,63 +844,98 @@
774
844
  {
775
845
  "adapter": "cursor",
776
846
  "category": "skill",
777
- "sha256": "00b614b97e4cfca37ecb5245e9a58ddd69e744e67b3cae32145499bec01f1812",
847
+ "sha256": "1d5a93d8285e85778e281c1a82d141f44d6f74112a295fc1d8ad977e2af2b3c3",
778
848
  "source": "skills/cabloy-spec-execution/evals/evals.json",
779
849
  "target": ".cursor/skills/cabloy-spec-execution/evals/evals.json"
780
850
  },
781
851
  {
782
852
  "adapter": "cursor",
783
853
  "category": "skill",
784
- "sha256": "ec7d25e9de7f4ecc12e1937e7692dab880892958155d914e086133708878fdd0",
854
+ "sha256": "187c45fea775846326bcdea17b20a465850e563cd98a9c189725ca5aac5fdee5",
855
+ "source": "skills/cabloy-spec-execution/evals/files/scenarios.json",
856
+ "target": ".cursor/skills/cabloy-spec-execution/evals/files/scenarios.json"
857
+ },
858
+ {
859
+ "adapter": "cursor",
860
+ "category": "skill",
861
+ "sha256": "4272ada10c6802a70c3fd926aab858724a65e975a716775ac716d6f0ba85c25a",
862
+ "source": "skills/cabloy-spec-execution/evals/protocol.md",
863
+ "target": ".cursor/skills/cabloy-spec-execution/evals/protocol.md"
864
+ },
865
+ {
866
+ "adapter": "cursor",
867
+ "category": "skill",
868
+ "sha256": "788f9c94a93753f2ad16d0a1f772fe61785514ab69e2564a2a2454f4efb46086",
785
869
  "source": "skills/cabloy-spec-execution/references/execution-protocol.md",
786
870
  "target": ".cursor/skills/cabloy-spec-execution/references/execution-protocol.md"
787
871
  },
788
872
  {
789
873
  "adapter": "cursor",
790
874
  "category": "skill",
791
- "sha256": "f8c69f36ac2ea5fc4800ca70fdc5a3d8362e944ca54cd9d657ded6465695e160",
875
+ "sha256": "ec93b6999fcf87f35f8f1f18eed54bb08ee2753862b34f6c474480f2c88ee7e0",
792
876
  "source": "skills/cabloy-spec-execution/references/status-and-evidence.md",
793
877
  "target": ".cursor/skills/cabloy-spec-execution/references/status-and-evidence.md"
794
878
  },
795
879
  {
796
880
  "adapter": "cursor",
797
881
  "category": "skill",
798
- "sha256": "150c826e78616763d73f8e81f2e3d85c0e05eedb649ac2a069359c6ce074d507",
882
+ "sha256": "52a1a0ae16f72345a761d657130fd65b681535c20937a86d1d6f279772c9bb31",
799
883
  "source": "skills/cabloy-spec-execution/SKILL.md",
800
884
  "target": ".cursor/skills/cabloy-spec-execution/SKILL.md"
801
885
  },
802
886
  {
803
887
  "adapter": "cursor",
804
888
  "category": "skill",
805
- "sha256": "8ce8a4bc07ef33a40f8b745e34966202be27e6682c995c3fa0c351e1d85af904",
889
+ "sha256": "4ef681f7bb98e605514e770bfa129d171f915e8562025d6195de0f8dfecaa80a",
806
890
  "source": "skills/cabloy-spec-generation/evals/evals.json",
807
891
  "target": ".cursor/skills/cabloy-spec-generation/evals/evals.json"
808
892
  },
809
893
  {
810
894
  "adapter": "cursor",
811
895
  "category": "skill",
812
- "sha256": "988b4aee132dd64156e7b237653f7ba37f0f088b75f669219c3931b35336ec04",
896
+ "sha256": "c5a1923be3cf387d3d31535af816e8ecadd52762ebb847a1be0d7cd1fe7c3d61",
897
+ "source": "skills/cabloy-spec-generation/evals/files/scenarios.json",
898
+ "target": ".cursor/skills/cabloy-spec-generation/evals/files/scenarios.json"
899
+ },
900
+ {
901
+ "adapter": "cursor",
902
+ "category": "skill",
903
+ "sha256": "4fa0405277092948d79cbde3d5b9b0f2e258dac58bf7e462dffea56da5fdd45f",
904
+ "source": "skills/cabloy-spec-generation/evals/protocol.md",
905
+ "target": ".cursor/skills/cabloy-spec-generation/evals/protocol.md"
906
+ },
907
+ {
908
+ "adapter": "cursor",
909
+ "category": "skill",
910
+ "sha256": "85b5a174c20111d31e50071a826f555c1e9b810e52078305af2850f3593f3603",
911
+ "source": "skills/cabloy-spec-generation/references/canonical-spec-input.md",
912
+ "target": ".cursor/skills/cabloy-spec-generation/references/canonical-spec-input.md"
913
+ },
914
+ {
915
+ "adapter": "cursor",
916
+ "category": "skill",
917
+ "sha256": "0c482b23c42c893dae4a027a786117ff2ad4b5686e3fc29de0a117d7e4958a49",
813
918
  "source": "skills/cabloy-spec-generation/references/repo-aware-discovery.md",
814
919
  "target": ".cursor/skills/cabloy-spec-generation/references/repo-aware-discovery.md"
815
920
  },
816
921
  {
817
922
  "adapter": "cursor",
818
923
  "category": "skill",
819
- "sha256": "77c90b159387320059b82d83ccdab42d116f4ade2cb844aec2b0dad86d60fcd3",
924
+ "sha256": "772e83aea0d7a3ad3d5a91d4ecedd09f6cd24ae9eb146399f0834ded3f074185",
820
925
  "source": "skills/cabloy-spec-generation/references/repo-specs-document-set.md",
821
926
  "target": ".cursor/skills/cabloy-spec-generation/references/repo-specs-document-set.md"
822
927
  },
823
928
  {
824
929
  "adapter": "cursor",
825
930
  "category": "skill",
826
- "sha256": "168e58f7acf2a3085a79e745862acb4972c703271563df9769bb23fff2a48d93",
931
+ "sha256": "242d3b7dd6f9266fa836918443c06add6bf9d2308d7f4288112412ee3a6224f5",
827
932
  "source": "skills/cabloy-spec-generation/references/traceability-and-status-rules.md",
828
933
  "target": ".cursor/skills/cabloy-spec-generation/references/traceability-and-status-rules.md"
829
934
  },
830
935
  {
831
936
  "adapter": "cursor",
832
937
  "category": "skill",
833
- "sha256": "0aacce954ed495a8482d01d28fdcf863757262eae9998234dd4849aa728c3fca",
938
+ "sha256": "7b66c1f77130d14e44bea6f6f09e0de53fe4ae251ad888e78195dab48246301d",
834
939
  "source": "skills/cabloy-spec-generation/SKILL.md",
835
940
  "target": ".cursor/skills/cabloy-spec-generation/SKILL.md"
836
941
  },
@@ -17,6 +17,18 @@ const required = [
17
17
  'repo-agent-governance/scripts/governance.mjs',
18
18
  'repo-agent-governance/tools/contract-loop/core.mjs',
19
19
  'repo-agent-governance/tools/contract-loop/hook-runtime.mjs',
20
+ 'repo-agent-governance/tools/spec-audit/audit.mjs',
21
+ 'repo-agent-governance/tools/spec-charts/spec-parser.mjs',
22
+ 'repo-agent-governance/tools/spec-charts/generate-implementation-charts.mjs',
23
+ 'repo-agent-governance/skills/cabloy-spec-generation/SKILL.md',
24
+ 'repo-agent-governance/skills/cabloy-spec-generation/references/canonical-spec-input.md',
25
+ 'repo-agent-governance/skills/cabloy-spec-generation/evals/evals.json',
26
+ 'repo-agent-governance/skills/cabloy-spec-generation/evals/protocol.md',
27
+ 'repo-agent-governance/skills/cabloy-spec-generation/evals/files/scenarios.json',
28
+ 'repo-agent-governance/skills/cabloy-spec-execution/SKILL.md',
29
+ 'repo-agent-governance/skills/cabloy-spec-generation/references/repo-aware-discovery.md',
30
+ 'repo-agent-governance/skills/cabloy-spec-generation/references/repo-specs-document-set.md',
31
+ 'repo-agent-governance/skills/cabloy-spec-generation/references/traceability-and-status-rules.md',
20
32
  'repo-agent-governance/adapters/cursor/hooks.json',
21
33
  'repo-agent-governance/adapters/cursor/contract-loop-gate.mjs',
22
34
  'repo-agent-governance/adapters/codex/hooks.json',
@@ -42,6 +54,11 @@ for (const path of forbidden) {
42
54
  if (files.has(path))
43
55
  throw new Error(`npm package must not contain local governance state: ${path}`);
44
56
  }
57
+ for (const path of files) {
58
+ if (path.startsWith('repo-specs/') || path.startsWith('repo-docs-internal/')) {
59
+ throw new Error(`npm package must not contain project planning or internal records: ${path}`);
60
+ }
61
+ }
45
62
  // eslint-disable-next-line no-console
46
63
  console.log(
47
64
  `Governance package surface is valid (${required.length} canonical assets; ${managedAdapters.length} transition adapters excluded).`,
@@ -43,6 +43,7 @@ When the active edition and installed modules provide `@Passport.rbac(...)` and
43
43
  - migration/version changes
44
44
  - `meta.version`
45
45
  - field indexes; in shared-database multitenancy, preserve ordinary lookup indexes and enforce business uniqueness in tenant-aware business logic rather than with `table.unique(...)`
46
+ - when editing or generating `meta.index`, consolidate each table's specifications into one declaration instead of adding another same-table `$tableColumns` spread; check for leading-column name collisions, effective metadata, and physical index definitions using the [Field Indexes guide](../../../../repo-docs/backend/field-indexes.md)
46
47
  - relations
47
48
  - datasource choice
48
49
  - cache behavior
@@ -143,9 +143,11 @@ Use examples such as:
143
143
 
144
144
  When helpful, explain why the recommendation is better than obvious alternatives.
145
145
 
146
- ## Step 7: Require confirmation before scaffolding
146
+ ## Step 7: Confirm naming and preserve the caller's workflow
147
147
 
148
- Before suggesting any scaffold execution, explicitly confirm:
148
+ If invoked by `cabloy-spec-generation` because naming was unresolved, this is a **naming-only** detour. Return the validated identity, capability names, proposed ownership, edition, and remaining naming questions to generation. Do not run scaffold commands or treat naming confirmation as generation, ADR, or execution approval. Generation resumes its selected complete/incremental/lightweight mode and confirmation gate.
149
+
150
+ For a direct scaffolding request, before suggesting execution, explicitly confirm:
149
151
 
150
152
  - `providerId`
151
153
  - suite short name
@@ -160,7 +162,7 @@ Always leave a custom path available, for example:
160
162
 
161
163
  ## Step 8: Hand off to CLI-first scaffolding only after confirmation
162
164
 
163
- Once naming is confirmed, route to the real generators rather than hand-authoring structure.
165
+ For a naming-only detour, return to `cabloy-spec-generation` without source generation. Only a direct, explicitly confirmed scaffolding request routes to the real generators rather than hand-authoring structure. A completed spec baseline instead hands one bounded WBS candidate to `cabloy-spec-execution` for its own dossier approval.
164
166
 
165
167
  Typical commands are:
166
168
 
@@ -31,9 +31,10 @@ From the active repository root, inspect:
31
31
 
32
32
  Interpret the markers as follows:
33
33
 
34
- - `__CABLOY_BASIC__` present: use Basic source, scripts, flavors, UI, and SSR facts only when observed;
35
- - `__CABLOY_START__` present: resolve Start-specific scripts, flavor/site names, paths, UI, and SSR behavior from the active Start repository;
36
- - neither present: stop before edition-specific execution and ask the user to confirm the repository context.
34
+ - exactly `__CABLOY_BASIC__`: use observed Basic source, scripts, flavors, UI, and SSR facts;
35
+ - exactly `__CABLOY_START__`: resolve those facts from the active Start repository;
36
+ - both markers: stop; the checkout is invalid or ambiguous;
37
+ - neither: inspect the owning package/structure and ask before edition-specific execution.
37
38
 
38
39
  A PostToolUse hook or an automatic build is convenience assistance, not evidence that the task is synchronized or verified. The deterministic chart commands are `npm run spec:charts -- <suite>` and `npm run spec:charts:check -- <suite>`; they validate derived-view freshness, not implementation or ATP completion.
39
40
 
@@ -66,7 +67,9 @@ Read the suite records in this order:
66
67
  4. `test-plan.md` for linked `ATP-*` procedures, fixture/cleanup rules, evidence requirements, and release gates;
67
68
  5. `progress.md` for current derived state, blockers, waivers, prior evidence, superseded proof, and next action;
68
69
  6. linked evidence, phase indexes, presentation contracts, rollout records, or provider runbooks when referenced;
69
- 7. `implementation-gantt.svg` and `implementation-burndown.svg` as derived views; check their freshness rather than treating them as authority.
70
+ 7. applicable implementation charts as derived views: check freshness only with complete supported README/WBS/ATP/progress inputs; otherwise report the legacy/lightweight input gap without inventing business definitions.
71
+
72
+ Keep planning authority audit (`npm run spec:check -- <suite>`, with `--lightweight` only for agreed limited scope), chart model/freshness, and human approval/evidence as three independent gates. Static passes do not clear controlling TODOs, accept ADRs, or prove ATP execution.
70
73
 
71
74
  Do not trust the first status statement found in a historical record. Reconcile revision, chronology, supersession, and the authoritative current progress row before deciding readiness.
72
75
 
@@ -83,7 +86,9 @@ Before implementation, present a concise dossier containing:
83
86
  - records permitted to change (`progress.md`, evidence/phase index, derived implementation charts, and only other records whose established convention requires it);
84
87
  - remaining blockers, `TODO(confirm)` decisions, unsafe actions intentionally excluded, and one next action.
85
88
 
86
- Keep observed repository facts separate from target contracts. Require explicit user confirmation of this dossier before making source changes, running meaningful verification, or writing evidence/status updates. Do not treat silence as approval.
89
+ Classify targets as observed existing, proposed new, or explicitly approved new. An explicitly approved new site/flavor tuple may be created before target source exists when framework constraints and collisions were checked, the concrete design was explicitly approved, and its governing ADR is `Accepted`. Cite the design, planned paths/manifests, and creation prerequisites. A new wrapper remains a planned addition until created and observed; do not run it prematurely. Shared integration still needs an observed owner. Proposed/unchecked values and controlling TODOs remain gated.
90
+
91
+ Require explicit dossier approval before source changes, meaningful verification, or evidence/status updates. Generation approval, design/ADR acceptance, and this execution approval are separate; silence is not approval.
87
92
 
88
93
  ## Step 5: Apply readiness gates
89
94
 
@@ -115,7 +120,7 @@ Keep the specialist’s CLI-first and follow-up rules. Never hand-edit generated
115
120
 
116
121
  ## Step 7: Verify narrowly, then expand as required
117
122
 
118
- Start with the narrowest meaningful check for the selected task, then follow the linked ATP and release-gate requirements. Use only commands observed in the active repository and approved by the dossier.
123
+ Start with the narrowest meaningful check, then follow linked ATP/release gates. Run only commands observed in the active repository and approved by the dossier. An approved task may first add a planned wrapper to its durable manifest; inspect the resulting command and paired outputs before running it. Do not substitute an existing Basic wrapper for a new/Start tuple.
119
124
 
120
125
  For contract-sensitive work:
121
126
 
@@ -129,7 +134,7 @@ A planned command, successful generation, code reading, manual walkthrough, scre
129
134
 
130
135
  ## Step 8: Record evidence and derived status
131
136
 
132
- Record actual observed proof according to `references/status-and-evidence.md`. Prefer dedicated phase/ATP evidence records when the suite convention supports them; otherwise preserve the suite’s established inline test-plan convention. Update evidence first, then the derived progress register, and regenerate/check both implementation charts last. Use `npm run spec:charts -- <suite>` followed by `npm run spec:charts:check -- <suite>`; chart output remains derived and cannot repair an authority conflict.
137
+ Record proof under `references/status-and-evidence.md`, preserving the established evidence convention. Update evidence, then progress, then applicable charts. With complete supported inputs, run `npm run spec:charts -- <suite>` and `npm run spec:charts:check -- <suite>`; README title/language changes also require regeneration. Otherwise report chart-input omissions and route needed authority repair to generation; do not invent definitions or force a full baseline. Charts cannot repair an authority conflict.
133
138
 
134
139
  Set status accurately:
135
140
 
@@ -150,7 +155,7 @@ Report:
150
155
  4. resulting status and the precise reason for it;
151
156
  5. blockers, decisions, or evidence still outstanding;
152
157
  6. one next proof/action only;
153
- 7. refreshed `implementation-gantt.svg` and `implementation-burndown.svg`, README-derived chart language, and the chart check result.
158
+ 7. separate authority-audit, chart-model/freshness, and human approval/evidence results; applicable refreshed charts and README language, or the precise incomplete-input omission.
154
159
 
155
160
  Do not automatically modify the next WBS item or claim release closure from feature-level verification.
156
161