cabloy 5.1.61 → 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 (201) hide show
  1. package/.claude/skills/cabloy-backend-scaffold/SKILL.md +2 -0
  2. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -1
  3. package/.claude/skills/cabloy-domain-planning/SKILL.md +212 -0
  4. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +2 -0
  5. package/CHANGELOG.md +42 -0
  6. package/CLAUDE.md +1 -0
  7. package/cabloy-docs/.vitepress/config.mjs +158 -12
  8. package/cabloy-docs/ai/docs-skills-rules-mapping.md +8 -0
  9. package/cabloy-docs/ai/future-skill-roadmap.md +2 -0
  10. package/cabloy-docs/ai/skills.md +1 -0
  11. package/cabloy-docs/backend/backend-contract-emission-output-inspection.md +189 -0
  12. package/cabloy-docs/backend/backend-contract-emission-source-reading-map.md +160 -0
  13. package/cabloy-docs/backend/backend-contract-emission-specimen.md +170 -0
  14. package/cabloy-docs/backend/backend-resource-module-contract-chain.md +323 -0
  15. package/cabloy-docs/backend/backend-source-reading-debug-checklist.md +173 -0
  16. package/cabloy-docs/backend/backend-source-reading-roadmap.md +129 -0
  17. package/cabloy-docs/backend/backend-source-reading-verify-playbook.md +166 -0
  18. package/cabloy-docs/backend/bean-scene-authoring.md +4 -4
  19. package/cabloy-docs/backend/broadcast-guide.md +3 -3
  20. package/cabloy-docs/backend/cli.md +20 -11
  21. package/cabloy-docs/backend/config-guide.md +4 -4
  22. package/cabloy-docs/backend/controller-aop-guide.md +10 -10
  23. package/cabloy-docs/backend/controller-guide.md +12 -2
  24. package/cabloy-docs/backend/crud-workflow.md +7 -3
  25. package/cabloy-docs/backend/dto-guide.md +12 -2
  26. package/cabloy-docs/backend/dto-infer-generation.md +201 -25
  27. package/cabloy-docs/backend/election-guide.md +2 -2
  28. package/cabloy-docs/backend/entity-guide.md +12 -3
  29. package/cabloy-docs/backend/error-guide.md +3 -3
  30. package/cabloy-docs/backend/event-guide.md +4 -4
  31. package/cabloy-docs/backend/external-aop-guide.md +2 -2
  32. package/cabloy-docs/backend/field-indexes.md +9 -3
  33. package/cabloy-docs/backend/foundation.md +8 -8
  34. package/cabloy-docs/backend/i18n-guide.md +6 -6
  35. package/cabloy-docs/backend/internal-aop-guide.md +2 -2
  36. package/cabloy-docs/backend/introduction.md +13 -0
  37. package/cabloy-docs/backend/migration-and-changes.md +3 -3
  38. package/cabloy-docs/backend/model-guide.md +16 -6
  39. package/cabloy-docs/backend/openapi-guide.md +3 -0
  40. package/cabloy-docs/backend/queue-guide.md +3 -3
  41. package/cabloy-docs/backend/redlock-guide.md +2 -2
  42. package/cabloy-docs/backend/schedule-guide.md +2 -2
  43. package/cabloy-docs/backend/scripts.md +8 -0
  44. package/cabloy-docs/backend/serialization-guide.md +2 -2
  45. package/cabloy-docs/backend/service-guide.md +18 -9
  46. package/cabloy-docs/backend/startup-guide.md +5 -5
  47. package/cabloy-docs/backend/status-guide.md +7 -7
  48. package/cabloy-docs/backend/unit-testing.md +3 -3
  49. package/cabloy-docs/backend/vona-source-reading-map.md +157 -0
  50. package/cabloy-docs/backend/websocket-protocol-guide.md +5 -5
  51. package/cabloy-docs/backend/websocket-usage-guide.md +15 -8
  52. package/cabloy-docs/frontend/a-model-under-the-hood.md +281 -0
  53. package/cabloy-docs/frontend/a-openapi-under-the-hood.md +248 -0
  54. package/cabloy-docs/frontend/a-router-guide.md +307 -0
  55. package/cabloy-docs/frontend/api-guide.md +4 -4
  56. package/cabloy-docs/frontend/api-schema-guide.md +1 -0
  57. package/cabloy-docs/frontend/app-startup-guide.md +7 -4
  58. package/cabloy-docs/frontend/bean-scene-authoring.md +1 -1
  59. package/cabloy-docs/frontend/behavior-guide.md +16 -16
  60. package/cabloy-docs/frontend/cli.md +5 -5
  61. package/cabloy-docs/frontend/command-scene-authoring.md +17 -8
  62. package/cabloy-docs/frontend/component-guide.md +5 -5
  63. package/cabloy-docs/frontend/component-props-guide.md +1 -1
  64. package/cabloy-docs/frontend/component-v-model-guide.md +2 -2
  65. package/cabloy-docs/frontend/filter-query-select-data-flow-guide.md +260 -0
  66. package/cabloy-docs/frontend/form-guide.md +19 -28
  67. package/cabloy-docs/frontend/form-scene-to-page-meta-guide.md +303 -0
  68. package/cabloy-docs/frontend/foundation.md +10 -6
  69. package/cabloy-docs/frontend/frontend-source-reading-roadmap.md +249 -0
  70. package/cabloy-docs/frontend/generated-contract-consumption-debug-checklist.md +190 -0
  71. package/cabloy-docs/frontend/generated-contract-consumption-entry-branch.md +205 -0
  72. package/cabloy-docs/frontend/generated-contract-consumption-list-branch.md +157 -0
  73. package/cabloy-docs/frontend/generated-contract-consumption-specimen.md +203 -0
  74. package/cabloy-docs/frontend/generated-contract-consumption-verify-playbook.md +189 -0
  75. package/cabloy-docs/frontend/generic-component-guide.md +1 -1
  76. package/cabloy-docs/frontend/introduction.md +29 -7
  77. package/cabloy-docs/frontend/model-architecture.md +38 -2
  78. package/cabloy-docs/frontend/model-resource-cookbook.md +11 -8
  79. package/cabloy-docs/frontend/model-resource-internals-deep-dive.md +238 -0
  80. package/cabloy-docs/frontend/model-resource-owner-pattern.md +22 -2
  81. package/cabloy-docs/frontend/model-resource-usage-guide.md +22 -6
  82. package/cabloy-docs/frontend/model-state-guide.md +12 -9
  83. package/cabloy-docs/frontend/module-scope.md +8 -8
  84. package/cabloy-docs/frontend/modules-and-suites.md +2 -1
  85. package/cabloy-docs/frontend/navigation-guards-guide.md +7 -0
  86. package/cabloy-docs/frontend/openapi-sdk-guide.md +12 -4
  87. package/cabloy-docs/frontend/page-guide.md +9 -9
  88. package/cabloy-docs/frontend/page-meta-guide.md +466 -0
  89. package/cabloy-docs/frontend/page-params-guide.md +3 -3
  90. package/cabloy-docs/frontend/page-query-guide.md +2 -2
  91. package/cabloy-docs/frontend/page-route-guide.md +6 -0
  92. package/cabloy-docs/frontend/permission-formscene-action-visibility-guide.md +263 -0
  93. package/cabloy-docs/frontend/quickstart.md +14 -2
  94. package/cabloy-docs/frontend/resource-entry-page-deep-dive.md +271 -0
  95. package/cabloy-docs/frontend/resource-list-page-deep-dive.md +279 -0
  96. package/cabloy-docs/frontend/rest-resource-source-reading-map.md +522 -0
  97. package/cabloy-docs/frontend/rest-resource-under-the-hood.md +622 -0
  98. package/cabloy-docs/frontend/root-behaviors-guide.md +282 -0
  99. package/cabloy-docs/frontend/route-alias-guide.md +6 -0
  100. package/cabloy-docs/frontend/router-stack-guide.md +229 -0
  101. package/cabloy-docs/frontend/router-tabs-introduction.md +26 -3
  102. package/cabloy-docs/frontend/router-tabs-layout-integration.md +367 -0
  103. package/cabloy-docs/frontend/router-tabs-mechanism.md +6 -0
  104. package/cabloy-docs/frontend/router-tabs-route-meta-cookbook.md +7 -0
  105. package/cabloy-docs/frontend/router-tabs-vs-stack.md +167 -0
  106. package/cabloy-docs/frontend/router-view-hosts-guide.md +450 -0
  107. package/cabloy-docs/frontend/server-data.md +2 -1
  108. package/cabloy-docs/frontend/system-startup-guide.md +2 -2
  109. package/cabloy-docs/frontend/table-action-visibility-permission-flow-guide.md +263 -0
  110. package/cabloy-docs/frontend/table-cell-cookbook.md +568 -0
  111. package/cabloy-docs/frontend/table-guide.md +373 -0
  112. package/cabloy-docs/frontend/table-resource-crud-cookbook.md +496 -0
  113. package/cabloy-docs/frontend/zova-app-guide.md +251 -0
  114. package/cabloy-docs/frontend/zova-form-source-reading-map.md +7 -9
  115. package/cabloy-docs/frontend/zova-form-under-the-hood.md +5 -0
  116. package/cabloy-docs/frontend/zova-router-under-the-hood.md +561 -0
  117. package/cabloy-docs/frontend/zova-source-reading-map.md +101 -7
  118. package/cabloy-docs/frontend/zova-table-controller-render-supplement.md +225 -0
  119. package/cabloy-docs/frontend/zova-table-source-reading-map.md +317 -0
  120. package/cabloy-docs/frontend/zova-table-under-the-hood.md +532 -0
  121. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist.md +245 -0
  122. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map.md +139 -0
  123. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook.md +248 -0
  124. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions.md +511 -0
  125. package/cabloy-docs/fullstack/contract-loop-playbook.md +8 -2
  126. package/cabloy-docs/fullstack/edition-collaboration-differences.md +6 -0
  127. package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +181 -48
  128. package/cabloy-docs/fullstack/introduction.md +3 -0
  129. package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -2
  130. package/cabloy-docs/fullstack/suites-and-modules.md +333 -0
  131. package/cabloy-docs/fullstack/tutorial-1-first-module.md +3 -0
  132. package/cabloy-docs/fullstack/tutorial-2-first-crud.md +4 -0
  133. package/cabloy-docs/fullstack/tutorial-3-frontend-metadata-sharing.md +4 -0
  134. package/cabloy-docs/fullstack/tutorial-4-custom-level-renderers.md +31 -19
  135. package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +5 -0
  136. package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +4 -0
  137. package/cabloy-docs/fullstack/tutorials-overview.md +1 -1
  138. package/cabloy-docs/reference/bean-scene-boilerplates.md +13 -13
  139. package/cabloy-docs/reference/package-map.md +4 -3
  140. package/package.json +1 -1
  141. package/vona/pnpm-lock.yaml +22 -258
  142. package/vona/src/suite/a-training/modules/training-student/package.json +53 -0
  143. package/vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts +400 -0
  144. package/vona/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +18 -0
  145. package/vona/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
  146. package/vona/src/suite/a-training/modules/training-student/src/bean/meta.index.ts +12 -0
  147. package/vona/src/suite/a-training/modules/training-student/src/bean/meta.version.ts +21 -0
  148. package/vona/src/suite/a-training/modules/training-student/src/bean/ssrMenu.student.ts +29 -0
  149. package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +15 -0
  150. package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +15 -0
  151. package/vona/src/suite/a-training/modules/training-student/src/controller/student.ts +74 -0
  152. package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +28 -0
  153. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectReq.tsx +44 -0
  154. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectRes.tsx +11 -0
  155. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx +45 -0
  156. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +42 -0
  157. package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +28 -0
  158. package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +25 -0
  159. package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +84 -0
  160. package/vona/src/suite/a-training/modules/training-student/src/index.ts +2 -0
  161. package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +10 -0
  162. package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +57 -0
  163. package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +173 -0
  164. package/vona/src/suite/a-training/modules/training-student/tsconfig.build.json +11 -0
  165. package/vona/src/suite/a-training/modules/training-student/tsconfig.json +7 -0
  166. package/vona/src/suite/a-training/package.json +12 -0
  167. package/vona/src/suite/a-training/tsconfig.base.json +4 -0
  168. package/vona/src/suite/a-training/tsconfig.json +10 -0
  169. package/zova/packages-zova/zova/package.json +2 -2
  170. package/zova/pnpm-lock.yaml +406 -680
  171. package/zova/src/suite/a-training/modules/training-student/cli/openapi.config.ts +9 -0
  172. package/zova/src/suite/a-training/modules/training-student/package.json +52 -0
  173. package/zova/src/suite/a-training/modules/training-student/src/.metadata/component/formFieldLevel.ts +31 -0
  174. package/zova/src/suite/a-training/modules/training-student/src/.metadata/index.ts +258 -0
  175. package/zova/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +7 -0
  176. package/zova/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
  177. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/baseURL.ts +5 -0
  178. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/index.ts +3 -0
  179. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +196 -0
  180. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +4146 -0
  181. package/zova/src/suite/a-training/modules/training-student/src/api/trainingStudent.ts +151 -0
  182. package/zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts +43 -0
  183. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionDeleteForce.tsx +51 -0
  184. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx +56 -0
  185. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.level.tsx +63 -0
  186. package/zova/src/suite/a-training/modules/training-student/src/component/formFieldLevel/controller.tsx +117 -0
  187. package/zova/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +9 -0
  188. package/zova/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +9 -0
  189. package/zova/src/suite/a-training/modules/training-student/src/index.ts +2 -0
  190. package/zova/src/suite/a-training/modules/training-student/src/model/student.ts +42 -0
  191. package/zova/src/suite/a-training/modules/training-student/tsconfig.build.json +13 -0
  192. package/zova/src/suite/a-training/modules/training-student/tsconfig.json +5 -0
  193. package/zova/src/suite/a-training/package.json +12 -0
  194. package/zova/src/suite/a-training/tsconfig.base.json +4 -0
  195. package/zova/src/suite/a-training/tsconfig.json +4 -0
  196. package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/formFieldSelect/controller.tsx +29 -7
  197. package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/select/controller.tsx +34 -11
  198. package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
  199. package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +3 -3
  200. package/zova/src/suite-vendor/a-zova/modules/a-table/src/lib/tableCell.ts +1 -1
  201. package/zova/src/suite-vendor/a-zova/package.json +2 -2
@@ -0,0 +1,303 @@
1
+ # Form Scene to Page Meta Guide
2
+
3
+ This guide explains the cross-layer runtime path from `formScene` to `formMeta`, then to `pageMeta`, and finally to visible shell/tab state in Zova.
4
+
5
+ Use this page when you want to understand one narrow question end to end:
6
+
7
+ - where `formScene` comes from
8
+ - how it becomes `formMeta`
9
+ - how page-entry code uses that `formMeta`
10
+ - how `formMeta` becomes part of `pageMeta`
11
+ - how routed host / tabs / layout UI consume that state
12
+
13
+ ## Why this page exists
14
+
15
+ The current frontend docs already explain the pieces of this story well:
16
+
17
+ - [Form Guide](/frontend/form-guide) explains `formMeta` as form-scene input
18
+ - [Zova Form Under the Hood](/frontend/zova-form-under-the-hood) explains form runtime orchestration
19
+ - [Zova Form Source Reading Map](/frontend/zova-form-source-reading-map) explains where to read form internals
20
+ - [Page Meta Guide](/frontend/page-meta-guide) explains how page meta is emitted and consumed
21
+ - [Router Tabs Mechanism](/frontend/router-tabs-mechanism) and [Router Tabs Layout Integration](/frontend/router-tabs-layout-integration) explain how tabs store and display page/task state
22
+
23
+ What those pages do not isolate directly is the one continuous cross-layer chain.
24
+
25
+ That is the gap this page fills.
26
+
27
+ ## The shortest accurate mental model
28
+
29
+ A practical mental model is:
30
+
31
+ 1. `formScene` is the semantic page/form scene input such as `view`, `create`, or `edit`
32
+ 2. `formMetaFromFormScene(...)` converts that scene into canonical runtime metadata
33
+ 3. page-entry controllers use `formMeta` to choose schema, data, and form behavior
34
+ 4. page-entry code pushes `{ pageTitle, pageDirty, formMeta }` through `$router.setPageMeta(...)`
35
+ 5. the router forwards that page meta into the active routed host
36
+ 6. `routerViewTabs` / `ModelTabs` store the metadata on the current tab item
37
+ 7. shell and nearby page-entry UI consume `formMeta.formScene` for visible create/edit/task state
38
+
39
+ That means `formMeta` is not only a form-internal value. In the current Basic source, it also becomes routed-shell presentation state.
40
+
41
+ ## What this guide is not
42
+
43
+ This page is a bridge page.
44
+
45
+ It is **not**:
46
+
47
+ - a replacement for [Form Guide](/frontend/form-guide)
48
+ - a full form runtime deep dive instead of [Zova Form Under the Hood](/frontend/zova-form-under-the-hood)
49
+ - a full page-meta guide instead of [Page Meta Guide](/frontend/page-meta-guide)
50
+ - a full routed-host guide instead of [Router Tabs Mechanism](/frontend/router-tabs-mechanism)
51
+
52
+ Its job is only to connect those layers into one readable path.
53
+
54
+ ## Source-confirmed reading path
55
+
56
+ When reading this topic, use this order:
57
+
58
+ 1. `zova/src/suite-vendor/a-zova/modules/a-form/src/lib/utils.ts`
59
+ 2. `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/entry/controller.tsx`
60
+ 3. `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockPageEntry/controller.tsx`
61
+ 4. `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockForm/controller.tsx`
62
+ 5. `zova/src/suite-vendor/a-zova/modules/a-router/src/bean/bean.router.ts`
63
+ 6. `zova/src/suite-vendor/a-zova/modules/a-routertabs/src/component/routerViewTabs/controller.tsx`
64
+ 7. `zova/src/suite-vendor/a-zova/modules/a-routertabs/src/model/tabs.ts`
65
+ 8. `zova/src/suite/a-home/modules/home-layoutadmin/src/component/layoutAdmin/render.tabs.tsx`
66
+ 9. `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockToolbarRow/controller.tsx`
67
+
68
+ That order moves from the scene/meta translation helper, to page-entry orchestration, to form runtime usage, to router forwarding, to tabs storage, and finally to visible shell/local UI consumption.
69
+
70
+ ## Runtime path by layer
71
+
72
+ ### 1. `formScene` becomes `formMeta`
73
+
74
+ The canonical translation helper lives in:
75
+
76
+ ```text
77
+ zova/src/suite-vendor/a-zova/modules/a-form/src/lib/utils.ts
78
+ ```
79
+
80
+ The source-confirmed rules are:
81
+
82
+ - `view` -> `{ formScene, formMode: 'view', editMode: undefined }`
83
+ - `create` -> `{ formScene, formMode: 'edit', editMode: 'create' }`
84
+ - `edit` -> `{ formScene, formMode: 'edit', editMode: 'update' }`
85
+
86
+ This is the most important first step.
87
+
88
+ A practical rule is:
89
+
90
+ - treat `formScene` as the semantic scene input
91
+ - treat `formMeta` as the canonical runtime metadata derived from that input
92
+
93
+ The same helper file also exposes the reverse mapping through `formSceneFromFormMeta(formMeta)`.
94
+
95
+ ### 2. Page-entry controllers use `formMeta` to choose schema and data
96
+
97
+ A generic resource-page entry path appears in:
98
+
99
+ ```text
100
+ zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/entry/controller.tsx
101
+ ```
102
+
103
+ A stronger business-facing current Basic specimen appears in:
104
+
105
+ ```text
106
+ zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockPageEntry/controller.tsx
107
+ ```
108
+
109
+ In `blockPageEntry`, the controller:
110
+
111
+ - derives `formScene`
112
+ - computes `formMeta`
113
+ - derives `schemaScene`
114
+ - computes `formProvider`
115
+ - computes `formSchema`
116
+ - computes `formData`
117
+
118
+ This is the key Zova-native meaning of `formMeta` at the page-entry layer:
119
+
120
+ - it is the runtime selector for how the page-entry form should behave
121
+ - it is not only a display flag
122
+
123
+ ### 3. `formMeta` enters the form runtime
124
+
125
+ The clearest current Basic form-side specimen is:
126
+
127
+ ```text
128
+ zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockForm/controller.tsx
129
+ ```
130
+
131
+ This block passes the page-entry-owned values into `ZForm`, including:
132
+
133
+ - `schemaScene`
134
+ - `formMeta`
135
+ - `formProvider`
136
+ - `formScope`
137
+ - `data`
138
+ - `schema`
139
+
140
+ This confirms an important boundary:
141
+
142
+ - page-entry owns the scene/meta decision
143
+ - `ZForm` consumes that runtime metadata for real form behavior
144
+
145
+ ### 4. Page-entry code emits `pageMeta`
146
+
147
+ The strongest current Basic write path is still in:
148
+
149
+ ```text
150
+ zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockPageEntry/controller.tsx
151
+ ```
152
+
153
+ Representative behavior:
154
+
155
+ - initialize shell/task state from loaded data
156
+ - mark dirty on form change
157
+ - clear dirty after submit
158
+ - include `formMeta` in each page-meta write
159
+
160
+ Representative pattern:
161
+
162
+ ```typescript
163
+ setPageMeta(data: any | undefined, pageDirty?: boolean) {
164
+ if (!this.$pageRoute) return;
165
+ const pageTitle = data?.[this.$props.pageTitleKey];
166
+ this.$router.setPageMeta(this.$pageRoute, { pageTitle, pageDirty, formMeta: this.formMeta });
167
+ }
168
+ ```
169
+
170
+ This is the most important transition point in the whole chain:
171
+
172
+ - `formMeta` stops being only a form runtime input
173
+ - it becomes part of shell-facing routed work-item presentation
174
+
175
+ ### 5. The router forwards page meta to the active host
176
+
177
+ The forwarding boundary lives in:
178
+
179
+ ```text
180
+ zova/src/suite-vendor/a-zova/modules/a-router/src/bean/bean.router.ts
181
+ ```
182
+
183
+ Its role is straightforward:
184
+
185
+ - receive `setPageMeta(route, pageMeta)`
186
+ - forward that update to registered router-view hosts
187
+
188
+ This means the router bean is not the long-term owner of the metadata.
189
+
190
+ It is the forwarding boundary from page code into routed-host ownership.
191
+
192
+ ### 6. `routerViewTabs` stores the metadata on the tab item
193
+
194
+ The tabs host forwarding layer appears in:
195
+
196
+ ```text
197
+ zova/src/suite-vendor/a-zova/modules/a-routertabs/src/component/routerViewTabs/controller.tsx
198
+ ```
199
+
200
+ The actual storage owner appears in:
201
+
202
+ ```text
203
+ zova/src/suite-vendor/a-zova/modules/a-routertabs/src/model/tabs.ts
204
+ ```
205
+
206
+ This is the source-confirmed current Basic path for routed-shell state:
207
+
208
+ - `routerViewTabs` forwards `setPageMeta(...)` into `ModelTabs`
209
+ - `ModelTabs` resolves the routed work item and merges `pageMeta` onto it
210
+
211
+ This matters because:
212
+
213
+ - page meta is stored on the active routed work item
214
+ - it is not stored on the route record itself
215
+
216
+ ### 7. Shell and nearby UI consume `formMeta.formScene`
217
+
218
+ The clearest visible shell consumer is:
219
+
220
+ ```text
221
+ zova/src/suite/a-home/modules/home-layoutadmin/src/component/layoutAdmin/render.tabs.tsx
222
+ ```
223
+
224
+ This render path uses:
225
+
226
+ - `pageMeta.pageTitle` for task title
227
+ - `pageMeta.pageDirty` for asterisk/dirty signal
228
+ - `pageMeta.formMeta.formScene` for create/edit task icons
229
+
230
+ A second, more local consumer appears in:
231
+
232
+ ```text
233
+ zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockToolbarRow/controller.tsx
234
+ ```
235
+
236
+ That controller reads `$$pageEntry.formMeta.formScene` directly for permission/display filtering.
237
+
238
+ This gives the clean end-to-end interpretation:
239
+
240
+ - shell/tab UI can consume `formMeta` after it has been promoted into page meta
241
+ - nearby page-entry UI can also consume `formMeta` directly before or alongside shell usage
242
+
243
+ ## A compact end-to-end trace
244
+
245
+ The shortest end-to-end trace is:
246
+
247
+ - page-entry decides `formScene`
248
+ - `formMetaFromFormScene(formScene)` derives canonical form runtime metadata
249
+ - page-entry uses `formMeta` to compute schema/data/runtime behavior
250
+ - page-entry writes `{ pageTitle, pageDirty, formMeta }` through `$router.setPageMeta(...)`
251
+ - router forwards the update
252
+ - tabs model stores `pageMeta` on the active work item
253
+ - layout renders title/dirty/icon state from `pageMeta.formMeta.formScene`
254
+
255
+ That is the source-confirmed cross-layer path in the current Basic frontend.
256
+
257
+ ## What this path is not
258
+
259
+ Keep these boundaries clear.
260
+
261
+ ### It is not only a form concern
262
+
263
+ `formMeta` starts from form scene logic, but in the current Basic tabs-based shell it also becomes task-level shell state.
264
+
265
+ ### It is not route identity
266
+
267
+ Do not confuse this chain with route-meta questions such as:
268
+
269
+ - `tabKey`
270
+ - `componentKey`
271
+ - `keepAlive`
272
+
273
+ Those are route/work-item identity concerns.
274
+
275
+ This guide is about scene-derived presentation/runtime metadata after the routed item already exists.
276
+
277
+ ### It is not browser document-title handling
278
+
279
+ If the requirement is browser title or SEO metadata only, that belongs in the SSR/meta path rather than this chain.
280
+
281
+ For that boundary, see [SSR SEO Meta](/frontend/ssr-seo-meta).
282
+
283
+ ## Where to read next
284
+
285
+ Use these next steps depending on your question:
286
+
287
+ - if you want form authoring: [Form Guide](/frontend/form-guide)
288
+ - if you want deeper form runtime internals: [Zova Form Under the Hood](/frontend/zova-form-under-the-hood)
289
+ - if you want the form source file map: [Zova Form Source Reading Map](/frontend/zova-form-source-reading-map)
290
+ - if you want page-meta authoring and semantics: [Page Meta Guide](/frontend/page-meta-guide)
291
+ - if you want the action-visibility rule for `permissionHint.formScene` and `$$pageEntry.formMeta.formScene`, read [Permission, formScene, and Action Visibility Guide](/frontend/permission-formscene-action-visibility-guide)
292
+ - if you want tabs-side host storage and visible shell behavior: [Router Tabs Mechanism](/frontend/router-tabs-mechanism) and [Router Tabs Layout Integration](/frontend/router-tabs-layout-integration)
293
+
294
+ ## Final takeaway
295
+
296
+ The most accurate way to read this topic is:
297
+
298
+ - `formScene` is the semantic input
299
+ - `formMeta` is the derived runtime metadata
300
+ - `pageMeta` is the shell-facing routed work-item presentation payload
301
+ - tabs/layout render turns that payload into visible task-level state
302
+
303
+ That is the source-confirmed `formScene -> formMeta -> pageMeta -> shell/tab state` path in the current Cabloy Basic frontend.
@@ -60,9 +60,11 @@ If you want a compact path from public architecture to source-level understandin
60
60
  8. [Model Architecture](/frontend/model-architecture)
61
61
  9. [Model State Guide](/frontend/model-state-guide)
62
62
  10. [Model Resource Owner Pattern](/frontend/model-resource-owner-pattern)
63
- 11. [Using ModelResource in Your Module](/frontend/model-resource-usage-guide)
64
- 12. [Resource Model Best Practices](/frontend/model-resource-best-practices)
65
- 13. [Resource Model Cookbook](/frontend/model-resource-cookbook)
63
+ 11. [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
64
+ 12. [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map)
65
+ 13. [Using ModelResource in Your Module](/frontend/model-resource-usage-guide)
66
+ 14. [Resource Model Best Practices](/frontend/model-resource-best-practices)
67
+ 15. [Resource Model Cookbook](/frontend/model-resource-cookbook)
66
68
 
67
69
  Use this order when you want to understand both the public mental model and the shortest source-reading routes without collapsing Zova back into generic Vue habits.
68
70
 
@@ -71,9 +73,11 @@ If your main goal is resource-oriented frontend design, the model-focused subpat
71
73
  1. [Model Architecture](/frontend/model-architecture)
72
74
  2. [Model State Guide](/frontend/model-state-guide)
73
75
  3. [Model Resource Owner Pattern](/frontend/model-resource-owner-pattern)
74
- 4. [Using ModelResource in Your Module](/frontend/model-resource-usage-guide)
75
- 5. [Resource Model Best Practices](/frontend/model-resource-best-practices)
76
- 6. [Resource Model Cookbook](/frontend/model-resource-cookbook)
76
+ 4. [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
77
+ 5. [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map)
78
+ 6. [Using ModelResource in Your Module](/frontend/model-resource-usage-guide)
79
+ 7. [Resource Model Best Practices](/frontend/model-resource-best-practices)
80
+ 8. [Resource Model Cookbook](/frontend/model-resource-cookbook)
77
81
 
78
82
  ## Why this matters for AI development
79
83
 
@@ -0,0 +1,249 @@
1
+ # Frontend Source Reading Roadmap
2
+
3
+ This page is a lightweight roadmap for reading the Cabloy Basic frontend source.
4
+
5
+ Use it when your question is not yet “which exact runtime file should I open next?” but:
6
+
7
+ - where should I start reading?
8
+ - which topic cluster matches my question?
9
+ - should I begin with an overview page, an under-the-hood page, or a source-reading map?
10
+
11
+ ## Why this page exists
12
+
13
+ The current frontend docs now include:
14
+
15
+ - broad overview pages
16
+ - under-the-hood/runtime explanations
17
+ - source-reading maps
18
+ - many focused deep dives for specific runtime chains
19
+
20
+ That is good for depth, but it also means readers can reach the “which page next?” problem before they reach the “which file next?” problem.
21
+
22
+ This page solves that problem.
23
+
24
+ It is a chooser, not another runtime explainer.
25
+
26
+ ## How to use this page
27
+
28
+ Use this rule of thumb:
29
+
30
+ - if you are new to the topic, start with an **overview** page
31
+ - if you already understand the public concept and want runtime behavior, go to an **under-the-hood** page
32
+ - if you already know the topic and want the shortest path through source files, go to a **source-reading map** page
33
+ - if your question is very narrow and practical, go directly to the relevant **deep dive** page
34
+
35
+ ## Architecture spine: start here first
36
+
37
+ If you need the shortest path into the frontend mental model, start with these pages:
38
+
39
+ - [Introduction](/frontend/introduction)
40
+ - [Foundation](/frontend/foundation)
41
+ - [Reading Zova for Vue Developers](/frontend/reading-zova-for-vue-developers)
42
+ - [Zova vs Vue 3 Comparison](/frontend/zova-vs-vue3-comparison)
43
+ - [Zova Reactivity Under the Hood](/frontend/zova-reactivity-under-the-hood)
44
+ - [Zova Source Reading Map](/frontend/zova-source-reading-map)
45
+
46
+ A practical reading order is:
47
+
48
+ 1. Introduction
49
+ 2. Foundation
50
+ 3. Reading Zova for Vue Developers
51
+ 4. Zova Source Reading Map
52
+
53
+ ## Topic cluster: app shell and startup
54
+
55
+ Start here when your question is about the root app host, startup, shell behaviors, or root composition.
56
+
57
+ ### Overview / concept pages
58
+
59
+ - [App Startup Guide](/frontend/app-startup-guide)
60
+ - [Behavior Guide](/frontend/behavior-guide)
61
+
62
+ ### Focused deep dives
63
+
64
+ - [Zova App Guide](/frontend/zova-app-guide)
65
+ - [Root Behaviors Guide](/frontend/root-behaviors-guide)
66
+
67
+ ### Best next step
68
+
69
+ - if the question is “what is the root app host?” -> read [Zova App Guide](/frontend/zova-app-guide)
70
+ - if the question is “how do app-wide behaviors wrap the routed tree?” -> read [Root Behaviors Guide](/frontend/root-behaviors-guide)
71
+
72
+ ## Topic cluster: routing and routed hosts
73
+
74
+ Start here when your question is about route identity, routed hosts, tabs/stack, or task-level shell state.
75
+
76
+ ### Overview / concept pages
77
+
78
+ - [Page Route Guide](/frontend/page-route-guide)
79
+ - [Router Tabs Introduction](/frontend/router-tabs-introduction)
80
+ - [Router Tabs Overview](/frontend/router-tabs-overview)
81
+
82
+ ### Under-the-hood / runtime pages
83
+
84
+ - [A-Router Guide](/frontend/a-router-guide)
85
+ - [Zova Router Under the Hood](/frontend/zova-router-under-the-hood)
86
+ - [Router View Hosts Guide](/frontend/router-view-hosts-guide)
87
+ - [Router Tabs Mechanism](/frontend/router-tabs-mechanism)
88
+
89
+ ### Focused deep dives
90
+
91
+ - [Page Meta Guide](/frontend/page-meta-guide)
92
+ - [Router Tabs vs Stack](/frontend/router-tabs-vs-stack)
93
+ - [Router Stack Guide](/frontend/router-stack-guide)
94
+
95
+ ### Best next step
96
+
97
+ - if the question is “how do routes become operational?” -> read [A-Router Guide](/frontend/a-router-guide)
98
+ - if the question is “which host owns the routed page instance?” -> read [Router View Hosts Guide](/frontend/router-view-hosts-guide)
99
+ - if the question is “what is the workbench meaning of router tabs?” -> read [Router Tabs Overview](/frontend/router-tabs-overview)
100
+ - if the question is “how does tabs state work?” -> read [Router Tabs Mechanism](/frontend/router-tabs-mechanism)
101
+ - if the question is “how should I choose between tabs and stack?” -> read [Router Tabs vs Stack](/frontend/router-tabs-vs-stack)
102
+
103
+ ## Topic cluster: forms
104
+
105
+ Start here when your question is about `ZForm`, `formMeta`, page-entry forms, or form-driven shell state.
106
+
107
+ ### Overview / concept pages
108
+
109
+ - [Form Guide](/frontend/form-guide)
110
+
111
+ ### Under-the-hood / runtime pages
112
+
113
+ - [Zova Form Under the Hood](/frontend/zova-form-under-the-hood)
114
+ - [Zova Form Source Reading Map](/frontend/zova-form-source-reading-map)
115
+
116
+ ### Focused deep dives
117
+
118
+ - [Form Scene to Page Meta Guide](/frontend/form-scene-to-page-meta-guide)
119
+
120
+ ### Best next step
121
+
122
+ - if the question is “how does form runtime work?” -> read [Zova Form Under the Hood](/frontend/zova-form-under-the-hood)
123
+ - if the question is “how does `formScene` become shell-visible state?” -> read [Form Scene to Page Meta Guide](/frontend/form-scene-to-page-meta-guide)
124
+
125
+ ## Topic cluster: resources and ModelResource
126
+
127
+ Start here when your question is about resource-driven CRUD pages, `ModelResource`, or route/resource/runtime assembly.
128
+
129
+ ### Overview / concept pages
130
+
131
+ - [Model Resource Owner Pattern](/frontend/model-resource-owner-pattern)
132
+ - [Using ModelResource in Your Module](/frontend/model-resource-usage-guide)
133
+
134
+ ### Under-the-hood / runtime pages
135
+
136
+ - [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
137
+ - [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map)
138
+
139
+ ### Focused deep dives
140
+
141
+ - [A-Model Under the Hood](/frontend/a-model-under-the-hood)
142
+ - [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
143
+ - [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive)
144
+ - [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive)
145
+ - [Filter to Query to Select Data Flow Guide](/frontend/filter-query-select-data-flow-guide)
146
+
147
+ ### Best next step
148
+
149
+ - if the question is “why does the resource owner exist?” -> read [Model Resource Owner Pattern](/frontend/model-resource-owner-pattern)
150
+ - if the question is “how does the owner itself work internally?” -> read [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
151
+ - if the question is “how does the entry page runtime fit together?” -> read [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive)
152
+ - if the question is “how does the list page runtime fit together?” -> read [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive)
153
+ - if the question is “how does filter state become list data?” -> read [Filter to Query to Select Data Flow Guide](/frontend/filter-query-select-data-flow-guide)
154
+
155
+ ## Topic cluster: tables
156
+
157
+ Start here when your question is about `ZTable`, schema-driven columns, row/bulk actions, or table runtime.
158
+
159
+ ### Overview / concept pages
160
+
161
+ - [Table Guide](/frontend/table-guide)
162
+ - [TableCell Authoring Cookbook](/frontend/table-cell-cookbook)
163
+
164
+ ### Under-the-hood / runtime pages
165
+
166
+ - [Zova Table Under the Hood](/frontend/zova-table-under-the-hood)
167
+ - [Zova Table Source Reading Map](/frontend/zova-table-source-reading-map)
168
+
169
+ ### Focused deep dives
170
+
171
+ - [Table + Resource CRUD Cookbook](/frontend/table-resource-crud-cookbook)
172
+ - [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
173
+ - [Zova Table Controller Render Supplement](/frontend/zova-table-controller-render-supplement)
174
+
175
+ ### Best next step
176
+
177
+ - if the question is “how does the table runtime work?” -> read [Zova Table Under the Hood](/frontend/zova-table-under-the-hood)
178
+ - if the question is “how do row/bulk actions become visible or hidden?” -> read [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
179
+
180
+ ## Topic cluster: server data and lower-level shared runtime
181
+
182
+ Start here when your question is about schema-driven server-data consumption, SDK/runtime loading, or lower-level metadata infrastructure.
183
+
184
+ ### Overview / concept pages
185
+
186
+ - [Server Data](/frontend/server-data)
187
+ - [SDK Guide](/frontend/sdk-guide)
188
+ - [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
189
+ - [API Schema Guide](/frontend/api-schema-guide)
190
+
191
+ ### Focused deep dives
192
+
193
+ - [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen)
194
+ - [Generated Contract Consumption: List Branch](/frontend/generated-contract-consumption-list-branch)
195
+ - [Generated Contract Consumption: Entry Branch](/frontend/generated-contract-consumption-entry-branch)
196
+ - [Generated Contract Consumption Verify Playbook](/frontend/generated-contract-consumption-verify-playbook)
197
+ - [Generated Contract Consumption Debug Checklist](/frontend/generated-contract-consumption-debug-checklist)
198
+ - [A-OpenAPI Under the Hood](/frontend/a-openapi-under-the-hood)
199
+
200
+ ### Best next step
201
+
202
+ - if the question is “how do I consume the server-data ladder?” -> read [Server Data](/frontend/server-data)
203
+ - if the question is “what does generated contract consumption look like in one practical frontend path?” -> read [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen), then choose the list or entry branch
204
+ - if the question is “how do I prove or diagnose the generated-contract consumer path?” -> continue with [Generated Contract Consumption Verify Playbook](/frontend/generated-contract-consumption-verify-playbook) or [Generated Contract Consumption Debug Checklist](/frontend/generated-contract-consumption-debug-checklist)
205
+ - if the question is “how does the lower-level OpenAPI/schema runtime work?” -> read [A-OpenAPI Under the Hood](/frontend/a-openapi-under-the-hood)
206
+
207
+ ## Topic cluster: SSR
208
+
209
+ Start here when your question is about SSR orchestration, hydration, SEO meta, or SSR troubleshooting.
210
+
211
+ ### Overview / concept pages
212
+
213
+ - [SSR Architecture Overview](/frontend/ssr-architecture-overview)
214
+ - [SSR Overview](/frontend/ssr-overview)
215
+ - [SSR Init Data](/frontend/ssr-init-data)
216
+ - [SSR SEO Meta](/frontend/ssr-seo-meta)
217
+
218
+ ### Best next step
219
+
220
+ - if the question is “which side owns this SSR behavior?” -> read [SSR Architecture Overview](/frontend/ssr-architecture-overview)
221
+ - if the question is “is this document/meta or task-level shell state?” -> compare [SSR SEO Meta](/frontend/ssr-seo-meta) with [Page Meta Guide](/frontend/page-meta-guide)
222
+
223
+ ## Recent deep dives and maps
224
+
225
+ If you already know the cluster and want the most focused next page, these are the most useful recent deep dives/maps:
226
+
227
+ - [Root Behaviors Guide](/frontend/root-behaviors-guide)
228
+ - [A-Router Guide](/frontend/a-router-guide)
229
+ - [Router View Hosts Guide](/frontend/router-view-hosts-guide)
230
+ - [Form Scene to Page Meta Guide](/frontend/form-scene-to-page-meta-guide)
231
+ - [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
232
+ - [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive)
233
+ - [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive)
234
+ - [Filter to Query to Select Data Flow Guide](/frontend/filter-query-select-data-flow-guide)
235
+ - [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
236
+ - [A-OpenAPI Under the Hood](/frontend/a-openapi-under-the-hood)
237
+
238
+ ## Final rule
239
+
240
+ When in doubt:
241
+
242
+ 1. pick the cluster on this page
243
+ 2. read the overview page first
244
+ 3. move to the under-the-hood page
245
+ 4. only then move to the source-reading map or deep dive
246
+
247
+ This roadmap is the chooser.
248
+
249
+ The detailed runtime explanations still belong to the cluster-specific pages.