@awebai/oats 0.29.4 → 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 (224) hide show
  1. package/README.md +12 -6
  2. package/bin/oats.mjs +194 -50
  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 +8 -4
  31. package/capabilities/oats-okf/lib/binding-wire.mjs +47 -15
  32. package/capabilities/oats-okf/lib/inspection.mjs +26 -7
  33. package/capabilities/oats-okf/lib/sources.mjs +16 -2
  34. package/capabilities/oats-okf/lib/worker.mjs +5 -16
  35. package/capabilities/oats-okf/oats.json +6 -3
  36. package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +2 -2
  37. package/capabilities/oats-okf-harvest/oats.json +3 -3
  38. package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +6 -6
  39. package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +2 -2
  40. package/capabilities/oats-okf-maintenance/injects/maintainer.md +1 -1
  41. package/capabilities/oats-okf-maintenance/oats.json +2 -2
  42. package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +1 -1
  43. package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +11 -23
  44. package/capabilities/oats-workspace-experts/injects/oats-experts.md +26 -0
  45. package/capabilities/oats-workspace-experts/oats.json +9 -0
  46. package/docs/capabilities.md +160 -171
  47. package/docs/capability-manifest.schema.json +6 -11
  48. package/docs/configuration.md +213 -64
  49. package/docs/design/2026-09-16-knowledge-capability-contract.md +36 -50
  50. package/docs/design/2026-09-23-workspace-module-contracts.md +377 -544
  51. package/docs/design/2026-09-26-okf-knowledge-operations.md +132 -357
  52. package/docs/design/2026-09-27-team-model-v2.md +97 -117
  53. package/docs/design/2026-09-28-automations-trust.md +38 -0
  54. package/docs/design/2026-09-28-soul-launch-preference.md +63 -0
  55. package/docs/design/HISTORY.md +65 -0
  56. package/docs/design/README.md +23 -54
  57. package/docs/desktop-cli-api.md +1787 -1777
  58. package/docs/desktop.md +30 -91
  59. package/docs/execution-targets.md +146 -292
  60. package/docs/first-team.md +31 -17
  61. package/docs/implementation.md +76 -288
  62. package/docs/integrations.md +118 -320
  63. package/docs/knowledge-capability-authoring.md +25 -52
  64. package/docs/knowledge-reference/acceptance.md +3 -3
  65. package/docs/knowledge-reference/adoption.md +1 -1
  66. package/docs/knowledge-reference/harvester.md +2 -2
  67. package/docs/knowledge-reference/package-craft.md +3 -3
  68. package/docs/knowledge-reference/provider-mapping.md +3 -6
  69. package/docs/knowledge-reference/reader-capture.md +3 -3
  70. package/docs/knowledge-theory.md +62 -166
  71. package/docs/knowledge.md +225 -404
  72. package/docs/layers.md +42 -97
  73. package/docs/oats-local.schema.json +58 -5
  74. package/docs/oats-membership.schema.json +1 -8
  75. package/docs/oats-package.schema.json +5 -5
  76. package/docs/oats-workspace.schema.json +8 -22
  77. package/docs/official-catalog.md +25 -28
  78. package/docs/packages.md +45 -63
  79. package/docs/plans/0.30-close-out.md +61 -0
  80. package/docs/release-lane.md +77 -0
  81. package/docs/release-notes/oats-framework-v1.1.3.md +10 -8
  82. package/docs/release-notes/v0.19.0.md +48 -147
  83. package/docs/release-notes/v0.19.1.md +2 -3
  84. package/docs/release-notes/v0.19.3.md +2 -15
  85. package/docs/release-notes/v0.20.0.md +0 -15
  86. package/docs/release-notes/v0.22.0.md +71 -138
  87. package/docs/release-notes/v0.22.1.md +42 -90
  88. package/docs/release-notes/v0.22.10.md +1 -1
  89. package/docs/release-notes/v0.22.11.md +1 -47
  90. package/docs/release-notes/v0.22.12.md +4 -13
  91. package/docs/release-notes/v0.22.13.md +1 -42
  92. package/docs/release-notes/v0.22.14.md +3 -11
  93. package/docs/release-notes/v0.22.15.md +1 -46
  94. package/docs/release-notes/v0.22.16.md +6 -8
  95. package/docs/release-notes/v0.22.18.md +1 -99
  96. package/docs/release-notes/v0.22.19.md +3 -14
  97. package/docs/release-notes/v0.22.2.md +6 -15
  98. package/docs/release-notes/v0.22.3.md +0 -1
  99. package/docs/release-notes/v0.22.4.md +1 -14
  100. package/docs/release-notes/v0.22.5.md +2 -12
  101. package/docs/release-notes/v0.22.6.md +0 -3
  102. package/docs/release-notes/v0.23.0.md +9 -25
  103. package/docs/release-notes/v0.23.1.md +9 -25
  104. package/docs/release-notes/v0.23.2.md +2 -4
  105. package/docs/release-notes/v0.24.0.md +56 -97
  106. package/docs/release-notes/v0.24.1.md +7 -11
  107. package/docs/release-notes/v0.24.10.md +34 -45
  108. package/docs/release-notes/v0.24.11.md +12 -20
  109. package/docs/release-notes/v0.24.12.md +35 -48
  110. package/docs/release-notes/v0.24.13.md +34 -41
  111. package/docs/release-notes/v0.24.2.md +9 -13
  112. package/docs/release-notes/v0.24.3.md +7 -11
  113. package/docs/release-notes/v0.24.4.md +6 -6
  114. package/docs/release-notes/v0.24.5.md +6 -10
  115. package/docs/release-notes/v0.24.6.md +2 -5
  116. package/docs/release-notes/v0.24.7.md +46 -75
  117. package/docs/release-notes/v0.24.8.md +58 -96
  118. package/docs/release-notes/v0.24.9.md +38 -54
  119. package/docs/release-notes/v0.25.0.md +59 -76
  120. package/docs/release-notes/v0.25.1.md +57 -81
  121. package/docs/release-notes/v0.25.2.md +51 -70
  122. package/docs/release-notes/v0.25.3.md +11 -13
  123. package/docs/release-notes/v0.25.4.md +9 -13
  124. package/docs/release-notes/v0.25.5.md +3 -5
  125. package/docs/release-notes/v0.25.6.md +20 -29
  126. package/docs/release-notes/v0.25.7.md +5 -7
  127. package/docs/release-notes/v0.25.8.md +26 -39
  128. package/docs/release-notes/v0.26.0.md +175 -646
  129. package/docs/release-notes/v0.27.0.md +4 -5
  130. package/docs/release-notes/v0.27.1.md +4 -6
  131. package/docs/release-notes/v0.27.2.md +1 -1
  132. package/docs/release-notes/v0.28.0.md +57 -124
  133. package/docs/release-notes/v0.29.0.md +89 -208
  134. package/docs/release-notes/v0.29.1.md +1 -1
  135. package/docs/release-notes/v0.29.2.md +3 -4
  136. package/docs/release-notes/v0.30.0.md +205 -0
  137. package/docs/schedules.md +280 -363
  138. package/docs/servers.md +99 -117
  139. package/docs/soul.schema.json +2 -9
  140. package/docs/souls-and-instances.md +145 -158
  141. package/docs/workspaces.md +132 -215
  142. package/lib/automations.mjs +21 -6
  143. package/lib/core.mjs +226 -74
  144. package/lib/instance-events.mjs +1 -1
  145. package/lib/instance-inspect.mjs +109 -34
  146. package/lib/instance-lifecycle.mjs +14 -1
  147. package/lib/instance-resolution.mjs +26 -27
  148. package/lib/launch-preference.mjs +87 -0
  149. package/lib/materialize.mjs +3 -3
  150. package/lib/resolve.mjs +29 -87
  151. package/lib/schedule.mjs +1 -1
  152. package/lib/teams-verbs.mjs +195 -0
  153. package/lib/teams.mjs +190 -0
  154. package/lib/triggers.mjs +2 -2
  155. package/lib/workspace.mjs +54 -147
  156. package/package-catalog.json +9 -15
  157. package/package.json +1 -1
  158. package/skills/oats-getting-started/SKILL.md +25 -13
  159. package/capabilities/oats-review/injects/review.md +0 -69
  160. package/capabilities/oats-review/oats.json +0 -10
  161. package/capabilities/oats-review/skills/code-review/SKILL.md +0 -44
  162. package/capabilities/oats-review/skills/security-review/SKILL.md +0 -59
  163. package/docs/conventions.md +0 -90
  164. package/docs/design/2026-09-07-architecture-reassessment.md +0 -131
  165. package/docs/design/2026-09-07-desktop-souls-capabilities.md +0 -50
  166. package/docs/design/2026-09-07-mobile-agent-management-proposal.md +0 -228
  167. package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +0 -558
  168. package/docs/design/2026-09-13-knowledge-and-memory-direction.md +0 -744
  169. package/docs/design/2026-09-13-knowledge-implementation.md +0 -127
  170. package/docs/design/2026-09-13-knowledge-location-contract.md +0 -340
  171. package/docs/design/2026-09-14-artifact-retention-contract.md +0 -190
  172. package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +0 -708
  173. package/docs/design/2026-09-14-portable-souls-contract-amendments.md +0 -85
  174. package/docs/design/2026-09-14-portable-souls-explainer.md +0 -750
  175. package/docs/design/2026-09-15-captured-dispatch.md +0 -127
  176. package/docs/design/2026-09-15-captured-resolution-records.md +0 -143
  177. package/docs/design/2026-09-15-package-preparation.md +0 -100
  178. package/docs/design/2026-09-15-portable-data-contract.md +0 -121
  179. package/docs/design/2026-09-15-portable-declarations.md +0 -189
  180. package/docs/design/2026-09-15-portable-souls-handoff.md +0 -150
  181. package/docs/design/2026-09-15-portable-souls-implementation.md +0 -417
  182. package/docs/design/2026-09-15-selection-lock-and-approval.md +0 -122
  183. package/docs/design/2026-09-15-source-observation.md +0 -119
  184. package/docs/design/2026-09-16-captured-admission.md +0 -77
  185. package/docs/design/2026-09-16-captured-helper-dispatch.md +0 -105
  186. package/docs/design/2026-09-16-captured-launch-inputs.md +0 -42
  187. package/docs/design/2026-09-16-command-profile-preparation.md +0 -86
  188. package/docs/design/2026-09-16-fresh-install-first-rollout.md +0 -47
  189. package/docs/design/2026-09-16-fresh-operator-walkthrough.md +0 -282
  190. package/docs/design/2026-09-16-messaging-capability-contract.md +0 -59
  191. package/docs/design/2026-09-16-portable-migration-evidence.md +0 -158
  192. package/docs/design/2026-09-16-portable-onboarding.md +0 -179
  193. package/docs/design/2026-09-16-prepare-request-transport.md +0 -26
  194. package/docs/design/2026-09-16-provider-binding-codecs.md +0 -98
  195. package/docs/design/2026-09-16-provider-binding-wire.md +0 -274
  196. package/docs/design/2026-09-17-capability-helper-input-contract.md +0 -95
  197. package/docs/design/2026-09-17-captured-backend-parity.md +0 -53
  198. package/docs/design/2026-09-17-captured-native-start.md +0 -58
  199. package/docs/design/2026-09-17-portable-boundary-hookup.md +0 -19
  200. package/docs/design/2026-09-17-portable-boundary-resources.md +0 -52
  201. package/docs/design/2026-09-17-public-captured-start.md +0 -108
  202. package/docs/design/2026-09-17-public-prepare-request.md +0 -90
  203. package/docs/design/2026-09-18-captured-pi-host.md +0 -205
  204. package/docs/design/2026-09-18-first-cut-release-checklist.md +0 -131
  205. package/docs/design/2026-09-18-herdr-protocol-compatibility.md +0 -60
  206. package/docs/design/2026-09-20-redesign-program-board.md +0 -142
  207. package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +0 -289
  208. package/docs/design/2026-09-20-workspace-onboarding-public.md +0 -207
  209. package/docs/design/2026-09-22-desktop-parity-seams.md +0 -58
  210. package/docs/design/2026-09-23-simplified-workspace-model.md +0 -711
  211. package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +0 -65
  212. package/docs/design/2026-09-24-desktop-phase-f-boundary.md +0 -242
  213. package/docs/design/2026-09-24-phase-d-plan.md +0 -305
  214. package/docs/design/2026-09-25-teams-contract.md +0 -258
  215. package/docs/design/2026-09-26-desktop-design-brief-architecture.md +0 -241
  216. package/docs/design/desktop-ux-plan.md +0 -362
  217. package/docs/design/launch-configurations.md +0 -168
  218. package/docs/design/okf-mirror-provenance.md +0 -105
  219. package/docs/design/operations-contract.md +0 -141
  220. package/docs/oats-member.schema.json +0 -38
  221. package/skills/integration-authoring/SKILL.md +0 -84
  222. package/skills/oats-support/SKILL.md +0 -79
  223. package/skills/skill-craft/SKILL.md +0 -109
  224. package/skills/soul-craft/SKILL.md +0 -116
@@ -1,67 +1,51 @@
1
1
  # OATS v0.24.9 — readiness pins, side-effect-free spawn preview (API 2), process-group safety, Desktop Readiness view
2
2
 
3
- Kernel/Pi/Desktop **0.24.9**. Tag `v0.24.9` → the commit carrying these notes;
4
- the version-bump commit lands after the tag. Consumers gate on `oats version
5
- --json` `features[]` names and API integers — never on the version.
3
+ Kernel/Pi/Desktop **0.24.9**. Consumers gate on `oats version --json`
4
+ `features[]` names and API integers, never on the version. Shapes are in the
5
+ [Desktop CLI API](../desktop-cli-api.md).
6
6
 
7
7
  ## Kernel
8
8
 
9
9
  - **Spawn preview API 2** (feature `spawn-preview-2`, `spawnPreviewApi: 2`).
10
- API 1 previews **wrote before they returned** — a refused child spawn appended
11
- an event to the parent, a Herdr backend could be started, an unknown soul
12
- could be imported from an importable def — and nothing bound a later spawn to
13
- the previewed decision. API 2: a preview touches nothing, success or refusal
14
- (proven by a byte-identical deployment tree); `spawn --agents-root <abs>`
15
- binds the exact root with no fallback and the preview echoes `subject` as
16
- given; `decision {instance, home, branch, base, revision}` + `spawn
17
- --expect-decision <rev>` refuses **`E_DECISION_STALE`** with the fresh
18
- decision on any drift (no auto-suffix, no silent re-base, nothing created);
19
- every native probe shares one bounded preflight budget and is process-group
20
- killed on timeout (`preflight {status, budgetMs, elapsedMs}`). **Gate on API
21
- 2 — API 1 is the pre-fix marker.**
22
- - **Readiness pins** (`oats readiness`): `configured` is *effective* activation
23
- (a capability declared for the soul but disabled is a fail that says so);
24
- data-only capabilities (skills/inject, no commands/hooks/env) report trust
25
- **not-applicable** — the inspect row carries `health.executableSurface`;
26
- every item is typed (`capability {id, level, scope}`, `origin {kind,
27
- target}`) and `summary.byCapability[]` regroups the same items with
28
- `ownReady` vs `ready` (never ready under a `summary.subjectBlockers[]` item
29
- such as unknown membership); `subject.selector` echoes the arguments as given,
30
- byte-exact; an unreadable member document is `unknown`, not not-applicable;
31
- `readiness --home <captured>` refuses `E_UNSUPPORTED_MODE`; `--agents-root`
32
- documented. **Signature verification** (feature `readiness-verify`) is
33
- bounded custody: one budget per read, process-group kill, cleanup on
34
- SIGINT/SIGTERM/SIGHUP, `GIT_CONFIG_GLOBAL=/dev/null`, https/ssh only, a closed
35
- `signature.failure.code` — never stderr.
36
- - **Process-group safety (high).** Bounded-custody code killed a child's
37
- process group on timeout with `process.kill(-child.pid)`; a **failed** spawn
38
- (binary missing → `ENOENT`) reports `pid: 0`, and `kill(-0)` signals the
39
- caller's own process group — `oats readiness --verify-signatures` without
40
- `git` would have SIGKILLed the operator's shell/tmux/Desktop backend. One
41
- guarded helper now refuses non-positive PIDs at every kill site.
42
- - **OKF 2.1.3** mirrored and pinned in the official catalog: per-cause `check`
43
- reasons, a named remedy when a soul has no `okf.json` (was a raw ENOENT from
44
- the required spawn hook), retired drained sources switch their `okf-<id>` job
45
- off.
10
+ An API 1 preview could write (an event on the parent, a started Herdr
11
+ backend, an imported soul) and nothing bound a later spawn to it. An API 2
12
+ preview touches nothing, success or refusal. `spawn --agents-root <abs>`
13
+ binds the exact root. The preview returns a `decision {instance, home,
14
+ branch, base, revision}`, and `spawn --expect-decision <rev>` refuses
15
+ `E_DECISION_STALE` with the fresh decision on any drift, creating nothing.
16
+ Native probes share one bounded preflight budget. **Gate on API 2.**
17
+ - **Readiness**: `configured` reflects effective activation (a declared but
18
+ disabled capability fails and says so); data-only capabilities report trust
19
+ `not-applicable`; items are typed, and `summary.byCapability[]` regroups them
20
+ with `ownReady` and `ready`; `subject.selector` echoes the arguments; an
21
+ unreadable member document is `unknown`; `readiness --home <captured>`
22
+ refuses `E_UNSUPPORTED_MODE`. Signature verification (feature
23
+ `readiness-verify`) is bounded, ignores global Git config, allows https and
24
+ ssh only, and reports a closed `signature.failure.code`.
25
+ - **Process-group safety.** A timed-out child's process group was killed with
26
+ `process.kill(-child.pid)`; when the spawn itself failed (for example, a
27
+ missing binary) the pid was 0 and the signal hit the caller's own process
28
+ group, so `oats readiness --verify-signatures` without `git` could kill the
29
+ operator's shell, tmux or Desktop backend. Every kill site now refuses
30
+ non-positive pids.
31
+ - **OKF 2.1.3** is mirrored and pinned in the official catalog: per-cause
32
+ `check` reasons, a named remedy when a soul has no `okf.json`, and retired
33
+ drained sources switch their `okf-<id>` job off.
46
34
 
47
35
  ## Desktop
48
36
 
49
- - **Readiness** (frame 09/04): Workspace header entry and first-run
50
- invitation; the quartet from `oats readiness` with items, remedies (display
51
- only), *View policy*, *Skip for now* (presentation only). Verify signatures
52
- and Enrol are shown unavailable with the exact reason until their contracts
53
- land. Effective-readiness section per scope on the Capabilities view.
54
- - **Normalized route classification**: one classifier decides every specialized
55
- IPC route from the normalized pathname — dot-segment, percent-encoded,
56
- backslash, tab and CRLF aliases can no longer skip a route's frame/epoch
57
- guard.
58
- - Spawn modal: kernel **preview** (API 2) for the instance name, home, worktree,
59
- branch and resolved base — *Suggest* asks the kernel for its default
60
- candidate; preview-only choices block legacy submission rather than being
61
- dropped. Apply companion, attach-knowledge, auto-PR and branch enumeration are
62
- named follow-ups, not parity-done.
37
+ - **Readiness** view: a Workspace header entry and first-run invitation
38
+ showing the readiness quartet with items and remedies (display only). Verify
39
+ signatures and Enrol are shown unavailable with the reason. The Capabilities
40
+ view shows effective readiness per scope.
41
+ - **Route classification** is decided once from the normalized pathname, so
42
+ dot-segment, percent-encoded, backslash, tab and CRLF aliases cannot skip a
43
+ route's guard.
44
+ - **Spawn modal** uses the preview (API 2) for the instance name, home,
45
+ worktree, branch and resolved base; *Suggest* asks the kernel for its default.
46
+ Preview-only choices block legacy submission instead of being dropped.
63
47
 
64
48
  ## Upgrade
65
49
 
66
50
  `npm i -g @awebai/oats@0.24.9`, then `oats doctor`. Desktops on an older CLI
67
- show the new controls as unavailable until the CLI advertises them.
51
+ show the new controls as unavailable.
@@ -1,99 +1,82 @@
1
1
  # OATS v0.25.0 — the workspace model (breaking)
2
2
 
3
- Kernel/Pi **0.25.0**. Tag `v0.25.0` → the commit carrying these notes; the
4
- version-bump commit lands after the tag. Consumers gate on `oats version --json`
5
- `features[]` names and API integers — never on the version.
3
+ Kernel/Pi **0.25.0**. Consumers gate on `oats version --json` `features[]`
4
+ names and API integers, never on the version.
6
5
 
7
- **This is the 0.25 line: a new deployment model, not a patch to the old one.**
8
- 0.24.x keeps spawning 0.24.x deployments; there is no converter. The rebuild
9
- guide is `docs/rebuild-to-v2.md`. Design: `docs/design/2026-09-23-simplified-workspace-model.md`;
10
- decision record (26 decisions): `agents/oats-expert/soul/knowledge/decisions/workspace-model-v2.md`;
11
- normative module contracts: `docs/design/2026-09-23-workspace-module-contracts.md`.
6
+ **This is a new deployment model, not a patch to the old one.** 0.24.x keeps
7
+ spawning 0.24.x deployments; there is no converter, and a 0.24 deployment is
8
+ rebuilt on the new model. Design:
9
+ [simplified workspace model](https://github.com/awebai/oats/blob/7838d3ca70772f63854b198601fbc45437c2e999/docs/design/2026-09-23-simplified-workspace-model.md);
10
+ module contracts:
11
+ [workspace module contracts](../design/2026-09-23-workspace-module-contracts.md).
12
12
 
13
13
  ## The one idea
14
14
 
15
15
  An organisation has **one workspace**: a Git repo hosting `oats-workspace.yaml`
16
16
  that lists its **member repositories**, pins its **packages**, names its
17
17
  **teams** and declares **defaults**. Every member carries an
18
- `oats-membership.yaml` back-link; the handshake is confirmed over the Git
19
- remotes in the operator's own access context and **membership is the trust**.
20
- A member exports **souls** (`souls/<name>/soul.yaml`) and **capabilities**
21
- (`capabilities/<name>/oats.json`) at its latest commit; a soul says where each
22
- capability comes from (`from: <member repo> | here | package`). Packages are
23
- consumed only through `packages:` + `oats-lock.json` v3, with **per-version
24
- executable approval**. A spawn **resolves** the soul (`lib/resolve.mjs`) and
25
- **materializes** every capability whole into the instance
26
- (`<home>/.oats/modules/<cap>/`, skills under `<home>/.agents/skills/<cap>/`);
27
- the harness starts normally. Nothing is installed anywhere.
18
+ `oats-membership.yaml` back-link, confirmed over the Git remotes in the
19
+ operator's own access context: **membership is the trust**. A member exports
20
+ **souls** (`souls/<name>/soul.yaml`) and **capabilities**
21
+ (`capabilities/<name>/oats.json`); a soul says where each capability comes
22
+ from (`from: <member repo> | here | package`). Packages are consumed only
23
+ through `packages:` + `oats-lock.json` v3, with per-version executable
24
+ approval. A spawn resolves the soul and materializes every capability whole
25
+ into the instance (`<home>/.oats/modules/<cap>/`, skills under
26
+ `<home>/.agents/skills/<cap>/`). Nothing is installed anywhere.
28
27
 
29
28
  ## Kernel — `workspace-v2` (`workspaceApi: 2`), `instance-modules`, `spawn-provider-payload`
30
29
 
31
- - **Declarations** (`docs/*.schema.json`, all `schemaVersion: 2`):
32
- `oats-workspace.yaml` (members, packages, teams, defaults incl. `byTeam`,
33
- stores, `messaging` incl. `byTeam.<label>`, external souls),
34
- `oats-membership.yaml` (`workspace`, `team?`), `soul.yaml` v2
35
- (`capabilities: { <cap>: { from } | off }`, `team`, `private`,
36
- `compatibility`, slot payloads), `oats-local.yaml` (the ONLY per-machine
37
- file: `workspace:` or `standalone:` ref, `clones`, `settings.<cap>`,
38
- `souls.disabled`).
39
- - **`oats sync`** — discover → confirm membership → resolve packages → write
40
- `oats-lock.json` v3; unapproved executables listed, exit 2 non-TTY / prompt
41
- on a TTY. `oats package add|remove`, `oats workspace status`,
42
- `oats capabilities`, `oats souls` (origin + team columns).
43
- - **`oats spawn`** — discovers and resolves over the remotes, fetches the soul
44
- from its member repo (refreshed per commit), materializes, launches.
45
- `--preview` works before any apply and reports `modules[]` (with
46
- `changedSince`), `team`, `resolution`, `workspace`, `soulFetched`; the
47
- decision binds the resolution revision (a member that moved between preview
48
- and apply → `E_DECISION_STALE`). `--provider <cap> k=v` records a per-spawn
49
- provider payload (`instance.json.providers`) — the third payload home after
50
- the soul and `oats-local.yaml settings`.
51
- - **`instance.json`** carries `modules{}` (name → from/commit/digest),
52
- `providers{}`, `workspace{ key, commit, resolution, standalone, soul }`,
53
- `capabilities[]`.
54
- - **`oats status`** shows drift per instance (`member moved since …`,
55
- `capability no longer present`); `--json` `instances[].modules[]`.
56
- - **`oats onboard [<dir>] --workspace <ref>`** — writes `oats-local.yaml`,
57
- runs the sync path, prints the taught layout and the **hosting rule** for
58
- mixed public/private organisations (`onboardApi: 2`). Creates no soul,
30
+ - **Declarations** (`docs/*.schema.json`, `schemaVersion: 2`):
31
+ `oats-workspace.yaml`, `oats-membership.yaml`, `soul.yaml` v2 and
32
+ `oats-local.yaml`, the only per-machine file (`workspace:` or `standalone:`
33
+ ref, `clones`, `settings.<cap>`, `souls.disabled`). See
34
+ [workspaces.md](../workspaces.md#the-files).
35
+ - **`oats sync`** discovers members, confirms membership, resolves packages
36
+ and writes `oats-lock.json` v3; unapproved executables exit `2` non-TTY or
37
+ prompt on a TTY. New: `oats package add|remove`, `oats workspace status`,
38
+ `oats capabilities`, `oats souls`.
39
+ - **`oats spawn`** resolves over the remotes, fetches the soul from its member
40
+ repo, materializes and launches. `--preview` reports `modules[]`, `team`,
41
+ `resolution`, `workspace` and `soulFetched`; the decision binds the
42
+ resolution revision (`E_DECISION_STALE` if a member moved). `--provider <cap>
43
+ k=v` records a per-spawn provider payload, the third payload home after the
44
+ soul and `oats-local.yaml` `settings`.
45
+ - **`instance.json`** carries `modules{}`, `providers{}`, `workspace{}` and
46
+ `capabilities[]`; **`oats status`** shows per-instance drift.
47
+ - **`oats onboard [<dir>] --workspace <ref>`** writes `oats-local.yaml`, runs
48
+ the sync path and prints the layout and the hosting rule for mixed
49
+ public/private organisations (`onboardApi: 2`). It creates no soul and
59
50
  spawns nothing.
60
- - **Standalone case** — a member whose workspace cannot be read (access
61
- failure only, never network/timeout) still offers its souls with `from: here`
62
- capabilities **plus `oats.core`** from the official catalog through the
63
- operator's own lock; marked `standalone: true` in sync/status/spawn output.
64
- - **Teams** are labels; per-team provider payload is `messaging.byTeam.<label>`
65
- (merged by the kernel, stripped before the provider). A store names a
66
- repository; the root inside it is the provider's binding key.
51
+ - **Standalone case:** a member whose workspace cannot be read (access
52
+ failure only) still offers its souls with `from: here` capabilities plus
53
+ `oats.core` from the official catalog, marked `standalone: true`.
54
+ - **Teams** are labels; per-team provider payload is
55
+ `messaging.byTeam.<label>`. A store names a repository.
67
56
  - **Scheduled spawns** on a workspace deployment materialize exactly like
68
- `oats spawn` (the scheduler delegates to the CLI).
69
- - **Security** (found by adversarial review, all pinned): remote tree names
70
- fsck'd (no traversal), tag naming a blob refused as a commit, symlinks in
71
- fetched trees refused except the soul's `CLAUDE.md → AGENTS.md` alias,
72
- `__proto__`/`constructor`/`prototype` refused at every payload layer and in
73
- `--provider` flags, `byTeam` reserved outside `workspace.messaging`, package
74
- executables gated on per-version approval, atomic staging with full
75
- rollback (no half homes).
57
+ `oats spawn`.
58
+ - **Security:** remote tree names are checked (no traversal), a tag naming a
59
+ blob is refused as a commit, symlinks in fetched trees are refused except
60
+ the soul's `CLAUDE.md → AGENTS.md` alias, `__proto__` / `constructor` /
61
+ `prototype` are refused in every payload layer, `byTeam` is reserved outside
62
+ `workspace.messaging`, and staging is atomic with full rollback.
76
63
 
77
64
  ## Removed
78
65
 
79
- `oats init`, `use`, `install`, `trust`, `list`, `remove`, `migrate`, `catalog`,
80
- `update`, `config`, `inject` → typed `E_UNKNOWN_COMMAND` naming the
81
- replacement. `oats-config.yaml` is no longer read as configuration (a leftover
82
- one is harmless); the `installed/` tier, `oats.yaml`, `lockfileVersion` 2,
83
- per-soul `source: git:…` lines, `stores.inherit`, `imports`. The `catalog`
84
- feature name is gone from `version --json`. `docs/configuration.md` now
66
+ `oats init`, `use`, `install`, `trust`, `list`, `remove`, `migrate`,
67
+ `catalog`, `update`, `config` and `inject` answer `E_UNKNOWN_COMMAND` naming
68
+ the replacement. `oats-config.yaml` is no longer read as configuration (a
69
+ leftover one is harmless). Also gone: the `installed/` tier, `oats.yaml`,
70
+ `lockfileVersion` 2, per-soul `source: git:…` lines, `stores.inherit`,
71
+ `imports`, and the `catalog` feature name. `docs/configuration.md` now
85
72
  describes `oats-local.yaml` only.
86
73
 
87
74
  ## Desktop
88
75
 
89
- The Desktop server's `oats catalog` reader now surfaces `E_USAGE` (the verb is
90
- removed); the Capabilities view's package acquisition flow will follow the new
91
- DTOs in a later release (Phase F). Everything else in the Desktop is unchanged.
76
+ The Desktop server's `oats catalog` reader surfaces `E_USAGE` (the verb is
77
+ removed). Everything else in the Desktop is unchanged.
92
78
 
93
- ## Known follow-ups
79
+ ## Known limitations
94
80
 
95
- - The classic (no `oats-local.yaml`) spawn path still runs the pre-v2 compose
96
- in `lib/core.mjs`; folding it into the one pipeline removes the remaining v1
97
- modules (residue table in `docs/design/2026-09-23-workspace-v2-implementation-plan.md`).
98
- - The OATS framework repositories themselves convert to the model (six expert
99
- souls, `oats.core`/`oats.setup` rewritten for the new architecture) in 0.26.
81
+ - A deployment without `oats-local.yaml` still spawns through the classic
82
+ (pre-workspace) compose path.
@@ -1,94 +1,70 @@
1
1
  # OATS v0.25.1 — workspace-model fix round
2
2
 
3
- Kernel/Pi **0.25.1**. Tag `v0.25.1` → the commit carrying these notes; the
4
- version-bump commit lands after the tag. Consumers gate on `oats version --json`
5
- `features[]` names and API integers — never on the version.
3
+ Kernel/Pi **0.25.1**. Consumers gate on `oats version --json` `features[]`
4
+ names and API integers, never on the version.
6
5
 
7
6
  **No API change.** `workspaceApi: 2`, every other API integer and the
8
- `features[]` list are exactly those of [0.25.0](v0.25.0.md). Every item below
9
- is a correctness, security or documentation fix found by the team review of
10
- the 0.25.0 workspace model; the normative record is the "0.25.1 fix round"
11
- section of `docs/design/2026-09-23-workspace-module-contracts.md` and the
12
- matching clarifications in
13
- `agents/oats-expert/soul/knowledge/decisions/workspace-model-v2.md`.
7
+ `features[]` list are those of [0.25.0](v0.25.0.md). Every item below is a
8
+ correctness, security or documentation fix to the 0.25.0 workspace model.
14
9
 
15
10
  ## Kernel
16
11
 
17
- - **M1 (high) — a running instance's soul no longer changes under it.** Souls
18
- are fetched into a per-commit cache `agents/<name>/souls/<commit12>/`
19
- (immutable); `agents/<name>/soul` is an atomically swapped pointer to the
20
- current commit; each home links its own commit's directory. A 0.25.0 layout
21
- is migrated in place on first use. OKF's path-pinned owner stays valid per
22
- instance.
23
- - **M2 — SSH remotes are fetched over SSH.** The canonical repo key is
24
- unchanged; the fetch url honours the ref as written (`git@…`/`ssh://` → SSH,
25
- `https://` → HTTPS, bare `git:` → HTTPS unless `remoteOptions.transport:
26
- ssh`). A private repo is no longer probed over HTTPS and silently degraded to
27
- the standalone view; the standalone fallback now reports the host failure
28
- that triggered it.
29
- - **M3 (high) — package approval is re-verified at spawn.** `resolveSoul`
30
- recomputes the executables digest over the package tree at the locked commit
31
- and refuses `E_PACKAGE_UNAPPROVED { reason: "digest-mismatch" }` when it
32
- differs from the approved one; one shared `executablesDigestAt` serves
33
- `sync` and `resolve`.
34
- - **M4 — annotated tag OIDs are peeled.** `observeRemote` records the peeled
35
- commit, never a tag object, in results, locks and `instance.json`.
36
- - **B2 — `work: workspace` spawns on a v2 deployment.** `./work` is the
37
- deployment directory (the one holding `oats-local.yaml`); no branch recorded;
38
- the remedy names `oats-local.yaml`.
39
- - **B3 — operator-level capability commands from the deployment.**
40
- `oats <ns> <cmd> … --soul <name>` outside a home resolves exactly as a spawn
41
- of that soul, fetches the module into `<deployment>/.oats/modules/<cap>@<commit12>/`
42
- and dispatches there with the soul's merged payload (`oats okf init` before
43
- any instance exists). `--soul` absent → `E_BAD_ARGS`; unknown namespace →
12
+ - **A running instance's soul no longer changes under it.** Souls are fetched
13
+ into an immutable per-commit cache `agents/<name>/souls/<commit12>/`;
14
+ `agents/<name>/soul` is an atomically swapped pointer to the current commit,
15
+ and each home links its own commit's directory. A 0.25.0 layout is migrated
16
+ in place on first use.
17
+ - **SSH remotes are fetched over SSH.** The fetch URL honours the ref as
18
+ written (`git@…` / `ssh://` → SSH, `https://` → HTTPS, bare `git:` → HTTPS
19
+ unless `remoteOptions.transport: ssh`). A private repo is no longer probed
20
+ over HTTPS and silently degraded to the standalone view, and the standalone
21
+ fallback reports the host failure that triggered it.
22
+ - **Package approval is re-verified at spawn.** The executables digest is
23
+ recomputed at the locked commit; a mismatch is `E_PACKAGE_UNAPPROVED {
24
+ reason: "digest-mismatch" }`.
25
+ - **Annotated tags are peeled**: results, locks and `instance.json` record
26
+ the commit, never a tag object.
27
+ - **`work: workspace` spawns on a v2 deployment**, with `./work` as the
28
+ deployment directory.
29
+ - **Operator-level capability commands from the deployment.** `oats <ns>
30
+ <cmd> … --soul <name>` outside a home resolves as a spawn of that soul,
31
+ fetches the module into `<deployment>/.oats/modules/<cap>@<commit12>/` and
32
+ dispatches there (for example `oats okf init` before any instance exists).
33
+ Without `--soul` it is `E_BAD_ARGS`; an unknown namespace is
44
34
  `E_UNKNOWN_COMMAND`.
45
- - **L1 — slot `none` empties the slot.** A soul's `knowledge|messaging|tasks:
46
- none` drops any layer-bearing capability the workspace defaults contributed
47
- for that layer; only a layer-bearing capability the soul itself declares next
48
- to `none` is `E_SLOT_CONFLICT`.
49
- - **L2 — absolute-path refusal is scoped to ref/path fields.** Team
50
- descriptions and the opaque messaging payload may contain `/`-rooted text.
51
- - **L3 — one unsafe deep entry no longer blanks a member's souls.** Depth
52
- filtering precedes the entry-name safety check.
53
- - **L4 — listing failures are classified.** `maxBuffer` overflow is not
54
- reported as `timeout`; an unclassified git listing failure becomes a
55
- discovery problem row (`E_REMOTE_UNREADABLE { reason: "unknown" }`) instead
56
- of an abort.
57
- - **L6 — revision splits declarations from payload.** `revision =
58
- hash(declRevision, payloadRevision)`; decision binding unchanged; preview can
59
- report `changed since: declarations | payload | both`.
35
+ - **Slot `none` empties the slot**, dropping any capability the workspace
36
+ defaults contributed for that layer; only a capability the soul itself
37
+ declares beside `none` is `E_SLOT_CONFLICT`.
38
+ - **Absolute-path refusal applies only to ref and path fields**; team
39
+ descriptions and the messaging payload may contain `/`-rooted text.
40
+ - **One unsafe deep entry no longer blanks a member's souls.**
41
+ - **Listing failures are classified**: a `maxBuffer` overflow is not reported
42
+ as `timeout`, and an unclassified listing failure is a discovery problem row
43
+ (`E_REMOTE_UNREADABLE { reason: "unknown" }`) instead of an abort.
44
+ - **The revision splits declarations from payload**: `revision =
45
+ hash(declRevision, payloadRevision)`, and a preview can report `changed
46
+ since: declarations | payload | both`.
60
47
 
61
48
  ## Documentation
62
49
 
63
- - **M5 — rebuild guide gaps closed** (`docs/rebuild-to-v2.md`): the tracked
64
- `git mv agents/<name>/soul souls/<name>` step and the tests that enumerate
65
- soul paths; OKF 2 owner re-registration (fresh `state-dir` for a rebuilt
66
- deployment, the old one frozen custody); `oats-local.yaml` example with
67
- `settings.oats.aweb.delivery` and `settings.oats.okf` `state-dir` +
68
- `bindings-file`; unlabelled souls receive the messaging base payload only;
69
- per-soul memory-harvest opt-out is not available in OKF 2.1.3 (an OKF 2.1.4
70
- item).
71
- - **L7 — decision 13 reach.** Every `pi` launch a 0.25 kernel performs starts
72
- the harness normally, classic 0.24 homes included (rebuild guide §0,
73
- `conventions.md`). `oats session recompose` is `E_UNSUPPORTED_MODE` for
74
- module homes; `session-recompose` stays advertised for classic homes
75
- (`desktop-cli-api.md`).
76
- - **L8 — v1 no longer presented as live** in `schedules.md`, `conventions.md`,
77
- `implementation.md`, `execution-targets.md`, `desktop.md`,
78
- `desktop-succession.md`, `integrations.md`, `migration-from-oas.md`
79
- (a 0.24.x procedure), `desktop-cli-api.md` (readiness producers are the 0.24
80
- tier), `knowledge-migration.md` (`state-dir` is required; four settings) and
81
- `knowledge.md` (operator-level `oats okf … --soul <x>` from the deployment).
50
+ - The [rebuild guide](https://github.com/awebai/oats/blob/bdd7e55e1b798a97b8b5486001d7c17e522792a7/docs/rebuild-to-v2.md) covers moving `agents/<name>/soul` to `souls/<name>`, OKF
51
+ 2 owner re-registration (a fresh `state-dir`), and an `oats-local.yaml`
52
+ example with `settings.oats.aweb.delivery` and `settings.oats.okf`;
53
+ unlabelled souls receive the messaging base payload only.
54
+ - Every `pi` launch a 0.25 kernel performs starts the harness normally,
55
+ classic 0.24 homes included. `oats session recompose` is
56
+ `E_UNSUPPORTED_MODE` for module homes; `session-recompose` stays advertised
57
+ for classic homes.
58
+ - The reference docs no longer present the 0.24 model as live, and
59
+ [knowledge.md](../knowledge.md) documents operator-level `oats okf … --soul
60
+ <x>` from the deployment.
82
61
 
83
- ## Known follow-ups (unchanged from 0.25.0 unless noted)
62
+ ## Known limitations
84
63
 
85
- - The classic (no `oats-local.yaml`) spawn path still runs the pre-v2 compose;
86
- `composeInstance` still reads `yolo` / `launch-configs` from an
87
- `oats-config.yaml` chain when one sits above a deployment.
88
- - The readiness quartet (`readinessApi: 1`) is still produced by the 0.24 tier
89
- observers; re-basing it on `spawn --preview` / `sync` / `workspace status` is
90
- a named follow-up.
91
- - OKF 2's owner pin is per soul path (hence per commit under M1); re-basing it
92
- on the owner identity is an OKF 2.1.4 item, as is a per-soul harvest opt-out.
93
- - `oats-local.yaml` `transport:` (M2's per-machine SSH default) needs a schema
94
- addition before it can be written.
64
+ - A deployment without `oats-local.yaml` still spawns through the classic
65
+ compose path, which reads `yolo` and `launch-configs` from an
66
+ `oats-config.yaml` chain above a deployment.
67
+ - Readiness (`readinessApi: 1`) is still produced by the 0.24 tier.
68
+ - OKF 2.1.3 pins a soul's owner per soul path, so per commit; a per-soul
69
+ harvest opt-out is not available.
70
+ - `oats-local.yaml` has no `transport:` key.
@@ -1,80 +1,61 @@
1
1
  # OATS v0.25.2 — operator-rebuild round
2
2
 
3
- Kernel/Pi **0.25.2**. Tag `v0.25.2` → the commit carrying these notes; the
4
- version-bump commit lands after the tag. Consumers gate on `oats version --json`
5
- `features[]` names and API integers — never on the version.
3
+ Kernel/Pi **0.25.2**. Consumers gate on `oats version --json` `features[]`
4
+ names and API integers, never on the version.
6
5
 
7
6
  **No API change.** `workspaceApi: 2`, every other API integer and the
8
- `features[]` list are exactly those of [0.25.1](v0.25.1.md). The only surface
9
- additions are **additive fields**: `oats spawn --preview` gains `providers` and
10
- `settings`, `oats status --json` gains `instances[].soul`; `oats sync` gains
11
- the `--approve` flag. Every item below comes from an operator's first rebuild
12
- of a real two-team deployment on 0.25.0, following `docs/rebuild-to-v2.md`
13
- literally — the guide is a contract the kernel honours. Normative record:
14
- "0.25.2 operator-rebuild round" in
15
- `docs/design/2026-09-23-workspace-module-contracts.md` and the matching
16
- clarifications in
17
- `agents/oats-expert/soul/knowledge/decisions/workspace-model-v2.md`.
7
+ `features[]` list are those of [0.25.1](v0.25.1.md). The surface additions
8
+ are additive: `oats spawn --preview` gains `providers` and `settings`, `oats
9
+ status --json` gains `instances[].soul`, and `oats sync` gains `--approve`.
10
+ Every item comes from an operator's first rebuild of a real two-team
11
+ deployment on 0.25.0, following the [rebuild guide](https://github.com/awebai/oats/blob/bdd7e55e1b798a97b8b5486001d7c17e522792a7/docs/rebuild-to-v2.md) literally.
18
12
 
19
13
  ## Kernel
20
14
 
21
- - **R1 — member clones are found as the guide says.** For a `work: worktree |
22
- checkout` soul: `--repo`, then `oats-local.yaml` `clones:` (keys normalised
23
- through `parseRepoRef`), then `<deployment>/<member name>` (a member named
24
- `agents` → `agents-repo`); none → `E_CLONE_MISSING` naming the three
25
- remedies; a directory whose remotes name another repo → `E_CLONE_MISMATCH`.
26
- - **R2 — `oats sync` creates `<deployment>/agents/` when absent.**
27
- - **R3 — one "You run on OATS" block.** With `oats.core` resolved as a module
28
- the kernel's legacy block is suppressed; the module's inject is the briefing.
29
- - **R4 — `oats status` shows soul-source drift.** `soul: <name> from <member>
30
- @ <c7> [member moved since …]` beside the module rows; `--json`
31
- `instances[].soul { repoKey, commit, current, status }`.
32
- - **R5 — `spawn --preview` shows the payload.** `providers` (the `--provider`
33
- map as given) and `settings.<cap>` (the merged payload each provider
34
- receives).
35
- - **R9 — non-interactive approval.** `oats sync --approve <id>@<version>`
36
- (repeatable) approves exactly the locked entry at that version; the digest is
37
- always computed, never typed; an id/version not in the resolution is
38
- `E_BAD_ARGS`. Ctrl+D at the interactive prompt is a decline (exit `2`).
39
- - **R10 — `oats onboard` lists the host** among the clones to make, like any
40
- member; an explicit `standalone:` header is named as such in the next steps.
15
+ - **Member clones are found as the guide says.** For a `work: worktree |
16
+ checkout` soul: `--repo`, then `oats-local.yaml` `clones:`, then
17
+ `<deployment>/<member name>` (a member named `agents` → `agents-repo`). None
18
+ is `E_CLONE_MISSING` naming the three remedies; a directory whose remotes
19
+ name another repo is `E_CLONE_MISMATCH`.
20
+ - **`oats sync` creates `<deployment>/agents/` when absent.**
21
+ - **One "You run on OATS" block.** With `oats.core` resolved as a module, the
22
+ kernel's own block is suppressed.
23
+ - **`oats status` shows soul-source drift**: `soul: <name> from <member> @
24
+ <c7> [member moved since …]`; `--json` `instances[].soul { repoKey, commit,
25
+ current, status }`.
26
+ - **`spawn --preview` shows the payload**: `providers` (the `--provider` map
27
+ as given) and `settings.<cap>` (the merged payload each provider receives).
28
+ - **Non-interactive approval.** `oats sync --approve <id>@<version>`
29
+ (repeatable) approves exactly that locked entry; the digest is always
30
+ computed. An id or version not in the resolution is `E_BAD_ARGS`. Ctrl+D at
31
+ the interactive prompt is a decline (exit `2`).
32
+ - **`oats onboard` lists the host** among the clones to make; an explicit
33
+ `standalone:` header is named as such in the next steps.
41
34
 
42
35
  ## Documentation
43
36
 
44
- - **R6** — the rebuild guide's work-mode section states that a coordination
45
- soul's (`work: workspace`) `./work` is the deployment directory (0.25.1 B2).
46
- - **R7 — where the team `.aw` lives now.** Rebuild guide §8b: oats.aweb 1.11.2
47
- finds `.aw` among the home, the home's git repo, the soul's work repo and the
48
- deployment directory — never the 0.24 team root; place it inside the member
49
- clone (gitignored) or at the deployment directory. **`messaging.byTeam` is
50
- kernel-merged but a no-op for oats.aweb 1.11.2**, which does not read `team`
51
- from its payload; per-repo `.aw` placement is the working alternative
52
- (`workspaces.md` byTeam paragraph updated accordingly).
53
- - **R8 — OKF 2.1.3 reads `okf.json`, not a soul payload.** The guide, `workspaces.md`,
54
- `souls-and-instances.md` and `knowledge.md` no longer show `knowledge: { owns,
55
- reads }` / `{ store, root }` on `soul.yaml`: the soul's declaration is
56
- `souls/<name>/okf.json` (`version`, `owner`, `owns`, `reads`); the `knowledge:`
57
- payload may carry only the binding's settings (`bindings-file`, `state-dir`,
58
- `harvest-runtime`, `harvest-model`); a base's `root` is the bindings file's.
59
- Decision 24's example is corrected. §7b (fresh `state-dir`) confirmed.
60
- - `configuration.md` `clones` row states the R1 order; `workspaces.md` and
61
- `souls-and-instances.md` describe the R4/R5 fields and the per-commit soul
62
- cache paths.
63
-
64
- ## Provider follow-ups (not kernel)
65
-
66
- - **oats.aweb follow-up:** read `team` from the spawn payload (so
67
- `messaging.byTeam` yields per-label identities) and accept the deployment
68
- directory as a first-class aweb root. Until that release, 1.11.2 behaves as
69
- §8b describes.
70
- - **oats.okf follow-up:** a soul-payload grammar (`owns`/`reads` on
71
- `soul.yaml`), declared in the binding when it lands; owner pin re-based on
72
- identity rather than path, and per-soul harvest opt-out (2.1.4 items, unchanged).
73
-
74
- ## Known follow-ups (unchanged from 0.25.1)
75
-
76
- - The classic (no `oats-local.yaml`) spawn path still runs the pre-v2 compose.
77
- - The readiness quartet (`readinessApi: 1`) is still produced by the 0.24 tier
78
- observers.
79
- - `oats-local.yaml` `transport:` needs a schema addition before it can be
80
- written.
37
+ - A coordination soul's (`work: workspace`) `./work` is the deployment
38
+ directory.
39
+ - **Where the team `.aw` lives.** oats.aweb 1.11.2 finds `.aw` in the home,
40
+ the home's git repo, the soul's work repo or the deployment directory, never
41
+ the 0.24 team root: place it in the member clone (gitignored) or the
42
+ deployment directory. **`messaging.byTeam` is a no-op for oats.aweb
43
+ 1.11.2**, which does not read `team` from its payload; per-repo `.aw`
44
+ placement is the working alternative.
45
+ - **OKF 2.1.3 reads `okf.json`, not a soul payload.** A soul's knowledge
46
+ declaration is `souls/<name>/okf.json` (`version`, `owner`, `owns`,
47
+ `reads`); the `knowledge:` payload carries only the binding's settings
48
+ (`bindings-file`, `state-dir`, `harvest-runtime`, `harvest-model`).
49
+ - [configuration.md](../configuration.md), [workspaces.md](../workspaces.md)
50
+ and [souls-and-instances.md](../souls-and-instances.md) describe the clone
51
+ order, the new status and preview fields, and the per-commit soul cache.
52
+
53
+ ## Known limitations
54
+
55
+ - oats.aweb 1.11.2 does not read `team` from the spawn payload and does not
56
+ treat the deployment directory as an aweb root.
57
+ - OKF 2.1.3 has no soul-payload grammar (`owns` / `reads` on `soul.yaml`),
58
+ pins owners by path, and has no per-soul harvest opt-out.
59
+ - A deployment without `oats-local.yaml` still spawns through the classic
60
+ compose path; readiness (`readinessApi: 1`) is still produced by the 0.24
61
+ tier; `oats-local.yaml` has no `transport:` key.