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.
- package/.claude/hooks/contract-loop-gate.ts +296 -0
- package/.claude/settings.json +16 -0
- package/.claude/skills/cabloy-backend-scaffold/SKILL.md +2 -0
- package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -0
- package/.claude/skills/cabloy-contract-loop/SKILL.md +89 -16
- package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +102 -14
- package/.claude/skills/cabloy-contract-loop/references/resource-custom-state-pattern.md +4 -0
- package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +32 -14
- package/.claude/skills/cabloy-domain-planning/SKILL.md +212 -0
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +13 -0
- package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +2 -0
- package/.claude/skills/cabloy-module-removal/SKILL.md +144 -0
- package/.claude/skills/cabloy-resource-field-update/SKILL.md +7 -0
- package/.claude/skills/cabloy-zova-source-reading/SKILL.md +221 -0
- package/.claude/skills/cabloy-zova-source-reading/references/analysis-modes.md +91 -0
- package/.claude/skills/cabloy-zova-source-reading/references/core-reading-paths.md +117 -0
- package/CHANGELOG.md +64 -0
- package/CLAUDE.md +11 -0
- package/cabloy-docs/.vitepress/config.mjs +197 -5
- package/cabloy-docs/ai/cli-to-skill-map.md +7 -0
- package/cabloy-docs/ai/docs-skills-rules-mapping.md +22 -0
- package/cabloy-docs/ai/future-skill-roadmap.md +12 -7
- package/cabloy-docs/ai/introduction.md +1 -0
- package/cabloy-docs/ai/playbook-backend-module.md +6 -0
- package/cabloy-docs/ai/playbook-module-removal.md +164 -0
- package/cabloy-docs/ai/skills.md +12 -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 +18 -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 +30 -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 +15 -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 +12 -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 +271 -0
- 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 +6 -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 +3 -1
- package/cabloy-docs/frontend/behavior-guide.md +16 -16
- package/cabloy-docs/frontend/cli.md +14 -2
- package/cabloy-docs/frontend/command-scene-authoring.md +504 -0
- 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/design-principles.md +6 -0
- package/cabloy-docs/frontend/fetch-interceptor-guide.md +440 -0
- package/cabloy-docs/frontend/filter-query-select-data-flow-guide.md +260 -0
- package/cabloy-docs/frontend/form-guide.md +786 -0
- package/cabloy-docs/frontend/form-scene-to-page-meta-guide.md +303 -0
- package/cabloy-docs/frontend/foundation.md +33 -0
- 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 +38 -5
- package/cabloy-docs/frontend/ioc-and-beans.md +6 -0
- package/cabloy-docs/frontend/mock-guide.md +1 -0
- package/cabloy-docs/frontend/model-architecture.md +288 -39
- package/cabloy-docs/frontend/model-resource-best-practices.md +379 -0
- package/cabloy-docs/frontend/model-resource-cookbook.md +508 -0
- package/cabloy-docs/frontend/model-resource-internals-deep-dive.md +238 -0
- package/cabloy-docs/frontend/model-resource-owner-pattern.md +402 -0
- package/cabloy-docs/frontend/model-resource-usage-guide.md +334 -0
- package/cabloy-docs/frontend/model-state-guide.md +371 -15
- 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 +17 -6
- package/cabloy-docs/frontend/page-guide.md +15 -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 +18 -2
- package/cabloy-docs/frontend/reading-zova-for-vue-developers.md +266 -0
- 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 +4 -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 +568 -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 +293 -0
- package/cabloy-docs/frontend/zova-form-under-the-hood.md +561 -0
- package/cabloy-docs/frontend/zova-reactivity-under-the-hood.md +320 -0
- package/cabloy-docs/frontend/zova-router-under-the-hood.md +561 -0
- package/cabloy-docs/frontend/zova-source-reading-map.md +421 -0
- 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/frontend/zova-vs-vue3-comparison.md +308 -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 +356 -0
- package/cabloy-docs/fullstack/edition-collaboration-differences.md +6 -0
- package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +199 -23
- package/cabloy-docs/fullstack/introduction.md +15 -1
- package/cabloy-docs/fullstack/openapi-to-sdk.md +135 -11
- 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 +6 -2
- package/cabloy-docs/fullstack/tutorial-4-custom-level-renderers.md +60 -23
- package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +14 -7
- package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +6 -0
- package/cabloy-docs/fullstack/tutorials-overview.md +17 -4
- package/cabloy-docs/reference/bean-scene-boilerplates.md +15 -13
- package/cabloy-docs/reference/package-map.md +4 -3
- package/package.json +2 -1
- package/scripts/init.ts +2 -18
- package/scripts/initTestData.ts +25 -0
- package/scripts/upgrade.ts +17 -2
- package/vona/pnpm-lock.yaml +48 -194
- 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-cli/cli/package.json +2 -2
- package/zova/packages-cli/cli-set-front/cli/templates/openapi/config/boilerplate/module/openapi.config.ts +6 -1
- package/zova/packages-cli/cli-set-front/package.json +1 -1
- package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.generate.ts +34 -4
- package/zova/packages-zova/zova/package.json +2 -2
- package/zova/pnpm-lock.yaml +416 -690
- 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 +52 -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 +51 -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-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-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,190 @@
|
|
|
1
|
+
# Generated Contract Consumption Debug Checklist
|
|
2
|
+
|
|
3
|
+
This page is a symptom-first diagnostic companion for one narrow frontend question:
|
|
4
|
+
|
|
5
|
+
> when generated contract consumption still looks wrong, which frontend consumer layer should I inspect next?
|
|
6
|
+
|
|
7
|
+
Use this page together with:
|
|
8
|
+
|
|
9
|
+
- [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen)
|
|
10
|
+
- [Generated Contract Consumption: List Branch](/frontend/generated-contract-consumption-list-branch)
|
|
11
|
+
- [Generated Contract Consumption: Entry Branch](/frontend/generated-contract-consumption-entry-branch)
|
|
12
|
+
- [Generated Contract Consumption Verify Playbook](/frontend/generated-contract-consumption-verify-playbook)
|
|
13
|
+
- [OpenAPI Runtime Under the Hood](/frontend/a-openapi-under-the-hood)
|
|
14
|
+
- [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
|
|
15
|
+
|
|
16
|
+
> [!TIP]
|
|
17
|
+
> **Generated-contract diagnosis path**
|
|
18
|
+
>
|
|
19
|
+
> 1. **[Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen)** — understand the family and choose the branch
|
|
20
|
+
> 2. **[Generated Contract Consumption Verify Playbook](/frontend/generated-contract-consumption-verify-playbook)** — prove what should be true after a change
|
|
21
|
+
> 3. **[Generated Contract Consumption Debug Checklist](/frontend/generated-contract-consumption-debug-checklist)** — use this page when the result is already wrong and you need the first failing layer
|
|
22
|
+
>
|
|
23
|
+
> **You are here:** step 3.
|
|
24
|
+
> **Previous recommended pages:** [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen) and [Generated Contract Consumption Verify Playbook](/frontend/generated-contract-consumption-verify-playbook).
|
|
25
|
+
|
|
26
|
+
## Why this page exists
|
|
27
|
+
|
|
28
|
+
The current frontend generated-contract family already gives you:
|
|
29
|
+
|
|
30
|
+
- a conceptual hub
|
|
31
|
+
- list and entry branch pages
|
|
32
|
+
- a proof-oriented verify playbook
|
|
33
|
+
|
|
34
|
+
What was still missing was one symptom-first page.
|
|
35
|
+
|
|
36
|
+
This page fills that gap.
|
|
37
|
+
|
|
38
|
+
It is not another generation page and not another branch specimen. It is the checklist for isolating the first failing consumer-side layer.
|
|
39
|
+
|
|
40
|
+
## Shared symptom: contract surface missing or stale
|
|
41
|
+
|
|
42
|
+
Start here when the problem looks earlier than either list or entry runtime.
|
|
43
|
+
|
|
44
|
+
Primary anchors:
|
|
45
|
+
|
|
46
|
+
- `zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts`
|
|
47
|
+
- optional direct schema consumer: `zova/src/suite/a-home/modules/home-passport/src/model/passport.ts`
|
|
48
|
+
|
|
49
|
+
What to inspect first:
|
|
50
|
+
|
|
51
|
+
- does the expected generated schema surface exist at all?
|
|
52
|
+
- do the expected API/schema methods still exist on the module-level schema bean?
|
|
53
|
+
- if the issue is clearly that the generated contract itself never refreshed, stop and hand off to the bridge/regeneration docs instead of debugging consumer pages
|
|
54
|
+
|
|
55
|
+
## Shared symptom: owner boundary wrong or stale
|
|
56
|
+
|
|
57
|
+
Start here when the contract surface looks present but consumption still feels wrong across both branches.
|
|
58
|
+
|
|
59
|
+
Primary anchor:
|
|
60
|
+
|
|
61
|
+
- `zova/src/suite/a-training/modules/training-student/src/model/student.ts`
|
|
62
|
+
|
|
63
|
+
What to inspect:
|
|
64
|
+
|
|
65
|
+
- does the thin semantic model still delegate to the stable resource owner?
|
|
66
|
+
- did the module accidentally grow a competing second owner for the same contract slice?
|
|
67
|
+
- do custom methods such as `summary()` or `deleteForce()` still point at the intended owner-backed consumer path?
|
|
68
|
+
|
|
69
|
+
If this layer is wrong, do not continue into list or entry runtime yet.
|
|
70
|
+
|
|
71
|
+
## List branch symptoms
|
|
72
|
+
|
|
73
|
+
Only enter this branch when the issue is clearly list-page oriented.
|
|
74
|
+
|
|
75
|
+
Primary anchors:
|
|
76
|
+
|
|
77
|
+
- `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/resource/controller.tsx`
|
|
78
|
+
- `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx`
|
|
79
|
+
|
|
80
|
+
Typical failures to classify:
|
|
81
|
+
|
|
82
|
+
### A. List page renders blank or wrong blocks
|
|
83
|
+
|
|
84
|
+
Check:
|
|
85
|
+
|
|
86
|
+
- whether the route shell resolves the expected `resource`
|
|
87
|
+
- whether `schemaRow?.rest?.blocks` is actually present
|
|
88
|
+
- whether the page is stopping before deeper runtime blocks can render
|
|
89
|
+
|
|
90
|
+
### B. `schemaRow`, `schemaFilter`, or query state mismatch
|
|
91
|
+
|
|
92
|
+
Check:
|
|
93
|
+
|
|
94
|
+
- whether the owner still exposes the expected schema surfaces
|
|
95
|
+
- whether `select(query)` is still the active data path
|
|
96
|
+
- whether `basic-page:blockPage` is still the deeper list runtime owner
|
|
97
|
+
|
|
98
|
+
### C. List route shell looks right but visible behavior is still stale
|
|
99
|
+
|
|
100
|
+
At this point, you may need to hand off to:
|
|
101
|
+
|
|
102
|
+
- [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive)
|
|
103
|
+
- [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
|
|
104
|
+
|
|
105
|
+
## Entry branch symptoms
|
|
106
|
+
|
|
107
|
+
Only enter this branch when the issue is clearly entry-page oriented.
|
|
108
|
+
|
|
109
|
+
Primary anchors:
|
|
110
|
+
|
|
111
|
+
- `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/entry/controller.tsx`
|
|
112
|
+
- `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockPageEntry/controller.tsx`
|
|
113
|
+
- `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockForm/controller.tsx`
|
|
114
|
+
- `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockToolbarRow/controller.tsx`
|
|
115
|
+
|
|
116
|
+
Typical failures to classify:
|
|
117
|
+
|
|
118
|
+
### A. Entry page shows missing data or missing form schema
|
|
119
|
+
|
|
120
|
+
Check:
|
|
121
|
+
|
|
122
|
+
- whether `resource`, `id`, and `formScene` resolve correctly
|
|
123
|
+
- whether owner-level `formMeta`, `formSchema`, and `formData` still load where expected
|
|
124
|
+
- whether the shell is failing before deeper page-entry blocks can render
|
|
125
|
+
|
|
126
|
+
### B. Wrong `formScene` or wrong toolbar visibility
|
|
127
|
+
|
|
128
|
+
Check:
|
|
129
|
+
|
|
130
|
+
- whether the route shell derived the intended `formScene`
|
|
131
|
+
- whether `blockToolbarRow` still consumes the expected host context
|
|
132
|
+
- whether this is really a narrower action-visibility/form-scene issue rather than a full contract-consumption issue
|
|
133
|
+
|
|
134
|
+
### C. Submit or page-meta behavior looks out of sync
|
|
135
|
+
|
|
136
|
+
Check:
|
|
137
|
+
|
|
138
|
+
- whether `blockForm` still feeds submit/change callbacks back into the shared page-entry owner
|
|
139
|
+
- whether the deeper entry runtime still owns page-meta updates rather than scattered local code
|
|
140
|
+
|
|
141
|
+
If this layer is still unclear, hand off to:
|
|
142
|
+
|
|
143
|
+
- [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive)
|
|
144
|
+
- [Form Scene to Page Meta Guide](/frontend/form-scene-to-page-meta-guide)
|
|
145
|
+
|
|
146
|
+
## Classify the failure last
|
|
147
|
+
|
|
148
|
+
Only after the branch-local checks should you classify the problem as:
|
|
149
|
+
|
|
150
|
+
- bridge/generation issue
|
|
151
|
+
- deeper owner/runtime issue
|
|
152
|
+
- list-branch issue
|
|
153
|
+
- entry-branch issue
|
|
154
|
+
|
|
155
|
+
A practical rule is:
|
|
156
|
+
|
|
157
|
+
> do not start from the deepest runtime layer until the shared contract surface and the stable owner boundary already look correct.
|
|
158
|
+
|
|
159
|
+
## What this page does not re-explain
|
|
160
|
+
|
|
161
|
+
This page deliberately does **not** re-teach:
|
|
162
|
+
|
|
163
|
+
- frontend OpenAPI generation/setup -> see [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
|
|
164
|
+
- the broader server-data abstraction ladder -> see [Server Data](/frontend/server-data)
|
|
165
|
+
- lower `a-openapi` runtime internals -> see [OpenAPI Runtime Under the Hood](/frontend/a-openapi-under-the-hood)
|
|
166
|
+
- `ModelResource` internals -> see [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
|
|
167
|
+
- deeper list runtime -> see [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive)
|
|
168
|
+
- deeper entry runtime -> see [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive)
|
|
169
|
+
|
|
170
|
+
Its job is only to help you isolate the first failing frontend consumer layer.
|
|
171
|
+
|
|
172
|
+
## Where to read next
|
|
173
|
+
|
|
174
|
+
- If you need the family overview first, return to [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen).
|
|
175
|
+
- If you need the list or entry branch specimen first, continue with [Generated Contract Consumption: List Branch](/frontend/generated-contract-consumption-list-branch) or [Generated Contract Consumption: Entry Branch](/frontend/generated-contract-consumption-entry-branch).
|
|
176
|
+
- If you want the proof-oriented layer-by-layer workflow first, continue with [Generated Contract Consumption Verify Playbook](/frontend/generated-contract-consumption-verify-playbook).
|
|
177
|
+
- If the generated surface itself is missing or stale, hand off to [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk) and [OpenAPI SDK Guide](/frontend/openapi-sdk-guide).
|
|
178
|
+
- If the issue is clearly below the current boundary, descend into [OpenAPI Runtime Under the Hood](/frontend/a-openapi-under-the-hood), [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive), [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive), or [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive).
|
|
179
|
+
|
|
180
|
+
## Final takeaway
|
|
181
|
+
|
|
182
|
+
The cleanest way to debug generated-contract consumption is not to jump immediately into the deepest runtime files.
|
|
183
|
+
|
|
184
|
+
First isolate:
|
|
185
|
+
|
|
186
|
+
- whether the generated contract surface itself is present
|
|
187
|
+
- whether the stable owner boundary is still correct
|
|
188
|
+
- whether the failure belongs to the list or entry branch
|
|
189
|
+
|
|
190
|
+
Only then descend into deeper internals if you still need them.
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Generated Contract Consumption: Entry Branch
|
|
2
|
+
|
|
3
|
+
This page is a focused specimen for one narrow frontend question:
|
|
4
|
+
|
|
5
|
+
> after generated contract material has already crossed into Zova, how is that contract consumed on the entry-page branch?
|
|
6
|
+
|
|
7
|
+
Use this page together with:
|
|
8
|
+
|
|
9
|
+
- [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen)
|
|
10
|
+
- [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
|
|
11
|
+
- [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
|
|
12
|
+
- [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
|
|
13
|
+
- [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive)
|
|
14
|
+
- [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
|
|
15
|
+
- [Form Scene to Page Meta Guide](/frontend/form-scene-to-page-meta-guide)
|
|
16
|
+
|
|
17
|
+
## Why this page exists
|
|
18
|
+
|
|
19
|
+
The current docs already explain:
|
|
20
|
+
|
|
21
|
+
- how backend-authored contract truth reaches frontend generation
|
|
22
|
+
- how generated contract material is consumed in a broad sense
|
|
23
|
+
- how the deeper entry runtime works internally
|
|
24
|
+
|
|
25
|
+
What was still missing was one narrow page that isolates the **entry-page consumption branch** before the deeper form/page-entry runtime takes over.
|
|
26
|
+
|
|
27
|
+
This page fills that gap.
|
|
28
|
+
|
|
29
|
+
## The shortest accurate mental model
|
|
30
|
+
|
|
31
|
+
A practical entry-branch chain looks like this:
|
|
32
|
+
|
|
33
|
+
1. generated contract material already exists in frontend API/schema surfaces
|
|
34
|
+
2. the current resource model keeps `ModelResource` as the stable owner
|
|
35
|
+
3. the entry route shell consumes that owner through resource, `id`, and `formScene`
|
|
36
|
+
4. `basic-pageentry:blockPageEntry` becomes the deeper entry runtime owner
|
|
37
|
+
5. `blockForm` and `blockToolbarRow` consume that owner-owned context
|
|
38
|
+
6. deeper form and page-meta runtime docs take over from there
|
|
39
|
+
|
|
40
|
+
That means the entry branch is not only “render a form from schema.”
|
|
41
|
+
|
|
42
|
+
It is the path from generated contract access into resource-owner and entry-page shell consumption.
|
|
43
|
+
|
|
44
|
+
## Source-confirmed reading path
|
|
45
|
+
|
|
46
|
+
This page is the second layer of a small source-reading chain around same-resource model facades:
|
|
47
|
+
|
|
48
|
+
1. [Model Architecture](/frontend/model-architecture) for the broader role of Zova Model
|
|
49
|
+
2. this page for the consumer-side handoff into the owner
|
|
50
|
+
3. [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive) for the owner internals that make that handoff work
|
|
51
|
+
|
|
52
|
+
Use this order:
|
|
53
|
+
|
|
54
|
+
1. `zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts`
|
|
55
|
+
2. `zova/src/suite/a-training/modules/training-student/src/model/student.ts`
|
|
56
|
+
3. `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/entry/controller.tsx`
|
|
57
|
+
4. `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockPageEntry/controller.tsx`
|
|
58
|
+
5. `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockForm/controller.tsx`
|
|
59
|
+
6. `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockToolbarRow/controller.tsx`
|
|
60
|
+
|
|
61
|
+
That order starts from the generated schema access surface, moves into the thin module model facade, then into the resource entry shell and the deeper Basic entry runtime owner plus its concrete consumers.
|
|
62
|
+
|
|
63
|
+
## Generated contract surface on the entry branch
|
|
64
|
+
|
|
65
|
+
A practical current source anchor is:
|
|
66
|
+
|
|
67
|
+
- `zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts`
|
|
68
|
+
|
|
69
|
+
Representative source facts:
|
|
70
|
+
|
|
71
|
+
- the module exposes a schema bean through `@ApiSchema()`
|
|
72
|
+
- entry-related schema access is available through methods such as `create()`, `view()`, and `update()`
|
|
73
|
+
- those methods call `this.$sdk.createApiSchemas(...)`
|
|
74
|
+
|
|
75
|
+
This is the first consumer-facing contract surface on the entry branch.
|
|
76
|
+
|
|
77
|
+
The entry-page branch does not start with local form-only logic.
|
|
78
|
+
It starts with generated schema access that has already been turned into frontend-usable contract material.
|
|
79
|
+
|
|
80
|
+
## Thin model facade and owner-level form helpers
|
|
81
|
+
|
|
82
|
+
A practical current model specimen is:
|
|
83
|
+
|
|
84
|
+
- `zova/src/suite/a-training/modules/training-student/src/model/student.ts`
|
|
85
|
+
|
|
86
|
+
Representative source facts:
|
|
87
|
+
|
|
88
|
+
- the module model keeps `rest-resource.model.resource` as the stable owner
|
|
89
|
+
- `summary(id)` still goes through `queryItem(...)` rather than bypassing the owner
|
|
90
|
+
- `deleteForce(id)` still goes through `mutationItem(...)` rather than introducing a separate mutation surface
|
|
91
|
+
- custom endpoints still delegate to owner-level helpers rather than replacing the resource-owner story
|
|
92
|
+
|
|
93
|
+
This is the thin-facade boundary:
|
|
94
|
+
|
|
95
|
+
- the model does not become a second resource owner
|
|
96
|
+
- same-resource custom actions are exposed as small named model methods
|
|
97
|
+
- entry and form consumers can continue to depend on owner-level surfaces without splitting the resource story
|
|
98
|
+
|
|
99
|
+
A practical rule is:
|
|
100
|
+
|
|
101
|
+
> when entry-page behavior still belongs to the same resource, keep the resource owner stable and let form helpers stay owner-driven.
|
|
102
|
+
|
|
103
|
+
This matters because entry pages usually depend on owner-level surfaces such as:
|
|
104
|
+
|
|
105
|
+
- `formMeta`
|
|
106
|
+
- `formSchema`
|
|
107
|
+
- `formProvider`
|
|
108
|
+
- `formData`
|
|
109
|
+
- submit helpers
|
|
110
|
+
|
|
111
|
+
If you want the broader model-layer explanation behind this narrow facade pattern, continue with [Model Architecture](/frontend/model-architecture).
|
|
112
|
+
If you want the deeper owner internals behind `queryItem(...)`, `mutationItem(...)`, and form-derived helpers, continue with [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive).
|
|
113
|
+
|
|
114
|
+
## Entry shell consumption
|
|
115
|
+
|
|
116
|
+
The clearest current entry shell is:
|
|
117
|
+
|
|
118
|
+
- `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/entry/controller.tsx`
|
|
119
|
+
|
|
120
|
+
Representative source facts:
|
|
121
|
+
|
|
122
|
+
- the page resolves `$$modelResource` from the route resource
|
|
123
|
+
- it derives `formMeta` from `formScene`
|
|
124
|
+
- it autoloads `this.$$modelResource.getFormApiSchemas(this.formMeta)?.sdk`
|
|
125
|
+
- it derives `formSchema` from `this.$$modelResource.getFormSchema(this.formMeta)`
|
|
126
|
+
|
|
127
|
+
This is the entry-shell boundary:
|
|
128
|
+
|
|
129
|
+
- generated contract material has already crossed into the owner
|
|
130
|
+
- the shell uses the owner to derive scene-aware form schema state
|
|
131
|
+
- schema-defined blocks then take over the deeper runtime
|
|
132
|
+
|
|
133
|
+
## Handoff into `basic-pageentry:blockPageEntry`
|
|
134
|
+
|
|
135
|
+
The next concrete consumer is:
|
|
136
|
+
|
|
137
|
+
- `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockPageEntry/controller.tsx`
|
|
138
|
+
|
|
139
|
+
Representative source facts:
|
|
140
|
+
|
|
141
|
+
- it resolves the selector-backed owner
|
|
142
|
+
- it computes `formMeta`, `formProvider`, `formSchema`, and `formData`
|
|
143
|
+
- it uses owner-level helpers such as `getFormData(...)` and `getFormMutationSubmit(...)`
|
|
144
|
+
- it pushes `pageTitle`, `pageDirty`, and `formMeta` into page meta
|
|
145
|
+
|
|
146
|
+
This means the deeper entry runtime still depends on the same generated-contract and resource-owner surfaces.
|
|
147
|
+
|
|
148
|
+
## `blockForm` and `blockToolbarRow` as concrete consumers
|
|
149
|
+
|
|
150
|
+
Two especially clear consumer files are:
|
|
151
|
+
|
|
152
|
+
- `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockForm/controller.tsx`
|
|
153
|
+
- `zova/src/suite/cabloy-basic/modules/basic-pageentry/src/component/blockToolbarRow/controller.tsx`
|
|
154
|
+
|
|
155
|
+
Representative source facts from `blockForm`:
|
|
156
|
+
|
|
157
|
+
- it passes owner-derived `formData`, `formSchema`, `schemaScene`, `formMeta`, and `formProvider` into `ZForm`
|
|
158
|
+
- `onChanged` feeds updated data back into page meta through `$$pageEntry.setPageMeta(...)`
|
|
159
|
+
|
|
160
|
+
Representative source facts from `blockToolbarRow`:
|
|
161
|
+
|
|
162
|
+
- it consumes the same `$$pageEntry` context
|
|
163
|
+
- it filters actions by current `formScene`
|
|
164
|
+
- it combines `formScene` and permission checks before rendering the toolbar actions
|
|
165
|
+
|
|
166
|
+
A practical reading takeaway is:
|
|
167
|
+
|
|
168
|
+
- generated contract material becomes owner-level form surfaces first
|
|
169
|
+
- the entry runtime then turns those surfaces into actual form and toolbar behavior
|
|
170
|
+
|
|
171
|
+
## What this page does not re-explain
|
|
172
|
+
|
|
173
|
+
This page does **not** fully re-explain:
|
|
174
|
+
|
|
175
|
+
- how to configure or generate OpenAPI SDK output -> see [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
|
|
176
|
+
- the broader generated-contract hub -> see [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen)
|
|
177
|
+
- the lower runtime of `$sdk` -> see [OpenAPI Runtime Under the Hood](/frontend/a-openapi-under-the-hood)
|
|
178
|
+
- `ModelResource` internals -> see [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
|
|
179
|
+
- the deeper entry runtime and form/page-meta chain -> see [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive) and [Form Scene to Page Meta Guide](/frontend/form-scene-to-page-meta-guide)
|
|
180
|
+
- the broader `rest-resource` runtime bridge -> see [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
|
|
181
|
+
|
|
182
|
+
Its job is only to show the entry-side contract-consumption handoff before deeper runtime internals take over.
|
|
183
|
+
|
|
184
|
+
## Where to read next
|
|
185
|
+
|
|
186
|
+
- If you want the shared consumer-side overview first, return to [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen).
|
|
187
|
+
- If you want a proof-oriented layer-by-layer validation workflow, continue with [Generated Contract Consumption Verify Playbook](/frontend/generated-contract-consumption-verify-playbook).
|
|
188
|
+
- If the result is already wrong and you want symptom-first diagnosis, continue with [Generated Contract Consumption Debug Checklist](/frontend/generated-contract-consumption-debug-checklist).
|
|
189
|
+
- If you want the deeper entry runtime internals, continue with [Resource Entry Page Deep Dive](/frontend/resource-entry-page-deep-dive).
|
|
190
|
+
- If you want the broader resource/runtime shell map, continue with [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood).
|
|
191
|
+
- If you want the form-scene to page-meta runtime chain, continue with [Form Scene to Page Meta Guide](/frontend/form-scene-to-page-meta-guide).
|
|
192
|
+
- If you want resource-owner internals, continue with [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive).
|
|
193
|
+
|
|
194
|
+
## Final takeaway
|
|
195
|
+
|
|
196
|
+
The cleanest way to read generated contract consumption on the entry branch is:
|
|
197
|
+
|
|
198
|
+
- generated schema/API surface
|
|
199
|
+
- stable resource owner
|
|
200
|
+
- entry route shell
|
|
201
|
+
- deeper `basic-pageentry` runtime owner
|
|
202
|
+
- form and toolbar consumers
|
|
203
|
+
- deeper runtime internals only if you still need them
|
|
204
|
+
|
|
205
|
+
That keeps the entry-branch consumption path visible before you descend into the heavier form/runtime details.
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Generated Contract Consumption: List Branch
|
|
2
|
+
|
|
3
|
+
This page is a focused specimen for one narrow frontend question:
|
|
4
|
+
|
|
5
|
+
> after generated contract material has already crossed into Zova, how is that contract consumed on the list-page branch?
|
|
6
|
+
|
|
7
|
+
Use this page together with:
|
|
8
|
+
|
|
9
|
+
- [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen)
|
|
10
|
+
- [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
|
|
11
|
+
- [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
|
|
12
|
+
- [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
|
|
13
|
+
- [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map)
|
|
14
|
+
- [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive)
|
|
15
|
+
- [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
|
|
16
|
+
|
|
17
|
+
## Why this page exists
|
|
18
|
+
|
|
19
|
+
The current docs already explain:
|
|
20
|
+
|
|
21
|
+
- how backend-authored contract truth reaches frontend generation
|
|
22
|
+
- how generated contract material is consumed in a broad sense
|
|
23
|
+
- how the deeper list runtime works internally
|
|
24
|
+
|
|
25
|
+
What was still missing was one narrow page that isolates the **list-page consumption branch** before the deeper list runtime takes over.
|
|
26
|
+
|
|
27
|
+
This page fills that gap.
|
|
28
|
+
|
|
29
|
+
## The shortest accurate mental model
|
|
30
|
+
|
|
31
|
+
A practical list-branch chain looks like this:
|
|
32
|
+
|
|
33
|
+
1. generated contract material already exists in frontend API/schema surfaces
|
|
34
|
+
2. the current resource model keeps `ModelResource` as the stable owner
|
|
35
|
+
3. the list route shell consumes that owner through resource context
|
|
36
|
+
4. `basic-page:blockPage` becomes the deeper list runtime owner
|
|
37
|
+
5. deeper table, filter, and pager runtime docs take over from there
|
|
38
|
+
|
|
39
|
+
That means the list branch is not only “call one API.”
|
|
40
|
+
|
|
41
|
+
It is the path from generated contract access into resource-owner and list-page shell consumption.
|
|
42
|
+
|
|
43
|
+
## Source-confirmed reading path
|
|
44
|
+
|
|
45
|
+
Use this order:
|
|
46
|
+
|
|
47
|
+
1. `zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts`
|
|
48
|
+
2. `zova/src/suite/a-training/modules/training-student/src/model/student.ts`
|
|
49
|
+
3. `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/resource/controller.tsx`
|
|
50
|
+
4. `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx`
|
|
51
|
+
|
|
52
|
+
That order starts from the generated schema access surface, moves into the thin module model facade, then into the resource list shell and the deeper Basic list runtime owner.
|
|
53
|
+
|
|
54
|
+
## Generated contract surface on the list branch
|
|
55
|
+
|
|
56
|
+
A practical current source anchor is:
|
|
57
|
+
|
|
58
|
+
- `zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts`
|
|
59
|
+
|
|
60
|
+
Representative source facts:
|
|
61
|
+
|
|
62
|
+
- the module exposes a schema bean through `@ApiSchema()`
|
|
63
|
+
- list-related schema access is available through methods such as `select()`
|
|
64
|
+
- those methods call `this.$sdk.createApiSchemas(...)`
|
|
65
|
+
|
|
66
|
+
This is the first consumer-facing contract surface on the list branch.
|
|
67
|
+
|
|
68
|
+
The list-page branch does not start with local page-only table logic.
|
|
69
|
+
It starts with generated schema access that has already been turned into frontend-usable contract material.
|
|
70
|
+
|
|
71
|
+
## Thin model facade and stable owner rule
|
|
72
|
+
|
|
73
|
+
A practical current model specimen is:
|
|
74
|
+
|
|
75
|
+
- `zova/src/suite/a-training/modules/training-student/src/model/student.ts`
|
|
76
|
+
|
|
77
|
+
Representative source facts:
|
|
78
|
+
|
|
79
|
+
- the module model resolves `rest-resource.model.resource` through selector-backed access
|
|
80
|
+
- custom methods such as `summary(id)` and `deleteForce(id)` still delegate to resource-owner helper surfaces
|
|
81
|
+
|
|
82
|
+
A practical rule is:
|
|
83
|
+
|
|
84
|
+
> when the API still belongs to the same resource, keep `ModelResource` as the stable owner and keep the module model thin.
|
|
85
|
+
|
|
86
|
+
That is the rule that prevents list-page consumption from scattering contract ownership into ad hoc page code.
|
|
87
|
+
|
|
88
|
+
## List shell consumption
|
|
89
|
+
|
|
90
|
+
The clearest current list shell is:
|
|
91
|
+
|
|
92
|
+
- `zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/resource/controller.tsx`
|
|
93
|
+
|
|
94
|
+
Representative source facts:
|
|
95
|
+
|
|
96
|
+
- the page resolves `$$modelResource` from the route resource
|
|
97
|
+
- `__init__()` autoloads `this.$$modelResource.apiSchemasSelect.sdk`
|
|
98
|
+
- render reads `schemaRow?.rest?.blocks`
|
|
99
|
+
|
|
100
|
+
This is the list-shell boundary:
|
|
101
|
+
|
|
102
|
+
- generated contract material has already crossed into the owner
|
|
103
|
+
- the shell uses the owner to load top-level list schema state
|
|
104
|
+
- schema-defined blocks then take over the deeper runtime
|
|
105
|
+
|
|
106
|
+
## Deeper handoff into `basic-page:blockPage`
|
|
107
|
+
|
|
108
|
+
The next concrete consumer is:
|
|
109
|
+
|
|
110
|
+
- `zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx`
|
|
111
|
+
|
|
112
|
+
Representative source facts:
|
|
113
|
+
|
|
114
|
+
- it resolves the selector-backed resource owner
|
|
115
|
+
- it loads `this.$$modelResource.apiSchemasSelect.sdk`
|
|
116
|
+
- it derives list data through `this.$$modelResource.select(this.query)`
|
|
117
|
+
- it exposes `schemaFilter`, `schemaRow`, and `permissions`
|
|
118
|
+
|
|
119
|
+
That means the deeper list runtime still depends on the same generated-contract and resource-owner surfaces.
|
|
120
|
+
|
|
121
|
+
A practical reading takeaway is:
|
|
122
|
+
|
|
123
|
+
- generated contract material becomes owner surfaces first
|
|
124
|
+
- `blockPage` then becomes the shared list runtime owner for filters, paging, query state, and list data
|
|
125
|
+
|
|
126
|
+
## What this page does not re-explain
|
|
127
|
+
|
|
128
|
+
This page does **not** fully re-explain:
|
|
129
|
+
|
|
130
|
+
- how to configure or generate OpenAPI SDK output -> see [OpenAPI SDK Guide](/frontend/openapi-sdk-guide)
|
|
131
|
+
- the broader generated-contract hub -> see [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen)
|
|
132
|
+
- the lower runtime of `$sdk` -> see [OpenAPI Runtime Under the Hood](/frontend/a-openapi-under-the-hood)
|
|
133
|
+
- `ModelResource` internals -> see [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive)
|
|
134
|
+
- the deeper list runtime and page-block chain -> see [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive)
|
|
135
|
+
- the broader `rest-resource` runtime bridge -> see [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood)
|
|
136
|
+
|
|
137
|
+
Its job is only to show the list-side contract-consumption handoff before deeper runtime internals take over.
|
|
138
|
+
|
|
139
|
+
## Where to read next
|
|
140
|
+
|
|
141
|
+
- If you want the shared consumer-side overview first, return to [Generated Contract Consumption Specimen](/frontend/generated-contract-consumption-specimen).
|
|
142
|
+
- If you want a proof-oriented layer-by-layer validation workflow, continue with [Generated Contract Consumption Verify Playbook](/frontend/generated-contract-consumption-verify-playbook).
|
|
143
|
+
- If the result is already wrong and you want symptom-first diagnosis, continue with [Generated Contract Consumption Debug Checklist](/frontend/generated-contract-consumption-debug-checklist).
|
|
144
|
+
- If you want the deeper list runtime internals, continue with [Resource List Page Deep Dive](/frontend/resource-list-page-deep-dive).
|
|
145
|
+
- If you want the broader resource/runtime shell map, continue with [Rest Resource Under the Hood](/frontend/rest-resource-under-the-hood) and [Rest Resource Source Reading Map](/frontend/rest-resource-source-reading-map).
|
|
146
|
+
- If you want resource-owner internals, continue with [ModelResource Internals Deep Dive](/frontend/model-resource-internals-deep-dive).
|
|
147
|
+
|
|
148
|
+
## Final takeaway
|
|
149
|
+
|
|
150
|
+
The cleanest way to read generated contract consumption on the list branch is:
|
|
151
|
+
|
|
152
|
+
- generated schema/API surface
|
|
153
|
+
- stable resource owner
|
|
154
|
+
- list route shell
|
|
155
|
+
- deeper `basic-page` runtime owner
|
|
156
|
+
|
|
157
|
+
That keeps the list-branch consumption path visible before you descend into the heavier runtime details.
|