@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
@@ -73,16 +73,15 @@ spellings. See [Upgrading from 0.26](#upgrading-from-026).
73
73
  and accepts kernels `>=0.25.8 <0.28.0`.
74
74
  - **Core capabilities name their origin** (soul, workspace or team) on the soul
75
75
  page and the instance sidebar, on a kernel with feature `layers-from`.
76
- - The unused "the workspace's team settings" origin label is gone (0.26.0's
77
- teams amendment K stopped emitting it).
76
+ - The unused "the workspace's team settings" origin label is gone (0.26.0
77
+ stopped emitting it).
78
78
 
79
79
  ## Fixed
80
80
 
81
81
  - **0.26.0's notes said per-workspace personal teams need undeployed aweb
82
82
  server support.** The aweb service (0.8.13 and later) and CLI (1.36.8 and
83
- later) already carry personal enrollment; what remains is oats.aweb 1.15
84
- adopting it. The bundled oats.aweb is still 1.13.1 (the personal team only);
85
- the team verbs come with oats.aweb 1.14.1 in a 0.27.x patch.
83
+ later) already carry personal enrollment; oats.aweb does not use it yet. The
84
+ bundled oats.aweb is still 1.13.1 (the personal team only).
86
85
 
87
86
  ## Upgrading from 0.26
88
87
 
@@ -7,8 +7,7 @@
7
7
  is given at spawn (`--provider oats.aweb join=<labels>`) or later with
8
8
  `oats aweb join <labels>` / the Desktop's Teams controls, and leaves with
9
9
  `oats aweb leave <labels>`. Each joined team gets its own identity under the
10
- instance home. Joined teams **poll** (their mail is read between tasks); live
11
- receive for joined teams is planned for oats.aweb 1.15. Joining needs
10
+ instance home. Joined teams **poll** (their mail is read between tasks). Joining needs
12
11
  **aw 1.36.12 or later** (older aw answers `E_TEAM_AW_FLOOR`; the primary
13
12
  identity still mints). A leave removes the local identity only after aweb
14
13
  confirms the membership is released, so a failed leave can be retried.
@@ -18,11 +17,10 @@
18
17
 
19
18
  ## Known limitations
20
19
 
21
- - The bundled oats.okf is still 2.1.5: its harvest worker spawns with `--runtime`, so each harvest answers one `deprecated-runtime-name` warning on 0.27.x. It's harmless; oats.okf 2.1.6 passes `--harness`.
20
+ - The bundled oats.okf is still 2.1.5: its harvest worker spawns with `--runtime`, so each harvest answers one `deprecated-runtime-name` warning on 0.27.x. It's harmless.
22
21
 
23
- - A per-workspace personal team still needs oats.aweb 1.15 (the aweb service
24
- and CLI already carry personal enrollment); until then "personal" is the
25
- person's active aweb team.
22
+ - There is no per-workspace personal team: "personal" is the person's active
23
+ aweb team.
26
24
 
27
25
  ## Upgrading from 0.27.0
28
26
 
@@ -37,7 +37,7 @@
37
37
 
38
38
  ## Known limitations
39
39
 
40
- - The bundled oats.okf is still 2.1.5 (its harvest answers one `deprecated-runtime-name` warning per spawn; harmless). oats.okf 2.1.6 follows in a later patch.
40
+ - The bundled oats.okf is still 2.1.5 (its harvest answers one `deprecated-runtime-name` warning per spawn; harmless).
41
41
 
42
42
  - **A `core.attributesFile` or filter driver set in the repository's own
43
43
  config is not carried** into a recovery. Merging its patterns would change
@@ -4,141 +4,74 @@ Package souls, triggers, okf 3.0.0 remote knowledge consult, and the Workspace v
4
4
 
5
5
  ## Added
6
6
 
7
- - **Package souls** (feature `package-souls`). A package may ship souls as
8
- well as capabilities: `souls: ["souls/<name>", …]` in
9
- `oats-package/oats-package.json`, each an ordinary soul directory
10
- (`soul.yaml`, `AGENTS.md`, `skills/`). One pin in the workspace's
11
- `packages:` versions both, so a package soul never drifts the way an
12
- `external:` commit pin can. See [packages.md](../packages.md#package-souls).
13
- - `oats sync` locks each soul's `name`, `path` and `digest` in the package's
14
- lock entry and checks them again on the next sync
15
- (`E_PACKAGE_INTEGRITY { why: "souls" }`). A soul without `soul.yaml` or
16
- `AGENTS.md` is `E_PACKAGE_MANIFEST`. A lock written by an earlier kernel
17
- has its `souls` filled in on the next sync.
18
- - `oats souls` lists them with `kind: "package"`, `package`, `version` and
19
- `qualifiedName`; `oats sync` and `oats workspace status` list each
20
- package's `souls`.
21
- - Spawn one by its qualified name `<package>/<soul>`
22
- (`oats spawn oats.okf/knowledge-maintainer`), or by its bare name when that
23
- is unique. A bare name shared by several souls is `E_SOUL_AMBIGUOUS`, which
24
- now names each qualified form (`details.qualified`); a member soul's is
25
- `<member name>/<soul>`.
26
- - A package soul resolves like any soul: workspace and team defaults apply,
27
- `off` and `<slot>: none` work, its `team:` labels must be declared, and
28
- `from: here` means its own package at the locked commit.
29
- - The spawn fetches the soul at the locked commit and verifies it against the
30
- lock's digest (`E_PACKAGE_INTEGRITY { why: "soul-digest" }`). It homes in
31
- its own agent directory `agents/<package>--<soul>/`
32
- (`agents/oats-okf--knowledge-maintainer/`), its agent name in `oats status`
33
- and `OATS_AGENT`, so a member soul of the same bare name never shares its
34
- directory or roster row. `instance.json.workspace.soul` records `name`,
35
- `qualifiedName` and `package: { id, version, commit, digest, path }`, and
36
- the soul id is `package:<id>#<soul>`. `oats status` shows the soul as
37
- `moved` once the package pin moves. Two packages whose ids differ only by
38
- `.` and `-` (`a.b`, `a-b`) and that ship a same-named soul would share an
39
- agent directory: that is an `E_SOUL_AMBIGUOUS` problem in `oats sync` and
40
- `oats souls`, and neither spawns.
41
-
42
- - **Triggers** (feature `triggers`): event-driven spawns. A trigger says
43
- "when a GitHub pull request event matches, spawn a new instance of this soul
44
- with this task, in these teams". It is stored beside the schedules
45
- (`kind: "trigger"` in `oats-schedules.json`) and evaluated by the same host
46
- tick; there is no daemon or webhook. See
47
- [schedules.md#triggers](../schedules.md#triggers).
48
- - The source `github.pull_request` is polled with the host's `gh` at the
49
- trigger's `poll` interval (at least 1m). Events: `opened`, `reopened`,
50
- `ready_for_review`, `labeled`, `synchronize`, filtered by `labels` and
51
- `base`.
52
- - Each event fires once: its key is recorded only after a successful spawn,
53
- so a failed spawn is retried on the next poll. Delivery is at least once: a
54
- tick that dies between the spawn and recording its key spawns the event
55
- again (held while the first instance is live, under the default `perKey: 1`). `concurrency.max` and
56
- `perKey` bound the live instances of the trigger and of one PR.
57
- - The purpose and task are templated from `{repo} {number} {url} {event}
58
- {headSha} {trigger}` only; a PR's title and body never reach the task.
59
- `spawn.teams` becomes the messaging capability's `join=`. The instance gets
60
- the event as `OATS_TRIGGER_EVENT_FILE` (`<home>/.oats/trigger-event.json`)
61
- and records `instance.json.trigger`.
62
- - `oats trigger add (--file | --from <package>:<template> --set …) | list |
63
- show | enable | disable | remove | test | status`, all with `--json`.
64
- `oats trigger test` checks gh auth and where its credential comes from
65
- (warning when the host timer cannot reach it, such as a shell-only
66
- `GH_TOKEN`), the repository and your push/maintain/admin permissions on it,
67
- the soul, the teams, and what would fire now, and spawns nothing.
68
- `oats schedule list` counts the triggers it does not list.
69
- - A package may ship trigger templates (`triggers: [{ id, file }]` in
70
- `oats-package.json`).
71
- - `oats spawn --trigger-event <file>` is how a trigger hands the event to the
72
- spawn.
7
+ - **Package souls** (feature `package-souls`). A package may ship souls
8
+ (`souls: ["souls/<name>", …]` in `oats-package/oats-package.json`), versioned
9
+ by the same `packages:` pin as its capabilities. `oats sync` locks each
10
+ soul's digest (`E_PACKAGE_INTEGRITY { why: "souls" }` on drift) and `oats
11
+ souls` lists them with `kind: "package"`. Spawn one as `<package>/<soul>`
12
+ (`oats spawn oats.okf/knowledge-maintainer`), or by its bare name when
13
+ unique; an ambiguous bare name is `E_SOUL_AMBIGUOUS`, naming each qualified
14
+ form. It resolves like any soul, is verified against the lock at spawn,
15
+ homes in `agents/<package>--<soul>/` (its agent name in `oats status`), and
16
+ shows as `moved` once the package pin moves. Two packages whose ids differ
17
+ only by `.` and `-` that ship a same-named soul are an `E_SOUL_AMBIGUOUS`
18
+ problem, and neither spawns. See [packages.md](../packages.md#package-souls).
19
+
20
+ - **Triggers** (feature `triggers`): event-driven spawns. When a GitHub pull
21
+ request event (`opened`, `reopened`, `ready_for_review`, `labeled`,
22
+ `synchronize`, filtered by `labels` and `base`) matches, a new instance of a
23
+ soul is spawned with a templated task. Triggers are stored in
24
+ `oats-schedules.json`, polled with the host's `gh` by the schedule tick (no
25
+ daemon or webhook), and delivered at least once, bounded by `concurrency.max`
26
+ and `perKey`. A PR's title and body never reach the task. Commands: `oats
27
+ trigger add | list | show | enable | disable | remove | test | status`;
28
+ `oats trigger test` checks gh auth, permissions, the soul and what would
29
+ fire, and spawns nothing. The instance gets the event as
30
+ `OATS_TRIGGER_EVENT_FILE` (via `oats spawn --trigger-event <file>`) and
31
+ records `instance.json.trigger`; `spawn.teams` becomes the messaging
32
+ capability's `join=`. Packages may ship trigger templates. See
33
+ [schedules.md](../schedules.md#triggers).
73
34
 
74
35
  ## Fixed
75
36
 
76
- - **`--flag=value` is read.** Every kernel command ignored the inline form
77
- silently: `oats spawn dev --harness=claude` spawned the default harness,
78
- and `--name=x`, `--runtime=x`, `--dir=x` and `--server=x` were dropped the
79
- same way. A kernel command now reads `--flag=value` exactly as
80
- `--flag value`, with the same validation. The value is everything after the
81
- first `=`. Two inline forms are refused with `E_BAD_ARGS`: an empty
82
- `--flag=`, and a value on a switch. `--yolo=false` is refused and never
83
- turns yolo on. A capability command's own flags are its provider's: they
84
- are forwarded exactly as typed, and the kernel reads only its dispatch flag
85
- (`--soul`) in either form. `oats capture`, `recall` and `setup` parse their
86
- own arguments, as before. See
87
- [desktop-cli-api.md § Flags](../desktop-cli-api.md#flags).
37
+ - **`--flag=value` is read.** Kernel commands silently ignored the inline
38
+ form (`oats spawn dev --harness=claude` spawned the default harness). It is
39
+ now read exactly as `--flag value`; an empty `--flag=` or a value on a switch
40
+ (`--yolo=false`) is `E_BAD_ARGS`. A capability command's own flags are
41
+ forwarded as typed. See [desktop-cli-api.md § Flags](../desktop-cli-api.md#flags).
88
42
  **On an older kernel:** use the spaced form.
89
-
90
- - **`oats-local.yaml` `souls.disabled` is enforced at spawn.** It was documented
91
- as "not run on this machine", but only counted souls in the `oats sync`
92
- report. A listed soul is now refused with `E_SOUL_DISABLED { name,
93
- qualifiedName, entry }`. An entry is a bare name (every soul of that name) or
94
- a qualified name (`oats.okf/knowledge-harvester`, `<member>/<soul>`).
43
+ - **`oats-local.yaml` `souls.disabled` is enforced at spawn**
44
+ (`E_SOUL_DISABLED`). An entry is a bare or a qualified soul name.
95
45
 
96
46
  ## oats.okf 3.0.0 (catalog pin and bundled mirror)
97
47
 
98
- The official catalog now pins `oats.okf` to `v3.0.0` (tag object `ad2349c7`,
99
- commit `76f7ccdb`). The copy bundled in this package is its byte mirror. The
100
- package declares `oats >=0.26.0`.
101
-
102
- - **Knowledge is consulted remotely.** An instance reads its soul's knowledge
103
- at the accepted state through new commands: `oats okf bases`, `index`,
104
- `cat --base <alias> <path>`, `ls`, `links` and `search`. A Git base is served
105
- from one host-wide partial clone per base, and a read refetches the accepted
106
- branch once the cached commit is older than the `consult-max-age` setting
107
- (seconds; default 300; `0` refetches on every read). `--fresh` always
108
- refetches. If the fetch fails, the read is served from the cache, with
109
- `stale: true` and the reason in its receipt.
110
- A directory base is read in place. The new `okf-consultation` skill and the
111
- okf injection teach instances to run `oats okf index` at the start of every
112
- task.
113
- - **BREAKING: no `./knowledge/` in homes.** A spawn records the accepted
114
- resolution and materializes no `./knowledge/` directory or view. Anything
115
- that read `<home>/knowledge/bases/<alias>/…` reads
116
- `oats okf cat --base <alias> <path>` instead.
117
- - **BREAKING: `oats okf refresh` is `E_REMOVED`.** There are no per-instance
118
- views to refresh.
119
- - **`oats okf read --path` still works** in 3.0.0, as an alias of `cat`.
120
- - **Older homes:** a `./knowledge/` a 2.x spawn left in a home is not touched.
121
- 3.0.0 ignores it, and `oats okf inspect` reports it as
122
- `legacy-local-view`.
123
- - The memory-harvest worker soul no longer ships a `CLAUDE.md -> AGENTS.md`
124
- symlink (npm drops symlinks, and the kernel composes each home's
125
- `CLAUDE.md`). The mirror check (`scripts/check-okf-mirror.mjs`) no longer
126
- requires one; any symlink a future release ships is mirrored and verified
127
- as before.
48
+ The official catalog pins `oats.okf` to `v3.0.0`; the bundled copy is its byte
49
+ mirror. It declares `oats >=0.26.0`.
50
+
51
+ - **Knowledge is consulted remotely**: `oats okf bases`, `index`, `cat --base
52
+ <alias> <path>`, `ls`, `links` and `search` read the soul's knowledge at the
53
+ accepted state. A Git base is served from one host-wide partial clone,
54
+ refetched once older than `consult-max-age` (default 300 s; `--fresh` always
55
+ refetches); a failed fetch serves the cache with `stale: true`. The new
56
+ `okf-consultation` skill teaches instances to run `oats okf index` at the
57
+ start of every task.
58
+ - **BREAKING: no `./knowledge/` in homes.** Read
59
+ `oats okf cat --base <alias> <path>` instead of
60
+ `<home>/knowledge/bases/<alias>/…`. A `./knowledge/` left by a 2.x spawn is
61
+ ignored and reported by `oats okf inspect` as `legacy-local-view`.
62
+ - **BREAKING: `oats okf refresh` is `E_REMOVED`.** `oats okf read --path`
63
+ still works as an alias of `cat`.
128
64
 
129
65
  ## Desktop
130
66
 
131
- - **Workspace v4 redesign** (#206): the Workspace area (Setup, Souls, Capabilities, the soul and capability pages) is rebuilt to the Workspace v4 design. Facts the kernel does not report yet are left out rather than guessed; the Setup screen no longer names kernel files.
67
+ - **Workspace v4 redesign** (#206): Setup, Souls, Capabilities and the soul
68
+ and capability pages are rebuilt. Facts the kernel does not report yet are
69
+ left out rather than guessed.
132
70
  - **Soul team labels** reach the Souls grid (#208).
133
71
 
134
- ## Tests and CI
135
-
136
- - A home's resolved view (`resolvedFromHome`) carrying the slot rows its
137
- spawn recorded (`layers`, since 0.26.0 layers-from) is now pinned. Before,
138
- no test caught reverting it to `{}`.
139
- - CI runs the suite in six parallel shards (`node --test --test-shard`), plus a gate job with the old check name. Main runs no longer cancel each other.
140
-
141
72
  ## Upgrading
142
73
 
143
- - **okf 3.0.0 is breaking for anything that read `<home>/knowledge/`.** Use `oats okf cat`. Existing homes keep their old view, unused.
144
- - **Package souls and triggers are additive.** Nothing changes until a package declares `souls:`/`triggers:`, or you add a trigger.
74
+ - **okf 3.0.0 is breaking for anything that read `<home>/knowledge/`.** Use
75
+ `oats okf cat`. Existing homes keep their old view, unused.
76
+ - **Package souls and triggers are additive.** Nothing changes until a
77
+ package declares `souls:`/`triggers:`, or you add a trigger.
@@ -2,239 +2,120 @@
2
2
 
3
3
  ## Added
4
4
 
5
- - **Workspace triggers and schedules** (feature `automations`). A trigger or a
6
- schedule can now be declared in Git, in any confirmed member, and shared with the
7
- team. It is named `<member>/<id>`, and a machine's own ones are named
8
- `local/<id>`. See
9
- [schedules.md#workspace-triggers-and-schedules](../schedules.md#workspace-triggers-and-schedules).
10
- - Triggers and schedules stay separate:
11
-
12
- | | triggers | schedules |
13
- | --- | --- | --- |
14
- | folder | `oats-triggers/` | `oats-schedules/` |
15
- | file name anywhere in the member | `*.oats-trigger.yaml` | `*.oats-schedule.yaml` |
16
- | `kind:` | `oats-trigger` | `oats-schedule` |
17
- | commands and list | `oats trigger …` | `oats schedule …` |
18
- | opt-out | `triggers.disabled` | `schedules.disabled` |
19
-
20
- `oats-package/`, `.git/` and `node_modules/` are never scanned.
21
- - Every file carries `kind`, `schemaVersion: 1`, `runsOn` (the host that runs it)
22
- and `owner` (the GitHub account it acts as). The wrong kind is
23
- `E_AUTOMATION_SCHEMA`, and a duplicate id is `E_AUTOMATION_DUPLICATE`.
24
- - A host runs one only when `runsOn` is its new `oats-local.yaml` `host.name`
25
- **and** its `gh` is logged in as `owner`. Otherwise the item is listed as
26
- `assigned-elsewhere`, `owner-mismatch` or `host-unnamed`.
27
- - `oats trigger disable <member>/<id>` and `oats schedule disable <member>/<id>`
28
- stop it on this host without a commit, by writing `triggers.disabled` or
29
- `schedules.disabled` in `oats-local.yaml`.
30
- - `oats sync` takes a snapshot of them. The host tick reads the snapshot and
31
- refreshes it every ten minutes (`oats automations refresh`).
32
- - `oats trigger add … --workspace <member> --runs-on <host> --owner <host>/<login>`
33
- writes the file in a checkout of the member, or prints it. `oats schedule add`
34
- takes the same options.
35
- - `oats trigger list --json` and `oats schedule list --json` answer the Desktop's
36
- rows for both levels: the owner, where it runs and why (not), the soul and
37
- where it comes from, the task verbatim, the event or cron, and the last and
38
- next run. Local schedule rows keep their bare `id` and add `qualifiedId`. See
39
- [desktop-cli-api.md](../desktop-cli-api.md).
40
- - Each row's `origin` carries `url` (the file on GitHub at its commit) and
41
- `localPath` (the file in this machine's clone of the member), each `null` when
42
- there is none. Both lists carry `host.ghUser` (who `gh` is logged in as, per
43
- GitHub host) and the host `scheduler`. "When it next runs" is `nextDue`
44
- everywhere.
45
- - **Desktop facts** (feature `desktop-facts`): kernel facts the Desktop's Workspace
46
- view shows, so it never derives them. Every field is an addition. See
5
+ - **Workspace triggers and schedules** (feature `automations`). A trigger or
6
+ schedule can be declared in Git in any confirmed member and shared with the
7
+ team: `oats-triggers/` or `*.oats-trigger.yaml`, and `oats-schedules/` or
8
+ `*.oats-schedule.yaml`. It is named `<member>/<id>`; a machine's own ones
9
+ are `local/<id>`. Each file names `runsOn` (the host that runs it) and
10
+ `owner` (the GitHub account it acts as); a host runs it only when `runsOn` is
11
+ its new `oats-local.yaml` `host.name` and its `gh` is logged in as `owner`.
12
+ `oats trigger|schedule disable <member>/<id>` stops one on this host without
13
+ a commit. `oats sync` snapshots them and the host tick refreshes the
14
+ snapshot every ten minutes (`oats automations refresh`). `oats trigger|schedule
15
+ add … --workspace <member>` writes the file. See
16
+ [schedules.md](../schedules.md#workspace-triggers-and-schedules) and
17
+ [desktop-cli-api.md](../desktop-cli-api.md) for the list rows.
18
+ - **Desktop facts** (feature `desktop-facts`): additive fields the Desktop's
19
+ Workspace view shows instead of deriving them, on `oats inspect --soul`,
20
+ `oats souls`, `oats capabilities`, `oats workspace status` and `oats status`
21
+ (`--json`). Among them: each capability's `composedFrom` and the defaults a
22
+ soul turned off, a soul's spawn defaults and whether it is `spawnable` here,
23
+ member clones, the lock, newer package versions, file locations, and an
24
+ instance's `startedAt`, `modelFrom` and `identityAddress`. See
47
25
  [desktop-cli-api.md](../desktop-cli-api.md#desktop-facts-feature-desktop-facts-oats-0290).
48
- - `oats inspect --soul --json`: each capability's `composedFrom` (`workspace`,
49
- `team:<label>` or `soul`), and `capabilitiesOff[]`, the defaults the soul
50
- turned off (`<id>: off` or `<slot>: none`).
51
- - `oats souls --json` rows: the default `harness`/`model` a spawn starts with,
52
- and `spawnable` and `problem`, the refusal a spawn would meet (it spawns
53
- nothing). Also `file`.
54
- - `oats capabilities --json` rows: `layer` on package rows too, `description`,
55
- `skills`/`commands`/`hooks` by name, `file`, and a member capability's `tree`
56
- (its Git tree id).
57
- - `oats workspace status --json`:
58
- - the workspace and team `defaults` as rows;
59
- - this computer's member `clones` and the rule that found each;
60
- - `disabledSouls`;
61
- - `lock` (`path`, `lockfileVersion`);
62
- - `packages[].latest` when the shipped catalog has a newer version;
63
- - file locations (`workspace.file`, `members[].url`,
64
- `members[].membershipFile`).
65
- - `oats status --json` instance rows: `startedAt` (the last start or restart),
66
- `modelFrom` (also recorded in `instance.json`) and `identityAddress`. A member
67
- module's drift `current` gains `version`.
68
- - URLs are GitHub pages at the row's commit, `null` for any other host.
69
- - `oats help` lists `spawn --provider`.
70
- - **`oats schedule test <id>`**: where a schedule runs, whether its soul resolves
71
- (a spawn preview) and when it is next due. It spawns nothing, like
72
- `oats trigger test`.
73
- - **`launchConfig`** on a trigger's `spawn` and on a spawn schedule: the soul starts
74
- on that launch configuration of the running host (`oats-local.yaml`
75
- `launch-configs`). A package trigger template can expose it as a parameter.
76
- - `oats trigger status --json` rows add `nextDue`, `concurrency` and `liveCount`;
77
- `oats trigger test --json` `wouldFire` items add `repo`.
78
- - **`OATS_SETTINGS_ORIGINS`** beside `OATS_SETTINGS`, for every hook and
79
- capability command (and readiness probes): where each leaf of the payload came
80
- from, a JSON pointer → `{ kind, at }` (`manifest-default`, `workspace`, `soul`,
81
- `host`, `spawn`). A provider can tell a soul-set value from a host-set one
82
- without reading `soul.yaml`. `instance.json` records it with the settings
83
- (`capabilities[].settingsOrigins`, `capabilityRuntime[].settingsOrigins`).
26
+ - **`oats schedule test <id>`**: where a schedule runs, whether its soul
27
+ resolves, and when it is next due. It spawns nothing.
28
+ - **`launchConfig`** on a trigger's `spawn` and on a spawn schedule: the
29
+ running host's launch configuration to start the soul with.
30
+ - `oats trigger status --json` rows add `nextDue`, `concurrency` and
31
+ `liveCount`; `oats trigger test --json` `wouldFire` items add `repo`.
32
+ - **`OATS_SETTINGS_ORIGINS`** beside `OATS_SETTINGS`, for every hook,
33
+ capability command and readiness probe: where each leaf of the payload came
34
+ from (`manifest-default`, `workspace`, `soul`, `host`, `spawn`), also
35
+ recorded in `instance.json`.
84
36
 
85
37
  ## Changed
86
38
 
87
- - **oats.framework 1.3.0 pinned.** The official catalog pins `oats.framework` to
88
- `oats-framework/v1.3.0` (this repository's workspace pins it too). 0.28.1 was never
89
- released, so this pin covers three framework releases:
90
- - **1.2.0:** the setup-admin skills. oats.setup 2.1.0 adds `oats-setup-model`,
91
- `oats-workspace-config`, `oats-teams`, `oats-automations` and a setup inject,
92
- and oats.core 2.1.0 is current for an instance's view. The `oats-setup-admin`
93
- soul uses them.
94
- - **1.2.1:** OKF knowledge operations in onboarding (oats.setup 2.1.1,
95
- `oats-onboarding`).
96
- - **1.3.0:** `knowledge-theory-expert` is a package soul
97
- (`oats spawn oats.framework/knowledge-theory-expert`), with
98
- oats.knowledge-theory 1.1.0.
99
-
100
- A workspace picks it up by pinning `oats.framework: v1.3.0` and running
101
- `oats sync`.
102
- - **A local trigger's id is `local/<id>`** in `oats trigger` rows, in its dedup keys
103
- and state, and in a triggered instance's `instance.json.trigger.id` and event
104
- file. It was the bare id in 0.28.0. Every `oats trigger` verb still accepts the
39
+ - **oats.framework 1.3.0 pinned** (covering 1.2.0, 1.2.1 and 1.3.0): the
40
+ setup-admin skills in oats.setup 2.1.0 and oats.core 2.1.0, OKF knowledge
41
+ operations in onboarding (oats.setup 2.1.1), and `knowledge-theory-expert`
42
+ as a package soul with oats.knowledge-theory 1.1.0. Pin
43
+ `oats.framework: v1.3.0` and run `oats sync`.
44
+ - **A local trigger's id is `local/<id>`** in `oats trigger` rows, its state
45
+ and a triggered instance's `instance.json`. Every verb still accepts the
105
46
  bare id.
106
47
 
107
48
  ## Removed
108
49
 
109
- - **BREAKING: capability-defined agents.** A capability manifest's `agents:` is
110
- refused at resolution, with
111
- `E_CAPABILITY_AGENTS_REMOVED { capability, agents, from }`. The remedy names the
112
- replacement: a **package soul** (`souls/<name>/` in the package, spawned as
113
- `oats spawn <package>/<name>`) or a **member soul**. `oats spawn <name>` no
114
- longer falls back to an agent declared by a materialized or locked module; an
115
- unknown name is `E_SOUL_UNKNOWN`. The manifest schema drops `agents`.
116
- - A home an earlier kernel spawned for one (its agent directory holds only
117
- `instances/`) is still listed by `oats status`, may be a `--parent`, and
118
- retires. Nothing creates one any more.
119
- - This repository's users moved:
120
- - oats.okf 4.0.0's harvester is a package soul;
121
- - the post-commit **`reviewer`** is an oats.dev **1.1.0** package soul
122
- (`oats.dev/reviewer`, beside oats.review 1.3.0; the pin moves to
123
- `v1.1.0`), and oats.review's inject spawns it unchanged, now named
124
- `oats-dev-reviewer-<short-sha>`;
125
- - **`knowledge-theory-expert`** is an oats.framework **1.3.0** package soul
126
- (`oats spawn oats.framework/knowledge-theory-expert`), with
127
- oats.knowledge-theory 1.1.0.
128
- - A v2 soul.yaml declares no harness or model, so the reviewer's harness and
129
- model now come from the **spawner's launch configuration** (its former pin was
130
- pi, gpt-5.6-sol).
50
+ - **BREAKING: capability-defined agents.** A manifest's `agents:` is refused
51
+ at resolution (`E_CAPABILITY_AGENTS_REMOVED`), naming the replacement: a
52
+ **package soul** (`oats spawn <package>/<name>`) or a member soul. `oats spawn
53
+ <name>` no longer falls back to a module's agent (`E_SOUL_UNKNOWN`). Homes
54
+ spawned earlier for one stay listed, may be a `--parent`, and retire.
55
+ - OKF's harvester is an oats.okf 4.0.0 package soul; the post-commit
56
+ `reviewer` is `oats.dev/reviewer` (oats.dev 1.1.0, beside oats.review
57
+ 1.3.0), spawned as `oats-dev-reviewer-<short-sha>`; and
58
+ `knowledge-theory-expert` is an oats.framework 1.3.0 package soul.
59
+ - The reviewer's harness and model now come from the spawner's launch
60
+ configuration (it was pinned to pi, gpt-5.6-sol).
131
61
 
132
62
  ## Fixed
133
63
 
134
- - A package soul's derived instance name is checked and de-duplicated as the name
135
- the home gets (`acme-pkg-keeper-<purpose>`, not `acme-pkg--keeper-…`). A
136
- purpose inside the limit is no longer refused, and a second spawn with the same
137
- purpose is `…-2` instead of a collision. An over-long purpose is
138
- `E_INSTANCE_NAME_INVALID` naming how many characters the purpose may have
139
- (`details.maxPurpose`).
140
-
141
- - Concurrent spawns of the same instance: a spawn that loses the race now refuses
142
- with `E_PLACEMENT_TAKEN` (it created nothing). It used to fail with an uncoded
143
- "instance already exists" error, surfaced as `E_SPAWN_FAILED`.
64
+ - A package soul's derived instance name is checked and de-duplicated as the
65
+ name the home gets; an over-long purpose is `E_INSTANCE_NAME_INVALID` with
66
+ `details.maxPurpose`.
67
+ - A spawn that loses a race for the same instance is `E_PLACEMENT_TAKEN`
68
+ (it was `E_SPAWN_FAILED`).
144
69
  - Disabled-here messages name the per-kind key (`triggers.disabled`,
145
70
  `schedules.disabled`).
146
71
 
147
72
  ## Desktop
148
73
 
149
- - **Schedules and Triggers tabs** on the automations contract. Rows are grouped by
150
- where they run: on this computer, needing attention here, or elsewhere. Workspace
151
- and local items are listed together, with an origin chip, a filter and a search.
152
- - Each row has an on-here switch, the soul and where it comes from, the cron in
153
- words or the trigger's event, and where it runs and as whom. It also shows the
154
- last and next run, and a menu (Open, Test, Run now, on/off here, Open file).
155
- - A row opens a detail page: the prompt verbatim, the schedule or event, recent
156
- runs, the kernel's placement verdict, where it comes from, and the test result.
157
- - The old Schedules read path is gone.
158
- - **Why each capability is there.** The soul page and an instance's soul tab tag
159
- each capability `workspace`, `team · <label>` or `soul`, and list the defaults the
160
- soul turned off (including a slot it emptied), from the kernel's Desktop facts.
161
- - **A moved module names its versions**: "moved 2.1.5 → 2.2.0" in the instance
162
- panel's module drift.
74
+ - **Schedules and Triggers tabs** on the automations contract: rows grouped by
75
+ where they run, workspace and local items together, a detail page per item
76
+ with its prompt, runs, placement verdict and test result. The old Schedules
77
+ read path is gone.
78
+ - The soul page and an instance's soul tab tag why each capability is there
79
+ (`workspace`, `team · <label>` or `soul`) and list the defaults turned off.
80
+ - Module drift names versions ("moved 2.1.5 → 2.2.0").
163
81
  - The Desktop accepts OATS CLIs `>=0.25.8 <0.30.0`.
164
82
 
165
- ## Internal
166
-
167
- - The release workflow runs the test suite in six parallel shards, like PR CI, and
168
- publication waits for every shard.
169
-
170
83
  ## Upgrading from 0.28
171
84
 
172
- > **0.29.0 and oats.okf 4.0.0 move in lockstep.** On kernel 0.29.0, oats.okf ≤3.x
173
- > is refused because it declares a capability agent, and oats.okf 4.0.0 requires
174
- > kernel 0.29.0. A deployment on okf 3.x therefore **stays on kernel 0.28 until it
175
- > moves its pins**. It then upgrades in one sitting, in this order:
85
+ > **0.29.0 and oats.okf 4.0.0 move in lockstep.** Kernel 0.29.0 refuses
86
+ > oats.okf ≤3.x (it declares a capability agent), and oats.okf 4.0.0 requires
87
+ > kernel 0.29.0. A deployment on okf 3.x stays on kernel 0.28 until it moves
88
+ > its pins, then upgrades in one sitting:
176
89
 
177
90
  1. **Upgrade the kernel**: the npm package, the pi adapter and the Desktop, all
178
91
  0.29.0.
179
- 2. **Move the pins** to the official catalog's: `oats.okf: v4.0.0`,
180
- `oats.dev: v1.1.0`, `oats.framework: v1.3.0`.
92
+ 2. **Move the pins** to `oats.okf: v4.0.0`, `oats.dev: v1.1.0`,
93
+ `oats.framework: v1.3.0`.
181
94
  3. **Run `oats sync`.**
182
95
 
183
- Between step 1 and step 3, a package pinned below its 0.29 release still declares
184
- `agents:`. A spawn, preview or `inspect --soul` of any soul that composes it
185
- refuses with `E_CAPABILITY_AGENTS_REMOVED`:
186
- - **oats.okf ≤3.x** (`memory-harvest`): this is **every soul with oats.okf in its
187
- knowledge slot**;
188
- - **oats.dev 1.0.x** (`reviewer`);
189
- - **oats.framework ≤1.2.x** (`knowledge-theory-expert`).
190
-
191
- Harvest is off by default in okf 4.0.0. Switch it on
192
- (`oats okf setup --harvest on`) where you want it.
193
-
194
- Homes spawned earlier keep loading their recorded modules. Homes spawned for a
195
- capability agent stay listed and retirable.
96
+ Between steps 1 and 3, any soul that composes oats.okf ≤3.x (every soul with
97
+ oats.okf in its knowledge slot), oats.dev 1.0.x or oats.framework ≤1.2.x is
98
+ refused with `E_CAPABILITY_AGENTS_REMOVED`. Harvest is off by default in okf
99
+ 4.0.0; switch it on with `oats okf setup --harvest on`. Homes spawned earlier
100
+ keep loading their recorded modules.
196
101
 
197
102
  ## oats.okf 4.0.0 (catalog pin and bundled mirror)
198
103
 
199
- The official catalog now pins `oats.okf` to `v4.0.0` (tag object `239f2885`,
200
- commit `1f0ba12f`). The copy bundled in this package is its byte mirror.
201
-
202
- **BREAKING:**
203
- - The package requires `oats >=0.29.0`; an older kernel refuses it
204
- (`E_CAPABILITY_INCOMPATIBLE`).
205
- - The `okf` and `memory-harvest` skills are gone from `oats.okf`.
206
-
207
- - **Three capabilities.** The package now exports:
208
- - `oats.okf`: the knowledge slot;
209
- - `oats.okf-harvest`: the harvester's completion and status commands;
210
- - `oats.okf-maintenance`: the maintainer's review context.
211
-
212
- The catalog maps `oats.okf-harvest` and `oats.okf-maintenance` to the
213
- `oats.okf` package.
214
- - **Working souls get two skills and the inject.** A soul with `oats.okf` in
215
- its knowledge slot gets `okf-consultation` and `okf-instance-knowledge`, and
216
- the okf inject.
217
- - **The harvester is a package soul.** `oats okf run-source` (and `oats okf
218
- harvest`) spawns `oats.okf/knowledge-harvester`. It is named
219
- `okf-harvester-<run>` and homes under
220
- `agents/oats-okf--knowledge-harvester/`. It is no longer the `memory-harvest`
221
- capability agent. After a successful completion it stays alive in the `okf`
222
- team until its PR is merged or closed. `oats.okf/knowledge-maintainer` is the
223
- package's second soul.
224
- - **The harvest-review trigger.** The package ships the trigger template
225
- `harvest-review` (`triggers/harvest-review.json`). It watches the labelled
226
- harvest PRs.
227
- - **`harvest: on|off`** (default **off**). Harvest is a host switch in
228
- `oats-local.yaml` `settings.oats.okf.harvest` (`oats okf setup --harvest
229
- on|off`). Off means no source registration, capture or custody. A soul can
230
- only opt out (`knowledge: { harvest: off }`).
231
- - **`oats okf read` is removed** (`E_REMOVED`). Use `oats okf cat --base
232
- <alias> <path>`, which takes the same path and gives the same text and
233
- receipt.
234
-
235
- The bundled mirror now covers the three capability directories
236
- (`capabilities/oats-okf`, `capabilities/oats-okf-harvest`,
237
- `capabilities/oats-okf-maintenance`). The package's souls and trigger are
238
- checked byte for byte in `scripts/okf-source-inventory.json` (schemaVersion 2).
239
- The npm package does not ship them, because the kernel reads a package's souls
240
- and triggers from Git at its locked commit.
104
+ The official catalog pins `oats.okf` to `v4.0.0`; the bundled copy is its
105
+ byte mirror.
106
+
107
+ - **BREAKING:** requires `oats >=0.29.0` (`E_CAPABILITY_INCOMPATIBLE` on an
108
+ older kernel), and the `okf` and `memory-harvest` skills are gone.
109
+ - **Three capabilities:** `oats.okf` (the knowledge slot), `oats.okf-harvest`
110
+ and `oats.okf-maintenance`. A soul with `oats.okf` in its knowledge slot gets
111
+ the `okf-consultation` and `okf-instance-knowledge` skills and the inject.
112
+ - **The harvester is a package soul**, `oats.okf/knowledge-harvester`,
113
+ spawned by `oats okf run-source` / `harvest` as `okf-harvester-<run>`. It
114
+ stays alive in the `okf` team until its PR is merged or closed.
115
+ `oats.okf/knowledge-maintainer` is the second soul, and the trigger template
116
+ `harvest-review` watches labelled harvest PRs.
117
+ - **`harvest: on|off`** (default off) is a host switch
118
+ (`oats okf setup --harvest on|off`); a soul can only opt out
119
+ (`knowledge: { harvest: off }`).
120
+ - **`oats okf read` is removed** (`E_REMOVED`); use `oats okf cat --base
121
+ <alias> <path>`.
@@ -59,7 +59,7 @@ view shows nothing new.
59
59
  kernel's workspace status and reads the branch's PR with `gh`, cached for a
60
60
  minute. The row shows `#N`, with draft, merged or closed in words. Remote
61
61
  instances, and hosts without a signed-in `gh`, show no badge.
62
- - **W6 Git & GitHub** (#239, #240, #241, #242, #243). The instance's Git panel
62
+ - **Git & GitHub** (#239, #240, #241, #242, #243). The instance's Git panel
63
63
  follows the design:
64
64
  - **Branch** shows the work mode, the distance from the default branch and
65
65
  whether the tree is clean, with the rest behind Details.