cabloy 5.1.194 → 5.1.196

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/.cabloy-version +1 -1
  2. package/.github/workflows/agent-governance.yml +1 -0
  3. package/CHANGELOG.md +22 -0
  4. package/README.md +13 -24
  5. package/package.json +2 -1
  6. package/repo-agent-governance/managed-assets.json +138 -33
  7. package/repo-agent-governance/scripts/pack-check.mjs +17 -0
  8. package/repo-agent-governance/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -0
  9. package/repo-agent-governance/skills/cabloy-domain-planning/SKILL.md +5 -3
  10. package/repo-agent-governance/skills/cabloy-spec-execution/SKILL.md +13 -8
  11. package/repo-agent-governance/skills/cabloy-spec-execution/evals/evals.json +108 -12
  12. package/repo-agent-governance/skills/cabloy-spec-execution/evals/files/scenarios.json +84 -0
  13. package/repo-agent-governance/skills/cabloy-spec-execution/evals/protocol.md +9 -0
  14. package/repo-agent-governance/skills/cabloy-spec-execution/references/execution-protocol.md +21 -5
  15. package/repo-agent-governance/skills/cabloy-spec-execution/references/status-and-evidence.md +5 -3
  16. package/repo-agent-governance/skills/cabloy-spec-generation/SKILL.md +78 -168
  17. package/repo-agent-governance/skills/cabloy-spec-generation/evals/evals.json +165 -17
  18. package/repo-agent-governance/skills/cabloy-spec-generation/evals/files/scenarios.json +114 -0
  19. package/repo-agent-governance/skills/cabloy-spec-generation/evals/protocol.md +44 -0
  20. package/repo-agent-governance/skills/cabloy-spec-generation/references/canonical-spec-input.md +145 -0
  21. package/repo-agent-governance/skills/cabloy-spec-generation/references/repo-aware-discovery.md +55 -57
  22. package/repo-agent-governance/skills/cabloy-spec-generation/references/repo-specs-document-set.md +6 -4
  23. package/repo-agent-governance/skills/cabloy-spec-generation/references/traceability-and-status-rules.md +12 -8
  24. package/repo-agent-governance/tests/governance.test.mjs +10 -1
  25. package/repo-agent-governance/tests/spec-audit.test.mjs +255 -0
  26. package/repo-agent-governance/tools/spec-audit/audit.mjs +427 -0
  27. package/repo-agent-governance/tools/spec-charts/generate-implementation-charts.mjs +97 -408
  28. package/repo-agent-governance/tools/spec-charts/generate-implementation-charts.test.mjs +462 -1
  29. package/repo-agent-governance/tools/spec-charts/spec-parser.mjs +561 -0
  30. package/repo-docs/.vitepress/config.mjs +54 -29
  31. package/repo-docs/ai/playbook-spec-execution.md +10 -4
  32. package/repo-docs/ai/playbook-spec-generation.md +40 -3
  33. package/repo-docs/ai/skills.md +3 -3
  34. package/repo-docs/backend/controller-aop-guide.md +10 -0
  35. package/repo-docs/backend/field-indexes.md +25 -0
  36. package/repo-docs/blogs/cabloy-fullstack-resource-addressing/index.md +1 -1
  37. package/repo-docs/fullstack/contract-loop-playbook.md +1 -1
  38. package/repo-docs/fullstack/development-history.md +24 -0
  39. package/repo-docs/fullstack/introduction.md +25 -156
  40. package/repo-docs/fullstack/quickstart.md +1 -1
  41. package/repo-docs/fullstack/ssr-entry-modes.md +52 -0
  42. package/repo-docs/fullstack/ssr-site-and-flavor-setup.md +3 -1
  43. package/repo-docs/fullstack/tutorial-5-backend-contract-sharing.md +13 -7
  44. package/repo-docs/fullstack/tutorial-6-one-contract-four-uses.md +11 -15
  45. package/repo-docs/fullstack/tutorials-overview.md +2 -2
  46. package/repo-docs/index.md +23 -45
  47. package/repo-docs/public/cabloy.png +0 -0
  48. package/repo-docs/public/cabloy.svg +3 -0
  49. package/repo-docs/public/favicon.svg +3 -0
  50. package/repo-docs/reference/repo-scripts.md +6 -1
  51. package/repo-e2e/specs/home-user-account.spec.ts +311 -207
  52. package/scripts/bootstrapAgentGovernance.mjs +1 -0
  53. package/scripts/upgrade.ts +1 -0
  54. package/vona/packages-cli/cli/package.json +1 -1
  55. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudBasic/snippets/2-meta.index.ts +4 -10
  56. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudStart/snippets/2-meta.index.ts +4 -10
  57. package/vona/packages-cli/cli-set-api/package.json +8 -2
  58. package/vona/packages-cli/cli-set-api/src/index.ts +1 -0
  59. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.masterDetail.ts +9 -12
  60. package/vona/packages-cli/cli-set-api/src/lib/mergeMetaIndex.ts +121 -0
  61. package/vona/packages-cli/cli-set-api/test/indexSnippets.test.ts +41 -0
  62. package/vona/packages-cli/cli-set-api/test/mergeMetaIndex.test.ts +78 -0
  63. package/vona/packages-vona/vona/package.json +1 -1
  64. package/vona/pnpm-lock.yaml +6 -6
  65. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/service/sku.ts +25 -4
  66. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/skuUniqueness.test.ts +161 -0
  67. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/meta.index.ts +21 -20
  68. package/vona/src/suite/a-commerce/modules/commerce-payment/test/paymentIndexes.test.ts +165 -0
  69. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/bean/meta.index.ts +16 -13
  70. package/vona/src/suite/a-commerce/modules/commerce-promotion/test/promotionIndexes.test.ts +82 -0
  71. package/vona/src/suite/a-commerce/modules/commerce-trade/src/bean/meta.index.ts +23 -21
  72. package/vona/src/suite/a-commerce/modules/commerce-trade/test/tradeIndexes.test.ts +86 -0
  73. package/vona/src/suite/a-home/modules/home-user/src/.metadata/index.ts +379 -376
  74. package/vona/src/suite/a-home/modules/home-user/src/controller/passportTest.ts +60 -0
  75. package/vona/src/suite/a-home/modules/home-user/test/passportTest.test.ts +164 -1
  76. package/vona/src/suite-vendor/a-cabloy/modules/a-rbac/package.json +1 -1
  77. package/vona/src/suite-vendor/a-cabloy/package.json +2 -2
  78. package/vona/src/suite-vendor/a-pay/modules/a-pay/package.json +1 -1
  79. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/meta.index.ts +35 -26
  80. package/vona/src/suite-vendor/a-pay/modules/pay-mock/package.json +1 -1
  81. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/package.json +1 -1
  82. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/package.json +1 -1
  83. package/vona/src/suite-vendor/a-pay/package.json +5 -5
  84. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
  85. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/transactionFiber_.ts +6 -2
  86. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/transaction_.ts +4 -1
  87. package/vona/src/suite-vendor/a-vona/modules/a-ormutils/package.json +1 -1
  88. package/vona/src/suite-vendor/a-vona/modules/a-ormutils/src/lib/columns.ts +3 -1
  89. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
  90. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  91. /package/repo-docs/{.vitepress/public → public}/CNAME +0 -0
@@ -0,0 +1,52 @@
1
+ # Vona Integrated SSR and Zova Standalone SSR
2
+
3
+ Cabloy has two ways to enter the same frontend SSR application during development. The difference is **which server receives the browser request and owns the response**, not whether the page uses SSR. Choose an entry based on the boundary you need to develop or verify.
4
+
5
+ ## The two entry modes
6
+
7
+ **Vona integrated SSR** starts at the Vona server. Vona handles the incoming HTTP request, matches an SSR site, and uses the built frontend assets and Zova SSR runtime to render the response. The browser enters through Vona, so this is the path to check site dispatch and the fullstack HTTP boundary.
8
+
9
+ **Zova standalone SSR** starts at the Zova development server. It renders the selected frontend flavor directly for fast page, route, and hydration iteration with hot reload. Backend APIs still belong to Vona; opening the Zova server directly does not exercise Vona's SSR site dispatch or built-artifact handoff.
10
+
11
+ ```text
12
+ Vona integrated SSR: browser → Vona → SSR site → built Zova SSR output → browser
13
+ Zova standalone SSR: browser → Zova development server → frontend SSR → browser
14
+ ```
15
+
16
+ In the Cabloy Basic default environment, `SERVER_LISTEN_PORT=7102` is the Vona entry and `DEV_SERVER_PORT=9000` is the Zova development entry. These are separate listeners, not two ports for the same server. Zova's `API_BASE_URL` points to Vona, not to its own development port. Local environment overrides can change the ports; use the effective values in your checkout.
17
+
18
+ ## Start and use them in Cabloy Basic
19
+
20
+ Start the Vona server from the repository root and visit a Vona-served site:
21
+
22
+ ```bash
23
+ npm run dev
24
+ # Web: http://localhost:7102/
25
+ # Admin: http://localhost:7102/admin/
26
+ ```
27
+
28
+ For frontend iteration, start **one** Zova flavor in another terminal and open its development entry directly:
29
+
30
+ ```bash
31
+ npm run dev:zova:web # http://localhost:9000/
32
+ # or
33
+ npm run dev:zova:admin # http://localhost:9000/admin/
34
+ ```
35
+
36
+ For the other Cabloy Basic site URLs and the quick command comparison, see [Fullstack Quickstart](/fullstack/quickstart#3-start-vona-integrated-ssr). For Cabloy Start, keep the same entry-mode distinction but use the scripts, flavors, sites, and effective ports in the active Start checkout; do not copy Basic-specific flavor names or site paths blindly.
37
+
38
+ ## Which entry should you use?
39
+
40
+ | Task | Use | What the result tells you |
41
+ | --------------------------------------------------------------------- | ----------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
42
+ | Iterate on a page, route, SSR render, or hydration | Zova standalone SSR (`9000` by default) | The selected frontend flavor works through the Zova development entry. |
43
+ | Check Vona site matching, backend-owned routing, or the HTTP response | Vona integrated SSR (`7102` by default) | The request enters through Vona and exercises the integrated HTTP response path. |
44
+ | Verify release output or integrated browser acceptance | Built SSR/REST artifacts, synchronized Vona dependencies, then the Vona entry | The intended built fullstack path is exercised, rather than just the Zova development server. |
45
+
46
+ Direct access to `9000` cannot replace validation at `7102`. Before acceptance or deployment checks, build the required SSR/REST artifacts and synchronize them with Vona. For build and deployment steps, follow [SSR Build and Deploy Guide](/frontend/ssr-build-deploy-guide); for the Basic browser acceptance workflow, see [Frontend Scripts](/frontend/scripts#vona-integrated-ssr-browser-acceptance).
47
+
48
+ ## Do not confuse an entry mode with an SSR site
49
+
50
+ “Standalone” here describes **direct access to the Zova development server**. It does not mean an independently deployable SSR application. An **SSR Site/flavor** identifies an application surface that Vona can mount and serve, such as Web or Admin. Adding a new deployable site requires its own aligned flavor, SSR/REST output, and Vona registration; it is not accomplished by starting another standalone development listener. See [Independent SSR Site and Flavor Setup](/fullstack/ssr-site-and-flavor-setup).
51
+
52
+ For the cross-layer request flow, read [SSR Architecture Overview](/frontend/ssr-architecture-overview). For concise definitions, see the [Glossary](/reference/glossary#vona-integrated-ssr).
@@ -42,7 +42,9 @@ A new site is an ownership decision, not a convenient alias for an existing Admi
42
42
 
43
43
  ## Define the identity tuple
44
44
 
45
- Choose these values before editing source. Keep their spelling and ownership consistent:
45
+ Choose these values before editing source. Classify the tuple as **observed existing**, **proposed new**, or **explicitly approved new**. A new tuple need not already exist: validate framework constraints and collisions against active source, obtain explicit approval of the concrete design and an `Accepted` governing ADR, then create it through a separately approved bounded execution task. Strategy selection or approval to generate planning records alone is insufficient. Keep unchecked values and controlling `TODO(confirm)` gates explicit.
46
+
47
+ Label a new root wrapper as a **planned addition**, not a currently runnable command. Its execution task must create the durable manifest entry and inspect the resulting SSR/REST pair before running it. Keep tuple spelling and ownership consistent:
46
48
 
47
49
  | Identity | Role |
48
50
  | ---------------------- | --------------------------------------------------------------------------------------------------------------- |
@@ -47,6 +47,17 @@ Inspect the relevant command surfaces first:
47
47
 
48
48
  ```bash
49
49
  npm run zova :openapi
50
+ ```
51
+
52
+ After updating the backend controller and DTOs, start Vona in a separate terminal and keep it running so the generator can read the current Swagger output:
53
+
54
+ ```bash
55
+ npm run dev
56
+ ```
57
+
58
+ Then configure the module's OpenAPI ownership if needed and regenerate its frontend consumers:
59
+
60
+ ```bash
50
61
  npm run zova :openapi:config demo-student
51
62
  npm run zova :openapi:generate demo-student
52
63
  ```
@@ -118,12 +129,7 @@ That is the practical forward chain: backend controller and DTO truth flows into
118
129
 
119
130
  ## Verification
120
131
 
121
- 1. make sure the local dev workflow is running:
122
-
123
- ```bash
124
- npm run dev
125
- ```
126
-
132
+ 1. confirm that Vona, started before OpenAPI generation, is still running
127
133
  2. open `http://localhost:7102/admin/`
128
134
  3. enter the **Student** list page
129
135
  4. trigger the **Summary** row action and verify that it uses the regenerated frontend API and returns the expected Student summary data
@@ -148,4 +154,4 @@ npm run dev
148
154
 
149
155
  ## Next step
150
156
 
151
- Continue to [Tutorial 6: One Contract Surface, Four Uses](/fullstack/tutorial-6-one-contract-four-uses).
157
+ Continue to [Tutorial 6: One Contract Model, Four Uses](/fullstack/tutorial-6-one-contract-four-uses).
@@ -1,8 +1,8 @@
1
- # Tutorial 6: One Contract Surface, Four Uses
1
+ # Tutorial 6: One Contract Model, Four Uses
2
2
 
3
3
  <Badge type="info" text="Basic" />
4
4
 
5
- In this tutorial, one prompt lets AI close the series by showing Cabloy’s core fullstack idea: one field-oriented contract surface can drive several behaviors across backend and frontend.
5
+ In this tutorial, one prompt lets AI close the series by showing how Cabloy's field-oriented contract model supports several behaviors across backend and frontend.
6
6
 
7
7
  This capstone sits on top of both the forward chain and the reverse chain rather than replacing either one.
8
8
 
@@ -14,7 +14,7 @@ This time the main teaching field is `mobile`, while `level` stays as the suppor
14
14
 
15
15
  ## Goal
16
16
 
17
- By the end of this tutorial, you will understand how one business field thread can participate in:
17
+ By the end of this tutorial, you will understand how the field-oriented contract model supports:
18
18
 
19
19
  1. validation
20
20
  2. OpenAPI generation
@@ -44,13 +44,16 @@ Cabloy tries to reduce that duplication through a field-oriented contract and me
44
44
 
45
45
  ## CLI commands to inspect/use
46
46
 
47
- This tutorial is mainly a source-inspection and verification capstone.
47
+ This tutorial is mainly a source-inspection and verification capstone. After updating the backend field and DTO contracts, start Vona in a separate terminal and keep it running so OpenAPI generation reads the current Swagger output:
48
48
 
49
- Useful commands include:
49
+ ```bash
50
+ npm run dev
51
+ ```
52
+
53
+ Then regenerate the frontend contract using the module configuration established in Tutorial 5:
50
54
 
51
55
  ```bash
52
56
  npm run zova :openapi:generate demo-student
53
- npm run dev
54
57
  ```
55
58
 
56
59
  Usage notes:
@@ -94,9 +97,7 @@ The supporting render example remains:
94
97
 
95
98
  ## What those files mean in the business thread
96
99
 
97
- This tutorial works best when you read `mobile` as one continuous contract thread.
98
-
99
- That is why `mobile` is the main capstone field, while `level` remains the supporting rendering field.
100
+ Read `mobile` as the validation, OpenAPI, and serialization example, and `level` as the table and form rendering example. Together they show four uses of the same field-oriented contract model.
100
101
 
101
102
  ### Use 1: Validation
102
103
 
@@ -140,12 +141,7 @@ That keeps the masking rule close to the field contract ecosystem instead of sca
140
141
 
141
142
  ## Verification
142
143
 
143
- 1. make sure the local dev workflow is running:
144
-
145
- ```bash
146
- npm run dev
147
- ```
148
-
144
+ 1. confirm that Vona, started before OpenAPI generation, is still running
149
145
  2. open `http://localhost:7102/admin/`
150
146
  3. enter the relevant **Student** page
151
147
  4. verify that `level` still shows the expected render-driven behavior
@@ -84,9 +84,9 @@ See [Contract Loop Playbook](/fullstack/contract-loop-playbook) and [Frontend Me
84
84
 
85
85
  This phase teaches the **forward chain** of the contract loop: backend contract truth changes first, generated frontend consumers are refreshed second, and frontend follow-up stays thin and resource-owner-aware.
86
86
 
87
- ### Phase 4: One field story across multiple contract surfaces
87
+ ### Phase 4: One field-oriented contract model across four uses
88
88
 
89
- - [Tutorial 6: One Contract Surface, Four Uses](/fullstack/tutorial-6-one-contract-four-uses)
89
+ - [Tutorial 6: One Contract Model, Four Uses](/fullstack/tutorial-6-one-contract-four-uses)
90
90
 
91
91
  ## The standard tutorial structure
92
92
 
@@ -4,7 +4,7 @@ layout: home
4
4
  hero:
5
5
  name: 'Cabloy'
6
6
  text: 'Node.js fullstack framework for AI vibe coding'
7
- tagline: One fullstack system for AI vibe coding—bidirectional type sync, CLI-first workflows, and Traceable Spec Delivery from product intent to verifiable evidence.
7
+ tagline: Vona and Zova stay connected through bidirectional type sync; AI Spec-Driven Development guides work from confirmed specs to verifiable delivery.
8
8
  actions:
9
9
  - theme: brand
10
10
  text: Get Started
@@ -20,65 +20,43 @@ hero:
20
20
  link: /ai/ai-spec-driven-development
21
21
 
22
22
  features:
23
- - title: One fullstack system
24
- details: Build backend and frontend together instead of assembling separate stacks.
25
23
  - title: Bidirectional type sync
26
- details: Keep backend contracts and frontend metadata aligned through a two-way contract loop.
24
+ details: Generate Zova SDKs from Vona OpenAPI contracts and feed Zova metadata back to backend tooling.
27
25
  - title: CLI-first workflows
28
- details: Use explicit commands for scaffolding, generation, refactors, and verification.
29
- - title: Docs and skills
30
- details: Give people and AI agents reusable, source-grounded guidance for the current repository.
26
+ details: Scaffold, regenerate, refactor, and verify through Vona and Zova commands.
31
27
  - title: AI Spec-Driven Development
32
- details: Connect confirmed product intent to contracts, bounded delivery, acceptance procedures, and verifiable evidence.
33
- - title: Vona + Zova
34
- details: Use aligned backend and frontend layers for code sharing and cross-stack consistency.
35
- - title: Modular delivery
36
- details: Organize capabilities as suites and modules, then deliver SSR, SPA, Web, and Admin applications with shared conventions.
37
- - title: Semantic presentation
38
- details: Translate confirmed audience, task, scene, and DTO contracts into schema-driven UI without changing security or ownership authority.
28
+ details: Turn confirmed product intent into bounded work, acceptance procedures, and verifiable evidence.
29
+ - title: Suites and modules
30
+ details: Organize capabilities for SSR, SPA, Web, and Admin applications with shared conventions.
39
31
  ---
40
32
 
41
- # Cabloy Documentation
33
+ ## Choose a reading path
42
34
 
43
- Cabloy is a Node.js fullstack framework for AI vibe coding, with AI Spec-Driven Development for traceable, evidence-backed delivery. It brings backend and frontend work into one system, with bidirectional type sync, CLI-first workflows, and source-grounded docs and skills for people and AI agents.
35
+ ### Start a project
44
36
 
45
- [AI Spec-Driven Development](/ai/ai-spec-driven-development) adds Cabloy's disciplined delivery path: **Traceable Spec Delivery** connects confirmed product intent to contracts, bounded work, acceptance procedures, and verifiable evidence. Start with the [Contract Loop Playbook](/fullstack/contract-loop-playbook) to understand bidirectional type sync, then use the [Fullstack CLI](/fullstack/cli) and [AI Development](/ai/introduction) guides to follow the current repository. Cabloy coordinates Vona and Zova as its backend and frontend layers, while Cabloy Basic and Cabloy Start are related, complete edition baselines built on that shared architecture. See [Editions Overview](/editions/overview) for the relationship and deliberate edition differences.
37
+ 1. [Choose an edition](/editions/overview#choosing-an-edition)
38
+ 2. [Fullstack Quickstart](/fullstack/quickstart)
39
+ 3. [Fullstack Quick Start Tutorials](/fullstack/tutorials-overview)
46
40
 
47
- ## What you can do here
41
+ ### Develop across Vona and Zova
48
42
 
49
- - **Get started quickly** with the fullstack quickstart and core Cabloy concepts
50
- - **Learn the shared fullstack architecture** across Cabloy, Vona, and Zova
51
- - **Explore backend and frontend workflows** without losing the cross-stack picture
52
- - **Understand Cabloy’s performance philosophy and runtime stability story** with [Framework Performance](/fullstack/framework-performance)
53
- - **See how Cabloy Basic and Cabloy Start differ by edition** when UI assumptions, flavors, modules, SSR sites, or AI workflow guidance matter
54
- - **Follow AI Spec-Driven Development** from confirmed product intent to evidence-backed verification
55
- - **Use source-grounded AI vibe coding guidance** for prompting, workflow selection, and verification
43
+ Use the contract loop when generated contracts or metadata cross the Vona-Zova boundary.
56
44
 
57
- ## First reading path
58
-
59
- ### For getting started
45
+ 1. [Fullstack Introduction](/fullstack/introduction)
46
+ 2. [Fullstack CLI](/fullstack/cli)
47
+ 3. [Contract Loop Playbook](/fullstack/contract-loop-playbook)
60
48
 
61
- 1. [Fullstack Quickstart](/fullstack/quickstart)
62
- 2. [Fullstack Quick Start Tutorials](/fullstack/tutorials-overview)
63
- 3. [Cabloy Editions](/editions/overview#choosing-an-edition)
64
- 4. [Fullstack Introduction](/fullstack/introduction)
49
+ ### Deliver from confirmed specs
65
50
 
66
- ### For contributors and AI vibe coding workflows
51
+ Use AI Spec-Driven Development to connect product intent, bounded work, and acceptance evidence.
67
52
 
68
- 1. [Fullstack Introduction](/fullstack/introduction)
69
- 2. [Fullstack CLI](/fullstack/cli)
70
- 3. [VS Code Extensions](/fullstack/vscode-extensions)
71
- 4. [AI Development Introduction](/ai/introduction)
72
- 5. [AI Spec-Driven Development](/ai/ai-spec-driven-development)
73
- 6. [Reference Introduction](/reference/introduction)
74
- 7. [Editions Overview](/editions/overview)
53
+ 1. [AI Spec-Driven Development](/ai/ai-spec-driven-development)
54
+ 2. [AI Development Introduction](/ai/introduction)
75
55
 
76
- ### For performance-oriented reading
56
+ ### Explore performance
77
57
 
78
- 1. [Fullstack Introduction](/fullstack/introduction)
79
- 2. [Framework Performance](/fullstack/framework-performance)
80
- 3. [Cache Guide](/backend/cache-guide)
81
- 4. [Vona + Zova Integration](/fullstack/vona-zova-integration)
58
+ 1. [Framework Performance](/fullstack/framework-performance)
59
+ 2. [Cache Guide](/backend/cache-guide)
82
60
 
83
61
  ## Documentation scope labels
84
62
 
Binary file
@@ -0,0 +1,3 @@
1
+ <svg width="32" height="32" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M14.1094 0C14.7552 0 15.1979 0.0729167 15.4375 0.21875C15.6771 0.364583 15.7969 0.619792 15.7969 0.984375V6.98438C15.7969 7.33854 15.6354 7.59375 15.3125 7.75C15 7.89583 14.474 7.96875 13.7344 7.96875C13.2448 7.96875 12.8646 7.9375 12.5938 7.875C12.3333 7.80208 12.151 7.69792 12.0469 7.5625C11.9427 7.42708 11.8906 7.23438 11.8906 6.98438C11.8906 5.94271 11.6042 5.10938 11.0312 4.48438C10.4688 3.85938 9.66146 3.54688 8.60938 3.54688C7.16146 3.54688 6.0625 4.06771 5.3125 5.10938C4.5625 6.15104 4.1875 7.65104 4.1875 9.60938C4.1875 11.5469 4.58333 13.0469 5.375 14.1094C6.17708 15.1615 7.30729 15.6875 8.76562 15.6875C9.67188 15.6875 10.5417 15.5677 11.375 15.3281C12.2083 15.0781 13.1146 14.7031 14.0938 14.2031C14.2604 14.1198 14.4167 14.0781 14.5625 14.0781C15.0521 14.0781 15.4583 14.5104 15.7812 15.375C15.9271 15.7708 16 16.125 16 16.4375C16 16.9688 15.7604 17.349 15.2812 17.5781C13.0521 18.6823 10.8281 19.2344 8.60938 19.2344C6.90104 19.2344 5.39583 18.8438 4.09375 18.0625C2.79167 17.2812 1.78125 16.1667 1.0625 14.7188C0.354167 13.2604 0 11.5573 0 9.60938C0 7.67188 0.348958 5.97917 1.04688 4.53125C1.74479 3.07292 2.70833 1.95312 3.9375 1.17188C5.17708 0.390625 6.57812 0 8.14062 0C9.96354 0 11.3177 0.65625 12.2031 1.96875V0.984375C12.2031 0.630208 12.3542 0.380208 12.6562 0.234375C12.9583 0.078125 13.4427 0 14.1094 0Z" fill="#FF9300"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="32" height="32" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M14.1094 0C14.7552 0 15.1979 0.0729167 15.4375 0.21875C15.6771 0.364583 15.7969 0.619792 15.7969 0.984375V6.98438C15.7969 7.33854 15.6354 7.59375 15.3125 7.75C15 7.89583 14.474 7.96875 13.7344 7.96875C13.2448 7.96875 12.8646 7.9375 12.5938 7.875C12.3333 7.80208 12.151 7.69792 12.0469 7.5625C11.9427 7.42708 11.8906 7.23438 11.8906 6.98438C11.8906 5.94271 11.6042 5.10938 11.0312 4.48438C10.4688 3.85938 9.66146 3.54688 8.60938 3.54688C7.16146 3.54688 6.0625 4.06771 5.3125 5.10938C4.5625 6.15104 4.1875 7.65104 4.1875 9.60938C4.1875 11.5469 4.58333 13.0469 5.375 14.1094C6.17708 15.1615 7.30729 15.6875 8.76562 15.6875C9.67188 15.6875 10.5417 15.5677 11.375 15.3281C12.2083 15.0781 13.1146 14.7031 14.0938 14.2031C14.2604 14.1198 14.4167 14.0781 14.5625 14.0781C15.0521 14.0781 15.4583 14.5104 15.7812 15.375C15.9271 15.7708 16 16.125 16 16.4375C16 16.9688 15.7604 17.349 15.2812 17.5781C13.0521 18.6823 10.8281 19.2344 8.60938 19.2344C6.90104 19.2344 5.39583 18.8438 4.09375 18.0625C2.79167 17.2812 1.78125 16.1667 1.0625 14.7188C0.354167 13.2604 0 11.5573 0 9.60938C0 7.67188 0.348958 5.97917 1.04688 4.53125C1.74479 3.07292 2.70833 1.95312 3.9375 1.17188C5.17708 0.390625 6.57812 0 8.14062 0C9.96354 0 11.3177 0.65625 12.2031 1.96875V0.984375C12.2031 0.630208 12.3542 0.380208 12.6562 0.234375C12.9583 0.078125 13.4427 0 14.1094 0Z" fill="#FF9300"/>
3
+ </svg>
@@ -55,11 +55,15 @@ Cabloy Basic exposes these shared root scripts:
55
55
  The current Cabloy Basic root scripts also expose:
56
56
 
57
57
  ```bash
58
+ npm run spec:check -- <suite>
59
+ npm run spec:check -- <suite> --lightweight --format json
58
60
  npm run test:spec-charts
59
61
  npm run spec:charts -- <suite>
60
62
  npm run spec:charts:check -- <suite>
61
63
  ```
62
64
 
65
+ `spec:check` is a read-only planning-authority structure audit: complete mode checks core records, formal definitions, exact references and traceability, WBS/progress consistency, and supported local Markdown links. `--lightweight` checks the present authority and references without requiring a full baseline or charts; `--format json` emits deterministic diagnostics. Audit regressions run under `test:agent-governance`. A structural pass does not authenticate approval, business completeness, implementation, or acceptance evidence; existing legacy gaps should be reported rather than filled with invented requirements.
66
+
63
67
  `spec:charts` refreshes the generated Gantt and burndown SVG views for a chart-compatible `repo-specs/<suite>/` record. `spec:charts:check` validates the supported input contract and detects stale generated views; `test:spec-charts` runs the chart-tool test suite. The deterministic implementation lives in `repo-agent-governance/tools/spec-charts/`, not inside a provider-specific skill discovery directory.
64
68
 
65
69
  ### Chart input contract
@@ -68,7 +72,8 @@ The generator consumes `README.md`, `pdp-wbs.md`, `test-plan.md`, and `progress.
68
72
 
69
73
  - formal `### Phase <number>:` and `#### WBS-...:` headings in the WBS, with supported dependency labels
70
74
  - formally defined `ATP-*` scenarios in the test plan for every ATP reference used by a WBS task
71
- - one progress row for each WBS item, with the WBS ID in the first cell and its supported status in the second cell
75
+ - exactly one progress row for each WBS item, with columns identified by the `WBS ID` and `Status` headers, regardless of their order; explicit WBS status must agree
76
+ - unique formal definitions and an acyclic dependency graph; both `Dependency:` and `Dependencies:` are supported, phase defaults apply only before the first task, and explicit task dependencies override them
72
77
  - a README whose current title and language should be reflected by regenerated chart output
73
78
 
74
79
  A legacy suite with a different WBS or progress-table layout is not chart-compatible until a deliberate record-format normalization aligns its authoritative Markdown with this input contract. Format normalization must preserve the existing planning authority; it does not require an unrelated product or delivery change.