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,251 @@
1
+ # Zova App Guide
2
+
3
+ This guide explains the root app-shell module in Zova through the current public Cabloy Basic source:
4
+
5
+ ```text
6
+ zova/src/suite-vendor/a-zova/modules/a-app
7
+ ```
8
+
9
+ Use this page when you want to understand:
10
+
11
+ - what `a-app` is responsible for
12
+ - what `a-app` is **not** responsible for
13
+ - how the root app wrapper reaches the routed tree
14
+ - where app-wide behavior wrapping enters the runtime
15
+ - which files to read first when tracing the source
16
+
17
+ ## Why this page exists
18
+
19
+ Several other frontend guides already explain routing, startup, behavior, and SSR.
20
+
21
+ What they do not explain directly is the thin root module that connects those concerns at the app host level.
22
+
23
+ That root module is `a-app`.
24
+
25
+ In the current Basic source, `a-app` is not a feature module full of pages or business services. It is a small app-shell module whose main job is to host the root app controller, apply app-level metadata, initialize app-wide behaviors, and render the routed tree.
26
+
27
+ ## The shortest accurate mental model
28
+
29
+ A practical mental model is:
30
+
31
+ 1. `a-app` exposes the root app component surface
32
+ 2. `ZApp` mounts the root controller
33
+ 3. `ControllerApp` initializes app meta and root behaviors
34
+ 4. `ControllerApp.render()` returns the routed tree through `RouterView`
35
+ 5. that routed tree is wrapped by `BeanBehaviorsHolder` so app-wide behaviors can participate around it
36
+
37
+ That means `a-app` is the root app host, not the owner of every frontend concern.
38
+
39
+ ## What `a-app` is
40
+
41
+ In the current Basic source, `a-app` is mainly these five things:
42
+
43
+ - a **module integration surface** through generated metadata
44
+ - a **root component wrapper** through `ZApp`
45
+ - an **app controller** through `ControllerApp`
46
+ - a **root behavior host** through `BeanBehaviorsHolder`
47
+ - a **routed-content host** through `RouterView`
48
+
49
+ Those roles are enough to make it a real architectural boundary even though the module is small.
50
+
51
+ ## What `a-app` is not
52
+
53
+ It is equally important to avoid over-assigning responsibilities to `a-app`.
54
+
55
+ `a-app` does **not** itself define:
56
+
57
+ - page route records
58
+ - page controllers
59
+ - model beans
60
+ - standalone business services
61
+ - the actual layout implementations
62
+ - the full SSR orchestration flow
63
+
64
+ Those responsibilities belong to other routing, layout, model, service, and SSR layers.
65
+
66
+ So when you read `a-app`, read it as the root host that connects those systems, not as the place where all of them are authored.
67
+
68
+ ## The core source-reading path
69
+
70
+ When reading `a-app`, use this order:
71
+
72
+ 1. `zova/src/suite-vendor/a-zova/modules/a-app/src/.metadata/this.ts`
73
+ 2. `zova/src/suite-vendor/a-zova/modules/a-app/src/.metadata/index.ts`
74
+ 3. `zova/src/suite-vendor/a-zova/modules/a-app/src/.metadata/component/app.ts`
75
+ 4. `zova/src/suite-vendor/a-zova/modules/a-app/src/component/app/controller.tsx`
76
+ 5. `zova/src/suite-vendor/a-zova/modules/a-app/src/config/config.ts`
77
+
78
+ That order moves from module identity, to generated integration surface, to component wrapper, to runtime controller logic, to configuration hook points.
79
+
80
+ ## What each source file clarifies
81
+
82
+ ### `src/.metadata/this.ts`
83
+
84
+ This file gives the module identity quickly:
85
+
86
+ - module name is `a-app`
87
+ - module scope is exported as `ScopeModule`
88
+
89
+ Read this file first when you want to anchor the rest of the source path.
90
+
91
+ ### `src/.metadata/index.ts`
92
+
93
+ This is the generated integration map for the module.
94
+
95
+ It shows that `a-app` contributes:
96
+
97
+ - the app controller registration
98
+ - the `ZApp` component export
99
+ - the module config typing
100
+ - the module scope typing
101
+
102
+ This file is the best single map of how the module enters the larger Zova container and component records.
103
+
104
+ ### `src/.metadata/component/app.ts`
105
+
106
+ This file shows the public wrapper component:
107
+
108
+ - `ZApp` is defined with `defineComponent(...)`
109
+ - it calls `useController(ControllerApp, ...)`
110
+ - it exposes `controllerRef` as a controller-facing hook
111
+
112
+ The important idea is that `ZApp` is a thin wrapper whose main job is to mount the controller-oriented runtime path.
113
+
114
+ ## `src/component/app/controller.tsx`
115
+
116
+ This is the real runtime center of the module.
117
+
118
+ Its main jobs are:
119
+
120
+ - call `$useMeta(...)` to set app-level document metadata
121
+ - initialize `BeanBehaviorsHolder`
122
+ - read root behaviors from `scope.config.behaviors`
123
+ - render the routed tree through `RouterView`
124
+
125
+ This is the file that shows the actual app-host responsibilities most clearly.
126
+
127
+ ## `src/config/config.ts`
128
+
129
+ This file is small but important.
130
+
131
+ It exposes the module config surface for:
132
+
133
+ - `behaviors`
134
+
135
+ That matters because it shows that `a-app` is intentionally designed to receive app-wide behavior configuration from outside the module instead of hard-coding every root behavior locally.
136
+
137
+ ## Runtime flow from `ZApp` to routed content
138
+
139
+ The shortest practical runtime flow is:
140
+
141
+ 1. `ZApp` calls `useController(ControllerApp, ...)`
142
+ 2. the framework creates and loads `ControllerApp`
143
+ 3. `ControllerApp.__init__()` sets app-level meta through `$useMeta(...)`
144
+ 4. `ControllerApp.__init__()` initializes `BeanBehaviorsHolder`
145
+ 5. the holder reads app-wide behavior declarations from `scope.config.behaviors`
146
+ 6. `ControllerApp.render()` returns behavior-wrapped `<RouterView />`
147
+ 7. the routed page tree continues from the router and layout layers
148
+
149
+ This page stops at the root app-host boundary. For the deeper behavior-composition path behind `BeanBehaviorsHolder`, continue with [Root Behaviors Guide](/frontend/root-behaviors-guide).
150
+
151
+ ## Relationship to routing
152
+
153
+ `a-app` does not define the page route records themselves.
154
+
155
+ Instead, it hosts the routed tree by rendering `RouterView`.
156
+
157
+ That means routing questions usually split into two layers:
158
+
159
+ - `a-app` as the root host that renders the routed content entry
160
+ - router and layout layers as the owners of route records, layout choice, guards, and routed-host behavior
161
+
162
+ Read together with:
163
+
164
+ - [Page Route Guide](/frontend/page-route-guide)
165
+ - [A-Router Guide](/frontend/a-router-guide)
166
+ - [Zova Router Under the Hood](/frontend/zova-router-under-the-hood)
167
+ - [Router View Hosts Guide](/frontend/router-view-hosts-guide)
168
+
169
+ ## Relationship to behaviors
170
+
171
+ `a-app` is also the root behavior host in the current Basic source.
172
+
173
+ Because `ControllerApp` initializes `BeanBehaviorsHolder` from `scope.config.behaviors`, project or module-level code can extend the root app host by contributing behavior configuration.
174
+
175
+ A practical way to think about this is:
176
+
177
+ - `a-app` owns the root behavior hosting point
178
+ - other modules can contribute app-wide behavior declarations to that hosting point
179
+
180
+ Read together with:
181
+
182
+ - [Behavior Guide](/frontend/behavior-guide)
183
+ - [Root Behaviors Guide](/frontend/root-behaviors-guide)
184
+
185
+ ## Relationship to startup
186
+
187
+ App startup and `a-app` are related, but they are not the same concept.
188
+
189
+ - **app startup** decides when the application lifecycle becomes operational
190
+ - **`a-app`** is the root app host component/controller path inside that operational application
191
+
192
+ That distinction helps avoid placing startup logic into the root app controller just because it feels globally visible.
193
+
194
+ Read together with:
195
+
196
+ - [App Startup Guide](/frontend/app-startup-guide)
197
+ - [System Startup Guide](/frontend/system-startup-guide)
198
+
199
+ ## Relationship to SSR
200
+
201
+ `a-app` participates in the frontend runtime side of SSR because it is part of the application render tree.
202
+
203
+ But it is not the complete SSR orchestration layer.
204
+
205
+ In the broader SSR model:
206
+
207
+ - Vona owns request-level SSR orchestration
208
+ - the built frontend bundle provides the SSR entry
209
+ - Zova SSR runtime resolves and renders the frontend route tree
210
+ - `a-app` participates as part of that root render tree
211
+
212
+ Read together with:
213
+
214
+ - [SSR Architecture Overview](/frontend/ssr-architecture-overview)
215
+
216
+ ## A compact interpretation of app-wide extension
217
+
218
+ When you need app-wide overlays or wrappers, the root behavior host is often a better fit than forcing that concern into unrelated page code.
219
+
220
+ A practical extension model is:
221
+
222
+ - keep `a-app` as the thin root host
223
+ - let other modules contribute root behavior configuration
224
+ - let those behaviors wrap the routed tree in a reusable way
225
+
226
+ That keeps the root host small while still making it extensible.
227
+
228
+ ## Where to read next
229
+
230
+ After this page, the most useful next paths are usually:
231
+
232
+ - [Root Behaviors Guide](/frontend/root-behaviors-guide)
233
+ - [App Startup Guide](/frontend/app-startup-guide)
234
+ - [Page Route Guide](/frontend/page-route-guide)
235
+ - [Behavior Guide](/frontend/behavior-guide)
236
+ - [Zova Reactivity Under the Hood](/frontend/zova-reactivity-under-the-hood)
237
+ - [Zova Source Reading Map](/frontend/zova-source-reading-map)
238
+ - [SSR Architecture Overview](/frontend/ssr-architecture-overview)
239
+
240
+ ## Final takeaway
241
+
242
+ The most accurate way to read `a-app` is not as a generic Vue root component and not as the owner of the whole frontend system.
243
+
244
+ Read it as the thin Zova app-shell host that:
245
+
246
+ - mounts the root app controller
247
+ - applies app-level meta
248
+ - hosts root behaviors
249
+ - renders the routed tree
250
+
251
+ That is the source-confirmed role of `a-app` in the current Basic frontend architecture.
@@ -0,0 +1,293 @@
1
+ # Zova Form Source Reading Map
2
+
3
+ This page is a practical map for contributors and AI workflows that need to read Zova Form source code efficiently.
4
+
5
+ Use this page after [Zova Form Under the Hood](/frontend/zova-form-under-the-hood) when your next question is not the runtime model itself, but which files to read first for a specific form-internals topic.
6
+
7
+ It answers a narrow question:
8
+
9
+ > when I need to understand how Zova Form works internally, which files should I read first, and in what order?
10
+
11
+ Use this page together with:
12
+
13
+ - [Form Guide](/frontend/form-guide)
14
+ - [Zova Form Under the Hood](/frontend/zova-form-under-the-hood)
15
+ - [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
16
+ - [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map)
17
+ - [Zova Source Reading Map](/frontend/zova-source-reading-map)
18
+ - [Behavior Guide](/frontend/behavior-guide)
19
+ - [API Schema Guide](/frontend/api-schema-guide)
20
+ - [Model Resource Owner Pattern](/frontend/model-resource-owner-pattern)
21
+
22
+ > [!TIP]
23
+ > **Zova Form docs path**
24
+ >
25
+ > 1. **[Form Guide](/frontend/form-guide)** — learn the public authoring surface
26
+ > 2. **[Zova Form Under the Hood](/frontend/zova-form-under-the-hood)** — learn how the runtime pieces cooperate
27
+ > 3. **[Zova Form Source Reading Map](/frontend/zova-form-source-reading-map)** — learn which files to read next
28
+ >
29
+ > **You are here:** step 3.
30
+ > **Previous page:** [Zova Form Under the Hood](/frontend/zova-form-under-the-hood).
31
+
32
+ ## Why this page exists
33
+
34
+ The `a-form` module sits at the intersection of several Zova concerns at once:
35
+
36
+ - controller-oriented component design
37
+ - schema-driven rendering
38
+ - Zod and TanStack validation
39
+ - behavior-based field wrapping
40
+ - resource-driven CRUD page integration
41
+
42
+ This page exists for one narrow job:
43
+
44
+ - [Form Guide](/frontend/form-guide) explains how to author forms
45
+ - [Zova Form Under the Hood](/frontend/zova-form-under-the-hood) explains how the runtime pieces cooperate
46
+ - this page gives the shortest file-order paths for specific form questions
47
+
48
+ ## How to use this page
49
+
50
+ For each topic below:
51
+
52
+ 1. start with the public guide to refresh the architectural intent
53
+ 2. read the first source file to identify the public surface
54
+ 3. continue into the next runtime file only if you still need the implementation detail
55
+ 4. stop as soon as you have enough information for the task
56
+
57
+ The goal is not to read the entire form stack every time. The goal is to choose the shortest correct path.
58
+
59
+ ## 1. Public form surface and wrapper entrypoints
60
+
61
+ Use this path when you are asking questions like:
62
+
63
+ - what is the public Zova Form surface?
64
+ - where do `ZForm` and `ZFormField` enter the runtime?
65
+ - how does `controllerRef` reach the controller instance?
66
+
67
+ ### Read the docs first
68
+
69
+ - [Form Guide](/frontend/form-guide)
70
+ - [Component Guide](/frontend/component-guide)
71
+ - [Reading Zova for Vue Developers](/frontend/reading-zova-for-vue-developers)
72
+
73
+ ### Then read source in this order
74
+
75
+ 1. `zova/src/suite-vendor/a-zova/modules/a-form/src/.metadata/component/form.ts`
76
+ 2. `zova/src/suite-vendor/a-zova/modules/a-form/src/.metadata/component/formField.ts`
77
+ 3. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/form/controller.tsx`
78
+ 4. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/formField/controller.tsx`
79
+ 5. `zova/packages-zova/zova-core/src/composables/useController.ts`
80
+
81
+ ### What each file clarifies
82
+
83
+ - metadata wrapper files show how the public component wrappers enter `useController(...)`
84
+ - `form.ts` exposes `ZForm` and its typed controller-facing props surface
85
+ - `formField.ts` exposes `ZFormField` and the controller-aware slot contract
86
+ - `useController.ts` shows how the controller instance is created and bound to the wrapper component lifecycle
87
+
88
+ ## 2. Form controller ownership and form runtime
89
+
90
+ Use this path when you are asking questions like:
91
+
92
+ - where is the form instance created?
93
+ - where does `formState` come from?
94
+ - how does `submit()` or `reset()` work in Zova Form?
95
+
96
+ ### Read the docs first
97
+
98
+ - [Form Guide](/frontend/form-guide)
99
+ - [Zod Guide](/frontend/zod-guide)
100
+
101
+ ### Then read source in this order
102
+
103
+ 1. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/form/controller.tsx`
104
+ 2. `zova/src/suite-vendor/a-zova/modules/a-form/src/lib/beanControllerFormBase.ts`
105
+ 3. `zova/src/suite-vendor/a-zova/modules/a-form/src/lib/beanControllerPageFormBase.ts`
106
+ 4. `zova/src/suite-vendor/a-zova/modules/a-form/src/types/form.ts`
107
+
108
+ ### What each file clarifies
109
+
110
+ - `component/form/controller.tsx` is the main form runtime owner
111
+ - `beanControllerFormBase.ts` shows the shared `$useForm(...)` wrapper around TanStack Form
112
+ - `beanControllerPageFormBase.ts` shows the page-controller-oriented variant for form pages
113
+ - `types/form.ts` shows the exposed type contracts for submit data, state, and events
114
+
115
+ ## 3. Field controller ownership and field render flow
116
+
117
+ Use this path when you are asking questions like:
118
+
119
+ - how is one field connected to the parent form?
120
+ - where do `setValue(...)` and `handleBlur()` live?
121
+ - how does one field become a rendered vnode?
122
+
123
+ ### Read the docs first
124
+
125
+ - [Form Guide](/frontend/form-guide)
126
+ - [Behavior Guide](/frontend/behavior-guide)
127
+
128
+ ### Then read source in this order
129
+
130
+ 1. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/formField/controller.tsx`
131
+ 2. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/formField/render.tsx`
132
+ 3. `zova/src/suite-vendor/a-zova/modules/a-form/src/types/formField.ts`
133
+ 4. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/formFieldPreset/controller.tsx`
134
+ 5. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/formFieldBlank/controller.tsx`
135
+
136
+ ### What each file clarifies
137
+
138
+ - `formField/controller.tsx` is the field runtime owner and host-injected child of the form controller
139
+ - `formField/render.tsx` shows the final render handoff through behaviors and `zovaJsx.render(...)`
140
+ - `types/formField.ts` shows field options, layout options, render context, and the `$$FieldProps` marker
141
+ - `formFieldPreset/controller.tsx` shows the preset-driven delegation path
142
+ - `formFieldBlank/controller.tsx` shows the free-row slot-only path
143
+
144
+ ## 4. Schema-driven rendering and CEL/JSX resolution
145
+
146
+ Use this path when you are asking questions like:
147
+
148
+ - how does a schema become rendered fields?
149
+ - where do field props come from?
150
+ - how are metadata expressions or render providers resolved?
151
+
152
+ ### Read the docs first
153
+
154
+ - [API Schema Guide](/frontend/api-schema-guide)
155
+ - [Form Guide](/frontend/form-guide)
156
+
157
+ ### Then read source in this order
158
+
159
+ 1. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/form/controller.tsx`
160
+ 2. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/form/render.tsx`
161
+ 3. `zova/src/suite-vendor/a-zova/modules/a-form/src/types/formField.ts`
162
+
163
+ ### What each file clarifies
164
+
165
+ - `form/controller.tsx` shows schema property loading, field CEL scope creation, and top-level field prop extraction
166
+ - `form/render.tsx` shows how schema properties become children when the form body is not manually overridden
167
+ - `types/formField.ts` shows the field render-context shapes that the runtime passes through to renderers and behaviors
168
+
169
+ ## 5. Validation, submit flow, and server error normalization
170
+
171
+ Use this path when you are asking questions like:
172
+
173
+ - where is submit wired?
174
+ - how are form-level and field-level validators chosen?
175
+ - how are server validation errors pushed back into the form state?
176
+
177
+ ### Read the docs first
178
+
179
+ - [Form Guide](/frontend/form-guide)
180
+ - [Zod Guide](/frontend/zod-guide)
181
+
182
+ ### Then read source in this order
183
+
184
+ 1. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/form/controller.tsx`
185
+ 2. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/formField/controller.tsx`
186
+ 3. `zova/src/suite-vendor/a-zova/modules/a-form/src/types/form.ts`
187
+
188
+ ### What each file clarifies
189
+
190
+ - `form/controller.tsx` shows `submit(...)`, `_createForm()`, `onSubmitInvalid`, `onSubmitData`, and error normalization
191
+ - `formField/controller.tsx` shows how field validators are derived from Zod schema or explicit field options
192
+ - `types/form.ts` shows the public event and submit-type contracts that the rest of the framework consumes
193
+
194
+ ## 6. Provider config, default renderers, and behavior-based layout
195
+
196
+ Use this path when you are asking questions like:
197
+
198
+ - where does the default `Input` renderer come from?
199
+ - how does `formProvider` affect field rendering?
200
+ - where do form-field layout behaviors enter the pipeline?
201
+
202
+ ### Read the docs first
203
+
204
+ - [Form Guide](/frontend/form-guide)
205
+ - [Behavior Guide](/frontend/behavior-guide)
206
+
207
+ ### Then read source in this order
208
+
209
+ 1. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/formField/controller.tsx`
210
+ 2. `zova/src/suite/cabloy-basic/modules/basic-adapter/src/config/config.ts`
211
+ 3. `zova/src/suite/a-home/modules/home-login/src/page/login/render.tsx`
212
+ 4. `zova/src/suite-vendor/a-zova/modules/a-form/src/component/formField/render.tsx`
213
+
214
+ ### What each file clarifies
215
+
216
+ - `formField/controller.tsx` shows how field props, layout, options, provider config, and behaviors are merged
217
+ - `basic-adapter/src/config/config.ts` shows the default Basic provider components and layout behaviors
218
+ - `home-login/render.tsx` shows a page-level `formProvider` override for layout behavior
219
+ - `formField/render.tsx` shows how the behavior-wrapped render path leads to the final vnode
220
+
221
+ ## 7. Resource-driven CRUD page integration
222
+
223
+ Use this path when you are asking questions like:
224
+
225
+ - how does a resource page feed schema and data into `ZForm`?
226
+ - where do `formMeta`, `formSchema`, and `formProvider` come from in CRUD pages?
227
+ - how does submit delegate back to resource mutation logic?
228
+
229
+ ### Read the docs first
230
+
231
+ - [Form Guide](/frontend/form-guide)
232
+ - [Model Resource Owner Pattern](/frontend/model-resource-owner-pattern)
233
+ - [Tutorial 2: Create Your First CRUD](/fullstack/tutorial-2-first-crud)
234
+ - [Tutorial 3: Frontend Metadata Sharing](/fullstack/tutorial-3-frontend-metadata-sharing)
235
+
236
+ ### Then read source in this order
237
+
238
+ 1. `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockPageEntry/controller.tsx`
239
+ 2. `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockForm/controller.tsx`
240
+ 3. `zova/src/suite-vendor/a-zova/modules/a-form/src/lib/utils.ts`
241
+ 4. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockFilter/controller.tsx`
242
+
243
+ ### What each file clarifies
244
+
245
+ - `blockPageEntry/controller.tsx` shows the resource-driven CRUD form orchestration path
246
+ - `blockForm/controller.tsx` shows how a block-level wrapper passes schema/data/provider/meta into `ZForm`
247
+ - `lib/utils.ts` shows the canonical scene-to-form-meta translation helpers
248
+ - `blockFilter/controller.tsx` shows the lighter-weight filter-form branch using the same form module
249
+
250
+ If your next question becomes how `formScene` becomes `formMeta`, then `pageMeta`, and finally visible shell/tab state, continue with [Form Scene to Page Meta Guide](/frontend/form-scene-to-page-meta-guide).
251
+
252
+ ## 8. Representative specimens to read before editing the framework
253
+
254
+ Use this section when you want one small example before reading the framework internals.
255
+
256
+ ### Read these specimens first
257
+
258
+ 1. `zova/src/suite/a-demo/modules/demo-basic/src/page/toolOne/controller.tsx`
259
+ 2. `zova/src/suite/a-demo/modules/demo-basic/src/page/toolOne/render.tsx`
260
+ 3. `zova/src/suite/a-home/modules/home-login/src/page/login/render.tsx`
261
+
262
+ ### Why these three specimens matter
263
+
264
+ - `toolOne` shows both schema-driven and manual form usage in one page
265
+ - `home-login` shows a real page using presets, blank rows, and provider-level layout override
266
+ - together they give you the public authoring shape before you descend into the form runtime
267
+
268
+ ## 9. A compact reading strategy
269
+
270
+ When in doubt, use this order:
271
+
272
+ 1. [Form Guide](/frontend/form-guide)
273
+ 2. one real usage specimen such as `toolOne` or `home-login`
274
+ 3. the public wrapper metadata under `src/.metadata/component/*.ts`
275
+ 4. `component/form/controller.tsx`
276
+ 5. `component/formField/controller.tsx`
277
+ 6. render beans, types, and integration layers only if you still need more detail
278
+
279
+ That order usually gets you to the answer faster than starting from the deepest runtime files first.
280
+
281
+ ## 10. Final takeaway
282
+
283
+ The fastest way to read Zova Form accurately is not to memorize every file in `a-form`.
284
+
285
+ It is to recognize which question you are asking:
286
+
287
+ - public wrapper question
288
+ - form-runtime question
289
+ - field-render question
290
+ - validation question
291
+ - resource-CRUD integration question
292
+
293
+ Then start from the smallest public file that matches that question and only descend into deeper runtime files as needed.