@awebai/oats 0.29.4 → 0.30.1

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 (263) hide show
  1. package/README.md +12 -6
  2. package/bin/oats.mjs +194 -50
  3. package/docs/capabilities.md +160 -171
  4. package/docs/capability-manifest.schema.json +6 -11
  5. package/docs/configuration.md +213 -64
  6. package/docs/design/2026-09-16-knowledge-capability-contract.md +36 -50
  7. package/docs/design/2026-09-23-workspace-module-contracts.md +377 -544
  8. package/docs/design/2026-09-26-okf-knowledge-operations.md +132 -357
  9. package/docs/design/2026-09-27-team-model-v2.md +97 -117
  10. package/docs/design/2026-09-28-automations-trust.md +38 -0
  11. package/docs/design/2026-09-28-soul-launch-preference.md +63 -0
  12. package/docs/design/HISTORY.md +65 -0
  13. package/docs/design/README.md +23 -54
  14. package/docs/desktop-cli-api.md +1787 -1777
  15. package/docs/desktop.md +30 -91
  16. package/docs/execution-targets.md +146 -292
  17. package/docs/first-team.md +31 -17
  18. package/docs/implementation.md +77 -288
  19. package/docs/integrations.md +118 -320
  20. package/docs/knowledge-capability-authoring.md +25 -52
  21. package/docs/knowledge-reference/acceptance.md +3 -3
  22. package/docs/knowledge-reference/adoption.md +1 -1
  23. package/docs/knowledge-reference/harvester.md +2 -2
  24. package/docs/knowledge-reference/package-craft.md +3 -3
  25. package/docs/knowledge-reference/provider-mapping.md +3 -6
  26. package/docs/knowledge-reference/reader-capture.md +3 -3
  27. package/docs/knowledge-theory.md +62 -166
  28. package/docs/knowledge.md +225 -404
  29. package/docs/layers.md +42 -97
  30. package/docs/oats-local.schema.json +58 -5
  31. package/docs/oats-membership.schema.json +1 -8
  32. package/docs/oats-package.schema.json +5 -5
  33. package/docs/oats-workspace.schema.json +8 -22
  34. package/docs/official-catalog.md +25 -28
  35. package/docs/packages.md +45 -63
  36. package/docs/plans/0.30-close-out.md +83 -0
  37. package/docs/release-lane.md +82 -0
  38. package/docs/release-notes/oats-framework-v1.1.3.md +10 -8
  39. package/docs/release-notes/v0.19.0.md +48 -147
  40. package/docs/release-notes/v0.19.1.md +2 -3
  41. package/docs/release-notes/v0.19.3.md +2 -15
  42. package/docs/release-notes/v0.20.0.md +0 -15
  43. package/docs/release-notes/v0.22.0.md +71 -138
  44. package/docs/release-notes/v0.22.1.md +42 -90
  45. package/docs/release-notes/v0.22.10.md +1 -1
  46. package/docs/release-notes/v0.22.11.md +1 -47
  47. package/docs/release-notes/v0.22.12.md +4 -13
  48. package/docs/release-notes/v0.22.13.md +1 -42
  49. package/docs/release-notes/v0.22.14.md +3 -11
  50. package/docs/release-notes/v0.22.15.md +1 -46
  51. package/docs/release-notes/v0.22.16.md +6 -8
  52. package/docs/release-notes/v0.22.18.md +1 -99
  53. package/docs/release-notes/v0.22.19.md +3 -14
  54. package/docs/release-notes/v0.22.2.md +6 -15
  55. package/docs/release-notes/v0.22.3.md +0 -1
  56. package/docs/release-notes/v0.22.4.md +1 -14
  57. package/docs/release-notes/v0.22.5.md +2 -12
  58. package/docs/release-notes/v0.22.6.md +0 -3
  59. package/docs/release-notes/v0.23.0.md +9 -25
  60. package/docs/release-notes/v0.23.1.md +9 -25
  61. package/docs/release-notes/v0.23.2.md +2 -4
  62. package/docs/release-notes/v0.24.0.md +56 -97
  63. package/docs/release-notes/v0.24.1.md +7 -11
  64. package/docs/release-notes/v0.24.10.md +34 -45
  65. package/docs/release-notes/v0.24.11.md +12 -20
  66. package/docs/release-notes/v0.24.12.md +35 -48
  67. package/docs/release-notes/v0.24.13.md +34 -41
  68. package/docs/release-notes/v0.24.2.md +9 -13
  69. package/docs/release-notes/v0.24.3.md +7 -11
  70. package/docs/release-notes/v0.24.4.md +6 -6
  71. package/docs/release-notes/v0.24.5.md +6 -10
  72. package/docs/release-notes/v0.24.6.md +2 -5
  73. package/docs/release-notes/v0.24.7.md +46 -75
  74. package/docs/release-notes/v0.24.8.md +58 -96
  75. package/docs/release-notes/v0.24.9.md +38 -54
  76. package/docs/release-notes/v0.25.0.md +59 -76
  77. package/docs/release-notes/v0.25.1.md +57 -81
  78. package/docs/release-notes/v0.25.2.md +51 -70
  79. package/docs/release-notes/v0.25.3.md +11 -13
  80. package/docs/release-notes/v0.25.4.md +9 -13
  81. package/docs/release-notes/v0.25.5.md +3 -5
  82. package/docs/release-notes/v0.25.6.md +20 -29
  83. package/docs/release-notes/v0.25.7.md +5 -7
  84. package/docs/release-notes/v0.25.8.md +26 -39
  85. package/docs/release-notes/v0.26.0.md +175 -646
  86. package/docs/release-notes/v0.27.0.md +4 -5
  87. package/docs/release-notes/v0.27.1.md +4 -6
  88. package/docs/release-notes/v0.27.2.md +1 -1
  89. package/docs/release-notes/v0.28.0.md +57 -124
  90. package/docs/release-notes/v0.29.0.md +89 -208
  91. package/docs/release-notes/v0.29.1.md +1 -1
  92. package/docs/release-notes/v0.29.2.md +3 -4
  93. package/docs/release-notes/v0.30.0.md +205 -0
  94. package/docs/release-notes/v0.30.1.md +123 -0
  95. package/docs/schedules.md +280 -363
  96. package/docs/servers.md +99 -117
  97. package/docs/soul.schema.json +2 -9
  98. package/docs/souls-and-instances.md +145 -158
  99. package/docs/workspaces.md +137 -215
  100. package/lib/automations.mjs +21 -6
  101. package/lib/core.mjs +226 -74
  102. package/lib/instance-events.mjs +1 -1
  103. package/lib/instance-inspect.mjs +109 -34
  104. package/lib/instance-lifecycle.mjs +14 -1
  105. package/lib/instance-resolution.mjs +26 -27
  106. package/lib/launch-preference.mjs +87 -0
  107. package/lib/materialize.mjs +3 -3
  108. package/lib/packages.mjs +1 -1
  109. package/lib/resolve.mjs +30 -88
  110. package/lib/schedule.mjs +1 -1
  111. package/lib/teams-verbs.mjs +195 -0
  112. package/lib/teams.mjs +190 -0
  113. package/lib/triggers.mjs +2 -2
  114. package/lib/workspace.mjs +54 -147
  115. package/package-catalog.json +10 -16
  116. package/package.json +1 -3
  117. package/skills/oats-getting-started/SKILL.md +25 -13
  118. package/capabilities/oats-authoring/LICENSE +0 -21
  119. package/capabilities/oats-authoring/oats-package.json +0 -11
  120. package/capabilities/oats-authoring/oats.json +0 -12
  121. package/capabilities/oats-authoring/skills/integration-authoring/SKILL.md +0 -84
  122. package/capabilities/oats-authoring/skills/skill-craft/SKILL.md +0 -109
  123. package/capabilities/oats-authoring/skills/soul-craft/SKILL.md +0 -116
  124. package/capabilities/oats-aweb/bin/oats-aweb-binding.mjs +0 -11
  125. package/capabilities/oats-aweb/bin/oats-aweb.mjs +0 -1338
  126. package/capabilities/oats-aweb/injects/aweb.md +0 -47
  127. package/capabilities/oats-aweb/lib/binding-wire.mjs +0 -356
  128. package/capabilities/oats-aweb/lib/captured-execution.mjs +0 -91
  129. package/capabilities/oats-aweb/lib/captured-native.mjs +0 -91
  130. package/capabilities/oats-aweb/lib/grant-custody.mjs +0 -38
  131. package/capabilities/oats-aweb/lib/invocation-shape.mjs +0 -135
  132. package/capabilities/oats-aweb/lib/portable-binding.mjs +0 -146
  133. package/capabilities/oats-aweb/lib/session-readiness.mjs +0 -56
  134. package/capabilities/oats-aweb/lib/wake-receive.mjs +0 -56
  135. package/capabilities/oats-aweb/oats.json +0 -208
  136. package/capabilities/oats-aweb/skills/LICENSE +0 -21
  137. package/capabilities/oats-aweb/skills/VENDORED.md +0 -31
  138. package/capabilities/oats-aweb/skills/aweb-identity/SKILL.md +0 -201
  139. package/capabilities/oats-aweb/skills/aweb-messaging/SKILL.md +0 -161
  140. package/capabilities/oats-aweb/skills/aweb-messaging/references/messaging-scenarios.md +0 -61
  141. package/capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md +0 -116
  142. package/capabilities/oats-aweb/skills/aweb-team-membership/references/team-membership-reference.md +0 -74
  143. package/capabilities/oats-aweb/skills/oats-aweb/SKILL.md +0 -216
  144. package/capabilities/oats-jira/bin/oats-jira.mjs +0 -40
  145. package/capabilities/oats-jira/injects/jira.md +0 -10
  146. package/capabilities/oats-jira/oats.json +0 -22
  147. package/capabilities/oats-jira/skills/jira-tasks/SKILL.md +0 -179
  148. package/capabilities/oats-linear/bin/oats-linear-hook.mjs +0 -34
  149. package/capabilities/oats-linear/bin/oats-linear.mjs +0 -344
  150. package/capabilities/oats-linear/injects/linear.md +0 -8
  151. package/capabilities/oats-linear/oats.json +0 -24
  152. package/capabilities/oats-linear/skills/linear-tasks/SKILL.md +0 -223
  153. package/capabilities/oats-okf/bin/oats-okf-binding.mjs +0 -14
  154. package/capabilities/oats-okf/bin/oats-okf.mjs +0 -209
  155. package/capabilities/oats-okf/injects/okf.md +0 -42
  156. package/capabilities/oats-okf/lib/binding-wire.mjs +0 -348
  157. package/capabilities/oats-okf/lib/captured-worker.mjs +0 -109
  158. package/capabilities/oats-okf/lib/config.mjs +0 -124
  159. package/capabilities/oats-okf/lib/consult.mjs +0 -518
  160. package/capabilities/oats-okf/lib/harvest-status.mjs +0 -88
  161. package/capabilities/oats-okf/lib/harvest-switch.mjs +0 -94
  162. package/capabilities/oats-okf/lib/inspection.mjs +0 -119
  163. package/capabilities/oats-okf/lib/invocation-context.mjs +0 -111
  164. package/capabilities/oats-okf/lib/invocation-shape.mjs +0 -135
  165. package/capabilities/oats-okf/lib/io.mjs +0 -118
  166. package/capabilities/oats-okf/lib/migration.mjs +0 -137
  167. package/capabilities/oats-okf/lib/okf-validate.mjs +0 -123
  168. package/capabilities/oats-okf/lib/portable-binding.mjs +0 -199
  169. package/capabilities/oats-okf/lib/source-contract.mjs +0 -46
  170. package/capabilities/oats-okf/lib/sources.mjs +0 -424
  171. package/capabilities/oats-okf/lib/stores.mjs +0 -473
  172. package/capabilities/oats-okf/lib/worker.mjs +0 -497
  173. package/capabilities/oats-okf/oats.json +0 -148
  174. package/capabilities/oats-okf/schemas/okf-base.schema.json +0 -46
  175. package/capabilities/oats-okf/schemas/okf-bindings.schema.json +0 -112
  176. package/capabilities/oats-okf/schemas/okf-portable-declaration.schema.json +0 -87
  177. package/capabilities/oats-okf/schemas/okf-portable-payload.schema.json +0 -113
  178. package/capabilities/oats-okf/schemas/okf-soul.schema.json +0 -37
  179. package/capabilities/oats-okf/skills/okf-consultation/SKILL.md +0 -144
  180. package/capabilities/oats-okf/skills/okf-consultation/references/consult.md +0 -86
  181. package/capabilities/oats-okf/skills/okf-instance-knowledge/SKILL.md +0 -104
  182. package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +0 -140
  183. package/capabilities/oats-okf-harvest/injects/harvester.md +0 -12
  184. package/capabilities/oats-okf-harvest/oats.json +0 -26
  185. package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +0 -168
  186. package/capabilities/oats-okf-harvest/skills/knowledge-theory/SKILL.md +0 -192
  187. package/capabilities/oats-okf-harvest/skills/okf-authoring/SKILL.md +0 -151
  188. package/capabilities/oats-okf-harvest/skills/okf-authoring/scripts/okf-validate.mjs +0 -123
  189. package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +0 -170
  190. package/capabilities/oats-okf-maintenance/injects/maintainer.md +0 -12
  191. package/capabilities/oats-okf-maintenance/lib/provenance.mjs +0 -50
  192. package/capabilities/oats-okf-maintenance/oats.json +0 -21
  193. package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +0 -159
  194. package/capabilities/oats-okf-maintenance/skills/knowledge-theory/SKILL.md +0 -192
  195. package/capabilities/oats-okf-maintenance/skills/okf-authoring/SKILL.md +0 -151
  196. package/capabilities/oats-okf-maintenance/skills/okf-authoring/scripts/okf-validate.mjs +0 -123
  197. package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +0 -146
  198. package/capabilities/oats-review/injects/review.md +0 -69
  199. package/capabilities/oats-review/oats.json +0 -10
  200. package/capabilities/oats-review/skills/code-review/SKILL.md +0 -44
  201. package/capabilities/oats-review/skills/security-review/SKILL.md +0 -59
  202. package/docs/conventions.md +0 -90
  203. package/docs/design/2026-09-07-architecture-reassessment.md +0 -131
  204. package/docs/design/2026-09-07-desktop-souls-capabilities.md +0 -50
  205. package/docs/design/2026-09-07-mobile-agent-management-proposal.md +0 -228
  206. package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +0 -558
  207. package/docs/design/2026-09-13-knowledge-and-memory-direction.md +0 -744
  208. package/docs/design/2026-09-13-knowledge-implementation.md +0 -127
  209. package/docs/design/2026-09-13-knowledge-location-contract.md +0 -340
  210. package/docs/design/2026-09-14-artifact-retention-contract.md +0 -190
  211. package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +0 -708
  212. package/docs/design/2026-09-14-portable-souls-contract-amendments.md +0 -85
  213. package/docs/design/2026-09-14-portable-souls-explainer.md +0 -750
  214. package/docs/design/2026-09-15-captured-dispatch.md +0 -127
  215. package/docs/design/2026-09-15-captured-resolution-records.md +0 -143
  216. package/docs/design/2026-09-15-package-preparation.md +0 -100
  217. package/docs/design/2026-09-15-portable-data-contract.md +0 -121
  218. package/docs/design/2026-09-15-portable-declarations.md +0 -189
  219. package/docs/design/2026-09-15-portable-souls-handoff.md +0 -150
  220. package/docs/design/2026-09-15-portable-souls-implementation.md +0 -417
  221. package/docs/design/2026-09-15-selection-lock-and-approval.md +0 -122
  222. package/docs/design/2026-09-15-source-observation.md +0 -119
  223. package/docs/design/2026-09-16-captured-admission.md +0 -77
  224. package/docs/design/2026-09-16-captured-helper-dispatch.md +0 -105
  225. package/docs/design/2026-09-16-captured-launch-inputs.md +0 -42
  226. package/docs/design/2026-09-16-command-profile-preparation.md +0 -86
  227. package/docs/design/2026-09-16-fresh-install-first-rollout.md +0 -47
  228. package/docs/design/2026-09-16-fresh-operator-walkthrough.md +0 -282
  229. package/docs/design/2026-09-16-messaging-capability-contract.md +0 -59
  230. package/docs/design/2026-09-16-portable-migration-evidence.md +0 -158
  231. package/docs/design/2026-09-16-portable-onboarding.md +0 -179
  232. package/docs/design/2026-09-16-prepare-request-transport.md +0 -26
  233. package/docs/design/2026-09-16-provider-binding-codecs.md +0 -98
  234. package/docs/design/2026-09-16-provider-binding-wire.md +0 -274
  235. package/docs/design/2026-09-17-capability-helper-input-contract.md +0 -95
  236. package/docs/design/2026-09-17-captured-backend-parity.md +0 -53
  237. package/docs/design/2026-09-17-captured-native-start.md +0 -58
  238. package/docs/design/2026-09-17-portable-boundary-hookup.md +0 -19
  239. package/docs/design/2026-09-17-portable-boundary-resources.md +0 -52
  240. package/docs/design/2026-09-17-public-captured-start.md +0 -108
  241. package/docs/design/2026-09-17-public-prepare-request.md +0 -90
  242. package/docs/design/2026-09-18-captured-pi-host.md +0 -205
  243. package/docs/design/2026-09-18-first-cut-release-checklist.md +0 -131
  244. package/docs/design/2026-09-18-herdr-protocol-compatibility.md +0 -60
  245. package/docs/design/2026-09-20-redesign-program-board.md +0 -142
  246. package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +0 -289
  247. package/docs/design/2026-09-20-workspace-onboarding-public.md +0 -207
  248. package/docs/design/2026-09-22-desktop-parity-seams.md +0 -58
  249. package/docs/design/2026-09-23-simplified-workspace-model.md +0 -711
  250. package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +0 -65
  251. package/docs/design/2026-09-24-desktop-phase-f-boundary.md +0 -242
  252. package/docs/design/2026-09-24-phase-d-plan.md +0 -305
  253. package/docs/design/2026-09-25-teams-contract.md +0 -258
  254. package/docs/design/2026-09-26-desktop-design-brief-architecture.md +0 -241
  255. package/docs/design/desktop-ux-plan.md +0 -362
  256. package/docs/design/launch-configurations.md +0 -168
  257. package/docs/design/okf-mirror-provenance.md +0 -105
  258. package/docs/design/operations-contract.md +0 -141
  259. package/docs/oats-member.schema.json +0 -38
  260. package/skills/integration-authoring/SKILL.md +0 -84
  261. package/skills/oats-support/SKILL.md +0 -79
  262. package/skills/skill-craft/SKILL.md +0 -109
  263. package/skills/soul-craft/SKILL.md +0 -116
package/docs/packages.md CHANGED
@@ -1,10 +1,11 @@
1
- # Packages — the versioned tier
1
+ # Packages: the versioned tier
2
2
 
3
3
  A **package** is a place to fetch capabilities from *with a version attached*.
4
4
  It is one of the two kinds of capability source in the
5
5
  [workspace model](workspaces.md); the other — a member repo — is never
6
6
  versioned. Nothing is installed: a package is resolved to an exact commit by
7
- `oats sync`, recorded in `oats-lock.json`, and **copied whole into each instance at spawn** (`<home>/.oats/modules/<cap>/`).
7
+ `oats sync`, recorded in `oats-lock.json`, and **copied whole into each
8
+ instance at spawn** (`<home>/.oats/modules/<cap>/`).
8
9
 
9
10
  Ground truth: [`oats-package.schema.json`](oats-package.schema.json) (the
10
11
  package manifest), the [lock v3 format](#lock-v3) below (`validateLock` in
@@ -28,7 +29,7 @@ A Git repository **contains** a package at `oats-package/`:
28
29
 
29
30
  `oats-package.json` must declare `package` and `capabilities` (a list of
30
31
  directories relative to the package root, each holding an `oats.json`). It may
31
- also declare `souls` (0.28.0): soul directories the package ships, see
32
+ also declare `souls`: soul directories the package ships, see
32
33
  [Package souls](#package-souls). A
33
34
  directory entry need not equal the capability's name
34
35
  (`capabilities/oats-okf` → capability `oats.okf`). A package declaring one
@@ -36,22 +37,21 @@ capability name twice, a listed directory without a manifest, or a manifest
36
37
  without `capability` is `E_PACKAGE_MANIFEST`. Catalog entries may name another
37
38
  `path` than `oats-package`; a `git:` ref always reads `oats-package/`.
38
39
 
39
- ## Declaring packages — two forms, in one place
40
+ ## Declaring packages
40
41
 
41
42
  The workspace file's `packages:` map is the **only** list of versions in the
42
43
  whole organisation:
43
44
 
44
45
  ```yaml
45
46
  packages:
46
- oats.framework: v1.1.3 # bare version → the official catalog
47
- oats.okf: v2.1.3
47
+ oats.okf: v4.0.5 # bare version → the official catalog
48
48
  acme.tools: git:github.com/acme/tools@v0.4.0 # direct ref: git:<repo>@<tag or full OID>
49
49
  ```
50
50
 
51
- - **Bare version** (`v2.1.3`, `2.1.3`, `1.0.0-rc.1`): the id is looked up in
51
+ - **Bare version** (`v4.0.5`, `4.0.5`, `1.0.0-rc.1`): the id is looked up in
52
52
  the official catalog — `package-catalog.json` in the `oats` repo, or the file
53
53
  named by `OATS_PACKAGE_CATALOG` — which supplies the repo url, the tag
54
- convention (`v2.1.3` or `oats-framework/v1.1.3`) and the payload path. An id
54
+ convention (`v4.0.5` or `oats-framework/v1.4.0`) and the payload path. An id
55
55
  the catalog does not know is `E_PACKAGE_MISSING` ("use `git:<repo>@<ref>` for
56
56
  a package outside the catalog"). The catalog is the reviewed official list
57
57
  ([official-catalog.md](official-catalog.md)) and the only way a
@@ -74,12 +74,11 @@ members:
74
74
  - git:github.com/acme/agents
75
75
  - git:github.com/acme/platform
76
76
  packages:
77
- oats.framework: v1.3.2
78
- oats.okf: v4.0.1
79
- oats.aweb: v1.16.0
77
+ oats.framework: v1.4.0
78
+ oats.okf: v4.0.5
79
+ oats.aweb: v1.17.1
80
80
  teams:
81
- global: { description: Org-wide }
82
- engineering: { description: Platform }
81
+ platform: { team: "platform:acme.aweb.ai", description: Platform engineering }
83
82
  defaults:
84
83
  capabilities: { oats.core: { from: package } }
85
84
  knowledge: { oats.okf: { from: package } }
@@ -105,11 +104,11 @@ decision recorded in the lock.
105
104
  ```
106
105
  $ oats sync
107
106
  workspace acme (github.com/acme/agents @ 3f2a9c1e)
108
- members agents ✓↔ (@ 3f2a9c1e) platform ✓↔ (@ 77c0a1b2) tools ✓↔ (@ 47f4b816) billing ✗ (no-backlink)
109
- packages acme.tools 0.4.0 ✓ (@ 47f4b816) oats.framework 1.1.3 ✓ (@ 9c3e27aa) oats.okf 2.1.3 ✓ (@ b2e16f2e)
107
+ members agents ✓↔ (@ 3f2a9c1e) platform ✓↔ (@ 77c0a1b2) billing ✗ (no-backlink)
108
+ packages acme.tools 0.4.0 ✓ (@ 47f4b816) oats.okf 4.0.5 ✓ (@ 26d8216f)
110
109
  changed acme.tools — → 0.4.0 (@ 47f4b816)
111
- souls 7 discovered (6 members, 1 external, 0 disabled here) · 0 private capabilities
112
- teams engineering 4 souls, 3 capabilities · global 2 souls, 2 capabilities · unassigned 1 soul
110
+ souls 9 discovered (6 members, 1 external, 2 package, 0 disabled here) · 0 private capabilities
111
+ teams platform (shared) · this deployment's: oats teams
113
112
 
114
113
  lock oats-lock.json
115
114
  ```
@@ -127,16 +126,15 @@ lock oats-lock.json
127
126
  4. writes `oats-lock.json` and reports the diff. Entries dropped from
128
127
  `packages:` are dropped from the lock.
129
128
 
130
- There is **no approval step** (human decision, 2026-09-24): declaring a package
131
- in the workspace's `packages:` is the trust decision, so `sync` asks nothing,
132
- exits `0` on success, and `--approve` is `E_BAD_ARGS`. `--json` emits the
129
+ Declaring a package in the workspace's `packages:` is the trust decision
130
+ ([Trust](#trust)): `sync` asks nothing and exits `0` on success. `--json` emits the
133
131
  `syncApi: 1` envelope documented in
134
132
  [desktop-cli-api.md](desktop-cli-api.md#workspace-model-workspaceapi-2).
135
133
 
136
134
  ## `oats package add | remove`
137
135
 
138
136
  ```bash
139
- oats package add oats.aweb v1.11.2 # a catalog version
137
+ oats package add oats.aweb v1.17.1 # a catalog version
140
138
  oats package add acme.tools git:github.com/acme/tools@v0.4.0
141
139
  oats package remove acme.tools
142
140
  ```
@@ -144,8 +142,8 @@ oats package remove acme.tools
144
142
  Both edit `packages:` in `oats-workspace.yaml` **when the file is tracked by
145
143
  the Git checkout the command runs in** (the workspace host repo); the edit is
146
144
  validated against the full workspace schema before it is written, and the
147
- receipt tells you to commit and `oats sync`. Anywhere else — a deployment folder,
148
- a member clone — the command prints the line to add (`--json`: `edited: false`,
145
+ receipt tells you to commit and `oats sync`. Anywhere else (a deployment folder,
146
+ a member clone) the command prints the line to add (`--json`: `edited: false`,
149
147
  `line`) because the workspace file is shared through Git, not through this
150
148
  machine. Nothing network-bound happens in `package add`; `sync` resolves.
151
149
 
@@ -162,10 +160,10 @@ same workspace commit hold identical locks.
162
160
  "source": "catalog:oats.okf",
163
161
  "url": "https://github.com/awebai/oats-okf.git",
164
162
  "path": "oats-package",
165
- "version": "2.1.3",
166
- "commit": "b2e16f2ea1555be519db76fda30cd0bea06f8609",
167
- "integrity": "sha256-1c34dbe9c1cc3826dbe6ecbafbd9a1e189ed36a74bfb2ba8fb6f46a382e95c2d",
168
- "capabilities": ["oats.okf"]
163
+ "version": "4.0.5",
164
+ "commit": "26d8216f8ce986cad1ffa7a8291b4a4978510ee2",
165
+ "integrity": "sha256-…",
166
+ "capabilities": ["oats.okf", "oats.okf-harvest", "oats.okf-maintenance"]
169
167
  },
170
168
  "acme.tools": {
171
169
  "source": "git:github.com/acme/tools@v0.4.0",
@@ -183,31 +181,26 @@ same workspace commit hold identical locks.
183
181
 
184
182
  | field | meaning |
185
183
  |---|---|
186
- | `source` | `catalog:<id>` or `git:<repo key>@<ref>` — how the workspace asked for it |
184
+ | `source` | `catalog:<id>` or `git:<repo key>@<ref>`: how the workspace asked for it |
187
185
  | `url` | the repo url the package was read from; travels in the lock so spawn needs no catalog |
188
186
  | `path` | the package root inside the repo |
189
187
  | `version` | the version string without a leading `v` (a `git:…@<OID>` pin records the OID) |
190
188
  | `commit` | full 40-hex OID the version resolved to |
191
189
  | `integrity` | `sha256-<hex>` content digest of the package tree at `path` |
192
- | `capabilities` | the capability names the package provides (sorted) — what `from: package` looks up |
193
- | `souls` | the package souls (0.28.0), sorted by name: `name`, `path` (inside the package) and `digest` (`sha256-<hex>` of the soul directory); absent when the package ships none |
190
+ | `capabilities` | the capability names the package provides (sorted): what `from: package` looks up |
191
+ | `souls` | the package souls, sorted by name: `name`, `path` (inside the package) and `digest` (`sha256-<hex>` of the soul directory); absent when the package ships none |
194
192
 
195
193
  A capability provided by **two** locked packages is ambiguous and fails
196
194
  closed (`E_PACKAGE_MISSING { ambiguous: [ids] }`): keep one of them in
197
- `packages:`. A lock that is not v3 (a 0.24 lock, an unreadable file) is
198
- `E_LOCK_SCHEMA`; it is never auto-repaired — delete it and `oats sync`. A v3
199
- lock written before 0.26.0 may carry an `approved` record per entry: it is read
200
- with the field ignored, and the next write drops it. The reverse does not hold:
201
- a kernel before 0.26.0 refuses a lock 0.26.0 wrote (`E_LOCK_SCHEMA "approved:
202
- must be null or { executables, at }"`) — keep every kernel that reads one
203
- deployment on 0.26.0 or later. Agents never hand-edit the lock.
195
+ `packages:`. A lock that is not v3, or cannot be read, is `E_LOCK_SCHEMA`; it
196
+ is never repaired automatically: delete it and `oats sync`. Agents never
197
+ hand-edit the lock.
204
198
 
205
199
  ## Trust
206
200
 
207
201
  Member capabilities are trusted by membership; **a package is trusted by its
208
- declaration in the workspace's `packages:`** (human decision, 2026-09-24) —
209
- people install a package only when they trust it, so there is no second,
210
- per-version approval step. The lock is reproducibility, not approval: it pins
202
+ declaration in the workspace's `packages:`**. People declare a package only
203
+ when they trust it, so there is no second, per-version approval step. The lock is reproducibility, not approval: it pins
211
204
  the exact commit and the content integrity, a moved tag or drifted content is
212
205
  `E_PACKAGE_INTEGRITY`, and at spawn the lock's capability list must match what
213
206
  the package declares at the locked commit (`E_PACKAGE_INTEGRITY { why:
@@ -226,7 +219,7 @@ running instance's package module as `moved` once the lock points elsewhere.
226
219
 
227
220
  ## Package souls
228
221
 
229
- A package may ship **souls** as well as capabilities (0.28.0). One pin in
222
+ A package may ship **souls** as well as capabilities. One pin in
230
223
  `packages:` then versions both: nothing drifts, unlike an `external:` soul's
231
224
  commit pin.
232
225
 
@@ -244,7 +237,7 @@ oats-package/
244
237
  the lock entry. A soul without `soul.yaml` or `AGENTS.md`, or whose
245
238
  directory is not a soul name, is `E_PACKAGE_MANIFEST`. On a later sync at
246
239
  the same version the souls must still match (`E_PACKAGE_INTEGRITY { why:
247
- "souls" }`); a lock written before 0.28.0 has its `souls` filled in.
240
+ "souls" }`).
248
241
  - **Listed.** `oats souls` lists a package soul with `kind: "package"`,
249
242
  `package`, `version`, `qualifiedName` and `origin: "package <id>
250
243
  v<version>"`; `oats sync` / `oats workspace status` list each package's
@@ -253,9 +246,9 @@ oats-package/
253
246
  A bare name works when it is unique across member, external and package
254
247
  souls; otherwise `E_SOUL_AMBIGUOUS` names each qualified form
255
248
  (`details.qualified`). A member soul's qualified form is `<member name>/<soul>`.
256
- - **Resolved** like any soul: the workspace and team defaults apply, `off` and
257
- `<slot>: none` work, every `team:` label must be declared (`E_TEAM_UNKNOWN`
258
- in discovery), and `from: here` means **this package** at the locked commit
249
+ - **Resolved** like any soul: the workspace defaults apply, `off` and
250
+ `<slot>: none` work, its teams here are keyed `<package>/<soul>` in
251
+ `oats-local.yaml` `souls.teams`, and `from: here` means **this package** at the locked commit
259
252
  (a capability it does not provide is `E_CAPABILITY_MISSING`).
260
253
  - **Spawned** at the locked commit: the soul is fetched into the per-commit
261
254
  soul cache and its digest must equal the lock's (`E_PACKAGE_INTEGRITY
@@ -285,7 +278,7 @@ oats-package/
285
278
 
286
279
  ## Trigger templates
287
280
 
288
- A package may also ship **trigger templates** (0.28.0): `triggers: [{ id,
281
+ A package may also ship **trigger templates**: `triggers: [{ id,
289
282
  file }]` in `oats-package.json`, each file `{ parameters, definition }`.
290
283
  `oats trigger add --from <package>:<id> --set <name>=<value>` instantiates one
291
284
  at the locked commit; see [schedules.md#triggers](schedules.md#triggers).
@@ -296,7 +289,7 @@ A soul may state floors on package versions — constraints, not sources:
296
289
 
297
290
  ```yaml
298
291
  compatibility:
299
- oats.okf: ">=2.1"
292
+ oats.okf: ">=4.0"
300
293
  ```
301
294
 
302
295
  Checked at resolution against the locked version (`E_COMPATIBILITY`,
@@ -338,23 +331,12 @@ A soul that names one of the package's capabilities with
338
331
  {
339
332
  "policy": "docs/official-catalog.md",
340
333
  "packages": {
341
- "oats.okf": { "url": "https://github.com/awebai/oats-okf.git", "ref": "v2.1.3", "path": "oats-package" },
342
- "oats.framework": { "url": "https://github.com/awebai/oats.git", "ref": "oats-framework/v1.1.3", "path": "oats-package" }
334
+ "oats.okf": { "url": "https://github.com/awebai/oats-okf.git", "ref": "v4.0.5", "path": "oats-package" },
335
+ "oats.framework": { "url": "https://github.com/awebai/oats.git", "ref": "oats-framework/v1.4.0", "path": "oats-package" }
343
336
  }
344
337
  }
345
338
  ```
346
339
 
347
- `ref` carries the tag convention: a workspace's `oats.framework: v1.3.2`
348
- resolves to tag `oats-framework/v1.3.2`. Resolving through the catalog never
349
- advances a lock by itself — `oats sync` does, and
350
- says so.
351
-
352
- ## Removed verbs
353
-
354
- `oats install`, `restore`, `init`, `use`, `trust`, `list`, `catalog`, `remove`,
355
- `migrate`, `config` are gone; each answers `E_UNKNOWN_COMMAND` naming its
356
- replacement (`details.removed` / `details.replacement` in `--json`). There is
357
- no installed-capability directory, no config template adoption, no host
358
- requirement installer. A manifest's `requires` still describes what must exist
359
- on the host (harness packages are verified at spawn; host commands are the
360
- operator's to install).
340
+ `ref` carries the tag convention: a workspace's `oats.framework: v1.4.0`
341
+ resolves to tag `oats-framework/v1.4.0`. Resolving through the catalog never
342
+ advances a lock by itself: `oats sync` does, and says so.
@@ -0,0 +1,83 @@
1
+ # OATS 0.30 close-out: the shared plan
2
+
3
+ The single source of truth for the rest of 0.30, owned by BOTH leads (oats-expert-knowledge-reworks
4
+ and oats-expert-antares, succeeded by oats-expert-steward; Juan asked for joint work on 2026-09-28). Whoever changes the state updates
5
+ this file.
6
+
7
+ ## Rules
8
+ - One driver per item; the other lead reviews every PR in it.
9
+ - Every developer brief is cc'd to the other lead. No objection within the hour and it stands.
10
+ - Idle agent sessions don't wake on mail: nudge them by tmux when they stall.
11
+
12
+ ## Items
13
+
14
+ | # | Item | Driver | Developer | State |
15
+ |---|---|---|---|---|
16
+ | 1 | oats.aweb 1.17.1: a newcomer's first `--join` (service source, resume, `--name`); `--soul` on operator commands; the `aweb-team-leave-failed` event | Antares | Antares' aweb developer | TAGGED v1.17.1 → 9254e385 (tag object 899408a6); reviewed by the lead; proven in the final rehearsal |
17
+ | 2 | oats.okf 4.0.4: answer the kernel's documented readiness request, from the real host settings; recaptured with the real package | Antares | Antares' okf developer | TAGGED v4.0.4 → a4ccca02 (tag object e1c3827f); rehearsal case 10 PASS 5/5 with the kernel #298 fix |
18
+ | 3 | Kernel: `session start`/`restart` return, print and record the launch hooks' warnings | lead | cli-dev-okf-ops | MERGED #295 → 2049adda |
19
+ | 4 | Desktop #292: `launch-changed` decoding scoped to its code; `at: null`; real captures incl. `default-team-changed` | lead | ux-designer-desktop-redesign | MERGED #292 → 39a03379 |
20
+ | 5 | The 0.30.0 release PR (brief below) | lead | cli-dev-v2-native | briefed |
21
+ | 6 | Full rehearsal re-run on the final heads (all cases, incl. 5 and 10); close-out; retire case 9; the 0.30 runbook for Juan and Pepe | Antares | — | DONE on the final heads (main kernel stamped 0.30.0 + aweb v1.17.1 + okf v4.0.4): all cases PASS (1–8, 10, onboarding (a)–(e) + resume, the BYOT leave/retire owner commands actually run → revoked, 22 clean retires). Known: 8 (E_SPAWN_FAILED), the BYOT membership limit. Runbook for Juan and Pepe: next |
22
+ | 7a | automations.trust (#300, ACKed a0562b9f) + the Desktop grouping of `untrusted` with owner-mismatch (not here, with the remedy; a real-capture test): the Desktop PR merges BEFORE #300. Both land before the tag, or both go to 0.30.1 together | lead | cli-dev-okf-ops + ux-designer-desktop-redesign | routed |
23
+ | 7 | Tag v0.30.0 after green main CI on the exact release SHA | Antares | — | DONE: v0.30.0 + oats-framework/v1.4.0 on dec58082 (main CI green on it); published @awebai/oats 0.30.0 (shasum 2e370157) + @awebai/oats-pi 0.30.0, latest; a clean-room onboard with the published package locks framework 1.4.0, aweb 1.17.1, okf 4.0.4, engineering 1.1.0 |
24
+
25
+ **Sequence:** 1–4 in parallel → 6 on the final heads → 5 with the final pins → 7.
26
+
27
+ ## The release PR (item 5)
28
+ 1. Version 0.30.0 in EVERY package that carries it (root, pi, desktop).
29
+ 2. The `oats.core` / `oats.setup` compat floors AND the check-knowledge-theory floor at `>=0.30.0`,
30
+ in the same commit as the bump.
31
+ 3. The framework v1.4.0 pins (the tag is cut at release).
32
+ 4. The oats.aweb 1.17.1 and oats.okf 4.0.4 mirrors (trees == the tags) and pins. Until those tags
33
+ exist, use placeholders; the PR stays a draft.
34
+ 5. Re-pin the REAL bundled binding-check test to 1.17.1's actual answer (no hand-written payload).
35
+ 6. The Desktop's supported band: `<0.31`.
36
+ 7. Release notes:
37
+ - the team model v2 migration and the flag day, with every setup step as
38
+ `oats aweb setup --soul <soul>`;
39
+ - the teams you control (BYOT) line: a lost team is left automatically on hosted teams; on a team
40
+ you control, the leave is reported with an `aweb-team-leave-failed` event, and the owner
41
+ removes the member;
42
+ - launch preferences (soul `launch:`, `souls.launch`, the frozen record, `--reselect-launch`);
43
+ - automations.trust, if it merged in time: a behaviour change for hosts that ran automations;
44
+ - fixed: second-team joins usable, okf readiness answered, launch warnings shown;
45
+ - the 0.29.4 catalog note (`OATS_PACKAGE_CATALOG`).
46
+ - **Known in 0.30.0** (so nobody is surprised): with no teams configured, spawn refuses through
47
+ the provider (`E_SPAWN_FAILED`), not `E_TEAM_UNCONFIGURED`; capability operator commands run
48
+ from a deployment need `--soul <soul>`; retire of homes whose session is gone (if it misses the
49
+ tag). Each is fixed in 0.30.1.
50
+ 8. A check of the PACKED tarball: its `package-catalog.json` carries oats.engineering 1.1.0,
51
+ oats.aweb 1.17.1 and oats.okf 4.0.4.
52
+
53
+ ## Released (2026-09-29)
54
+ **OATS 0.30.0** on npm (`@awebai/oats` and `@awebai/oats-pi`, latest), from `dec58082` (#297).
55
+ Tags `v0.30.0` and `oats-framework/v1.4.0` are both on that SHA. Pins: oats.aweb 1.17.1,
56
+ oats.okf 4.0.4, oats.engineering 1.1.0, framework 1.4.0. A clean-room `oats onboard` against the
57
+ published package locks all of them without a catalog override.
58
+
59
+ Found by the rehearsals, and fixed before the tag:
60
+ - joined teams unusable against real aw;
61
+ - okf readiness always `unknown`;
62
+ - `oats aweb setup` from a deployment;
63
+ - launch-hook warnings dropped;
64
+ - `readiness --soul` with no soul copy;
65
+ - a newcomer's first `--join`;
66
+ - a stale `settings.team` orphaning identities on retire;
67
+ - a BYOT retire with no owner command.
68
+
69
+ ## After the tag
70
+ - **Flag day:** the oats.engineering release with the souls' `launch:` (experts on Claude Code +
71
+ Opus 5.5; `code-reviewer` on Codex + Astra; compat `>=0.30.0`), and committing the shared team id.
72
+ - **0.30.1:**
73
+ - the kernel items that miss the tag: retire of homes whose session is gone, automations.trust;
74
+ - deployment-scope capability commands without `--soul`;
75
+ - the case-8 pre-check (`E_TEAM_UNCONFIGURED`).
76
+ - the kernel refuses an unrecognised spawn argument (a bare `join=oats` without
77
+ `--provider oats.aweb` was silently ignored, so the spawn joined nothing).
78
+ - a launch (spawn, `session start`, `session restart`) puts the spawning kernel's bin directory
79
+ FIRST on the instance's PATH and records it in the launch recipe, so plain `oats` inside an
80
+ instance is the kernel that made it (two kernels side by side: a 0.30 home ran the global 0.24.6
81
+ and `oats aweb` was `E_UNKNOWN_COMMAND`; the injected instructions tell agents to run plain `oats`).
82
+ - **Parked:** item L (`git rm agents/`, cli-dev-v2-native). It needs the GitHub `workflow` token
83
+ scope from the human on the lead's machine.
@@ -9,6 +9,9 @@ The policy it satisfies: no release capability may permanently depend on
9
9
  GitHub or GitHub Actions. Registry publish works on its own; tags and hosted
10
10
  release assets can follow later.
11
11
 
12
+ The last two sections cover the post-publish Desktop check and mirroring a
13
+ released `oats.okf`.
14
+
12
15
  ## When to use it
13
16
 
14
17
  - **Runner outage.** GitHub Actions is down, queued, or a runner image has
@@ -130,3 +133,82 @@ contract; `test/release-lane.test.mjs` covers the lane's gates and phase
130
133
  logic against fixtures, with `npm` stubbed. The two can run in either order:
131
134
  a lane release followed by a workflow run, or a broken workflow run finished
132
135
  by the lane, and neither republishes what the other already did.
136
+
137
+ ## Desktop release verification
138
+
139
+ Installer CI gates what headless runners can prove reliably for every
140
+ published platform/architecture: electron-builder completes, the expected
141
+ DMG/ZIP/AppImage/DEB artifacts exist, both packaged macOS `.app` bundles
142
+ pass strict deep codesign verification of their complete ad-hoc signatures
143
+ (`codesign --verify --deep --strict`), node-pty's packaged `spawn-helper` is
144
+ executable, and node-pty loads and spawns under the packaged Electron ABI.
145
+ The macOS x64 leg cross-builds on macos-14 and installs Rosetta 2 so that its
146
+ x64 Electron + node-pty ABI probe really executes; a wrong-architecture
147
+ native module fails that leg.
148
+
149
+ CI does **not** gate the packaged GUI launch: ad-hoc-signed, non-notarized
150
+ Electron apps do not
151
+ have a reliable interactive windowserver in headless CI. Post-publish launch
152
+ acceptance is therefore owned by the operator/maintainer, using the actual
153
+ released installers (not a source checkout):
154
+
155
+ 1. Verify the asset checksum/attestation, install it outside the source tree,
156
+ and on macOS use right-click → **Open** for the Gatekeeper step (ad-hoc
157
+ signatures carry no identified-developer identity).
158
+ 2. Launch OATS Desktop and open a real deployment; verify roster, brain and
159
+ Markdown reads.
160
+ 3. Attach an existing tmux terminal, confirm input/output, and close the tab
161
+ (the durable tmux window must survive).
162
+ 4. Verify the released global CLI is detected and Spawn is enabled; hide or
163
+ mismatch the CLI and confirm reads/terminal still work while Spawn disables
164
+ with recovery guidance.
165
+ 5. Repeat per published architecture where hardware is available. In
166
+ particular, launch-check macOS x64 on an Intel Mac if one is available;
167
+ CI's Rosetta ABI probe is the native-module proof, while this is the actual
168
+ shipped-installer/user-launch proof.
169
+
170
+ Record the installed version, platform/architecture and outcome in the
171
+ release verification notes. This post-publish check is acceptance — it does
172
+ not weaken the pre-publish build/inventory/ABI gates.
173
+
174
+ ## Mirroring a released `oats.okf`
175
+
176
+ The standalone `awebai/oats-okf` repository is authoritative. This repository
177
+ carries a generated mirror of its capabilities under `mirrors/oats-okf*/`
178
+ and the inventory `scripts/okf-source-inventory.json`; neither is edited by
179
+ hand. The inventory records each capability at its path inside the package
180
+ (`capabilities/oats-okf`, what the tag attests) and, in `mirrorPaths`, where
181
+ this repository keeps it. The mirror is not under `capabilities/`: this
182
+ repository is a workspace member, and member discovery would list it as a
183
+ latest-state member capability beside the package. After an okf release is
184
+ tagged:
185
+
186
+ 1. Check out the release in a clean clone of `awebai/oats-okf` at the tagged
187
+ commit, with the tag present locally and `origin` pointing at the official
188
+ repository.
189
+ 2. From this repository:
190
+
191
+ ```bash
192
+ node scripts/check-okf-mirror.mjs --finalize --source <clone> \
193
+ --final-tag v<version> --final-commit <full merged commit id>
194
+ node scripts/check-okf-mirror.mjs --verify
195
+ node scripts/check-okf-mirror.mjs --verify-source --source <clone>
196
+ ```
197
+
198
+ 3. Pin the same version in `package-catalog.json` and `oats-workspace.yaml`,
199
+ update the version literals the tests and smoke script carry, and review
200
+ the diff as one PR.
201
+
202
+ `--finalize` stamps `release.status: published` only when every check passes:
203
+ the tag is exactly `v<package version>` and resolves to the given commit; the
204
+ source tree is clean, with no masked index entries; the exported files, modes
205
+ and symlink targets equal the raw objects at that commit; `origin` is the
206
+ official repository, and a fresh `ls-remote` advertises the same tag object
207
+ and commit. A failed check leaves the mirror and inventory untouched.
208
+
209
+ `--verify` needs no network: it checks the checked-in mirror against the
210
+ inventory (file set, bytes, modes, symlinks, wrapper hashes). `--verify-source`
211
+ re-checks a published inventory against the source and its origin; it attests
212
+ what the remote advertised when queried, so released tags must never move.
213
+ `--generate --source <clone>` captures a working tree for development and
214
+ always records `release.status: pending`.
@@ -1,11 +1,13 @@
1
1
  # oats.framework 1.1.3 · aweb 1.11.2 — helper composition for every edition
2
2
 
3
- Packaging fix found by the independent second operator on the 0.24.4 wave: behind the operator's `responsibleHuman` requirement, preparation refused with `needs-configuration: new helper injection requires an explicit capability policy`. `oats.okf` had adopted the helper-injection contract (`omit`); its siblings **`oats.core`** and **`oats.aweb`** shipped an `inject` without a `helperInjection` policy, so no edition's OKF harvest helper could compose and **no edition could publish a resolution**. Both remaining blockers were packaging, not operator input.
3
+ Packaging fix: `oats.core` and `oats.aweb` shipped an `inject` without a
4
+ `helperInjection` policy, so preparation refused with `needs-configuration: new
5
+ helper injection requires an explicit capability policy`, no edition's OKF
6
+ harvest helper could compose, and no edition could publish a resolution.
4
7
 
5
- - **`oats.core` 1.0.1** (in oats.framework 1.1.3): `helperInjection: {version: 1, mode: inherit}` — a helper is still an OATS instance and keeps the "you run on OATS" briefing.
6
- - **aweb 1.11.2**: `helperInjection: {version: 1, mode: omit}` — a harvest helper has no messaging identity. Manifest-only; code identical to 1.11.0.
7
- - **Release check**: `test/release-packaging.test.mjs` now asserts every framework-shipped capability with an `inject` declares a `helperInjection` policy; the theory-package check pins core's `inherit`. The framework's own packages must pass the contracts the kernel imposes.
8
- - Catalog: `oats.aweb` → `v1.11.2`, `oats.framework` → `oats-framework/v1.1.3`; six editions and workspace imports repinned.
9
- - Still open (kernel, 0.25 unless a 0.24.5 is cut): this early refusal is a bare top-level error with no `details`/attribution — it must route through the same problem shape as every other preparation problem. Also noted: `responsibleHuman` is a captured accountability claim the code validates only by shape.
10
-
11
- Decision: `agents/oats-expert/soul/knowledge/decisions/helper-injection-policy-on-every-injecting-capability.md`.
8
+ - **`oats.core` 1.0.1** (in oats.framework 1.1.3): `helperInjection: {version:
9
+ 1, mode: inherit}`; a helper keeps the "you run on OATS" briefing.
10
+ - **aweb 1.11.2**: `helperInjection: {version: 1, mode: omit}`; a harvest
11
+ helper has no messaging identity. Manifest-only.
12
+ - Catalog: `oats.aweb` → `v1.11.2`, `oats.framework` →
13
+ `oats-framework/v1.1.3`; six editions and workspace imports repinned.