@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,200 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://starci.dev/v6/readiness/initialization/workspaces/portable-route.schema.json",
4
+ "title": "Portable StarCi workspace route declaration",
5
+ "description": "Pushable project/role intent. V1 and unrevisioned V6 remain readable for safe migration; schemaRevision 2 is the current V6 contract-aware envelope.",
6
+ "oneOf": [
7
+ { "$ref": "#/$defs/v1" },
8
+ { "$ref": "#/$defs/v6Legacy" },
9
+ { "$ref": "#/$defs/v6Current" }
10
+ ],
11
+ "$defs": {
12
+ "slug": {
13
+ "type": "string",
14
+ "maxLength": 80,
15
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
16
+ },
17
+ "relativePath": {
18
+ "type": "string",
19
+ "minLength": 1,
20
+ "maxLength": 512,
21
+ "pattern": "^(?!/)(?![A-Za-z]:)(?!.*\\\\)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)[A-Za-z0-9._ -]+(?:/[A-Za-z0-9._ -]+)*$"
22
+ },
23
+ "repository": {
24
+ "type": "object",
25
+ "additionalProperties": false,
26
+ "required": ["kind", "directory", "gitRepository", "branch"],
27
+ "properties": {
28
+ "kind": { "enum": ["source", "sibling"] },
29
+ "directory": {
30
+ "oneOf": [
31
+ { "$ref": "#/$defs/relativePath" },
32
+ { "type": "null" }
33
+ ]
34
+ },
35
+ "gitRepository": {
36
+ "type": "string",
37
+ "maxLength": 512,
38
+ "pattern": "^https://github\\.com/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:\\.git)?$"
39
+ },
40
+ "branch": { "type": "string", "minLength": 1, "maxLength": 255 },
41
+ "gitPolicy": { "$ref": "#/$defs/gitPolicy" }
42
+ },
43
+ "allOf": [
44
+ {
45
+ "if": { "properties": { "kind": { "const": "source" } }, "required": ["kind"] },
46
+ "then": { "properties": { "directory": { "type": "null" } } },
47
+ "else": { "properties": { "directory": { "$ref": "#/$defs/relativePath" } } }
48
+ }
49
+ ]
50
+ },
51
+ "gitPolicy": {
52
+ "type": "object",
53
+ "additionalProperties": false,
54
+ "required": ["mutationBranch", "worktreeBranches", "incomingBranchRefs"],
55
+ "properties": {
56
+ "mutationBranch": { "type": "string", "minLength": 1, "maxLength": 255 },
57
+ "worktreeBranches": { "enum": ["forbidden", "session-only"], "description": "forbidden: no branch or worktree besides the mutation branch; session-only: a git worktree on session/<sessionId> may be created for one runtime session and is merged into the mutation branch by git.publish, then removed" },
58
+ "incomingBranchRefs": { "const": "merge-into-mutation-branch" }
59
+ }
60
+ },
61
+ "commonContext": {
62
+ "properties": {
63
+ "instructions": {
64
+ "type": "array",
65
+ "uniqueItems": true,
66
+ "items": { "$ref": "#/$defs/relativePath" }
67
+ },
68
+ "manifests": {
69
+ "type": "array",
70
+ "uniqueItems": true,
71
+ "items": { "$ref": "#/$defs/relativePath" }
72
+ }
73
+ }
74
+ },
75
+ "v1Context": {
76
+ "type": "object",
77
+ "additionalProperties": false,
78
+ "required": ["instructions", "manifests", "grammar", "grammarProfile"],
79
+ "properties": {
80
+ "instructions": { "$ref": "#/$defs/commonContext/properties/instructions" },
81
+ "manifests": { "$ref": "#/$defs/commonContext/properties/manifests" },
82
+ "grammar": {
83
+ "oneOf": [
84
+ { "$ref": "#/$defs/slug" },
85
+ { "type": "null" }
86
+ ]
87
+ },
88
+ "grammarProfile": {
89
+ "oneOf": [
90
+ { "$ref": "#/$defs/slug" },
91
+ { "type": "null" }
92
+ ]
93
+ }
94
+ },
95
+ "allOf": [
96
+ {
97
+ "if": { "properties": { "grammar": { "type": "null" } }, "required": ["grammar"] },
98
+ "then": { "properties": { "grammarProfile": { "type": "null" } } },
99
+ "else": { "properties": { "grammarProfile": { "$ref": "#/$defs/slug" } } }
100
+ }
101
+ ]
102
+ },
103
+ "v6PreContractContext": {
104
+ "type": "object",
105
+ "additionalProperties": false,
106
+ "required": ["instructions", "manifests", "grammarId"],
107
+ "properties": {
108
+ "instructions": { "$ref": "#/$defs/commonContext/properties/instructions" },
109
+ "manifests": { "$ref": "#/$defs/commonContext/properties/manifests" },
110
+ "grammarId": { "enum": ["core", "offset-pop", null] }
111
+ }
112
+ },
113
+ "v6ContractContext": {
114
+ "type": "object",
115
+ "additionalProperties": false,
116
+ "required": ["instructions", "contract", "contractSource", "manifests", "grammarId"],
117
+ "properties": {
118
+ "instructions": { "$ref": "#/$defs/commonContext/properties/instructions" },
119
+ "contract": {
120
+ "oneOf": [
121
+ { "$ref": "#/$defs/relativePath" },
122
+ { "type": "null" }
123
+ ]
124
+ },
125
+ "contractSource": {
126
+ "oneOf": [
127
+ { "type": "string", "minLength": 1, "maxLength": 1024 },
128
+ { "type": "null" }
129
+ ]
130
+ },
131
+ "manifests": { "$ref": "#/$defs/commonContext/properties/manifests" },
132
+ "grammarId": { "enum": ["core", "offset-pop", null] }
133
+ },
134
+ "allOf": [
135
+ {
136
+ "if": { "properties": { "contract": { "type": "null" } }, "required": ["contract"] },
137
+ "then": { "properties": { "contractSource": { "type": "null" } } },
138
+ "else": { "properties": { "contractSource": { "type": "string", "minLength": 1 } } }
139
+ }
140
+ ]
141
+ },
142
+ "v1": {
143
+ "type": "object",
144
+ "additionalProperties": false,
145
+ "required": ["version", "project", "role", "repository", "context"],
146
+ "properties": {
147
+ "$schema": { "type": "string" },
148
+ "version": { "const": 1 },
149
+ "project": { "$ref": "#/$defs/slug" },
150
+ "role": { "$ref": "#/$defs/slug" },
151
+ "repository": { "$ref": "#/$defs/repository" },
152
+ "context": { "$ref": "#/$defs/v1Context" }
153
+ }
154
+ },
155
+ "v6Legacy": {
156
+ "type": "object",
157
+ "additionalProperties": false,
158
+ "required": ["schemaVersion", "project", "role", "repository", "context"],
159
+ "properties": {
160
+ "$schema": { "type": "string" },
161
+ "schemaVersion": { "const": 6 },
162
+ "project": { "$ref": "#/$defs/slug" },
163
+ "role": { "$ref": "#/$defs/slug" },
164
+ "repository": { "$ref": "#/$defs/repository" },
165
+ "context": {
166
+ "oneOf": [
167
+ { "$ref": "#/$defs/v6PreContractContext" },
168
+ { "$ref": "#/$defs/v6ContractContext" }
169
+ ]
170
+ }
171
+ },
172
+ "allOf": [
173
+ {
174
+ "if": { "properties": { "role": { "enum": ["be", "chart"] } }, "required": ["role"] },
175
+ "then": { "properties": { "context": { "properties": { "grammarId": { "type": "null" } } } } }
176
+ }
177
+ ]
178
+ },
179
+ "v6Current": {
180
+ "type": "object",
181
+ "additionalProperties": false,
182
+ "required": ["schemaVersion", "schemaRevision", "project", "role", "repository", "context"],
183
+ "properties": {
184
+ "$schema": { "type": "string" },
185
+ "schemaVersion": { "const": 6 },
186
+ "schemaRevision": { "const": 2 },
187
+ "project": { "$ref": "#/$defs/slug" },
188
+ "role": { "$ref": "#/$defs/slug" },
189
+ "repository": { "$ref": "#/$defs/repository" },
190
+ "context": { "$ref": "#/$defs/v6ContractContext" }
191
+ },
192
+ "allOf": [
193
+ {
194
+ "if": { "properties": { "role": { "enum": ["be", "chart"] } }, "required": ["role"] },
195
+ "then": { "properties": { "context": { "properties": { "grammarId": { "type": "null" } } } } }
196
+ }
197
+ ]
198
+ }
199
+ }
200
+ }
@@ -0,0 +1,96 @@
1
+ # Resources
2
+
3
+ Who runs each operator, with what, and under which standing policies. Two closed places carry it:
4
+
5
+ - `agents/profiles/<runtime>.json` — one file per runtime (`openai.json`, `claude.json`); the file owns
6
+ its provider, a profile carries model, isolation, what the model can do here
7
+ (`capabilities`), and what an operator on that profile is allowed to use (`permits`).
8
+ - `operators/<id>/operator.json` → `resources` — inside each operator: the one profile that runs it
9
+ end to end, which grants it actually requires, and its answers to the three standing questions.
10
+ Each operator's `operator.md` names the same aliases in its Context table. There is no central assignment file.
11
+
12
+ `scripts/validate-resources.mjs` runs inside `npm test`. It rejects an operator whose `operator.json` declares no
13
+ `resources`, an operator bound to an unknown profile, a required grant no assigned profile permits, a profile that permits
14
+ what its model cannot do, a policy answer that
15
+ contradicts the grants, a model an operator's own schema pins that is not its profile's model, and a row of the
16
+ process matrix below that disagrees with the operator it summarises. The registry, the operators,
17
+ and this summary therefore cannot drift apart silently.
18
+
19
+ ## Binding rule
20
+
21
+ An operator binds exactly one profile and runs on it end to end, never per invocation and never
22
+ split across profiles: a critique, review, or judgement inside an operator is a step of that one
23
+ execution, and a second model for it would be a workflow. The profile decides the model and the
24
+ isolation; the operator's `operator.md` Steps decide the work; `resources.requires` decides which grants that
25
+ work may touch. A grant absent from `requires` is unavailable to the operator even if the profile
26
+ would permit it. Capability is a fact about the model; permission is a policy about the
27
+ operator: `gpt-5.6-sol` can search, draw, drive a browser, and write source, so `sol-fresh` may use all
28
+ four, while `sol-reviewer` on the same model is permitted only the browser, because a reviewer that
29
+ produces is no longer a reviewer. Material brainstorms and reviews are always one fresh execution with no inherited
30
+ turns, and a reviewer receives artifacts and claims, never the producer's rationale.
31
+
32
+ ## The three standing questions
33
+
34
+ **Does it search the web when the tree holds no reference?** Only where `policy.webSearch` is
35
+ `bounded`: the decision operators and the content brief. Research is bounded by the exact gap it must
36
+ close, records what it used, and never copies a page, brand, palette, or component anatomy. A
37
+ presentation value the knowledge does not publish is `RULE_MISSING`, never a research task.
38
+
39
+ **Is it bound to published Grammar?** Where `policy.grammarBound` is true: the four frontend
40
+ operators. Direction binds Grammar compositions; presentation resolves only against Grammar's owned
41
+ relationships; apply writes only resolved classes; audit judges against the same law. A missing
42
+ reusable capability is `GRAMMAR_REQUIRED` or `COMMON_CAPABILITY_MISSING`, never a local imitation.
43
+
44
+ **Does it generate images?** `required` only in content generation, where an image is made to a
45
+ stated claim and inspected for fidelity to it. `authority-only` in frontend direction: the direction
46
+ itself renders an inspectable page, and product artwork is generated only when product authority
47
+ names it. Everywhere else, `never`.
48
+
49
+ ## Process matrix
50
+
51
+ A summary of what each `operator.json` declares; the validator rejects a row that disagrees.
52
+
53
+ | Operator | Profile | Grammar | Tools | Why |
54
+ | --- | --- | --- | --- | --- |
55
+ | `workspace.bind` | luna | no | `fileread:context-aliases`, `git:read`, `shell:declared-commands`, `http:probe`, `secrets:resolve-by-name` | Reads canonical files and a registry; no judgement |
56
+ | `business.decide` | sol-fresh | no | `fileread:context-aliases`, `sourcewrite:declared-write-set`, `git:read`, `websearch:bounded` | An unfamiliar business model may need reference research before coverage can be frozen |
57
+ | `architecture.decide` | sol-fresh | no | `fileread:context-aliases`, `git:read`, `websearch:bounded`, `visualize:html` | Alternatives and compatibility need evidence beyond the repo; schema pins the model |
58
+ | `backend.source.apply` | luna | no | `fileread:context-aliases`, `sourcewrite:declared-write-set`, `git:commit-session-branch`, `shell:declared-commands` | Writes inside a frozen contract following patterns/be |
59
+ | `frontend.direction.decide` | sol-fresh | yes | `fileread:context-aliases`, `git:read`, `websearch:bounded`, `imagegen:judged`, `visualize:html` | Research only for an unfamiliar domain; renders candidates as pages and judges for itself when a region is too empty to stand without an image |
60
+ | `frontend.presentation.resolve` | luna | yes | `fileread:context-aliases`, `git:read`, `registry:read` | A lookup against a closed inventory |
61
+ | `frontend.source.apply` | luna | yes | `fileread:context-aliases`, `sourcewrite:declared-write-set`, `git:commit-session-branch`, `imagegen:judged` | Writes only what the resolution already contains, following patterns/fe |
62
+ | `frontend.surface.audit` | sol-reviewer | yes | `fileread:context-aliases`, `git:read`, `websearch:bounded`, `visualize:html`, `browsercontrol:required`, `http:probe` | Browser only, no source write: the auditor cannot repair what it measures |
63
+ | `quality.verify` | luna | no | `fileread:context-aliases`, `git:read`, `shell:declared-commands`, `http:probe` | Runs gates, repairs nothing |
64
+ | `uat.verify` | sol-fresh | no | `fileread:context-aliases`, `sourcewrite:declared-write-set`, `git:read`, `websearch:bounded`, `visualize:html`, `browsercontrol:required`, `http:probe`, `secrets:resolve-by-name`, `database:namespaced-write` | Drives the real journey in a browser and may write nothing; fresh verdict per lane |
65
+ | `release.deploy` | luna | no | `fileread:context-aliases`, `git:read`, `shell:declared-commands`, `http:probe`, `container:operate`, `ci:read`, `secrets:resolve-by-name` | Immutable release under declared authorization |
66
+ | `platform.operate` | luna | no | `fileread:context-aliases`, `git:read`, `shell:declared-commands`, `http:probe`, `container:operate`, `secrets:resolve-by-name` | Shared services from exact evidence |
67
+ | `content.generate` | luna | no | `fileread:context-aliases`, `shell:declared-commands`, `websearch:bounded`, `imagegen:required`, `objectstorage:read` | Researches the brief within bounds, then writes, codes, and draws to a claim; the schema pins this model |
68
+ | `git.publish` | luna | no | `fileread:context-aliases`, `git:merge-and-push`, `shell:declared-commands`, `ci:read` | Non-force publication; destructive operations are unrepresentable |
69
+
70
+ ## Profiles
71
+
72
+ ### Runtime `openai` (provider `openai`)
73
+
74
+ | Profile | Model | Capabilities | Permits | Used for |
75
+ | --- | --- | --- | --- | --- |
76
+ | `sol-fresh` | `gpt-5.6-sol` | web, images, browser, source | web, images, browser, source | Decisions and direction, end to end |
77
+ | `sol-reviewer` | `gpt-5.6-sol` | web, images, browser, source | browser | Audits and UAT; observes, never writes |
78
+ | `luna` | `gpt-5.6-luna` | web, images, source | web, images, source | Authored content, end to end |
79
+
80
+ ### Runtime `claude` (provider `anthropic`)
81
+
82
+ | Profile | Model | Capabilities | Permits | Used for |
83
+ | --- | --- | --- | --- | --- |
84
+ | `opus` | `claude-opus-5` | web, browser, source | browser, source | Heavy authoring and high-stakes mutation |
85
+ | `sonnet` | `claude-sonnet-5` | web, browser, source | source | Deterministic and mechanical work |
86
+ | `fable` | `claude-fable-5-1` | web, browser, source | source | Source-grounded extraction and audits |
87
+
88
+ `fable` is registered for the audit and extraction work that produced `patterns/`; no operator binds
89
+ it today.
90
+
91
+ ## What may change here
92
+
93
+ A profile's model or grants, an operator's profile, and any policy answer are owner decisions.
94
+ Changing one is an edit in the profile file or the operator's `operator.json`, the matching line in
95
+ its `operator.md`, and a green `npm test`. Adding a grant kind means adding
96
+ it to every profile explicitly, because the validator refuses a profile that leaves a grant unstated.
@@ -0,0 +1,99 @@
1
+ # Resources
2
+
3
+ Ai chạy operator nào, bằng gì, và dưới những chính sách thường trực nào. Hai chỗ đóng mang việc đó:
4
+
5
+ - `agents/profiles/<runtime>.json`: mỗi runtime một file (`openai.json`, `claude.json`); file giữ provider,
6
+ profile mang model, cách cô lập, model làm được gì ở đây
7
+ (`capabilities`), và một operator trên profile đó được phép dùng gì (`permits`).
8
+ - `operators/<id>/operator.json` → `resources`: nằm trong chính operator: đúng một profile chạy nó từ
9
+ đầu tới cuối, những quyền nó thật sự cần, và câu trả lời cho ba câu hỏi thường trực. `context.md`
10
+ của mỗi operator nói cùng ràng buộc đó bằng văn xuôi. Không có file assignment trung tâm.
11
+
12
+ `scripts/validate-resources.mjs` chạy bên trong `npm test`. Nó từ chối operator mà `operator.json` không khai
13
+ `resources`, operator trỏ tới profile không tồn tại, một id profile khai ở hai runtime, quyền được yêu cầu mà không profile nào được cấp, profile cho phép
14
+ thứ model không làm được, câu trả lời
15
+ chính sách mâu thuẫn với quyền, model mà schema của operator đã ghim nhưng không phải model của profile nó, và một dòng trong ma
16
+ trận bên dưới lệch với operator mà nó tóm tắt. Nhờ vậy sổ đăng ký, các operator và bản tóm tắt này
17
+ không thể lặng lẽ lệch nhau.
18
+
19
+ ## Luật ràng buộc
20
+
21
+ Operator ràng đúng một profile và chạy trọn trên đó, không theo từng lần gọi và không chia cho
22
+ nhiều profile: một bước phản biện, review hay phán xét bên trong operator là một bước của chính lần
23
+ thực thi đó, và đưa model thứ hai vào là thành workflow. Profile quyết model và cách cô lập;
24
+ bảng Các bước trong `operator.md` của operator quyết công việc; `resources.requires` quyết công việc đó được chạm tới quyền nào.
25
+ Một quyền không nằm trong `requires` thì operator không dùng được dù profile có cho phép. Năng lực là sự thật về model; quyền là chính sách về operator:
26
+ `gpt-5.6-sol` tìm được, vẽ được, lái được trình duyệt và ghi được source, nên `sol-fresh` được dùng cả
27
+ bốn, còn `sol-reviewer` trên cùng model đó chỉ được trình duyệt, vì một reviewer mà tự tạo ra thì
28
+ không còn là reviewer. Brainstorm
29
+ và review quan trọng luôn là một lần thực thi mới, không thừa hưởng lượt nào, và reviewer chỉ nhận
30
+ artifact với lời khai, không bao giờ nhận lý lẽ của người tạo ra.
31
+
32
+ ## Ba câu hỏi thường trực
33
+
34
+ **Có tìm trên mạng khi trong cây không có tham chiếu không?** Chỉ ở nơi `policy.webSearch` là
35
+ `bounded`: các operator ra quyết định và bước brief của nội dung. Nghiên cứu bị giới hạn bởi đúng
36
+ khoảng trống phải lấp, ghi lại đã dùng gì, và không bao giờ chép một trang, một thương hiệu, một
37
+ bảng màu, hay giải phẫu một component. Một giá trị presentation mà knowledge không publish là
38
+ `RULE_MISSING`, không bao giờ là việc phải đi tìm.
39
+
40
+ **Có tuân thủ Grammar đã publish không?** Ở nơi `policy.grammarBound` là true: bốn operator
41
+ frontend. Direction ràng các composition của Grammar; presentation chỉ giải quyết dựa trên những
42
+ quan hệ Grammar đã sở hữu; apply chỉ ghi những class đã resolve; audit phán xét theo cùng một luật.
43
+ Thiếu một capability tái dùng là `GRAMMAR_REQUIRED` hay `COMMON_CAPABILITY_MISSING`, không bao giờ
44
+ là dựng bản nhái cục bộ.
45
+
46
+ **Có sinh hình không?** `required` chỉ ở sinh nội dung, nơi hình được tạo theo một tuyên bố đã nêu
47
+ và được kiểm độ trung thành với tuyên bố đó. `authority-only` ở direction frontend: bản thân
48
+ direction render một trang xem được, còn artwork sản phẩm chỉ được sinh khi thẩm quyền sản phẩm gọi
49
+ tên nó. Mọi nơi khác, `never`.
50
+
51
+ ## Ma trận quy trình
52
+
53
+ Bản tóm tắt những gì mỗi `operator.json` khai; validator từ chối dòng nào lệch.
54
+
55
+ | Operator | Profile | Grammar | Tool | Vì sao |
56
+ | --- | --- | --- | --- | --- |
57
+ | `workspace.bind` | luna | không | `fileread:context-aliases`, `git:read`, `shell:declared-commands`, `http:probe`, `secrets:resolve-by-name` | Đọc file chuẩn và sổ đăng ký; không phán đoán |
58
+ | `business.decide` | sol-fresh | không | `fileread:context-aliases`, `sourcewrite:declared-write-set`, `git:read`, `websearch:bounded` | Mô hình kinh doanh lạ có thể cần tra cứu trước khi đóng băng độ phủ |
59
+ | `architecture.decide` | sol-fresh | không | `fileread:context-aliases`, `git:read`, `websearch:bounded`, `visualize:html` | Phương án thay thế và tương thích cần bằng chứng ngoài repo; schema đã ghim model |
60
+ | `backend.source.apply` | luna | không | `fileread:context-aliases`, `sourcewrite:declared-write-set`, `git:commit-session-branch`, `shell:declared-commands` | Ghi trong hợp đồng đã đóng băng, theo patterns/be |
61
+ | `frontend.direction.decide` | sol-fresh | có | `fileread:context-aliases`, `git:read`, `websearch:bounded`, `imagegen:judged`, `visualize:html` | Chỉ tra cứu khi lĩnh vực lạ; render ứng viên thành trang và tự xét khi một vùng quá trống, cần hình |
62
+ | `frontend.presentation.resolve` | luna | có | `fileread:context-aliases`, `git:read`, `registry:read` | Tra cứu trên một danh sách đóng |
63
+ | `frontend.source.apply` | luna | có | `fileread:context-aliases`, `sourcewrite:declared-write-set`, `git:commit-session-branch`, `imagegen:judged` | Chỉ ghi thứ resolution đã chứa, theo patterns/fe |
64
+ | `frontend.surface.audit` | sol-reviewer | có | `fileread:context-aliases`, `git:read`, `websearch:bounded`, `visualize:html`, `browsercontrol:required`, `http:probe` | Chỉ trình duyệt, không ghi source: người audit không sửa được thứ mình đo |
65
+ | `quality.verify` | luna | không | `fileread:context-aliases`, `git:read`, `shell:declared-commands`, `http:probe` | Chạy cổng, không sửa |
66
+ | `uat.verify` | sol-fresh | không | `fileread:context-aliases`, `sourcewrite:declared-write-set`, `git:read`, `websearch:bounded`, `visualize:html`, `browsercontrol:required`, `http:probe`, `secrets:resolve-by-name`, `database:namespaced-write` | Lái hành trình thật trong trình duyệt và không được ghi gì; phán quyết mới cho từng lane |
67
+ | `release.deploy` | luna | không | `fileread:context-aliases`, `git:read`, `shell:declared-commands`, `http:probe`, `container:operate`, `ci:read`, `secrets:resolve-by-name` | Phát hành bất biến dưới authorization đã khai |
68
+ | `platform.operate` | luna | không | `fileread:context-aliases`, `git:read`, `shell:declared-commands`, `http:probe`, `container:operate`, `secrets:resolve-by-name` | Dịch vụ dùng chung từ bằng chứng chính xác |
69
+ | `content.generate` | luna | không | `fileread:context-aliases`, `shell:declared-commands`, `websearch:bounded`, `imagegen:required`, `objectstorage:read` | Tra cứu brief trong giới hạn, rồi viết, code và vẽ theo tuyên bố; schema ghim model này |
70
+ | `git.publish` | luna | không | `fileread:context-aliases`, `git:merge-and-push`, `shell:declared-commands`, `ci:read` | Publish không force; thao tác phá hoại không biểu diễn được |
71
+
72
+ ## Profile
73
+
74
+ ### Runtime `openai` (provider `openai`)
75
+
76
+ | Profile | Model | Năng lực | Được cấp | Dùng cho |
77
+ | --- | --- | --- | --- | --- |
78
+ | `sol-fresh` | `gpt-5.6-sol` | mạng, hình, trình duyệt, source | mạng, hình, trình duyệt, source | Quyết định và direction, từ đầu tới cuối |
79
+ | `sol-reviewer` | `gpt-5.6-sol` | mạng, hình, trình duyệt, source | trình duyệt | Audit và UAT; chỉ quan sát, không bao giờ ghi |
80
+ | `luna` | `gpt-5.6-luna` | mạng, hình, source | mạng, hình, source | Nội dung có tác giả, từ đầu tới cuối |
81
+
82
+ ### Runtime `claude` (provider `anthropic`)
83
+
84
+ | Profile | Model | Năng lực | Được cấp | Dùng cho |
85
+ | --- | --- | --- | --- | --- |
86
+ | `opus` | `claude-opus-5` | mạng, trình duyệt, source | trình duyệt, source | Tác giả nặng và mutation rủi ro cao |
87
+ | `sonnet` | `claude-sonnet-5` | mạng, trình duyệt, source | source | Việc xác định và cơ học |
88
+ | `fable` | `claude-fable-5-1` | mạng, trình duyệt, source | source | Trích xuất và audit bám source |
89
+
90
+ `fable` được đăng ký cho việc audit và trích xuất đã tạo ra `patterns/`; hôm nay chưa operator nào
91
+ ràng nó.
92
+
93
+ ## Thứ được phép đổi ở đây
94
+
95
+ Model hay quyền của một profile, profile của một operator, và bất kỳ câu trả lời chính sách nào đều
96
+ là quyết định của chủ. Đổi một thứ là sửa file profile hay `operator.json` của operator, dòng tương ứng trong `context.md`
97
+ của nó, cộng `npm test` xanh. Thêm một loại quyền
98
+ nghĩa là phải thêm nó tường minh vào mọi profile, vì validator từ chối profile nào bỏ trống một
99
+ quyền.
@@ -0,0 +1,131 @@
1
+ {
2
+ "schemaVersion": 8,
3
+ "runtime": "claude",
4
+ "provider": "anthropic",
5
+ "note": "Execution profiles run by the claude runtime. Profile ids are unique across every file in this directory and are what each operator binds under `resources` in its operator.json. `capabilities` states what the model can do in this workspace; `permits` states what a role on this profile may use, and must be a subset of capabilities.",
6
+ "profiles": {
7
+ "opus": {
8
+ "model": "claude-opus-5",
9
+ "isolation": "fresh",
10
+ "forkTurns": "none",
11
+ "count": 1,
12
+ "role": "Heavy authoring and high-stakes mutation inside a frozen boundary: source apply, backend implementation, release and platform operations.",
13
+ "capabilities": {
14
+ "fileread": true,
15
+ "sourcewrite": true,
16
+ "git": true,
17
+ "shell": true,
18
+ "websearch": true,
19
+ "imagegen": false,
20
+ "visualize": true,
21
+ "browsercontrol": true,
22
+ "http": true,
23
+ "registry": true,
24
+ "container": true,
25
+ "ci": true,
26
+ "objectstorage": true,
27
+ "secrets": true,
28
+ "database": true
29
+ },
30
+ "permits": {
31
+ "fileread": true,
32
+ "sourcewrite": true,
33
+ "git": true,
34
+ "shell": true,
35
+ "websearch": true,
36
+ "imagegen": false,
37
+ "visualize": true,
38
+ "browsercontrol": true,
39
+ "http": true,
40
+ "registry": true,
41
+ "container": true,
42
+ "ci": true,
43
+ "objectstorage": true,
44
+ "secrets": true,
45
+ "database": true
46
+ }
47
+ },
48
+ "sonnet": {
49
+ "model": "claude-sonnet-5",
50
+ "isolation": "fresh",
51
+ "forkTurns": "none",
52
+ "count": 1,
53
+ "role": "Deterministic and mechanical work: lookups against a closed inventory, gate execution, route verification, non-force publication.",
54
+ "capabilities": {
55
+ "fileread": true,
56
+ "sourcewrite": true,
57
+ "git": true,
58
+ "shell": true,
59
+ "websearch": true,
60
+ "imagegen": false,
61
+ "visualize": true,
62
+ "browsercontrol": true,
63
+ "http": true,
64
+ "registry": true,
65
+ "container": true,
66
+ "ci": true,
67
+ "objectstorage": true,
68
+ "secrets": true,
69
+ "database": true
70
+ },
71
+ "permits": {
72
+ "fileread": true,
73
+ "sourcewrite": true,
74
+ "git": true,
75
+ "shell": true,
76
+ "websearch": true,
77
+ "imagegen": false,
78
+ "visualize": true,
79
+ "browsercontrol": false,
80
+ "http": true,
81
+ "registry": true,
82
+ "container": true,
83
+ "ci": true,
84
+ "objectstorage": true,
85
+ "secrets": true,
86
+ "database": true
87
+ }
88
+ },
89
+ "fable": {
90
+ "model": "claude-fable-5-1",
91
+ "isolation": "fresh",
92
+ "forkTurns": "none",
93
+ "count": 1,
94
+ "role": "Long-form extraction and documentation grounded in source, such as pattern catalogs and audits that must count rather than assert.",
95
+ "capabilities": {
96
+ "fileread": true,
97
+ "sourcewrite": true,
98
+ "git": true,
99
+ "shell": true,
100
+ "websearch": true,
101
+ "imagegen": false,
102
+ "visualize": true,
103
+ "browsercontrol": true,
104
+ "http": true,
105
+ "registry": true,
106
+ "container": true,
107
+ "ci": true,
108
+ "objectstorage": true,
109
+ "secrets": true,
110
+ "database": true
111
+ },
112
+ "permits": {
113
+ "fileread": true,
114
+ "sourcewrite": false,
115
+ "git": true,
116
+ "shell": true,
117
+ "websearch": true,
118
+ "imagegen": false,
119
+ "visualize": true,
120
+ "browsercontrol": true,
121
+ "http": true,
122
+ "registry": true,
123
+ "container": false,
124
+ "ci": true,
125
+ "objectstorage": false,
126
+ "secrets": true,
127
+ "database": true
128
+ }
129
+ }
130
+ }
131
+ }
@@ -0,0 +1,131 @@
1
+ {
2
+ "schemaVersion": 8,
3
+ "runtime": "openai",
4
+ "provider": "openai",
5
+ "note": "Execution profiles run by the OpenAI runtime: Sol 5.6 and Luna 5.6. These models do not run through Codex; a Codex runtime (Terra 5.6) gets its own file here only when an operator binds it. Profile ids are unique across every file in this directory and are what each operator binds under `resources` in its operator.json. `capabilities` states what the model can do in this workspace; `permits` states what a role on this profile may use, and must be a subset of capabilities.",
6
+ "profiles": {
7
+ "sol-fresh": {
8
+ "model": "gpt-5.6-sol",
9
+ "isolation": "fresh",
10
+ "forkTurns": "none",
11
+ "count": 1,
12
+ "role": "One fresh execution that completes a material brainstorm or decision end to end with no inherited turns.",
13
+ "capabilities": {
14
+ "fileread": true,
15
+ "sourcewrite": true,
16
+ "git": true,
17
+ "shell": true,
18
+ "websearch": true,
19
+ "imagegen": true,
20
+ "visualize": true,
21
+ "browsercontrol": true,
22
+ "http": true,
23
+ "registry": true,
24
+ "container": true,
25
+ "ci": true,
26
+ "objectstorage": true,
27
+ "secrets": true,
28
+ "database": true
29
+ },
30
+ "permits": {
31
+ "fileread": true,
32
+ "sourcewrite": true,
33
+ "git": true,
34
+ "shell": true,
35
+ "websearch": true,
36
+ "imagegen": true,
37
+ "visualize": true,
38
+ "browsercontrol": true,
39
+ "http": true,
40
+ "registry": true,
41
+ "container": true,
42
+ "ci": true,
43
+ "objectstorage": true,
44
+ "secrets": true,
45
+ "database": true
46
+ }
47
+ },
48
+ "sol-reviewer": {
49
+ "model": "gpt-5.6-sol",
50
+ "isolation": "fresh",
51
+ "forkTurns": "none",
52
+ "count": 1,
53
+ "role": "One fresh reviewer that receives artifacts and claims only, never the producer's rationale, and returns findings without repairing anything. The model can write and draw; this role is forbidden to, by policy.",
54
+ "capabilities": {
55
+ "fileread": true,
56
+ "sourcewrite": true,
57
+ "git": true,
58
+ "shell": true,
59
+ "websearch": true,
60
+ "imagegen": true,
61
+ "visualize": true,
62
+ "browsercontrol": true,
63
+ "http": true,
64
+ "registry": true,
65
+ "container": true,
66
+ "ci": true,
67
+ "objectstorage": true,
68
+ "secrets": true,
69
+ "database": true
70
+ },
71
+ "permits": {
72
+ "fileread": true,
73
+ "sourcewrite": false,
74
+ "git": true,
75
+ "shell": true,
76
+ "websearch": true,
77
+ "imagegen": false,
78
+ "visualize": true,
79
+ "browsercontrol": true,
80
+ "http": true,
81
+ "registry": true,
82
+ "container": false,
83
+ "ci": true,
84
+ "objectstorage": false,
85
+ "secrets": true,
86
+ "database": true
87
+ }
88
+ },
89
+ "luna": {
90
+ "model": "gpt-5.6-luna",
91
+ "isolation": "fresh",
92
+ "forkTurns": "none",
93
+ "count": 1,
94
+ "role": "Authored content end to end: bounded brief research, writing, per-language code tracks, image generation to a stated claim, and the bounded run-read-repair loop.",
95
+ "capabilities": {
96
+ "fileread": true,
97
+ "sourcewrite": true,
98
+ "git": true,
99
+ "shell": true,
100
+ "websearch": true,
101
+ "imagegen": true,
102
+ "visualize": true,
103
+ "browsercontrol": true,
104
+ "http": true,
105
+ "registry": true,
106
+ "container": true,
107
+ "ci": true,
108
+ "objectstorage": true,
109
+ "secrets": true,
110
+ "database": true
111
+ },
112
+ "permits": {
113
+ "fileread": true,
114
+ "sourcewrite": true,
115
+ "git": true,
116
+ "shell": true,
117
+ "websearch": true,
118
+ "imagegen": true,
119
+ "visualize": true,
120
+ "browsercontrol": false,
121
+ "http": true,
122
+ "registry": true,
123
+ "container": true,
124
+ "ci": true,
125
+ "objectstorage": true,
126
+ "secrets": true,
127
+ "database": true
128
+ }
129
+ }
130
+ }
131
+ }