@starci/skills 1.1.0
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/INDEX.md +74 -0
- package/INDEX.vi.md +75 -0
- package/README.md +44 -0
- package/README.vi.md +43 -0
- package/SKILL.md +135 -0
- package/SKILL.vi.md +128 -0
- package/alias/INDEX.md +104 -0
- package/alias/INDEX.vi.md +104 -0
- package/alias/alias.json +297 -0
- package/bin/starci-skills.mjs +219 -0
- package/knowledge/INDEX.md +22 -0
- package/knowledge/INDEX.vi.md +22 -0
- package/knowledge/grammars/starci/DNA.md +146 -0
- package/knowledge/grammars/starci/DNA.vi.md +146 -0
- package/knowledge/grammars/starci/INDEX.md +25 -0
- package/knowledge/grammars/starci/INDEX.vi.md +25 -0
- package/knowledge/grammars/starci/family.md +50 -0
- package/knowledge/grammars/starci/family.vi.md +50 -0
- package/knowledge/grammars/starci/idioms.md +120 -0
- package/knowledge/grammars/starci/idioms.vi.md +121 -0
- package/knowledge/grammars/starci/playbook.md +36 -0
- package/knowledge/grammars/starci/playbook.vi.md +35 -0
- package/knowledge/patterns/be/INDEX.md +29 -0
- package/knowledge/patterns/be/INDEX.vi.md +29 -0
- package/knowledge/patterns/be/comment.md +80 -0
- package/knowledge/patterns/be/comment.vi.md +80 -0
- package/knowledge/patterns/be/error.md +86 -0
- package/knowledge/patterns/be/error.vi.md +86 -0
- package/knowledge/patterns/be/folder.md +87 -0
- package/knowledge/patterns/be/folder.vi.md +86 -0
- package/knowledge/patterns/be/function.md +80 -0
- package/knowledge/patterns/be/function.vi.md +80 -0
- package/knowledge/patterns/be/imports.md +79 -0
- package/knowledge/patterns/be/imports.vi.md +79 -0
- package/knowledge/patterns/be/naming.md +87 -0
- package/knowledge/patterns/be/naming.vi.md +87 -0
- package/knowledge/patterns/be/test.md +79 -0
- package/knowledge/patterns/be/test.vi.md +79 -0
- package/knowledge/patterns/be/typing.md +73 -0
- package/knowledge/patterns/be/typing.vi.md +73 -0
- package/knowledge/patterns/fe/INDEX.md +29 -0
- package/knowledge/patterns/fe/INDEX.vi.md +29 -0
- package/knowledge/patterns/fe/comment.md +70 -0
- package/knowledge/patterns/fe/comment.vi.md +70 -0
- package/knowledge/patterns/fe/error.md +61 -0
- package/knowledge/patterns/fe/error.vi.md +61 -0
- package/knowledge/patterns/fe/folder.md +98 -0
- package/knowledge/patterns/fe/folder.vi.md +95 -0
- package/knowledge/patterns/fe/function.md +70 -0
- package/knowledge/patterns/fe/function.vi.md +70 -0
- package/knowledge/patterns/fe/imports.md +87 -0
- package/knowledge/patterns/fe/imports.vi.md +87 -0
- package/knowledge/patterns/fe/naming.md +77 -0
- package/knowledge/patterns/fe/naming.vi.md +77 -0
- package/knowledge/patterns/fe/test.md +73 -0
- package/knowledge/patterns/fe/test.vi.md +73 -0
- package/knowledge/patterns/fe/typing.md +67 -0
- package/knowledge/patterns/fe/typing.vi.md +67 -0
- package/knowledge/ui/INDEX.md +101 -0
- package/knowledge/ui/INDEX.vi.md +101 -0
- package/knowledge/ui/composition/INDEX.md +60 -0
- package/knowledge/ui/composition/INDEX.vi.md +63 -0
- package/knowledge/ui/composition/accent.md +73 -0
- package/knowledge/ui/composition/accent.vi.md +74 -0
- package/knowledge/ui/composition/action.md +55 -0
- package/knowledge/ui/composition/action.vi.md +56 -0
- package/knowledge/ui/composition/coverage.md +37 -0
- package/knowledge/ui/composition/coverage.vi.md +37 -0
- package/knowledge/ui/composition/cta.md +79 -0
- package/knowledge/ui/composition/cta.vi.md +79 -0
- package/knowledge/ui/composition/feedback.md +55 -0
- package/knowledge/ui/composition/feedback.vi.md +56 -0
- package/knowledge/ui/composition/hierarchy.md +83 -0
- package/knowledge/ui/composition/hierarchy.vi.md +82 -0
- package/knowledge/ui/composition/layout.md +91 -0
- package/knowledge/ui/composition/layout.vi.md +93 -0
- package/knowledge/ui/composition/responsive.md +67 -0
- package/knowledge/ui/composition/responsive.vi.md +67 -0
- package/knowledge/ui/composition/state.md +105 -0
- package/knowledge/ui/composition/state.vi.md +106 -0
- package/knowledge/ui/presentation/INDEX.md +94 -0
- package/knowledge/ui/presentation/INDEX.vi.md +69 -0
- package/knowledge/ui/presentation/boundary.md +170 -0
- package/knowledge/ui/presentation/boundary.vi.md +169 -0
- package/knowledge/ui/presentation/font.md +155 -0
- package/knowledge/ui/presentation/font.vi.md +156 -0
- package/knowledge/ui/presentation/gap.md +181 -0
- package/knowledge/ui/presentation/gap.vi.md +181 -0
- package/knowledge/ui/presentation/margin.md +168 -0
- package/knowledge/ui/presentation/margin.vi.md +171 -0
- package/knowledge/ui/presentation/measure.md +174 -0
- package/knowledge/ui/presentation/measure.vi.md +178 -0
- package/knowledge/ui/presentation/overflow.md +142 -0
- package/knowledge/ui/presentation/overflow.vi.md +142 -0
- package/knowledge/ui/presentation/padding.md +293 -0
- package/knowledge/ui/presentation/padding.vi.md +292 -0
- package/knowledge/ui/presentation/surface.md +166 -0
- package/knowledge/ui/presentation/surface.vi.md +166 -0
- package/knowledge/ui/presentation/text-flow.md +123 -0
- package/knowledge/ui/presentation/text-flow.vi.md +123 -0
- package/knowledge/ui/presentation/tone.md +114 -0
- package/knowledge/ui/presentation/tone.vi.md +113 -0
- package/knowledge/ui/proof/INDEX.md +55 -0
- package/knowledge/ui/proof/INDEX.vi.md +55 -0
- package/knowledge/ui/proof/accessibility.md +67 -0
- package/knowledge/ui/proof/accessibility.vi.md +68 -0
- package/knowledge/ui/proof/contrast.md +58 -0
- package/knowledge/ui/proof/contrast.vi.md +57 -0
- package/knowledge/ui/proof/focus.md +76 -0
- package/knowledge/ui/proof/focus.vi.md +76 -0
- package/knowledge/ui/proof/motion.md +63 -0
- package/knowledge/ui/proof/motion.vi.md +64 -0
- package/knowledge/ui/proof/render-truth.md +63 -0
- package/knowledge/ui/proof/render-truth.vi.md +63 -0
- package/operators/INDEX.md +199 -0
- package/operators/INDEX.vi.md +199 -0
- package/operators/architecture-decide/errors.json +115 -0
- package/operators/architecture-decide/operator.json +20 -0
- package/operators/architecture-decide/operator.md +133 -0
- package/operators/architecture-decide/operator.vi.md +130 -0
- package/operators/architecture-decide/self-test.mjs +221 -0
- package/operators/architecture-decide/validate.mjs +112 -0
- package/operators/backend-source-apply/errors.json +66 -0
- package/operators/backend-source-apply/operator.json +20 -0
- package/operators/backend-source-apply/operator.md +189 -0
- package/operators/backend-source-apply/operator.vi.md +185 -0
- package/operators/backend-source-apply/self-test.mjs +257 -0
- package/operators/backend-source-apply/validate.mjs +240 -0
- package/operators/business-decide/errors.json +78 -0
- package/operators/business-decide/operator.json +20 -0
- package/operators/business-decide/operator.md +176 -0
- package/operators/business-decide/operator.vi.md +174 -0
- package/operators/business-decide/self-test.mjs +225 -0
- package/operators/business-decide/validate.mjs +277 -0
- package/operators/content-generate/errors.json +106 -0
- package/operators/content-generate/operator.json +21 -0
- package/operators/content-generate/operator.md +155 -0
- package/operators/content-generate/operator.vi.md +155 -0
- package/operators/content-generate/self-test.mjs +288 -0
- package/operators/content-generate/validate.mjs +196 -0
- package/operators/errors.json +178 -0
- package/operators/frontend-direction-decide/errors.json +135 -0
- package/operators/frontend-direction-decide/operator.json +21 -0
- package/operators/frontend-direction-decide/operator.md +167 -0
- package/operators/frontend-direction-decide/operator.vi.md +167 -0
- package/operators/frontend-direction-decide/self-test.mjs +226 -0
- package/operators/frontend-direction-decide/validate.mjs +146 -0
- package/operators/frontend-presentation-resolve/errors.json +42 -0
- package/operators/frontend-presentation-resolve/operator.json +19 -0
- package/operators/frontend-presentation-resolve/operator.md +142 -0
- package/operators/frontend-presentation-resolve/operator.vi.md +140 -0
- package/operators/frontend-presentation-resolve/self-test.mjs +163 -0
- package/operators/frontend-presentation-resolve/validate.mjs +143 -0
- package/operators/frontend-source-apply/errors.json +30 -0
- package/operators/frontend-source-apply/operator.json +20 -0
- package/operators/frontend-source-apply/operator.md +127 -0
- package/operators/frontend-source-apply/operator.vi.md +126 -0
- package/operators/frontend-source-apply/self-test.mjs +214 -0
- package/operators/frontend-source-apply/validate.mjs +133 -0
- package/operators/frontend-surface-audit/errors.json +5 -0
- package/operators/frontend-surface-audit/operator.json +22 -0
- package/operators/frontend-surface-audit/operator.md +121 -0
- package/operators/frontend-surface-audit/operator.vi.md +121 -0
- package/operators/frontend-surface-audit/self-test.mjs +185 -0
- package/operators/frontend-surface-audit/validate.mjs +127 -0
- package/operators/git-publish/errors.json +54 -0
- package/operators/git-publish/operator.json +20 -0
- package/operators/git-publish/operator.md +180 -0
- package/operators/git-publish/operator.vi.md +178 -0
- package/operators/git-publish/self-test.mjs +177 -0
- package/operators/git-publish/validate.mjs +106 -0
- package/operators/platform-operate/errors.json +90 -0
- package/operators/platform-operate/operator.json +22 -0
- package/operators/platform-operate/operator.md +162 -0
- package/operators/platform-operate/operator.vi.md +160 -0
- package/operators/platform-operate/self-test.mjs +202 -0
- package/operators/platform-operate/validate.mjs +193 -0
- package/operators/quality-verify/errors.json +54 -0
- package/operators/quality-verify/operator.json +20 -0
- package/operators/quality-verify/operator.md +185 -0
- package/operators/quality-verify/operator.vi.md +177 -0
- package/operators/quality-verify/self-test.mjs +210 -0
- package/operators/quality-verify/validate.mjs +197 -0
- package/operators/release-deploy/errors.json +158 -0
- package/operators/release-deploy/operator.json +23 -0
- package/operators/release-deploy/operator.md +183 -0
- package/operators/release-deploy/operator.vi.md +181 -0
- package/operators/release-deploy/self-test.mjs +235 -0
- package/operators/release-deploy/validate.mjs +129 -0
- package/operators/uat-verify/errors.json +78 -0
- package/operators/uat-verify/operator.json +25 -0
- package/operators/uat-verify/operator.md +162 -0
- package/operators/uat-verify/operator.vi.md +161 -0
- package/operators/uat-verify/self-test.mjs +270 -0
- package/operators/uat-verify/validate.mjs +202 -0
- package/operators/workspace-bind/errors.json +90 -0
- package/operators/workspace-bind/operator.json +21 -0
- package/operators/workspace-bind/operator.md +148 -0
- package/operators/workspace-bind/operator.vi.md +148 -0
- package/operators/workspace-bind/self-test.mjs +205 -0
- package/operators/workspace-bind/validate.mjs +152 -0
- package/package.json +50 -0
- package/readiness/initialization/workspaces/commit-policy.json +91 -0
- package/readiness/initialization/workspaces/config.schema.json +35 -0
- package/readiness/initialization/workspaces/device-state.schema.json +54 -0
- package/readiness/initialization/workspaces/local-route.schema.json +206 -0
- package/readiness/initialization/workspaces/portable-route.schema.json +200 -0
- package/resources/INDEX.md +96 -0
- package/resources/INDEX.vi.md +99 -0
- package/resources/agents/profiles/claude.json +131 -0
- package/resources/agents/profiles/openai.json +131 -0
- package/resources/orchestrator.json +71 -0
- package/resources/tools.json +85 -0
- package/routing.json +272 -0
- package/scripts/alias-registry.mjs +31 -0
- package/scripts/device-state.mjs +497 -0
- package/scripts/device-state.spec.mjs +18 -0
- package/scripts/errors-registry.mjs +68 -0
- package/scripts/generate-alias-doc.mjs +66 -0
- package/scripts/generate-grammar-dna.mjs +387 -0
- package/scripts/generate-operators-index.mjs +95 -0
- package/scripts/generate-presentation-owned.mjs +681 -0
- package/scripts/install-cli.spec.mjs +74 -0
- package/scripts/json-schema.mjs +94 -0
- package/scripts/operator-md.mjs +96 -0
- package/scripts/run-operator-self-tests.mjs +36 -0
- package/scripts/validate-alias.mjs +165 -0
- package/scripts/validate-defaults.mjs +72 -0
- package/scripts/validate-knowledge-citations.mjs +90 -0
- package/scripts/validate-operator.mjs +125 -0
- package/scripts/validate-request.mjs +80 -0
- package/scripts/validate-resources.mjs +117 -0
- package/scripts/validate-response.mjs +141 -0
- package/scripts/validate-routing.mjs +91 -0
- package/scripts/validate-step.mjs +50 -0
- package/scripts/validate-templates.mjs +226 -0
- package/scripts/validate-templates.spec.mjs +144 -0
- package/scripts/validate-workflows.mjs +106 -0
- package/scripts/workspace-portable.mjs +389 -0
- package/scripts/workspace-portable.spec.mjs +246 -0
- package/templates/README.md +47 -0
- package/templates/README.vi.md +45 -0
- package/templates/changes.example.md +27 -0
- package/templates/grammars.template.md +34 -0
- package/templates/kinds/architecture-decision.contract.json +14 -0
- package/templates/kinds/architecture-decision.skeleton.md +52 -0
- package/templates/kinds/backend-source-application.contract.json +10 -0
- package/templates/kinds/backend-source-application.skeleton.md +34 -0
- package/templates/kinds/business-promise-authority.contract.json +13 -0
- package/templates/kinds/business-promise-authority.skeleton.md +67 -0
- package/templates/kinds/capture.schema.json +33 -0
- package/templates/kinds/changes.contract.json +10 -0
- package/templates/kinds/changes.skeleton.md +26 -0
- package/templates/kinds/checks.schema.json +44 -0
- package/templates/kinds/claims.schema.json +165 -0
- package/templates/kinds/conformance.schema.json +15 -0
- package/templates/kinds/content-brief.contract.json +12 -0
- package/templates/kinds/content-brief.skeleton.md +45 -0
- package/templates/kinds/content-generation-receipt.contract.json +11 -0
- package/templates/kinds/content-generation-receipt.skeleton.md +40 -0
- package/templates/kinds/content-review.contract.json +11 -0
- package/templates/kinds/content-review.skeleton.md +45 -0
- package/templates/kinds/contract.schema.json +28 -0
- package/templates/kinds/coverage-matrix.schema.json +86 -0
- package/templates/kinds/coverage.schema.json +62 -0
- package/templates/kinds/current-state.schema.json +40 -0
- package/templates/kinds/delta.schema.json +95 -0
- package/templates/kinds/e2e.schema.json +63 -0
- package/templates/kinds/frontend-direction-decision.contract.json +93 -0
- package/templates/kinds/frontend-direction-decision.skeleton.md +68 -0
- package/templates/kinds/frontend-presentation-resolution.contract.json +11 -0
- package/templates/kinds/frontend-presentation-resolution.skeleton.md +32 -0
- package/templates/kinds/frontend-source-application.contract.json +10 -0
- package/templates/kinds/frontend-source-application.skeleton.md +30 -0
- package/templates/kinds/frontend-surface-audit.contract.json +52 -0
- package/templates/kinds/frontend-surface-audit.skeleton.md +32 -0
- package/templates/kinds/gate-result.schema.json +64 -0
- package/templates/kinds/git-publication.contract.json +82 -0
- package/templates/kinds/git-publication.skeleton.md +61 -0
- package/templates/kinds/independent-critique.contract.json +9 -0
- package/templates/kinds/independent-critique.skeleton.md +28 -0
- package/templates/kinds/inventory.schema.json +35 -0
- package/templates/kinds/model.schema.json +99 -0
- package/templates/kinds/mutations.schema.json +65 -0
- package/templates/kinds/platform-operation-receipt.contract.json +76 -0
- package/templates/kinds/platform-operation-receipt.skeleton.md +54 -0
- package/templates/kinds/probes.schema.json +130 -0
- package/templates/kinds/proof.schema.json +17 -0
- package/templates/kinds/quality-verification.contract.json +87 -0
- package/templates/kinds/quality-verification.skeleton.md +58 -0
- package/templates/kinds/release-deployment.contract.json +85 -0
- package/templates/kinds/release-deployment.skeleton.md +67 -0
- package/templates/kinds/route.schema.json +293 -0
- package/templates/kinds/stack-model.schema.json +90 -0
- package/templates/kinds/uat-capture.schema.json +35 -0
- package/templates/kinds/uat-flow-verification.contract.json +11 -0
- package/templates/kinds/uat-flow-verification.skeleton.md +47 -0
- package/templates/kinds/uat-snapshot.schema.json +96 -0
- package/templates/kinds/uat-verdicts.schema.json +41 -0
- package/templates/kinds/ui-coverage.schema.json +77 -0
- package/templates/kinds/verdicts.schema.json +39 -0
- package/templates/kinds/workspace-route-binding.contract.json +12 -0
- package/templates/kinds/workspace-route-binding.skeleton.md +60 -0
- package/templates/kinds/writes.schema.json +37 -0
- package/templates/operator.template.md +73 -0
- package/templates/patterns.template.md +31 -0
- package/templates/step/request.schema.json +42 -0
- package/templates/step/response.schema.json +144 -0
- package/templates/ui-composition.template.md +36 -0
- package/templates/ui-presentation.template.md +57 -0
- package/templates/ui-proof.template.md +34 -0
- package/workflows/README.md +37 -0
- package/workflows/README.vi.md +37 -0
- package/workflows/backend-feature.json +59 -0
- package/workflows/content-unit.json +19 -0
- package/workflows/frontend-new-surface.json +81 -0
- package/workflows/frontend-reconstruct.json +67 -0
- package/workflows/frontend-refine.json +67 -0
- package/workflows/frontend-with-uat.json +78 -0
- package/workflows/full-feature.json +104 -0
- package/workflows/release.json +29 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Workflows
|
|
2
|
+
|
|
3
|
+
A workflow is a pre-composed chain of operators: an ordered list of **steps**, each step a list of
|
|
4
|
+
**branches** that run in parallel (at most three), with optional **loops** back to an earlier step and
|
|
5
|
+
**presets** for a branch's Requirements. The files here are examples, not the only chains allowed.
|
|
6
|
+
|
|
7
|
+
How the entry uses them:
|
|
8
|
+
|
|
9
|
+
1. Read the `when` of every example. If the request matches one, run that chain; its presets fill
|
|
10
|
+
`request.json` and the person is asked only for fields with no default.
|
|
11
|
+
2. If none matches, compose a chain from the operators' `## Next` tables and `routing.json`, under the
|
|
12
|
+
same rules `scripts/validate-workflows.mjs` enforces on these files:
|
|
13
|
+
- every branch names a real operator and presets only fields that operator declares;
|
|
14
|
+
- every required Input of a branch is produced by an earlier step;
|
|
15
|
+
- branches of one step share no write alias (two operators may not write the same checkout or
|
|
16
|
+
root at once; `frontend.surface.audit` fans out by matrix entry because it writes nothing);
|
|
17
|
+
- a loop goes back to an earlier step and carries `maxRounds`;
|
|
18
|
+
- the chain ends at `git.publish`, `release.deploy`, or `user`.
|
|
19
|
+
3. A composed chain that would be useful again becomes a new file here, with its `when`.
|
|
20
|
+
|
|
21
|
+
Every source-writing branch commits on `session/<sessionId>`; `git.publish` merges it. A blocked branch
|
|
22
|
+
re-enters as a new step; a loop counts toward the operator's own `maxRounds`.
|
|
23
|
+
|
|
24
|
+
| Workflow | When | Steps | Parallel | Ends |
|
|
25
|
+
| --- | --- | --- | --- | --- |
|
|
26
|
+
| `frontend-new-surface` | a surface that does not exist yet (`new`) | bind ×2 → business → direction → resolve → apply → audit → quality → publish | audit by matrix | `git.publish` |
|
|
27
|
+
| `frontend-reconstruct` | rebuild an existing surface, business facts kept | bind → direction → resolve → apply → audit → quality → publish | audit by matrix | `git.publish` |
|
|
28
|
+
| `frontend-refine` | repair inside an approved structure | bind → direction → resolve → apply → audit → quality → publish | audit by matrix | `git.publish` |
|
|
29
|
+
| `backend-feature` | a backend contract for one feature | bind → business (model) → architecture → backend apply → quality → business (reconcile) → publish | — | `git.publish` |
|
|
30
|
+
| `full-feature` | backend and a new frontend surface together | bind ×2 → business → architecture → [backend apply ∥ direction] → [quality ∥ resolve] → apply → audit → quality → business (reconcile) → publish | two steps of two, audit by matrix | `git.publish` |
|
|
31
|
+
| `frontend-with-uat` | a frontend change a person asked to walk through | bind ×2 → … audit → quality → uat → publish | audit by matrix | `git.publish` |
|
|
32
|
+
| `release` | a published head must reach production | bind → quality → release | — | `release.deploy` |
|
|
33
|
+
| `content-unit` | one curriculum unit end to end | content.generate (review exchange inside) | — | `user` |
|
|
34
|
+
|
|
35
|
+
File shape (`schemaVersion` 9): `id` equals the file name; `when` has `en` and `vi`; `chain` is an
|
|
36
|
+
array of steps, each an array of `{ operator, requirements?, fanout?: "matrix", maxParallel?: 1..3 }`;
|
|
37
|
+
`loops` is an array of `{ from, to, when, maxRounds }`; `ends` is `user` or an operator of the last step.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Workflow
|
|
2
|
+
|
|
3
|
+
Một workflow là một chuỗi operator ghép sẵn: danh sách **bậc** theo thứ tự, mỗi bậc là danh sách
|
|
4
|
+
**nhánh** chạy song song (tối đa ba), kèm **vòng lặp** quay về một bậc trước và **preset** cho Yêu cầu
|
|
5
|
+
của từng nhánh. Các file ở đây là ví dụ, không phải những chuỗi duy nhất được phép.
|
|
6
|
+
|
|
7
|
+
Cửa vào dùng chúng như sau:
|
|
8
|
+
|
|
9
|
+
1. Đọc `when` của mọi ví dụ. Request khớp ví dụ nào thì chạy chuỗi đó; preset điền vào
|
|
10
|
+
`request.json`, người chỉ bị hỏi những field không có mặc định.
|
|
11
|
+
2. Không khớp cái nào thì tự ghép chuỗi từ bảng `## Next` của các operator và `routing.json`, theo
|
|
12
|
+
đúng luật mà `scripts/validate-workflows.mjs` ép lên các file này:
|
|
13
|
+
- mỗi nhánh gọi tên một operator có thật và chỉ preset field mà operator đó khai;
|
|
14
|
+
- mọi Input bắt buộc của một nhánh phải do một bậc trước sinh ra;
|
|
15
|
+
- các nhánh cùng bậc không chung alias ghi (hai operator không được cùng ghi một checkout hay một
|
|
16
|
+
root; `frontend.surface.audit` toả theo entry của matrix vì nó không ghi gì);
|
|
17
|
+
- vòng lặp quay về bậc trước và mang `maxRounds`;
|
|
18
|
+
- chuỗi kết thúc ở `git.publish`, `release.deploy` hoặc `user`.
|
|
19
|
+
3. Chuỗi tự ghép mà còn dùng lại được thì thành một file mới ở đây, kèm `when`.
|
|
20
|
+
|
|
21
|
+
Mọi nhánh ghi source đều commit trên `session/<sessionId>`; `git.publish` merge nó. Nhánh bị chặn vào
|
|
22
|
+
lại thành bậc mới; vòng lặp tính vào `maxRounds` của chính operator.
|
|
23
|
+
|
|
24
|
+
| Workflow | Khi | Các bậc | Song song | Kết thúc |
|
|
25
|
+
| --- | --- | --- | --- | --- |
|
|
26
|
+
| `frontend-new-surface` | bề mặt chưa tồn tại (`new`) | bind ×2 → business → direction → resolve → apply → audit → quality → publish | audit theo matrix | `git.publish` |
|
|
27
|
+
| `frontend-reconstruct` | dựng lại bề mặt đã có, giữ fact nghiệp vụ | bind → direction → resolve → apply → audit → quality → publish | audit theo matrix | `git.publish` |
|
|
28
|
+
| `frontend-refine` | sửa bên trong cấu trúc đã duyệt | bind → direction → resolve → apply → audit → quality → publish | audit theo matrix | `git.publish` |
|
|
29
|
+
| `backend-feature` | một contract backend cho một feature | bind → business (model) → architecture → backend apply → quality → business (reconcile) → publish | — | `git.publish` |
|
|
30
|
+
| `full-feature` | backend và bề mặt frontend mới cùng lúc | bind ×2 → business → architecture → [backend apply ∥ direction] → [quality ∥ resolve] → apply → audit → quality → business (reconcile) → publish | hai bậc hai nhánh, audit theo matrix | `git.publish` |
|
|
31
|
+
| `frontend-with-uat` | thay đổi frontend mà người yêu cầu đi thử | bind ×2 → … audit → quality → uat → publish | audit theo matrix | `git.publish` |
|
|
32
|
+
| `release` | head đã publish phải lên production | bind → quality → release | — | `release.deploy` |
|
|
33
|
+
| `content-unit` | một đơn vị giáo trình từ đầu tới cuối | content.generate (có exchange review bên trong) | — | `user` |
|
|
34
|
+
|
|
35
|
+
Hình dạng file (`schemaVersion` 9): `id` bằng tên file; `when` có `en` và `vi`; `chain` là mảng bậc,
|
|
36
|
+
mỗi bậc là mảng `{ operator, requirements?, fanout?: "matrix", maxParallel?: 1..3 }`; `loops` là mảng
|
|
37
|
+
`{ from, to, when, maxRounds }`; `ends` là `user` hoặc một operator của bậc cuối.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 9,
|
|
3
|
+
"id": "backend-feature",
|
|
4
|
+
"when": {
|
|
5
|
+
"en": "Server behaviour, an API contract, persistence or a job changes for one business feature; the architecture is decided first and the promise is reconciled after the code lands.",
|
|
6
|
+
"vi": "Hành vi server, contract API, persistence hay job đổi cho một feature nghiệp vụ; kiến trúc quyết trước, lời hứa được đối chiếu sau khi code đã vào."
|
|
7
|
+
},
|
|
8
|
+
"chain": [
|
|
9
|
+
[
|
|
10
|
+
{
|
|
11
|
+
"operator": "workspace.bind",
|
|
12
|
+
"requirements": {
|
|
13
|
+
"role": "be"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
[
|
|
18
|
+
{
|
|
19
|
+
"operator": "business.decide",
|
|
20
|
+
"requirements": {
|
|
21
|
+
"mode": "model"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
[
|
|
26
|
+
{
|
|
27
|
+
"operator": "architecture.decide",
|
|
28
|
+
"requirements": {
|
|
29
|
+
"alternatives": 1,
|
|
30
|
+
"selectionPolicy": "automatic"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
[
|
|
35
|
+
{
|
|
36
|
+
"operator": "backend.source.apply"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
[
|
|
40
|
+
{
|
|
41
|
+
"operator": "quality.verify"
|
|
42
|
+
}
|
|
43
|
+
],
|
|
44
|
+
[
|
|
45
|
+
{
|
|
46
|
+
"operator": "business.decide",
|
|
47
|
+
"requirements": {
|
|
48
|
+
"mode": "reconcile"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
[
|
|
53
|
+
{
|
|
54
|
+
"operator": "git.publish"
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
],
|
|
58
|
+
"ends": "git.publish"
|
|
59
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 9,
|
|
3
|
+
"id": "content-unit",
|
|
4
|
+
"when": {
|
|
5
|
+
"en": "One curriculum unit needs its brief, its language editions, its code tracks and an independent review; publishing to MinIO stays with a person.",
|
|
6
|
+
"vi": "Một đơn vị giáo trình cần brief, các ấn bản ngôn ngữ, track code và một lượt review độc lập; đưa lên MinIO vẫn là việc của người."
|
|
7
|
+
},
|
|
8
|
+
"chain": [
|
|
9
|
+
[
|
|
10
|
+
{
|
|
11
|
+
"operator": "content.generate",
|
|
12
|
+
"requirements": {
|
|
13
|
+
"maxReviewRounds": 2
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
],
|
|
18
|
+
"ends": "user"
|
|
19
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 9,
|
|
3
|
+
"id": "frontend-new-surface",
|
|
4
|
+
"when": {
|
|
5
|
+
"en": "A page, flow, or surface that does not exist yet must be created; the person named the target route and its business promise is known or will be decided first.",
|
|
6
|
+
"vi": "Một trang, luồng hay bề mặt chưa tồn tại cần được tạo; người dùng nêu route đích, lời hứa nghiệp vụ đã có hoặc sẽ được quyết trước."
|
|
7
|
+
},
|
|
8
|
+
"chain": [
|
|
9
|
+
[
|
|
10
|
+
{
|
|
11
|
+
"operator": "workspace.bind",
|
|
12
|
+
"requirements": {
|
|
13
|
+
"role": "be"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"operator": "workspace.bind",
|
|
18
|
+
"requirements": {
|
|
19
|
+
"role": "fe",
|
|
20
|
+
"runtimeNeed": "consume"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
[
|
|
25
|
+
{
|
|
26
|
+
"operator": "business.decide",
|
|
27
|
+
"requirements": {
|
|
28
|
+
"mode": "model"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
[
|
|
33
|
+
{
|
|
34
|
+
"operator": "frontend.direction.decide",
|
|
35
|
+
"requirements": {
|
|
36
|
+
"intent": "create",
|
|
37
|
+
"changeLevel": "new"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
{
|
|
43
|
+
"operator": "frontend.presentation.resolve"
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
[
|
|
47
|
+
{
|
|
48
|
+
"operator": "frontend.source.apply",
|
|
49
|
+
"requirements": {
|
|
50
|
+
"mode": "apply"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
[
|
|
55
|
+
{
|
|
56
|
+
"operator": "frontend.surface.audit",
|
|
57
|
+
"fanout": "matrix",
|
|
58
|
+
"maxParallel": 3
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
[
|
|
62
|
+
{
|
|
63
|
+
"operator": "quality.verify"
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
[
|
|
67
|
+
{
|
|
68
|
+
"operator": "git.publish"
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
],
|
|
72
|
+
"ends": "git.publish",
|
|
73
|
+
"loops": [
|
|
74
|
+
{
|
|
75
|
+
"from": "frontend.surface.audit",
|
|
76
|
+
"to": "frontend.presentation.resolve",
|
|
77
|
+
"when": "an application-owned node fails a claim or a proof rule",
|
|
78
|
+
"maxRounds": 2
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 9,
|
|
3
|
+
"id": "frontend-reconstruct",
|
|
4
|
+
"when": {
|
|
5
|
+
"en": "An existing surface is rebuilt: composition, region order, hierarchy or responsive structure change while business facts, behaviour and API semantics stay.",
|
|
6
|
+
"vi": "Dựng lại một bề mặt đã có: đổi composition, thứ tự vùng, hierarchy hay cấu trúc responsive trong khi fact nghiệp vụ, hành vi và API giữ nguyên."
|
|
7
|
+
},
|
|
8
|
+
"chain": [
|
|
9
|
+
[
|
|
10
|
+
{
|
|
11
|
+
"operator": "workspace.bind",
|
|
12
|
+
"requirements": {
|
|
13
|
+
"role": "fe",
|
|
14
|
+
"runtimeNeed": "consume"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
[
|
|
19
|
+
{
|
|
20
|
+
"operator": "frontend.direction.decide",
|
|
21
|
+
"requirements": {
|
|
22
|
+
"intent": "modify",
|
|
23
|
+
"changeLevel": "reconstruct"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
[
|
|
28
|
+
{
|
|
29
|
+
"operator": "frontend.presentation.resolve"
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
[
|
|
33
|
+
{
|
|
34
|
+
"operator": "frontend.source.apply",
|
|
35
|
+
"requirements": {
|
|
36
|
+
"mode": "apply"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
[
|
|
41
|
+
{
|
|
42
|
+
"operator": "frontend.surface.audit",
|
|
43
|
+
"fanout": "matrix",
|
|
44
|
+
"maxParallel": 3
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
{
|
|
49
|
+
"operator": "quality.verify"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
[
|
|
53
|
+
{
|
|
54
|
+
"operator": "git.publish"
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
],
|
|
58
|
+
"ends": "git.publish",
|
|
59
|
+
"loops": [
|
|
60
|
+
{
|
|
61
|
+
"from": "frontend.surface.audit",
|
|
62
|
+
"to": "frontend.presentation.resolve",
|
|
63
|
+
"when": "an application-owned node fails a claim or a proof rule",
|
|
64
|
+
"maxRounds": 2
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 9,
|
|
3
|
+
"id": "frontend-refine",
|
|
4
|
+
"when": {
|
|
5
|
+
"en": "The approved structure of a surface stays; only typography, spacing, labels, controls, states, tokens or Grammar conformance inside it are repaired.",
|
|
6
|
+
"vi": "Cấu trúc đã duyệt của bề mặt giữ nguyên; chỉ sửa typography, spacing, label, control, state, token hay conformance Grammar bên trong."
|
|
7
|
+
},
|
|
8
|
+
"chain": [
|
|
9
|
+
[
|
|
10
|
+
{
|
|
11
|
+
"operator": "workspace.bind",
|
|
12
|
+
"requirements": {
|
|
13
|
+
"role": "fe",
|
|
14
|
+
"runtimeNeed": "consume"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
[
|
|
19
|
+
{
|
|
20
|
+
"operator": "frontend.direction.decide",
|
|
21
|
+
"requirements": {
|
|
22
|
+
"intent": "audit-repair",
|
|
23
|
+
"changeLevel": "refine"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
[
|
|
28
|
+
{
|
|
29
|
+
"operator": "frontend.presentation.resolve"
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
[
|
|
33
|
+
{
|
|
34
|
+
"operator": "frontend.source.apply",
|
|
35
|
+
"requirements": {
|
|
36
|
+
"mode": "apply"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
[
|
|
41
|
+
{
|
|
42
|
+
"operator": "frontend.surface.audit",
|
|
43
|
+
"fanout": "matrix",
|
|
44
|
+
"maxParallel": 3
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
{
|
|
49
|
+
"operator": "quality.verify"
|
|
50
|
+
}
|
|
51
|
+
],
|
|
52
|
+
[
|
|
53
|
+
{
|
|
54
|
+
"operator": "git.publish"
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
],
|
|
58
|
+
"ends": "git.publish",
|
|
59
|
+
"loops": [
|
|
60
|
+
{
|
|
61
|
+
"from": "frontend.surface.audit",
|
|
62
|
+
"to": "frontend.presentation.resolve",
|
|
63
|
+
"when": "an application-owned node fails a claim or a proof rule",
|
|
64
|
+
"maxRounds": 2
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 9,
|
|
3
|
+
"id": "frontend-with-uat",
|
|
4
|
+
"when": {
|
|
5
|
+
"en": "A frontend change must also be walked by a real person's journey before it is published; a person asked for the UAT run by name.",
|
|
6
|
+
"vi": "Một thay đổi frontend còn phải đi qua hành trình của người thật trước khi publish; có người yêu cầu đích danh lần chạy UAT."
|
|
7
|
+
},
|
|
8
|
+
"chain": [
|
|
9
|
+
[
|
|
10
|
+
{
|
|
11
|
+
"operator": "workspace.bind",
|
|
12
|
+
"requirements": {
|
|
13
|
+
"role": "be"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"operator": "workspace.bind",
|
|
18
|
+
"requirements": {
|
|
19
|
+
"role": "fe",
|
|
20
|
+
"runtimeNeed": "consume"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
[
|
|
25
|
+
{
|
|
26
|
+
"operator": "frontend.direction.decide",
|
|
27
|
+
"requirements": {
|
|
28
|
+
"intent": "modify",
|
|
29
|
+
"changeLevel": "reconstruct"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
[
|
|
34
|
+
{
|
|
35
|
+
"operator": "frontend.presentation.resolve"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
[
|
|
39
|
+
{
|
|
40
|
+
"operator": "frontend.source.apply",
|
|
41
|
+
"requirements": {
|
|
42
|
+
"mode": "apply"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
[
|
|
47
|
+
{
|
|
48
|
+
"operator": "frontend.surface.audit",
|
|
49
|
+
"fanout": "matrix",
|
|
50
|
+
"maxParallel": 3
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
[
|
|
54
|
+
{
|
|
55
|
+
"operator": "quality.verify"
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
[
|
|
59
|
+
{
|
|
60
|
+
"operator": "uat.verify"
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
[
|
|
64
|
+
{
|
|
65
|
+
"operator": "git.publish"
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
],
|
|
69
|
+
"ends": "git.publish",
|
|
70
|
+
"loops": [
|
|
71
|
+
{
|
|
72
|
+
"from": "frontend.surface.audit",
|
|
73
|
+
"to": "frontend.presentation.resolve",
|
|
74
|
+
"when": "an application-owned node fails a claim or a proof rule",
|
|
75
|
+
"maxRounds": 2
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 9,
|
|
3
|
+
"id": "full-feature",
|
|
4
|
+
"when": {
|
|
5
|
+
"en": "One feature needs both a backend contract and a new frontend surface; backend implementation and frontend direction run side by side after the architecture is decided.",
|
|
6
|
+
"vi": "Một feature cần cả contract backend lẫn bề mặt frontend mới; hiện thực backend và hướng frontend chạy song song sau khi kiến trúc đã quyết."
|
|
7
|
+
},
|
|
8
|
+
"chain": [
|
|
9
|
+
[
|
|
10
|
+
{
|
|
11
|
+
"operator": "workspace.bind",
|
|
12
|
+
"requirements": {
|
|
13
|
+
"role": "be"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"operator": "workspace.bind",
|
|
18
|
+
"requirements": {
|
|
19
|
+
"role": "fe",
|
|
20
|
+
"runtimeNeed": "consume"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
[
|
|
25
|
+
{
|
|
26
|
+
"operator": "business.decide",
|
|
27
|
+
"requirements": {
|
|
28
|
+
"mode": "model"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
[
|
|
33
|
+
{
|
|
34
|
+
"operator": "architecture.decide",
|
|
35
|
+
"requirements": {
|
|
36
|
+
"alternatives": 1,
|
|
37
|
+
"selectionPolicy": "automatic"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
[
|
|
42
|
+
{
|
|
43
|
+
"operator": "backend.source.apply"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"operator": "frontend.direction.decide",
|
|
47
|
+
"requirements": {
|
|
48
|
+
"intent": "create",
|
|
49
|
+
"changeLevel": "new"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
[
|
|
54
|
+
{
|
|
55
|
+
"operator": "quality.verify"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"operator": "frontend.presentation.resolve"
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
[
|
|
62
|
+
{
|
|
63
|
+
"operator": "frontend.source.apply",
|
|
64
|
+
"requirements": {
|
|
65
|
+
"mode": "apply"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
[
|
|
70
|
+
{
|
|
71
|
+
"operator": "frontend.surface.audit",
|
|
72
|
+
"fanout": "matrix",
|
|
73
|
+
"maxParallel": 3
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
[
|
|
77
|
+
{
|
|
78
|
+
"operator": "quality.verify"
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
[
|
|
82
|
+
{
|
|
83
|
+
"operator": "business.decide",
|
|
84
|
+
"requirements": {
|
|
85
|
+
"mode": "reconcile"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
{
|
|
91
|
+
"operator": "git.publish"
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
],
|
|
95
|
+
"ends": "git.publish",
|
|
96
|
+
"loops": [
|
|
97
|
+
{
|
|
98
|
+
"from": "frontend.surface.audit",
|
|
99
|
+
"to": "frontend.presentation.resolve",
|
|
100
|
+
"when": "an application-owned node fails a claim or a proof rule",
|
|
101
|
+
"maxRounds": 2
|
|
102
|
+
}
|
|
103
|
+
]
|
|
104
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 9,
|
|
3
|
+
"id": "release",
|
|
4
|
+
"when": {
|
|
5
|
+
"en": "A published head must reach production: verify it, deploy it, and prove the steady state; recovery and rollback are inside release.deploy.",
|
|
6
|
+
"vi": "Một head đã publish phải lên production: kiểm, deploy và chứng minh trạng thái ổn định; phục hồi và rollback nằm trong release.deploy."
|
|
7
|
+
},
|
|
8
|
+
"chain": [
|
|
9
|
+
[
|
|
10
|
+
{
|
|
11
|
+
"operator": "workspace.bind",
|
|
12
|
+
"requirements": {
|
|
13
|
+
"role": "be"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
[
|
|
18
|
+
{
|
|
19
|
+
"operator": "quality.verify"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
[
|
|
23
|
+
{
|
|
24
|
+
"operator": "release.deploy"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
],
|
|
28
|
+
"ends": "release.deploy"
|
|
29
|
+
}
|