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,260 @@
1
+ # Filter to Query to Select Data Flow Guide
2
+
3
+ This guide explains the list-page data path from filter UI into query state, then into `ModelResource.select(query)`, and finally into table and pager state in Zova.
4
+
5
+ Use this page when you want to understand:
6
+
7
+ - how filter UI changes become list-page query state
8
+ - how paging state joins that query
9
+ - how the final query reaches `ModelResource.select(query)`
10
+ - how the resulting paged/list data is consumed by table and pager
11
+ - where permission-driven table-meta refresh sits relative to that data flow
12
+
13
+ ## Why this page exists
14
+
15
+ Several existing docs already explain nearby pieces:
16
+
17
+ - [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive) explains the broader list-page runtime assembly
18
+ - [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood) explains the module-level bridge
19
+ - [Table + Resource CRUD Cookbook](/frontend/table-resource-crud-cookbook) explains practical authoring for CRUD list pages
20
+
21
+ What those pages do not isolate directly is the one compact data-flow path from filter UI into the owner-side query execution boundary.
22
+
23
+ That is the gap this page fills.
24
+
25
+ ## The shortest accurate mental model
26
+
27
+ A practical mental model is:
28
+
29
+ 1. `blockFilter` normalizes user-entered filter values
30
+ 2. `blockPage` stores those values in `queryFilterData`
31
+ 3. `blockPage` also owns paging state in `queryPaged`
32
+ 4. `blockPage` computes one merged `query`
33
+ 5. `ModelResource.select(query)` becomes the owner-side query execution boundary
34
+ 6. the select result provides both `list` and paged metadata
35
+ 7. `blockTable` consumes the list data
36
+ 8. `blockPager` consumes the paged metadata
37
+
38
+ That means the list-page fetch path is not scattered across table, pager, and filter. It is centralized in the page runtime and then handed to the owner.
39
+
40
+ ## Source-confirmed reading path
41
+
42
+ When reading this topic, use this order:
43
+
44
+ 1. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx`
45
+ 2. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockFilter/controller.tsx`
46
+ 3. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPager/controller.tsx`
47
+ 4. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx`
48
+ 5. `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts`
49
+
50
+ That order moves from the page-owned state source, to filter and pager inputs, to the table bridge, and finally to the owner-side query execution path.
51
+
52
+ ## Runtime path by layer
53
+
54
+ ### 1. Filter UI becomes `queryFilterData`
55
+
56
+ The filter bridge lives in:
57
+
58
+ ```text
59
+ zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockFilter/controller.tsx
60
+ ```
61
+
62
+ This block renders `ZForm` with:
63
+
64
+ - `data={$$page.queryFilterData}`
65
+ - `schema={$$page.schemaFilter}`
66
+ - `schemaScene="filter"`
67
+
68
+ Its submit and reset flow both pass through `_onFilter(dataOld)`.
69
+
70
+ The important source-confirmed behavior is:
71
+
72
+ - nil and empty-string values are removed
73
+ - the normalized object is passed to `$$page.onFilter(dataNew)`
74
+
75
+ This is the first key rule:
76
+
77
+ - `blockFilter` does not fetch directly
78
+ - it normalizes filter values and pushes them into page-owned state
79
+
80
+ ### 2. Paging state becomes `queryPaged`
81
+
82
+ The page runtime owner lives in:
83
+
84
+ ```text
85
+ zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx
86
+ ```
87
+
88
+ Inside `__init__()`, it initializes:
89
+
90
+ - `queryFilterData = {}`
91
+ - `queryPaged = { pageNo: 1, pageSize: this.$props.pageSize }`
92
+
93
+ It also owns:
94
+
95
+ - `gotoPage(pageNo)`
96
+ - `setPageSize(pageSize)`
97
+
98
+ That means paging is page-owned runtime state, not something the pager block owns independently.
99
+
100
+ ### 3. `query` is the canonical merged state
101
+
102
+ The same `blockPage` controller computes:
103
+
104
+ ```typescript
105
+ this.query = this.$computed(() => {
106
+ return Object.assign({}, this.queryFilterData, this.queryPaged);
107
+ });
108
+ ```
109
+
110
+ This is the canonical query object for the list page.
111
+
112
+ A practical reading rule is:
113
+
114
+ - filter state and paging state stay separate while they are being edited
115
+ - `query` is the merged runtime shape passed into the owner
116
+
117
+ ### 4. `ModelResource.select(query)` is the owner-side query boundary
118
+
119
+ The owner-side boundary lives in:
120
+
121
+ ```text
122
+ zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts
123
+ ```
124
+
125
+ `blockPage` uses:
126
+
127
+ ```typescript
128
+ get queryData() {
129
+ return this.$$modelResource.select(this.query);
130
+ }
131
+ ```
132
+
133
+ Inside the owner:
134
+
135
+ - `select(query?)` delegates to `selectGeneral(undefined, query)`
136
+ - `selectGeneral(...)` creates a query key shaped like:
137
+ - `['select', actionPath ?? '', hashkey(query)]`
138
+ - it fetches the list result from the resolved `resourceApi`
139
+
140
+ This is the second key rule:
141
+
142
+ - pages assemble query state
143
+ - `ModelResource` owns query execution, query-key identity, and fetch semantics
144
+
145
+ ### 5. The select result becomes both `data` and `paged`
146
+
147
+ Back in `blockPage`, two important derived surfaces are exposed:
148
+
149
+ - `data = queryData.data?.list`
150
+ - `paged = queryData.data`
151
+
152
+ This matters because the select result is not only a list.
153
+
154
+ It is the paged result surface that both table and pager depend on.
155
+
156
+ ### 6. `blockTable` consumes list data
157
+
158
+ The table bridge lives in:
159
+
160
+ ```text
161
+ zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx
162
+ ```
163
+
164
+ It consumes the shared page runtime and passes into `ZTable`:
165
+
166
+ - `data={$$page.data}`
167
+ - `schema={$$page.schemaRow}`
168
+ - `tableScope={$$page.jsxCelScope}`
169
+
170
+ That means `blockTable` is not the owner of the fetch path.
171
+
172
+ It is the bridge from page-owned list result into the table runtime.
173
+
174
+ ### 7. `blockPager` consumes paged metadata
175
+
176
+ The pager block lives in:
177
+
178
+ ```text
179
+ zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPager/controller.tsx
180
+ ```
181
+
182
+ It reads:
183
+
184
+ - `$$page.paged`
185
+
186
+ and delegates navigation back into page-owned state with:
187
+
188
+ - `$$page.gotoPage(...)`
189
+
190
+ This is the third key rule:
191
+
192
+ - the pager does not fetch directly
193
+ - it mutates page-owned paging state and lets the central query path react
194
+
195
+ ## Permission-driven table-meta refresh is adjacent, not the data path itself
196
+
197
+ `blockPage` also watches:
198
+
199
+ - `permissions`
200
+
201
+ and refreshes table meta when permission state changes.
202
+
203
+ That behavior is important, but it is not the same thing as the filter/query/select data path.
204
+
205
+ A practical rule is:
206
+
207
+ - filter/paging changes affect query identity and data fetches
208
+ - permission changes affect table metadata and visible action/column behavior
209
+
210
+ Those are related, but distinct, flows.
211
+
212
+ ## A compact end-to-end trace
213
+
214
+ The shortest end-to-end trace is:
215
+
216
+ - filter UI normalizes user input
217
+ - `queryFilterData` changes
218
+ - `queryPaged` changes when navigation changes page
219
+ - `query = { ...queryFilterData, ...queryPaged }`
220
+ - `queryData = $$modelResource.select(query)`
221
+ - `data = queryData.data?.list`
222
+ - `paged = queryData.data`
223
+ - table consumes `data`
224
+ - pager consumes `paged`
225
+
226
+ That is the source-confirmed filter -> query -> select data path in the current Basic list-page runtime.
227
+
228
+ ## Debugging checklist
229
+
230
+ If list data looks wrong, ask:
231
+
232
+ 1. did `blockFilter` normalize away a field unexpectedly?
233
+ 2. did `queryFilterData` actually change?
234
+ 3. did `queryPaged` change as expected?
235
+ 4. does the merged `query` contain the expected fields?
236
+ 5. did `ModelResource.select(query)` create the expected query-key identity?
237
+ 6. is `queryData.data?.list` populated as expected?
238
+ 7. is `paged` present and consistent with the list result?
239
+ 8. is the issue really data flow, or is it permission-driven table-meta refresh instead?
240
+
241
+ ## Where to read next
242
+
243
+ Use these next steps depending on your question:
244
+
245
+ - if you want the broader list-page runtime assembly, read [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive)
246
+ - if you want the owner internals behind `select(query)`, read [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
247
+ - if you want practical CRUD authoring guidance, read [Table + Resource CRUD Cookbook](/frontend/table-resource-crud-cookbook)
248
+ - if you want row/bulk action visibility, read [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
249
+
250
+ ## Final takeaway
251
+
252
+ The most accurate way to read the current Basic list-page data path is:
253
+
254
+ - `blockFilter` owns filter normalization
255
+ - `blockPage` owns query state assembly
256
+ - `ModelResource.select(query)` owns owner-side query execution
257
+ - `data` and `paged` are the shared outputs
258
+ - table and pager consume those outputs instead of owning the fetch logic
259
+
260
+ That is the source-confirmed `filter -> query -> select` runtime path in the current Cabloy Basic frontend architecture.