cabloy 5.1.61 → 5.1.63
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.
- package/.claude/skills/cabloy-backend-scaffold/SKILL.md +2 -0
- package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -1
- package/.claude/skills/cabloy-domain-planning/SKILL.md +212 -0
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +2 -0
- package/CHANGELOG.md +55 -0
- package/CLAUDE.md +1 -0
- package/cabloy-docs/.vitepress/config.mjs +158 -12
- package/cabloy-docs/ai/docs-skills-rules-mapping.md +8 -0
- package/cabloy-docs/ai/future-skill-roadmap.md +2 -0
- package/cabloy-docs/ai/skills.md +1 -0
- package/cabloy-docs/backend/backend-contract-emission-output-inspection.md +189 -0
- package/cabloy-docs/backend/backend-contract-emission-source-reading-map.md +160 -0
- package/cabloy-docs/backend/backend-contract-emission-specimen.md +170 -0
- package/cabloy-docs/backend/backend-resource-module-contract-chain.md +323 -0
- package/cabloy-docs/backend/backend-source-reading-debug-checklist.md +173 -0
- package/cabloy-docs/backend/backend-source-reading-roadmap.md +129 -0
- package/cabloy-docs/backend/backend-source-reading-verify-playbook.md +166 -0
- package/cabloy-docs/backend/bean-scene-authoring.md +4 -4
- package/cabloy-docs/backend/broadcast-guide.md +3 -3
- package/cabloy-docs/backend/cli.md +20 -11
- package/cabloy-docs/backend/config-guide.md +4 -4
- package/cabloy-docs/backend/controller-aop-guide.md +10 -10
- package/cabloy-docs/backend/controller-guide.md +12 -2
- package/cabloy-docs/backend/crud-workflow.md +7 -3
- package/cabloy-docs/backend/dto-guide.md +12 -2
- package/cabloy-docs/backend/dto-infer-generation.md +201 -25
- package/cabloy-docs/backend/election-guide.md +2 -2
- package/cabloy-docs/backend/entity-guide.md +12 -3
- package/cabloy-docs/backend/error-guide.md +3 -3
- package/cabloy-docs/backend/event-guide.md +4 -4
- package/cabloy-docs/backend/external-aop-guide.md +2 -2
- package/cabloy-docs/backend/field-indexes.md +9 -3
- package/cabloy-docs/backend/foundation.md +8 -8
- package/cabloy-docs/backend/i18n-guide.md +6 -6
- package/cabloy-docs/backend/internal-aop-guide.md +2 -2
- package/cabloy-docs/backend/introduction.md +13 -0
- package/cabloy-docs/backend/migration-and-changes.md +3 -3
- package/cabloy-docs/backend/model-guide.md +16 -6
- package/cabloy-docs/backend/openapi-guide.md +3 -0
- package/cabloy-docs/backend/queue-guide.md +3 -3
- package/cabloy-docs/backend/redlock-guide.md +2 -2
- package/cabloy-docs/backend/schedule-guide.md +2 -2
- package/cabloy-docs/backend/scripts.md +8 -0
- package/cabloy-docs/backend/serialization-guide.md +2 -2
- package/cabloy-docs/backend/service-guide.md +18 -9
- package/cabloy-docs/backend/startup-guide.md +5 -5
- package/cabloy-docs/backend/status-guide.md +7 -7
- package/cabloy-docs/backend/unit-testing.md +3 -3
- package/cabloy-docs/backend/vona-source-reading-map.md +157 -0
- package/cabloy-docs/backend/websocket-protocol-guide.md +5 -5
- package/cabloy-docs/backend/websocket-usage-guide.md +15 -8
- package/cabloy-docs/frontend/a-model-under-the-hood.md +281 -0
- package/cabloy-docs/frontend/a-openapi-under-the-hood.md +248 -0
- package/cabloy-docs/frontend/a-router-guide.md +307 -0
- package/cabloy-docs/frontend/api-guide.md +4 -4
- package/cabloy-docs/frontend/api-schema-guide.md +1 -0
- package/cabloy-docs/frontend/app-startup-guide.md +7 -4
- package/cabloy-docs/frontend/bean-scene-authoring.md +1 -1
- package/cabloy-docs/frontend/behavior-guide.md +16 -16
- package/cabloy-docs/frontend/cli.md +5 -5
- package/cabloy-docs/frontend/command-scene-authoring.md +17 -8
- package/cabloy-docs/frontend/component-guide.md +5 -5
- package/cabloy-docs/frontend/component-props-guide.md +1 -1
- package/cabloy-docs/frontend/component-v-model-guide.md +2 -2
- package/cabloy-docs/frontend/filter-query-select-data-flow-guide.md +260 -0
- package/cabloy-docs/frontend/form-guide.md +27 -30
- package/cabloy-docs/frontend/form-scene-to-page-meta-guide.md +303 -0
- package/cabloy-docs/frontend/foundation.md +10 -6
- package/cabloy-docs/frontend/frontend-source-reading-roadmap.md +249 -0
- package/cabloy-docs/frontend/generated-contract-consumption-debug-checklist.md +190 -0
- package/cabloy-docs/frontend/generated-contract-consumption-entry-branch.md +205 -0
- package/cabloy-docs/frontend/generated-contract-consumption-list-branch.md +157 -0
- package/cabloy-docs/frontend/generated-contract-consumption-specimen.md +203 -0
- package/cabloy-docs/frontend/generated-contract-consumption-verify-playbook.md +189 -0
- package/cabloy-docs/frontend/generic-component-guide.md +1 -1
- package/cabloy-docs/frontend/introduction.md +29 -7
- package/cabloy-docs/frontend/model-architecture.md +38 -2
- package/cabloy-docs/frontend/model-resource-cookbook.md +11 -8
- package/cabloy-docs/frontend/model-resource-internals-deep-dive.md +238 -0
- package/cabloy-docs/frontend/model-resource-owner-pattern.md +22 -2
- package/cabloy-docs/frontend/model-resource-usage-guide.md +22 -6
- package/cabloy-docs/frontend/model-state-guide.md +12 -9
- package/cabloy-docs/frontend/module-scope.md +8 -8
- package/cabloy-docs/frontend/modules-and-suites.md +2 -1
- package/cabloy-docs/frontend/navigation-guards-guide.md +7 -0
- package/cabloy-docs/frontend/openapi-sdk-guide.md +12 -4
- package/cabloy-docs/frontend/page-guide.md +9 -9
- package/cabloy-docs/frontend/page-meta-guide.md +466 -0
- package/cabloy-docs/frontend/page-params-guide.md +3 -3
- package/cabloy-docs/frontend/page-query-guide.md +2 -2
- package/cabloy-docs/frontend/page-route-guide.md +6 -0
- package/cabloy-docs/frontend/permission-formscene-action-visibility-guide.md +263 -0
- package/cabloy-docs/frontend/quickstart.md +14 -2
- package/cabloy-docs/frontend/resource-entry-page-deep-dive.md +271 -0
- package/cabloy-docs/frontend/resource-list-page-deep-dive.md +279 -0
- package/cabloy-docs/frontend/rest-resource-source-reading-map.md +522 -0
- package/cabloy-docs/frontend/rest-resource-under-the-hood.md +622 -0
- package/cabloy-docs/frontend/root-behaviors-guide.md +282 -0
- package/cabloy-docs/frontend/route-alias-guide.md +6 -0
- package/cabloy-docs/frontend/router-stack-guide.md +229 -0
- package/cabloy-docs/frontend/router-tabs-introduction.md +26 -3
- package/cabloy-docs/frontend/router-tabs-layout-integration.md +367 -0
- package/cabloy-docs/frontend/router-tabs-mechanism.md +6 -0
- package/cabloy-docs/frontend/router-tabs-route-meta-cookbook.md +7 -0
- package/cabloy-docs/frontend/router-tabs-vs-stack.md +167 -0
- package/cabloy-docs/frontend/router-view-hosts-guide.md +450 -0
- package/cabloy-docs/frontend/server-data.md +2 -1
- package/cabloy-docs/frontend/system-startup-guide.md +2 -2
- package/cabloy-docs/frontend/table-action-visibility-permission-flow-guide.md +263 -0
- package/cabloy-docs/frontend/table-cell-cookbook.md +571 -0
- package/cabloy-docs/frontend/table-guide.md +373 -0
- package/cabloy-docs/frontend/table-resource-crud-cookbook.md +496 -0
- package/cabloy-docs/frontend/zova-app-guide.md +251 -0
- package/cabloy-docs/frontend/zova-form-source-reading-map.md +7 -9
- package/cabloy-docs/frontend/zova-form-under-the-hood.md +5 -0
- package/cabloy-docs/frontend/zova-router-under-the-hood.md +561 -0
- package/cabloy-docs/frontend/zova-source-reading-map.md +101 -7
- package/cabloy-docs/frontend/zova-table-controller-render-supplement.md +225 -0
- package/cabloy-docs/frontend/zova-table-source-reading-map.md +317 -0
- package/cabloy-docs/frontend/zova-table-under-the-hood.md +532 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist.md +245 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map.md +139 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook.md +248 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions.md +511 -0
- package/cabloy-docs/fullstack/contract-loop-playbook.md +8 -2
- package/cabloy-docs/fullstack/edition-collaboration-differences.md +6 -0
- package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +181 -48
- package/cabloy-docs/fullstack/introduction.md +3 -0
- package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -2
- package/cabloy-docs/fullstack/suites-and-modules.md +333 -0
- package/cabloy-docs/fullstack/tutorial-1-first-module.md +3 -0
- package/cabloy-docs/fullstack/tutorial-2-first-crud.md +4 -0
- package/cabloy-docs/fullstack/tutorial-3-frontend-metadata-sharing.md +4 -0
- package/cabloy-docs/fullstack/tutorial-4-custom-level-renderers.md +31 -19
- package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +5 -0
- package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +4 -0
- package/cabloy-docs/fullstack/tutorials-overview.md +1 -1
- package/cabloy-docs/reference/bean-scene-boilerplates.md +13 -13
- package/cabloy-docs/reference/package-map.md +4 -3
- package/package.json +1 -1
- package/vona/pnpm-lock.yaml +22 -258
- package/vona/src/suite/a-training/modules/training-student/package.json +53 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts +400 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +18 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
- package/vona/src/suite/a-training/modules/training-student/src/bean/meta.index.ts +12 -0
- package/vona/src/suite/a-training/modules/training-student/src/bean/meta.version.ts +21 -0
- package/vona/src/suite/a-training/modules/training-student/src/bean/ssrMenu.student.ts +29 -0
- package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +15 -0
- package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +15 -0
- package/vona/src/suite/a-training/modules/training-student/src/controller/student.ts +74 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +28 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectReq.tsx +44 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectRes.tsx +11 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx +45 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +42 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +28 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +25 -0
- package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +84 -0
- package/vona/src/suite/a-training/modules/training-student/src/index.ts +2 -0
- package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +10 -0
- package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +57 -0
- package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +173 -0
- package/vona/src/suite/a-training/modules/training-student/tsconfig.build.json +11 -0
- package/vona/src/suite/a-training/modules/training-student/tsconfig.json +7 -0
- package/vona/src/suite/a-training/package.json +12 -0
- package/vona/src/suite/a-training/tsconfig.base.json +4 -0
- package/vona/src/suite/a-training/tsconfig.json +10 -0
- package/zova/packages-zova/zova/package.json +2 -2
- package/zova/pnpm-lock.yaml +423 -682
- package/zova/src/suite/a-demo/modules/demo-basic/src/page/toolOne/render.tsx +5 -3
- package/zova/src/suite/a-home/modules/home-login/src/page/login/render.tsx +5 -3
- package/zova/src/suite/a-training/modules/training-student/cli/openapi.config.ts +9 -0
- package/zova/src/suite/a-training/modules/training-student/package.json +57 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/component/formFieldLevel.ts +31 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/index.ts +258 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +7 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/baseURL.ts +5 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/index.ts +3 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +196 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +4146 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/trainingStudent.ts +151 -0
- package/zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts +43 -0
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionDeleteForce.tsx +53 -0
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx +56 -0
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.level.tsx +63 -0
- package/zova/src/suite/a-training/modules/training-student/src/component/formFieldLevel/controller.tsx +117 -0
- package/zova/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +9 -0
- package/zova/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +9 -0
- package/zova/src/suite/a-training/modules/training-student/src/index.ts +2 -0
- package/zova/src/suite/a-training/modules/training-student/src/model/student.ts +42 -0
- package/zova/src/suite/a-training/modules/training-student/tsconfig.build.json +13 -0
- package/zova/src/suite/a-training/modules/training-student/tsconfig.json +5 -0
- package/zova/src/suite/a-training/package.json +12 -0
- package/zova/src/suite/a-training/tsconfig.base.json +4 -0
- package/zova/src/suite/a-training/tsconfig.json +4 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/package.json +60 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/.metadata/index.ts +137 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/.metadata/locales.ts +7 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/.metadata/this.ts +2 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/bean/behavior.appModal.tsx +260 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/config/config.ts +39 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/config/locale/en-us.ts +7 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/config/locale/zh-cn.ts +7 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/index.ts +4 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/lib/appModalItem.ts +16 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/lib/index.ts +1 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/monkey.ts +38 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/monkeySys.ts +14 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/service/appModal.ts +89 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/types/appModal.ts +52 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/types/index.ts +1 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/tsconfig.build.json +13 -0
- package/zova/src/suite/cabloy-basic/modules/basic-app/tsconfig.json +5 -0
- package/zova/src/suite/cabloy-basic/modules/basic-commands/package.json +6 -1
- package/zova/src/suite/cabloy-basic/modules/basic-commands/src/.metadata/index.ts +16 -0
- package/zova/src/suite/cabloy-basic/modules/basic-commands/src/bean/command.alert.tsx +8 -14
- package/zova/src/suite/cabloy-basic/modules/basic-commands/src/bean/command.confirm.tsx +10 -7
- package/zova/src/suite/cabloy-basic/modules/basic-commands/src/bean/command.prompt.tsx +30 -0
- package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockForm/controller.tsx +5 -3
- package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/formFieldSelect/controller.tsx +29 -7
- package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/select/controller.tsx +34 -11
- package/zova/src/suite/cabloy-basic/modules/basic-table/package.json +6 -1
- package/zova/src/suite/cabloy-basic/modules/basic-table/src/bean/tableCell.actionDelete.tsx +4 -2
- package/zova/src/suite/cabloy-basic/package.json +1 -0
- package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +3 -3
- package/zova/src/suite-vendor/a-zova/modules/a-table/src/lib/tableCell.ts +1 -1
- package/zova/src/suite-vendor/a-zova/package.json +2 -2
|
@@ -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.
|
package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map.md
ADDED
|
@@ -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.
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
# Backend Metadata to Frontend Table Actions Verify Playbook
|
|
2
|
+
|
|
3
|
+
This page is a proof-oriented verification companion for one narrow fullstack question:
|
|
4
|
+
|
|
5
|
+
> after I change a Student row-action chain, what do I need to verify layer by layer before I trust the result?
|
|
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 Debug Checklist](/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist)
|
|
11
|
+
- [Backend Metadata to Frontend Table Actions Source Reading Map](/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map)
|
|
12
|
+
- [Contract Loop Playbook](/fullstack/contract-loop-playbook)
|
|
13
|
+
- [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
|
|
14
|
+
|
|
15
|
+
> [!TIP]
|
|
16
|
+
> **Mixed-chain verification 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 Verify Playbook](/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook)** — prove the chain is correct after your change
|
|
21
|
+
> 4. **[Backend Metadata to Frontend Table Actions Debug Checklist](/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist)** — use only when the visible result is still wrong
|
|
22
|
+
>
|
|
23
|
+
> **You are here:** step 3.
|
|
24
|
+
> **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).
|
|
25
|
+
|
|
26
|
+
## Why this page exists
|
|
27
|
+
|
|
28
|
+
The current mixed-chain family already gives you three useful views:
|
|
29
|
+
|
|
30
|
+
- the conceptual chain
|
|
31
|
+
- the file-order source-reading path
|
|
32
|
+
- the symptom-first debug checklist
|
|
33
|
+
|
|
34
|
+
What it did not yet isolate directly was a **proof-oriented verification workflow**.
|
|
35
|
+
|
|
36
|
+
This page fills that gap.
|
|
37
|
+
|
|
38
|
+
It is not another diagnosis page. It is a playbook for proving one Student row-action chain is correct after a change.
|
|
39
|
+
|
|
40
|
+
## Fastest mental model for verification
|
|
41
|
+
|
|
42
|
+
A mixed Student row-action change is usually correct only when all of these are true:
|
|
43
|
+
|
|
44
|
+
1. backend metadata truth still points to the intended action resources
|
|
45
|
+
2. if custom semantics changed, the generated frontend contract surface is refreshed correctly
|
|
46
|
+
3. the frontend action resources still align with the intended identities and behavior
|
|
47
|
+
4. the page/runtime handoff still carries the expected row schema and permissions into `ZTable`
|
|
48
|
+
5. the visible Admin behavior matches the intended contract
|
|
49
|
+
|
|
50
|
+
The fastest verification strategy is:
|
|
51
|
+
|
|
52
|
+
> prove each layer in order, and only classify drift or runtime issues after those proofs already pass.
|
|
53
|
+
|
|
54
|
+
## Phase 1: Scope the branch first
|
|
55
|
+
|
|
56
|
+
Before checking files, decide what kind of change you actually made.
|
|
57
|
+
|
|
58
|
+
### Mostly reverse-chain
|
|
59
|
+
|
|
60
|
+
Use this path when:
|
|
61
|
+
|
|
62
|
+
- you changed only which frontend action resource a row or field metadata points to
|
|
63
|
+
- no new backend endpoint or response contract is needed
|
|
64
|
+
- the visible change is mostly metadata-driven
|
|
65
|
+
|
|
66
|
+
Typical examples:
|
|
67
|
+
|
|
68
|
+
- switching a field to `basic-table:actionView`
|
|
69
|
+
- adding or reordering actions under `actionOperationsRow`
|
|
70
|
+
- changing a custom frontend action resource that backend metadata references
|
|
71
|
+
|
|
72
|
+
### Mostly forward-chain
|
|
73
|
+
|
|
74
|
+
Use this path when:
|
|
75
|
+
|
|
76
|
+
- the action semantics changed because backend endpoint truth changed
|
|
77
|
+
- frontend generated API consumers must regenerate
|
|
78
|
+
- the visible row action is only the last step of a backend-contract change
|
|
79
|
+
|
|
80
|
+
Typical examples:
|
|
81
|
+
|
|
82
|
+
- adding or changing `summary`
|
|
83
|
+
- adding or changing `deleteForce`
|
|
84
|
+
|
|
85
|
+
### True mixed custom-action case
|
|
86
|
+
|
|
87
|
+
Use this path when both are true:
|
|
88
|
+
|
|
89
|
+
- backend endpoint truth changed
|
|
90
|
+
- backend row metadata also points to custom frontend action resources that expose the result visibly
|
|
91
|
+
|
|
92
|
+
That is the full mixed-chain case this playbook is built for.
|
|
93
|
+
|
|
94
|
+
## Phase 2: Prove backend source truth
|
|
95
|
+
|
|
96
|
+
Start with the earliest source of truth that should already be correct.
|
|
97
|
+
|
|
98
|
+
Primary anchors:
|
|
99
|
+
|
|
100
|
+
- `vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx`
|
|
101
|
+
- `vona/src/suite/a-training/modules/training-student/src/controller/student.ts`
|
|
102
|
+
- `vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx`
|
|
103
|
+
|
|
104
|
+
What to prove:
|
|
105
|
+
|
|
106
|
+
- row metadata still points to the intended action resources
|
|
107
|
+
- the controller still exposes the intended custom endpoint when one exists
|
|
108
|
+
- the response/request DTO truth still matches the intended action semantics
|
|
109
|
+
|
|
110
|
+
If this phase fails, stop here.
|
|
111
|
+
Do not debug frontend runtime yet.
|
|
112
|
+
|
|
113
|
+
## Phase 3: Prove the emitted/generated handoff
|
|
114
|
+
|
|
115
|
+
Only do this when the change touches custom action semantics or any backend-owned contract shape.
|
|
116
|
+
|
|
117
|
+
Primary anchors:
|
|
118
|
+
|
|
119
|
+
- `zova/src/suite/a-training/modules/training-student/cli/openapi.config.ts`
|
|
120
|
+
- `zova/src/suite/a-training/modules/training-student/src/api/trainingStudent.ts`
|
|
121
|
+
- any reverse-shared generated output already relevant to the Student row-action path
|
|
122
|
+
|
|
123
|
+
What to prove:
|
|
124
|
+
|
|
125
|
+
- the frontend module still owns the expected generated OpenAPI slice
|
|
126
|
+
- the generated frontend API surface contains the expected custom method or changed contract
|
|
127
|
+
- if the change is reverse-sharing oriented, the refreshed metadata/build handoff is already correct before debugging downstream consumers
|
|
128
|
+
|
|
129
|
+
If this phase fails, the problem is still in the handoff/generation layer, not in the visible action resource.
|
|
130
|
+
|
|
131
|
+
## Phase 4: Prove frontend resource alignment
|
|
132
|
+
|
|
133
|
+
Once contract handoff looks correct, prove that the frontend action/resource layer still aligns with it.
|
|
134
|
+
|
|
135
|
+
Primary anchors:
|
|
136
|
+
|
|
137
|
+
- `zova/src/suite/a-training/modules/training-student/src/model/student.ts`
|
|
138
|
+
- `zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx`
|
|
139
|
+
- `zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionDeleteForce.tsx`
|
|
140
|
+
- `zova/src/suite/cabloy-basic/modules/basic-table/src/bean/tableCell.actionOperationsRow.tsx`
|
|
141
|
+
|
|
142
|
+
What to prove:
|
|
143
|
+
|
|
144
|
+
- the custom or built-in action bean identity still matches the backend metadata identity
|
|
145
|
+
- thin model facades still delegate to the intended generated API/model path
|
|
146
|
+
- the action bean is still thin and semantic rather than acting like a second competing resource owner
|
|
147
|
+
- `actionOperationsRow` can still include and render the intended child actions
|
|
148
|
+
|
|
149
|
+
## Phase 5: Prove page/runtime handoff
|
|
150
|
+
|
|
151
|
+
Only now move into the page runtime handoff.
|
|
152
|
+
|
|
153
|
+
Primary anchors:
|
|
154
|
+
|
|
155
|
+
- `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx`
|
|
156
|
+
- `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockTable/controller.tsx`
|
|
157
|
+
|
|
158
|
+
What to prove:
|
|
159
|
+
|
|
160
|
+
- `schemaRow` still contains the intended row-action metadata
|
|
161
|
+
- `permissions` still flow into the page runtime as expected
|
|
162
|
+
- `blockTable` still bridges the expected `schemaRow`, `data`, and `tableScope` into `ZTable`
|
|
163
|
+
|
|
164
|
+
If this phase fails, the issue is no longer contract definition or action resource alignment. It is the list/runtime handoff.
|
|
165
|
+
|
|
166
|
+
## Phase 6: Prove visible Admin behavior
|
|
167
|
+
|
|
168
|
+
Only after the earlier phases pass should you treat the page as ready for visible behavior checks.
|
|
169
|
+
|
|
170
|
+
What to prove in Admin:
|
|
171
|
+
|
|
172
|
+
- the expected row action is visible where it should be
|
|
173
|
+
- built-in or custom action ordering still matches the metadata truth
|
|
174
|
+
- custom action execution still uses the intended behavior
|
|
175
|
+
- after execution, the list/runtime state still matches the expected refresh/invalidation result
|
|
176
|
+
|
|
177
|
+
This is the point where the row-action chain becomes user-visible rather than just structurally correct.
|
|
178
|
+
|
|
179
|
+
## Phase 7: Classify drift only after proof steps
|
|
180
|
+
|
|
181
|
+
If the result is still wrong after the earlier phases, then classify the problem.
|
|
182
|
+
|
|
183
|
+
### Generated-output drift
|
|
184
|
+
|
|
185
|
+
This is the problem when:
|
|
186
|
+
|
|
187
|
+
- backend or reverse-shared source truth changed
|
|
188
|
+
- but the generated/shared handoff is still stale or incomplete
|
|
189
|
+
|
|
190
|
+
### Local dependency drift
|
|
191
|
+
|
|
192
|
+
This is the problem when:
|
|
193
|
+
|
|
194
|
+
- the generated/shared output already looks correct
|
|
195
|
+
- but local consumers still behave as if the old version is installed
|
|
196
|
+
|
|
197
|
+
### Visibility-only issue
|
|
198
|
+
|
|
199
|
+
This is the problem when:
|
|
200
|
+
|
|
201
|
+
- the action exists and the contract chain is correct
|
|
202
|
+
- but the action is hidden only by permissions or visibility logic
|
|
203
|
+
|
|
204
|
+
When that is the true problem, continue with [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide).
|
|
205
|
+
|
|
206
|
+
### Deeper table-runtime resolution issue
|
|
207
|
+
|
|
208
|
+
This is the problem when:
|
|
209
|
+
|
|
210
|
+
- metadata truth, generated handoff, frontend action alignment, and page handoff all already look correct
|
|
211
|
+
- but the final visible action still resolves incorrectly
|
|
212
|
+
|
|
213
|
+
Only then descend into the deeper table runtime docs.
|
|
214
|
+
|
|
215
|
+
## What this page does not re-explain
|
|
216
|
+
|
|
217
|
+
This page deliberately does **not** re-teach:
|
|
218
|
+
|
|
219
|
+
- generic contract-loop direction and drift theory -> see [Contract Loop Playbook](/fullstack/contract-loop-playbook)
|
|
220
|
+
- the conceptual mixed-chain story -> see [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions)
|
|
221
|
+
- 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)
|
|
222
|
+
- the symptom-first diagnosis path -> see [Backend Metadata to Frontend Table Actions Debug Checklist](/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist)
|
|
223
|
+
- deep visibility/permission semantics -> see [Table Action Visibility and Permission Flow Guide](/frontend/table-action-visibility-permission-flow-guide)
|
|
224
|
+
- deep table-runtime internals -> see [Zova Table Source Reading Map](/frontend/zova-table-source-reading-map)
|
|
225
|
+
|
|
226
|
+
Its job is only to tell you what must be true at each layer before you trust the changed Student row-action chain.
|
|
227
|
+
|
|
228
|
+
## Where to read next
|
|
229
|
+
|
|
230
|
+
- If you need the conceptual mixed-chain page, return to [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions).
|
|
231
|
+
- If you need the file-order path, continue with [Backend Metadata to Frontend Table Actions Source Reading Map](/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map).
|
|
232
|
+
- If the visible result is still wrong and you want symptom-first diagnosis, continue with [Backend Metadata to Frontend Table Actions Debug Checklist](/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist).
|
|
233
|
+
- If the issue is really about direction/drift theory, return to [Contract Loop Playbook](/fullstack/contract-loop-playbook).
|
|
234
|
+
- If the bridge and mixed-chain proof already look correct and you now want the consumer-side verification family, continue with [Generated Contract Consumption Verify Playbook](/frontend/generated-contract-consumption-verify-playbook) and [Generated Contract Consumption Debug Checklist](/frontend/generated-contract-consumption-debug-checklist).
|
|
235
|
+
|
|
236
|
+
## Final takeaway
|
|
237
|
+
|
|
238
|
+
The cleanest way to verify a changed Student row-action chain is not to jump straight into deep runtime debugging.
|
|
239
|
+
|
|
240
|
+
First prove:
|
|
241
|
+
|
|
242
|
+
- backend source truth
|
|
243
|
+
- generated/shared handoff
|
|
244
|
+
- frontend action/resource alignment
|
|
245
|
+
- page/runtime handoff
|
|
246
|
+
- visible Admin behavior
|
|
247
|
+
|
|
248
|
+
Only then classify drift or descend into deeper runtime issues.
|