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,308 @@
1
+ # Zova vs Vue 3 Comparison
2
+
3
+ This page compares **Zova’s frontend programming model** with the **default mental model many developers bring from Vue 3**.
4
+
5
+ The goal is not to argue that one replaces the other.
6
+
7
+ The goal is to explain two things clearly:
8
+
9
+ 1. **Zova still stands on top of Vue 3 runtime and reactivity foundations**
10
+ 2. **Zova deliberately changes the preferred authoring surface, architectural center, and code-organization habits built on top of those foundations**
11
+
12
+ Use this page together with:
13
+
14
+ - [Reading Zova for Vue Developers](/frontend/reading-zova-for-vue-developers)
15
+ - [Zova Reactivity Under the Hood](/frontend/zova-reactivity-under-the-hood)
16
+ - [Zova Source Reading Map](/frontend/zova-source-reading-map)
17
+
18
+ ## Why this page exists
19
+
20
+ A Vue developer can look at Zova code and ask questions like these:
21
+
22
+ - why is this state a plain class field instead of a `ref`?
23
+ - why is derived state wired in `__init__` instead of declared in `setup()`?
24
+ - why does route state appear on the controller instance instead of being pulled through `useRoute()`?
25
+ - why does the page grow into controller/render/style/service beans instead of only more composables and child components?
26
+
27
+ Those questions are reasonable.
28
+
29
+ This page answers them by comparing the two programming models across a few stable architectural dimensions.
30
+
31
+ ## The shortest accurate summary
32
+
33
+ If you only want the shortest answer, use this one:
34
+
35
+ > Vue 3 usually presents reactivity as explicit local primitives and composition-oriented setup logic, while Zova presents reactivity through framework-managed bean instances and controller-oriented architecture.
36
+
37
+ Under the surface, Zova still uses Vue runtime/reactivity capabilities.
38
+
39
+ The big difference is the **business-facing programming model**.
40
+
41
+ ## Side-by-side comparison table
42
+
43
+ | Dimension | Zova | Vue 3 default mental model |
44
+ | --- | --- | --- |
45
+ | Reactive host | controller or bean instance | local `ref` / `reactive` values inside `setup()` |
46
+ | Derived state | `$computed()` often assigned to instance fields | `computed()` usually assigned to local variables |
47
+ | Main wiring surface | `__init__` and bean lifecycle | `setup()` and composition hooks |
48
+ | Route state access | page-controller surface such as `$route`, `$params`, `$query` | composables such as `useRoute()` |
49
+ | Sharing model | IoC containers and bean scopes unify more sharing patterns | composables, props/emits, `provide/inject`, and store layers often coexist |
50
+ | Render organization | controller-oriented; render can stay in controller or move to render beans | component-oriented; template/render/setup stay the obvious center |
51
+ | Growth path | split into controller, render, style, service, model, or other beans | split into composables, child components, and store or helper layers |
52
+ | Architectural emphasis | explicit object roles, scope ownership, and runtime-managed surfaces | flexible local composition with more developer-managed assembly |
53
+
54
+ ## 1. Reactive host
55
+
56
+ ### Zova
57
+
58
+ Zova often makes the controller or bean instance the visible reactive surface.
59
+
60
+ That is why code can look like:
61
+
62
+ ```typescript
63
+ count: number = 0;
64
+
65
+ increment() {
66
+ this.count++;
67
+ }
68
+ ```
69
+
70
+ The important idea is not only shorter syntax.
71
+
72
+ The important idea is that the framework is making the bean instance itself the business-facing state host.
73
+
74
+ ### Vue 3
75
+
76
+ The default Vue mental model usually starts with explicit primitives:
77
+
78
+ ```typescript
79
+ const count = ref(0);
80
+
81
+ function increment() {
82
+ count.value++;
83
+ }
84
+ ```
85
+
86
+ ### Comparison takeaway
87
+
88
+ - Vue 3 teaches you to build reactivity from visible primitives
89
+ - Zova teaches you to work on top of a framework-managed reactive object
90
+
91
+ ## 2. Derived state
92
+
93
+ ### Zova
94
+
95
+ Derived state often looks like instance wiring:
96
+
97
+ ```typescript
98
+ protected async __init__() {
99
+ this.count2 = this.$computed(() => {
100
+ return `=== ${this.count} ===`;
101
+ });
102
+ }
103
+ ```
104
+
105
+ This makes derived state feel like part of object initialization and lifecycle wiring.
106
+
107
+ ### Vue 3
108
+
109
+ Derived state often looks like local reactive declaration:
110
+
111
+ ```typescript
112
+ const count2 = computed(() => `=== ${count.value} ===`);
113
+ ```
114
+
115
+ ### Comparison takeaway
116
+
117
+ - Vue 3 presents derived state as a local reactive value
118
+ - Zova often presents it as an instance-level property of a controller or bean
119
+
120
+ ## 3. Main wiring surface
121
+
122
+ ### Zova
123
+
124
+ Zova concentrates many setup concerns inside bean lifecycle methods such as:
125
+
126
+ - `__init__`
127
+ - `__dispose__`
128
+
129
+ That is where you often wire:
130
+
131
+ - computed values
132
+ - watchers
133
+ - derived state
134
+ - lifecycle cleanup
135
+
136
+ ### Vue 3
137
+
138
+ Vue 3 usually treats `setup()` as the main assembly point, then uses composition hooks around it.
139
+
140
+ ### Comparison takeaway
141
+
142
+ - Vue 3 is more obviously composition-function-centered
143
+ - Zova is more obviously lifecycle-and-object-centered
144
+
145
+ ## 4. Route state access
146
+
147
+ ### Zova
148
+
149
+ For page controllers, route-aware state is often part of the controller surface:
150
+
151
+ - `$route`
152
+ - `$params`
153
+ - `$query`
154
+
155
+ This keeps route-aware page logic close to the page controller itself.
156
+
157
+ ### Vue 3
158
+
159
+ Vue code more often pulls route state through:
160
+
161
+ - `useRoute()`
162
+ - `useRouter()`
163
+
164
+ ### Comparison takeaway
165
+
166
+ - Vue 3 usually pulls route state into local composition code
167
+ - Zova usually pushes route-aware state into the page-controller surface
168
+
169
+ ## 5. Sharing model
170
+
171
+ ### Zova
172
+
173
+ Zova uses IoC as a larger frontend architectural answer, not only as a small dependency-injection convenience.
174
+
175
+ That means questions often become:
176
+
177
+ - which bean owns this behavior?
178
+ - which scope should this bean live in?
179
+ - should this be resolved through injection or lookup?
180
+
181
+ ### Vue 3
182
+
183
+ Vue projects often combine several distinct sharing tools depending on the team and codebase:
184
+
185
+ - props and emits
186
+ - composables
187
+ - `provide/inject`
188
+ - store layers
189
+
190
+ ### Comparison takeaway
191
+
192
+ - Vue 3 gives a flexible base that can lead to multiple sharing styles in one codebase
193
+ - Zova tries to unify more of those patterns through bean and scope architecture
194
+
195
+ ## 6. Render organization
196
+
197
+ ### Zova
198
+
199
+ Zova treats render as part of a controller-oriented architecture.
200
+
201
+ A page can:
202
+
203
+ - render directly inside the controller
204
+ - later split render into a dedicated render bean
205
+ - also split style into a style bean
206
+ - later move additional state or behavior into service beans
207
+
208
+ ### Vue 3
209
+
210
+ Vue usually treats the component itself as the natural render center:
211
+
212
+ - template
213
+ - render function
214
+ - `setup()` locals feeding the component render
215
+
216
+ ### Comparison takeaway
217
+
218
+ - Vue 3 makes the component the obvious render center
219
+ - Zova makes the page or component controller architecture the larger center
220
+
221
+ ## 7. Growth path as complexity increases
222
+
223
+ ### Zova
224
+
225
+ A common Zova growth path is:
226
+
227
+ 1. start with one page controller
228
+ 2. split render into a render bean
229
+ 3. split style into a style bean
230
+ 4. extract state or logic into service or model beans when ownership becomes clearer
231
+
232
+ ### Vue 3
233
+
234
+ A common Vue growth path is:
235
+
236
+ 1. start with one component
237
+ 2. extract composables
238
+ 3. add child components
239
+ 4. introduce or extend store ownership where needed
240
+
241
+ ### Comparison takeaway
242
+
243
+ - Vue 3 complexity growth often feels more composition-first
244
+ - Zova complexity growth often feels more role-and-boundary-first
245
+
246
+ ## 8. Code-reading experience
247
+
248
+ ### Zova
249
+
250
+ When reading Zova, you often ask:
251
+
252
+ - which bean am I looking at?
253
+ - is this a page, component, service, model, render, or style role?
254
+ - what scope owns this bean?
255
+ - what runtime surface is being injected or refreshed onto it?
256
+
257
+ ### Vue 3
258
+
259
+ When reading Vue, you often ask:
260
+
261
+ - what lives in `setup()`?
262
+ - which composables are being used?
263
+ - which local refs/computeds feed the render?
264
+ - where does state ownership move to a store or parent component?
265
+
266
+ ### Comparison takeaway
267
+
268
+ The reading rhythm itself changes.
269
+
270
+ That is why a Vue expert can still feel unfamiliar inside Zova at first even though the lower-level reactive runtime is related.
271
+
272
+ ## What is the same underneath
273
+
274
+ Despite all the differences above, a few important foundations are still shared:
275
+
276
+ - Vue reactivity still matters underneath
277
+ - dependency tracking still matters underneath
278
+ - recomputation and rerender still matter underneath
279
+ - component runtime behavior still matters underneath
280
+
281
+ So the comparison is **not**:
282
+
283
+ - Zova versus Vue runtime
284
+
285
+ It is mostly:
286
+
287
+ - Zova’s architectural authoring model versus Vue’s default authoring habits
288
+
289
+ ## When to prefer this comparison page
290
+
291
+ Use this page when:
292
+
293
+ - you already know Vue and want a clean translation layer into Zova
294
+ - you want one page that summarizes the biggest architectural differences quickly
295
+ - you need to explain to another developer why Zova code should not be auto-refactored back toward generic Vue patterns
296
+
297
+ If you want the next level of detail after this page, continue with:
298
+
299
+ - [Zova Reactivity Under the Hood](/frontend/zova-reactivity-under-the-hood)
300
+ - [Zova Source Reading Map](/frontend/zova-source-reading-map)
301
+
302
+ ## Final takeaway
303
+
304
+ The most important comparison insight is simple:
305
+
306
+ > Vue 3 usually teaches explicit reactive primitives first and architectural composition second. Zova keeps the Vue runtime foundation but teaches explicit architectural roles first and hides more of the reactive primitive management behind framework-managed controller and bean surfaces.
307
+
308
+ Once that shift is clear, Zova code becomes much easier to read on its own terms.
@@ -0,0 +1,245 @@
1
+ # Backend Metadata to Frontend Table Actions Debug Checklist
2
+
3
+ This page is a symptom-first verify/debug companion for one narrow fullstack question:
4
+
5
+ > when a visible Student row action is wrong, stale, hidden, or missing, which layer should I check next?
6
+
7
+ Use this page together with:
8
+
9
+ - [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions)
10
+ - [Backend Metadata to Frontend Table Actions Source Reading Map](/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map)
11
+ - [Contract Loop Playbook](/fullstack/contract-loop-playbook)
12
+ - [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
13
+ - [Zova Table Source Reading Map](/frontend/zova-table-source-reading-map)
14
+
15
+ > [!TIP]
16
+ > **Mixed-chain diagnosis path**
17
+ >
18
+ > 1. **[Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions)** — understand the mixed chain conceptually
19
+ > 2. **[Backend Metadata to Frontend Table Actions Source Reading Map](/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map)** — trace the Student row-action chain in file order
20
+ > 3. **[Backend Metadata to Frontend Table Actions Debug Checklist](/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist)** — verify which layer is wrong when the visible action still fails
21
+ >
22
+ > **You are here:** step 3.
23
+ > **Previous recommended pages:** [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions) and [Backend Metadata to Frontend Table Actions Source Reading Map](/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map).
24
+
25
+ ## Why this page exists
26
+
27
+ The current docs already explain the mixed chain in two useful ways:
28
+
29
+ - conceptually, through the mixed-chain explainer page
30
+ - structurally, through the mixed-chain source-reading map
31
+
32
+ What was still missing was one page that starts from symptoms.
33
+
34
+ This page fills that gap.
35
+
36
+ It is not another contract-loop overview and not another table-runtime deep dive. It is a practical checklist for debugging one Student row-action chain.
37
+
38
+ ## Fastest mental model for diagnosis
39
+
40
+ A visible row action can fail at several different layers:
41
+
42
+ 1. backend row metadata may not point to the intended action resource
43
+ 2. custom backend action semantics may not have refreshed the generated frontend contract surface
44
+ 3. the frontend action resource may be missing or stale
45
+ 4. the page block/runtime handoff may not be feeding the right row schema into `ZTable`
46
+ 5. the table runtime may finally be filtering or resolving the action differently than expected
47
+
48
+ The fastest debugging strategy is:
49
+
50
+ > check the earliest possible source of truth first, and only descend into deeper runtime layers when the earlier layers already look correct.
51
+
52
+ ## Debugging checklist by layer
53
+
54
+ ### 1. Check the backend row metadata first
55
+
56
+ Start here when:
57
+
58
+ - the action is missing entirely
59
+ - the wrong action appears in the operations column
60
+ - the custom action is not present in the backend contract surface at all
61
+
62
+ Primary source anchor:
63
+
64
+ - `vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx`
65
+
66
+ What to confirm:
67
+
68
+ - the row metadata still uses the intended `ZovaRender.cell(...)` identity
69
+ - nested `ZovaRender.tableActionRow(...)` entries include the expected action names
70
+ - custom actions such as `training-student:actionSummary` or `training-student:actionDeleteForce` are still present where expected
71
+
72
+ If this layer is wrong, stop here and fix the metadata truth first.
73
+
74
+ ### 2. Check the forward-generated contract only when custom action semantics changed
75
+
76
+ Only do this when the visible action depends on a changed backend endpoint such as:
77
+
78
+ - `summary/:id`
79
+ - `deleteForce/:id`
80
+
81
+ Primary source anchors:
82
+
83
+ - `vona/src/suite/a-training/modules/training-student/src/controller/student.ts`
84
+ - `zova/src/suite/a-training/modules/training-student/cli/openapi.config.ts`
85
+ - `zova/src/suite/a-training/modules/training-student/src/api/trainingStudent.ts`
86
+ - `zova/src/suite/a-training/modules/training-student/src/model/student.ts`
87
+
88
+ What to confirm:
89
+
90
+ - the backend controller still exposes the intended custom endpoint
91
+ - the frontend module OpenAPI config still owns the expected operation slice
92
+ - the generated frontend API surface still contains the expected typed method
93
+ - the thin model facade still delegates to the correct generated API path while keeping the existing resource-owner story intact
94
+
95
+ If the endpoint changed but the generated contract did not refresh, the issue is not the visible action resource yet.
96
+ It is a forward-chain regeneration problem.
97
+
98
+ ### 3. Check that the frontend action resource exists and matches the metadata identity
99
+
100
+ Start here when:
101
+
102
+ - backend metadata looks correct
103
+ - generated contract also looks correct
104
+ - but the visible action still does not render or behaves like the wrong action implementation
105
+
106
+ Primary source anchors:
107
+
108
+ - `zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx`
109
+ - `zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionDeleteForce.tsx`
110
+ - `zova/src/suite/cabloy-basic/modules/basic-table/src/bean/tableCell.actionOperationsRow.tsx`
111
+
112
+ What to confirm:
113
+
114
+ - the expected custom or built-in action bean exists
115
+ - the resource identity in backend metadata still matches the frontend bean identity
116
+ - the custom action bean is still thin and delegates to the right model or command path
117
+ - `actionOperationsRow` is still able to include and render the child action resources
118
+
119
+ ### 4. Check the page handoff into the list/table runtime
120
+
121
+ Start here when:
122
+
123
+ - backend metadata and action resources both look correct
124
+ - but the list page still does not expose the action as expected
125
+
126
+ Primary source anchors:
127
+
128
+ - `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx`
129
+ - `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx`
130
+
131
+ What to confirm:
132
+
133
+ - `schemaRow` is still exposed from the stable resource owner
134
+ - `permissions` are still flowing through the shared page runtime
135
+ - `blockTable` is still bridging the expected `schemaRow`, `data`, and `tableScope` into `ZTable`
136
+
137
+ If this layer is wrong, the problem is in the page/runtime handoff, not in the action bean itself.
138
+
139
+ ### 5. Only then check final table/runtime resolution
140
+
141
+ Go here last when:
142
+
143
+ - metadata truth is correct
144
+ - generated contract is correct
145
+ - action resources exist
146
+ - page block handoff also looks correct
147
+ - but the action still renders incorrectly
148
+
149
+ Primary final-runtime anchor:
150
+
151
+ - `zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx`
152
+
153
+ At this point, switch from contract debugging into deeper table-runtime debugging.
154
+
155
+ For the broader table runtime reading path, continue with [Zova Table Source Reading Map](/frontend/zova-table-source-reading-map).
156
+
157
+ ## How to classify the failure
158
+
159
+ ### Visible action missing entirely
160
+
161
+ Most likely checks, in order:
162
+
163
+ 1. backend row metadata truth
164
+ 2. frontend action resource identity exists
165
+ 3. page block/schema handoff
166
+
167
+ ### Visible action exists but uses stale behavior
168
+
169
+ Most likely checks, in order:
170
+
171
+ 1. if custom semantics changed, inspect the forward-generated contract path
172
+ 2. distinguish generated-output drift from local dependency drift
173
+ 3. then confirm the action bean still delegates to the expected model/API path
174
+
175
+ ### Visible action exists but wrong permissions or visibility
176
+
177
+ This is often a narrower visibility problem rather than a full mixed-chain problem.
178
+
179
+ When that is the real issue, continue with [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide).
180
+
181
+ ### Visible action exists but wrong runtime/render resolution
182
+
183
+ Treat this as the deepest layer.
184
+
185
+ Only go here after upstream contract, generation, action-resource, and page handoff checks already pass.
186
+
187
+ ## Generated-output drift vs local dependency drift
188
+
189
+ A useful distinction is:
190
+
191
+ ### Generated-output drift
192
+
193
+ This is the problem when:
194
+
195
+ - the custom backend contract changed
196
+ - but the generated frontend API/model surface was not refreshed correctly
197
+
198
+ Typical response:
199
+
200
+ 1. confirm backend contract truth first
201
+ 2. refresh the generated frontend contract surface
202
+ 3. verify the generated output itself before debugging the visible action
203
+
204
+ ### Local dependency drift
205
+
206
+ This is the problem when:
207
+
208
+ - the generated output already contains the expected action contract or types
209
+ - but local consumers still behave as if the old version is installed
210
+
211
+ Typical response:
212
+
213
+ 1. stop editing source truth
214
+ 2. prove the generated handoff is already correct
215
+ 3. rerun the normal sync flow
216
+ 4. only then repair local install state if needed
217
+
218
+ For the broader drift vocabulary, continue with [Contract Loop Playbook](/fullstack/contract-loop-playbook).
219
+
220
+ ## What this page does not re-explain
221
+
222
+ This page deliberately does **not** re-teach:
223
+
224
+ - generic contract-loop direction and drift theory -> see [Contract Loop Playbook](/fullstack/contract-loop-playbook)
225
+ - the conceptual mixed-chain story -> see [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions)
226
+ - the file-order mixed-chain path -> see [Backend Metadata to Frontend Table Actions Source Reading Map](/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map)
227
+ - table-action permission semantics in depth -> see [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
228
+ - deep table runtime internals -> see [Zova Table Source Reading Map](/frontend/zova-table-source-reading-map)
229
+
230
+ Its job is only to tell you which layer to verify next when the visible Student row action still fails.
231
+
232
+ ## Where to read next
233
+
234
+ - If you need the conceptual mixed-chain explanation first, return to [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions).
235
+ - If you need the file-order path first, continue with [Backend Metadata to Frontend Table Actions Source Reading Map](/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map).
236
+ - If you want a proof-oriented layer-by-layer validation workflow after making a change, continue with [Backend Metadata to Frontend Table Actions Verify Playbook](/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook).
237
+ - If the issue is really visibility/permission logic, continue with [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide).
238
+ - If the mixed-chain layer itself now looks correct and you want the frontend consumer-side diagnosis family, continue with [Generated Contract Consumption Debug Checklist](/frontend/generated-contract-consumption-debug-checklist).
239
+ - If the issue becomes deep table-runtime resolution, descend into [Zova Table Source Reading Map](/frontend/zova-table-source-reading-map).
240
+
241
+ ## Final takeaway
242
+
243
+ The cleanest way to debug a visible Student row action is not to start from the deepest table runtime file.
244
+
245
+ Start from backend row metadata truth, then only move into generated contract follow-up, action resource existence, page handoff, and final runtime resolution as needed.
@@ -0,0 +1,139 @@
1
+ # Backend Metadata to Frontend Table Actions Source Reading Map
2
+
3
+ This page is a practical source-reading companion for one narrow fullstack question:
4
+
5
+ > if I need to trace one Student row-action chain across backend metadata, generated contract follow-up, and frontend action resources, which files should I open first, and in what order?
6
+
7
+ Use this page together with:
8
+
9
+ - [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions)
10
+ - [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
11
+ - [Frontend Metadata Back to Backend](/fullstack/frontend-metadata-to-backend)
12
+ - [TableCell Authoring Cookbook](/frontend/table-cell-cookbook)
13
+ - [Table + Resource CRUD Cookbook](/frontend/table-resource-crud-cookbook)
14
+ - [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
15
+
16
+ > [!TIP]
17
+ > **Mixed-chain reading path**
18
+ >
19
+ > 1. **[Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions)** — understand the mixed contract chain conceptually
20
+ > 2. **[Backend Metadata to Frontend Table Actions Source Reading Map](/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map)** — trace the same Student row-action chain in file order
21
+ >
22
+ > **You are here:** step 2.
23
+ > **Previous recommended page:** [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions).
24
+
25
+ ## Why this page exists
26
+
27
+ The current mixed-chain explainer page already answers the conceptual question well:
28
+
29
+ - backend metadata chooses frontend action resources
30
+ - generated API/model follow-up can join that same thread when custom actions need backend endpoints
31
+ - the visible row action is only the last step of the chain
32
+
33
+ What it does not isolate directly is the shortest source-order path through one real Student row-action thread.
34
+
35
+ This page fills that gap.
36
+
37
+ It is a file-order map, not another runtime explainer.
38
+
39
+ ## How to use this page
40
+
41
+ For the two paths below:
42
+
43
+ 1. start with the conceptual mixed-chain page first
44
+ 2. read the first source file to identify the current source of truth
45
+ 3. follow the handoff only until you can answer the question you actually have
46
+ 4. stop before you drift into deeper table/runtime internals unless they are really needed
47
+
48
+ ## 1. Built-in row-action chain
49
+
50
+ Use this path when your question is about:
51
+
52
+ - how one built-in row action becomes visible
53
+ - how `actionOperationsRow` composes visible child actions
54
+ - where backend metadata stops and frontend action resources start
55
+
56
+ ### Read the docs first
57
+
58
+ - [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions)
59
+ - [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
60
+ - [TableCell Authoring Cookbook](/frontend/table-cell-cookbook)
61
+
62
+ ### Then read source in this order
63
+
64
+ 1. `vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx`
65
+ 2. `zova/src/suite/cabloy-basic/modules/basic-table/src/bean/tableCell.actionOperationsRow.tsx`
66
+ 3. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx`
67
+ 4. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx`
68
+
69
+ ### What each file clarifies
70
+
71
+ - `studentSelectResItem.tsx` shows the backend-owned row DTO metadata that chooses `basic-table:actionOperationsRow` and the visible child actions inside it
72
+ - `tableCell.actionOperationsRow.tsx` shows how the frontend runtime filters those child actions by permission and renders them through nested action resources
73
+ - `blockPage/controller.tsx` shows how `schemaRow`, `permissions`, and list data are exposed from the stable resource owner into the page runtime
74
+ - `blockTable/controller.tsx` shows the bridge from page runtime into `ZTable`
75
+
76
+ ## 2. Custom action chain with generated contract follow-up
77
+
78
+ Use this path when your question is about:
79
+
80
+ - how a custom row action such as `summary` or `deleteForce` joins the mixed chain
81
+ - where the forward-generated API/model path enters
82
+ - how the visible action stays thin while backend truth and resource ownership remain coherent
83
+
84
+ ### Read the docs first
85
+
86
+ - [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions)
87
+ - [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
88
+ - [Frontend Metadata Back to Backend](/fullstack/frontend-metadata-to-backend)
89
+
90
+ ### Then read source in this order
91
+
92
+ 1. `vona/src/suite/a-training/modules/training-student/src/controller/student.ts`
93
+ 2. `vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx`
94
+ 3. `zova/src/suite/a-training/modules/training-student/cli/openapi.config.ts`
95
+ 4. `zova/src/suite/a-training/modules/training-student/src/api/trainingStudent.ts`
96
+ 5. `zova/src/suite/a-training/modules/training-student/src/model/student.ts`
97
+ 6. `zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx`
98
+ 7. `zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionDeleteForce.tsx`
99
+ 8. optional downstream handoff:
100
+ - `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx`
101
+ - `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx`
102
+
103
+ ### What each file clarifies
104
+
105
+ - `controller/student.ts` shows the backend source truth for custom endpoints such as `summary/:id` and `deleteForce/:id`
106
+ - `studentSelectResItem.tsx` shows the backend row metadata that inserts the custom row actions into the operations column
107
+ - `openapi.config.ts` shows the frontend module ownership rule for generated OpenAPI operations
108
+ - `api/trainingStudent.ts` shows the generated typed API surface that the frontend can consume
109
+ - `model/student.ts` shows the thin semantic facade over the stable resource owner
110
+ - `tableCell.actionSummary.tsx` shows a visible action that stays thin and delegates summary behavior into the model/API path
111
+ - `tableCell.actionDeleteForce.tsx` shows the same pattern for force-delete behavior
112
+ - `blockPage` and `blockTable` are only needed when the question becomes “how does the list runtime carry that row schema into visible table output?”
113
+
114
+ ## What this page does not re-explain
115
+
116
+ This page deliberately does **not** re-teach:
117
+
118
+ - generic table runtime internals -> see [Zova Table Source Reading Map](/frontend/zova-table-source-reading-map)
119
+ - CRUD list-page assembly -> see [Table + Resource CRUD Cookbook](/frontend/table-resource-crud-cookbook)
120
+ - row/bulk permission filtering semantics -> see [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
121
+ - the pure forward bridge -> see [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
122
+ - the pure reverse bridge -> see [Frontend Metadata Back to Backend](/fullstack/frontend-metadata-to-backend)
123
+
124
+ Its job is only to provide the shortest file-order path through one mixed Student row-action chain.
125
+
126
+ ## Where to read next
127
+
128
+ - If you need the conceptual mixed-chain explanation first, return to [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions).
129
+ - If you now want to prove the Student row-action chain end-to-end after a change, continue with [Backend Metadata to Frontend Table Actions Verify Playbook](/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook).
130
+ - If the visible Student row action is still wrong after you understand the file-order path, continue with [Backend Metadata to Frontend Table Actions Debug Checklist](/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist).
131
+ - If your next question is purely forward-chain, continue with [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk).
132
+ - If your next question is purely reverse-chain, continue with [Frontend Metadata Back to Backend](/fullstack/frontend-metadata-to-backend).
133
+ - If your next question becomes table-runtime specific, continue with [Zova Table Source Reading Map](/frontend/zova-table-source-reading-map) and [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide).
134
+
135
+ ## Final takeaway
136
+
137
+ The cleanest way to read a mixed Student row-action chain is not to jump directly into either the backend bridge docs or the deepest table runtime files.
138
+
139
+ Start from the backend row metadata that chooses the visible action resources, then follow the custom forward-generated path only when the action semantics actually require new backend endpoints.