@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,199 @@
|
|
|
1
|
+
# Operators
|
|
2
|
+
|
|
3
|
+
Generated by `scripts/generate-operators-index.mjs` from every `operator.md`; `--check` runs inside `npm test`, so this table cannot drift from the packages. Context aliases exist before the session; kinds are produced inside a branch (`step-N/parallel-M/response/`) and handed to a later branch by an explicit path in its `request.json`. 14 operators.
|
|
4
|
+
|
|
5
|
+
## What each operator needs and produces
|
|
6
|
+
|
|
7
|
+
| Operator | Profile | Context | Inputs (kinds) | Outputs (kinds) | Steps | Stop codes |
|
|
8
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
9
|
+
| `architecture.decide` | `sol-fresh` | `@knowledge/patterns`, `@workspaces/be`, `@worktrees/businesses/<featureId>` | `architecture-decision` | `architecture-decision`, `current-state`, `stack-model`, `alternatives`, `independent-critique` | 10 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `EVIDENCE_MISSING`, `CURRENT_STATE_UNOBSERVED`, `BUSINESS_AUTHORITY_REQUIRED`, `CONSTRAINT_CONTRADICTION`, `NO_VIABLE_ALTERNATIVE`, `CHOICE_REQUIRED`, `COMPATIBILITY_UNVERIFIED`, `DATA_OWNERSHIP_UNASSIGNED`, `CRITIQUE_UNRESOLVED` |
|
|
10
|
+
| `backend.source.apply` | `luna` | `@knowledge/patterns/be`, `@workspaces/be`, `@worktrees/businesses/<featureId>` | `architecture-decision`, `backend-source-application` | `backend-source-application`, `changes`, `mutations`, `conformance`, `proof` | 8 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `CONTRACT_UNFROZEN`, `CONTRACT_WIDENED`, `BUSINESS_AUTHORITY_MISSING`, `OWNER_CONFLICT`, `PATTERN_UNBOUND`, `PROOF_UNAVAILABLE` |
|
|
11
|
+
| `business.decide` | `sol-fresh` | `@workspaces/be`, `@worktrees/businesses/<featureId>` | `architecture-decision`, `backend-source-application` | `business-promise-authority`, `claims`, `coverage-matrix`, `model` | 9 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `EVIDENCE_MISSING`, `CONTRADICTION_UNRESOLVED`, `LIFECYCLE_TRANSITION_INVALID`, `AUTHORITY_CONFLICT`, `APPROVAL_REQUIRED`, `COVERAGE_INCOMPLETE`, `CONSUMER_UNPROVEN`, `RECONCILIATION_DISCREPANCY` |
|
|
12
|
+
| `content.generate` | `luna` | `@remote/minio/<contentId>/<locale>`, `@worktrees/sessions/central-runtime` | `content-generation-receipt` | `content-generation-receipt`, `content-brief`, `e2e`, `content-review`, `article`, `image`, `image-prompt`, `track` | 9 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `BRIEF_UNBOUND`, `OUTCOME_UNCOVERED`, `IMAGE_UNAVAILABLE`, `CODE_BUILD_FAILED`, `E2E_FAILED`, `CONTRACT_WEAKENED`, `REVIEW_REVISION_REQUIRED`, `REVIEW_ROUNDS_EXHAUSTED` |
|
|
13
|
+
| `frontend.direction.decide` | `sol-fresh` | `@grammar/core`, `@knowledge/grammars/starci`, `@knowledge/ui/composition`, `@workspaces/fe`, `@worktrees/uat/<flow>/<case>` | `business-promise-authority`, `backend-source-application`, `architecture-decision`, `frontend-direction-decision` | `frontend-direction-decision`, `ui-coverage`, `candidates`, `direction-image` | 12 | `INVALID_INPUT`, `ROUTE_UNVERIFIED`, `SOURCE_DRIFT`, `SCOPE_UNFROZEN`, `CHANGE_LEVEL_AMBIGUOUS`, `OWNER_CEILING_INVALID`, `BUSINESS_REQUIRED`, `BACKEND_REQUIRED`, `ARCHITECTURE_REQUIRED`, `GRAMMAR_REQUIRED`, `EVIDENCE_MISSING`, `REFERENCE_EVIDENCE_EXHAUSTED`, `NO_VIABLE_DIRECTION`, `DIRECTION_CHOICE_REQUIRED`, `NO_PROGRESS` |
|
|
14
|
+
| `frontend.presentation.resolve` | `luna` | `@grammar/core`, `@knowledge/ui/presentation`, `@workspaces/fe` | `frontend-direction-decision`, `frontend-surface-audit` | `frontend-presentation-resolution`, `inventory`, `resolved-tree` | 9 | `INVALID_INPUT`, `SOURCE_DRIFT`, `OWNER_CONFLICT`, `KNOWLEDGE_UNBOUND`, `UNKNOWN_RULE`, `RULE_MISSING`, `GRAMMAR_UNPUBLISHED`, `NO_PROGRESS` |
|
|
15
|
+
| `frontend.source.apply` | `luna` | `@workspaces/fe` | `frontend-presentation-resolution`, `frontend-direction-decision` | `frontend-source-application`, `changes`, `writes` | 7 | `INVALID_INPUT`, `SOURCE_DRIFT`, `OWNER_CONFLICT`, `RESOLUTION_STALE`, `WRITE_REJECTED`, `NO_PROGRESS` |
|
|
16
|
+
| `frontend.surface.audit` | `sol-reviewer` | `@knowledge/grammars/starci`, `@knowledge/ui/proof`, `@workspaces/fe`, `@worktrees/sessions/central-runtime` | `frontend-source-application`, `frontend-presentation-resolution`, `frontend-direction-decision` | `frontend-surface-audit`, `capture`, `screenshot`, `verdicts` | 6 | `INVALID_INPUT`, `SOURCE_DRIFT`, `RUNTIME_UNAVAILABLE`, `EVIDENCE_MISSING`, `UNKNOWN_RULE`, `NO_PROGRESS` |
|
|
17
|
+
| `git.publish` | `luna` | `@remote/git/<project>/<role>`, `@workspaces/<project>/<role>/husky`, `@workspaces/local/routes/<project>/<role>` | `workspace-route-binding`, `changes`, `quality-verification` | `git-publication` | 9 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `ROUTE_UNVERIFIED`, `APPROVAL_MISSING`, `BRANCH_POLICY_VIOLATION`, `DIRTY_OUTSIDE_BOUNDARY`, `HOOK_BLOCKED`, `NON_FAST_FORWARD` |
|
|
18
|
+
| `platform.operate` | `luna` | `@workspaces/device-state`, `@workspaces/ports/<project>`, `@workspaces/projects/<project>/<role>`, `@worktrees/sessions/central-runtime` | — | `platform-operation-receipt`, `delta`, `checks` | 8 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `AUTHORITY_DRIFT`, `CAPABILITY_MISSING`, `INVENTORY_DRIFT`, `PORT_CONFLICT`, `EFFECT_UNAUTHORIZED`, `SERVICE_UNAVAILABLE`, `PROOF_FAILED` |
|
|
19
|
+
| `quality.verify` | `luna` | `@workspaces/<project>/<role>/gates`, `@workspaces/be`, `@workspaces/fe`, `@worktrees/debts` | `backend-source-application`, `frontend-source-application`, `changes` | `quality-verification`, `gate-result`, `coverage` | 7 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `PREDECESSOR_MIXED`, `PREDECESSOR_STALE`, `GATE_UNAVAILABLE`, `DEBT_UNAPPROVED` |
|
|
20
|
+
| `release.deploy` | `luna` | `@remote/ghcr/<image>`, `@remote/github-actions/<runId>`, `@workspaces/device-state` | `quality-verification` | `release-deployment`, `probes` | 10 | `INVALID_INPUT`, `NO_PROGRESS`, `AUTHORIZATION_MISSING`, `MANIFEST_INVALID`, `APPROVAL_REQUIRED`, `CREDENTIAL_UNAVAILABLE`, `HOST_UNAVAILABLE`, `ARTIFACT_MISSING`, `MIGRATION_BLOCKED`, `DOMAIN_UNRECONCILED`, `ROLLOUT_FAILED`, `RECOVERY_EXHAUSTED`, `CONCURRENT_DRIFT`, `ROLLBACK_IDENTITY_MISSING`, `STEADY_STATE_UNPROVEN` |
|
|
21
|
+
| `uat.verify` | `sol-fresh` | `@workspaces/be`, `@workspaces/device-state`, `@worktrees/_templates`, `@worktrees/sessions/central-runtime`, `@worktrees/uat/<flow>/<case>` | `frontend-surface-audit`, `quality-verification` | `uat-flow-verification`, `uat-snapshot`, `uat-capture`, `uat-verdicts`, `screenshot`, `sheet` | 10 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `ADMISSION_MISSING`, `PROVISIONING_UNAVAILABLE`, `LEASE_INVALID`, `RUNTIME_UNAVAILABLE`, `EVIDENCE_UNAVAILABLE`, `FIXTURE_VIOLATION`, `CANONICAL_WRITE_DENIED` |
|
|
22
|
+
| `workspace.bind` | `luna` | `@workspaces/device-state`, `@workspaces/local/routes/<project>/<role>`, `@workspaces/ports/<project>`, `@workspaces/projects/<project>/<role>`, `@worktrees/sessions/central-runtime` | — | `workspace-route-binding`, `route` | 6 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `IDENTITY_UNVERIFIED`, `ROUTE_UNDECLARED`, `ROUTE_UNHYDRATED`, `ROUTE_MISMATCH`, `BRANCH_POLICY_VIOLATION`, `CHECKOUT_DIRTY`, `ENDPOINT_AUTHORITY_STALE`, `RUNTIME_NOT_READY` |
|
|
23
|
+
|
|
24
|
+
## Hand-offs between branches
|
|
25
|
+
|
|
26
|
+
Every kind that crosses between operators, who writes it, and who reads it. A kind with no consumer is kept for audit or for a person; a kind with no producer is a defect this check reports.
|
|
27
|
+
|
|
28
|
+
| Kind | Produced by | Consumed by |
|
|
29
|
+
| --- | --- | --- |
|
|
30
|
+
| `alternatives` | `architecture.decide` | — |
|
|
31
|
+
| `architecture-decision` | `architecture.decide` | `architecture.decide (optional)`, `backend.source.apply`, `business.decide (optional)`, `frontend.direction.decide (optional)` |
|
|
32
|
+
| `article` | `content.generate` | — |
|
|
33
|
+
| `backend-source-application` | `backend.source.apply` | `backend.source.apply (optional)`, `business.decide (optional)`, `frontend.direction.decide (optional)`, `quality.verify (optional)` |
|
|
34
|
+
| `business-promise-authority` | `business.decide` | `frontend.direction.decide (optional)` |
|
|
35
|
+
| `candidates` | `frontend.direction.decide` | — |
|
|
36
|
+
| `capture` | `frontend.surface.audit` | — |
|
|
37
|
+
| `changes` | `backend.source.apply`, `frontend.source.apply` | `git.publish`, `quality.verify (optional)` |
|
|
38
|
+
| `checks` | `platform.operate` | — |
|
|
39
|
+
| `claims` | `business.decide` | — |
|
|
40
|
+
| `conformance` | `backend.source.apply` | — |
|
|
41
|
+
| `content-brief` | `content.generate` | — |
|
|
42
|
+
| `content-generation-receipt` | `content.generate` | `content.generate (optional)` |
|
|
43
|
+
| `content-review` | `content.generate` | — |
|
|
44
|
+
| `coverage` | `quality.verify` | — |
|
|
45
|
+
| `coverage-matrix` | `business.decide` | — |
|
|
46
|
+
| `current-state` | `architecture.decide` | — |
|
|
47
|
+
| `delta` | `platform.operate` | — |
|
|
48
|
+
| `direction-image` | `frontend.direction.decide` | — |
|
|
49
|
+
| `e2e` | `content.generate` | — |
|
|
50
|
+
| `frontend-direction-decision` | `frontend.direction.decide` | `frontend.direction.decide (optional)`, `frontend.presentation.resolve`, `frontend.source.apply`, `frontend.surface.audit` |
|
|
51
|
+
| `frontend-presentation-resolution` | `frontend.presentation.resolve` | `frontend.source.apply`, `frontend.surface.audit` |
|
|
52
|
+
| `frontend-source-application` | `frontend.source.apply` | `frontend.surface.audit`, `quality.verify (optional)` |
|
|
53
|
+
| `frontend-surface-audit` | `frontend.surface.audit` | `frontend.presentation.resolve (optional)`, `uat.verify` |
|
|
54
|
+
| `gate-result` | `quality.verify` | — |
|
|
55
|
+
| `git-publication` | `git.publish` | — |
|
|
56
|
+
| `image` | `content.generate` | — |
|
|
57
|
+
| `image-prompt` | `content.generate` | — |
|
|
58
|
+
| `independent-critique` | `architecture.decide` | — |
|
|
59
|
+
| `inventory` | `frontend.presentation.resolve` | — |
|
|
60
|
+
| `model` | `business.decide` | — |
|
|
61
|
+
| `mutations` | `backend.source.apply` | — |
|
|
62
|
+
| `platform-operation-receipt` | `platform.operate` | — |
|
|
63
|
+
| `probes` | `release.deploy` | — |
|
|
64
|
+
| `proof` | `backend.source.apply` | — |
|
|
65
|
+
| `quality-verification` | `quality.verify` | `git.publish`, `release.deploy`, `uat.verify` |
|
|
66
|
+
| `release-deployment` | `release.deploy` | — |
|
|
67
|
+
| `resolved-tree` | `frontend.presentation.resolve` | — |
|
|
68
|
+
| `route` | `workspace.bind` | — |
|
|
69
|
+
| `screenshot` | `frontend.surface.audit`, `uat.verify` | — |
|
|
70
|
+
| `sheet` | `uat.verify` | — |
|
|
71
|
+
| `stack-model` | `architecture.decide` | — |
|
|
72
|
+
| `track` | `content.generate` | — |
|
|
73
|
+
| `uat-capture` | `uat.verify` | — |
|
|
74
|
+
| `uat-flow-verification` | `uat.verify` | — |
|
|
75
|
+
| `uat-snapshot` | `uat.verify` | — |
|
|
76
|
+
| `uat-verdicts` | `uat.verify` | — |
|
|
77
|
+
| `ui-coverage` | `frontend.direction.decide` | — |
|
|
78
|
+
| `verdicts` | `frontend.surface.audit` | — |
|
|
79
|
+
| `workspace-route-binding` | `workspace.bind` | `git.publish` |
|
|
80
|
+
| `writes` | `frontend.source.apply` | — |
|
|
81
|
+
|
|
82
|
+
## Jobs
|
|
83
|
+
|
|
84
|
+
| Operator | Single job |
|
|
85
|
+
| --- | --- |
|
|
86
|
+
| `architecture.decide` | Decide one architecture with its tech stack, system boundaries, and data ownership, and prove it against the observed current state, the rejected alternatives, verified compatibility, and an independent critique. |
|
|
87
|
+
| `backend.source.apply` | Implement one backend outcome inside a frozen mutation contract, following the observed sibling family, and return the measured conformance and proof receipt that shows the boundary was not widened. |
|
|
88
|
+
| `business.decide` | Decide and publish one evidence-backed business promise as durable backend-owned authority, frozen behind a complete promise-to-enforcement coverage matrix, or reconcile that published head against the source that was actually delivered. |
|
|
89
|
+
| `content.generate` | Generate or refactor one educational content unit in one linear pass: a teacher brief that constrains everything after it, one written edition per declared language, images made to a stated claim, code and executable checks that actually run, and an independent review that receives the artifacts without the producer's rationale. |
|
|
90
|
+
| `frontend.direction.decide` | Decide one evidence-backed, implementation-ready frontend direction for one authorized target, and prove it against the business promise, the published Grammar, the observed implementation and a falsification pass that no candidate survives by taste. |
|
|
91
|
+
| `frontend.presentation.resolve` | Resolve every application-owned presentation property on one already-composed tree to exactly one published rule, emit its class and its verifiable contract claim, and stop at the smallest owning gap instead of inventing a value. |
|
|
92
|
+
| `frontend.source.apply` | Write one already-resolved tree into product source on the session branch, inside a frozen owner ceiling and a declared file set, emitting only values the bound resolution already contains, and account for every byte that entered the repository in one commit. |
|
|
93
|
+
| `frontend.surface.audit` | Observe the committed surface at the served route across the matrix the direction's coverage implies, measure every node that carries a claim, and judge each measurement against the published proof rules by the owner of the node it stands on. |
|
|
94
|
+
| `git.publish` | Publish one approved Git boundary from the exact commit quality verified, with non-force, fast-forward-only semantics, and stop with a typed failure rather than reaching for a bypass. |
|
|
95
|
+
| `platform.operate` | Operate one bounded shared observability, Sonar, or tunnel service from exact evidence: inventory it, converge only the approved delta, prove every check the bound knowledge requires, and stop at the smallest owning gap instead of taking product deployment ownership. |
|
|
96
|
+
| `quality.verify` | Verify one bounded delivery by running its declared gates against an unchanged predecessor receipt at one frozen head, and return the exact measured verdict, repairing nothing. |
|
|
97
|
+
| `release.deploy` | Deploy one immutable release to one declared target under its declared authorization and prove the steady state it reached, taking the recovery or rollback branch inside the same pass rather than assuming the rollout succeeded. |
|
|
98
|
+
| `uat.verify` | Verify one product flow end to end on the running product at the pinned commit, and publish one append-only run record with three independently judged lanes, or stop at the exact unavailability instead of manufacturing a verdict. |
|
|
99
|
+
| `workspace.bind` | Resolve one project and role into a verified checkout identity, its exact source head, and the closed runtime binding it may consume, and return that as one typed route receipt. |
|
|
100
|
+
|
|
101
|
+
## Stop codes
|
|
102
|
+
|
|
103
|
+
Every code an operator may stop with, merged from `operators/errors.json` (codes several operators share, with a scope list) and each `operators/<id>/errors.json`. A code has exactly one disposition: **terminate** ends the branch blocked; **fallback** performs the named action, records it under `## Fallbacks taken` in `response.md`, and continues. `unless` names the one Requirements param whose value flips the disposition. `domain` is the `routing.json` domain the stop hands to; `self` is the emitting operator's own domain, a resume. A runtime meeting an unlisted code terminates with `UNKNOWN_STOP`.
|
|
104
|
+
|
|
105
|
+
| Code | Scope | Domain | Disposition | Meaning | Fallback | Unless | Resume |
|
|
106
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
107
|
+
| `EVIDENCE_MISSING` | `*` | `self` | terminate | A claim about the system has no file, line, or head behind it. | — | — | Add the evidence. |
|
|
108
|
+
| `INVALID_INPUT` | `*` | `caller` | terminate | request.json fails the gate or the operator's Requirements. | — | — | Correct request.json. |
|
|
109
|
+
| `NO_PROGRESS` | `*` | `caller` | terminate | A resume adds no evidence, constraint, inventory, or approval delta. | — | — | Bring a real delta. |
|
|
110
|
+
| `SOURCE_DRIFT` | `*` | `workspace` | terminate | The observed checkout head differs from the head request.json froze. | — | — | The orchestrator freezes the head again. |
|
|
111
|
+
| `UNKNOWN_STOP` | `*` | `caller` | terminate | The runtime met a code the merged registry does not list. | — | — | Register the code or fix the operator. |
|
|
112
|
+
| `BUSINESS_AUTHORITY_REQUIRED` | `architecture.decide` | `business` | terminate | The published business head the architecture must keep is missing or stale. | — | — | Run business.decide first. |
|
|
113
|
+
| `CHOICE_REQUIRED` | `architecture.decide` | `caller` | fallback | Several alternatives remain material after assessment. | Select the alternative with the highest score across tradeoffAxes; on a tie, the one that changes the fewest stack components; record the score table under ## Decision. | `selectionPolicy` = `approval-required` → terminate | The person supplies approval. |
|
|
114
|
+
| `COMPATIBILITY_UNVERIFIED` | `architecture.decide` | `self` | fallback | A retained stack component has no compatibility evidence on at least one axis. | Mark the component replaced-candidate in the stack delta and list the unverified axes under Handoff as unknown. | — | Add the compatibility evidence. |
|
|
115
|
+
| `CONSTRAINT_CONTRADICTION` | `architecture.decide` | `caller` | terminate | Two fixed-intent constraints cannot both hold. | — | — | A person resolves the constraints. |
|
|
116
|
+
| `CRITIQUE_UNRESOLVED` | `architecture.decide` | `self` | terminate | An attack on the selected alternative has no resolution. | — | — | Resolve the attack or select differently. |
|
|
117
|
+
| `CURRENT_STATE_UNOBSERVED` | `architecture.decide` | `workspace` | terminate | The system today could not be read at the frozen head. | — | — | Fix the route or the checkout. |
|
|
118
|
+
| `DATA_OWNERSHIP_UNASSIGNED` | `architecture.decide` | `self` | terminate | A physical store has no owning boundary. | — | — | Assign the owner. |
|
|
119
|
+
| `NO_VIABLE_ALTERNATIVE` | `architecture.decide` | `caller` | terminate | No alternative survives the frozen constraints, or the only alternative fails an attack. | — | — | Relax a constraint or stop. |
|
|
120
|
+
| `BUSINESS_AUTHORITY_MISSING` | `backend.source.apply` | `business` | terminate | A business question is open and no approved decision settles it. | — | — | Publish the decision and rebind the authority fingerprint. |
|
|
121
|
+
| `CONTRACT_UNFROZEN` | `backend.source.apply` | `contract` | terminate | The mutation contract is not frozen, or its fingerprint is stale. | — | — | Bring the frozen contract. |
|
|
122
|
+
| `CONTRACT_WIDENED` | `backend.source.apply` | `contract` | terminate | The outcome cannot be reached without a boundary the contract does not carry. | — | — | The contract owner reopens and refreezes the contract, then the same outcome is implemented again. |
|
|
123
|
+
| `PATTERN_UNBOUND` | `backend.source.apply` | `backend` | terminate | A touched aspect has no sibling family bound for it. | — | — | Bind the missing pattern; guessing the family from memory is refused. |
|
|
124
|
+
| `PROOF_UNAVAILABLE` | `backend.source.apply` | `platform` | terminate | A declared proof could not be executed in this environment. | — | — | Provide a working proof environment; a proof that could not run never becomes a pass. |
|
|
125
|
+
| `OWNER_CONFLICT` | `backend.source.apply`, `frontend.presentation.resolve`, `frontend.source.apply` | `caller` | terminate | A node that must be mutated lies outside the mutable owner ceiling, or the owner sets overlap. | — | — | Correct the owner authority. |
|
|
126
|
+
| `AUTHORITY_CONFLICT` | `business.decide` | `workspace` | terminate | The head or the businesses root contradicts published authority. | — | — | Correct the authority binding. |
|
|
127
|
+
| `CONSUMER_UNPROVEN` | `business.decide` | `business` | terminate | A discovered enforcement consumer has no disposition or no proof. | — | — | Dispose the consumer with positive and negative proof, then publish the promise again. |
|
|
128
|
+
| `CONTRADICTION_UNRESOLVED` | `business.decide` | `caller` | terminate | Two claims about the same behaviour disagree and nothing resolves them. | — | — | The owner resolves the contradiction. |
|
|
129
|
+
| `COVERAGE_INCOMPLETE` | `business.decide` | `business` | terminate | A declared coverage dimension carries no disposition. | — | — | Add the missing disposition. |
|
|
130
|
+
| `LIFECYCLE_TRANSITION_INVALID` | `business.decide` | `caller` | terminate | The requested target state is unreachable from the observed head. | — | — | Ask for a legal transition, or publish the intermediate state first. |
|
|
131
|
+
| `RECONCILIATION_DISCREPANCY` | `business.decide` | `backend` | terminate | Delivered source differs from the frozen coverage matrix. | — | — | Correct the source, or revise the matrix. |
|
|
132
|
+
| `APPROVAL_REQUIRED` | `business.decide`, `release.deploy` | `caller` | terminate | The transition or the release needs an approval that no request bound. | — | — | A person supplies the approval. |
|
|
133
|
+
| `BRIEF_UNBOUND` | `content.generate` | `curriculum` | terminate | The teacher brief cannot be frozen from the bound curriculum and source evidence. | — | — | Supply the missing curriculum or source evidence. |
|
|
134
|
+
| `CODE_BUILD_FAILED` | `content.generate` | `content` | terminate | A declared implementation track does not build. | — | — | Repair the track, then build it again. |
|
|
135
|
+
| `CONTRACT_WEAKENED` | `content.generate` | `content` | terminate | The executable contract moved during the repair loop, so the proof measures nothing. | — | — | Restore the contract and rerun without touching it. |
|
|
136
|
+
| `E2E_FAILED` | `content.generate` | `content` | terminate | A declared executable check still fails when maxE2eIterations is spent. | — | — | Repair the implementation, or approve more iterations. |
|
|
137
|
+
| `IMAGE_UNAVAILABLE` | `content.generate` | `engineering` | terminate | A required image cannot be generated to the brief's claims. | — | — | Provide a working generator, or turn the image stage off. |
|
|
138
|
+
| `OUTCOME_UNCOVERED` | `content.generate` | `content` | terminate | A declared language edition leaves a published learning outcome uncovered. | — | — | Rewrite the edition, or narrow the brief. |
|
|
139
|
+
| `REVIEW_REVISION_REQUIRED` | `content.generate` | `content` | fallback | The independent review returned a revision. | Repair exactly the artifacts the review's findings name, by owning stage, record the round under ## Fallbacks taken, and reopen the review exchange for the next round. | — | Nothing is asked of anyone; the branch revises and reviews again until maxReviewRounds is spent. |
|
|
140
|
+
| `REVIEW_ROUNDS_EXHAUSTED` | `content.generate` | `caller` | terminate | maxReviewRounds is spent and the review still returns a revision. | — | — | Approve more rounds, or narrow the unit. |
|
|
141
|
+
| `ARCHITECTURE_REQUIRED` | `frontend.direction.decide` | `architecture` | terminate | The direction changes a system or data boundary nobody decided. | — | — | Run architecture.decide first. |
|
|
142
|
+
| `BACKEND_REQUIRED` | `frontend.direction.decide` | `backend` | terminate | The direction changes a data contract nobody delivered. | — | — | Run backend.source.apply first. |
|
|
143
|
+
| `BUSINESS_REQUIRED` | `frontend.direction.decide` | `business` | terminate | An actor, promise, permission, adverse outcome or recovery truth the change level requires is unresolved. | — | — | Run business.decide first. |
|
|
144
|
+
| `CHANGE_LEVEL_AMBIGUOUS` | `frontend.direction.decide` | `caller` | terminate | The authority for new, reconstruct or refine is unresolved or contradicts the intent. | — | — | State the exact change level. |
|
|
145
|
+
| `DIRECTION_CHOICE_REQUIRED` | `frontend.direction.decide` | `caller` | fallback | Several candidates survive falsification and none dominates. | Select the candidate that survived the most falsification attacks; on a tie, the one that introduces the fewest new nodes; record the table under ## Decision. | `selectionPolicy` = `approval-required` → terminate | The person supplies approval naming one candidate. |
|
|
146
|
+
| `GRAMMAR_REQUIRED` | `frontend.direction.decide` | `grammar` | terminate | A family component the direction needs is unpublished; a composite is never assembled in its place. | — | — | A person publishes the component, and the same direction runs again. |
|
|
147
|
+
| `NO_VIABLE_DIRECTION` | `frontend.direction.decide` | `caller` | terminate | Every candidate contradicts authority or fails a mandatory attack. | — | — | Change the authority or the constraints; cosmetic variants are not a delta. |
|
|
148
|
+
| `OWNER_CEILING_INVALID` | `frontend.direction.decide` | `caller` | terminate | The direction needs an owner the declared ceiling does not authorize. | — | — | Correct the owner ceiling. |
|
|
149
|
+
| `REFERENCE_EVIDENCE_EXHAUSTED` | `frontend.direction.decide` | `caller` | terminate | Bounded research cannot close the business or interaction question the decision rests on. | — | — | Supply the owning authority or a materially new reference. |
|
|
150
|
+
| `SCOPE_UNFROZEN` | `frontend.direction.decide` | `caller` | terminate | The target or the boundary of the surface is incomplete, so the UI contract cannot be closed. | — | — | Freeze the scope. |
|
|
151
|
+
| `ROUTE_UNVERIFIED` | `frontend.direction.decide`, `git.publish` | `workspace` | terminate | The project or the routed frontend checkout identity is not verified. | — | — | Bind the route again. |
|
|
152
|
+
| `GRAMMAR_UNPUBLISHED` | `frontend.presentation.resolve` | `grammar` | terminate | The Grammar package is unpublished or the bound fingerprint is stale. | — | — | A person publishes the exact Grammar package. |
|
|
153
|
+
| `KNOWLEDGE_UNBOUND` | `frontend.presentation.resolve` | `knowledge` | terminate | A presentation property is present in the tree and no knowledge topic is bound for it. | — | — | Bind the missing topic. |
|
|
154
|
+
| `RULE_MISSING` | `frontend.presentation.resolve` | `knowledge` | terminate | No published case matches the observed condition on a node. | — | — | The knowledge owner publishes the case, and the tree is resolved again. |
|
|
155
|
+
| `UNKNOWN_RULE` | `frontend.presentation.resolve`, `frontend.surface.audit` | `self` | terminate | An identifier outside the bound rule inventory was reached for. | — | — | Bind the topic that publishes it, or correct the identifier. |
|
|
156
|
+
| `RESOLUTION_STALE` | `frontend.source.apply` | `resolution` | terminate | The resolution actually read differs from the resolution the request bound. | — | — | Bind the current resolution, or resolve the tree again. |
|
|
157
|
+
| `WRITE_REJECTED` | `frontend.source.apply` | `caller` | terminate | A file or a value the write would produce lies outside what was authorized, or the committed tree is not the resolved tree. | — | — | Declare a corrected write set, or publish a resolution that carries the value. |
|
|
158
|
+
| `RUNTIME_UNAVAILABLE` | `frontend.surface.audit`, `uat.verify` | `platform` | terminate | The endpoint does not serve the bound route, or the surface never reaches readiness. | — | — | Whoever runs the service serves the bound route; this operator never starts one. |
|
|
159
|
+
| `APPROVAL_MISSING` | `git.publish` | `caller` | terminate | No approval covers this exact boundary unit; completion proof is not approval. | — | — | Supply an approval issued for this unit. |
|
|
160
|
+
| `DIRTY_OUTSIDE_BOUNDARY` | `git.publish` | `source` | terminate | Something dirty lies outside the declared write roots, so the publish would carry work this boundary does not own. | — | — | Clean the tree, or correct the write roots. |
|
|
161
|
+
| `HOOK_BLOCKED` | `git.publish` | `source` | terminate | A Git hook rejected the publication, and no bypass is representable. | — | — | Fix the boundary and bring a new head. |
|
|
162
|
+
| `NON_FAST_FORWARD` | `git.publish` | `remote` | terminate | The remote carries commits the local ref does not, so the push is not fast-forward. | — | — | The branch owner reconciles the divergence and a new head arrives. |
|
|
163
|
+
| `BRANCH_POLICY_VIOLATION` | `git.publish`, `workspace.bind` | `workspace` | terminate | The checkout is on a branch the routed Git policy forbids for this operation. | — | — | Move to a permitted branch or change the routed policy. |
|
|
164
|
+
| `AUTHORITY_DRIFT` | `platform.operate` | `caller` | terminate | The approval, the plan hash, or the allowed effect set no longer matches the requested delta. | — | — | Bring a fresh approval for this exact plan. |
|
|
165
|
+
| `CAPABILITY_MISSING` | `platform.operate` | `caller` | terminate | The capability the service kind requires is absent or names no custody evidence. | — | — | Supply the missing capability handle with its custody. |
|
|
166
|
+
| `EFFECT_UNAUTHORIZED` | `platform.operate` | `caller` | terminate | A required effect lies outside the approved effect set or outside the branch. | — | — | Approve the effect, or bring a narrower plan. |
|
|
167
|
+
| `INVENTORY_DRIFT` | `platform.operate` | `platform` | terminate | A declared resource moved since the inventory was bound, so the plan describes a service that no longer exists. | — | — | Re-observe the inventory; it must arrive with a new fingerprint. |
|
|
168
|
+
| `PORT_CONFLICT` | `platform.operate` | `product` | terminate | A claimed port is already held by another declared process, and holding it is not permission to reclaim it. | — | — | Agree a port, or the holder's owner releases it. |
|
|
169
|
+
| `PROOF_FAILED` | `platform.operate` | `platform` | terminate | A required check is missing, unreadable, or failed after apply, and an unproved operation is not an operated one. | — | — | Repair the service, then invoke again. |
|
|
170
|
+
| `SERVICE_UNAVAILABLE` | `platform.operate` | `provider` | terminate | The shared service or its provider cannot be reached. | — | — | Restore the provider. |
|
|
171
|
+
| `DEBT_UNAPPROVED` | `quality.verify` | `caller` | terminate | A declared debt has no live owner approval, or it covers a gate that passed or a boundary-drift failure. | — | — | Supply the unexpired owner approval, or drop the debt. |
|
|
172
|
+
| `GATE_UNAVAILABLE` | `quality.verify` | `platform` | terminate | A required gate cannot be executed at all in this environment, and an unmeasurable gate is not a passed one. | — | — | Provide a working gate environment. |
|
|
173
|
+
| `PREDECESSOR_MIXED` | `quality.verify` | `caller` | terminate | Two predecessor receipts describe different source heads, so their union is a delivery nobody built. | — | — | Supply one coherent predecessor set on one head. |
|
|
174
|
+
| `PREDECESSOR_STALE` | `quality.verify` | `caller` | terminate | A predecessor fingerprint no longer matches the frozen source. | — | — | Bring a refreshed upstream receipt. |
|
|
175
|
+
| `ARTIFACT_MISSING` | `release.deploy` | `provider` | terminate | The immutable digest cannot be resolved, and no replacement may be built and called the same release. | — | — | Publish the artifact at that digest. |
|
|
176
|
+
| `AUTHORIZATION_MISSING` | `release.deploy` | `approval` | terminate | No declared grant covers this project, environment, target, or the deploy action, or it had expired when the target was observed. | — | — | Supply the declared authorization, still valid. |
|
|
177
|
+
| `CONCURRENT_DRIFT` | `release.deploy` | `deployment` | terminate | A release that is neither this one nor its predecessor became active during execution. | — | — | Replan against the new observed state. |
|
|
178
|
+
| `CREDENTIAL_UNAVAILABLE` | `release.deploy` | `platform` | terminate | A declared handle cannot be resolved through existing custody. | — | — | Restore the custody; never an inline value. |
|
|
179
|
+
| `DOMAIN_UNRECONCILED` | `release.deploy` | `provider` | terminate | Domain or TLS state cannot be brought to the declaration. | — | — | Fix the provider state, or the provider authority. |
|
|
180
|
+
| `HOST_UNAVAILABLE` | `release.deploy` | `provider` | terminate | The declared host cannot be prepared. | — | — | Provide a reachable, prepared host. |
|
|
181
|
+
| `MANIFEST_INVALID` | `release.deploy` | `caller` | terminate | The validated manifest is pinned to another release, and that substitution is how an unreviewed image reaches a reviewed target. | — | — | Bring a manifest validated against this release. |
|
|
182
|
+
| `MIGRATION_BLOCKED` | `release.deploy` | `backend` | terminate | The declared migration cannot be applied safely. | — | — | Approve a migration boundary the backend owner can apply. |
|
|
183
|
+
| `RECOVERY_EXHAUSTED` | `release.deploy` | `approval` | fallback | The approved reversible actions ran out. | Take the rollback branch: restore rollbackIdentity by its exact digest, never by tag, and record the restored release under ## Fallbacks taken. | — | Grant rollback authority, or approve an unsafe action. |
|
|
184
|
+
| `ROLLBACK_IDENTITY_MISSING` | `release.deploy` | `provider` | terminate | Rollback is required and its exact safe release no longer exists. | — | — | Restore the safe release at its exact digest. |
|
|
185
|
+
| `ROLLOUT_FAILED` | `release.deploy` | `deployment` | fallback | The rollout could not place the release on the target. | Take the recovery branch: apply only the approved reversible actions against the same release identity, one at a time, and record each attempt with its outcome under ## Fallbacks taken. | — | Correct the target or the plan and roll out again. |
|
|
186
|
+
| `STEADY_STATE_UNPROVEN` | `release.deploy` | `deployment` | terminate | The steady window never closed before the bounded deadline, and an assumed rollout is not a deployment. | — | — | Observe a fresh series after the target recovers. |
|
|
187
|
+
| `ADMISSION_MISSING` | `uat.verify` | `quality` | terminate | The surface audit or the quality verification that admits product UAT is absent, or one of them was taken at another commit than the pinned head. | — | — | Re-run the missing admission at the pinned commit. |
|
|
188
|
+
| `CANONICAL_WRITE_DENIED` | `uat.verify` | `backend` | terminate | The flow directory cannot be written and read back under the exclusive lease, or the write would have rewritten an existing run record. | — | — | Restore write authority on the flow directory, or publish under a new runId. |
|
|
189
|
+
| `EVIDENCE_UNAVAILABLE` | `uat.verify` | `runtime` | terminate | A case produced no capture, no screenshot, or no screenshot whose login field could be masked, so a lane has nothing to be judged on. | — | — | Restore the dependency and run the frozen case again under a new runId. |
|
|
190
|
+
| `FIXTURE_VIOLATION` | `uat.verify` | `caller` | terminate | The seed, the run namespace or the cleanup scope could not be satisfied: a seed would have created the outcome under test, or cleanup would have reached outside the namespace. | — | — | Correct the fixture boundary in seed/records.json. |
|
|
191
|
+
| `LEASE_INVALID` | `uat.verify` | `control-panel` | terminate | The exclusive lease on the flow directory is expired, foreign, or bound to another run, generation or origin. | — | — | The orchestrator grants the lease again for this run. |
|
|
192
|
+
| `PROVISIONING_UNAVAILABLE` | `uat.verify` | `control-panel` | terminate | The sealed UAT credential cannot be resolved by name, or the flow's dedicated account does not exist; asking a person to sign in is forbidden in every branch. | — | — | Restore the sealed credential or the account; never a person's sign-in. |
|
|
193
|
+
| `CHECKOUT_DIRTY` | `workspace.bind` | `source` | terminate | Something is dirty outside the declared write roots. | — | — | Clean the boundary, or declare the write roots that cover it; this operator never stashes. |
|
|
194
|
+
| `ENDPOINT_AUTHORITY_STALE` | `workspace.bind` | `runtime` | terminate | The endpoint binding is not the closed port projection, or its fingerprint is stale. | — | — | Recompute the authority fingerprint at its owner. |
|
|
195
|
+
| `IDENTITY_UNVERIFIED` | `workspace.bind` | `identity` | terminate | The machine identity or its encrypted credential roster is missing or stale. | — | — | Verify the machine identity and seal its roster. |
|
|
196
|
+
| `ROUTE_MISMATCH` | `workspace.bind` | `workspace` | terminate | The hydrated route disagrees with the closed portable route, or belongs to another Source. | — | — | Correct the hydration. |
|
|
197
|
+
| `ROUTE_UNDECLARED` | `workspace.bind` | `workspace` | terminate | No portable declaration names this project and role. | — | — | Declare the route; this operator never repairs one. |
|
|
198
|
+
| `ROUTE_UNHYDRATED` | `workspace.bind` | `workspace` | terminate | The declaration exists but no local route projects it onto this machine. | — | — | Hydrate the route on this machine. |
|
|
199
|
+
| `RUNTIME_NOT_READY` | `workspace.bind` | `runtime` | terminate | The runtime owner registry is missing, stale, or not ready while the caller must consume it. | — | — | Raise one coordination request to the registered owner and wait for a ready generation. |
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# Các operator
|
|
2
|
+
|
|
3
|
+
Sinh bởi `scripts/generate-operators-index.mjs` từ mọi `operator.md`; `--check` chạy trong `npm test`, nên bảng này không thể lệch với các gói. Alias trong Context có trước phiên; kind được sinh trong một nhánh (`step-N/parallel-M/response/`) và bàn giao cho nhánh sau bằng đường dẫn tường minh trong `request.json` của nhánh đó. 14 operator.
|
|
4
|
+
|
|
5
|
+
## Mỗi operator cần gì và tạo ra gì
|
|
6
|
+
|
|
7
|
+
| Operator | Profile | Context | Đầu vào (kind) | Đầu ra (kind) | Số bước | Mã dừng |
|
|
8
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
9
|
+
| `architecture.decide` | `sol-fresh` | `@knowledge/patterns`, `@workspaces/be`, `@worktrees/businesses/<featureId>` | `architecture-decision` | `architecture-decision`, `current-state`, `stack-model`, `alternatives`, `independent-critique` | 10 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `EVIDENCE_MISSING`, `CURRENT_STATE_UNOBSERVED`, `BUSINESS_AUTHORITY_REQUIRED`, `CONSTRAINT_CONTRADICTION`, `NO_VIABLE_ALTERNATIVE`, `CHOICE_REQUIRED`, `COMPATIBILITY_UNVERIFIED`, `DATA_OWNERSHIP_UNASSIGNED`, `CRITIQUE_UNRESOLVED` |
|
|
10
|
+
| `backend.source.apply` | `luna` | `@knowledge/patterns/be`, `@workspaces/be`, `@worktrees/businesses/<featureId>` | `architecture-decision`, `backend-source-application` | `backend-source-application`, `changes`, `mutations`, `conformance`, `proof` | 8 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `CONTRACT_UNFROZEN`, `CONTRACT_WIDENED`, `BUSINESS_AUTHORITY_MISSING`, `OWNER_CONFLICT`, `PATTERN_UNBOUND`, `PROOF_UNAVAILABLE` |
|
|
11
|
+
| `business.decide` | `sol-fresh` | `@workspaces/be`, `@worktrees/businesses/<featureId>` | `architecture-decision`, `backend-source-application` | `business-promise-authority`, `claims`, `coverage-matrix`, `model` | 9 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `EVIDENCE_MISSING`, `CONTRADICTION_UNRESOLVED`, `LIFECYCLE_TRANSITION_INVALID`, `AUTHORITY_CONFLICT`, `APPROVAL_REQUIRED`, `COVERAGE_INCOMPLETE`, `CONSUMER_UNPROVEN`, `RECONCILIATION_DISCREPANCY` |
|
|
12
|
+
| `content.generate` | `luna` | `@remote/minio/<contentId>/<locale>`, `@worktrees/sessions/central-runtime` | `content-generation-receipt` | `content-generation-receipt`, `content-brief`, `e2e`, `content-review`, `article`, `image`, `image-prompt`, `track` | 9 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `BRIEF_UNBOUND`, `OUTCOME_UNCOVERED`, `IMAGE_UNAVAILABLE`, `CODE_BUILD_FAILED`, `E2E_FAILED`, `CONTRACT_WEAKENED`, `REVIEW_REVISION_REQUIRED`, `REVIEW_ROUNDS_EXHAUSTED` |
|
|
13
|
+
| `frontend.direction.decide` | `sol-fresh` | `@grammar/core`, `@knowledge/grammars/starci`, `@knowledge/ui/composition`, `@workspaces/fe`, `@worktrees/uat/<flow>/<case>` | `business-promise-authority`, `backend-source-application`, `architecture-decision`, `frontend-direction-decision` | `frontend-direction-decision`, `ui-coverage`, `candidates`, `direction-image` | 12 | `INVALID_INPUT`, `ROUTE_UNVERIFIED`, `SOURCE_DRIFT`, `SCOPE_UNFROZEN`, `CHANGE_LEVEL_AMBIGUOUS`, `OWNER_CEILING_INVALID`, `BUSINESS_REQUIRED`, `BACKEND_REQUIRED`, `ARCHITECTURE_REQUIRED`, `GRAMMAR_REQUIRED`, `EVIDENCE_MISSING`, `REFERENCE_EVIDENCE_EXHAUSTED`, `NO_VIABLE_DIRECTION`, `DIRECTION_CHOICE_REQUIRED`, `NO_PROGRESS` |
|
|
14
|
+
| `frontend.presentation.resolve` | `luna` | `@grammar/core`, `@knowledge/ui/presentation`, `@workspaces/fe` | `frontend-direction-decision`, `frontend-surface-audit` | `frontend-presentation-resolution`, `inventory`, `resolved-tree` | 9 | `INVALID_INPUT`, `SOURCE_DRIFT`, `OWNER_CONFLICT`, `KNOWLEDGE_UNBOUND`, `UNKNOWN_RULE`, `RULE_MISSING`, `GRAMMAR_UNPUBLISHED`, `NO_PROGRESS` |
|
|
15
|
+
| `frontend.source.apply` | `luna` | `@workspaces/fe` | `frontend-presentation-resolution`, `frontend-direction-decision` | `frontend-source-application`, `changes`, `writes` | 7 | `INVALID_INPUT`, `SOURCE_DRIFT`, `OWNER_CONFLICT`, `RESOLUTION_STALE`, `WRITE_REJECTED`, `NO_PROGRESS` |
|
|
16
|
+
| `frontend.surface.audit` | `sol-reviewer` | `@knowledge/grammars/starci`, `@knowledge/ui/proof`, `@workspaces/fe`, `@worktrees/sessions/central-runtime` | `frontend-source-application`, `frontend-presentation-resolution`, `frontend-direction-decision` | `frontend-surface-audit`, `capture`, `screenshot`, `verdicts` | 6 | `INVALID_INPUT`, `SOURCE_DRIFT`, `RUNTIME_UNAVAILABLE`, `EVIDENCE_MISSING`, `UNKNOWN_RULE`, `NO_PROGRESS` |
|
|
17
|
+
| `git.publish` | `luna` | `@remote/git/<project>/<role>`, `@workspaces/<project>/<role>/husky`, `@workspaces/local/routes/<project>/<role>` | `workspace-route-binding`, `changes`, `quality-verification` | `git-publication` | 9 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `ROUTE_UNVERIFIED`, `APPROVAL_MISSING`, `BRANCH_POLICY_VIOLATION`, `DIRTY_OUTSIDE_BOUNDARY`, `HOOK_BLOCKED`, `NON_FAST_FORWARD` |
|
|
18
|
+
| `platform.operate` | `luna` | `@workspaces/device-state`, `@workspaces/ports/<project>`, `@workspaces/projects/<project>/<role>`, `@worktrees/sessions/central-runtime` | — | `platform-operation-receipt`, `delta`, `checks` | 8 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `AUTHORITY_DRIFT`, `CAPABILITY_MISSING`, `INVENTORY_DRIFT`, `PORT_CONFLICT`, `EFFECT_UNAUTHORIZED`, `SERVICE_UNAVAILABLE`, `PROOF_FAILED` |
|
|
19
|
+
| `quality.verify` | `luna` | `@workspaces/<project>/<role>/gates`, `@workspaces/be`, `@workspaces/fe`, `@worktrees/debts` | `backend-source-application`, `frontend-source-application`, `changes` | `quality-verification`, `gate-result`, `coverage` | 7 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `PREDECESSOR_MIXED`, `PREDECESSOR_STALE`, `GATE_UNAVAILABLE`, `DEBT_UNAPPROVED` |
|
|
20
|
+
| `release.deploy` | `luna` | `@remote/ghcr/<image>`, `@remote/github-actions/<runId>`, `@workspaces/device-state` | `quality-verification` | `release-deployment`, `probes` | 10 | `INVALID_INPUT`, `NO_PROGRESS`, `AUTHORIZATION_MISSING`, `MANIFEST_INVALID`, `APPROVAL_REQUIRED`, `CREDENTIAL_UNAVAILABLE`, `HOST_UNAVAILABLE`, `ARTIFACT_MISSING`, `MIGRATION_BLOCKED`, `DOMAIN_UNRECONCILED`, `ROLLOUT_FAILED`, `RECOVERY_EXHAUSTED`, `CONCURRENT_DRIFT`, `ROLLBACK_IDENTITY_MISSING`, `STEADY_STATE_UNPROVEN` |
|
|
21
|
+
| `uat.verify` | `sol-fresh` | `@workspaces/be`, `@workspaces/device-state`, `@worktrees/_templates`, `@worktrees/sessions/central-runtime`, `@worktrees/uat/<flow>/<case>` | `frontend-surface-audit`, `quality-verification` | `uat-flow-verification`, `uat-snapshot`, `uat-capture`, `uat-verdicts`, `screenshot`, `sheet` | 10 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `ADMISSION_MISSING`, `PROVISIONING_UNAVAILABLE`, `LEASE_INVALID`, `RUNTIME_UNAVAILABLE`, `EVIDENCE_UNAVAILABLE`, `FIXTURE_VIOLATION`, `CANONICAL_WRITE_DENIED` |
|
|
22
|
+
| `workspace.bind` | `luna` | `@workspaces/device-state`, `@workspaces/local/routes/<project>/<role>`, `@workspaces/ports/<project>`, `@workspaces/projects/<project>/<role>`, `@worktrees/sessions/central-runtime` | — | `workspace-route-binding`, `route` | 6 | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS`, `IDENTITY_UNVERIFIED`, `ROUTE_UNDECLARED`, `ROUTE_UNHYDRATED`, `ROUTE_MISMATCH`, `BRANCH_POLICY_VIOLATION`, `CHECKOUT_DIRTY`, `ENDPOINT_AUTHORITY_STALE`, `RUNTIME_NOT_READY` |
|
|
23
|
+
|
|
24
|
+
## Bàn giao giữa các nhánh
|
|
25
|
+
|
|
26
|
+
Mọi kind đi qua giữa các operator, ai ghi nó, ai đọc nó. Kind không có người tiêu thụ là giữ cho audit hoặc cho người; kind không có người sinh là lỗi mà bước kiểm sẽ báo.
|
|
27
|
+
|
|
28
|
+
| Kind | Do ai sinh | Ai tiêu thụ |
|
|
29
|
+
| --- | --- | --- |
|
|
30
|
+
| `alternatives` | `architecture.decide` | — |
|
|
31
|
+
| `architecture-decision` | `architecture.decide` | `architecture.decide (optional)`, `backend.source.apply`, `business.decide (optional)`, `frontend.direction.decide (optional)` |
|
|
32
|
+
| `article` | `content.generate` | — |
|
|
33
|
+
| `backend-source-application` | `backend.source.apply` | `backend.source.apply (optional)`, `business.decide (optional)`, `frontend.direction.decide (optional)`, `quality.verify (optional)` |
|
|
34
|
+
| `business-promise-authority` | `business.decide` | `frontend.direction.decide (optional)` |
|
|
35
|
+
| `candidates` | `frontend.direction.decide` | — |
|
|
36
|
+
| `capture` | `frontend.surface.audit` | — |
|
|
37
|
+
| `changes` | `backend.source.apply`, `frontend.source.apply` | `git.publish`, `quality.verify (optional)` |
|
|
38
|
+
| `checks` | `platform.operate` | — |
|
|
39
|
+
| `claims` | `business.decide` | — |
|
|
40
|
+
| `conformance` | `backend.source.apply` | — |
|
|
41
|
+
| `content-brief` | `content.generate` | — |
|
|
42
|
+
| `content-generation-receipt` | `content.generate` | `content.generate (optional)` |
|
|
43
|
+
| `content-review` | `content.generate` | — |
|
|
44
|
+
| `coverage` | `quality.verify` | — |
|
|
45
|
+
| `coverage-matrix` | `business.decide` | — |
|
|
46
|
+
| `current-state` | `architecture.decide` | — |
|
|
47
|
+
| `delta` | `platform.operate` | — |
|
|
48
|
+
| `direction-image` | `frontend.direction.decide` | — |
|
|
49
|
+
| `e2e` | `content.generate` | — |
|
|
50
|
+
| `frontend-direction-decision` | `frontend.direction.decide` | `frontend.direction.decide (optional)`, `frontend.presentation.resolve`, `frontend.source.apply`, `frontend.surface.audit` |
|
|
51
|
+
| `frontend-presentation-resolution` | `frontend.presentation.resolve` | `frontend.source.apply`, `frontend.surface.audit` |
|
|
52
|
+
| `frontend-source-application` | `frontend.source.apply` | `frontend.surface.audit`, `quality.verify (optional)` |
|
|
53
|
+
| `frontend-surface-audit` | `frontend.surface.audit` | `frontend.presentation.resolve (optional)`, `uat.verify` |
|
|
54
|
+
| `gate-result` | `quality.verify` | — |
|
|
55
|
+
| `git-publication` | `git.publish` | — |
|
|
56
|
+
| `image` | `content.generate` | — |
|
|
57
|
+
| `image-prompt` | `content.generate` | — |
|
|
58
|
+
| `independent-critique` | `architecture.decide` | — |
|
|
59
|
+
| `inventory` | `frontend.presentation.resolve` | — |
|
|
60
|
+
| `model` | `business.decide` | — |
|
|
61
|
+
| `mutations` | `backend.source.apply` | — |
|
|
62
|
+
| `platform-operation-receipt` | `platform.operate` | — |
|
|
63
|
+
| `probes` | `release.deploy` | — |
|
|
64
|
+
| `proof` | `backend.source.apply` | — |
|
|
65
|
+
| `quality-verification` | `quality.verify` | `git.publish`, `release.deploy`, `uat.verify` |
|
|
66
|
+
| `release-deployment` | `release.deploy` | — |
|
|
67
|
+
| `resolved-tree` | `frontend.presentation.resolve` | — |
|
|
68
|
+
| `route` | `workspace.bind` | — |
|
|
69
|
+
| `screenshot` | `frontend.surface.audit`, `uat.verify` | — |
|
|
70
|
+
| `sheet` | `uat.verify` | — |
|
|
71
|
+
| `stack-model` | `architecture.decide` | — |
|
|
72
|
+
| `track` | `content.generate` | — |
|
|
73
|
+
| `uat-capture` | `uat.verify` | — |
|
|
74
|
+
| `uat-flow-verification` | `uat.verify` | — |
|
|
75
|
+
| `uat-snapshot` | `uat.verify` | — |
|
|
76
|
+
| `uat-verdicts` | `uat.verify` | — |
|
|
77
|
+
| `ui-coverage` | `frontend.direction.decide` | — |
|
|
78
|
+
| `verdicts` | `frontend.surface.audit` | — |
|
|
79
|
+
| `workspace-route-binding` | `workspace.bind` | `git.publish` |
|
|
80
|
+
| `writes` | `frontend.source.apply` | — |
|
|
81
|
+
|
|
82
|
+
## Việc duy nhất
|
|
83
|
+
|
|
84
|
+
| Operator | Việc duy nhất |
|
|
85
|
+
| --- | --- |
|
|
86
|
+
| `architecture.decide` | Decide one architecture with its tech stack, system boundaries, and data ownership, and prove it against the observed current state, the rejected alternatives, verified compatibility, and an independent critique. |
|
|
87
|
+
| `backend.source.apply` | Implement one backend outcome inside a frozen mutation contract, following the observed sibling family, and return the measured conformance and proof receipt that shows the boundary was not widened. |
|
|
88
|
+
| `business.decide` | Decide and publish one evidence-backed business promise as durable backend-owned authority, frozen behind a complete promise-to-enforcement coverage matrix, or reconcile that published head against the source that was actually delivered. |
|
|
89
|
+
| `content.generate` | Generate or refactor one educational content unit in one linear pass: a teacher brief that constrains everything after it, one written edition per declared language, images made to a stated claim, code and executable checks that actually run, and an independent review that receives the artifacts without the producer's rationale. |
|
|
90
|
+
| `frontend.direction.decide` | Decide one evidence-backed, implementation-ready frontend direction for one authorized target, and prove it against the business promise, the published Grammar, the observed implementation and a falsification pass that no candidate survives by taste. |
|
|
91
|
+
| `frontend.presentation.resolve` | Resolve every application-owned presentation property on one already-composed tree to exactly one published rule, emit its class and its verifiable contract claim, and stop at the smallest owning gap instead of inventing a value. |
|
|
92
|
+
| `frontend.source.apply` | Write one already-resolved tree into product source on the session branch, inside a frozen owner ceiling and a declared file set, emitting only values the bound resolution already contains, and account for every byte that entered the repository in one commit. |
|
|
93
|
+
| `frontend.surface.audit` | Observe the committed surface at the served route across the matrix the direction's coverage implies, measure every node that carries a claim, and judge each measurement against the published proof rules by the owner of the node it stands on. |
|
|
94
|
+
| `git.publish` | Publish one approved Git boundary from the exact commit quality verified, with non-force, fast-forward-only semantics, and stop with a typed failure rather than reaching for a bypass. |
|
|
95
|
+
| `platform.operate` | Operate one bounded shared observability, Sonar, or tunnel service from exact evidence: inventory it, converge only the approved delta, prove every check the bound knowledge requires, and stop at the smallest owning gap instead of taking product deployment ownership. |
|
|
96
|
+
| `quality.verify` | Verify one bounded delivery by running its declared gates against an unchanged predecessor receipt at one frozen head, and return the exact measured verdict, repairing nothing. |
|
|
97
|
+
| `release.deploy` | Deploy one immutable release to one declared target under its declared authorization and prove the steady state it reached, taking the recovery or rollback branch inside the same pass rather than assuming the rollout succeeded. |
|
|
98
|
+
| `uat.verify` | Verify one product flow end to end on the running product at the pinned commit, and publish one append-only run record with three independently judged lanes, or stop at the exact unavailability instead of manufacturing a verdict. |
|
|
99
|
+
| `workspace.bind` | Resolve one project and role into a verified checkout identity, its exact source head, and the closed runtime binding it may consume, and return that as one typed route receipt. |
|
|
100
|
+
|
|
101
|
+
## Mã dừng
|
|
102
|
+
|
|
103
|
+
Mọi mã một operator có thể dừng với, gộp từ `operators/errors.json` (mã nhiều operator dùng chung, có danh sách scope) và từng `operators/<id>/errors.json`. Một mã có đúng một cách xử lý: **terminate** kết thúc nhánh ở trạng thái blocked; **fallback** làm đúng hành động đã ghi, ghi lại dưới `## Fallbacks taken` trong `response.md`, rồi chạy tiếp. `unless` gọi tên đúng một tham số Yêu cầu mà giá trị của nó đảo cách xử lý. `domain` là vùng trong `routing.json` mà mã dừng bàn giao tới; `self` là vùng của chính operator phát mã, tức chạy lại. Runtime gặp mã không có trong sổ thì dừng với `UNKNOWN_STOP`.
|
|
104
|
+
|
|
105
|
+
| Mã | Phạm vi | Vùng | Xử lý | Nghĩa | Fallback | Trừ khi | Chạy lại |
|
|
106
|
+
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
107
|
+
| `EVIDENCE_MISSING` | `*` | `self` | terminate | Một khẳng định về hệ thống không có file, dòng hay head nào đứng sau. | — | — | Bổ sung bằng chứng. |
|
|
108
|
+
| `INVALID_INPUT` | `*` | `caller` | terminate | request.json không qua gate hoặc bảng Yêu cầu của operator. | — | — | Sửa request.json. |
|
|
109
|
+
| `NO_PROGRESS` | `*` | `caller` | terminate | Lần chạy lại không thêm bằng chứng, ràng buộc, inventory hay phê duyệt nào. | — | — | Mang một delta thật. |
|
|
110
|
+
| `SOURCE_DRIFT` | `*` | `workspace` | terminate | Head quan sát được của checkout khác head mà request.json đã đóng băng. | — | — | Orchestrator đóng băng head lại. |
|
|
111
|
+
| `UNKNOWN_STOP` | `*` | `caller` | terminate | Runtime gặp một mã mà sổ gộp không có. | — | — | Đăng ký mã hoặc sửa operator. |
|
|
112
|
+
| `BUSINESS_AUTHORITY_REQUIRED` | `architecture.decide` | `business` | terminate | Head nghiệp vụ đã publish mà kiến trúc phải giữ đang thiếu hoặc cũ. | — | — | Chạy business.decide trước. |
|
|
113
|
+
| `CHOICE_REQUIRED` | `architecture.decide` | `caller` | fallback | Nhiều phương án còn material sau khi chấm. | Chọn phương án điểm cao nhất theo tradeoffAxes; hòa thì chọn phương án đổi ít component stack nhất; ghi bảng điểm dưới ## Decision. | `selectionPolicy` = `approval-required` → terminate | Người nhập approval. |
|
|
114
|
+
| `COMPATIBILITY_UNVERIFIED` | `architecture.decide` | `self` | fallback | Một component stack giữ lại không có bằng chứng tương thích ở ít nhất một trục. | Đánh dấu component là replaced-candidate trong stack delta và liệt kê các trục chưa kiểm vào Handoff dạng unknown. | — | Bổ sung bằng chứng tương thích. |
|
|
115
|
+
| `CONSTRAINT_CONTRADICTION` | `architecture.decide` | `caller` | terminate | Hai ràng buộc fixed-intent không thể cùng đúng. | — | — | Người sửa ràng buộc. |
|
|
116
|
+
| `CRITIQUE_UNRESOLVED` | `architecture.decide` | `self` | terminate | Một đòn tấn công vào phương án đã chọn không có lời giải. | — | — | Giải quyết đòn tấn công hoặc chọn khác. |
|
|
117
|
+
| `CURRENT_STATE_UNOBSERVED` | `architecture.decide` | `workspace` | terminate | Không đọc được hiện trạng hệ thống ở head đã đóng băng. | — | — | Sửa route hoặc checkout. |
|
|
118
|
+
| `DATA_OWNERSHIP_UNASSIGNED` | `architecture.decide` | `self` | terminate | Một store vật lý không có boundary sở hữu. | — | — | Gán chủ sở hữu. |
|
|
119
|
+
| `NO_VIABLE_ALTERNATIVE` | `architecture.decide` | `caller` | terminate | Không phương án nào qua được ràng buộc, hoặc phương án duy nhất chết dưới một đòn tấn công. | — | — | Nới ràng buộc hoặc dừng. |
|
|
120
|
+
| `BUSINESS_AUTHORITY_MISSING` | `backend.source.apply` | `business` | terminate | Một câu hỏi nghiệp vụ còn mở và không quyết định đã duyệt nào giải nó. | — | — | Publish quyết định và ràng lại fingerprint thẩm quyền. |
|
|
121
|
+
| `CONTRACT_UNFROZEN` | `backend.source.apply` | `contract` | terminate | Contract mutation chưa đóng băng, hoặc fingerprint của nó đã cũ. | — | — | Mang contract đã đóng băng tới. |
|
|
122
|
+
| `CONTRACT_WIDENED` | `backend.source.apply` | `contract` | terminate | Không đạt được kết quả nếu không có một ranh giới mà contract không mang. | — | — | Chủ contract mở lại và đóng băng lại contract, rồi cài đặt lại cùng kết quả đó. |
|
|
123
|
+
| `PATTERN_UNBOUND` | `backend.source.apply` | `backend` | terminate | Một khía cạnh bị chạm không có họ anh em nào được ràng cho nó. | — | — | Ràng pattern còn thiếu; đoán họ từ trí nhớ bị từ chối. |
|
|
124
|
+
| `PROOF_UNAVAILABLE` | `backend.source.apply` | `platform` | terminate | Một proof đã khai không chạy được trong môi trường này. | — | — | Cung cấp môi trường chạy proof; một proof không chạy được không bao giờ thành pass. |
|
|
125
|
+
| `OWNER_CONFLICT` | `backend.source.apply`, `frontend.presentation.resolve`, `frontend.source.apply` | `caller` | terminate | Một node cần sửa nằm ngoài trần owner được sửa, hoặc hai tập owner chồng nhau. | — | — | Sửa thẩm quyền owner. |
|
|
126
|
+
| `AUTHORITY_CONFLICT` | `business.decide` | `workspace` | terminate | Head hoặc gốc businesses mâu thuẫn với thẩm quyền đã publish. | — | — | Sửa binding thẩm quyền. |
|
|
127
|
+
| `CONSUMER_UNPROVEN` | `business.decide` | `business` | terminate | Một consumer thực thi đã phát hiện không có disposition hoặc không có bằng chứng. | — | — | Xử lý consumer đó kèm positive và negative proof, rồi publish lại lời hứa. |
|
|
128
|
+
| `CONTRADICTION_UNRESOLVED` | `business.decide` | `caller` | terminate | Hai claim về cùng một hành vi mâu thuẫn và không có gì giải quyết chúng. | — | — | Người chủ giải quyết mâu thuẫn. |
|
|
129
|
+
| `COVERAGE_INCOMPLETE` | `business.decide` | `business` | terminate | Một chiều phủ đã khai không mang disposition nào. | — | — | Bổ sung disposition còn thiếu. |
|
|
130
|
+
| `LIFECYCLE_TRANSITION_INVALID` | `business.decide` | `caller` | terminate | Trạng thái đích được yêu cầu không tới được từ head đã quan sát. | — | — | Yêu cầu một chuyển trạng thái hợp lệ, hoặc publish trạng thái trung gian trước. |
|
|
131
|
+
| `RECONCILIATION_DISCREPANCY` | `business.decide` | `backend` | terminate | Source đã giao khác với ma trận phủ đã đóng băng. | — | — | Sửa source, hoặc sửa lại ma trận. |
|
|
132
|
+
| `APPROVAL_REQUIRED` | `business.decide`, `release.deploy` | `caller` | terminate | Chuyển trạng thái hoặc release cần một phê duyệt mà request chưa ràng. | — | — | Người cấp phê duyệt. |
|
|
133
|
+
| `BRIEF_UNBOUND` | `content.generate` | `curriculum` | terminate | Không đóng băng được brief người dạy từ chương trình học và bằng chứng nguồn đã ràng. | — | — | Bổ sung chương trình học hoặc bằng chứng nguồn còn thiếu. |
|
|
134
|
+
| `CODE_BUILD_FAILED` | `content.generate` | `content` | terminate | Một track cài đặt đã khai không build được. | — | — | Sửa track đó, rồi build lại. |
|
|
135
|
+
| `CONTRACT_WEAKENED` | `content.generate` | `content` | terminate | Contract chạy được bị dời trong vòng lặp sửa, nên bằng chứng không đo được gì. | — | — | Khôi phục contract và chạy lại mà không đụng vào nó. |
|
|
136
|
+
| `E2E_FAILED` | `content.generate` | `content` | terminate | Một phép kiểm chạy được đã khai vẫn hỏng khi đã tiêu hết maxE2eIterations. | — | — | Sửa phần cài đặt, hoặc duyệt thêm số vòng. |
|
|
137
|
+
| `IMAGE_UNAVAILABLE` | `content.generate` | `engineering` | terminate | Không sinh được hình ảnh bắt buộc theo các tuyên bố của brief. | — | — | Cấp một bộ sinh chạy được, hoặc tắt giai đoạn hình ảnh. |
|
|
138
|
+
| `OUTCOME_UNCOVERED` | `content.generate` | `content` | terminate | Một bản viết đã khai bỏ trống một kết quả học tập đã công bố. | — | — | Viết lại bản đó, hoặc thu hẹp brief. |
|
|
139
|
+
| `REVIEW_REVISION_REQUIRED` | `content.generate` | `content` | fallback | Phản biện độc lập trả về yêu cầu sửa. | Sửa đúng những artifact mà các finding của phản biện nêu tên, theo giai đoạn chủ, ghi vòng đó dưới ## Fallbacks taken, rồi mở lại cuộc trao đổi phản biện cho vòng kế. | — | Không hỏi ai cả; nhánh tự sửa và phản biện lại cho tới khi hết maxReviewRounds. |
|
|
140
|
+
| `REVIEW_ROUNDS_EXHAUSTED` | `content.generate` | `caller` | terminate | Đã tiêu hết maxReviewRounds mà phản biện vẫn trả về yêu cầu sửa. | — | — | Duyệt thêm vòng, hoặc thu hẹp đơn vị. |
|
|
141
|
+
| `ARCHITECTURE_REQUIRED` | `frontend.direction.decide` | `architecture` | terminate | Hướng làm đổi một ranh giới hệ thống hay dữ liệu chưa ai quyết. | — | — | Chạy architecture.decide trước. |
|
|
142
|
+
| `BACKEND_REQUIRED` | `frontend.direction.decide` | `backend` | terminate | Hướng làm đổi một contract dữ liệu chưa ai giao. | — | — | Chạy backend.source.apply trước. |
|
|
143
|
+
| `BUSINESS_REQUIRED` | `frontend.direction.decide` | `business` | terminate | Một actor, lời hứa, quyền, kết cục bất lợi hay đường phục hồi mà change level đòi vẫn chưa được giải quyết. | — | — | Chạy business.decide trước. |
|
|
144
|
+
| `CHANGE_LEVEL_AMBIGUOUS` | `frontend.direction.decide` | `caller` | terminate | Thẩm quyền cho new, reconstruct hay refine chưa rõ hoặc chỏi với intent. | — | — | Nêu đúng change level. |
|
|
145
|
+
| `DIRECTION_CHOICE_REQUIRED` | `frontend.direction.decide` | `caller` | fallback | Nhiều phương án cùng sống sót qua phản chứng và không cái nào trội. | Chọn phương án sống sót qua nhiều đòn phản chứng nhất; hòa thì chọn phương án thêm ít node mới nhất; ghi bảng vào mục ## Decision. | `selectionPolicy` = `approval-required` → terminate | Người nhập approval gọi tên một phương án. |
|
|
146
|
+
| `GRAMMAR_REQUIRED` | `frontend.direction.decide` | `grammar` | terminate | Một component của họ mà hướng cần chưa được publish; không bao giờ được ghép tạm một cái thay thế. | — | — | Người publish component đó, rồi chính hướng ấy chạy lại. |
|
|
147
|
+
| `NO_VIABLE_DIRECTION` | `frontend.direction.decide` | `caller` | terminate | Mọi phương án đều chỏi thẩm quyền hoặc chết dưới một đòn tấn công bắt buộc. | — | — | Đổi thẩm quyền hoặc ràng buộc; biến thể bề ngoài không phải delta. |
|
|
148
|
+
| `OWNER_CEILING_INVALID` | `frontend.direction.decide` | `caller` | terminate | Hướng cần một owner mà trần đã khai không uỷ quyền. | — | — | Sửa trần owner. |
|
|
149
|
+
| `REFERENCE_EVIDENCE_EXHAUSTED` | `frontend.direction.decide` | `caller` | terminate | Nghiên cứu có giới hạn không lấp được câu hỏi nghiệp vụ hay tương tác mà quyết định dựa vào. | — | — | Cấp thẩm quyền có chủ hoặc một tham chiếu mới về bản chất. |
|
|
150
|
+
| `SCOPE_UNFROZEN` | `frontend.direction.decide` | `caller` | terminate | Target hay ranh giới của bề mặt còn thiếu, nên không đóng được UI contract. | — | — | Đóng băng scope. |
|
|
151
|
+
| `ROUTE_UNVERIFIED` | `frontend.direction.decide`, `git.publish` | `workspace` | terminate | Danh tính project hoặc checkout frontend được route chưa được xác minh. | — | — | Bind lại route. |
|
|
152
|
+
| `GRAMMAR_UNPUBLISHED` | `frontend.presentation.resolve` | `grammar` | terminate | Gói Grammar chưa publish hoặc fingerprint đã bind là cũ. | — | — | Người publish đúng gói Grammar. |
|
|
153
|
+
| `KNOWLEDGE_UNBOUND` | `frontend.presentation.resolve` | `knowledge` | terminate | Một thuộc tính trình bày có trong cây mà không topic kiến thức nào được bind cho nó. | — | — | Bind topic còn thiếu. |
|
|
154
|
+
| `RULE_MISSING` | `frontend.presentation.resolve` | `knowledge` | terminate | Không case nào đã publish khớp điều kiện quan sát được trên một node. | — | — | Chủ knowledge publish case, rồi cây được resolve lại. |
|
|
155
|
+
| `UNKNOWN_RULE` | `frontend.presentation.resolve`, `frontend.surface.audit` | `self` | terminate | Một identifier ngoài kho luật đã bind bị với tới. | — | — | Bind topic publish nó, hoặc sửa lại identifier. |
|
|
156
|
+
| `RESOLUTION_STALE` | `frontend.source.apply` | `resolution` | terminate | Resolution thực sự đọc được khác resolution mà request đã bind. | — | — | Bind resolution hiện tại, hoặc resolve lại cây. |
|
|
157
|
+
| `WRITE_REJECTED` | `frontend.source.apply` | `caller` | terminate | Một file hay một giá trị lần ghi sẽ tạo ra nằm ngoài phần đã được uỷ quyền, hoặc cây đã commit không phải cây đã resolve. | — | — | Khai lại write set cho đúng, hoặc publish một resolution có mang giá trị đó. |
|
|
158
|
+
| `RUNTIME_UNAVAILABLE` | `frontend.surface.audit`, `uat.verify` | `platform` | terminate | Endpoint không phục vụ route đã bind, hoặc bề mặt không bao giờ sẵn sàng. | — | — | Người vận hành dịch vụ cho route đã bind chạy; operator này không bao giờ tự khởi động. |
|
|
159
|
+
| `APPROVAL_MISSING` | `git.publish` | `caller` | terminate | Không phê duyệt nào phủ đúng đơn vị ranh giới này; bằng chứng hoàn thành không phải phê duyệt. | — | — | Cấp một phê duyệt cấp cho đúng đơn vị này. |
|
|
160
|
+
| `DIRTY_OUTSIDE_BOUNDARY` | `git.publish` | `source` | terminate | Có thứ bẩn nằm ngoài các write root đã khai, nên lần publish sẽ mang theo công việc ranh giới này không sở hữu. | — | — | Dọn sạch cây làm việc, hoặc sửa lại các write root. |
|
|
161
|
+
| `HOOK_BLOCKED` | `git.publish` | `source` | terminate | Một Git hook từ chối lần publish, và không có đường vòng nào biểu diễn được. | — | — | Sửa ranh giới và mang một head mới. |
|
|
162
|
+
| `NON_FAST_FORWARD` | `git.publish` | `remote` | terminate | Remote mang những commit mà ref cục bộ không có, nên cú push không phải fast-forward. | — | — | Người sở hữu nhánh hoà giải phần phân kỳ và một head mới tới. |
|
|
163
|
+
| `BRANCH_POLICY_VIOLATION` | `git.publish`, `workspace.bind` | `workspace` | terminate | Checkout đang ở nhánh mà chính sách Git của route cấm với thao tác này. | — | — | Chuyển sang nhánh được phép hoặc đổi chính sách của route. |
|
|
164
|
+
| `AUTHORITY_DRIFT` | `platform.operate` | `caller` | terminate | Phê duyệt, hash kế hoạch hay tập effect được phép không còn khớp phần delta được yêu cầu. | — | — | Mang một phê duyệt mới cho đúng kế hoạch này. |
|
|
165
|
+
| `CAPABILITY_MISSING` | `platform.operate` | `caller` | terminate | Capability mà service kind đòi hỏi đang thiếu, hoặc không nêu bằng chứng custody nào. | — | — | Cấp handle capability còn thiếu cùng custody của nó. |
|
|
166
|
+
| `EFFECT_UNAUTHORIZED` | `platform.operate` | `caller` | terminate | Một effect cần thiết nằm ngoài tập effect đã duyệt hoặc ngoài nhánh. | — | — | Duyệt effect đó, hoặc mang một kế hoạch hẹp hơn. |
|
|
167
|
+
| `INVENTORY_DRIFT` | `platform.operate` | `platform` | terminate | Một tài nguyên đã khai đã đổi kể từ khi inventory được ràng, nên kế hoạch mô tả một dịch vụ không còn tồn tại. | — | — | Quan sát lại inventory; nó phải tới với một fingerprint mới. |
|
|
168
|
+
| `PORT_CONFLICT` | `platform.operate` | `product` | terminate | Một cổng được claim đang bị một tiến trình đã khai khác giữ, và việc nó bị giữ không phải giấy phép giành lại. | — | — | Thoả thuận một cổng khác, hoặc chủ của kẻ đang giữ nhả nó ra. |
|
|
169
|
+
| `PROOF_FAILED` | `platform.operate` | `platform` | terminate | Một phép kiểm bắt buộc thiếu, không đọc được, hoặc hỏng sau khi áp, và một lần vận hành chưa chứng minh được thì chưa phải đã vận hành. | — | — | Sửa dịch vụ, rồi gọi lại. |
|
|
170
|
+
| `SERVICE_UNAVAILABLE` | `platform.operate` | `provider` | terminate | Dịch vụ dùng chung hoặc provider của nó không tới được. | — | — | Khôi phục provider. |
|
|
171
|
+
| `DEBT_UNAPPROVED` | `quality.verify` | `caller` | terminate | Một khoản nợ đã khai không có phê duyệt còn sống của chủ, hoặc phủ lên một cổng đã pass hay một lỗi boundary-drift. | — | — | Cấp phê duyệt của chủ còn hạn, hoặc bỏ khoản nợ. |
|
|
172
|
+
| `GATE_UNAVAILABLE` | `quality.verify` | `platform` | terminate | Một cổng bắt buộc hoàn toàn không chạy được ở môi trường này, và cổng không đo được không phải cổng đã qua. | — | — | Cấp một môi trường chạy cổng hoạt động được. |
|
|
173
|
+
| `PREDECESSOR_MIXED` | `quality.verify` | `caller` | terminate | Hai biên bản tiền nhiệm mô tả hai source head khác nhau, nên hợp của chúng là một delivery chẳng ai xây. | — | — | Cấp một bộ tiền nhiệm nhất quán trên cùng một head. |
|
|
174
|
+
| `PREDECESSOR_STALE` | `quality.verify` | `caller` | terminate | Fingerprint của một tiền nhiệm không còn khớp source đã đóng băng. | — | — | Mang biên bản thượng nguồn đã làm mới. |
|
|
175
|
+
| `ARTIFACT_MISSING` | `release.deploy` | `provider` | terminate | Digest bất biến không phân giải được, và không được build một cái thay thế rồi gọi nó là cùng release. | — | — | Publish artifact ở đúng digest đó. |
|
|
176
|
+
| `AUTHORIZATION_MISSING` | `release.deploy` | `approval` | terminate | Không grant nào đã khai phủ project, môi trường, target hay hành động deploy này, hoặc nó đã hết hạn lúc target được quan sát. | — | — | Cấp thẩm quyền đã khai và còn hiệu lực. |
|
|
177
|
+
| `CONCURRENT_DRIFT` | `release.deploy` | `deployment` | terminate | Một release không phải release này và cũng không phải release trước nó đã trở nên active giữa lượt chạy. | — | — | Lập kế hoạch lại theo trạng thái quan sát mới. |
|
|
178
|
+
| `CREDENTIAL_UNAVAILABLE` | `release.deploy` | `platform` | terminate | Một handle đã khai không phân giải được qua custody đang có. | — | — | Khôi phục custody; không bao giờ nhập giá trị trực tiếp. |
|
|
179
|
+
| `DOMAIN_UNRECONCILED` | `release.deploy` | `provider` | terminate | Trạng thái domain hay TLS không đưa về đúng khai báo được. | — | — | Sửa trạng thái phía provider, hoặc thẩm quyền với provider. |
|
|
180
|
+
| `HOST_UNAVAILABLE` | `release.deploy` | `provider` | terminate | Host đã khai không chuẩn bị được. | — | — | Cấp một host tới được và đã chuẩn bị. |
|
|
181
|
+
| `MANIFEST_INVALID` | `release.deploy` | `caller` | terminate | Manifest đã kiểm được ghim vào một release khác, và phép thay thế đó chính là cách một image chưa duyệt tới được target đã duyệt. | — | — | Mang một manifest đã kiểm đúng với release này. |
|
|
182
|
+
| `MIGRATION_BLOCKED` | `release.deploy` | `backend` | terminate | Migration đã khai không thể áp một cách an toàn. | — | — | Duyệt một ranh giới migration mà chủ backend áp được. |
|
|
183
|
+
| `RECOVERY_EXHAUSTED` | `release.deploy` | `approval` | fallback | Các hành động đảo ngược được đã duyệt đã cạn. | Đi nhánh rollback: khôi phục rollbackIdentity theo đúng digest của nó, không bao giờ theo tag, và ghi release đã khôi phục dưới ## Fallbacks taken. | — | Cấp thẩm quyền rollback, hoặc duyệt một hành động không an toàn. |
|
|
184
|
+
| `ROLLBACK_IDENTITY_MISSING` | `release.deploy` | `provider` | terminate | Cần rollback nhưng đúng release an toàn của nó không còn tồn tại. | — | — | Khôi phục release an toàn ở đúng digest của nó. |
|
|
185
|
+
| `ROLLOUT_FAILED` | `release.deploy` | `deployment` | fallback | Rollout không đặt được release lên target. | Đi nhánh phục hồi: chỉ áp những hành động đảo ngược được đã duyệt trên cùng release identity, từng cái một, và ghi mỗi lần thử cùng kết quả dưới ## Fallbacks taken. | — | Sửa target hoặc plan rồi roll out lại. |
|
|
186
|
+
| `STEADY_STATE_UNPROVEN` | `release.deploy` | `deployment` | terminate | Cửa sổ ổn định không khép lại trước deadline có chặn trên, và một rollout được giả định không phải một lần deploy. | — | — | Quan sát một chuỗi mới sau khi target hồi phục. |
|
|
187
|
+
| `ADMISSION_MISSING` | `uat.verify` | `quality` | terminate | Lượt soi bề mặt hoặc lượt kiểm chất lượng cho phép UAT sản phẩm đang thiếu, hoặc một trong hai được lấy ở commit khác commit đã ghim. | — | — | Chạy lại admission còn thiếu tại đúng commit đã ghim. |
|
|
188
|
+
| `CANONICAL_WRITE_DENIED` | `uat.verify` | `backend` | terminate | Không ghi rồi đọc lại được thư mục luồng dưới lease độc quyền, hoặc lần ghi sẽ đè lên một hồ sơ lượt chạy đã có. | — | — | Khôi phục quyền ghi trên thư mục luồng, hoặc phát hành dưới một runId mới. |
|
|
189
|
+
| `EVIDENCE_UNAVAILABLE` | `uat.verify` | `runtime` | terminate | Một case không sinh ra capture, không sinh ra ảnh chụp, hoặc không ảnh nào che được ô mật khẩu, nên một làn không có gì để xét. | — | — | Khôi phục phụ thuộc rồi chạy lại case đã đóng băng dưới một runId mới. |
|
|
190
|
+
| `FIXTURE_VIOLATION` | `uat.verify` | `caller` | terminate | Seed, namespace lượt chạy hay phạm vi dọn dẹp không thoả được: seed sẽ tạo ra chính kết quả cần kiểm, hoặc dọn dẹp sẽ với ra ngoài namespace. | — | — | Sửa ranh giới fixture trong seed/records.json. |
|
|
191
|
+
| `LEASE_INVALID` | `uat.verify` | `control-panel` | terminate | Lease độc quyền trên thư mục luồng đã hết hạn, thuộc chỗ khác, hoặc gắn vào lượt chạy, generation hay origin khác. | — | — | Orchestrator cấp lại lease cho đúng lượt chạy này. |
|
|
192
|
+
| `PROVISIONING_UNAVAILABLE` | `uat.verify` | `control-panel` | terminate | Không giải được thông tin đăng nhập UAT niêm phong theo tên, hoặc tài khoản riêng của luồng không tồn tại; nhờ người đăng nhập bị cấm ở mọi nhánh. | — | — | Khôi phục thông tin đăng nhập niêm phong hoặc tài khoản; không bao giờ nhờ người đăng nhập. |
|
|
193
|
+
| `CHECKOUT_DIRTY` | `workspace.bind` | `source` | terminate | Có thứ đang bẩn ngoài các write root đã khai báo. | — | — | Dọn sạch ranh giới, hoặc khai báo write root bao được nó; operator này không bao giờ stash. |
|
|
194
|
+
| `ENDPOINT_AUTHORITY_STALE` | `workspace.bind` | `runtime` | terminate | Ràng buộc endpoint không phải phép chiếu port đóng, hoặc fingerprint của nó đã cũ. | — | — | Tính lại fingerprint thẩm quyền ở phía chủ của nó. |
|
|
195
|
+
| `IDENTITY_UNVERIFIED` | `workspace.bind` | `identity` | terminate | Định danh máy hoặc roster credential đã mã hoá của nó thiếu hoặc cũ. | — | — | Xác minh định danh máy và niêm phong roster của nó. |
|
|
196
|
+
| `ROUTE_MISMATCH` | `workspace.bind` | `workspace` | terminate | Route đã hydrate mâu thuẫn với route portable đóng, hoặc thuộc về một Source khác. | — | — | Sửa lại phần hydrate. |
|
|
197
|
+
| `ROUTE_UNDECLARED` | `workspace.bind` | `workspace` | terminate | Không khai báo portable nào gọi tên project và role này. | — | — | Khai báo route; operator này không bao giờ tự sửa. |
|
|
198
|
+
| `ROUTE_UNHYDRATED` | `workspace.bind` | `workspace` | terminate | Khai báo có tồn tại nhưng không route local nào chiếu nó xuống máy này. | — | — | Hydrate route trên máy này. |
|
|
199
|
+
| `RUNTIME_NOT_READY` | `workspace.bind` | `runtime` | terminate | Registry chủ runtime thiếu, cũ hoặc chưa sẵn sàng trong khi người gọi phải tiêu thụ nó. | — | — | Nêu một yêu cầu phối hợp tới chủ đã đăng ký và chờ một generation sẵn sàng. |
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 9,
|
|
3
|
+
"note": "Stop codes only architecture.decide emits. Same entry shape as operators/errors.json, scope implicit. Shared codes (INVALID_INPUT, SOURCE_DRIFT, NO_PROGRESS, EVIDENCE_MISSING) come from operators/errors.json.",
|
|
4
|
+
"codes": {
|
|
5
|
+
"CURRENT_STATE_UNOBSERVED": {
|
|
6
|
+
"domain": "workspace",
|
|
7
|
+
"disposition": "terminate",
|
|
8
|
+
"meaning": {
|
|
9
|
+
"en": "The system today could not be read at the frozen head.",
|
|
10
|
+
"vi": "Không đọc được hiện trạng hệ thống ở head đã đóng băng."
|
|
11
|
+
},
|
|
12
|
+
"resume": {
|
|
13
|
+
"en": "Fix the route or the checkout.",
|
|
14
|
+
"vi": "Sửa route hoặc checkout."
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"BUSINESS_AUTHORITY_REQUIRED": {
|
|
18
|
+
"domain": "business",
|
|
19
|
+
"disposition": "terminate",
|
|
20
|
+
"meaning": {
|
|
21
|
+
"en": "The published business head the architecture must keep is missing or stale.",
|
|
22
|
+
"vi": "Head nghiệp vụ đã publish mà kiến trúc phải giữ đang thiếu hoặc cũ."
|
|
23
|
+
},
|
|
24
|
+
"resume": {
|
|
25
|
+
"en": "Run business.decide first.",
|
|
26
|
+
"vi": "Chạy business.decide trước."
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"CONSTRAINT_CONTRADICTION": {
|
|
30
|
+
"domain": "caller",
|
|
31
|
+
"disposition": "terminate",
|
|
32
|
+
"meaning": {
|
|
33
|
+
"en": "Two fixed-intent constraints cannot both hold.",
|
|
34
|
+
"vi": "Hai ràng buộc fixed-intent không thể cùng đúng."
|
|
35
|
+
},
|
|
36
|
+
"resume": {
|
|
37
|
+
"en": "A person resolves the constraints.",
|
|
38
|
+
"vi": "Người sửa ràng buộc."
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"NO_VIABLE_ALTERNATIVE": {
|
|
42
|
+
"domain": "caller",
|
|
43
|
+
"disposition": "terminate",
|
|
44
|
+
"meaning": {
|
|
45
|
+
"en": "No alternative survives the frozen constraints, or the only alternative fails an attack.",
|
|
46
|
+
"vi": "Không phương án nào qua được ràng buộc, hoặc phương án duy nhất chết dưới một đòn tấn công."
|
|
47
|
+
},
|
|
48
|
+
"resume": {
|
|
49
|
+
"en": "Relax a constraint or stop.",
|
|
50
|
+
"vi": "Nới ràng buộc hoặc dừng."
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"CHOICE_REQUIRED": {
|
|
54
|
+
"domain": "caller",
|
|
55
|
+
"disposition": "fallback",
|
|
56
|
+
"meaning": {
|
|
57
|
+
"en": "Several alternatives remain material after assessment.",
|
|
58
|
+
"vi": "Nhiều phương án còn material sau khi chấm."
|
|
59
|
+
},
|
|
60
|
+
"fallback": {
|
|
61
|
+
"en": "Select the alternative with the highest score across tradeoffAxes; on a tie, the one that changes the fewest stack components; record the score table under ## Decision.",
|
|
62
|
+
"vi": "Chọn phương án điểm cao nhất theo tradeoffAxes; hòa thì chọn phương án đổi ít component stack nhất; ghi bảng điểm dưới ## Decision."
|
|
63
|
+
},
|
|
64
|
+
"unless": {
|
|
65
|
+
"param": "selectionPolicy",
|
|
66
|
+
"equals": "approval-required",
|
|
67
|
+
"then": "terminate"
|
|
68
|
+
},
|
|
69
|
+
"resume": {
|
|
70
|
+
"en": "The person supplies approval.",
|
|
71
|
+
"vi": "Người nhập approval."
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"COMPATIBILITY_UNVERIFIED": {
|
|
75
|
+
"domain": "self",
|
|
76
|
+
"disposition": "fallback",
|
|
77
|
+
"meaning": {
|
|
78
|
+
"en": "A retained stack component has no compatibility evidence on at least one axis.",
|
|
79
|
+
"vi": "Một component stack giữ lại không có bằng chứng tương thích ở ít nhất một trục."
|
|
80
|
+
},
|
|
81
|
+
"fallback": {
|
|
82
|
+
"en": "Mark the component replaced-candidate in the stack delta and list the unverified axes under Handoff as unknown.",
|
|
83
|
+
"vi": "Đánh dấu component là replaced-candidate trong stack delta và liệt kê các trục chưa kiểm vào Handoff dạng unknown."
|
|
84
|
+
},
|
|
85
|
+
"resume": {
|
|
86
|
+
"en": "Add the compatibility evidence.",
|
|
87
|
+
"vi": "Bổ sung bằng chứng tương thích."
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
"DATA_OWNERSHIP_UNASSIGNED": {
|
|
91
|
+
"domain": "self",
|
|
92
|
+
"disposition": "terminate",
|
|
93
|
+
"meaning": {
|
|
94
|
+
"en": "A physical store has no owning boundary.",
|
|
95
|
+
"vi": "Một store vật lý không có boundary sở hữu."
|
|
96
|
+
},
|
|
97
|
+
"resume": {
|
|
98
|
+
"en": "Assign the owner.",
|
|
99
|
+
"vi": "Gán chủ sở hữu."
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"CRITIQUE_UNRESOLVED": {
|
|
103
|
+
"domain": "self",
|
|
104
|
+
"disposition": "terminate",
|
|
105
|
+
"meaning": {
|
|
106
|
+
"en": "An attack on the selected alternative has no resolution.",
|
|
107
|
+
"vi": "Một đòn tấn công vào phương án đã chọn không có lời giải."
|
|
108
|
+
},
|
|
109
|
+
"resume": {
|
|
110
|
+
"en": "Resolve the attack or select differently.",
|
|
111
|
+
"vi": "Giải quyết đòn tấn công hoặc chọn khác."
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 9,
|
|
3
|
+
"id": "architecture.decide",
|
|
4
|
+
"domain": "architecture",
|
|
5
|
+
"job": "Decide one architecture with its tech stack, system boundaries, and data ownership, and prove it against the observed current state, the rejected alternatives, verified compatibility, and an independent critique.",
|
|
6
|
+
"package": "operator.md",
|
|
7
|
+
"errors": "errors.json",
|
|
8
|
+
"validator": "validate.mjs",
|
|
9
|
+
"selfTest": "self-test.mjs",
|
|
10
|
+
"resources": {
|
|
11
|
+
"profile": "sol-fresh",
|
|
12
|
+
"grammarBound": false,
|
|
13
|
+
"tools": {
|
|
14
|
+
"@tools/fileread": "context-aliases",
|
|
15
|
+
"@tools/git": "read",
|
|
16
|
+
"@tools/websearch": "bounded",
|
|
17
|
+
"@tools/visualize": "html"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|