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,279 @@
1
+ # Resource List Page Deep Dive
2
+
3
+ This guide explains the runtime path of a resource list page in Zova through the current public Cabloy Basic source.
4
+
5
+ Use this page when you want to understand:
6
+
7
+ - how a `/rest/resource/:resource` route becomes a working list page
8
+ - where the thin `rest-resource` list shell stops
9
+ - how `basic-page:blockPage` takes over the deeper list runtime
10
+ - where `blockFilter`, `blockTable`, and `blockPager` fit into that runtime
11
+ - how `ZTable` and `ModelResource` cooperate under the list-page shell
12
+
13
+ ## Why this page exists
14
+
15
+ Several existing docs already explain important parts of the story:
16
+
17
+ - [Generated Contract Consumption: List Branch](/frontend/generated-contract-consumption-list-branch) explains the consumer-side handoff before the deeper runtime begins
18
+ - [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood) explains the module-level runtime bridge
19
+ - [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map) explains the shortest file path into the module
20
+ - [Table Guide](/frontend/table-guide) and [Zova Table Under the Hood](/frontend/zova-table-under-the-hood) explain the table runtime
21
+ - [Table + Resource CRUD Cookbook](/frontend/table-resource-crud-cookbook) explains authoring-oriented CRUD assembly
22
+
23
+ What those pages do not isolate directly is the one cohesive list-page runtime path from route entry into the deeper Basic page and table runtime.
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. `rest-resource` declares the generic resource list route
32
+ 2. a generated page wrapper binds that route to `ControllerPageResource`
33
+ 3. `ControllerPageResource` is a thin shell that resolves the current `resource`, loads top-level schema state, and renders `schemaRow.rest.blocks`
34
+ 4. those blocks usually enter `basic-page:blockPage`
35
+ 5. `blockPage` becomes the deeper list runtime owner for filter state, paging state, query state, and resource-backed list data
36
+ 6. `blockFilter`, `blockTable`, and `blockPager` are specialized consumers of that shared page runtime/context
37
+ 7. `ZTable` is the final schema-driven table runtime endpoint under that list-page runtime
38
+
39
+ That means the resource list page is not one controller doing everything. It is a route shell plus downstream reusable list/runtime blocks.
40
+
41
+ This page focuses only on the list-page branch. For the broader module-level shell-to-runtime map shared by both list and entry pages, keep [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map) as the general reference.
42
+
43
+ ## Source-confirmed reading path
44
+
45
+ When reading this topic, use this order:
46
+
47
+ 1. `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/routes.ts`
48
+ 2. `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/.metadata/page/resource.ts`
49
+ 3. `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/resource/controller.tsx`
50
+ 4. `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts`
51
+ 5. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx`
52
+ 6. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockFilter/controller.tsx`
53
+ 7. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx`
54
+ 8. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPager/controller.tsx`
55
+ 9. `zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx`
56
+ 10. `zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/render.tsx`
57
+
58
+ That order moves from public route surface, to route wrapper, to list shell, to resource owner, to deeper list runtime, and finally to the schema-driven table runtime endpoint.
59
+
60
+ ## Runtime path by layer
61
+
62
+ ### 1. Route list entry
63
+
64
+ The public route surface lives in:
65
+
66
+ ```text
67
+ zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/routes.ts
68
+ ```
69
+
70
+ The list route is:
71
+
72
+ - `:resource`
73
+
74
+ That already shows the public list-page contract:
75
+
76
+ - the route is generic
77
+ - runtime identity comes from `route.params.resource`
78
+ - the shared `tabKey(route)` keeps list and entry pages grouped under one resource-oriented workspace
79
+
80
+ ### 2. Generated page wrapper
81
+
82
+ The list-page wrapper lives in:
83
+
84
+ ```text
85
+ zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/.metadata/page/resource.ts
86
+ ```
87
+
88
+ This file shows that the route enters runtime through the standard Zova page-controller path:
89
+
90
+ - `createZovaComponentPage(ControllerPageResource, ...)`
91
+
92
+ That means the list page still begins as a controller-oriented page surface, not as ad hoc local route code.
93
+
94
+ ### 3. Thin `rest-resource` list shell
95
+
96
+ The list shell lives in:
97
+
98
+ ```text
99
+ zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/resource/controller.tsx
100
+ ```
101
+
102
+ Its main jobs are:
103
+
104
+ - resolve the current selector-backed `ModelResource`
105
+ - autoload select API schemas
106
+ - read `schemaRow?.rest?.blocks`
107
+ - render those blocks through `ZovaJsx`
108
+
109
+ This is the first key architectural boundary:
110
+
111
+ - `ControllerPageResource` is a **thin list shell**
112
+ - it does not own the whole list runtime by itself
113
+
114
+ Its role is to interpret resource context, load top-level schema state, and let schema-defined blocks take over the deeper behavior.
115
+
116
+ ### 4. `ModelResource` as the stable owner boundary
117
+
118
+ The owner model lives in:
119
+
120
+ ```text
121
+ zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts
122
+ ```
123
+
124
+ Its main jobs are:
125
+
126
+ - bootstrap the resource API path
127
+ - expose `permissions`
128
+ - expose schema surfaces such as `schemaFilter` and `schemaRow`
129
+ - expose `select(query)` for list data
130
+ - expose item/view/create/update/delete mutation/query helpers
131
+
132
+ This is the core owner boundary for the list page.
133
+
134
+ It is the stable resource-level runtime, even though the deeper list behavior is later assembled through Basic blocks.
135
+
136
+ ### 5. `basic-page:blockPage` becomes the deeper list runtime owner
137
+
138
+ The most important current Basic list-runtime file is:
139
+
140
+ ```text
141
+ zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx
142
+ ```
143
+
144
+ This controller becomes the deeper owner for:
145
+
146
+ - selector-backed `ModelResource`
147
+ - `queryFilterData`
148
+ - `queryPaged`
149
+ - computed `query`
150
+ - `select(this.query)` list data
151
+ - `schemaFilter`, `schemaRow`, and `permissions`
152
+ - the shared page JSX/render context (`$$page`)
153
+ - permission-driven table-meta refresh through `tableRef.refreshMeta()`
154
+
155
+ This is the second key architectural boundary:
156
+
157
+ - the route shell chooses the resource context
158
+ - `blockPage` owns the real list/runtime state after blocks are rendered
159
+
160
+ ### 6. `blockFilter` consumes the shared list-page context
161
+
162
+ The filter block lives in:
163
+
164
+ ```text
165
+ zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockFilter/controller.tsx
166
+ ```
167
+
168
+ This block is a specialized consumer of the shared `$$page` runtime context.
169
+
170
+ Its role is to turn schema-driven filter UI into filter-state updates that flow back into the list-page query path.
171
+
172
+ That means filter state is not a separate unrelated subsystem. It is part of the shared list-page runtime owned by `blockPage`.
173
+
174
+ ### 7. `blockTable` bridges the page runtime into `ZTable`
175
+
176
+ The table bridge lives in:
177
+
178
+ ```text
179
+ zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx
180
+ ```
181
+
182
+ This controller consumes `$$page` and passes the canonical page-owned values into `ZTable`, including:
183
+
184
+ - `data`
185
+ - `schemaRow`
186
+ - `tableScope`
187
+
188
+ It also captures the table controller ref back onto `$$page.tableRef`.
189
+
190
+ This is the clearest proof that `blockTable` is a bridge into table runtime, not the main owner of list state.
191
+
192
+ ### 8. `blockPager` consumes paged state
193
+
194
+ The pager block lives in:
195
+
196
+ ```text
197
+ zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPager/controller.tsx
198
+ ```
199
+
200
+ Its role is to read paged state and delegate page changes back into the shared list-page runtime.
201
+
202
+ Like the filter and table blocks, it is another specialized consumer of the page runtime owned by `blockPage`.
203
+
204
+ ### 9. `ZTable` is the schema-driven runtime endpoint
205
+
206
+ The deeper table endpoint lives in:
207
+
208
+ ```text
209
+ zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx
210
+ zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/render.tsx
211
+ ```
212
+
213
+ This table runtime:
214
+
215
+ - loads schema properties for table rendering
216
+ - computes table metadata and columns
217
+ - creates column renderers
218
+ - turns schema-driven row metadata into visible table output
219
+
220
+ This is the final endpoint under the list-page runtime chain.
221
+
222
+ ## The shared handoff model
223
+
224
+ A useful rule is:
225
+
226
+ - the route shell resolves resource context
227
+ - schema-defined blocks choose which deeper list runtime pieces should appear
228
+ - `blockPage` becomes the shared host runtime owner
229
+ - `blockFilter`, `blockTable`, and `blockPager` are specialized consumers of that host-owned context
230
+ - `ZTable` is the final schema-driven render endpoint for rows and cells
231
+
232
+ That means the shared handoff is through `$$page`, not through scattered local page state.
233
+
234
+ ## What this guide does not re-explain
235
+
236
+ This page does **not** fully re-explain:
237
+
238
+ - the internals of `ModelResource` ownership -> see [Model Resource Owner Pattern](/frontend/model-resource-owner-pattern)
239
+ - the internals of `ZTable` itself -> see [Zova Table Under the Hood](/frontend/zova-table-under-the-hood)
240
+ - table authoring recipes -> see [Table + Resource CRUD Cookbook](/frontend/table-resource-crud-cookbook)
241
+
242
+ Its job is only to explain how the list-page runtime is assembled across route shell, resource owner, Basic blocks, and table runtime.
243
+
244
+ ## Debugging checklist
245
+
246
+ If a resource list page behaves unexpectedly, ask:
247
+
248
+ 1. is the route resolving the expected `resource`?
249
+ 2. is `ControllerPageResource` loading the expected `schemaRow.rest.blocks`?
250
+ 3. is the expected `basic-page:*` block actually present in the schema?
251
+ 4. is `blockPage` resolving the expected `ModelResource` selector state?
252
+ 5. is filter state flowing into `queryFilterData` as expected?
253
+ 6. is pager state flowing into `queryPaged` as expected?
254
+ 7. is `blockTable` receiving the expected `schemaRow`, `data`, and `permissions` scope?
255
+ 8. is table meta stale because the permission-driven refresh path is not firing where expected?
256
+
257
+ ## Where to read next
258
+
259
+ Use these next steps depending on your question:
260
+
261
+ - if you want the resource module bridge: [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
262
+ - if you want the shortest source map: [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map)
263
+ - if you want the owner internals behind this runtime: [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
264
+ - if you want the narrower filter/query/select data path: [Filter to Query to Select Data Flow Guide](/frontend/filter-query-select-data-flow-guide)
265
+ - if you want the table runtime branch: [Zova Table Under the Hood](/frontend/zova-table-under-the-hood)
266
+ - if you want row/bulk action visibility and permission gating: [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
267
+ - if you want the entry-page counterpart: [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive)
268
+
269
+ ## Final takeaway
270
+
271
+ The most accurate way to read a resource list page in the current Basic frontend is:
272
+
273
+ - `rest-resource` list page is the thin route shell
274
+ - `ModelResource` is the stable owner boundary
275
+ - `basic-page:blockPage` owns the real list runtime
276
+ - `blockFilter`, `blockTable`, and `blockPager` consume the same shared page runtime context
277
+ - `ZTable` is the schema-driven runtime endpoint under that list-page chain
278
+
279
+ That is the source-confirmed list-page runtime path in the current Cabloy Basic frontend architecture.