cabloy 5.1.60 → 5.1.62

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 (232) hide show
  1. package/.claude/hooks/contract-loop-gate.ts +296 -0
  2. package/.claude/settings.json +16 -0
  3. package/.claude/skills/cabloy-backend-scaffold/SKILL.md +2 -0
  4. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -0
  5. package/.claude/skills/cabloy-contract-loop/SKILL.md +89 -16
  6. package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +102 -14
  7. package/.claude/skills/cabloy-contract-loop/references/resource-custom-state-pattern.md +4 -0
  8. package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +32 -14
  9. package/.claude/skills/cabloy-domain-planning/SKILL.md +212 -0
  10. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +13 -0
  11. package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +2 -0
  12. package/.claude/skills/cabloy-module-removal/SKILL.md +144 -0
  13. package/.claude/skills/cabloy-resource-field-update/SKILL.md +7 -0
  14. package/.claude/skills/cabloy-zova-source-reading/SKILL.md +221 -0
  15. package/.claude/skills/cabloy-zova-source-reading/references/analysis-modes.md +91 -0
  16. package/.claude/skills/cabloy-zova-source-reading/references/core-reading-paths.md +117 -0
  17. package/CHANGELOG.md +64 -0
  18. package/CLAUDE.md +11 -0
  19. package/cabloy-docs/.vitepress/config.mjs +197 -5
  20. package/cabloy-docs/ai/cli-to-skill-map.md +7 -0
  21. package/cabloy-docs/ai/docs-skills-rules-mapping.md +22 -0
  22. package/cabloy-docs/ai/future-skill-roadmap.md +12 -7
  23. package/cabloy-docs/ai/introduction.md +1 -0
  24. package/cabloy-docs/ai/playbook-backend-module.md +6 -0
  25. package/cabloy-docs/ai/playbook-module-removal.md +164 -0
  26. package/cabloy-docs/ai/skills.md +12 -0
  27. package/cabloy-docs/backend/backend-contract-emission-output-inspection.md +189 -0
  28. package/cabloy-docs/backend/backend-contract-emission-source-reading-map.md +160 -0
  29. package/cabloy-docs/backend/backend-contract-emission-specimen.md +170 -0
  30. package/cabloy-docs/backend/backend-resource-module-contract-chain.md +323 -0
  31. package/cabloy-docs/backend/backend-source-reading-debug-checklist.md +173 -0
  32. package/cabloy-docs/backend/backend-source-reading-roadmap.md +129 -0
  33. package/cabloy-docs/backend/backend-source-reading-verify-playbook.md +166 -0
  34. package/cabloy-docs/backend/bean-scene-authoring.md +4 -4
  35. package/cabloy-docs/backend/broadcast-guide.md +3 -3
  36. package/cabloy-docs/backend/cli.md +20 -11
  37. package/cabloy-docs/backend/config-guide.md +4 -4
  38. package/cabloy-docs/backend/controller-aop-guide.md +10 -10
  39. package/cabloy-docs/backend/controller-guide.md +12 -2
  40. package/cabloy-docs/backend/crud-workflow.md +7 -3
  41. package/cabloy-docs/backend/dto-guide.md +18 -2
  42. package/cabloy-docs/backend/dto-infer-generation.md +201 -25
  43. package/cabloy-docs/backend/election-guide.md +2 -2
  44. package/cabloy-docs/backend/entity-guide.md +30 -3
  45. package/cabloy-docs/backend/error-guide.md +3 -3
  46. package/cabloy-docs/backend/event-guide.md +4 -4
  47. package/cabloy-docs/backend/external-aop-guide.md +2 -2
  48. package/cabloy-docs/backend/field-indexes.md +9 -3
  49. package/cabloy-docs/backend/foundation.md +8 -8
  50. package/cabloy-docs/backend/i18n-guide.md +6 -6
  51. package/cabloy-docs/backend/internal-aop-guide.md +2 -2
  52. package/cabloy-docs/backend/introduction.md +15 -0
  53. package/cabloy-docs/backend/migration-and-changes.md +3 -3
  54. package/cabloy-docs/backend/model-guide.md +16 -6
  55. package/cabloy-docs/backend/openapi-guide.md +3 -0
  56. package/cabloy-docs/backend/queue-guide.md +3 -3
  57. package/cabloy-docs/backend/redlock-guide.md +2 -2
  58. package/cabloy-docs/backend/schedule-guide.md +2 -2
  59. package/cabloy-docs/backend/scripts.md +8 -0
  60. package/cabloy-docs/backend/serialization-guide.md +12 -2
  61. package/cabloy-docs/backend/service-guide.md +18 -9
  62. package/cabloy-docs/backend/startup-guide.md +5 -5
  63. package/cabloy-docs/backend/status-guide.md +271 -0
  64. package/cabloy-docs/backend/unit-testing.md +3 -3
  65. package/cabloy-docs/backend/vona-source-reading-map.md +157 -0
  66. package/cabloy-docs/backend/websocket-protocol-guide.md +5 -5
  67. package/cabloy-docs/backend/websocket-usage-guide.md +15 -8
  68. package/cabloy-docs/frontend/a-model-under-the-hood.md +281 -0
  69. package/cabloy-docs/frontend/a-openapi-under-the-hood.md +248 -0
  70. package/cabloy-docs/frontend/a-router-guide.md +307 -0
  71. package/cabloy-docs/frontend/api-guide.md +6 -4
  72. package/cabloy-docs/frontend/api-schema-guide.md +1 -0
  73. package/cabloy-docs/frontend/app-startup-guide.md +7 -4
  74. package/cabloy-docs/frontend/bean-scene-authoring.md +3 -1
  75. package/cabloy-docs/frontend/behavior-guide.md +16 -16
  76. package/cabloy-docs/frontend/cli.md +14 -2
  77. package/cabloy-docs/frontend/command-scene-authoring.md +504 -0
  78. package/cabloy-docs/frontend/component-guide.md +5 -5
  79. package/cabloy-docs/frontend/component-props-guide.md +1 -1
  80. package/cabloy-docs/frontend/component-v-model-guide.md +2 -2
  81. package/cabloy-docs/frontend/design-principles.md +6 -0
  82. package/cabloy-docs/frontend/fetch-interceptor-guide.md +440 -0
  83. package/cabloy-docs/frontend/filter-query-select-data-flow-guide.md +260 -0
  84. package/cabloy-docs/frontend/form-guide.md +786 -0
  85. package/cabloy-docs/frontend/form-scene-to-page-meta-guide.md +303 -0
  86. package/cabloy-docs/frontend/foundation.md +33 -0
  87. package/cabloy-docs/frontend/frontend-source-reading-roadmap.md +249 -0
  88. package/cabloy-docs/frontend/generated-contract-consumption-debug-checklist.md +190 -0
  89. package/cabloy-docs/frontend/generated-contract-consumption-entry-branch.md +205 -0
  90. package/cabloy-docs/frontend/generated-contract-consumption-list-branch.md +157 -0
  91. package/cabloy-docs/frontend/generated-contract-consumption-specimen.md +203 -0
  92. package/cabloy-docs/frontend/generated-contract-consumption-verify-playbook.md +189 -0
  93. package/cabloy-docs/frontend/generic-component-guide.md +1 -1
  94. package/cabloy-docs/frontend/introduction.md +38 -5
  95. package/cabloy-docs/frontend/ioc-and-beans.md +6 -0
  96. package/cabloy-docs/frontend/mock-guide.md +1 -0
  97. package/cabloy-docs/frontend/model-architecture.md +288 -39
  98. package/cabloy-docs/frontend/model-resource-best-practices.md +379 -0
  99. package/cabloy-docs/frontend/model-resource-cookbook.md +508 -0
  100. package/cabloy-docs/frontend/model-resource-internals-deep-dive.md +238 -0
  101. package/cabloy-docs/frontend/model-resource-owner-pattern.md +402 -0
  102. package/cabloy-docs/frontend/model-resource-usage-guide.md +334 -0
  103. package/cabloy-docs/frontend/model-state-guide.md +371 -15
  104. package/cabloy-docs/frontend/module-scope.md +8 -8
  105. package/cabloy-docs/frontend/modules-and-suites.md +2 -1
  106. package/cabloy-docs/frontend/navigation-guards-guide.md +7 -0
  107. package/cabloy-docs/frontend/openapi-sdk-guide.md +17 -6
  108. package/cabloy-docs/frontend/page-guide.md +15 -9
  109. package/cabloy-docs/frontend/page-meta-guide.md +466 -0
  110. package/cabloy-docs/frontend/page-params-guide.md +3 -3
  111. package/cabloy-docs/frontend/page-query-guide.md +2 -2
  112. package/cabloy-docs/frontend/page-route-guide.md +6 -0
  113. package/cabloy-docs/frontend/permission-formscene-action-visibility-guide.md +263 -0
  114. package/cabloy-docs/frontend/quickstart.md +18 -2
  115. package/cabloy-docs/frontend/reading-zova-for-vue-developers.md +266 -0
  116. package/cabloy-docs/frontend/resource-entry-page-deep-dive.md +271 -0
  117. package/cabloy-docs/frontend/resource-list-page-deep-dive.md +279 -0
  118. package/cabloy-docs/frontend/rest-resource-source-reading-map.md +522 -0
  119. package/cabloy-docs/frontend/rest-resource-under-the-hood.md +622 -0
  120. package/cabloy-docs/frontend/root-behaviors-guide.md +282 -0
  121. package/cabloy-docs/frontend/route-alias-guide.md +6 -0
  122. package/cabloy-docs/frontend/router-stack-guide.md +229 -0
  123. package/cabloy-docs/frontend/router-tabs-introduction.md +26 -3
  124. package/cabloy-docs/frontend/router-tabs-layout-integration.md +367 -0
  125. package/cabloy-docs/frontend/router-tabs-mechanism.md +6 -0
  126. package/cabloy-docs/frontend/router-tabs-route-meta-cookbook.md +7 -0
  127. package/cabloy-docs/frontend/router-tabs-vs-stack.md +167 -0
  128. package/cabloy-docs/frontend/router-view-hosts-guide.md +450 -0
  129. package/cabloy-docs/frontend/server-data.md +4 -1
  130. package/cabloy-docs/frontend/system-startup-guide.md +2 -2
  131. package/cabloy-docs/frontend/table-action-visibility-permission-flow-guide.md +263 -0
  132. package/cabloy-docs/frontend/table-cell-cookbook.md +568 -0
  133. package/cabloy-docs/frontend/table-guide.md +373 -0
  134. package/cabloy-docs/frontend/table-resource-crud-cookbook.md +496 -0
  135. package/cabloy-docs/frontend/zova-app-guide.md +251 -0
  136. package/cabloy-docs/frontend/zova-form-source-reading-map.md +293 -0
  137. package/cabloy-docs/frontend/zova-form-under-the-hood.md +561 -0
  138. package/cabloy-docs/frontend/zova-reactivity-under-the-hood.md +320 -0
  139. package/cabloy-docs/frontend/zova-router-under-the-hood.md +561 -0
  140. package/cabloy-docs/frontend/zova-source-reading-map.md +421 -0
  141. package/cabloy-docs/frontend/zova-table-controller-render-supplement.md +225 -0
  142. package/cabloy-docs/frontend/zova-table-source-reading-map.md +317 -0
  143. package/cabloy-docs/frontend/zova-table-under-the-hood.md +532 -0
  144. package/cabloy-docs/frontend/zova-vs-vue3-comparison.md +308 -0
  145. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist.md +245 -0
  146. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map.md +139 -0
  147. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook.md +248 -0
  148. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions.md +511 -0
  149. package/cabloy-docs/fullstack/contract-loop-playbook.md +356 -0
  150. package/cabloy-docs/fullstack/edition-collaboration-differences.md +6 -0
  151. package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +199 -23
  152. package/cabloy-docs/fullstack/introduction.md +15 -1
  153. package/cabloy-docs/fullstack/openapi-to-sdk.md +135 -11
  154. package/cabloy-docs/fullstack/suites-and-modules.md +333 -0
  155. package/cabloy-docs/fullstack/tutorial-1-first-module.md +3 -0
  156. package/cabloy-docs/fullstack/tutorial-2-first-crud.md +4 -0
  157. package/cabloy-docs/fullstack/tutorial-3-frontend-metadata-sharing.md +6 -2
  158. package/cabloy-docs/fullstack/tutorial-4-custom-level-renderers.md +60 -23
  159. package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +14 -7
  160. package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +6 -0
  161. package/cabloy-docs/fullstack/tutorials-overview.md +17 -4
  162. package/cabloy-docs/reference/bean-scene-boilerplates.md +15 -13
  163. package/cabloy-docs/reference/package-map.md +4 -3
  164. package/package.json +2 -1
  165. package/scripts/init.ts +2 -18
  166. package/scripts/initTestData.ts +25 -0
  167. package/scripts/upgrade.ts +17 -2
  168. package/vona/pnpm-lock.yaml +48 -194
  169. package/vona/src/suite/a-training/modules/training-student/package.json +53 -0
  170. package/vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts +400 -0
  171. package/vona/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +18 -0
  172. package/vona/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
  173. package/vona/src/suite/a-training/modules/training-student/src/bean/meta.index.ts +12 -0
  174. package/vona/src/suite/a-training/modules/training-student/src/bean/meta.version.ts +21 -0
  175. package/vona/src/suite/a-training/modules/training-student/src/bean/ssrMenu.student.ts +29 -0
  176. package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +15 -0
  177. package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +15 -0
  178. package/vona/src/suite/a-training/modules/training-student/src/controller/student.ts +74 -0
  179. package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +28 -0
  180. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectReq.tsx +44 -0
  181. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectRes.tsx +11 -0
  182. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx +45 -0
  183. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +42 -0
  184. package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +28 -0
  185. package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +25 -0
  186. package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +84 -0
  187. package/vona/src/suite/a-training/modules/training-student/src/index.ts +2 -0
  188. package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +10 -0
  189. package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +57 -0
  190. package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +173 -0
  191. package/vona/src/suite/a-training/modules/training-student/tsconfig.build.json +11 -0
  192. package/vona/src/suite/a-training/modules/training-student/tsconfig.json +7 -0
  193. package/vona/src/suite/a-training/package.json +12 -0
  194. package/vona/src/suite/a-training/tsconfig.base.json +4 -0
  195. package/vona/src/suite/a-training/tsconfig.json +10 -0
  196. package/zova/packages-cli/cli/package.json +2 -2
  197. package/zova/packages-cli/cli-set-front/cli/templates/openapi/config/boilerplate/module/openapi.config.ts +6 -1
  198. package/zova/packages-cli/cli-set-front/package.json +1 -1
  199. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.generate.ts +34 -4
  200. package/zova/packages-zova/zova/package.json +2 -2
  201. package/zova/pnpm-lock.yaml +416 -690
  202. package/zova/src/suite/a-training/modules/training-student/cli/openapi.config.ts +9 -0
  203. package/zova/src/suite/a-training/modules/training-student/package.json +52 -0
  204. package/zova/src/suite/a-training/modules/training-student/src/.metadata/component/formFieldLevel.ts +31 -0
  205. package/zova/src/suite/a-training/modules/training-student/src/.metadata/index.ts +258 -0
  206. package/zova/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +7 -0
  207. package/zova/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
  208. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/baseURL.ts +5 -0
  209. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/index.ts +3 -0
  210. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +196 -0
  211. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +4146 -0
  212. package/zova/src/suite/a-training/modules/training-student/src/api/trainingStudent.ts +151 -0
  213. package/zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts +43 -0
  214. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionDeleteForce.tsx +51 -0
  215. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx +56 -0
  216. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.level.tsx +63 -0
  217. package/zova/src/suite/a-training/modules/training-student/src/component/formFieldLevel/controller.tsx +117 -0
  218. package/zova/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +9 -0
  219. package/zova/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +9 -0
  220. package/zova/src/suite/a-training/modules/training-student/src/index.ts +2 -0
  221. package/zova/src/suite/a-training/modules/training-student/src/model/student.ts +42 -0
  222. package/zova/src/suite/a-training/modules/training-student/tsconfig.build.json +13 -0
  223. package/zova/src/suite/a-training/modules/training-student/tsconfig.json +5 -0
  224. package/zova/src/suite/a-training/package.json +12 -0
  225. package/zova/src/suite/a-training/tsconfig.base.json +4 -0
  226. package/zova/src/suite/a-training/tsconfig.json +4 -0
  227. package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/formFieldSelect/controller.tsx +29 -7
  228. package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/select/controller.tsx +34 -11
  229. package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
  230. package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +3 -3
  231. package/zova/src/suite-vendor/a-zova/modules/a-table/src/lib/tableCell.ts +1 -1
  232. package/zova/src/suite-vendor/a-zova/package.json +2 -2
@@ -0,0 +1,203 @@
1
+ # Generated Contract Consumption Specimen
2
+
3
+ This page is a focused specimen for one narrow frontend question:
4
+
5
+ > after backend-authored OpenAPI/schema contract material has already been generated into Zova, what does real frontend consumption look like?
6
+
7
+ Use this page together with:
8
+
9
+ - [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
10
+ - [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
11
+ - [Server Data](/frontend/server-data)
12
+ - [SDK Guide](/frontend/sdk-guide)
13
+ - [API Schema Guide](/frontend/api-schema-guide)
14
+ - [OpenAPI Runtime Under the Hood](/frontend/a-openapi-under-the-hood)
15
+ - [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
16
+ - [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
17
+ - [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive)
18
+ - [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive)
19
+
20
+ > [!TIP]
21
+ > **Generated-contract reading path**
22
+ >
23
+ > 1. **[Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)** — understand how backend-authored truth crosses the stack boundary
24
+ > 2. **[OpenAPI SDK Guide](/frontend/openapi-sdk-guide)** — configure and generate the frontend contract slice
25
+ > 3. **[Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen)** — see how generated contract material is consumed in practice
26
+ >
27
+ > **You are here:** step 3.
28
+ > **Previous recommended pages:** [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk) and [OpenAPI SDK Guide](/frontend/openapi-sdk-guide).
29
+
30
+ ## Why this page exists
31
+
32
+ Several existing docs already explain parts of this story well:
33
+
34
+ - the fullstack bridge from backend OpenAPI to frontend generation
35
+ - frontend OpenAPI config and module ownership
36
+ - the conceptual roles of `$sdk`, `$apiSchema`, and server-data layers
37
+ - the internals of `a-openapi` and `ModelResource`
38
+
39
+ What was still missing was one narrow page that shows the practical consumer-side chain after generation.
40
+
41
+ This page fills that gap.
42
+
43
+ It is not another generation guide and not another internals page. It is a specimen page about consumption.
44
+
45
+ ## Shortest accurate mental model
46
+
47
+ A practical generated-contract consumption path looks like this:
48
+
49
+ 1. backend-authored contract truth has already been generated into frontend contract material
50
+ 2. frontend accesses that material through generated API/schema surfaces such as `$api`, `$apiSchema`, and `$sdk`
51
+ 3. when the API still belongs to one resource boundary, `ModelResource` remains the stable owner
52
+ 4. list-page and entry-page shells consume that owner rather than recreating the contract ad hoc
53
+ 5. deeper runtime details still belong to the existing under-the-hood pages
54
+
55
+ That means generated contract consumption is not one thing only.
56
+
57
+ It usually moves through:
58
+
59
+ - generated API/schema access
60
+ - owner-level resource consumption
61
+ - page-shell/runtime consumption
62
+
63
+ ## Where generated contract material comes from
64
+
65
+ This page starts **after** the forward-chain bridge and generation steps.
66
+
67
+ Those earlier steps are owned by:
68
+
69
+ - [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
70
+ - [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
71
+
72
+ Once that handoff is complete, the frontend can consume generated contract material through several surfaces:
73
+
74
+ - generated API services
75
+ - generated API schema accessors
76
+ - `$sdk` schema/runtime helpers
77
+ - higher-level resource owners such as `ModelResource`
78
+
79
+ ## Shared consumption chain
80
+
81
+ A practical shared reading path is:
82
+
83
+ 1. `zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts`
84
+ 2. `zova/src/suite/a-training/modules/training-student/src/model/student.ts`
85
+ 3. optional direct schema/api consumer specimen: `zova/src/suite/a-home/modules/home-passport/src/model/passport.ts`
86
+
87
+ That short path already shows the shared contract-consumption layers that both list and entry pages depend on:
88
+
89
+ - generated schema access
90
+ - thin semantic model follow-up when needed
91
+ - stable resource-owner consumption
92
+
93
+ ## `$sdk`, `$apiSchema`, and generated-contract surfaces in one view
94
+
95
+ A practical split is:
96
+
97
+ - generated API services expose callable backend operations
98
+ - `$apiSchema` exposes schema-oriented access to those operations
99
+ - `$sdk` is the lower-level schema/runtime bridge beneath those higher-level consumers
100
+
101
+ A clear direct schema specimen exists in:
102
+
103
+ - `zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts`
104
+
105
+ Representative source facts:
106
+
107
+ - `@ApiSchema()` exposes a schema bean for the module
108
+ - methods such as `select()`, `create()`, `view()`, `delete()`, `update()`, `summary()`, and `deleteForce()` call `this.$sdk.createApiSchemas(...)`
109
+
110
+ A second useful specimen is:
111
+
112
+ - `zova/src/suite/a-home/modules/home-passport/src/model/passport.ts`
113
+
114
+ Representative source fact:
115
+
116
+ - `schemaLogin` is derived from `this.apiSchemasLogin.requestBody`
117
+
118
+ Together, these show the first practical boundary in the frontend contract path:
119
+
120
+ > the generated contract does not jump directly from backend OpenAPI into page internals. It first becomes frontend-accessible through schema- and SDK-oriented surfaces.
121
+
122
+ ## `ModelResource` as the shared owner before branch split
123
+
124
+ When the generated contract still belongs to one business resource, frontend consumption usually should not create a second competing owner.
125
+
126
+ A strong public specimen for this pattern exists in:
127
+
128
+ - `zova/src/suite/a-training/modules/training-student/src/model/student.ts`
129
+
130
+ Representative source facts:
131
+
132
+ - the module model is a semantic facade, not the primary resource owner
133
+ - it resolves `rest-resource.model.resource` through selector-backed access
134
+ - custom methods such as `summary(id)` and `deleteForce(id)` still delegate to resource-owner query and mutation helpers
135
+
136
+ This is the practical contract-consumption rule that matters most:
137
+
138
+ > when the API still belongs to the same resource, keep `ModelResource` as the stable owner and keep frontend follow-up thin.
139
+
140
+ At this point, the generated contract consumption path splits into two practical branches:
141
+
142
+ - **list branch** -> list route shell, schema row, query state, and table-facing owner surfaces
143
+ - **entry branch** -> entry route shell, `formMeta`, `formSchema`, `formData`, and submit/page-meta owner surfaces
144
+
145
+ ## Choose the branch that matches your question
146
+
147
+ ### List branch
148
+
149
+ Use this branch when your question is about:
150
+
151
+ - list-page schema and data consumption
152
+ - `schemaRow`, `schemaFilter`, and `select(query)`
153
+ - the route shell and `basic-page:blockPage` handoff
154
+
155
+ Continue with [Generated Contract Consumption: List Branch](/frontend/generated-contract-consumption-list-branch).
156
+
157
+ ### Entry branch
158
+
159
+ Use this branch when your question is about:
160
+
161
+ - `formMeta`, `formSchema`, and `formData`
162
+ - `create` / `view` / `update` schema consumption
163
+ - the route shell and `basic-pageentry:blockPageEntry` handoff
164
+
165
+ Continue with [Generated Contract Consumption: Entry Branch](/frontend/generated-contract-consumption-entry-branch).
166
+
167
+ ## What this page does not re-explain
168
+
169
+ This page deliberately does **not** re-teach in depth:
170
+
171
+ - how to configure or generate OpenAPI SDK output -> see [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
172
+ - the broader server-data abstraction ladder -> see [Server Data](/frontend/server-data)
173
+ - how `$apiSchema` is positioned conceptually -> see [API Schema Guide](/frontend/api-schema-guide)
174
+ - the lower runtime of `$sdk` and schema extraction -> see [OpenAPI Runtime Under the Hood](/frontend/a-openapi-under-the-hood)
175
+ - `ModelResource` internals -> see [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
176
+ - the broader `rest-resource` runtime bridge -> see [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
177
+
178
+ Its job is only to show the practical consumer-side handoff after generation.
179
+
180
+ ## Where to read next
181
+
182
+ - If your next question is still on the bridge/generation side, return to [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk) and [OpenAPI SDK Guide](/frontend/openapi-sdk-guide).
183
+ - If your next question is about the list-page branch, continue with [Generated Contract Consumption: List Branch](/frontend/generated-contract-consumption-list-branch).
184
+ - If your next question is about the entry-page branch, continue with [Generated Contract Consumption: Entry Branch](/frontend/generated-contract-consumption-entry-branch).
185
+ - If you now want a proof-oriented layer-by-layer consumer-side workflow, continue with [Generated Contract Consumption Verify Playbook](/frontend/generated-contract-consumption-verify-playbook).
186
+ - If the result is already wrong and you want symptom-first diagnosis, continue with [Generated Contract Consumption Debug Checklist](/frontend/generated-contract-consumption-debug-checklist).
187
+ - If your next question is about the conceptual server-data ladder, continue with [Server Data](/frontend/server-data), [SDK Guide](/frontend/sdk-guide), and [API Schema Guide](/frontend/api-schema-guide).
188
+ - If your next question is about the lower runtime beneath `$sdk`, continue with [OpenAPI Runtime Under the Hood](/frontend/a-openapi-under-the-hood).
189
+ - If your next question is about the resource-owner internals, continue with [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive).
190
+
191
+ ## Final takeaway
192
+
193
+ The cleanest way to read generated contract consumption in Zova is not to jump straight from generated OpenAPI into deep runtime internals.
194
+
195
+ Instead, read the chain like this:
196
+
197
+ - generated contract surfaces
198
+ - schema and SDK access
199
+ - stable resource owner
200
+ - pick the list or entry branch
201
+ - deeper runtime internals only if you still need them
202
+
203
+ That reading order keeps the consumer-side contract path visible without flattening the architecture into one giant runtime story.
@@ -0,0 +1,189 @@
1
+ # Generated Contract Consumption Verify Playbook
2
+
3
+ This page is a proof-oriented verification companion for one narrow frontend question:
4
+
5
+ > after generated contract material has already crossed into Zova, what must be true at each layer before I trust the consumer-side path?
6
+
7
+ Use this page together with:
8
+
9
+ - [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen)
10
+ - [Generated Contract Consumption: List Branch](/frontend/generated-contract-consumption-list-branch)
11
+ - [Generated Contract Consumption: Entry Branch](/frontend/generated-contract-consumption-entry-branch)
12
+ - [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
13
+ - [Server Data](/frontend/server-data)
14
+ - [API Schema Guide](/frontend/api-schema-guide)
15
+ - [OpenAPI Runtime Under the Hood](/frontend/a-openapi-under-the-hood)
16
+ - [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
17
+
18
+ > [!TIP]
19
+ > **Generated-contract verification path**
20
+ >
21
+ > 1. **[Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen)** — understand the shared consumer-side path
22
+ > 2. **[Generated Contract Consumption: List Branch](/frontend/generated-contract-consumption-list-branch)** or **[Generated Contract Consumption: Entry Branch](/frontend/generated-contract-consumption-entry-branch)** — pick the branch that matches your case
23
+ > 3. **[Generated Contract Consumption Verify Playbook](/frontend/generated-contract-consumption-verify-playbook)** — prove the consumer-side path layer by layer
24
+ >
25
+ > **You are here:** step 3.
26
+ > **Previous recommended pages:** [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen), [Generated Contract Consumption: List Branch](/frontend/generated-contract-consumption-list-branch), and [Generated Contract Consumption: Entry Branch](/frontend/generated-contract-consumption-entry-branch).
27
+
28
+ ## Why this page exists
29
+
30
+ The current frontend generated-contract family already gives you:
31
+
32
+ - a conceptual hub page
33
+ - a list-branch specimen
34
+ - an entry-branch specimen
35
+
36
+ What was still missing was one proof-oriented page that tells you what must be true at each consumer layer after a change.
37
+
38
+ This page fills that gap.
39
+
40
+ It is not another generation/config page and not another symptom-first debug page. It is the playbook for proving the consumer-side path is correct.
41
+
42
+ ## Phase 1: Scope the consumer path first
43
+
44
+ Before checking any details, decide what kind of question you actually have.
45
+
46
+ ### Shared contract-surface question
47
+
48
+ Use this when the issue is still above the branch split:
49
+
50
+ - does the generated contract surface exist?
51
+ - does the module expose the expected schema/API surface at all?
52
+
53
+ ### List-branch question
54
+
55
+ Use this when the issue is clearly about:
56
+
57
+ - list-page schema/data consumption
58
+ - `schemaRow`, `schemaFilter`, and `select(query)`
59
+ - the route shell and `basic-page:blockPage` handoff
60
+
61
+ ### Entry-branch question
62
+
63
+ Use this when the issue is clearly about:
64
+
65
+ - `formMeta`, `formSchema`, `formData`
66
+ - `create` / `view` / `update` schema consumption
67
+ - the route shell and `basic-pageentry:blockPageEntry` handoff
68
+
69
+ ### Deeper internals question
70
+
71
+ If the issue is already below these consumer-side layers, stop here and hand off to the deeper internals pages later instead of forcing this playbook to explain everything.
72
+
73
+ ## Phase 2: Prove the generated contract surface
74
+
75
+ Start with the smallest shared consumer-side anchors.
76
+
77
+ Primary anchors:
78
+
79
+ - `zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts`
80
+ - optional direct schema consumer: `zova/src/suite/a-home/modules/home-passport/src/model/passport.ts`
81
+
82
+ What to prove:
83
+
84
+ - the generated schema access surface exists where expected
85
+ - methods such as `select()`, `create()`, `view()`, `update()`, `summary()`, and `deleteForce()` still expose the intended contract slice
86
+ - if the module depends on direct schema-driven consumption, the expected request/response schema access still resolves correctly
87
+
88
+ If this phase fails, do not debug deeper page/runtime behavior yet. The consumer path is already wrong too early.
89
+
90
+ ## Phase 3: Prove the stable owner boundary
91
+
92
+ Once the generated surface is present, prove that the module still consumes it through the correct owner boundary.
93
+
94
+ Primary anchor:
95
+
96
+ - `zova/src/suite/a-training/modules/training-student/src/model/student.ts`
97
+
98
+ What to prove:
99
+
100
+ - the module model still keeps `ModelResource` as the stable owner when the API belongs to the same resource
101
+ - thin semantic follow-up still delegates correctly to owner-backed query/mutation helpers
102
+ - the module did not accidentally invent a competing second owner for the same resource contract
103
+
104
+ A practical rule is:
105
+
106
+ > if the generated contract still belongs to the same resource, the consumer path should still stay owner-first.
107
+
108
+ ## Phase 4A: Prove the list branch
109
+
110
+ Only enter this phase when the problem is clearly on the list-page branch.
111
+
112
+ Primary anchors:
113
+
114
+ - `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/resource/controller.tsx`
115
+ - `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx`
116
+
117
+ What to prove:
118
+
119
+ - the list route shell resolves the expected `resource`
120
+ - `apiSchemasSelect.sdk` still autoloads where expected
121
+ - `schemaRow`, `schemaFilter`, and list data flow are still exposed correctly
122
+ - `basic-page:blockPage` still becomes the deeper list runtime owner
123
+
124
+ If this phase passes, the generated contract has successfully crossed into the list branch.
125
+
126
+ ## Phase 4B: Prove the entry branch
127
+
128
+ Only enter this phase when the problem is clearly on the entry-page branch.
129
+
130
+ Primary anchors:
131
+
132
+ - `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/entry/controller.tsx`
133
+ - `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockPageEntry/controller.tsx`
134
+ - `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockForm/controller.tsx`
135
+ - `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockToolbarRow/controller.tsx`
136
+
137
+ What to prove:
138
+
139
+ - the entry route shell resolves `resource`, `id`, and `formScene`
140
+ - owner-level `formMeta`, `formSchema`, and `formData` still load correctly
141
+ - `blockForm` and `blockToolbarRow` still consume the correct host context
142
+ - the submit and page-meta path still belongs to the deeper page-entry runtime owner rather than scattered local code
143
+
144
+ If this phase passes, the generated contract has successfully crossed into the entry branch.
145
+
146
+ ## Phase 5: Escalate only after the proof steps pass
147
+
148
+ Only after the earlier proof steps already pass should you descend into:
149
+
150
+ - `a-openapi` lower runtime internals
151
+ - `ModelResource` internals
152
+ - deeper list runtime internals
153
+ - deeper entry runtime internals
154
+
155
+ That is the boundary that keeps this page useful instead of turning it into a full runtime deep dive.
156
+
157
+ ## What this page does not re-explain
158
+
159
+ This page deliberately does **not** re-teach:
160
+
161
+ - frontend OpenAPI config/generation -> see [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
162
+ - the broader server-data abstraction ladder -> see [Server Data](/frontend/server-data)
163
+ - the conceptual role of `$apiSchema` -> see [API Schema Guide](/frontend/api-schema-guide)
164
+ - lower `a-openapi` runtime internals -> see [OpenAPI Runtime Under the Hood](/frontend/a-openapi-under-the-hood)
165
+ - `ModelResource` internals -> see [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
166
+ - deeper list runtime -> see [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive)
167
+ - deeper entry runtime -> see [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive)
168
+
169
+ Its job is only to tell you what must be true at each consumer-side layer before you trust the generated-contract path.
170
+
171
+ ## Where to read next
172
+
173
+ - If you need the shared consumer-side overview first, return to [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen).
174
+ - If you need the list or entry branch specimen first, continue with [Generated Contract Consumption: List Branch](/frontend/generated-contract-consumption-list-branch) or [Generated Contract Consumption: Entry Branch](/frontend/generated-contract-consumption-entry-branch).
175
+ - If the visible result is already wrong and you want symptom-first diagnosis, continue with [Generated Contract Consumption Debug Checklist](/frontend/generated-contract-consumption-debug-checklist).
176
+ - If the generated surface itself is missing or stale, hand off to [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk) and [OpenAPI SDK Guide](/frontend/openapi-sdk-guide).
177
+ - If the issue is below the current boundary, descend into [OpenAPI Runtime Under the Hood](/frontend/a-openapi-under-the-hood), [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive), [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive), or [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive).
178
+
179
+ ## Final takeaway
180
+
181
+ The cleanest way to verify a generated-contract consumer path is not to jump straight into deep runtime debugging.
182
+
183
+ First prove:
184
+
185
+ - the generated contract surface
186
+ - the stable owner boundary
187
+ - the matching list or entry branch handoff
188
+
189
+ Only then descend into deeper internals if you still need them.
@@ -13,7 +13,7 @@ This matters in large TypeScript-heavy systems because generic components help k
13
13
  Example: convert component `card` into a generic component.
14
14
 
15
15
  ```bash
16
- npm run zova :refactor:componentGeneric card -- --module=demo-student
16
+ npm run zova :refactor:componentGeneric card -- --module=training-student
17
17
  ```
18
18
 
19
19
  ## Why the CLI matters here
@@ -28,14 +28,22 @@ Use this page as the main frontend hub, then choose the path that matches your t
28
28
 
29
29
  ### Getting started and architecture spine
30
30
 
31
- Start here when you need the shortest route to the frontend mental model and startup context:
31
+ Start here when you need the shortest route to the frontend mental model and startup context.
32
+
33
+ A practical rule is:
34
+
35
+ - if you need the broadest entry page, stay on this page
36
+ - if you need help choosing a topic cluster, continue with [Frontend Source Reading Roadmap](/frontend/frontend-source-reading-roadmap)
37
+ - if you already know the topic and want file-order guidance, continue with [Zova Source Reading Map](/frontend/zova-source-reading-map)
38
+
39
+ Recommended starting set:
32
40
 
33
41
  - [Quickstart](/frontend/quickstart)
34
42
  - [Foundation](/frontend/foundation)
43
+ - [Reading Zova for Vue Developers](/frontend/reading-zova-for-vue-developers)
44
+ - [Frontend Source Reading Roadmap](/frontend/frontend-source-reading-roadmap)
45
+ - [Zova Source Reading Map](/frontend/zova-source-reading-map)
35
46
  - [IoC and Beans](/frontend/ioc-and-beans)
36
- - [Behavior Guide](/frontend/behavior-guide)
37
- - [Modules and Suites](/frontend/modules-and-suites)
38
- - [Module Scope](/frontend/module-scope)
39
47
  - [Design Principles](/frontend/design-principles)
40
48
  - [Environment and Config Guide](/frontend/environment-config-guide)
41
49
  - [App Startup Guide](/frontend/app-startup-guide)
@@ -51,14 +59,33 @@ Use this path when the task is page-oriented, route-oriented, or the first time
51
59
  - [Page Params Guide](/frontend/page-params-guide)
52
60
  - [Zod Guide](/frontend/zod-guide)
53
61
  - [Page Route Guide](/frontend/page-route-guide)
62
+ - [A-Router Guide](/frontend/a-router-guide)
54
63
  - [Route Alias Guide](/frontend/route-alias-guide)
55
64
  - [Navigation Guards Guide](/frontend/navigation-guards-guide)
65
+ - [Zova Router Under the Hood](/frontend/zova-router-under-the-hood)
66
+ - [Router View Hosts Guide](/frontend/router-view-hosts-guide)
67
+ - [Router Tabs Introduction](/frontend/router-tabs-introduction)
68
+ - [Router Tabs Overview](/frontend/router-tabs-overview)
69
+ - [Router Tabs Mechanism](/frontend/router-tabs-mechanism)
70
+ - [Page Meta Guide](/frontend/page-meta-guide)
71
+ - [Router Tabs Layout Integration](/frontend/router-tabs-layout-integration)
72
+ - [Router Tabs vs Stack](/frontend/router-tabs-vs-stack)
73
+ - [Router Stack Guide](/frontend/router-stack-guide)
74
+ - [Router Tabs Route Meta Cookbook](/frontend/router-tabs-route-meta-cookbook)
56
75
 
57
76
  ### Components and UI flow
58
77
 
59
- Use this path when the task is about UI composition, component contracts, or theme work:
78
+ Use this path when the task is about UI composition, component contracts, form or table architecture, form or table internals, form or table source reading, or theme work:
60
79
 
61
80
  - [Component Guide](/frontend/component-guide)
81
+ - [Form Guide](/frontend/form-guide)
82
+ - [Zova Form Under the Hood](/frontend/zova-form-under-the-hood)
83
+ - [Zova Form Source Reading Map](/frontend/zova-form-source-reading-map)
84
+ - [Table Guide](/frontend/table-guide)
85
+ - [TableCell Authoring Cookbook](/frontend/table-cell-cookbook)
86
+ - [Table + Resource CRUD Cookbook](/frontend/table-resource-crud-cookbook)
87
+ - [Zova Table Under the Hood](/frontend/zova-table-under-the-hood)
88
+ - [Zova Table Source Reading Map](/frontend/zova-table-source-reading-map)
62
89
  - [Component Props Guide](/frontend/component-props-guide)
63
90
  - [Component v-model Guide](/frontend/component-v-model-guide)
64
91
  - [Generic Component Guide](/frontend/generic-component-guide)
@@ -74,6 +101,12 @@ Use this path when the task is about data loading, API contracts, generated SDKs
74
101
  - [API Guide](/frontend/api-guide)
75
102
  - [Model Architecture](/frontend/model-architecture)
76
103
  - [Model State Guide](/frontend/model-state-guide)
104
+ - [Model Resource Owner Pattern](/frontend/model-resource-owner-pattern)
105
+ - [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
106
+ - [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map)
107
+ - [Using ModelResource in Your Module](/frontend/model-resource-usage-guide)
108
+ - [Resource Model Best Practices](/frontend/model-resource-best-practices)
109
+ - [Resource Model Cookbook](/frontend/model-resource-cookbook)
77
110
  - [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
78
111
  - [API Schema Guide](/frontend/api-schema-guide)
79
112
  - [SDK Guide](/frontend/sdk-guide)
@@ -200,6 +200,12 @@ Read this together with:
200
200
 
201
201
  Those pages explain how beans fit into module boundaries, scope-based resources, the existing Behavior scene, and the broader Zova architectural model.
202
202
 
203
+ If you want a Vue-to-Zova reading bridge or a deeper runtime/source explanation, also read:
204
+
205
+ - [Reading Zova for Vue Developers](/frontend/reading-zova-for-vue-developers)
206
+ - [Zova Reactivity Under the Hood](/frontend/zova-reactivity-under-the-hood)
207
+ - [Zova Source Reading Map](/frontend/zova-source-reading-map)
208
+
203
209
  ## Implementation checks for frontend bean-architecture changes
204
210
 
205
211
  When editing Zova frontend code, ask:
@@ -56,6 +56,7 @@ Mocking fits naturally with:
56
56
 
57
57
  - [API Guide](/frontend/api-guide)
58
58
  - [Server Data](/frontend/server-data)
59
+ - [Fetch Interceptor Guide](/frontend/fetch-interceptor-guide)
59
60
  - [Page Guide](/frontend/page-guide)
60
61
 
61
62
  A common workflow is: