cabloy 5.1.149 → 5.1.151
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/.cabloy-version +1 -1
- package/.claude/commands/release.md +12 -1
- package/.claude/hooks/contract-loop-gate.ts +35 -17
- package/.claude/skills/cabloy-backend-scaffold/SKILL.md +4 -3
- package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +3 -2
- package/.claude/skills/cabloy-contract-loop/SKILL.md +4 -3
- package/.claude/skills/cabloy-domain-planning/SKILL.md +4 -3
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +5 -3
- package/.claude/skills/cabloy-master-detail/SKILL.md +4 -3
- package/.claude/skills/cabloy-module-removal/SKILL.md +5 -4
- package/.claude/skills/cabloy-resource-field-update/SKILL.md +8 -5
- package/.claude/skills/cabloy-spec-execution/SKILL.md +169 -0
- package/.claude/skills/cabloy-spec-execution/evals/evals.json +71 -0
- package/.claude/skills/cabloy-spec-execution/references/execution-protocol.md +137 -0
- package/.claude/skills/cabloy-spec-execution/references/status-and-evidence.md +117 -0
- package/.claude/skills/cabloy-spec-generation/SKILL.md +227 -0
- package/.claude/skills/cabloy-spec-generation/evals/evals.json +83 -0
- package/.claude/skills/cabloy-spec-generation/references/repo-aware-discovery.md +101 -0
- package/.claude/skills/cabloy-spec-generation/references/repo-specs-document-set.md +267 -0
- package/.claude/skills/cabloy-spec-generation/references/traceability-and-status-rules.md +135 -0
- package/.claude/skills/cabloy-spec-generation/scripts/generate-implementation-charts.mjs +350 -0
- package/.claude/skills/cabloy-spec-generation/scripts/generate-implementation-charts.test.mjs +202 -0
- package/.claude/skills/cabloy-workflow/SKILL.md +21 -10
- package/.claude/skills/cabloy-workflow/evals/evals.json +8 -2
- package/.claude/skills/cabloy-workflow/references/edition-detection.md +5 -3
- package/.claude/skills/cabloy-zova-source-reading/SKILL.md +4 -3
- package/CHANGELOG.md +41 -0
- package/CLAUDE.md +12 -11
- package/package.json +4 -2
- package/repo-docs/.vitepress/config.mjs +4 -0
- package/repo-docs/ai/docs-skills-rules-mapping.md +6 -6
- package/repo-docs/ai/future-skill-roadmap.md +2 -2
- package/repo-docs/ai/introduction.md +5 -5
- package/repo-docs/ai/playbook-contract-regeneration.md +3 -9
- package/repo-docs/ai/repo-guidance.md +5 -4
- package/repo-docs/ai/rules-and-config.md +2 -2
- package/repo-docs/ai/virtual-decorator-guidance.md +1 -3
- package/repo-docs/backend/cache-guide.md +36 -0
- package/repo-docs/backend/dto-guide.md +7 -6
- package/repo-docs/backend/dto-infer-generation.md +25 -5
- package/repo-docs/backend/introduction.md +1 -1
- package/repo-docs/backend/migration-and-changes.md +27 -2
- package/repo-docs/backend/model-guide.md +1 -1
- package/repo-docs/backend/resource-field-update.md +156 -0
- package/repo-docs/frontend/a-model-under-the-hood.md +38 -0
- package/repo-docs/frontend/a-openapi-under-the-hood.md +13 -2
- package/repo-docs/frontend/form-layout-guide.md +26 -9
- package/repo-docs/frontend/model-resource-best-practices.md +2 -0
- package/repo-docs/frontend/model-resource-cookbook.md +7 -1
- package/repo-docs/frontend/router-tabs-introduction.md +2 -4
- package/repo-docs/frontend/use-state-data-best-practices.md +44 -0
- package/repo-docs/frontend/zova-form-source-reading-map.md +26 -9
- package/repo-docs/frontend/zova-form-under-the-hood.md +11 -0
- package/repo-docs/fullstack/a-pay-payment-suite.md +1 -1
- package/repo-docs/fullstack/contract-loop-playbook.md +4 -0
- package/repo-docs/fullstack/one-to-one-companion-resource-guide.md +2 -2
- package/repo-docs/reference/package-map.md +1 -1
- package/repo-e2e/specs/a-commerce.spec.ts +40 -0
- package/scripts/release.ts +48 -1
- package/scripts/upgrade.ts +18 -7
- package/vona/packages-cli/cli/package.json +1 -1
- package/vona/packages-cli/cli-set-api/cli/templates/tools/crudStart/boilerplate/src/controller/{{resourceName}}.ts_ +2 -2
- package/vona/packages-cli/cli-set-api/package.json +1 -1
- package/vona/pnpm-lock.yaml +83 -75
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/index.ts +108 -108
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuSelectResItem.tsx +12 -0
- package/vona/src/suite/a-commerce/modules/commerce-catalog/src/service/sku.ts +19 -1
- package/vona/src/suite/a-commerce/modules/commerce-catalog/test/skuPresentation.test.ts +53 -4
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +148 -148
- package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockAdjust.tsx +37 -3
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts +2 -2
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +7 -6
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +1 -1
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +7 -6
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +10 -7
- package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +4 -4
- package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +39 -67
- package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +56 -37
- package/zova/packages-zova/zova/package.json +2 -2
- package/zova/pnpm-lock.yaml +5 -5
- package/zova/src/suite/a-commerce/modules/commerce-trade/cli/openapi.config.ts +1 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/package.json +6 -1
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/component/tableCellActionAdjustStock.ts +34 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +81 -6
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/commerceTradeStockBalance.ts +32 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/schemas.ts +44 -44
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/types.ts +356 -338
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/apiSchema/commerceTradeStockBalance.ts +17 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/bean/tableCell.actionAdjustStock.tsx +35 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/component/tableCellActionAdjustStock/controller.tsx +138 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/en-us.ts +3 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/zh-cn.ts +3 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/stockBalance.ts +36 -0
- package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/payment/controller.tsx +4 -4
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +8 -8
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +11 -11
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx +2 -2
- package/zova/src/suite/cabloy-basic/modules/basic-app/src/bean/behavior.appModal.tsx +2 -0
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +2 -1
- package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/test/model/resource.types.ts +11 -0
- package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-form/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-form/src/lib/formLayout.ts +58 -9
- package/zova/src/suite-vendor/a-zova/modules/a-form/test/lib/formLayout.test.ts +157 -0
- package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.persister.ts +3 -1
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useQuery.ts +11 -13
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useState.ts +9 -7
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useStateGeneral.ts +5 -12
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/lib/queryPersister.ts +17 -0
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/lib/queryRefetch.ts +34 -0
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/types/query.ts +27 -3
- package/zova/src/suite-vendor/a-zova/modules/a-model/test/lib/queryPersister.test.ts +115 -0
- package/zova/src/suite-vendor/a-zova/modules/a-model/test/lib/queryRefetch.test.ts +84 -0
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/lib/schema.ts +27 -5
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/model/sdk.ts +2 -2
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/rest.ts +4 -0
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/schema.ts +2 -5
- package/zova/src/suite-vendor/a-zova/modules/a-openapi/test/lib/schema.test.ts +179 -0
- package/zova/src/suite-vendor/a-zova/package.json +4 -4
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Spec Execution Protocol
|
|
2
|
+
|
|
3
|
+
This reference defines the preflight and handoff protocol for `cabloy-spec-execution`. It coordinates an approved delivery increment; it does not become a parallel product, architecture, or implementation authority.
|
|
4
|
+
|
|
5
|
+
## 1. Discovery dossier
|
|
6
|
+
|
|
7
|
+
Before selecting work, inspect the active repository root and record only observed facts:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
git rev-parse --show-toplevel
|
|
11
|
+
git status --short
|
|
12
|
+
git rev-parse HEAD
|
|
13
|
+
find . -maxdepth 1 \( -name '__CABLOY_BASIC__' -o -name '__CABLOY_START__' \) -print
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Then inspect the root `package.json`, `CLAUDE.md`, the suite spec directory, and actual affected source paths. Classify the worktree as clean, dirty with unrelated changes, dirty with overlapping changes, or otherwise unknown. Do not clean or reset it to make execution easier.
|
|
17
|
+
|
|
18
|
+
For Basic, resolve current scripts, sites, flavors, UI, and generated paths from the active repository. For Start, inspect the active Start repository and use its own commands and flavor/site names. The shared execution model does not make edition-specific runtime facts interchangeable.
|
|
19
|
+
|
|
20
|
+
## 2. Target selection
|
|
21
|
+
|
|
22
|
+
The normal unit of work is one WBS item. A phase may be selected only when the phase is a finite, explicitly approved batch and the WBS defines its task set and closure boundary.
|
|
23
|
+
|
|
24
|
+
A valid target dossier names:
|
|
25
|
+
|
|
26
|
+
- suite planning directory and edition;
|
|
27
|
+
- one `WBS-*` ID, or finite phase/task list;
|
|
28
|
+
- linked `PRD-*`, `SRS-*`, and `ATP-*` IDs;
|
|
29
|
+
- dependencies and predecessor WBS rows;
|
|
30
|
+
- source areas and ownership;
|
|
31
|
+
- explicit exclusions and neighboring work that will not be touched.
|
|
32
|
+
|
|
33
|
+
Vague targets such as “implement the suite”, “finish all specs”, or “do the next phase” are not executable. Ask the user to select a task or approve a finite task list.
|
|
34
|
+
|
|
35
|
+
## 3. Authority and readiness gates
|
|
36
|
+
|
|
37
|
+
Read in this order:
|
|
38
|
+
|
|
39
|
+
1. README and authority map;
|
|
40
|
+
2. PRD, SRS, and applicable ADRs;
|
|
41
|
+
3. complete WBS task and dependency rows;
|
|
42
|
+
4. linked ATP definitions and test-plan release gates;
|
|
43
|
+
5. progress, blockers, waivers, and next proof;
|
|
44
|
+
6. linked evidence, phase indexes, runbooks, presentation contracts, rollout records, and the two derived implementation charts; verify their freshness with `npm run spec:charts:check -- <suite>`.
|
|
45
|
+
|
|
46
|
+
Before implementation, verify:
|
|
47
|
+
|
|
48
|
+
- the WBS target exists and is bounded;
|
|
49
|
+
- every material linked requirement has a technical contract and ATP;
|
|
50
|
+
- predecessor status satisfies the WBS dependency rule and required evidence exists;
|
|
51
|
+
- no controlling `TODO(confirm)`, unaccepted ADR, waiver, or failed gate remains unresolved;
|
|
52
|
+
- the selected task is not already `verified`, `deferred`, or `blocked`;
|
|
53
|
+
- source ownership and the target API/state/page boundary are unambiguous;
|
|
54
|
+
- current evidence is still valid for the current source revision and authority set;
|
|
55
|
+
- both implementation charts are present and current, or their regeneration is included in the approved record-update scope;
|
|
56
|
+
- dirty-worktree changes can be attributed without overwriting unrelated work;
|
|
57
|
+
- tenant, identity, authorization, ownership, privacy, lifecycle, transaction, concurrency, idempotency, audit, and recovery constraints are defined for the task’s risk;
|
|
58
|
+
- the requested change does not broaden scope or create a competing persistence, identity, or API authority.
|
|
59
|
+
|
|
60
|
+
When authority records conflict, stop. Update the authoritative PRD, SRS, or ADR through `cabloy-spec-generation`, then propagate the change through WBS, ATP, evidence assumptions, and progress. Do not reconcile a conflict by silently editing a downstream status or implementation plan.
|
|
61
|
+
|
|
62
|
+
## 4. Special gates
|
|
63
|
+
|
|
64
|
+
### Persisted schema and file version
|
|
65
|
+
|
|
66
|
+
If implementation may add or alter a persisted field, table, relation, index, or `meta.version.ts` path, ask before editing whether `vonaModule.fileVersion` should increment. Do not infer the answer from neighboring modules. If `meta.version.ts` changes, the repository rule requires `npm run test` after the change; include this in the dossier and evidence plan.
|
|
67
|
+
|
|
68
|
+
### Contract loop
|
|
69
|
+
|
|
70
|
+
Classify the handoff before choosing commands:
|
|
71
|
+
|
|
72
|
+
- **forward**: Vona DTO/controller/entity/validation/OpenAPI truth -> inspect output -> regenerate Zova consumers -> thin frontend follow-up;
|
|
73
|
+
- **reverse**: Zova-owned route/resource/metadata -> build the affected flavor’s SSR and REST outputs -> run `npm run deps:vona`;
|
|
74
|
+
- **consumer drift**: identify the generated or hand-authored stale surface before changing source;
|
|
75
|
+
- **local dependency drift**: enter only after source, generated output, flavor build, and dependency sync are known correct.
|
|
76
|
+
|
|
77
|
+
Generated consumers are disposable outputs and must not be hand-edited. The contract-loop hook may assist, but it is not proof of completion.
|
|
78
|
+
|
|
79
|
+
### SSR and flavor
|
|
80
|
+
|
|
81
|
+
For SSR or route work, identify the actual site/flavor, route admission, auth requirement, SSR profile, private data boundary, and hydration-time initial render contract. Verify the relevant SSR and REST artifacts together when the change crosses the reverse handoff. Do not use the absence of a locale parameter as a reason to choose a session/public profile, and do not copy Basic SSR assumptions into Start.
|
|
82
|
+
|
|
83
|
+
### External and destructive operations
|
|
84
|
+
|
|
85
|
+
Provider calls, real webhooks, deployment, release, cutover, credential changes, database reset/recreation, `npm run init`, broad generation, cleanup/reset/stash/checkout, and dependency reinstall are separate operations. Keep them out of ordinary spec execution unless their own explicit workflow and confirmation authorizes them. Use synthetic or sandbox data and redact retained proof.
|
|
86
|
+
|
|
87
|
+
## 5. Confirmation dossier template
|
|
88
|
+
|
|
89
|
+
Present this before implementation:
|
|
90
|
+
|
|
91
|
+
```text
|
|
92
|
+
Execution target: <WBS ID or finite phase>
|
|
93
|
+
Edition/repository: <observed edition and root>
|
|
94
|
+
Revision/worktree: <HEAD>; <clean or dirty classification>
|
|
95
|
+
Scope: <bounded tasks and exclusions>
|
|
96
|
+
Authority: <PRD/SRS/ADR/WBS/ATP links>
|
|
97
|
+
Dependencies: <predecessors and proof>
|
|
98
|
+
Source ownership: <observed paths and proposed paths>
|
|
99
|
+
Specialist route: <backend/frontend/contract-loop/specialist>
|
|
100
|
+
Safety/contract constraints: <tenant, auth, lifecycle, transaction, SSR, migration, privacy>
|
|
101
|
+
Verification: <exact approved ATP procedures and commands>
|
|
102
|
+
Evidence: <required revision/environment/procedure/result/redacted artifact>
|
|
103
|
+
Derived charts: regenerate `implementation-gantt.svg` and `implementation-burndown.svg` after `progress.md`, then run `npm run spec:charts:check -- <suite>`; their language follows `README.md` and they remain non-authoritative.
|
|
104
|
+
Allowed record updates: <evidence/phase index/progress/derived charts, or explicitly named authority change>
|
|
105
|
+
Blocked or unresolved: <TODOs, waivers, conflicts>
|
|
106
|
+
Excluded operations: <init/reset/deploy/provider/etc.>
|
|
107
|
+
Next action: <one action after confirmation>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Require explicit confirmation. If the user changes scope, rebuild the dossier and re-check dependencies and authority. A prior confirmation does not authorize a new task, phase, provider operation, or destructive command.
|
|
111
|
+
|
|
112
|
+
## 6. Specialist routing
|
|
113
|
+
|
|
114
|
+
| Task shape | Primary route | Coordinator must preserve |
|
|
115
|
+
| --- | --- | --- |
|
|
116
|
+
| Vona module/bean/service/model/entity/DTO/validation/migration/test | `cabloy-backend-scaffold` | CLI-first generation, tenant/security review, migration/index/version gate, tests, OpenAPI impact |
|
|
117
|
+
| Zova page/component/route/model/metadata/SSR/test | `cabloy-frontend-scaffold` | route metadata, state ownership, hydration equivalence, emitted import suffixes, flavor/site proof |
|
|
118
|
+
| OpenAPI, SDK/schema, generated consumer, reverse metadata, stale consumer | `cabloy-contract-loop` | source-first direction, paired SSR/REST reverse build, `deps:vona`, no hand edits |
|
|
119
|
+
| master-detail, resource-field, module removal | corresponding specialist skill | specialized ownership and cleanup order |
|
|
120
|
+
| requirement, architecture, scope, identity, or authority change | `cabloy-spec-generation` / `cabloy-domain-planning` | no implementation around unresolved authority |
|
|
121
|
+
|
|
122
|
+
The coordinator may pass the dossier to the specialist; it should not duplicate the specialist’s detailed command tree.
|
|
123
|
+
|
|
124
|
+
## 7. Verification and stopping
|
|
125
|
+
|
|
126
|
+
Start with the narrowest meaningful check, then execute linked ATP procedures and only the required release gates. Explicitly preserve test-owned fixture cleanup, separate `mockCtx(...)` boundaries for competing Vona operations, synthetic/redacted data, and the test plan’s database/flavor requirements.
|
|
127
|
+
|
|
128
|
+
Stop and report rather than guessing when:
|
|
129
|
+
|
|
130
|
+
- a command or path is not observed in the active repository;
|
|
131
|
+
- a test fails or a required artifact is missing;
|
|
132
|
+
- the working tree becomes attribution-ambiguous;
|
|
133
|
+
- a specialist discovers a requirement or contract change;
|
|
134
|
+
- a planned external/destructive operation is needed;
|
|
135
|
+
- a prior evidence record is invalidated by source or authority changes.
|
|
136
|
+
|
|
137
|
+
A failed verification creates an accurate blocker only when the observed result is recorded; otherwise the task remains unexecuted or in-progress according to actual activity. Do not claim a phase or release is closed because one feature ATP passed.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Status and Evidence Update Rules
|
|
2
|
+
|
|
3
|
+
This reference defines how `cabloy-spec-execution` closes observed work without turning derived records into a second authority.
|
|
4
|
+
|
|
5
|
+
## Authority and update order
|
|
6
|
+
|
|
7
|
+
The suite’s `test-plan.md` owns ATP definitions, procedures, expected outcomes, evidence format, and release gates. The PRD, SRS, ADRs, and WBS remain authoritative for product scope, technical contracts, durable decisions, dependencies, and completion checks.
|
|
8
|
+
|
|
9
|
+
For ordinary execution that does not change authority:
|
|
10
|
+
|
|
11
|
+
1. retain actual evidence;
|
|
12
|
+
2. update a dedicated phase/ATP evidence record when the suite convention supports it;
|
|
13
|
+
3. update a rollout or operational handoff record when it is part of the established suite flow;
|
|
14
|
+
4. update `progress.md` with derived status, evidence pointers, blockers, and next proof;
|
|
15
|
+
5. regenerate `implementation-gantt.svg` and `implementation-burndown.svg` last, then run `npm run spec:charts:check -- <suite>`.
|
|
16
|
+
|
|
17
|
+
The charts are derived views only. Refresh them after status, review-date, evidence-pointer, or evidence-supersession changes that affect their display; do not edit them to conceal an authority conflict. Their labels, accessibility text, and metadata follow the suite `README.md` language.
|
|
18
|
+
|
|
19
|
+
Some Basic suites retain observed evidence inline in `test-plan.md`. Preserve the existing convention rather than introducing duplicate evidence stores. If the procedure, expected result, evidence requirement, release gate, or delivery scope changes, update the owning authority first and then reassess existing evidence before updating progress.
|
|
20
|
+
|
|
21
|
+
Do not use `progress.md` to add requirements, technical contracts, acceptance procedures, dependencies, or architecture decisions. Do not modify unrelated WBS rows or rewrite historical evidence for presentation.
|
|
22
|
+
|
|
23
|
+
## Evidence layout
|
|
24
|
+
|
|
25
|
+
Prefer the scalable phase/ATP layout for newly observed proof when the suite permits extensions:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
evidence/
|
|
29
|
+
└── phase-<NN>/
|
|
30
|
+
├── index.md
|
|
31
|
+
├── ATP-<DOMAIN>-<CAPABILITY>-<NN>.md
|
|
32
|
+
└── artifacts/
|
|
33
|
+
└── <date>-<revision>-<scope>.md|log
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
A dedicated ATP evidence record should include:
|
|
37
|
+
|
|
38
|
+
- linked PRD, SRS, WBS, and ATP IDs;
|
|
39
|
+
- source revision or commit;
|
|
40
|
+
- clean/dirty worktree classification; for dirty proof, a patch or diff digest and clear changed-file scope;
|
|
41
|
+
- database, environment, flavor/site, and configuration class when relevant;
|
|
42
|
+
- exact command, API procedure, browser procedure, or CI job;
|
|
43
|
+
- synthetic fixtures and explicit concurrency interleaving where relevant;
|
|
44
|
+
- expected and observed result, including failures;
|
|
45
|
+
- durable redacted log, response, screenshot, CI job, or artifact location;
|
|
46
|
+
- superseded evidence and reconciliation note when newer proof replaces an older record;
|
|
47
|
+
- waiver owner, reason, affected IDs, expiry, and compensating control when applicable.
|
|
48
|
+
|
|
49
|
+
Do not retain credentials, raw tokens, signed callback state, secrets, live provider identifiers, or real customer/payment data. Redaction is part of the evidence record, not an informal afterthought.
|
|
50
|
+
|
|
51
|
+
Do not create an empty `evidence/` directory, placeholder `EVD-*` record, or fabricated artifact merely to satisfy a traceability table. A command written in a test plan or dossier is prospective until it is actually executed and retained.
|
|
52
|
+
|
|
53
|
+
## Status vocabulary
|
|
54
|
+
|
|
55
|
+
Use the suite’s canonical status meanings:
|
|
56
|
+
|
|
57
|
+
| Status | Meaning |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| `not-started` | Defined, but implementation or acceptance evidence has not started. |
|
|
60
|
+
| `in-progress` | Work or verification has started, but closure checks remain. |
|
|
61
|
+
| `implementation-complete` | Source work is reported complete, but required ATP or release evidence is incomplete. |
|
|
62
|
+
| `verified` | Applicable WBS checks and ATPs passed, with durable traceable evidence containing revision, environment, exact procedure, result, and redacted artifact location. |
|
|
63
|
+
| `blocked` | A dependency, unresolved decision, failed gate, attribution problem, or missing required proof prevents closure. |
|
|
64
|
+
| `waived` | A temporary exception has an owner, reason, affected scope, and expiry; expiry becomes a release blocker. |
|
|
65
|
+
| `deferred` | Explicitly postponed scope; it is not complete or verified. |
|
|
66
|
+
|
|
67
|
+
The normal path is:
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
not-started -> in-progress -> implementation-complete -> verified
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
`blocked`, `waived`, and `deferred` are explicit states, not shortcuts to completion. Mark a task `in-progress` only after approved implementation or verification actually begins. A generated file, successful scaffold, passing typecheck, code review, manual walkthrough, screenshot, or unrelated broad test pass cannot by itself produce `verified`.
|
|
74
|
+
|
|
75
|
+
A task may be `implementation-complete` when source work is complete but an ATP, browser check, paired build, release gate, redaction decision, or durable artifact remains. A phase can be verified without implying that a separately defined integration or release phase is verified.
|
|
76
|
+
|
|
77
|
+
## Historical evidence and supersession
|
|
78
|
+
|
|
79
|
+
Evidence is revision- and authority-scoped. When source paths, generated artifacts, contracts, scope, or security assumptions change:
|
|
80
|
+
|
|
81
|
+
1. identify affected prior evidence;
|
|
82
|
+
2. retain it for history;
|
|
83
|
+
3. mark it superseded, invalidated, or requiring rerun with the reason and replacement condition;
|
|
84
|
+
4. run the applicable ATP again;
|
|
85
|
+
5. update the phase index and progress only after the new result is observed.
|
|
86
|
+
|
|
87
|
+
Do not trust a later progress summary over a contradictory, more recent ATP/artifact record without reconciling chronology and authority. Do not erase failures, expired waivers, or evidence gaps.
|
|
88
|
+
|
|
89
|
+
## Progress update contract
|
|
90
|
+
|
|
91
|
+
Update only the selected task/phase’s derived fields unless an authority change was explicitly approved:
|
|
92
|
+
|
|
93
|
+
- current status;
|
|
94
|
+
- last reviewed revision/date;
|
|
95
|
+
- concise evidence pointer;
|
|
96
|
+
- blocker or waiver details;
|
|
97
|
+
- exact next proof/action;
|
|
98
|
+
- supersession note when prior proof no longer applies.
|
|
99
|
+
|
|
100
|
+
When the worktree is dirty, record that the result is not reproducible from the base SHA alone and retain an appropriate patch/diff digest. Do not attribute unrelated local changes to the selected task.
|
|
101
|
+
|
|
102
|
+
A resumable handoff should state:
|
|
103
|
+
|
|
104
|
+
```text
|
|
105
|
+
WBS / phase:
|
|
106
|
+
Status:
|
|
107
|
+
Revision and worktree:
|
|
108
|
+
Scope and exclusions:
|
|
109
|
+
Authority and ownership:
|
|
110
|
+
Completed gates/evidence:
|
|
111
|
+
Commands/procedures actually run:
|
|
112
|
+
Commands/procedures still required:
|
|
113
|
+
Blocker or decision needed:
|
|
114
|
+
Next single action:
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
The “next single action” is a handoff, not authorization to execute the next WBS item automatically.
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cabloy-spec-generation
|
|
3
|
+
description: This skill should be used for requests to create or maintain a Cabloy `repo-specs/<suite>/` set, including a PRD, SRS, PDP/WBS, test plan, progress register, suite ADR, or “write the specs”/“plan the suite.” It links product, technical, delivery, acceptance, and decision records after the domain boundary is confirmed. Route unresolved naming to `cabloy-domain-planning`, implementation to scaffold skills, and concrete synchronization to `cabloy-contract-loop`.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cabloy Repository Specs
|
|
7
|
+
|
|
8
|
+
Use this skill to create or maintain a coherent, repository-native planning record for a long-lived Cabloy business suite. The output is internal planning material under `repo-specs/`; it is not source code, generated consumer output, or proof that implementation has happened.
|
|
9
|
+
|
|
10
|
+
## Goals
|
|
11
|
+
|
|
12
|
+
1. detect the active repository edition before making site, flavor, UI, or topology assumptions;
|
|
13
|
+
2. distinguish a new suite baseline from an extension of an existing spec set;
|
|
14
|
+
3. preserve the authority boundaries demonstrated by the Cabloy spec examples;
|
|
15
|
+
4. generate stable cross-document traceability from product intent to observed evidence;
|
|
16
|
+
5. keep unresolved decisions and unverified work explicit rather than filling gaps with plausible fiction;
|
|
17
|
+
6. hand implementation and contract-loop work to the appropriate existing skill instead of starting it implicitly.
|
|
18
|
+
|
|
19
|
+
Read these references before generating or substantially revising records:
|
|
20
|
+
|
|
21
|
+
- `references/repo-specs-document-set.md` for the document architecture and section contracts;
|
|
22
|
+
- `references/repo-aware-discovery.md` for edition detection, repository discovery, and command rules;
|
|
23
|
+
- `references/traceability-and-status-rules.md` for identifiers, evidence, status, and update-order gates.
|
|
24
|
+
|
|
25
|
+
## Step 1: Detect the repository and edition
|
|
26
|
+
|
|
27
|
+
From the repository root, inspect:
|
|
28
|
+
|
|
29
|
+
1. `git rev-parse --show-toplevel` and `git status --short`;
|
|
30
|
+
2. `__CABLOY_BASIC__` and `__CABLOY_START__`;
|
|
31
|
+
3. the root `package.json` and `CLAUDE.md`;
|
|
32
|
+
4. existing `repo-specs/` indexes and related suite/module topology;
|
|
33
|
+
5. `npm run vona` and `npm run zova` when the records will cite implementation commands.
|
|
34
|
+
|
|
35
|
+
Interpret the markers as follows:
|
|
36
|
+
|
|
37
|
+
- `__CABLOY_BASIC__` present: use Cabloy Basic source and public-doc assumptions;
|
|
38
|
+
- `__CABLOY_START__` present: use Cabloy Start source and resolve its own licensed-site, UI, flavor, and command details;
|
|
39
|
+
- neither present: do not make strong edition-specific assumptions; inspect the nearby project shape and ask the user to confirm the edition.
|
|
40
|
+
|
|
41
|
+
Never copy Basic flavor names, SSR assumptions, UI-library assumptions, or exact command lines into a Start record without verifying them in the active Start repository. The document architecture is shared; edition-specific runtime facts are not.
|
|
42
|
+
|
|
43
|
+
## Step 2: Classify the request
|
|
44
|
+
|
|
45
|
+
Choose one mode:
|
|
46
|
+
|
|
47
|
+
### New suite baseline
|
|
48
|
+
|
|
49
|
+
Use this when the user wants planning records for a new, long-lived business domain. The default output is a complete core set under `repo-specs/<suite-short-name>/`.
|
|
50
|
+
|
|
51
|
+
### Existing suite extension
|
|
52
|
+
|
|
53
|
+
Use this when a suite already has a planning directory. Read its README and authority map first. Update the authoritative PRD, SRS, or ADR before downstream WBS, test-plan, progress, or evidence references. Do not silently overwrite existing requirements, decisions, evidence, or status.
|
|
54
|
+
|
|
55
|
+
### Proportionate planning
|
|
56
|
+
|
|
57
|
+
A disposable demo, isolated tutorial, or small utility may not warrant the complete seven-document set. Explain the trade-off and offer a smaller record only when the user explicitly wants that scope. A real business domain that is expected to grow defaults to suite-first and the complete baseline.
|
|
58
|
+
|
|
59
|
+
### Routing to another skill
|
|
60
|
+
|
|
61
|
+
If the provider, suite, or module identity is unresolved, route to `cabloy-domain-planning` first. If the user wants code generation, route after planning to `cabloy-backend-scaffold` and/or `cabloy-frontend-scaffold`. If the user asks to synchronize a concrete Vona/Zova contract, route that implementation task to `cabloy-contract-loop`. This skill may record those handoff points but does not perform them automatically.
|
|
62
|
+
|
|
63
|
+
## Step 3: Resolve site strategy when applicable
|
|
64
|
+
|
|
65
|
+
When the scope includes a Web, Admin, or another user-facing site audience, resolve the high-level site strategy before collecting detailed topology or runtime facts. First use active-repository discovery to identify observed shared-site composition and independent-site conventions for the detected edition. Do not infer that a capability module, Web/Admin audience, or example suite requires a matching independent site.
|
|
66
|
+
|
|
67
|
+
Evaluate Web and Admin independently. Give a contextual recommendation based on the product audience, authority/experience differences, and source facts actually observed, then present these normal combinations as one single-select decision:
|
|
68
|
+
|
|
69
|
+
1. shared Web + shared Admin;
|
|
70
|
+
2. independent Web + shared Admin;
|
|
71
|
+
3. shared Web + independent Admin;
|
|
72
|
+
4. independent Web + independent Admin.
|
|
73
|
+
|
|
74
|
+
Keep the ordinary Other response path available for a custom combination, an audience with no site, or a deferred decision. State that choosing one combination accepts only this site-strategy input; it neither accepts an unrelated durable ADR nor confirms implementation facts.
|
|
75
|
+
|
|
76
|
+
At this stage, record each audience as a shared existing site, an intended independent suite-owned site, no site, or `TODO(confirm)`. A shared target is valid only when its owning site/composition boundary is observed and cited. An independent strategy is not permission to invent a site ID, public path, bundle, flavor, environment/configuration file, `SsrSite` registration, generated-output location, or development/build/REST command. Keep every unobserved identifier as `TODO(confirm from active source)` for a later frontend WBS/discovery scope.
|
|
77
|
+
|
|
78
|
+
If the user defers the strategy or needed identifiers, record the unresolved gate in ADR/SRS and mark only frontend/site implementation WBS work that depends on it as `blocked`. Keep runnable source-discovery, backend, known shared-site, and unrelated-audience work accurately `not-started` or at its current status.
|
|
79
|
+
|
|
80
|
+
## Step 4: Confirm the remaining planning inputs
|
|
81
|
+
|
|
82
|
+
Ask only for missing information, grouped into a compact clarification pass. Do not treat “make it comprehensive” as permission to invent business or security decisions.
|
|
83
|
+
|
|
84
|
+
Collect or confirm:
|
|
85
|
+
|
|
86
|
+
- **Identity:** business domain, `providerId`, `suiteName`, suite short name, stable planning slug, and whether the directory already exists;
|
|
87
|
+
- **Product:** problem, measurable outcomes, personas, primary journeys, and release goal;
|
|
88
|
+
- **Scope:** capabilities in scope, explicit exclusions/deferred work, business rules, and acceptance conditions;
|
|
89
|
+
- **Topology:** likely capability modules, existing module/persistence owners to reuse, audiences, selected shared/independent/deferred site strategy per audience, and any separate application boundary;
|
|
90
|
+
- **Technical constraints:** instance/tenant model, server-authoritative identity, authorization, data ownership, lifecycle/state, transactions, concurrency, idempotency, audit, privacy, integrations, and migration/version concerns where relevant;
|
|
91
|
+
- **Delivery:** dependency order, decision gates, implementation phases, release constraints, and contract-loop checkpoints;
|
|
92
|
+
- **Verification:** required test levels, database/flavor constraints, browser/SSR needs, evidence retention and redaction rules, and release gates;
|
|
93
|
+
- **Durable decisions:** selected site strategy and rationale, accepted boundaries, unresolved trade-offs, ADR candidates, and external-provider operations that may need runbooks.
|
|
94
|
+
|
|
95
|
+
Repository inspection may fill a fact only when the fact was actually observed. Label it as a confirmed current-source fact and cite its path. Keep observed facts separate from confirmed user inputs, proposed target contracts, and `TODO(confirm from active source)` identifiers.
|
|
96
|
+
|
|
97
|
+
## Step 5: Validate identity and protect existing records
|
|
98
|
+
|
|
99
|
+
For a suite-first domain, validate the existing naming convention before writing:
|
|
100
|
+
|
|
101
|
+
- short name is `{providerId}-{suiteName}`;
|
|
102
|
+
- `suiteName` uses lowercase English letters only and contains no additional hyphen;
|
|
103
|
+
- suite-owned source is intended to live under `vona/src/suite/<suite>/modules/` and `zova/src/suite/<suite>/modules/`;
|
|
104
|
+
- modules name business capabilities rather than vague technical placeholders.
|
|
105
|
+
|
|
106
|
+
Use the business suite short name as the planning directory when it is the natural scope. For a capability that belongs to an existing suite, use the existing stable suite/capability planning slug instead of creating a duplicate hierarchy.
|
|
107
|
+
|
|
108
|
+
If `repo-specs/<slug>/` exists, stop before writing and present the conflict. Offer to update the existing authority set, choose a new explicitly justified slug, or stop. Do not overwrite it merely because the user asked for a “fresh” version.
|
|
109
|
+
|
|
110
|
+
## Step 6: Present the confirmation gate
|
|
111
|
+
|
|
112
|
+
Before creating or replacing records, summarize and request explicit confirmation of:
|
|
113
|
+
|
|
114
|
+
- detected edition and source repository;
|
|
115
|
+
- `providerId`, `suiteName`, short name, and output path;
|
|
116
|
+
- intended suite-first Vona/Zova topology and module ownership;
|
|
117
|
+
- product outcome, personas, in-scope capabilities, and deferred scope;
|
|
118
|
+
- the Web/Admin/other-audience site strategy, recommendation/rationale, and every observed shared-site target;
|
|
119
|
+
- tenant, authorization, persistence, site/flavor, and privacy boundaries that are actually confirmed;
|
|
120
|
+
- exact independent-site identifiers that are observed and cited, plus identifiers retained as `TODO(confirm from active source)`;
|
|
121
|
+
- mandatory documents and any optional extensions, with a reason for each;
|
|
122
|
+
- unresolved decisions and explicit `TODO(confirm)` gates, including only the WBS branches blocked by a deferred site decision;
|
|
123
|
+
- the initial status policy: delivery is `not-started` unless implementation evidence already exists;
|
|
124
|
+
- the derived implementation charts: `implementation-gantt.svg` and `implementation-burndown.svg`, whose labels default to the language detected from `README.md`.
|
|
125
|
+
|
|
126
|
+
Do not treat silence as approval. Once confirmed, generate the records in authority order. Confirmation to generate records does not accept a durable ADR decision: retain its ADR as `Proposed` unless the user explicitly accepts that decision. A site-strategy selection confirms that one planning input only; it does not accept another durable boundary or convert a proposed site ADR into `Accepted`. If the user asks only for a draft, or has not explicitly accepted a durable boundary, retain unresolved decisions and do not imply acceptance.
|
|
127
|
+
|
|
128
|
+
## Step 7: Generate the mandatory document set
|
|
129
|
+
|
|
130
|
+
Create this baseline for a new long-lived suite:
|
|
131
|
+
|
|
132
|
+
```text
|
|
133
|
+
repo-specs/<suite-short-name>/
|
|
134
|
+
├── README.md
|
|
135
|
+
├── prd.md
|
|
136
|
+
├── srs.md
|
|
137
|
+
├── pdp-wbs.md
|
|
138
|
+
├── test-plan.md
|
|
139
|
+
├── progress.md
|
|
140
|
+
├── implementation-gantt.svg
|
|
141
|
+
├── implementation-burndown.svg
|
|
142
|
+
└── decisions/
|
|
143
|
+
└── 0001-<suite-boundary-slug>.md
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Use the templates and authority rules in `references/repo-specs-document-set.md`. In brief:
|
|
147
|
+
|
|
148
|
+
- `README.md` is the maintainer-facing index, reading order, baseline/topology summary, authority map, and related-record index;
|
|
149
|
+
- `prd.md` owns outcomes, personas, scope, journeys, business rules, product requirements, launch criteria, and `PRD-*` traceability;
|
|
150
|
+
- `srs.md` owns capability/persistence boundaries, data and tenant rules, authorization, state machines, transaction/concurrency/idempotency, API/DTO/OpenAPI, frontend/SSR ownership, nonfunctional contracts, and technical acceptance;
|
|
151
|
+
- `pdp-wbs.md` owns dependency-ordered phases, WBS tasks, completion checks, contract-loop checkpoints, and delivery traceability;
|
|
152
|
+
- `test-plan.md` owns risk priorities, test levels, `ATP-*` scenarios, fixtures, evidence format/redaction, procedures, and release gates;
|
|
153
|
+
- `progress.md` owns derived status, WBS execution rows, blockers, open decisions, evidence pointers, and next proof only;
|
|
154
|
+
- `implementation-gantt.svg` and `implementation-burndown.svg` are deterministic derived views, not authority. They consume `pdp-wbs.md`, `test-plan.md`, and `progress.md`; they must not introduce scope, dependencies, dates, estimates, evidence, or status. Generate them with `npm run spec:charts -- <suite>` and validate them with `npm run spec:charts:check -- <suite>`;
|
|
155
|
+
- chart language defaults to the language detected from `README.md` and applies consistently to visible labels, accessibility text, and metadata;
|
|
156
|
+
- `decisions/0001-*.md` owns the durable initial boundary decision, alternatives, consequences, and decision gates.
|
|
157
|
+
|
|
158
|
+
Create records in a way that makes every sibling link resolvable from the final directory. Use stable prefixes consistently, such as `PRD-<DOMAIN>-*`, `SRS-<DOMAIN>-*`, `WBS-<DOMAIN>-<PHASE>-*`, and `ATP-<DOMAIN>-*`. Choose a concise domain prefix and use it consistently across all matrices. Define every exact SRS ID used in generated planning records as one formal contract in `srs.md`, and every exact ATP ID as one scenario with a procedure in `test-plan.md`, before any downstream record references it. Wildcards and ranges are compact summaries of already-defined IDs; they never substitute for a formal definition.
|
|
159
|
+
|
|
160
|
+
## Step 8: Add optional records only when justified
|
|
161
|
+
|
|
162
|
+
Do not generate optional files because a reference suite contains them. Select them from explicit requirements:
|
|
163
|
+
|
|
164
|
+
- `presentation-contracts.md`: multiple audiences or Admin Resource scenes need durable information-area, field-boundary, or renderer decisions;
|
|
165
|
+
- `semantic-presentation-rollout.md`: presentation or metadata work is staged, serial, resumable, and needs handoff gates;
|
|
166
|
+
- `runbooks/<provider-or-operation>.md`: a real external provider, webhook, sandbox/live procedure, reconciliation, cutover, or incident operation is in scope;
|
|
167
|
+
- additional ADRs: a separate durable security, tenancy, ownership, site/flavor, migration, integration, or scope decision exists;
|
|
168
|
+
- `evidence/`: create only when actual ATP execution produces retained redacted evidence, not as an empty completeness signal.
|
|
169
|
+
|
|
170
|
+
Optional records remain subordinate to the PRD/SRS/WBS/test-plan authority appropriate to their content. A presentation matrix cannot authorize an API or redefine persistence; a runbook cannot redefine a payment state machine; a rollout record cannot replace the WBS or test plan.
|
|
171
|
+
|
|
172
|
+
## Step 9: Apply Cabloy-specific contract guardrails
|
|
173
|
+
|
|
174
|
+
While drafting, preserve these principles and tailor them to confirmed scope:
|
|
175
|
+
|
|
176
|
+
- `repo-specs/` is the product/business planning home; `repo-docs/` is public and agent-facing framework guidance; an established `repo-docs-internal/` home may hold cross-suite maintainer rationale; `.claude/skills/` is workflow behavior; do not assume or create an internal-docs home in an edition that lacks one;
|
|
177
|
+
- use suite-first ownership and distinguish new domain modules from reusable framework modules; do not duplicate an existing persistence or identity owner without a stated decision;
|
|
178
|
+
- treat the active Vona instance as the tenant by default; do not introduce a store, organization, or merchant entity unless the confirmed domain contract requires it;
|
|
179
|
+
- make identity, tenant scope, authorization, and ownership server-authoritative; menus, routes, browser filters, and UI visibility are not API authorization;
|
|
180
|
+
- specify transactions, concurrency, idempotency, audit, recovery, and historical snapshots when the business flow needs them;
|
|
181
|
+
- for fullstack work, record the Vona-to-Zova forward chain and Zova-to-Vona reverse-chain checkpoint, but hand actual generation/synchronization to `cabloy-contract-loop`;
|
|
182
|
+
- when Admin Resource and Web self-service consume one resource with different authority or audience, separate API/DTO contracts, server scope, state owners, and pages while retaining one domain/persistence boundary;
|
|
183
|
+
- independent site composition does not create an independent persistence, tenant, identity, authorization, or domain-rule authority; shared composition does not make generic CRUD, client-side admission, or identical audience contracts sufficient;
|
|
184
|
+
- an Admin-facing module alone does not authorize an independent Admin site, `SsrSite` registration, flavor, environment/configuration file, bundle, or root command;
|
|
185
|
+
- ask before choosing whether a persisted-field change increments `vonaModule.fileVersion`; do not silently invent migration history;
|
|
186
|
+
- use `TODO(confirm from active source)` and neutral placeholders for unobserved runtime facts; never copy site/flavor details, example-suite entities, routes, tests, CI links, or evidence into a new domain.
|
|
187
|
+
|
|
188
|
+
## Step 10: Quality-check the document set
|
|
189
|
+
|
|
190
|
+
Before reporting completion, verify:
|
|
191
|
+
|
|
192
|
+
1. each applicable Web, Admin, or other site audience has a stated shared, independent, no-site, or `TODO(confirm)` strategy; every shared target is cited, and every unknown independent-site runtime identifier remains `TODO(confirm from active source)`;
|
|
193
|
+
2. deferred site strategy or identifiers block only the dependent frontend/site WBS branch, while unrelated backend and actionable audience work remains accurately statused;
|
|
194
|
+
3. every in-scope `PRD-*` requirement maps to an `SRS-*` contract, a `WBS-*` task, and an `ATP-*` scenario;
|
|
195
|
+
4. every SRS contract maps backward to a product requirement and forward to planned delivery/proof;
|
|
196
|
+
5. every WBS item has dependencies, a bounded task, completion checks, and expected ATP coverage;
|
|
197
|
+
6. every ATP has traceability, procedure/scope, minimum proof, and evidence-retention rules;
|
|
198
|
+
7. `progress.md` contains only derived status and never introduces requirements or contracts;
|
|
199
|
+
8. no downstream file silently changes an upstream product, technical, or ADR decision;
|
|
200
|
+
9. every `verified` claim has observed revision, environment, exact command/procedure, result, and redacted evidence location;
|
|
201
|
+
10. initial rows remain `not-started`, `deferred`, or explicitly `blocked` unless existing observed evidence was intentionally carried forward;
|
|
202
|
+
11. every exact `PRD-*`, `SRS-*`, `WBS-*`, and `ATP-*` reference in the planning authority set resolves to exactly one formal definition in its owning document; ranges and wildcards are aggregation notation only and cannot satisfy this check;
|
|
203
|
+
12. README language distinguishes observed facts, confirmed inputs, proposed targets, and `TODO(confirm)` decisions, and does not upgrade a `Proposed` ADR into a confirmed or accepted durable boundary;
|
|
204
|
+
13. `npm run spec:charts:check -- <suite>` passes, proving every WBS task has one progress row, statuses and dependencies reconcile, ATP references resolve, and both generated SVGs are current;
|
|
205
|
+
14. chart language and accessibility/metadata text follow the README language policy;
|
|
206
|
+
15. local Markdown links and referenced paths resolve;
|
|
207
|
+
16. prospective commands are real commands discovered in the active repository, or clearly marked as commands to confirm later.
|
|
208
|
+
|
|
209
|
+
If the exact-ID, status-consistency, or chart check fails, correct the authoritative planning records or regenerate the derived artifacts and rerun it before reporting generation complete. This is a static planning check, not ATP execution: do not create evidence or claim `verified` for it.
|
|
210
|
+
|
|
211
|
+
After creating or changing `pdp-wbs.md`, `test-plan.md`, or `progress.md`, regenerate both derived views with `npm run spec:charts -- <suite>` and then run `npm run spec:charts:check -- <suite>`. A chart change never authorizes a planning or status change. If a later edit occurs outside this workflow, the check command is the source of truth for detecting stale views.
|
|
212
|
+
|
|
213
|
+
Do not run `npm run init`, reset a database, scaffold code, or execute deployment/provider operations as an automatic consequence of writing planning records. Do not report those activities as evidence.
|
|
214
|
+
|
|
215
|
+
## Step 11: Handoff and response
|
|
216
|
+
|
|
217
|
+
Report:
|
|
218
|
+
|
|
219
|
+
- detected edition and output directory;
|
|
220
|
+
- files created or updated;
|
|
221
|
+
- optional files intentionally omitted and why;
|
|
222
|
+
- unresolved decisions and the next confirmation needed;
|
|
223
|
+
- initial status and evidence limitations;
|
|
224
|
+
- recommended next workflow (`cabloy-domain-planning`, backend/frontend scaffold, or `cabloy-contract-loop`);
|
|
225
|
+
- generated or refreshed `implementation-gantt.svg` and `implementation-burndown.svg`, selected README language, and the result of `npm run spec:charts:check -- <suite>`.
|
|
226
|
+
|
|
227
|
+
Keep the result practical. A good spec set gives the next implementer a shared authority map, not a fictional completion report.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "cabloy-spec-generation",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "I want to create the complete repo-specs set for a new CRM suite in this Cabloy repository. The suite name and provider prefix are not decided yet. Please guide me through the right process and tell me what you need before writing files.",
|
|
7
|
+
"expected_output": "Detects the edition and repository context, routes unresolved suite naming to cabloy-domain-planning, asks for grouped missing inputs, and does not invent CRM requirements or create a fictional document set.",
|
|
8
|
+
"files": []
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": 2,
|
|
12
|
+
"prompt": "The Cabloy Basic repository is confirmed. Create a planning baseline for suite a-training (providerId a, suiteName training). It will include student, course, and attendance capabilities for authenticated Web users and tenant Admin operators. Define the initial scope as course browsing, enrollment, attendance recording, and operator management; defer payments and certificates. Produce the repository-native PRD, SRS, PDP/WBS, test plan, progress register, README authority map, and initial suite-boundary ADR, but do not claim implementation or test evidence.",
|
|
13
|
+
"expected_output": "Uses repo-specs/a-training with the seven mandatory core records, suite-first Vona/Zova topology, stable PRD/SRS/WBS/ATP identifiers and traceability, explicit deferred scope, server-side tenant/authorization and contract-loop boundaries, and not-started progress without fabricated evidence.",
|
|
14
|
+
"files": []
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": 3,
|
|
18
|
+
"prompt": "Plan a new Cabloy Start business suite with an Admin application, several resource scenes that need different field groupings and renderers, and a real payment provider with sandbox/live webhooks and reconciliation. The suite identity and exact Start flavor/site names are confirmed in the active Start repo. Which spec files should be generated, and what must remain conditional or evidence-backed?",
|
|
19
|
+
"expected_output": "Keeps the shared core set, adds presentation-contracts and a provider runbook only because the supplied scope justifies them, uses Start-specific facts from the active repo rather than Basic assumptions, explains when a rollout record or additional ADR is warranted, and requires redacted observed evidence before verified status.",
|
|
20
|
+
"files": []
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": 4,
|
|
24
|
+
"prompt": "The design is complete, so write all suite specs and mark every WBS phase verified. There is no test run yet. Please make the progress document look release-ready.",
|
|
25
|
+
"expected_output": "Refuses to claim verified status without retained ATP evidence, initializes progress as not-started or otherwise accurate, explains the revision/environment/procedure/result/redaction requirements, and does not create empty evidence records.",
|
|
26
|
+
"files": []
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"id": 5,
|
|
30
|
+
"prompt": "Our existing suite PRD says the first release is one tenant and no marketplace. I want to add an OpenSpec directory and update the WBS directly to support multiple merchants. How should the repository planning records change?",
|
|
31
|
+
"expected_output": "Treats the existing PRD and repository-native records as authoritative, rejects a parallel OpenSpec authority absent a new repository-level decision, requires the product/technical/ADR authority to change first, and then propagates updates to WBS, ATP, progress, and evidence assumptions.",
|
|
32
|
+
"files": []
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": 6,
|
|
36
|
+
"prompt": "Create a complete planning baseline for a new inventory suite. In the WBS, refer to SRS-INV-STOCK-01 and ATP-INV-CON-01 even if the SRS and test plan only mention those IDs in a matrix or generic prose. Do not add implementation or evidence.",
|
|
37
|
+
"expected_output": "Defines every exact SRS ID used downstream as an explicit SRS contract and every exact ATP ID as a test-plan scenario with traceability, setup, procedure, expected result, and minimum proof. It treats wildcard/range/matrix mentions as aggregation notation rather than definitions, runs a static planning-authority ID audit before completion, and does not create evidence for that audit.",
|
|
38
|
+
"files": []
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": 7,
|
|
42
|
+
"prompt": "Draft a new suite baseline with an unresolved tenancy boundary. Keep ADR 0001 Proposed, but title the README section Confirmed Product and Technical Baseline so it reads more decisively.",
|
|
43
|
+
"expected_output": "Keeps ADR 0001 Proposed absent explicit acceptance and uses neutral README baseline wording that distinguishes observed facts, confirmed inputs, proposed targets, and TODO(confirm) decisions. It refuses to let README language upgrade the proposed durable boundary, keeps delivery status accurate, and does not fabricate evidence.",
|
|
44
|
+
"files": []
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": 8,
|
|
48
|
+
"prompt": "Generate a proposed suite baseline with an optional payment-provider runbook. The user confirms the planning inputs and output path but has not accepted the provider boundary ADR. The runbook traceability table names ATP-PAY-WEBHOOK-01, but the test plan does not define that scenario.",
|
|
49
|
+
"expected_output": "Treats confirmation to generate records as distinct from accepting the ADR, retains the provider boundary as Proposed, and uses neutral README wording. It scans the optional runbook as a generated non-evidence record, rejects the dangling ATP-PAY-WEBHOOK-01 reference until a formal test-plan scenario exists, and does not create execution evidence.",
|
|
50
|
+
"files": []
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": 9,
|
|
54
|
+
"prompt": "Create a new long-lived suite baseline and keep its README in Chinese. Generate the complete records without implementation evidence.",
|
|
55
|
+
"expected_output": "Creates both implementation-gantt.svg and implementation-burndown.svg, initializes statuses accurately, uses the README language consistently in chart labels/accessibility/metadata, and does not fabricate dates, estimates, history, or verified evidence.",
|
|
56
|
+
"files": []
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"id": 10,
|
|
60
|
+
"prompt": "A later WBS dependency, ATP reference, or progress status changes after the charts were generated. Update the affected authority/status record and finish without regenerating the SVGs.",
|
|
61
|
+
"expected_output": "Regenerates both derived charts with npm run spec:charts -- <suite>, runs npm run spec:charts:check -- <suite>, and treats stale or dangling chart references as a static failure rather than changing authority to make the chart pass.",
|
|
62
|
+
"files": []
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": 11,
|
|
66
|
+
"prompt": "Plan a new long-lived suite with a reader-facing Web experience and staff Admin operations. The active repository has not yet told us whether either audience should use a shared site or an independent suite-owned site. Do not guess flavor names or commands.",
|
|
67
|
+
"expected_output": "Performs edition-aware source discovery before choosing topology, evaluates Web and Admin independently, makes a contextual recommendation, and presents the four normal shared/independent Web/Admin combinations in one single-select decision with the ordinary Other path available for a custom strategy or deferral. It requires a cited observed shared target, keeps unobserved site/flavor/env/SsrSite/command identifiers as TODO(confirm from active source), and does not fabricate Basic or Start facts.",
|
|
68
|
+
"files": []
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"id": 12,
|
|
72
|
+
"prompt": "For the confirmed Cabloy Basic suite strategy, choose an independent reader Web site and integration into an observed shared Admin site. The independent reader site is intended, but active source has not yet confirmed its site ID, public path, bundle, flavor, environment/configuration, SsrSite registration, or paired commands. Generate the planning records only.",
|
|
73
|
+
"expected_output": "Propagates the mixed strategy through the authority chain: PRD describes audience/channel scope, SRS owns topology and audience-specific contracts, ADR records the durable boundary subject to its status, WBS separates independent-Web delivery from shared-Admin integration, test-plan defines only source-confirmed proof, and progress remains derived. It preserves every missing independent identifier as TODO(confirm from active source), cites the shared Admin target, avoids creating source/config/scripts, and does not imply separate persistence, tenancy, identity, or authorization ownership.",
|
|
74
|
+
"files": []
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": 13,
|
|
78
|
+
"prompt": "Create a suite baseline where the product needs backend catalogue work plus future Web and Admin experiences, but the user defers the Web/Admin site strategy and all site identifiers. Keep backend planning available.",
|
|
79
|
+
"expected_output": "Retains the site strategy as a governing ADR/SRS TODO(confirm), marks only dependent frontend/site implementation WBS work blocked, and keeps backend plus any runnable source-discovery work accurately not-started or unchanged. It does not globally block delivery, invent site/flavor/env/configuration/build facts, create implementation evidence, or mark planning/source discovery as verified.",
|
|
80
|
+
"files": []
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
}
|