@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,68 @@
|
|
|
1
|
+
# frontend-direction-decision — direction-id
|
|
2
|
+
|
|
3
|
+
## Decision
|
|
4
|
+
|
|
5
|
+
| Field | Value |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| Direction id | `direction-id` |
|
|
8
|
+
| Target | `/route/or/target-id` |
|
|
9
|
+
| Intent | `modify` |
|
|
10
|
+
| Change level | `reconstruct` |
|
|
11
|
+
| Owner ceiling | `surface-and-nested-layouts` |
|
|
12
|
+
| Classification | `dominant` |
|
|
13
|
+
| Selection policy | `automatic` |
|
|
14
|
+
| Selected candidate | `candidate-id` |
|
|
15
|
+
|
|
16
|
+
## Observed
|
|
17
|
+
|
|
18
|
+
| Item | Evidence |
|
|
19
|
+
| --- | --- |
|
|
20
|
+
| what the target does today | `app/route/page.tsx:1-40@0f1e2d3` |
|
|
21
|
+
|
|
22
|
+
## UI contract
|
|
23
|
+
|
|
24
|
+
| Element | Kind | Responsibility |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| `region-id` | region | what this region answers for the actor |
|
|
27
|
+
| choose a plan | action | what the actor does and how the surface answers |
|
|
28
|
+
| pending | state | what the surface says while the action settles |
|
|
29
|
+
| narrow | responsive | what the layout does below the breakpoint |
|
|
30
|
+
|
|
31
|
+
## Coverage
|
|
32
|
+
|
|
33
|
+
| Concern | Enumerated |
|
|
34
|
+
| --- | --- |
|
|
35
|
+
| Actions | every action with its pointer route, keyboard route and settled pending paths |
|
|
36
|
+
| Regions | every region with one idiom and one published composition |
|
|
37
|
+
| States | every meaning with its own carrier |
|
|
38
|
+
| Responsive | every branch with one owner |
|
|
39
|
+
|
|
40
|
+
## References
|
|
41
|
+
|
|
42
|
+
| Source | URL | Limitation |
|
|
43
|
+
| --- | --- | --- |
|
|
44
|
+
| what the reference showed | https://example.com/pattern | what it does not settle; no rows when the person supplied references or the change level is refine |
|
|
45
|
+
|
|
46
|
+
## Images
|
|
47
|
+
|
|
48
|
+
| Slot | Why | Claim | File |
|
|
49
|
+
| --- | --- | --- | --- |
|
|
50
|
+
| hero | the region reads empty without a subject | the one claim of the promise the image encodes | `response/artifacts/images/hero.png` |
|
|
51
|
+
|
|
52
|
+
## Falsification
|
|
53
|
+
|
|
54
|
+
| Attack | Candidate | Verdict | Evidence |
|
|
55
|
+
| --- | --- | --- | --- |
|
|
56
|
+
| content stress | `candidate-id` | holds | the widest plan name still fits the decision bar |
|
|
57
|
+
|
|
58
|
+
## Why not the others
|
|
59
|
+
|
|
60
|
+
| Candidate | Rejected because |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `other-candidate-id` | which attack it failed; no rows when one candidate was formed |
|
|
63
|
+
|
|
64
|
+
## Fallbacks taken
|
|
65
|
+
|
|
66
|
+
| Code | Action |
|
|
67
|
+
| --- | --- |
|
|
68
|
+
| `CODE` | what the fallback did; no rows when none was taken |
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "frontend-presentation-resolution",
|
|
3
|
+
"title": "^# frontend-presentation-resolution — [a-z0-9][a-z0-9-]*$",
|
|
4
|
+
"sections": [
|
|
5
|
+
{ "heading": "^## Owner map$", "table": "| Node | Property | Owner | Rule |", "minRows": 1, "cell": { "Node": "^`[^`]+`$", "Owner": "^(app|grammar)$", "Rule": "^`[A-Z][A-Z0-9-]*-[0-9]+`$" } },
|
|
6
|
+
{ "heading": "^## Rules chosen$", "table": "| Node | Rule | Class | Condition |", "minRows": 1, "cell": { "Node": "^`[^`]+`$", "Rule": "^`[A-Z][A-Z0-9-]*-[0-9]+`$", "Class": "^`[^`]+`$", "Condition": "\\S" } },
|
|
7
|
+
{ "heading": "^## Removed$", "table": "| Node | Class | Because |", "cell": { "Node": "^`[^`]+`$", "Because": "^(reimplements an owned relationship|overrides Grammar anatomy|off the closed scale)$" } },
|
|
8
|
+
{ "heading": "^## Gaps$", "table": "| Node | Property | Missing path |", "cell": { "Node": "^`[^`]+`$", "Missing path": "\\S" } },
|
|
9
|
+
{ "heading": "^## Fallbacks taken$", "table": "| Code | Action |", "cell": { "Code": "^`[A-Z][A-Z0-9_]+`$" } }
|
|
10
|
+
]
|
|
11
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frontend-presentation-resolution — target-id
|
|
2
|
+
|
|
3
|
+
## Owner map
|
|
4
|
+
|
|
5
|
+
| Node | Property | Owner | Rule |
|
|
6
|
+
| --- | --- | --- | --- |
|
|
7
|
+
| `body>main>div[0]` | gap | app | `GAP-5` |
|
|
8
|
+
| `body>main>div[0]>section` | padding | grammar | `PADDING-4` |
|
|
9
|
+
|
|
10
|
+
## Rules chosen
|
|
11
|
+
|
|
12
|
+
| Node | Rule | Class | Condition |
|
|
13
|
+
| --- | --- | --- | --- |
|
|
14
|
+
| `body>main>div[0]` | `GAP-5` | `gap-6` | the published case the observed condition matched |
|
|
15
|
+
|
|
16
|
+
## Removed
|
|
17
|
+
|
|
18
|
+
| Node | Class | Because |
|
|
19
|
+
| --- | --- | --- |
|
|
20
|
+
| `body>main>div[0]>section` | `p-4` | reimplements an owned relationship |
|
|
21
|
+
|
|
22
|
+
## Gaps
|
|
23
|
+
|
|
24
|
+
| Node | Property | Missing path |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| `body>aside` | gap | Common exposes no public path for the compact identity pair; no rows when none was found |
|
|
27
|
+
|
|
28
|
+
## Fallbacks taken
|
|
29
|
+
|
|
30
|
+
| Code | Action |
|
|
31
|
+
| --- | --- |
|
|
32
|
+
| `CODE` | what the fallback did; no rows when none was taken |
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "frontend-source-application",
|
|
3
|
+
"title": "^# frontend-source-application — [a-z0-9][a-z0-9-]*$",
|
|
4
|
+
"sections": [
|
|
5
|
+
{ "heading": "^## Binding$", "table": "| Field | Value |", "rows": ["Target", "Mode", "Branch", "Base", "Commit"], "cell": { "Value": "\\S" } },
|
|
6
|
+
{ "heading": "^## Projection$", "table": "| Path | Change | Classes | Claims | Why |", "minRows": 1, "cell": { "Path": "^`[^`]+`$", "Change": "^(created|modified|deleted|unchanged)$", "Why": "\\S" } },
|
|
7
|
+
{ "heading": "^## Rejections$", "table": "| Path | Value | Because |", "cell": { "Path": "^`[^`]+`$", "Because": "^(outside the declared write set|outside the owner root|absent from the resolution inventory|the committed tree is not the resolved tree)$" } },
|
|
8
|
+
{ "heading": "^## Fallbacks taken$", "table": "| Code | Action |", "cell": { "Code": "^`[A-Z][A-Z0-9_]+`$" } }
|
|
9
|
+
]
|
|
10
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frontend-source-application — target-id
|
|
2
|
+
|
|
3
|
+
## Binding
|
|
4
|
+
|
|
5
|
+
| Field | Value |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| Target | `target-id` |
|
|
8
|
+
| Mode | `apply` |
|
|
9
|
+
| Branch | `session/s-2026-09-03-1` |
|
|
10
|
+
| Base | `0f1e2d3c4b5a69788796a5b4c3d2e1f009182736` |
|
|
11
|
+
| Commit | `9a8b7c6d5e4f30211203344556677889900aabbc` |
|
|
12
|
+
|
|
13
|
+
## Projection
|
|
14
|
+
|
|
15
|
+
| Path | Change | Classes | Claims | Why |
|
|
16
|
+
| --- | --- | --- | --- | --- |
|
|
17
|
+
| `app/target/page.tsx` | modified | `gap-6` | `GAP-5` | the region stack takes the resolved gap |
|
|
18
|
+
| `app/target/canvas.tsx` | created | — | — | an application-owned leaf carrying its contract, never its logic |
|
|
19
|
+
|
|
20
|
+
## Rejections
|
|
21
|
+
|
|
22
|
+
| Path | Value | Because |
|
|
23
|
+
| --- | --- | --- |
|
|
24
|
+
| `app/shell/layout.tsx` | `gap-8` | outside the declared write set |
|
|
25
|
+
|
|
26
|
+
## Fallbacks taken
|
|
27
|
+
|
|
28
|
+
| Code | Action |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| `CODE` | what the fallback did; no rows when none was taken |
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "frontend-surface-audit",
|
|
3
|
+
"title": "^# frontend-surface-audit — [a-z0-9][a-z0-9-]*$",
|
|
4
|
+
"sections": [
|
|
5
|
+
{
|
|
6
|
+
"heading": "^## Matrix$",
|
|
7
|
+
"table": "| Matrix | Viewport | Scheme | State | Screenshot |",
|
|
8
|
+
"minRows": 1,
|
|
9
|
+
"cell": {
|
|
10
|
+
"Matrix": "^`[a-z0-9][a-z0-9-]*`$",
|
|
11
|
+
"Viewport": "^[0-9]{3,4}x[0-9]{3,4}$",
|
|
12
|
+
"Scheme": "^(light|dark)$",
|
|
13
|
+
"Screenshot": "^`response/artifacts/[A-Za-z0-9_.-]+[.]png`$"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"heading": "^## Verdicts by owner$",
|
|
18
|
+
"table": "| Matrix | Owner | Node | Rule | Measured | Verdict |",
|
|
19
|
+
"minRows": 1,
|
|
20
|
+
"cell": {
|
|
21
|
+
"Owner": "^(app|grammar)$",
|
|
22
|
+
"Node": "^`[^`]+`$",
|
|
23
|
+
"Rule": "^`[A-Z][A-Z0-9-]*-[0-9]+`$",
|
|
24
|
+
"Verdict": "^(pass|fail)$",
|
|
25
|
+
"Matrix": "^`[a-z0-9][a-z0-9-]*`$"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"heading": "^## Regressions$",
|
|
30
|
+
"table": "| Matrix | Node | Rule | Measured | Routes to |",
|
|
31
|
+
"cell": {
|
|
32
|
+
"Node": "^`[^`]+`$",
|
|
33
|
+
"Routes to": "^(resolve|grammar-gap)$",
|
|
34
|
+
"Matrix": "^`[a-z0-9][a-z0-9-]*`$"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"heading": "^## Grammar gaps$",
|
|
39
|
+
"table": "| Component | Rule | What the family lacks |",
|
|
40
|
+
"cell": {
|
|
41
|
+
"What the family lacks": "\\S"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"heading": "^## Fallbacks taken$",
|
|
46
|
+
"table": "| Code | Action |",
|
|
47
|
+
"cell": {
|
|
48
|
+
"Code": "^`[A-Z][A-Z0-9_]+`$"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frontend-surface-audit — target-id
|
|
2
|
+
|
|
3
|
+
## Matrix
|
|
4
|
+
|
|
5
|
+
| Matrix | Viewport | Scheme | State | Screenshot |
|
|
6
|
+
| --- | --- | --- | --- | --- |
|
|
7
|
+
| `wide-light-loaded` | 1440x900 | light | loaded | `response/artifacts/wide-light-loaded.png` |
|
|
8
|
+
|
|
9
|
+
## Verdicts by owner
|
|
10
|
+
|
|
11
|
+
| Matrix | Owner | Node | Rule | Measured | Verdict |
|
|
12
|
+
| --- | --- | --- | --- | --- | --- |
|
|
13
|
+
| `wide-light-loaded` | app | `body>main` | `GAP-5` | 1.5rem | pass |
|
|
14
|
+
| `wide-light-loaded` | grammar | `body>main>section` | `PADDING-4` | 1rem | pass |
|
|
15
|
+
|
|
16
|
+
## Regressions
|
|
17
|
+
|
|
18
|
+
| Matrix | Node | Rule | Measured | Routes to |
|
|
19
|
+
| --- | --- | --- | --- | --- |
|
|
20
|
+
| `narrow-light-loaded` | `body>main` | `GAP-5` | 1rem | resolve |
|
|
21
|
+
|
|
22
|
+
## Grammar gaps
|
|
23
|
+
|
|
24
|
+
| Component | Rule | What the family lacks |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| `SurfaceCard` | `PADDING-4` | the component renders its own inset one step low; no rows when the family holds |
|
|
27
|
+
|
|
28
|
+
## Fallbacks taken
|
|
29
|
+
|
|
30
|
+
| Code | Action |
|
|
31
|
+
| --- | --- |
|
|
32
|
+
| `CODE` | what the fallback did; no rows when none was taken |
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "kind:gate-result",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": [
|
|
6
|
+
"gate",
|
|
7
|
+
"required",
|
|
8
|
+
"sourceHead",
|
|
9
|
+
"sessionBranch",
|
|
10
|
+
"predecessorCommit",
|
|
11
|
+
"observedAt",
|
|
12
|
+
"commandRef",
|
|
13
|
+
"configRef",
|
|
14
|
+
"status",
|
|
15
|
+
"exitCode",
|
|
16
|
+
"evidenceRef",
|
|
17
|
+
"classification",
|
|
18
|
+
"sonarScope",
|
|
19
|
+
"debt",
|
|
20
|
+
"statement"
|
|
21
|
+
],
|
|
22
|
+
"properties": {
|
|
23
|
+
"gate": { "$ref": "#/$defs/gate" },
|
|
24
|
+
"required": { "type": "boolean" },
|
|
25
|
+
"sourceHead": { "$ref": "#/$defs/gitHead" },
|
|
26
|
+
"sessionBranch": { "type": "string", "pattern": "^session/[A-Za-z0-9._-]+$" },
|
|
27
|
+
"predecessorCommit": { "$ref": "#/$defs/gitHead" },
|
|
28
|
+
"observedAt": { "type": "string", "format": "date-time" },
|
|
29
|
+
"commandRef": { "type": "string", "minLength": 1 },
|
|
30
|
+
"configRef": { "type": "string", "minLength": 1 },
|
|
31
|
+
"status": { "enum": ["pass", "fail", "external-blocker", "skipped-not-requested"] },
|
|
32
|
+
"exitCode": { "oneOf": [{ "type": "integer" }, { "type": "null" }] },
|
|
33
|
+
"evidenceRef": { "oneOf": [{ "type": "string", "minLength": 1 }, { "type": "null" }] },
|
|
34
|
+
"classification": {
|
|
35
|
+
"oneOf": [
|
|
36
|
+
{ "enum": ["in-boundary", "boundary-drift", "flaky", "external-blocker"] },
|
|
37
|
+
{ "type": "null" }
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"sonarScope": { "oneOf": [{ "enum": ["new-code", "overall"] }, { "type": "null" }] },
|
|
41
|
+
"debt": {
|
|
42
|
+
"oneOf": [
|
|
43
|
+
{ "type": "null" },
|
|
44
|
+
{
|
|
45
|
+
"type": "object",
|
|
46
|
+
"additionalProperties": false,
|
|
47
|
+
"required": ["debtId", "approvalRef", "ownerRef", "expiresAt", "statement"],
|
|
48
|
+
"properties": {
|
|
49
|
+
"debtId": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
|
|
50
|
+
"approvalRef": { "type": "string", "minLength": 1 },
|
|
51
|
+
"ownerRef": { "type": "string", "minLength": 1 },
|
|
52
|
+
"expiresAt": { "type": "string", "format": "date-time" },
|
|
53
|
+
"statement": { "type": "string", "minLength": 1 }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"statement": { "type": "string", "minLength": 1 }
|
|
59
|
+
},
|
|
60
|
+
"$defs": {
|
|
61
|
+
"gate": { "enum": ["format", "lint", "typecheck", "build", "unit-coverage", "integration", "e2e", "sonar"] },
|
|
62
|
+
"gitHead": { "type": "string", "pattern": "^[0-9a-f]{40}$" }
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "git-publication",
|
|
3
|
+
"title": "^# git-publication — [a-z][a-z0-9.-]*$",
|
|
4
|
+
"sections": [
|
|
5
|
+
{
|
|
6
|
+
"heading": "^## Binding$",
|
|
7
|
+
"table": "| Field | Value |",
|
|
8
|
+
"rows": [
|
|
9
|
+
"Operator",
|
|
10
|
+
"Step",
|
|
11
|
+
"Project",
|
|
12
|
+
"Boundary",
|
|
13
|
+
"Approval",
|
|
14
|
+
"Route receipt",
|
|
15
|
+
"Worktree branches",
|
|
16
|
+
"Mutation branch",
|
|
17
|
+
"Frozen head"
|
|
18
|
+
],
|
|
19
|
+
"cell": {
|
|
20
|
+
"Value": "\\S"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"heading": "^## Publication$",
|
|
25
|
+
"table": "| Field | Value |",
|
|
26
|
+
"rows": [
|
|
27
|
+
"Remote",
|
|
28
|
+
"Ref",
|
|
29
|
+
"Mode",
|
|
30
|
+
"Forced",
|
|
31
|
+
"Session branch",
|
|
32
|
+
"Target branch",
|
|
33
|
+
"Merge",
|
|
34
|
+
"Verified commit",
|
|
35
|
+
"Cleanup"
|
|
36
|
+
],
|
|
37
|
+
"cell": {
|
|
38
|
+
"Value": "\\S"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"heading": "^## Published heads$",
|
|
43
|
+
"table": "| Checkout | Branch | Head | Previous remote head | Commits |",
|
|
44
|
+
"minRows": 1,
|
|
45
|
+
"cell": {
|
|
46
|
+
"Head": "^`[0-9a-f]{40}`$",
|
|
47
|
+
"Commits": "^[1-9][0-9]*$"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"heading": "^## Hooks$",
|
|
52
|
+
"table": "| Hook | Reference | Outcome |",
|
|
53
|
+
"minRows": 1,
|
|
54
|
+
"cell": {
|
|
55
|
+
"Hook": "^`(pre-commit|commit-msg|pre-push)`$",
|
|
56
|
+
"Outcome": "^(passed|failed)$"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"heading": "^## Continuation tag$",
|
|
61
|
+
"table": "| Field | Value |",
|
|
62
|
+
"rows": [
|
|
63
|
+
"Tag",
|
|
64
|
+
"Ref",
|
|
65
|
+
"Head"
|
|
66
|
+
],
|
|
67
|
+
"cell": {
|
|
68
|
+
"Value": "\\S"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"heading": "^## Findings$",
|
|
73
|
+
"table": "| Code | Subject | Statement |",
|
|
74
|
+
"minRows": 1,
|
|
75
|
+
"cell": {
|
|
76
|
+
"Code": "^`(HOOK_ENFORCED|BOUNDARY_CLEAN|REMOTE_FAST_FORWARDED|REMOTE_REF_CREATED|CONTINUATION_TAG_PUBLISHED)`$",
|
|
77
|
+
"Subject": "\\S",
|
|
78
|
+
"Statement": "\\S"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# git-publication — api.core
|
|
2
|
+
|
|
3
|
+
One paragraph: which boundary was published, from which heads, onto which ref, and under which
|
|
4
|
+
hooks. Written by `git.publish` as `response/response.md`. It proves that exactly these heads reached
|
|
5
|
+
exactly this ref; it carries no verdict about the change itself.
|
|
6
|
+
|
|
7
|
+
## Binding
|
|
8
|
+
|
|
9
|
+
| Field | Value |
|
|
10
|
+
| --- | --- |
|
|
11
|
+
| Operator | `git.publish` |
|
|
12
|
+
| Step | `step-1/parallel-1` |
|
|
13
|
+
| Project | `starci-academy` |
|
|
14
|
+
| Boundary | `api.core` |
|
|
15
|
+
| Approval | `@worktrees/businesses/features/api-core/model.json#approval` |
|
|
16
|
+
| Route receipt | `step-1/parallel-1/response/response.md` |
|
|
17
|
+
| Worktree branches | forbidden |
|
|
18
|
+
| Mutation branch | `mtp` |
|
|
19
|
+
| Frozen head | `1111111111111111111111111111111111111111` |
|
|
20
|
+
|
|
21
|
+
## Publication
|
|
22
|
+
|
|
23
|
+
| Field | Value |
|
|
24
|
+
| --- | --- |
|
|
25
|
+
| Remote | origin |
|
|
26
|
+
| Ref | `refs/heads/mtp` |
|
|
27
|
+
| Mode | fast-forward-only |
|
|
28
|
+
| Forced | no |
|
|
29
|
+
| Session branch | `session/s-2026-01-10` |
|
|
30
|
+
| Target branch | `mtp` |
|
|
31
|
+
| Merge | fast-forward |
|
|
32
|
+
| Verified commit | `1111111111111111111111111111111111111111` |
|
|
33
|
+
| Cleanup | worktree and session branch removed |
|
|
34
|
+
|
|
35
|
+
## Published heads
|
|
36
|
+
|
|
37
|
+
| Checkout | Branch | Head | Previous remote head | Commits |
|
|
38
|
+
| --- | --- | --- | --- | --- |
|
|
39
|
+
| `@workspaces/be` | `mtp` | `1111111111111111111111111111111111111111` | `2222222222222222222222222222222222222222` | 4 |
|
|
40
|
+
|
|
41
|
+
## Hooks
|
|
42
|
+
|
|
43
|
+
| Hook | Reference | Outcome |
|
|
44
|
+
| --- | --- | --- |
|
|
45
|
+
| `pre-push` | `.husky/pre-push` | passed |
|
|
46
|
+
|
|
47
|
+
## Continuation tag
|
|
48
|
+
|
|
49
|
+
| Field | Value |
|
|
50
|
+
| --- | --- |
|
|
51
|
+
| Tag | — |
|
|
52
|
+
| Ref | — |
|
|
53
|
+
| Head | — |
|
|
54
|
+
|
|
55
|
+
## Findings
|
|
56
|
+
|
|
57
|
+
| Code | Subject | Statement |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| `HOOK_ENFORCED` | `pre-push` | the hook ran and was not bypassed |
|
|
60
|
+
| `BOUNDARY_CLEAN` | `api.core` | nothing dirty lay outside the published boundary |
|
|
61
|
+
| `REMOTE_FAST_FORWARDED` | `@workspaces/be` | the ref advanced from the remote head it carried |
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "independent-critique",
|
|
3
|
+
"title": "^# independent-critique — [a-z0-9][a-z0-9-]*$",
|
|
4
|
+
"sections": [
|
|
5
|
+
{ "heading": "^## Execution$", "table": "| Field | Value |", "rows": ["Reviewer execution", "Inherited turns", "Given"], "cell": { "Value": "\\S" } },
|
|
6
|
+
{ "heading": "^## Attacks$", "table": "| Adverse path | Attack | Resolution | Verdict |", "exactRows": 8, "rows": ["partial-failure", "retry-idempotency", "concurrency", "stale-state", "deletion", "recovery", "dependency-outage", "rollback"], "cell": { "Attack": "\\S", "Resolution": "\\S", "Verdict": "^(holds|fails)$" } },
|
|
7
|
+
{ "heading": "^## Verdict$", "table": "| Field | Value |", "rows": ["Selection"], "cell": { "Value": "^(keep|return)$" } }
|
|
8
|
+
]
|
|
9
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# independent-critique — decision-id
|
|
2
|
+
|
|
3
|
+
## Execution
|
|
4
|
+
|
|
5
|
+
| Field | Value |
|
|
6
|
+
| --- | --- |
|
|
7
|
+
| Reviewer execution | the fresh execution's own reference, never the author's |
|
|
8
|
+
| Inherited turns | none |
|
|
9
|
+
| Given | `response/data/stack-model.json` and the claims it makes; no rationale |
|
|
10
|
+
|
|
11
|
+
## Attacks
|
|
12
|
+
|
|
13
|
+
| Adverse path | Attack | Resolution | Verdict |
|
|
14
|
+
| --- | --- | --- | --- |
|
|
15
|
+
| partial-failure | what breaks when one side completes | how the selected design survives it | holds |
|
|
16
|
+
| retry-idempotency | what a repeated call does | how the design makes it idempotent | holds |
|
|
17
|
+
| concurrency | what two writers do at once | how ownership serialises them | holds |
|
|
18
|
+
| stale-state | what a reader sees after a change | how staleness is bounded | holds |
|
|
19
|
+
| deletion | what deleting the owner's data leaves behind | how readers cope | holds |
|
|
20
|
+
| recovery | what restoring from backup loses | what the restore path proves | holds |
|
|
21
|
+
| dependency-outage | what an unavailable dependency does | how the boundary degrades | holds |
|
|
22
|
+
| rollback | what undoing the migration costs | the rollback step and its proof | holds |
|
|
23
|
+
|
|
24
|
+
## Verdict
|
|
25
|
+
|
|
26
|
+
| Field | Value |
|
|
27
|
+
| --- | --- |
|
|
28
|
+
| Selection | keep |
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "kind:inventory",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["treeFingerprint", "classNames", "ruleIds", "gaps"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"treeFingerprint": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" },
|
|
8
|
+
"classNames": {
|
|
9
|
+
"type": "array",
|
|
10
|
+
"maxItems": 512,
|
|
11
|
+
"uniqueItems": true,
|
|
12
|
+
"items": { "type": "string", "minLength": 1, "pattern": "^[A-Za-z0-9_:./>\\[\\]-]+$" }
|
|
13
|
+
},
|
|
14
|
+
"ruleIds": {
|
|
15
|
+
"type": "array",
|
|
16
|
+
"maxItems": 256,
|
|
17
|
+
"uniqueItems": true,
|
|
18
|
+
"items": { "type": "string", "pattern": "^[A-Z][A-Z0-9-]*-[0-9]+$" }
|
|
19
|
+
},
|
|
20
|
+
"gaps": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"maxItems": 128,
|
|
23
|
+
"items": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"additionalProperties": false,
|
|
26
|
+
"required": ["nodePath", "property", "missingPath"],
|
|
27
|
+
"properties": {
|
|
28
|
+
"nodePath": { "type": "string", "minLength": 1 },
|
|
29
|
+
"property": { "type": "string", "minLength": 1 },
|
|
30
|
+
"missingPath": { "type": "string", "minLength": 1 }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$id": "kind:model",
|
|
3
|
+
"title": "The one published head of one feature: the promise, its lineage, and the fingerprints the head is frozen behind.",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"additionalProperties": false,
|
|
6
|
+
"required": [
|
|
7
|
+
"featureId",
|
|
8
|
+
"mode",
|
|
9
|
+
"headRef",
|
|
10
|
+
"headFingerprint",
|
|
11
|
+
"state",
|
|
12
|
+
"promise",
|
|
13
|
+
"lineage",
|
|
14
|
+
"claimsFingerprint",
|
|
15
|
+
"coverageFingerprint",
|
|
16
|
+
"reconciliation"
|
|
17
|
+
],
|
|
18
|
+
"properties": {
|
|
19
|
+
"featureId": { "$ref": "#/$defs/identifier" },
|
|
20
|
+
"mode": { "enum": ["model", "reconcile"] },
|
|
21
|
+
"headRef": { "type": "string", "minLength": 1, "maxLength": 1024 },
|
|
22
|
+
"headFingerprint": { "$ref": "#/$defs/fingerprint" },
|
|
23
|
+
"state": { "$ref": "#/$defs/authorityState" },
|
|
24
|
+
"promise": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"additionalProperties": false,
|
|
27
|
+
"required": ["statement", "actorStatement", "eligibilityStatement"],
|
|
28
|
+
"properties": {
|
|
29
|
+
"statement": { "type": "string", "minLength": 1, "maxLength": 4096 },
|
|
30
|
+
"actorStatement": { "type": "string", "minLength": 1, "maxLength": 4096 },
|
|
31
|
+
"eligibilityStatement": { "type": "string", "minLength": 1, "maxLength": 4096 }
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"lineage": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"additionalProperties": false,
|
|
37
|
+
"required": ["previousHeadRef", "previousState", "transition"],
|
|
38
|
+
"properties": {
|
|
39
|
+
"previousHeadRef": {
|
|
40
|
+
"oneOf": [{ "type": "string", "minLength": 1, "maxLength": 1024 }, { "type": "null" }]
|
|
41
|
+
},
|
|
42
|
+
"previousState": {
|
|
43
|
+
"oneOf": [{ "$ref": "#/$defs/authorityState" }, { "type": "null" }]
|
|
44
|
+
},
|
|
45
|
+
"transition": {
|
|
46
|
+
"enum": [
|
|
47
|
+
"absent->pending",
|
|
48
|
+
"pending->in-progress",
|
|
49
|
+
"pending->rejected",
|
|
50
|
+
"in-progress->implemented",
|
|
51
|
+
"in-progress->rejected",
|
|
52
|
+
"implemented->in-progress",
|
|
53
|
+
"implemented->rejected",
|
|
54
|
+
"rejected->pending"
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"claimsFingerprint": { "$ref": "#/$defs/fingerprint" },
|
|
60
|
+
"coverageFingerprint": {
|
|
61
|
+
"oneOf": [{ "$ref": "#/$defs/fingerprint" }, { "type": "null" }]
|
|
62
|
+
},
|
|
63
|
+
"reconciliation": {
|
|
64
|
+
"oneOf": [{ "$ref": "#/$defs/reconciliation" }, { "type": "null" }]
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
"$defs": {
|
|
68
|
+
"identifier": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
|
|
69
|
+
"fingerprint": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" },
|
|
70
|
+
"authorityState": { "enum": ["pending", "in-progress", "implemented", "rejected"] },
|
|
71
|
+
"reconciliation": {
|
|
72
|
+
"type": "object",
|
|
73
|
+
"additionalProperties": false,
|
|
74
|
+
"required": ["deliveredEvidenceRefs", "discrepancies"],
|
|
75
|
+
"properties": {
|
|
76
|
+
"deliveredEvidenceRefs": {
|
|
77
|
+
"type": "array",
|
|
78
|
+
"minItems": 1,
|
|
79
|
+
"maxItems": 256,
|
|
80
|
+
"uniqueItems": true,
|
|
81
|
+
"items": { "type": "string", "minLength": 1, "maxLength": 1024 }
|
|
82
|
+
},
|
|
83
|
+
"discrepancies": {
|
|
84
|
+
"type": "array",
|
|
85
|
+
"maxItems": 128,
|
|
86
|
+
"items": {
|
|
87
|
+
"type": "object",
|
|
88
|
+
"additionalProperties": false,
|
|
89
|
+
"required": ["dimension", "statement"],
|
|
90
|
+
"properties": {
|
|
91
|
+
"dimension": { "$ref": "#/$defs/identifier" },
|
|
92
|
+
"statement": { "type": "string", "minLength": 1, "maxLength": 4096 }
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|