@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.
Files changed (321) hide show
  1. package/INDEX.md +74 -0
  2. package/INDEX.vi.md +75 -0
  3. package/README.md +44 -0
  4. package/README.vi.md +43 -0
  5. package/SKILL.md +135 -0
  6. package/SKILL.vi.md +128 -0
  7. package/alias/INDEX.md +104 -0
  8. package/alias/INDEX.vi.md +104 -0
  9. package/alias/alias.json +297 -0
  10. package/bin/starci-skills.mjs +219 -0
  11. package/knowledge/INDEX.md +22 -0
  12. package/knowledge/INDEX.vi.md +22 -0
  13. package/knowledge/grammars/starci/DNA.md +146 -0
  14. package/knowledge/grammars/starci/DNA.vi.md +146 -0
  15. package/knowledge/grammars/starci/INDEX.md +25 -0
  16. package/knowledge/grammars/starci/INDEX.vi.md +25 -0
  17. package/knowledge/grammars/starci/family.md +50 -0
  18. package/knowledge/grammars/starci/family.vi.md +50 -0
  19. package/knowledge/grammars/starci/idioms.md +120 -0
  20. package/knowledge/grammars/starci/idioms.vi.md +121 -0
  21. package/knowledge/grammars/starci/playbook.md +36 -0
  22. package/knowledge/grammars/starci/playbook.vi.md +35 -0
  23. package/knowledge/patterns/be/INDEX.md +29 -0
  24. package/knowledge/patterns/be/INDEX.vi.md +29 -0
  25. package/knowledge/patterns/be/comment.md +80 -0
  26. package/knowledge/patterns/be/comment.vi.md +80 -0
  27. package/knowledge/patterns/be/error.md +86 -0
  28. package/knowledge/patterns/be/error.vi.md +86 -0
  29. package/knowledge/patterns/be/folder.md +87 -0
  30. package/knowledge/patterns/be/folder.vi.md +86 -0
  31. package/knowledge/patterns/be/function.md +80 -0
  32. package/knowledge/patterns/be/function.vi.md +80 -0
  33. package/knowledge/patterns/be/imports.md +79 -0
  34. package/knowledge/patterns/be/imports.vi.md +79 -0
  35. package/knowledge/patterns/be/naming.md +87 -0
  36. package/knowledge/patterns/be/naming.vi.md +87 -0
  37. package/knowledge/patterns/be/test.md +79 -0
  38. package/knowledge/patterns/be/test.vi.md +79 -0
  39. package/knowledge/patterns/be/typing.md +73 -0
  40. package/knowledge/patterns/be/typing.vi.md +73 -0
  41. package/knowledge/patterns/fe/INDEX.md +29 -0
  42. package/knowledge/patterns/fe/INDEX.vi.md +29 -0
  43. package/knowledge/patterns/fe/comment.md +70 -0
  44. package/knowledge/patterns/fe/comment.vi.md +70 -0
  45. package/knowledge/patterns/fe/error.md +61 -0
  46. package/knowledge/patterns/fe/error.vi.md +61 -0
  47. package/knowledge/patterns/fe/folder.md +98 -0
  48. package/knowledge/patterns/fe/folder.vi.md +95 -0
  49. package/knowledge/patterns/fe/function.md +70 -0
  50. package/knowledge/patterns/fe/function.vi.md +70 -0
  51. package/knowledge/patterns/fe/imports.md +87 -0
  52. package/knowledge/patterns/fe/imports.vi.md +87 -0
  53. package/knowledge/patterns/fe/naming.md +77 -0
  54. package/knowledge/patterns/fe/naming.vi.md +77 -0
  55. package/knowledge/patterns/fe/test.md +73 -0
  56. package/knowledge/patterns/fe/test.vi.md +73 -0
  57. package/knowledge/patterns/fe/typing.md +67 -0
  58. package/knowledge/patterns/fe/typing.vi.md +67 -0
  59. package/knowledge/ui/INDEX.md +101 -0
  60. package/knowledge/ui/INDEX.vi.md +101 -0
  61. package/knowledge/ui/composition/INDEX.md +60 -0
  62. package/knowledge/ui/composition/INDEX.vi.md +63 -0
  63. package/knowledge/ui/composition/accent.md +73 -0
  64. package/knowledge/ui/composition/accent.vi.md +74 -0
  65. package/knowledge/ui/composition/action.md +55 -0
  66. package/knowledge/ui/composition/action.vi.md +56 -0
  67. package/knowledge/ui/composition/coverage.md +37 -0
  68. package/knowledge/ui/composition/coverage.vi.md +37 -0
  69. package/knowledge/ui/composition/cta.md +79 -0
  70. package/knowledge/ui/composition/cta.vi.md +79 -0
  71. package/knowledge/ui/composition/feedback.md +55 -0
  72. package/knowledge/ui/composition/feedback.vi.md +56 -0
  73. package/knowledge/ui/composition/hierarchy.md +83 -0
  74. package/knowledge/ui/composition/hierarchy.vi.md +82 -0
  75. package/knowledge/ui/composition/layout.md +91 -0
  76. package/knowledge/ui/composition/layout.vi.md +93 -0
  77. package/knowledge/ui/composition/responsive.md +67 -0
  78. package/knowledge/ui/composition/responsive.vi.md +67 -0
  79. package/knowledge/ui/composition/state.md +105 -0
  80. package/knowledge/ui/composition/state.vi.md +106 -0
  81. package/knowledge/ui/presentation/INDEX.md +94 -0
  82. package/knowledge/ui/presentation/INDEX.vi.md +69 -0
  83. package/knowledge/ui/presentation/boundary.md +170 -0
  84. package/knowledge/ui/presentation/boundary.vi.md +169 -0
  85. package/knowledge/ui/presentation/font.md +155 -0
  86. package/knowledge/ui/presentation/font.vi.md +156 -0
  87. package/knowledge/ui/presentation/gap.md +181 -0
  88. package/knowledge/ui/presentation/gap.vi.md +181 -0
  89. package/knowledge/ui/presentation/margin.md +168 -0
  90. package/knowledge/ui/presentation/margin.vi.md +171 -0
  91. package/knowledge/ui/presentation/measure.md +174 -0
  92. package/knowledge/ui/presentation/measure.vi.md +178 -0
  93. package/knowledge/ui/presentation/overflow.md +142 -0
  94. package/knowledge/ui/presentation/overflow.vi.md +142 -0
  95. package/knowledge/ui/presentation/padding.md +293 -0
  96. package/knowledge/ui/presentation/padding.vi.md +292 -0
  97. package/knowledge/ui/presentation/surface.md +166 -0
  98. package/knowledge/ui/presentation/surface.vi.md +166 -0
  99. package/knowledge/ui/presentation/text-flow.md +123 -0
  100. package/knowledge/ui/presentation/text-flow.vi.md +123 -0
  101. package/knowledge/ui/presentation/tone.md +114 -0
  102. package/knowledge/ui/presentation/tone.vi.md +113 -0
  103. package/knowledge/ui/proof/INDEX.md +55 -0
  104. package/knowledge/ui/proof/INDEX.vi.md +55 -0
  105. package/knowledge/ui/proof/accessibility.md +67 -0
  106. package/knowledge/ui/proof/accessibility.vi.md +68 -0
  107. package/knowledge/ui/proof/contrast.md +58 -0
  108. package/knowledge/ui/proof/contrast.vi.md +57 -0
  109. package/knowledge/ui/proof/focus.md +76 -0
  110. package/knowledge/ui/proof/focus.vi.md +76 -0
  111. package/knowledge/ui/proof/motion.md +63 -0
  112. package/knowledge/ui/proof/motion.vi.md +64 -0
  113. package/knowledge/ui/proof/render-truth.md +63 -0
  114. package/knowledge/ui/proof/render-truth.vi.md +63 -0
  115. package/operators/INDEX.md +199 -0
  116. package/operators/INDEX.vi.md +199 -0
  117. package/operators/architecture-decide/errors.json +115 -0
  118. package/operators/architecture-decide/operator.json +20 -0
  119. package/operators/architecture-decide/operator.md +133 -0
  120. package/operators/architecture-decide/operator.vi.md +130 -0
  121. package/operators/architecture-decide/self-test.mjs +221 -0
  122. package/operators/architecture-decide/validate.mjs +112 -0
  123. package/operators/backend-source-apply/errors.json +66 -0
  124. package/operators/backend-source-apply/operator.json +20 -0
  125. package/operators/backend-source-apply/operator.md +189 -0
  126. package/operators/backend-source-apply/operator.vi.md +185 -0
  127. package/operators/backend-source-apply/self-test.mjs +257 -0
  128. package/operators/backend-source-apply/validate.mjs +240 -0
  129. package/operators/business-decide/errors.json +78 -0
  130. package/operators/business-decide/operator.json +20 -0
  131. package/operators/business-decide/operator.md +176 -0
  132. package/operators/business-decide/operator.vi.md +174 -0
  133. package/operators/business-decide/self-test.mjs +225 -0
  134. package/operators/business-decide/validate.mjs +277 -0
  135. package/operators/content-generate/errors.json +106 -0
  136. package/operators/content-generate/operator.json +21 -0
  137. package/operators/content-generate/operator.md +155 -0
  138. package/operators/content-generate/operator.vi.md +155 -0
  139. package/operators/content-generate/self-test.mjs +288 -0
  140. package/operators/content-generate/validate.mjs +196 -0
  141. package/operators/errors.json +178 -0
  142. package/operators/frontend-direction-decide/errors.json +135 -0
  143. package/operators/frontend-direction-decide/operator.json +21 -0
  144. package/operators/frontend-direction-decide/operator.md +167 -0
  145. package/operators/frontend-direction-decide/operator.vi.md +167 -0
  146. package/operators/frontend-direction-decide/self-test.mjs +226 -0
  147. package/operators/frontend-direction-decide/validate.mjs +146 -0
  148. package/operators/frontend-presentation-resolve/errors.json +42 -0
  149. package/operators/frontend-presentation-resolve/operator.json +19 -0
  150. package/operators/frontend-presentation-resolve/operator.md +142 -0
  151. package/operators/frontend-presentation-resolve/operator.vi.md +140 -0
  152. package/operators/frontend-presentation-resolve/self-test.mjs +163 -0
  153. package/operators/frontend-presentation-resolve/validate.mjs +143 -0
  154. package/operators/frontend-source-apply/errors.json +30 -0
  155. package/operators/frontend-source-apply/operator.json +20 -0
  156. package/operators/frontend-source-apply/operator.md +127 -0
  157. package/operators/frontend-source-apply/operator.vi.md +126 -0
  158. package/operators/frontend-source-apply/self-test.mjs +214 -0
  159. package/operators/frontend-source-apply/validate.mjs +133 -0
  160. package/operators/frontend-surface-audit/errors.json +5 -0
  161. package/operators/frontend-surface-audit/operator.json +22 -0
  162. package/operators/frontend-surface-audit/operator.md +121 -0
  163. package/operators/frontend-surface-audit/operator.vi.md +121 -0
  164. package/operators/frontend-surface-audit/self-test.mjs +185 -0
  165. package/operators/frontend-surface-audit/validate.mjs +127 -0
  166. package/operators/git-publish/errors.json +54 -0
  167. package/operators/git-publish/operator.json +20 -0
  168. package/operators/git-publish/operator.md +180 -0
  169. package/operators/git-publish/operator.vi.md +178 -0
  170. package/operators/git-publish/self-test.mjs +177 -0
  171. package/operators/git-publish/validate.mjs +106 -0
  172. package/operators/platform-operate/errors.json +90 -0
  173. package/operators/platform-operate/operator.json +22 -0
  174. package/operators/platform-operate/operator.md +162 -0
  175. package/operators/platform-operate/operator.vi.md +160 -0
  176. package/operators/platform-operate/self-test.mjs +202 -0
  177. package/operators/platform-operate/validate.mjs +193 -0
  178. package/operators/quality-verify/errors.json +54 -0
  179. package/operators/quality-verify/operator.json +20 -0
  180. package/operators/quality-verify/operator.md +185 -0
  181. package/operators/quality-verify/operator.vi.md +177 -0
  182. package/operators/quality-verify/self-test.mjs +210 -0
  183. package/operators/quality-verify/validate.mjs +197 -0
  184. package/operators/release-deploy/errors.json +158 -0
  185. package/operators/release-deploy/operator.json +23 -0
  186. package/operators/release-deploy/operator.md +183 -0
  187. package/operators/release-deploy/operator.vi.md +181 -0
  188. package/operators/release-deploy/self-test.mjs +235 -0
  189. package/operators/release-deploy/validate.mjs +129 -0
  190. package/operators/uat-verify/errors.json +78 -0
  191. package/operators/uat-verify/operator.json +25 -0
  192. package/operators/uat-verify/operator.md +162 -0
  193. package/operators/uat-verify/operator.vi.md +161 -0
  194. package/operators/uat-verify/self-test.mjs +270 -0
  195. package/operators/uat-verify/validate.mjs +202 -0
  196. package/operators/workspace-bind/errors.json +90 -0
  197. package/operators/workspace-bind/operator.json +21 -0
  198. package/operators/workspace-bind/operator.md +148 -0
  199. package/operators/workspace-bind/operator.vi.md +148 -0
  200. package/operators/workspace-bind/self-test.mjs +205 -0
  201. package/operators/workspace-bind/validate.mjs +152 -0
  202. package/package.json +50 -0
  203. package/readiness/initialization/workspaces/commit-policy.json +91 -0
  204. package/readiness/initialization/workspaces/config.schema.json +35 -0
  205. package/readiness/initialization/workspaces/device-state.schema.json +54 -0
  206. package/readiness/initialization/workspaces/local-route.schema.json +206 -0
  207. package/readiness/initialization/workspaces/portable-route.schema.json +200 -0
  208. package/resources/INDEX.md +96 -0
  209. package/resources/INDEX.vi.md +99 -0
  210. package/resources/agents/profiles/claude.json +131 -0
  211. package/resources/agents/profiles/openai.json +131 -0
  212. package/resources/orchestrator.json +71 -0
  213. package/resources/tools.json +85 -0
  214. package/routing.json +272 -0
  215. package/scripts/alias-registry.mjs +31 -0
  216. package/scripts/device-state.mjs +497 -0
  217. package/scripts/device-state.spec.mjs +18 -0
  218. package/scripts/errors-registry.mjs +68 -0
  219. package/scripts/generate-alias-doc.mjs +66 -0
  220. package/scripts/generate-grammar-dna.mjs +387 -0
  221. package/scripts/generate-operators-index.mjs +95 -0
  222. package/scripts/generate-presentation-owned.mjs +681 -0
  223. package/scripts/install-cli.spec.mjs +74 -0
  224. package/scripts/json-schema.mjs +94 -0
  225. package/scripts/operator-md.mjs +96 -0
  226. package/scripts/run-operator-self-tests.mjs +36 -0
  227. package/scripts/validate-alias.mjs +165 -0
  228. package/scripts/validate-defaults.mjs +72 -0
  229. package/scripts/validate-knowledge-citations.mjs +90 -0
  230. package/scripts/validate-operator.mjs +125 -0
  231. package/scripts/validate-request.mjs +80 -0
  232. package/scripts/validate-resources.mjs +117 -0
  233. package/scripts/validate-response.mjs +141 -0
  234. package/scripts/validate-routing.mjs +91 -0
  235. package/scripts/validate-step.mjs +50 -0
  236. package/scripts/validate-templates.mjs +226 -0
  237. package/scripts/validate-templates.spec.mjs +144 -0
  238. package/scripts/validate-workflows.mjs +106 -0
  239. package/scripts/workspace-portable.mjs +389 -0
  240. package/scripts/workspace-portable.spec.mjs +246 -0
  241. package/templates/README.md +47 -0
  242. package/templates/README.vi.md +45 -0
  243. package/templates/changes.example.md +27 -0
  244. package/templates/grammars.template.md +34 -0
  245. package/templates/kinds/architecture-decision.contract.json +14 -0
  246. package/templates/kinds/architecture-decision.skeleton.md +52 -0
  247. package/templates/kinds/backend-source-application.contract.json +10 -0
  248. package/templates/kinds/backend-source-application.skeleton.md +34 -0
  249. package/templates/kinds/business-promise-authority.contract.json +13 -0
  250. package/templates/kinds/business-promise-authority.skeleton.md +67 -0
  251. package/templates/kinds/capture.schema.json +33 -0
  252. package/templates/kinds/changes.contract.json +10 -0
  253. package/templates/kinds/changes.skeleton.md +26 -0
  254. package/templates/kinds/checks.schema.json +44 -0
  255. package/templates/kinds/claims.schema.json +165 -0
  256. package/templates/kinds/conformance.schema.json +15 -0
  257. package/templates/kinds/content-brief.contract.json +12 -0
  258. package/templates/kinds/content-brief.skeleton.md +45 -0
  259. package/templates/kinds/content-generation-receipt.contract.json +11 -0
  260. package/templates/kinds/content-generation-receipt.skeleton.md +40 -0
  261. package/templates/kinds/content-review.contract.json +11 -0
  262. package/templates/kinds/content-review.skeleton.md +45 -0
  263. package/templates/kinds/contract.schema.json +28 -0
  264. package/templates/kinds/coverage-matrix.schema.json +86 -0
  265. package/templates/kinds/coverage.schema.json +62 -0
  266. package/templates/kinds/current-state.schema.json +40 -0
  267. package/templates/kinds/delta.schema.json +95 -0
  268. package/templates/kinds/e2e.schema.json +63 -0
  269. package/templates/kinds/frontend-direction-decision.contract.json +93 -0
  270. package/templates/kinds/frontend-direction-decision.skeleton.md +68 -0
  271. package/templates/kinds/frontend-presentation-resolution.contract.json +11 -0
  272. package/templates/kinds/frontend-presentation-resolution.skeleton.md +32 -0
  273. package/templates/kinds/frontend-source-application.contract.json +10 -0
  274. package/templates/kinds/frontend-source-application.skeleton.md +30 -0
  275. package/templates/kinds/frontend-surface-audit.contract.json +52 -0
  276. package/templates/kinds/frontend-surface-audit.skeleton.md +32 -0
  277. package/templates/kinds/gate-result.schema.json +64 -0
  278. package/templates/kinds/git-publication.contract.json +82 -0
  279. package/templates/kinds/git-publication.skeleton.md +61 -0
  280. package/templates/kinds/independent-critique.contract.json +9 -0
  281. package/templates/kinds/independent-critique.skeleton.md +28 -0
  282. package/templates/kinds/inventory.schema.json +35 -0
  283. package/templates/kinds/model.schema.json +99 -0
  284. package/templates/kinds/mutations.schema.json +65 -0
  285. package/templates/kinds/platform-operation-receipt.contract.json +76 -0
  286. package/templates/kinds/platform-operation-receipt.skeleton.md +54 -0
  287. package/templates/kinds/probes.schema.json +130 -0
  288. package/templates/kinds/proof.schema.json +17 -0
  289. package/templates/kinds/quality-verification.contract.json +87 -0
  290. package/templates/kinds/quality-verification.skeleton.md +58 -0
  291. package/templates/kinds/release-deployment.contract.json +85 -0
  292. package/templates/kinds/release-deployment.skeleton.md +67 -0
  293. package/templates/kinds/route.schema.json +293 -0
  294. package/templates/kinds/stack-model.schema.json +90 -0
  295. package/templates/kinds/uat-capture.schema.json +35 -0
  296. package/templates/kinds/uat-flow-verification.contract.json +11 -0
  297. package/templates/kinds/uat-flow-verification.skeleton.md +47 -0
  298. package/templates/kinds/uat-snapshot.schema.json +96 -0
  299. package/templates/kinds/uat-verdicts.schema.json +41 -0
  300. package/templates/kinds/ui-coverage.schema.json +77 -0
  301. package/templates/kinds/verdicts.schema.json +39 -0
  302. package/templates/kinds/workspace-route-binding.contract.json +12 -0
  303. package/templates/kinds/workspace-route-binding.skeleton.md +60 -0
  304. package/templates/kinds/writes.schema.json +37 -0
  305. package/templates/operator.template.md +73 -0
  306. package/templates/patterns.template.md +31 -0
  307. package/templates/step/request.schema.json +42 -0
  308. package/templates/step/response.schema.json +144 -0
  309. package/templates/ui-composition.template.md +36 -0
  310. package/templates/ui-presentation.template.md +57 -0
  311. package/templates/ui-proof.template.md +34 -0
  312. package/workflows/README.md +37 -0
  313. package/workflows/README.vi.md +37 -0
  314. package/workflows/backend-feature.json +59 -0
  315. package/workflows/content-unit.json +19 -0
  316. package/workflows/frontend-new-surface.json +81 -0
  317. package/workflows/frontend-reconstruct.json +67 -0
  318. package/workflows/frontend-refine.json +67 -0
  319. package/workflows/frontend-with-uat.json +78 -0
  320. package/workflows/full-feature.json +104 -0
  321. package/workflows/release.json +29 -0
@@ -0,0 +1,77 @@
1
+ {
2
+ "$id": "kind:ui-coverage",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "required": ["directionId", "actions", "regions", "states", "responsive"],
6
+ "properties": {
7
+ "directionId": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
8
+ "actions": {
9
+ "type": "array",
10
+ "maxItems": 64,
11
+ "items": {
12
+ "type": "object",
13
+ "additionalProperties": false,
14
+ "required": ["action", "pointerRoute", "keyboardRoute", "states"],
15
+ "properties": {
16
+ "action": { "type": "string", "minLength": 1 },
17
+ "pointerRoute": { "type": "string", "minLength": 1 },
18
+ "keyboardRoute": { "type": "string", "minLength": 1 },
19
+ "states": { "type": "array", "minItems": 1, "maxItems": 32, "uniqueItems": true, "items": { "type": "string", "minLength": 1 } },
20
+ "pendingPaths": {
21
+ "type": "array",
22
+ "maxItems": 32,
23
+ "items": {
24
+ "type": "object",
25
+ "additionalProperties": false,
26
+ "required": ["path", "settlement"],
27
+ "properties": {
28
+ "path": { "type": "string", "minLength": 1 },
29
+ "settlement": { "type": "string", "minLength": 1 }
30
+ }
31
+ }
32
+ }
33
+ }
34
+ }
35
+ },
36
+ "regions": {
37
+ "type": "array",
38
+ "maxItems": 64,
39
+ "items": {
40
+ "type": "object",
41
+ "additionalProperties": false,
42
+ "required": ["region", "idiomRef", "compositionRef"],
43
+ "properties": {
44
+ "region": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
45
+ "idiomRef": { "type": "string", "minLength": 1 },
46
+ "compositionRef": { "type": "string", "minLength": 1 }
47
+ }
48
+ }
49
+ },
50
+ "states": {
51
+ "type": "array",
52
+ "maxItems": 64,
53
+ "items": {
54
+ "type": "object",
55
+ "additionalProperties": false,
56
+ "required": ["meaning", "carrier"],
57
+ "properties": {
58
+ "meaning": { "type": "string", "minLength": 1 },
59
+ "carrier": { "type": "string", "minLength": 1 }
60
+ }
61
+ }
62
+ },
63
+ "responsive": {
64
+ "type": "array",
65
+ "maxItems": 32,
66
+ "items": {
67
+ "type": "object",
68
+ "additionalProperties": false,
69
+ "required": ["branch", "owner"],
70
+ "properties": {
71
+ "branch": { "type": "string", "minLength": 1 },
72
+ "owner": { "type": "string", "minLength": 1 }
73
+ }
74
+ }
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$id": "kind:verdicts",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "required": ["entries"],
6
+ "properties": {
7
+ "entries": {
8
+ "type": "array",
9
+ "minItems": 1,
10
+ "maxItems": 64,
11
+ "items": {
12
+ "type": "object",
13
+ "additionalProperties": false,
14
+ "required": ["matrixId", "results"],
15
+ "properties": {
16
+ "matrixId": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
17
+ "results": {
18
+ "type": "array",
19
+ "minItems": 1,
20
+ "maxItems": 512,
21
+ "items": {
22
+ "type": "object",
23
+ "additionalProperties": false,
24
+ "required": ["path", "owner", "rule", "measured", "verdict", "routeTo"],
25
+ "properties": {
26
+ "path": { "type": "string", "minLength": 1 },
27
+ "owner": { "enum": ["app", "grammar"] },
28
+ "rule": { "type": "string", "pattern": "^[A-Z][A-Z0-9-]*-[0-9]+$" },
29
+ "measured": { "type": "string", "minLength": 1 },
30
+ "verdict": { "enum": ["pass", "fail"] },
31
+ "routeTo": { "enum": ["resolve", "grammar-gap", "none"] }
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "kind": "workspace-route-binding",
3
+ "title": "^# workspace-route-binding — [a-z0-9]+(?:-[a-z0-9]+)*/[a-z0-9]+(?:-[a-z0-9]+)*$",
4
+ "sections": [
5
+ { "heading": "^## Binding$", "table": "| Field | Value |", "rows": ["Project", "Role", "Portable route", "Hydrated route", "Source head"], "cell": { "Value": "\\S" } },
6
+ { "heading": "^## Checkout$", "table": "| Field | Value |", "rows": ["Disk path", "Git root", "Git repository", "Branch", "Repository kind", "Directory", "Source head", "Mutation readiness", "Businesses root"], "cell": { "Value": "\\S" } },
7
+ { "heading": "^## Policy$", "table": "| Field | Value |", "rows": ["Worktree branches", "Mutation branch"], "cell": { "Value": "\\S" } },
8
+ { "heading": "^## Write roots$", "table": "| Path | Why |", "minRows": 1, "cell": { "Path": "\\S", "Why": "\\S" } },
9
+ { "heading": "^## Runtime$", "table": "| Field | Value |", "cell": { "Value": "\\S" } },
10
+ { "heading": "^## Findings$", "table": "| Code | Subject | Statement |", "minRows": 1, "cell": { "Code": "^`(ROUTE_HYDRATED_FROM_PORTABLE|RUNTIME_CONSUMED_NOT_OWNED|IDENTITY_ROSTER_SEALED|PROVENANCE_HEAD_BOUND|CACHED_ROUTE_REUSED|WORKTREE_BRANCH_FORBIDDEN)`$", "Subject": "\\S", "Statement": "\\S" } }
11
+ ]
12
+ }
@@ -0,0 +1,60 @@
1
+ # workspace-route-binding — project/role
2
+
3
+ One paragraph: which project and role were bound, to which checkout, at which head, and whether the
4
+ shared runtime was consumed. Written by `workspace.bind` as `response/response.md`; it authorises
5
+ later work to open exactly this checkout at exactly this head and proves nothing about the product.
6
+
7
+ ## Binding
8
+
9
+ | Field | Value |
10
+ | --- | --- |
11
+ | Project | `project` |
12
+ | Role | `role` |
13
+ | Portable route | `.workspaces/projects/project/role.json` |
14
+ | Hydrated route | `.workspaces/local/routes/project/role/config.json` |
15
+ | Source head | `0000000000000000000000000000000000000000` |
16
+
17
+ ## Checkout
18
+
19
+ | Field | Value |
20
+ | --- | --- |
21
+ | Disk path | the resolved checkout on this machine |
22
+ | Git root | the same checkout, as Git sees it |
23
+ | Git repository | the declared origin |
24
+ | Branch | the observed branch |
25
+ | Repository kind | source |
26
+ | Directory | — for a source route, the relative directory for a sibling one |
27
+ | Source head | `0000000000000000000000000000000000000000` |
28
+ | Mutation readiness | read-only |
29
+ | Businesses root | — when the checkout carries no business worktree |
30
+
31
+ ## Policy
32
+
33
+ | Field | Value |
34
+ | --- | --- |
35
+ | Worktree branches | forbidden |
36
+ | Mutation branch | the branch the routed policy allows to be written |
37
+
38
+ ## Write roots
39
+
40
+ | Path | Why |
41
+ | --- | --- |
42
+ | `src` | the only paths later work may write |
43
+
44
+ ## Runtime
45
+
46
+ | Field | Value |
47
+ | --- | --- |
48
+ | Owner task | the delegated owner of the shared runtime; no rows at all when no runtime was consumed |
49
+ | Status | ready |
50
+ | Consumer role | consumer |
51
+ | Frontend | `http://localhost:3000` |
52
+ | Api | `http://localhost:3001` |
53
+ | Identity | `http://localhost:8089` |
54
+
55
+ ## Findings
56
+
57
+ | Code | Subject | Statement |
58
+ | --- | --- | --- |
59
+ | `ROUTE_HYDRATED_FROM_PORTABLE` | `.workspaces/local/routes/project/role/config.json` | the portable declaration resolved to this local route |
60
+ | `IDENTITY_ROSTER_SEALED` | the credential roster reference | the roster was bound by name and never read |
@@ -0,0 +1,37 @@
1
+ {
2
+ "$id": "kind:writes",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "required": ["mode", "base", "branch", "commit", "files"],
6
+ "properties": {
7
+ "mode": { "enum": ["apply", "dry"] },
8
+ "base": { "type": "string", "pattern": "^[0-9a-f]{40}$" },
9
+ "branch": { "type": "string", "pattern": "^session/[A-Za-z0-9._-]+$" },
10
+ "commit": {
11
+ "oneOf": [
12
+ { "type": "string", "pattern": "^[0-9a-f]{40}$" },
13
+ { "type": "null" }
14
+ ]
15
+ },
16
+ "files": {
17
+ "type": "array",
18
+ "minItems": 1,
19
+ "maxItems": 512,
20
+ "items": {
21
+ "type": "object",
22
+ "additionalProperties": false,
23
+ "required": ["path", "change", "before", "after", "classes"],
24
+ "properties": {
25
+ "path": { "type": "string", "minLength": 1, "pattern": "^[^/\\\\][^\\\\]*$" },
26
+ "change": { "enum": ["created", "modified", "deleted", "unchanged"] },
27
+ "before": { "oneOf": [{ "$ref": "#/$defs/fingerprint" }, { "type": "null" }] },
28
+ "after": { "oneOf": [{ "$ref": "#/$defs/fingerprint" }, { "type": "null" }] },
29
+ "classes": { "type": "array", "maxItems": 256, "items": { "type": "string", "minLength": 1 } }
30
+ }
31
+ }
32
+ }
33
+ },
34
+ "$defs": {
35
+ "fingerprint": { "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" }
36
+ }
37
+ }
@@ -0,0 +1,73 @@
1
+ # <operator.id>
2
+
3
+ ## Job
4
+
5
+ One sentence: the single thing this operator decides or produces, and what it proves it against.
6
+
7
+ ## <Any law the operator carries>
8
+
9
+ Free sections between Job and Context hold the operator's own law: what it refuses, what it never
10
+ treats as a reason, what it must observe before it proposes. Prose, not tables.
11
+
12
+ ## Context
13
+
14
+ | Alias | Bind | Required |
15
+ | --- | --- | --- |
16
+ | `@zone/path` | what is read there and at which head or fingerprint | yes |
17
+
18
+ ## Inputs
19
+
20
+ | Kind | From | Required |
21
+ | --- | --- | --- |
22
+ | `kind-name` | which earlier operator's branch produces it, or "a prior run" | no |
23
+
24
+ ## Requirements
25
+
26
+ | Field | Type | Default | Ask |
27
+ | --- | --- | --- | --- |
28
+ | `field` | prompt \| choice \| number \| id \| list \| token | — | what the person is asked; `—` in Default means the field is required |
29
+
30
+ ## Steps
31
+
32
+ | # | Step | Params | Reads | Writes | Stops with |
33
+ | --- | --- | --- | --- | --- | --- |
34
+ | 1 | Validate the gate and resume | `resume` | `request/request.json` | — | `INVALID_INPUT`, `SOURCE_DRIFT`, `NO_PROGRESS` |
35
+ | 2 | Do the job | `field` | `@zone/path` | `response/response.md`, `response/response.json` | — |
36
+
37
+ ## Outputs
38
+
39
+ | Kind | File | Type | Required |
40
+ | --- | --- | --- | --- |
41
+ | `kind-name` | `response/response.md` | md | yes |
42
+
43
+ ## Stops
44
+
45
+ | Code | Disposition |
46
+ | --- | --- |
47
+ | `INVALID_INPUT` | terminate |
48
+
49
+ ## Next
50
+
51
+ | When | Operator |
52
+ | --- | --- |
53
+ | the condition under which the chain continues there | `other.operator` |
54
+
55
+ ```json template-contract
56
+ {
57
+ "kind": "operator",
58
+ "applies": ["operators/*/operator.md"],
59
+ "title": { "en": "^# [a-z]+(?:\\.[a-z]+)+$", "vi": "^# [a-z]+(?:\\.[a-z]+)+$" },
60
+ "sections": [
61
+ { "en": "^## Job$", "vi": "^## Việc$" },
62
+ { "free": true },
63
+ { "en": "^## Context$", "vi": "^## Context$", "table": { "en": "| Alias | Bind | Required |", "vi": "| Alias | Bind | Bắt buộc |" }, "minRows": 1 },
64
+ { "en": "^## Inputs$", "vi": "^## Đầu vào$", "table": { "en": "| Kind | From | Required |", "vi": "| Kind | Từ đâu | Bắt buộc |" } },
65
+ { "en": "^## Requirements$", "vi": "^## Yêu cầu$", "table": { "en": "| Field | Type | Default | Ask |", "vi": "| Field | Kiểu | Mặc định | Hỏi |" } },
66
+ { "en": "^## Steps$", "vi": "^## Các bước$", "table": { "en": "| # | Step | Params | Reads | Writes | Stops with |", "vi": "| # | Bước | Tham số | Đọc | Ghi | Dừng với |" }, "minRows": 2 },
67
+ { "en": "^## Outputs$", "vi": "^## Đầu ra$", "table": { "en": "| Kind | File | Type | Required |", "vi": "| Kind | File | Kiểu | Bắt buộc |" }, "minRows": 1, "cell": { "Type": "^(md|data|artifact)$", "Kiểu": "^(md|data|artifact)$" } },
68
+ { "en": "^## Stops$", "vi": "^## Dừng$", "table": { "en": "| Code | Disposition |", "vi": "| Code | Xử lý |" }, "minRows": 1, "cell": { "Disposition": "^(terminate|fallback)$", "Xử lý": "^(terminate|fallback)$" } },
69
+ { "en": "^## Next$", "vi": "^## Kế tiếp$", "table": { "en": "| When | Operator |", "vi": "| Khi | Operator |" } }
70
+ ],
71
+ "rules": null
72
+ }
73
+ ```
@@ -0,0 +1,31 @@
1
+ # <Concern>
2
+
3
+ One or two paragraphs: which source this catalog was counted from, and the sentence that every
4
+ rule cites two real paths.
5
+
6
+ ## PREFIX-1 — <what the rule governs>
7
+
8
+ One line naming what the rule governs; where the convention is not universal, the count.
9
+
10
+ | Case | When | Write |
11
+ | --- | --- | --- |
12
+ | Case 1 | The situation in the source. | The exact form to write, with its real path. |
13
+
14
+ ## Open question <optional>
15
+
16
+ A convention the source has not settled, left open on purpose.
17
+
18
+ ```json template-contract
19
+ {
20
+ "kind": "patterns",
21
+ "applies": ["knowledge/patterns/*/*.md"],
22
+ "title": { "en": "^# .+$", "vi": "^# .+$" },
23
+ "sections": [{ "free": true }],
24
+ "rules": {
25
+ "heading": "^## [A-Z][A-Z0-9-]*-\\d+ — .+$",
26
+ "table": { "en": "| Case | When | Write |", "vi": "| Case | Dùng khi | Viết |" },
27
+ "closing": null,
28
+ "required": true
29
+ }
30
+ }
31
+ ```
@@ -0,0 +1,42 @@
1
+ {
2
+ "$id": "step:request",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "required": ["schemaVersion", "operatorId", "step", "parallel", "sessionId", "contexts", "requirements", "inputs", "resume"],
6
+ "properties": {
7
+ "schemaVersion": { "const": 9 },
8
+ "operatorId": { "type": "string", "pattern": "^[a-z]+(?:\\.[a-z]+)+$" },
9
+ "step": { "type": "integer", "minimum": 1 },
10
+ "parallel": { "type": "integer", "minimum": 1 },
11
+ "sessionId": { "type": "string", "minLength": 1, "maxLength": 128 },
12
+ "exchange": { "type": "string", "pattern": "^[a-z][a-z-]*$" },
13
+ "contexts": {
14
+ "type": "array",
15
+ "items": {
16
+ "type": "object",
17
+ "additionalProperties": false,
18
+ "required": ["alias", "head"],
19
+ "properties": {
20
+ "alias": { "type": "string", "pattern": "^@[a-z][a-z-]*(?:/[A-Za-z0-9_<>.@#:-]+)*$" },
21
+ "head": { "type": ["string", "null"], "pattern": "^[0-9a-f]{40}$" }
22
+ }
23
+ }
24
+ },
25
+ "requirements": { "type": "object", "additionalProperties": { "type": ["string", "number", "boolean", "null", "array", "object"] } },
26
+ "inputs": {
27
+ "type": "object",
28
+ "additionalProperties": { "type": "string", "pattern": "^step-\\d+/parallel-\\d+/(?:[a-z][a-z-]*/)?response/(?:(?:[a-z][a-z-]*/)*[A-Za-z0-9_.-]+\\.md|data/[A-Za-z0-9_./-]+\\.json|artifacts/[A-Za-z0-9_./-]+)$" }
29
+ },
30
+ "resume": {
31
+ "oneOf": [
32
+ { "type": "null" },
33
+ {
34
+ "type": "object",
35
+ "additionalProperties": false,
36
+ "required": ["step", "parallel", "token"],
37
+ "properties": { "step": { "type": "integer", "minimum": 1 }, "parallel": { "type": "integer", "minimum": 1 }, "token": { "type": "string", "minLength": 1 } }
38
+ }
39
+ ]
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,144 @@
1
+ {
2
+ "$id": "step:response",
3
+ "type": "object",
4
+ "additionalProperties": false,
5
+ "required": [
6
+ "schemaVersion",
7
+ "operatorId",
8
+ "step",
9
+ "parallel",
10
+ "status",
11
+ "fields",
12
+ "fallbacks",
13
+ "commits",
14
+ "next"
15
+ ],
16
+ "properties": {
17
+ "schemaVersion": {
18
+ "const": 9
19
+ },
20
+ "operatorId": {
21
+ "type": "string",
22
+ "pattern": "^[a-z]+(?:\\.[a-z]+)+$"
23
+ },
24
+ "step": {
25
+ "type": "integer",
26
+ "minimum": 1
27
+ },
28
+ "parallel": {
29
+ "type": "integer",
30
+ "minimum": 1
31
+ },
32
+ "exchange": {
33
+ "type": "string",
34
+ "pattern": "^[a-z][a-z-]*$"
35
+ },
36
+ "status": {
37
+ "enum": [
38
+ "done",
39
+ "blocked",
40
+ "waiting"
41
+ ]
42
+ },
43
+ "stop": {
44
+ "type": "string",
45
+ "pattern": "^[A-Z][A-Z0-9_]+$"
46
+ },
47
+ "awaiting": {
48
+ "type": "object",
49
+ "additionalProperties": false,
50
+ "required": [
51
+ "exchange",
52
+ "kind"
53
+ ],
54
+ "properties": {
55
+ "exchange": {
56
+ "type": "string",
57
+ "pattern": "^[a-z][a-z-]*$"
58
+ },
59
+ "kind": {
60
+ "type": "string",
61
+ "pattern": "^[a-z][a-z0-9-]*$"
62
+ }
63
+ }
64
+ },
65
+ "fallbacks": {
66
+ "type": "array",
67
+ "items": {
68
+ "type": "string",
69
+ "pattern": "^[A-Z][A-Z0-9_]+$"
70
+ },
71
+ "uniqueItems": true
72
+ },
73
+ "fields": {
74
+ "type": "object",
75
+ "additionalProperties": {
76
+ "oneOf": [
77
+ {
78
+ "type": "string",
79
+ "pattern": "^(?:[a-z][a-z-]*/)?response/(?:(?:[a-z][a-z-]*/)*[A-Za-z0-9_.-]+\\.md|data/[A-Za-z0-9_./-]+\\.json|artifacts/[A-Za-z0-9_./-]+)$"
80
+ },
81
+ {
82
+ "type": "array",
83
+ "minItems": 1,
84
+ "items": {
85
+ "type": "string",
86
+ "pattern": "^(?:[a-z][a-z-]*/)?response/(?:data/[A-Za-z0-9_./-]+\\.json|artifacts/[A-Za-z0-9_./-]+)$"
87
+ }
88
+ }
89
+ ]
90
+ }
91
+ },
92
+ "commits": {
93
+ "type": "array",
94
+ "items": {
95
+ "type": "string",
96
+ "pattern": "^[0-9a-f]{7,40}$"
97
+ }
98
+ },
99
+ "next": {
100
+ "type": "array",
101
+ "items": {
102
+ "type": "string",
103
+ "pattern": "^(?:[a-z]+(?:\\.[a-z]+)+|user|external)$"
104
+ },
105
+ "uniqueItems": true
106
+ },
107
+ "reason": {
108
+ "type": "string",
109
+ "minLength": 1,
110
+ "maxLength": 2000,
111
+ "description": "One paragraph for a person: why the branch blocked or waits, when the kind files could not be written"
112
+ }
113
+ },
114
+ "allOf": [
115
+ {
116
+ "if": {
117
+ "properties": {
118
+ "status": {
119
+ "const": "blocked"
120
+ }
121
+ }
122
+ },
123
+ "then": {
124
+ "required": [
125
+ "stop"
126
+ ]
127
+ }
128
+ },
129
+ {
130
+ "if": {
131
+ "properties": {
132
+ "status": {
133
+ "const": "waiting"
134
+ }
135
+ }
136
+ },
137
+ "then": {
138
+ "required": [
139
+ "awaiting"
140
+ ]
141
+ }
142
+ }
143
+ ]
144
+ }
@@ -0,0 +1,36 @@
1
+ # <Topic> composition
2
+
3
+ One or two paragraphs: which universal constraint this topic places on a direction receipt, before
4
+ any tree exists, and which operator checks it (`frontend.direction.decide`). Layout and taste are decided
5
+ in `knowledge/grammars/starci`; a composition topic only says what the resulting direction must
6
+ satisfy.
7
+
8
+ ## PREFIX-1 — <what the rule governs>
9
+
10
+ One line naming what the rule governs.
11
+
12
+ | Case | When | Assert |
13
+ | --- | --- | --- |
14
+ | Case 1 | The concrete situation that reaches this rule. | A falsifiable predicate over the direction receipt or the composed tree, never advice. |
15
+
16
+ Not this rule: <condition> is PREFIX-n.
17
+
18
+ ## What this file does not decide
19
+
20
+ Links to the sibling topics and to the presentation or proof knowledge that owns the neighbouring
21
+ decisions.
22
+
23
+ ```json template-contract
24
+ {
25
+ "kind": "ui-composition",
26
+ "applies": ["knowledge/ui/composition/*.md"],
27
+ "title": { "en": "^# [A-Z][A-Za-z ]+ composition$", "vi": "^# [A-Z][A-Za-z ]+ composition$" },
28
+ "sections": [{ "free": true }],
29
+ "rules": {
30
+ "heading": "^## [A-Z][A-Z0-9-]*-\\d+ — .+$",
31
+ "table": { "en": "| Case | When | Assert |", "vi": "| Case | Dùng khi | Khẳng định |" },
32
+ "closing": { "en": "^## What this file does not decide$", "vi": "^## File này không quyết định$" },
33
+ "required": true
34
+ }
35
+ }
36
+ ```
@@ -0,0 +1,57 @@
1
+ # <Topic> presentation
2
+
3
+ One or two paragraphs: which CSS property family this topic resolves on app-owned boundaries, and
4
+ that `frontend.presentation.resolve` reads it.
5
+
6
+ ## Scale
7
+
8
+ For a topic with a closed value ramp. One table mapping rule to class to value, naming the classes
9
+ outside the scale. A topic without a ramp uses `## Catalog` instead.
10
+
11
+ | Rule | Class | Value | Common token |
12
+ | --- | --- | --- | --- |
13
+
14
+ ## Owner
15
+
16
+ | Owner | Meaning | Application writes |
17
+ | --- | --- | --- |
18
+ | `App` | The container belongs to the application | The class |
19
+ | A component name | Common already applies the value inside that component | Nothing. Pass the prop |
20
+ | `—` | Common exposes no public path for this relationship | The class, recorded as a workaround |
21
+
22
+ ## <Frame section, optional, repeatable>
23
+
24
+ `<Topic> Common already owns`, `Axis variants`, and other topic frame sections.
25
+
26
+ ## PREFIX-1 — `<class>` / `<value>`
27
+
28
+ One line naming the relationship that resolves to this value.
29
+
30
+ | Case | When | Owner | Render |
31
+ | --- | --- | --- | --- |
32
+ | Case 1 | The observable condition of the rendered tree. | `App`, a component name, or `—` | The exact class or the component prop that carries it. |
33
+
34
+ Not this rule: <condition> is PREFIX-n.
35
+
36
+ ## What this file does not decide
37
+
38
+ Links to the sibling presentation topics and to the composition knowledge that made the decision.
39
+
40
+ ```json template-contract
41
+ {
42
+ "kind": "ui-presentation",
43
+ "applies": ["knowledge/ui/presentation/*.md"],
44
+ "title": { "en": "^# [A-Z][A-Za-z ]+ presentation$", "vi": "^# [A-Z][A-Za-z ]+ presentation$" },
45
+ "sections": [
46
+ { "en": "^## (Scale|Catalog)$", "vi": "^## (Thang giá trị|Danh mục)$" },
47
+ { "en": "^## Owner$", "vi": "^## Owner$", "table": { "en": "| Owner | Meaning | Application writes |", "vi": "| Owner | Nghĩa | Ứng dụng viết |" } },
48
+ { "free": true }
49
+ ],
50
+ "rules": {
51
+ "heading": "^## [A-Z][A-Z0-9-]*-(\\d+|AUTO) — .+$",
52
+ "table": { "en": "| Case | When | Owner | Render |", "vi": "| Case | Dùng khi | Owner | Render |" },
53
+ "closing": { "en": "^## What this file does not decide$", "vi": "^## File này không quyết định$" },
54
+ "required": true
55
+ }
56
+ }
57
+ ```
@@ -0,0 +1,34 @@
1
+ # <Topic> proof
2
+
3
+ One or two paragraphs: what only becomes true once the page has rendered, and that
4
+ `frontend.surface.audit` reads it.
5
+
6
+ ## PREFIX-1 — <what the rule governs>
7
+
8
+ One line naming what the rule governs.
9
+
10
+ | Case | When | Observe |
11
+ | --- | --- | --- |
12
+ | Case 1 | The concrete rendered situation that reaches this rule. | The exact runtime evidence, and what seeing it would falsify. |
13
+
14
+ Not this rule: <condition> is PREFIX-n.
15
+
16
+ ## What this file does not decide
17
+
18
+ Links to the sibling proof topics and to the composition knowledge that made the decision being
19
+ tested.
20
+
21
+ ```json template-contract
22
+ {
23
+ "kind": "ui-proof",
24
+ "applies": ["knowledge/ui/proof/*.md"],
25
+ "title": { "en": "^# [A-Z][A-Za-z ]+ proof$", "vi": "^# [A-Z][A-Za-z ]+ proof$" },
26
+ "sections": [],
27
+ "rules": {
28
+ "heading": "^## [A-Z][A-Z0-9-]*-\\d+ — .+$",
29
+ "table": { "en": "| Case | When | Observe |", "vi": "| Case | Dùng khi | Quan sát |" },
30
+ "closing": { "en": "^## What this file does not decide$", "vi": "^## File này không quyết định$" },
31
+ "required": true
32
+ }
33
+ }
34
+ ```