@awebai/oats 0.29.3 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/README.md +12 -6
  2. package/bin/oats.mjs +203 -54
  3. package/capabilities/oats-aweb/bin/oats-aweb.mjs +538 -204
  4. package/capabilities/oats-aweb/injects/aweb.md +1 -1
  5. package/capabilities/oats-aweb/lib/binding-wire.mjs +31 -22
  6. package/capabilities/oats-aweb/oats.json +5 -12
  7. package/capabilities/oats-aweb/skills/VENDORED.md +4 -4
  8. package/capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md +1 -1
  9. package/capabilities/oats-aweb/skills/oats-aweb/SKILL.md +83 -13
  10. package/capabilities/oats-code-review/injects/reviewer.md +26 -0
  11. package/capabilities/oats-code-review/oats.json +16 -0
  12. package/capabilities/oats-code-review/skills/adversarial-review/SKILL.md +66 -0
  13. package/capabilities/oats-code-review/skills/review-dev-docs/SKILL.md +30 -0
  14. package/capabilities/oats-code-review/skills/security-review/SKILL.md +56 -0
  15. package/capabilities/oats-code-review/skills/simplification-review/SKILL.md +34 -0
  16. package/capabilities/oats-developer/injects/developer.md +38 -0
  17. package/capabilities/oats-developer/oats.json +17 -0
  18. package/capabilities/oats-developer/skills/execution-strategy/SKILL.md +43 -0
  19. package/capabilities/oats-developer/skills/maintain-dev-docs/SKILL.md +47 -0
  20. package/capabilities/oats-developer/skills/run-the-review-loop/SKILL.md +65 -0
  21. package/capabilities/oats-developer/skills/understand-the-spec/SKILL.md +37 -0
  22. package/capabilities/oats-developer/skills/worktrees/SKILL.md +36 -0
  23. package/capabilities/oats-engineering-expert/injects/expert.md +37 -0
  24. package/capabilities/oats-engineering-expert/oats.json +17 -0
  25. package/capabilities/oats-engineering-expert/skills/coordinate-developers/SKILL.md +37 -0
  26. package/capabilities/oats-engineering-expert/skills/coordinate-experts/SKILL.md +52 -0
  27. package/capabilities/oats-engineering-expert/skills/land-your-prs/SKILL.md +50 -0
  28. package/capabilities/oats-engineering-expert/skills/plan-and-spec/SKILL.md +53 -0
  29. package/capabilities/oats-engineering-expert/skills/verify-developer-work/SKILL.md +49 -0
  30. package/capabilities/oats-okf/bin/oats-okf.mjs +16 -9
  31. package/capabilities/oats-okf/lib/binding-wire.mjs +47 -15
  32. package/capabilities/oats-okf/lib/config.mjs +2 -1
  33. package/capabilities/oats-okf/lib/consult.mjs +26 -4
  34. package/capabilities/oats-okf/lib/harvest-switch.mjs +16 -3
  35. package/capabilities/oats-okf/lib/inspection.mjs +26 -7
  36. package/capabilities/oats-okf/lib/io.mjs +9 -1
  37. package/capabilities/oats-okf/lib/sources.mjs +34 -3
  38. package/capabilities/oats-okf/lib/stores.mjs +8 -6
  39. package/capabilities/oats-okf/lib/worker.mjs +7 -17
  40. package/capabilities/oats-okf/oats.json +6 -3
  41. package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +2 -2
  42. package/capabilities/oats-okf-harvest/oats.json +3 -3
  43. package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +6 -6
  44. package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +37 -16
  45. package/capabilities/oats-okf-maintenance/injects/maintainer.md +1 -1
  46. package/capabilities/oats-okf-maintenance/lib/provenance.mjs +6 -1
  47. package/capabilities/oats-okf-maintenance/oats.json +2 -2
  48. package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +17 -2
  49. package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +11 -23
  50. package/capabilities/oats-workspace-experts/injects/oats-experts.md +26 -0
  51. package/capabilities/oats-workspace-experts/oats.json +9 -0
  52. package/docs/capabilities.md +160 -171
  53. package/docs/capability-manifest.schema.json +7 -10
  54. package/docs/configuration.md +213 -64
  55. package/docs/design/2026-09-16-knowledge-capability-contract.md +36 -50
  56. package/docs/design/2026-09-23-workspace-module-contracts.md +377 -544
  57. package/docs/design/2026-09-26-okf-knowledge-operations.md +132 -357
  58. package/docs/design/2026-09-27-team-model-v2.md +116 -0
  59. package/docs/design/2026-09-28-automations-trust.md +38 -0
  60. package/docs/design/2026-09-28-soul-launch-preference.md +63 -0
  61. package/docs/design/HISTORY.md +65 -0
  62. package/docs/design/README.md +23 -54
  63. package/docs/desktop-cli-api.md +1787 -1777
  64. package/docs/desktop.md +30 -91
  65. package/docs/execution-targets.md +146 -292
  66. package/docs/first-team.md +31 -17
  67. package/docs/implementation.md +76 -288
  68. package/docs/integrations.md +118 -320
  69. package/docs/knowledge-capability-authoring.md +25 -52
  70. package/docs/knowledge-reference/acceptance.md +3 -3
  71. package/docs/knowledge-reference/adoption.md +1 -1
  72. package/docs/knowledge-reference/harvester.md +2 -2
  73. package/docs/knowledge-reference/package-craft.md +3 -3
  74. package/docs/knowledge-reference/provider-mapping.md +3 -6
  75. package/docs/knowledge-reference/reader-capture.md +3 -3
  76. package/docs/knowledge-theory.md +62 -166
  77. package/docs/knowledge.md +225 -404
  78. package/docs/layers.md +42 -97
  79. package/docs/oats-local.schema.json +58 -5
  80. package/docs/oats-membership.schema.json +1 -8
  81. package/docs/oats-package.schema.json +5 -5
  82. package/docs/oats-workspace.schema.json +8 -22
  83. package/docs/official-catalog.md +25 -28
  84. package/docs/packages.md +45 -63
  85. package/docs/plans/0.30-close-out.md +61 -0
  86. package/docs/release-lane.md +77 -0
  87. package/docs/release-notes/oats-framework-v1.1.3.md +10 -8
  88. package/docs/release-notes/v0.19.0.md +48 -147
  89. package/docs/release-notes/v0.19.1.md +2 -3
  90. package/docs/release-notes/v0.19.3.md +2 -15
  91. package/docs/release-notes/v0.20.0.md +0 -15
  92. package/docs/release-notes/v0.22.0.md +71 -138
  93. package/docs/release-notes/v0.22.1.md +42 -90
  94. package/docs/release-notes/v0.22.10.md +1 -1
  95. package/docs/release-notes/v0.22.11.md +1 -47
  96. package/docs/release-notes/v0.22.12.md +4 -13
  97. package/docs/release-notes/v0.22.13.md +1 -42
  98. package/docs/release-notes/v0.22.14.md +3 -11
  99. package/docs/release-notes/v0.22.15.md +1 -46
  100. package/docs/release-notes/v0.22.16.md +6 -8
  101. package/docs/release-notes/v0.22.18.md +1 -99
  102. package/docs/release-notes/v0.22.19.md +3 -14
  103. package/docs/release-notes/v0.22.2.md +6 -15
  104. package/docs/release-notes/v0.22.3.md +0 -1
  105. package/docs/release-notes/v0.22.4.md +1 -14
  106. package/docs/release-notes/v0.22.5.md +2 -12
  107. package/docs/release-notes/v0.22.6.md +0 -3
  108. package/docs/release-notes/v0.23.0.md +9 -25
  109. package/docs/release-notes/v0.23.1.md +9 -25
  110. package/docs/release-notes/v0.23.2.md +2 -4
  111. package/docs/release-notes/v0.24.0.md +56 -97
  112. package/docs/release-notes/v0.24.1.md +7 -11
  113. package/docs/release-notes/v0.24.10.md +34 -45
  114. package/docs/release-notes/v0.24.11.md +12 -20
  115. package/docs/release-notes/v0.24.12.md +35 -48
  116. package/docs/release-notes/v0.24.13.md +34 -41
  117. package/docs/release-notes/v0.24.2.md +9 -13
  118. package/docs/release-notes/v0.24.3.md +7 -11
  119. package/docs/release-notes/v0.24.4.md +6 -6
  120. package/docs/release-notes/v0.24.5.md +6 -10
  121. package/docs/release-notes/v0.24.6.md +2 -5
  122. package/docs/release-notes/v0.24.7.md +46 -75
  123. package/docs/release-notes/v0.24.8.md +58 -96
  124. package/docs/release-notes/v0.24.9.md +38 -54
  125. package/docs/release-notes/v0.25.0.md +59 -76
  126. package/docs/release-notes/v0.25.1.md +57 -81
  127. package/docs/release-notes/v0.25.2.md +51 -70
  128. package/docs/release-notes/v0.25.3.md +11 -13
  129. package/docs/release-notes/v0.25.4.md +9 -13
  130. package/docs/release-notes/v0.25.5.md +3 -5
  131. package/docs/release-notes/v0.25.6.md +20 -29
  132. package/docs/release-notes/v0.25.7.md +5 -7
  133. package/docs/release-notes/v0.25.8.md +26 -39
  134. package/docs/release-notes/v0.26.0.md +175 -646
  135. package/docs/release-notes/v0.27.0.md +4 -5
  136. package/docs/release-notes/v0.27.1.md +4 -6
  137. package/docs/release-notes/v0.27.2.md +1 -1
  138. package/docs/release-notes/v0.28.0.md +57 -124
  139. package/docs/release-notes/v0.29.0.md +89 -208
  140. package/docs/release-notes/v0.29.1.md +1 -1
  141. package/docs/release-notes/v0.29.2.md +3 -4
  142. package/docs/release-notes/v0.29.4.md +90 -0
  143. package/docs/release-notes/v0.30.0.md +205 -0
  144. package/docs/schedules.md +280 -349
  145. package/docs/servers.md +99 -117
  146. package/docs/soul.schema.json +2 -9
  147. package/docs/souls-and-instances.md +145 -158
  148. package/docs/workspaces.md +132 -215
  149. package/lib/automations.mjs +28 -6
  150. package/lib/core.mjs +226 -74
  151. package/lib/instance-events.mjs +1 -1
  152. package/lib/instance-inspect.mjs +109 -34
  153. package/lib/instance-lifecycle.mjs +14 -1
  154. package/lib/instance-resolution.mjs +26 -27
  155. package/lib/launch-preference.mjs +87 -0
  156. package/lib/materialize.mjs +3 -3
  157. package/lib/packages.mjs +2 -5
  158. package/lib/resolve.mjs +29 -87
  159. package/lib/schedule.mjs +32 -18
  160. package/lib/teams-verbs.mjs +195 -0
  161. package/lib/teams.mjs +190 -0
  162. package/lib/triggers.mjs +53 -17
  163. package/lib/workspace.mjs +54 -147
  164. package/package-catalog.json +9 -15
  165. package/package.json +1 -1
  166. package/skills/oats-getting-started/SKILL.md +25 -13
  167. package/capabilities/oats-review/injects/review.md +0 -69
  168. package/capabilities/oats-review/oats.json +0 -10
  169. package/capabilities/oats-review/skills/code-review/SKILL.md +0 -44
  170. package/capabilities/oats-review/skills/security-review/SKILL.md +0 -59
  171. package/docs/conventions.md +0 -90
  172. package/docs/design/2026-09-07-architecture-reassessment.md +0 -131
  173. package/docs/design/2026-09-07-desktop-souls-capabilities.md +0 -50
  174. package/docs/design/2026-09-07-mobile-agent-management-proposal.md +0 -228
  175. package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +0 -558
  176. package/docs/design/2026-09-13-knowledge-and-memory-direction.md +0 -744
  177. package/docs/design/2026-09-13-knowledge-implementation.md +0 -127
  178. package/docs/design/2026-09-13-knowledge-location-contract.md +0 -340
  179. package/docs/design/2026-09-14-artifact-retention-contract.md +0 -190
  180. package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +0 -708
  181. package/docs/design/2026-09-14-portable-souls-contract-amendments.md +0 -85
  182. package/docs/design/2026-09-14-portable-souls-explainer.md +0 -750
  183. package/docs/design/2026-09-15-captured-dispatch.md +0 -127
  184. package/docs/design/2026-09-15-captured-resolution-records.md +0 -143
  185. package/docs/design/2026-09-15-package-preparation.md +0 -100
  186. package/docs/design/2026-09-15-portable-data-contract.md +0 -121
  187. package/docs/design/2026-09-15-portable-declarations.md +0 -189
  188. package/docs/design/2026-09-15-portable-souls-handoff.md +0 -150
  189. package/docs/design/2026-09-15-portable-souls-implementation.md +0 -417
  190. package/docs/design/2026-09-15-selection-lock-and-approval.md +0 -122
  191. package/docs/design/2026-09-15-source-observation.md +0 -119
  192. package/docs/design/2026-09-16-captured-admission.md +0 -77
  193. package/docs/design/2026-09-16-captured-helper-dispatch.md +0 -105
  194. package/docs/design/2026-09-16-captured-launch-inputs.md +0 -42
  195. package/docs/design/2026-09-16-command-profile-preparation.md +0 -86
  196. package/docs/design/2026-09-16-fresh-install-first-rollout.md +0 -47
  197. package/docs/design/2026-09-16-fresh-operator-walkthrough.md +0 -282
  198. package/docs/design/2026-09-16-messaging-capability-contract.md +0 -59
  199. package/docs/design/2026-09-16-portable-migration-evidence.md +0 -158
  200. package/docs/design/2026-09-16-portable-onboarding.md +0 -179
  201. package/docs/design/2026-09-16-prepare-request-transport.md +0 -26
  202. package/docs/design/2026-09-16-provider-binding-codecs.md +0 -98
  203. package/docs/design/2026-09-16-provider-binding-wire.md +0 -274
  204. package/docs/design/2026-09-17-capability-helper-input-contract.md +0 -95
  205. package/docs/design/2026-09-17-captured-backend-parity.md +0 -53
  206. package/docs/design/2026-09-17-captured-native-start.md +0 -58
  207. package/docs/design/2026-09-17-portable-boundary-hookup.md +0 -19
  208. package/docs/design/2026-09-17-portable-boundary-resources.md +0 -52
  209. package/docs/design/2026-09-17-public-captured-start.md +0 -108
  210. package/docs/design/2026-09-17-public-prepare-request.md +0 -90
  211. package/docs/design/2026-09-18-captured-pi-host.md +0 -205
  212. package/docs/design/2026-09-18-first-cut-release-checklist.md +0 -131
  213. package/docs/design/2026-09-18-herdr-protocol-compatibility.md +0 -60
  214. package/docs/design/2026-09-20-redesign-program-board.md +0 -142
  215. package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +0 -289
  216. package/docs/design/2026-09-20-workspace-onboarding-public.md +0 -207
  217. package/docs/design/2026-09-22-desktop-parity-seams.md +0 -58
  218. package/docs/design/2026-09-23-simplified-workspace-model.md +0 -711
  219. package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +0 -65
  220. package/docs/design/2026-09-24-desktop-phase-f-boundary.md +0 -242
  221. package/docs/design/2026-09-24-phase-d-plan.md +0 -305
  222. package/docs/design/2026-09-25-teams-contract.md +0 -258
  223. package/docs/design/2026-09-26-desktop-design-brief-architecture.md +0 -241
  224. package/docs/design/desktop-ux-plan.md +0 -362
  225. package/docs/design/launch-configurations.md +0 -168
  226. package/docs/design/okf-mirror-provenance.md +0 -105
  227. package/docs/design/operations-contract.md +0 -141
  228. package/docs/oats-member.schema.json +0 -38
  229. package/skills/integration-authoring/SKILL.md +0 -84
  230. package/skills/oats-support/SKILL.md +0 -79
  231. package/skills/skill-craft/SKILL.md +0 -109
  232. package/skills/soul-craft/SKILL.md +0 -116
@@ -24,16 +24,15 @@ bundled `capabilities/oats-aweb` is the tag's tree.
24
24
  - **An agent playbook.** The new `oats-aweb` skill carries the playbook, and
25
25
  the inject is shorter and points to it. `oats aweb roster --label <label>`
26
26
  is new.
27
- - **Deferred to 1.16: per-workspace personal-team enrollment.** It needs a
28
- per-deployment login and a recorded owner. 1.15 makes no `aw auth` or
27
+ - **No per-workspace personal-team enrollment.** 1.15 makes no `aw auth` or
29
28
  `aw team ensure` call, and the primary team resolves as in 1.14.2. A
30
29
  host-set `settings.oats.aweb.roots.personal` is ignored with the readiness
31
30
  warning `personal-root-deferred`.
32
31
 
33
32
  ## Desktop
34
33
 
35
- - **Line counts on the Changes rows** (#245, #246). The server passes kernel
36
- #238's per-file counts through, and each W6 Changes row ends with "+84 −3",
34
+ - **Line counts on the Changes rows** (#245, #246). The server passes the kernel's
35
+ per-file counts (#238) through, and each Git & GitHub Changes row ends with "+84 −3",
37
36
  or "binary". An unknown count (untracked, submodule) and older kernels show
38
37
  nothing, never "+0".
39
38
  - **The Git & GitHub tab counts unresolved review threads** (#247). The tab and
@@ -0,0 +1,90 @@
1
+ # OATS 0.29.4
2
+
3
+ ## Security
4
+
5
+ - **An automation's `model` could inject spawn options** (#255). A trigger's
6
+ `spawn.model` or a schedule's `model` such as `--task-file=<path>` was passed
7
+ to the child `oats spawn` as a flag of its own. It could make any readable
8
+ file the instance's `TASK.md`, or add `--work` or `--allow-child-spawns`,
9
+ past the automation schema. Three changes close it:
10
+ - `model` must be a model id; a schedule's `agent` and `repo` may not start
11
+ with `-`;
12
+ - every value reaches the child as one `--flag=value` token;
13
+ - the CLI refuses an inline value that is itself an option (`--model=--yolo`
14
+ is `E_BAD_ARGS`).
15
+ - **oats.okf 4.0.1: a crafted Git base could write files anywhere the user
16
+ can write** (okf 3.0.0 and 4.0.0). Every tree entry of a base's accepted
17
+ commit is now contained, and a bad entry refuses the whole base with
18
+ `E_PATH`. Upgrade the pin; details under oats.okf 4.0.1 below.
19
+
20
+ ## Fixed
21
+
22
+ - **A member repository named `local`** collided with this host's own
23
+ triggers and schedules (`local/<id>`): their state, live counts and CLI
24
+ edits. Such a member is now `E_AUTOMATION_DUPLICATE`, and its automations
25
+ are not listed (#256).
26
+ - **A workspace command's `cwd` may no longer leave the deployment**, through
27
+ `..` or a symlink (#256).
28
+ - **A newer push supersedes a pending `synchronize`** for an older head of the
29
+ same pull request (#256).
30
+ - **A workspace trigger's `owner` and `on.repo` must be on the same GitHub
31
+ host** (#256).
32
+ - **Upgrading from 0.28 re-fired every open pull request.** Trigger state kept
33
+ under a local trigger's bare id (0.28) is now carried to `local/<id>`, so
34
+ nothing re-fires. Homes that 0.28 spawned still count toward the trigger's
35
+ concurrency (#256).
36
+ - **A package soul's command could get another soul's `OATS_SOUL`.** A command
37
+ run from the deployment with `--soul <package>/<soul>` read the soul's copy
38
+ under the bare name's agent directory. It ran without `OATS_SOUL`, or with a
39
+ same-named member soul's copy. It now reads `agents/<package>--<soul>/`
40
+ (#256).
41
+
42
+ ## Changed
43
+
44
+ - **`helperInjection` is marked deprecated in the capability manifest
45
+ schema** (#257). It has been ignored since 0.26 and is still accepted, so
46
+ old manifests validate. oats.core 2.1.2 and oats.setup 2.1.3 no longer
47
+ declare it; the catalog and this repo's workspace pin `oats.framework` to
48
+ `oats-framework/v1.3.2`, which ships them.
49
+ - **`triggersMaxConcurrent`** in the host registry
50
+ (`~/.oats/schedules/registry.json`) caps trigger-spawned live instances
51
+ across the host's scopes (#256). It is absent by default, which means no
52
+ host cap: each trigger's own `concurrency.max` applies. It is separate from
53
+ the schedules' `maxConcurrent`: neither counts the other's instances.
54
+
55
+ ## oats.okf 4.0.1 (catalog pin and bundled mirror)
56
+
57
+ The catalog and this repo's workspace pin `oats.okf` to `v4.0.1`. The three
58
+ bundled capabilities (`oats.okf`, `oats.okf-harvest`, `oats.okf-maintenance`)
59
+ are the tag's trees. The kernel floor stays `>=0.29.0`.
60
+
61
+ - **Security: a crafted Git base could write files anywhere the user can
62
+ write.** This affects okf 3.0.0 and 4.0.0: upgrade.
63
+ - Validating a Git base's accepted commit copied every tree entry into a
64
+ scratch directory with no containment check. Git accepts literal `..`
65
+ entries.
66
+ - The first `oats okf bases`, or a spawn against a crafted accepted commit,
67
+ could create any file that did not yet exist, with attacker content.
68
+ - Every entry is now checked against the canonical path rules, and its
69
+ target must stay inside the scratch. All entries are checked before
70
+ anything is written, and the first bad entry refuses the whole base with
71
+ `E_PATH`. The staging materializer asserts the same.
72
+ - GitHub probably blocks such a push; local and self-hosted bases do not.
73
+ - **Credentials are never shown to agents.** A repository URL with a user or
74
+ token in it is refused at binding: use a Git credential helper or an SSH
75
+ key. Every repository in `bases` output and in errors is redacted,
76
+ including Git's own failure text.
77
+ - **Knowledge review trusts only the accepted base.**
78
+ `review-context --checkout` takes node ownership from the base's accepted
79
+ `okf-base.json`, never from the PR. It lists the nodes a PR claims but the
80
+ source does not own, and flags any change to `okf-base.json`.
81
+ - **A merge is tied to the reviewed head**
82
+ (`gh pr merge --match-head-commit`). **`okf-needs-human` is a hard stop**
83
+ for every PR event, until a human removes the label.
84
+ - **Turning harvest off takes effect at once.** `run-source` and `retire`
85
+ re-read the harvest switch, including the soul's. A soul or deployment that
86
+ turns harvest off after spawn stops capture at the next run. Retire then
87
+ takes no final capture; inputs already in custody stay.
88
+ - **`OATS_SETTINGS_ORIGINS` is an extra signal:** a harvest value that comes
89
+ from the soul never switches harvest on. `soul.yaml` stays the authority for
90
+ the absolute opt-out.
@@ -0,0 +1,205 @@
1
+ # OATS 0.30.0
2
+
3
+ ## Upgrade
4
+
5
+ > **BREAKING: 0.30.0, oats.aweb 1.17 and oats.framework 1.4.0 move in
6
+ > lockstep.** oats.aweb 1.17 and oats.core / oats.setup 2.2.0 require
7
+ > `oats >=0.30.0` (`E_CAPABILITY_INCOMPATIBLE` on an older kernel), and 0.30
8
+ > refuses the 0.29 team keys.
9
+
10
+ **The workspace** (by PR). 0.30 refuses these keys with `E_WORKSPACE_SCHEMA`
11
+ (reason `removed-key`, naming the replacement): `messaging.byTeam`,
12
+ `defaults.byTeam`, `external[].team`, `soul.yaml` `team:` and
13
+ `oats-membership.yaml` `team`. 0.29.4 accepts their removal, so remove them
14
+ first. Then move the pins to `oats.framework: v1.4.0`, `oats.aweb: v1.17.1`,
15
+ `oats.okf: v4.0.4`, and replace `oats.dev` with `oats.engineering: v1.1.0`.
16
+
17
+ **Each deployment:**
18
+
19
+ 1. **Upgrade the CLI**: the npm package `@awebai/oats`, the pi adapter and the
20
+ Desktop, all 0.30.0. Then run `oats sync`.
21
+ 2. **Remove `settings.oats.aweb.team`** from `oats-local.yaml`: teams are
22
+ now `oats teams` and `oats soul teams`, and oats.aweb 1.17 refuses the
23
+ setting.
24
+ 3. **Run setup** from the deployment: `oats aweb setup --soul <soul>`, with
25
+ any soul that has messaging. Plain `oats aweb setup` outside an instance
26
+ home is refused. With an existing messaging root, setup names the team the
27
+ root is in: record it with `oats teams add <label> --team <id>` (the first
28
+ team becomes `defaultTeam`). With no account:
29
+ `oats aweb setup --soul <soul> --username <u>`.
30
+ 4. **Join the teams you share**: ask the owner for an invite, then
31
+ `oats aweb setup --soul <soul> --join <label> --invite <token>
32
+ [--service <url>] [--name <alias>]`. A half-finished join resumes with
33
+ `--join <label> --service <url>` and no new invite. Until the flag day,
34
+ declare the team here as a local team: `oats teams add <label> --team <id>`.
35
+ 5. **Put souls in teams here**, in place of the removed `team:`:
36
+ `oats soul teams '*' --add <label>` or `oats soul teams <soul> --add <label>`.
37
+ 6. **Trust the workspace automations this host runs** (a host that runs
38
+ workspace triggers or schedules): add them to `oats-local.yaml`
39
+ `automations.trust` (`<member>/<id>` entries, or `"*"`). Until then they
40
+ do not run; `oats workspace status` names each missing line.
41
+ 7. **Check**: `oats teams`, and `oats readiness --soul <soul>` shows no team
42
+ problem in `checks.configured`.
43
+
44
+ **The flag day.** Commit a shared team's id in `oats-workspace.yaml`, and add
45
+ `launch:` to a committed soul, only once every deployment of the workspace
46
+ runs 0.30. 0.29.4 refuses both: members are read at their latest commit, and
47
+ its schemas reject the unknown keys.
48
+
49
+ **A deployment still on 0.29.4** has a bundled catalog that does not know
50
+ `oats.engineering`, so its bare-version pin is `E_PACKAGE_MISSING`. Until it
51
+ upgrades, set `OATS_PACKAGE_CATALOG` to a catalog file that lists it, such as
52
+ 0.30.0's `package-catalog.json`.
53
+
54
+ ## Team model v2
55
+
56
+ - **Teams are local to each deployment.** `oats-local.yaml` holds the local
57
+ teams (`teams.<label>: { team, description? }`), `defaultTeam`, and which
58
+ teams each soul may join here (`souls.teams`, `"*"` for every soul, plus an
59
+ optional `souls.default` per soul). Nothing committed says who is in a team.
60
+ - **A shared team is committed** in `oats-workspace.yaml` `teams:` **with its
61
+ provider id**. One declared without an id is `team-unmapped`: its owner
62
+ creates it and commits the id. A label in both files is
63
+ `team-label-collision`, a warning, and the shared definition wins.
64
+ - **A spawn joins the default team only.** Every other eligible team is opt-in
65
+ per instance: `--provider oats.aweb join=<labels>` at spawn, the Desktop's
66
+ checkboxes, or the provider's join and leave verbs later.
67
+ - **A leave is never silent.** A joined team that is no longer eligible is
68
+ left on the next live read; a newly eligible team is offered, never joined.
69
+ A team a soul no longer lists is left automatically on hosted teams. On a
70
+ team you control (BYOT, namespace-controlled), aw cannot release the member
71
+ from the instance, so the leave is reported (a launch warning and an
72
+ `aweb-team-leave-failed` instance event) and the team's owner removes the
73
+ member.
74
+ - **`oats teams`** lists this deployment's teams, ids, default and problems;
75
+ `add <label> --team <id>`, `remove <label>` and `default <label>` edit
76
+ `oats-local.yaml` only. `remove` refuses a referenced label
77
+ (`E_TEAM_IN_USE`) or a shared one (`E_TEAM_SHARED`).
78
+ **`oats soul teams <soul>|'*'`** takes `--add`, `--remove`, `--default` and
79
+ `--clear-default`. Neither verb calls the provider.
80
+ - **`oats aweb setup`** creates and joins provider teams:
81
+ `--soul <soul> --create <label> --namespace <domain>` creates a team you
82
+ control and records it as a local team; `--soul <soul> --join <label>
83
+ --invite <token>` joins an existing one. Each team gets its own messaging
84
+ root (`settings.oats.aweb.roots.<team id>`).
85
+ - **Readiness** reports team problems in `checks.configured`:
86
+ `E_TEAM_UNCONFIGURED`, `team-unmapped`, `team-label-collision`, and
87
+ `default-team-changed` for a running instance. An undeclared label is
88
+ `E_TEAM_UNKNOWN`.
89
+ - **Providers** receive `OATS_DEFAULT_TEAM`, `OATS_DEFAULT_TEAM_ID`,
90
+ `OATS_DEFAULT_TEAM_FROM`, `OATS_TEAMS` and `OATS_TEAMS_SOURCE`. The 0.29
91
+ names `OATS_TEAM_LABEL`, `OATS_TEAM_LABELS` and `OATS_TEAM_ID` are unset.
92
+
93
+ ## Soul launch preferences
94
+
95
+ - **A soul may declare `launch: { harness, model? }`** in `soul.yaml`
96
+ (`pi`, `claude` or `codex`); only a harness and a model.
97
+ - **`oats-local.yaml` `souls.launch` overrides it on this machine**: `"*"` for
98
+ every soul or one soul's entry, each a launch configuration's name or an
99
+ inline `{ harness, model? }`.
100
+ - **Precedence for a new launch:** `--launch-config` or `--harness`, then
101
+ `souls.launch.<soul>`, then `souls.launch."*"`, then the soul's `launch:`,
102
+ then `pi` with its defaults. `--model` alone keeps the deciding layer's
103
+ harness. A missing harness is `E_HARNESS_UNAVAILABLE`, naming the layer
104
+ and the fix; there is no fallback.
105
+ - **A home's recorded launch stays frozen.** A changed preference reaches it
106
+ only with `oats session start|restart --reselect-launch` or a respawn;
107
+ `oats readiness --home` warns `launch-changed`. `session start|restart
108
+ --model` keeps the recorded harness and replaces only the model (#294).
109
+ - `oats souls`, `oats inspect --soul` and `oats spawn … --preview` show each
110
+ soul's `launch` and which layer decided it.
111
+
112
+ ## Changed
113
+
114
+ - **A host runs a workspace trigger or schedule only when its
115
+ `oats-local.yaml` trusts it** (`automations.trust: [<member>/<id>]` or
116
+ `"*"`). Hosts that ran workspace automations must add their trust lines;
117
+ `oats workspace status` names each missing line (#300).
118
+ - **`key` on `oats souls` rows and `oats status` agent rows**: the soul's name
119
+ as `souls.teams` and `souls.launch` take it (`<package>/<soul>` for a
120
+ package soul).
121
+ - **A team id must be safe**: no leading `-`, no whitespace or control
122
+ characters, at most 256 characters.
123
+ - **The teams verbs edit only their own entries** in `oats-local.yaml`;
124
+ comments survive.
125
+
126
+ ## Fixed
127
+
128
+ - **An opted-in second team (`join=`) now yields a connected, usable
129
+ identity** (oats.aweb 1.17.1). It never did against a real aw before.
130
+ - **A newcomer can join a shared team** (oats.aweb 1.17.1): `oats aweb setup
131
+ --join <label> --invite <token>` takes `--service <url>` and `--name <alias>`,
132
+ and a half-finished join resumes without a new invite.
133
+ - **A lost team, or a retire, on a team you control hands the owner the exact
134
+ cleanup command** (oats.aweb 1.17.1), in place of a silent leftover member.
135
+ - **Knowledge readiness is answered.** oats.okf 4.0.4 answers the kernel's
136
+ documented readiness check; on 0.29.x it was `unknown`.
137
+ - **`oats session start` and `restart` show the launch hooks' warnings**, as
138
+ spawn does (#295): JSON `warnings`, always present, and each is kept as a
139
+ `launch-warning` instance event.
140
+ - **`oats readiness --soul` and `oats inspect --soul` materialise the soul's
141
+ copy at the resolved commit first**, as spawn does, so a soul not yet
142
+ spawned at this commit no longer reads as a missing declaration (#298).
143
+ - **`oats retire` can retire a home from before 0.25.9 whose session is
144
+ gone**: only when the recorded window or server is gone AND no live process
145
+ works in the home; anything live or unclear still refuses, `--force`
146
+ included (#299).
147
+
148
+ ## Known in 0.30.0
149
+
150
+ The first two are fixed in 0.30.1; the last is how aw works on a team you
151
+ control.
152
+
153
+ - With no teams configured, a spawn is refused by the provider
154
+ (`E_SPAWN_FAILED`, relaying "no teams configured: run `oats aweb setup`"),
155
+ not by the kernel's `E_TEAM_UNCONFIGURED`.
156
+ - A capability operator command run from a deployment needs `--soul <soul>`.
157
+ - On a team you control (BYOT, namespace-controlled), retiring an instance, or
158
+ a spawn that rolls back, deletes its workspace but cannot revoke its
159
+ membership; its alias stays on the team, and the retire prints the owner's
160
+ exact `aw id team remove-member` command (and records it as
161
+ `pendingControllerCleanup`). Hosted teams release automatically.
162
+
163
+ ## Packages
164
+
165
+ - **oats.framework `oats-framework/v1.4.0`**: oats.core 2.2.0 and oats.setup
166
+ 2.2.0 require `>=0.30.0` and teach the team model v2 and onboarding through
167
+ `oats aweb setup`.
168
+ - **oats.aweb `v1.17.1`** (from 1.16.0): one aw floor, `>=1.36.13` (1.16.1);
169
+ the kernel's teams, with no provider `team` setting (a stale one is refused)
170
+ and one root per team; setup's `--create` and `--join`; the teams
171
+ document's shared/local `from`, `warnings[]` and recently left teams; the
172
+ newcomer's first `--join`, `--soul` on operator commands, the
173
+ `aweb-team-leave-failed` event and the second-team fix (1.17.1); in 1.17.1
174
+ also the resumable `--join` with `--service`/`--name`, the owner's cleanup
175
+ command on a team you control, and a stale `team` setting refused only
176
+ where teams are chosen, so retire still cleans up.
177
+ - **oats.okf `v4.0.4`** (from 4.0.1): the harvester and maintainer live in the
178
+ default team, with no `okf` team (4.0.2); consultation works with harvest
179
+ off (4.0.3); readiness is answered (4.0.4).
180
+ - **oats.engineering `v1.1.0` replaces oats.dev**, which is retired along with
181
+ its catalog aliases (`oats.review`). It ships `oats.engineering-expert`,
182
+ `oats.developer`, `oats.code-review` and the `code-reviewer` package soul.
183
+
184
+ ## Desktop
185
+
186
+ - **A Workspace Teams tab** (#270), before Souls: this computer's teams and
187
+ default, with add, remove and default. A soul page has Teams here (#277),
188
+ the spawn dialog shows the fixed default team and unchecked opt-in boxes,
189
+ and an unmapped default team blocks the spawn with its fix.
190
+ - **The teams panel** shows each team as shared or local, the provider's
191
+ warnings (#286), recently left teams (#270), and a join or leave warning
192
+ under its row (#282). Readiness team items say where the team is declared.
193
+ - **The Spawn view groups souls by their default team** and chips their
194
+ teams, the default first (#285).
195
+ - **Each soul's harness and model again**, with what chose them (#289), and
196
+ a session card says where a model set on this computer came from (#293).
197
+ - **Readiness shows `launch-changed`** for a home whose launch preference
198
+ moved, and the Desktop's readers accept any team id the kernel accepts
199
+ (#292).
200
+ - **One Automations item** with Schedules and Triggers subtabs (#267).
201
+ - **Untrusted workspace automations** need attention: the row reads "Not
202
+ trusted here" and shows the kernel's line to add, and Setup shows each
203
+ trust warning with its remedy (#301).
204
+ - **The spawn dialog says the kernel's missing-harness fix once** (#302).
205
+ - The Desktop accepts OATS CLIs `>=0.25.8 <0.31.0`.