@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
@@ -1,289 +0,0 @@
1
- # OATS adoption plan: workspace first, knowledge and experts second
2
-
3
- **Date:** 2026-09-20
4
-
5
- **Status:** Phase1 implementation authorised by the human, using the existing developers under lead supervision/review. The workspace home is confirmed as `oats`; `oats-dev` remains development capabilities. This does not claim completed conversion or authorise unspecified new contracts, credential operations or live deployment mutations.
6
-
7
- > **2026-09-23 — direction change, read first.** Phases 1–3 delivered as written (workspace on Git, five souls + central knowledge, all contract-bearing Desktop parity slices, releases 0.24.7–0.24.13). Reviewing the result, the human judged the *declaration model* itself too heavy and, in one sitting, accepted a simplified **workspace model v2**: one workspace per org; reciprocal membership as the only gate and as the trust decision; a soul says `from:` (member repo | `here` | `package`) — a location, never a version; packages are the only versioned thing; **nothing is installed** — every capability is copied whole into the instance at spawn; discovery over Git remotes; teams as labels; harnesses start normally. Record: `agents/oats-expert/soul/knowledge/decisions/workspace-model-v2.md`; worked example: [2026-09-23-simplified-workspace-model.md](2026-09-23-simplified-workspace-model.md). **Consequences for this plan:** P1.3's `oats.yaml` export indexes and P1.4's `oats-config.yaml` activation are superseded (→ `oats-membership.yaml`, derived activation); D1/D4 stand (`oats.core` becomes `from: package` by default; the catalog stays as discovery); D2's "explicit `oats.core` on every soul" is met by the workspace default; D3 gains the `the operator's deployment directory` convention and clone-then-spawn. **No migration** — clean v2, the framework's own repos are the first workspace. A Phase 4 implementation plan is proposed to the human before any `lib/`/`bin/` change; the Desktop parity pipeline is paused meanwhile except for the in-flight 10B-0 security fix.
8
-
9
- ## Goal and order
10
-
11
- 1. Put OATS development onto the Git-workspace and Portable Souls architecture: a real shared workspace definition, qualified repository exports, by-reference sources and usable local deployments.
12
- 2. Centralise the curated knowledge and adopt the five expertise souls on that foundation.
13
- 3. Complete Desktop design/feature parity against the resulting supported flows.
14
-
15
- A distribution work package (below, D1–D4) accompanies phase1: the kernel's operational skills become the official capabilities `oats.core` and `oats.setup`, every soul declares `oats.core` explicitly by default, onboarding creates an `oats-setup-expert`, and the official marketplace is the reviewed list in this repository.
16
-
17
- The second phase does not run as an unrelated bulk migration while the first is still changing underneath it. Necessary generic knowledge/provider boundary fixes belong in phase1; default OKF behavior and the actual corpus/roster cutover belong in phase2.
18
-
19
- ## Target arrangement
20
-
21
- Approved repository responsibilities following the framework-hosted workspace choice. The two-phase order is unchanged:
22
-
23
- | Repository | Role in the new setup |
24
- |---|---|
25
- | `oats` | Kernel, adapters, Desktop and portable soul exports through `oats.yaml`; hosts the shared development workspace in `oats-workspace.yaml`; ships the official capabilities `oats.core` and `oats.setup` and the reviewed official package list (`package-catalog.json`) |
26
- | `oats-dev` | Reusable OATS development capabilities, including selected review skills/behavior; no longer responsible for defining the new workspace through a package template |
27
- | `oats-okf` | Reference knowledge capability and its complete reading/capture/judgment/delivery behavior |
28
- | `oats-aweb` | Messaging capability and its provider-owned identity/team/wake behavior |
29
- | `oats-authoring` | Reusable authoring support |
30
- | `oats-jira`, `oats-linear` | Optional task capabilities; workspace membership does not activate them |
31
- | `oats-knowledge` | Curated accepted expertise, not executable soul definitions, working transcripts or a copy of framework documentation |
32
-
33
- A workspace is a logical role and does not require a dedicated repository. The human has selected co-hosting in `oats`, preserving `oats-dev`'s capability purpose. Keep the `oats.dev` package where its reusable behavior is useful; separately review compatibility and the legacy template. Preserve published tags/payloads and exact restores. Merely adopting the workspace does not activate every capability.
34
-
35
- `oats-workspace.yaml` and `oats.yaml` have separate contracts even when co-located. Admit the framework repository explicitly if it participates as a member, and verify matching reciprocal observations. Importing a public OATS soul or installing the framework must NOT implicitly select or enroll an adopter in the framework's development workspace. A separate workspace repository remains an option if independent permissions or lifecycle become necessary.
36
-
37
- The shared workspace is **not a shared live runtime**. Each operator retains local deployment mappings, runtime/authentication, state and explicit approvals. Config and nonsecret lock/template provenance can be Git-shared where supported; credentials and live instance state cannot. Git access, organizational admission, executable approval and messaging enrollment remain distinct.
38
-
39
- ## Verified starting point
40
-
41
- - Kernel/Pi/Desktop0.24.0 and OKF2.1.0 are released. Workspace/source codecs, discovery, retained composition and scoped execution/provider machinery already exist. This is not a kernel rewrite from zero.
42
- - A read-only September20 inventory found no root `oats-workspace.yaml` in either `oats` or `oats-dev` and no root `oats.yaml` in the framework or the six inspected capability/development repositories. The selected knowledge repository is not yet initialized. These observations must be refreshed against exact heads before editing.
43
- - The default development package still supplies a legacy config template and `oats.review`; these are capability/template exports, not a Git workspace definition.
44
- - The checked-in roster remains legacy. A five-role candidate and curated corpus are preserved but not validly published/adopted as the new portable setup.
45
- - Earlier live native/directory-learning evidence is valuable but does not prove our actual Git workspace, two-operator deployment, private messaging or Git-PR learning cutover.
46
- - Current source contains the approved forward correction of the accidentally integrated held record patch. Preserve repaired history and its active-content exclusion; do not reopen that incident or repeat closed test matrices.
47
-
48
- # Phase 1 — adopt the workspace and Portable Souls architecture
49
-
50
- ## P1.1 — freeze the repository, source and runtime map
51
-
52
- **Owner:** integration lead, with kernel/provider/deployment owners.
53
-
54
- Produce one bounded implementation checklist from the actual current code and chosen package revisions:
55
-
56
- - Exact workspace repository and intended member repositories; external consumption is not membership.
57
- - Source/export locations for the necessary transitional roles and the eventual five experts. Recommended reusable soul editions remain in the framework repository, separate from live legacy `agents/` sources.
58
- - Compatible package/source revisions, required capabilities and operator-selectable bindings.
59
- - Actual runtime/backend and messaging-delivery profiles to support, including intentional local differences. Do not replace native credentials/profiles or copy one operator's raw configuration to another.
60
- - Existing support versus declaration/resource drift versus provider work versus genuinely missing kernel/CLI seams. Every missing generic field or authority change gets a concrete proposal; reuse the current parser/resolver/invocation engine.
61
-
62
- **Deliverable:** an exact repository/change/owner matrix and a small gap list, not another open-ended architecture investigation.
63
-
64
- ## P1.2 — author the real workspace
65
-
66
- **Owner:** workspace/deployment owner, reviewed by the integration lead.
67
-
68
- Add `oats-workspace.yaml` to the confirmed workspace home `oats` using the shipped schema, alongside that repository's separate `oats.yaml` export index:
69
-
70
- - Intended members, selected source imports with real reviewed revisions and aliases.
71
- - Shared defaults bounded by soul requirements, not a new repository-level policy hierarchy.
72
- - Provider-owned knowledge declarations and team aliases only where meaningful and safe to publish.
73
- - Explicit discovery/catalog references if needed, not an OATS-hosted registry.
74
-
75
- Do not advertise a planned source export or uninitialized knowledge base as usable. Do not commit secrets, private runtime state or machine-specific execution paths into the public workspace. The phase2 knowledge destination can remain deliberately unresolved until it is initialized and approved.
76
-
77
- **Deliverable:** validated, reviewable workspace definition and a short explanation of shared versus operator-local choices.
78
-
79
- ## P1.3 — publish repository indexes and reciprocal admission
80
-
81
- **Owner:** each repository/package owner, coordinated by the integration lead.
82
-
83
- For every intended member:
84
-
85
- - Add `oats.yaml` with the correct workspace backlink and actual exports.
86
- - Advertise package roots containing real `oats-package.json` files, not arbitrary npm roots.
87
- - Advertise only source-complete souls with explicit definition paths; imported souls remain references, not adopter-owned copies.
88
- - Add knowledge exports only when the provider declaration/base actually exists. A metadata-only bootstrap of the knowledge repository must not masquerade as corpus migration or a ready store.
89
- - Preserve package identities, compatible version floors, immutable releases and old locked revisions.
90
-
91
- Coordinate publication of backlinks and workspace admission. One side alone is not membership. Resolve the existing contract's default-branch observations and explicit revisions honestly; do not invent mutually dependent future commit pins or guess `main` when the host's default branch is required.
92
-
93
- **Deliverable:** discovery can qualify intended membership and enumerate real exports across repositories without requiring every source checkout to be present locally.
94
-
95
- ## P1.4 — make the declared setup operational
96
-
97
- **Owner:** kernel/lifecycle owner and the owners of the selected capabilities.
98
-
99
- This is **adoption and validation first**, not a mandate to write new runtime code. Exercise the already shipped paths with correct declarations and inputs before changing them. A new inspection convenience is not automatically an adoption blocker; preserve it as a separate proposal unless necessity is demonstrated. Provider adaptation must identify the minimum usable completion path, not merely replace one refusal with a later refusal.
100
-
101
- Close only demonstrated gaps needed by the chosen workspace/profile:
102
-
103
- - Public inspection/preparation, explicit artifact approval, retained resolution, scaffold and native start through supported CLI/API paths.
104
- - Complete source/skill/capability closure; independent source, deployment and work-target identities.
105
- - Actual provider bindings, required hooks and their truthful readiness. A parsed team/store declaration is not enrollment or a working provider.
106
- - Required continuation, capture and applicable wake/retire/recovery behavior for the selected profile. A path that is still unsupported must be named and resolved, not hidden behind successful start-only evidence.
107
- - Version-correct operational skills and guidance, including known stale claims that public request/context/launch inputs are unavailable.
108
- - Any minimal Desktop compatibility needed to observe/refuse operations truthfully; full redesign parity is later.
109
-
110
- Use an explicitly agreed transitional edition of an existing role for the pilot, not a new fictitious owner or bootstrap host. Retain its actual requirements. Any temporary acceptance store/profile must be explicitly scoped and must not be counted as production knowledge adoption. Do not silently remove messaging, knowledge, plugins or other requirements to make it launch.
111
-
112
- New package defaults or executable changes require appropriate release/pinning/approval. Adding metadata does not itself require replacing stable runtime components, but a real runtime change is not deployed merely because it reached main.
113
-
114
- **Deliverable:** one reproducible operator path from the shared Git definition to a genuinely usable, retained portable instance under the chosen profile.
115
-
116
- ## P1.5 — adopt fresh local deployments without disturbing existing work
117
-
118
- **Owner:** each local operator; coordinated readiness/evidence review by the integration lead.
119
-
120
- - Use a fresh explicit deployment location where existing managed state conflicts. Preserve old configs, locks, knowledge, identities, sessions, worktrees and pending jobs.
121
- - Map local repositories/work targets deliberately; operators need not have identical directory layouts.
122
- - Review exact software and restore/acquire through supported tooling. Keep native auth and deliberately chosen model/delivery behavior local.
123
- - Verify source discovery, reciprocal admission, imported identity, retained composition and actual start/continuation on the approved test host.
124
- - Check the second operator's declarations/readiness and an actual message/reply through its own identity without requesting model or GUI tests on that machine. Existing legacy connectivity is not automatically new-profile qualification.
125
- - Exercise relevant source-unavailability/update safeguards using owned test fixtures, never by deleting working source repositories or modifying retained artifacts.
126
-
127
- ### Phase1 exit gate
128
-
129
- The shared workspace and repository declarations are published and discoverable; a fresh deployment can select a real portable source and complete the supported prepare/approve/scaffold/start path with its declared requirements. Required lifecycle/provider limitations are resolved or explicitly constrain the qualified profile. Both operators understand the same shared definition and their own local differences. Old live deployments remain preserved.
130
-
131
- **Seven YAML files alone do not satisfy this gate.** Nor does an isolated fixture establish production provider readiness. No claim that the five new knowledge-backed experts are adopted is made yet.
132
-
133
- # Distribution — official capabilities and the official marketplace
134
-
135
- **Status:** direction accepted by the human on 2026-09-20 (decision `agents/oats-expert/soul/knowledge/decisions/official-capabilities-oats-core-setup-and-marketplace.md`). Runs alongside phase1 once the current lanes' PRs are integrated; it changes how OATS itself is distributed and must be in place before phase2 souls are published, since those souls declare their capabilities explicitly.
136
-
137
- Today the skills that teach an agent to operate OATS (`oats`, `oats-config`, `oats-packages`) and the "you run on OATS" injection are ambient kernel content. Under Portable Souls a soul declares its capabilities and their sources, so this knowledge must be packaged as capabilities a soul can declare, remove or replace.
138
-
139
- ## D1 — package `oats.core` and `oats.setup` from the oats repository
140
-
141
- **Owner:** capability/provider owner (packaging), reviewed by the integration lead.
142
-
143
- - `oats.core` — day-to-day operation, present on every soul by default: skill `oats-operate` (status, spawn, retire, doctor, lifecycle, instance layout) and skill `oats-souls` (soul discovery, spawn relations/linkage, roster, workspace-member souls), plus the former `injects/oats.md` injection.
144
- - `oats.setup` — deployment and workspace configuration ("OATS Soul Setup"): the former `oats-config` and `oats-packages` skills, workspace adoption guidance and package acquisition/trust/lock knowledge.
145
- - Both live under the framework's `oats-package/capabilities/` beside `oats-knowledge-theory`, are exported through the repository package manifest and `oats.yaml`, and are versioned/locked like any package. Content is moved from the existing skills, not re-authored; stale claims are corrected in the move.
146
- - The `instance-boundary` injection, work-mode briefings and config-declared injections **stay kernel-owned** — they describe the layout the kernel itself creates.
147
-
148
- **Deliverable:** two installable capabilities with manifests and focused inventory tests; the kernel unchanged except for registering nothing new.
149
-
150
- ## D2 — explicit default `oats.core` on every soul; kernel skills de-ambiented
151
-
152
- **Owner:** kernel/lifecycle owner.
153
-
154
- - Every soul-creation path (CLI, Desktop, setup guidance) writes `requires.capabilities.oats.core` with its source into the soul definition. It is visible in the file and the user can remove it.
155
- - The kernel does **not** inject `oats.core` when absent; `oats doctor` reports a soul that has neither `oats.core` nor a deliberate opt-out note, as information, not an error.
156
- - The hard-coded kernel skill list and the `kernel:oats` injection are retired once souls carry `oats.core`. Transition: both coexist for one release, with existing kernel-listed skills marked deprecated in favor of the capability.
157
- - Existing checked-in souls in this repository are updated to declare `oats.core` explicitly as part of the same change.
158
-
159
- **Deliverable:** soul definitions are honest about OATS operational knowledge; no hidden kernel dependency.
160
-
161
- ## D3 — onboarding creates and instantiates `oats-setup-expert`
162
-
163
- **Owner:** kernel/lifecycle owner, with the workspace/source owner for the soul edition.
164
-
165
- - Onboarding a new workspace (or a fresh deployment of one) produces a soul `oats-setup-expert` whose definition declares **both** `oats.core` and `oats.setup`, prepares/approves its artifacts under the normal approval bar, and instantiates it.
166
- - The setup expert then drives adoption: declaring/adopting member repositories, selecting fundamental-layer capabilities, creating further souls (each with explicit `oats.core`), and walking the operator through trust/approval steps. Setup becomes a conversation with a competent soul, not a wall of flags.
167
- - No new bootstrap authority: prepare/approve/scaffold/start remain the shipped path; onboarding only chooses the first soul and its capabilities. The entry point (CLI verb, Desktop flow, or both) and its relation to the version-scoped `oats init`/`oats use` compatibility path is proposed and reviewed separately; do not document a command before it exists.
168
- - The soul edition itself is source-complete and exported from the oats repository like the other framework souls.
169
-
170
- **Deliverable:** one reproducible path from "empty workspace" to a running `oats-setup-expert` that can configure the rest.
171
-
172
- ## D4 — the official marketplace is the reviewed list in the oats repository
173
-
174
- **Owner:** workspace/source owner (list and docs); Desktop owner for the view in the parity phase.
175
-
176
- - `package-catalog.json` in `awebai/oats` (read today by `officialPackageCatalog()`) **is** the official marketplace. Listing = official. Do not build a second registry.
177
- - Officialness is granted by a reviewed PR to that file — for external packages too. That review is the safety gate: we control what is called official even when we do not host the code. Document the acceptance criteria (source-complete package, pinned immutable ref, payload root, trust posture, maintainer contact).
178
- - First entries: `oats.core`, `oats.setup`, `oats.okf`, `oats.aweb`, `oats.authoring`, `oats.jira`, `oats.linear`, `oats.dev`, `oats.knowledge-theory` (the fundamentals are already listed; add the two new ones once released).
179
- - Discovery is universal (CLI and Desktop marketplace view/search present official packages as assignable to a soul); installation still goes through acquisition, lock and per-capability executable trust. Discoverable is not installed; installed is not approved.
180
-
181
- **Deliverable:** documented official-list policy and seeded list; Desktop view tracked under phase3 parity.
182
-
183
- ### Distribution exit gate
184
-
185
- A fresh workspace onboarding yields an `oats-setup-expert` whose definition shows `oats.core` and `oats.setup` resolved from the official list; a soul created by that expert shows `oats.core` explicitly and still runs after the user removes it; the kernel ships no ambient operational skill. Framework souls in this repository declare `oats.core`.
186
-
187
- # Phase 2 — centralise knowledge and adopt the five expert souls
188
-
189
- ## P2.1 — align the reference knowledge profile
190
-
191
- **Owner:** OKF owner, with kernel review only for demonstrated generic-boundary gaps.
192
-
193
- Apply the accepted knowledge model to actual runtime instructions, skills, bindings and behavior:
194
-
195
- - Centralised per-soul homes with stable identity and explicit cross-reads.
196
- - Capability-owned organisation, placement, reading, capture, judgment and delivery—not a kernel-owned mandatory knowledge pipeline.
197
- - Distinct accepted knowledge, local evidence/working state and immutable execution artifacts.
198
- - Supported reading/refresh/capture for both short- and long-running instances; no automatic active-context synchronisation or silent curriculum replacement.
199
- - Independent promotion, reference doctrine and PR-only Git delivery, distinguishing proposal, accepted merge and reader visibility.
200
-
201
- Do not implement automatic speciation, redirects, whole-session cloning, a permanent maintenance agent or every alternative provider as prerequisites. Preserve their architectural possibility without claiming them shipped.
202
-
203
- ## P2.2 — curate and publish the shared knowledge base
204
-
205
- **Owner:** knowledge steward, with human publication/visibility decision.
206
-
207
- - Confirm public/private visibility and access before publishing corpus or exposing private locators in the workspace.
208
- - Reuse the existing curation and disposition records. Add a focused freshness pass for subsequent accepted decisions and discoveries; do not redo the entire audit or bulk-copy legacy folders.
209
- - Preserve useful expertise, rationale, limitations and maintained slow state. Keep formal contracts/code navigation in docs, repeatable procedures in skills, and task residue/transcripts in local evidence.
210
- - Give each accepted concept one canonical home, valid cross-links and appropriate provenance/freshness.
211
- - Separate administrative repository/bootstrap scaffolding from corpus acceptance. Deliver the corpus through reviewed changes; ongoing runtime Git learning remains PR-only.
212
-
213
- **Deliverable:** a small, current, reviewed knowledge base with an explicit owner/read mapping, not merely a passing validator over relocated text.
214
-
215
- ## P2.3 — publish and adopt the five expertise souls
216
-
217
- **Owner:** soul/source maintainer, reviewed by the integration lead and knowledge steward.
218
-
219
- The five permanent expertise roles are:
220
-
221
- 1. `oats-expert` — overall direction and cross-cutting architectural judgment.
222
- 2. `oats-kernel-expert` — kernel/capability contract rationale and technical expertise.
223
- 3. `oats-desktop-expert` — Desktop/product/interaction expertise.
224
- 4. `market-research-expert` — sourced research and positioning evidence.
225
- 5. `oats-assistant` — user-facing adoption and onboarding help.
226
-
227
- Use source-complete portable declarations, canonical `AGENTS.md` and the `CLAUDE.md` alias, reviewed procedures, explicit capability requirements and stable knowledge bindings. Final export paths must be deliberately chosen before pinning imports. New adopters' learning must not silently default to the source publisher's writer.
228
-
229
- The optional knowledge-theory authoring expert is not a sixth mandatory runtime role. The public assistant must work through a real supported adoption path, not only as a maintainer-local role. A distinct cold-bootstrap helper protocol, if needed, requires its own scoped decision; do not invent a persistent owner to bypass helper authority.
230
-
231
- **Deliverable:** five indexed reusable sources, imported by the workspace at real compatible revisions, with the intended expertise/reading boundaries—not renamed engineer charters.
232
-
233
- ## P2.4 — demonstrate learning, then switch writers/readers
234
-
235
- **Owner:** integration lead and OKF owner, with local operators.
236
-
237
- Use a small real end-to-end path:
238
-
239
- 1. An expert obtains its accepted foundation and relevant cross-role context.
240
- 2. A working instance captures a useful new finding.
241
- 3. An independent worker judges it and delivers a Git PR.
242
- 4. Authorised review/merge accepts it.
243
- 5. A different/fresh instance obtains that accepted learning through the supported reader/refresh path.
244
-
245
- Do not seed the conclusion and call that learning. Check representative questions and source/binding correctness for all five roles without running five redundant full matrices.
246
-
247
- Then cut over the workspace imports/bindings deliberately. Reconcile or hold outstanding old harvests rather than retarget their frozen destinations; avoid duplicate old/new writers. Do not rename live homes or borrow identities. Keep original knowledge and work recoverable. Retirement/removal of superseded sources is a separately verified cleanup after unfinished work is safe.
248
-
249
- ### Phase2 exit gate
250
-
251
- The five experts run from portable sources in the shared workspace, consult the curated common knowledge, and demonstrate actual reviewed Git learning visible to a subsequent reader. Publication, access, writer ownership and local runtime configuration are known. The old setup is preserved until this is true.
252
-
253
- # Execution and review discipline
254
-
255
- The initial implementation lanes are deliberately disjoint:
256
-
257
- | Lane | Owns | Does not own |
258
- |---|---|---|
259
- | Workspace/source declarations | Framework workspace/member indexes, transitional `souls/oats-expert/` edition preserving its existing logical owner, setup guide and metadata tests; other capability repositories' root `oats.yaml` only | Kernel or provider runtime, provider README/tests, framework mirrors, corpus migration |
260
- | Kernel/onboarding | Public preparation/lifecycle glue, same-repository workspace regression coverage and portable-setup skill | Root workspace/member indexes, soul editions, provider payloads, record optimisation |
261
- | Capability/provider readiness | Canonical OKF/aweb payloads, manifests, skills/docs/tests and actual profile-readiness facts | Kernel/record, root member indexes, soul editions, framework mirrors/catalog |
262
- | Integration lead | Scope/interface arbitration, exact review/integration, shared stewardship, release coordination and combined deployment acceptance | Unilateral changes to another operator's credentials, identity or local deployment |
263
-
264
- Distribution lanes (D1–D4) map onto the same owners: capability/provider readiness packages the two capabilities (D1); kernel/onboarding owns the explicit default, kernel de-ambienting and the setup-expert onboarding (D2, D3); workspace/source declarations own the official list and its policy docs (D4). They are assigned only after the current phase1 PRs are integrated, to avoid overlapping edits in `lib/core.mjs` and the skills tree.
265
-
266
- The phase1 transitional source is an edition of the existing overall expert, not the full five-role rebuild or an invented bootstrap owner. Source publication precedes workspace import pinning to its actual approved revision. An owner reports a precise cross-lane seam rather than patching another lane's files. No new review agents or per-edit permission loops are required for agreed work.
267
-
268
- - One redesign lead owns the cross-repository plan, dependency order, scope questions and integration picture. Contributors deliver bounded agreed work and exact diffs/PRs; no wholesale branch merges that import unrelated or held work.
269
- - Workspace/source metadata and compatibility work can proceed in parallel once their shared identities/contracts are agreed. Provider changes are reviewed against concrete missing seams, not speculative replacement architectures.
270
- - Local operator approval remains necessary for installation, executable trust, identity/team changes, deployment cutover and disclosure. Lead coordination is not authority over unrelated deployments.
271
- - Use focused changed-path checks while developing, then one coherent acceptance gate per usable increment. Keep original failed evidence and distinguish author reports, independent checks, installed bytes and real execution.
272
- - Preserve normal native harness auth and explicit permissions. No implicit credential handling, safety bypasses, source/identity borrowing or model/GUI testing on another operator's machine.
273
- - Publish updated versions only where code/payload changes require them; never move existing tags. Record delivery and actual adoption separately.
274
-
275
- # Decisions to settle at the appropriate boundary
276
-
277
- - Workspace home is settled: `oats` hosts it and `oats-dev` remains development capabilities. Phase1 authorises the parallel existing-role edition at `souls/oats-expert/`; preserve its logical owner and settle any remaining source-policy details before publishing. Final five-role publication/cutover remains phase2, not permission to replace the live roster now.
278
- - Confirm knowledge visibility and public-safe content before phase2 publication; this need not block the phase1 contract inventory.
279
- - Agree the exact pilot/provider/runtime profile and its supported lifecycle. No hidden fallback to an easier profile.
280
- - Review any newly identified generic contract or bootstrap authority change explicitly. Existing accepted constraints do not need repeated approval.
281
-
282
- # References
283
-
284
- - [Portable source/workspace declarations](2026-09-15-portable-declarations.md)
285
- - [Workspace schema](../oats-workspace.schema.json) and [repository index schema](../oats-member.schema.json)
286
- - [Fresh onboarding boundary](2026-09-16-portable-onboarding.md) — read historical pending statements with the actual current public routes and release scope
287
- - [Released0.24 scope](../release-notes/v0.24.0.md)
288
- - [Canonical knowledge theory](../knowledge-theory.md)
289
- - [Generic knowledge/capability boundary](2026-09-16-knowledge-capability-contract.md)
@@ -1,207 +0,0 @@
1
- # Public source inspection for same-repository workspace onboarding
2
-
3
- This increment supplies the missing public adapter around the EXISTING portable
4
- onboarding facade. It does not define another workspace format, parser, resolver,
5
- registry, identity or permission. Source/member declarations remain separately
6
- owned; production capability/profile readiness is not established by the fixture.
7
-
8
- ## Read-only entry
9
-
10
- ```sh
11
- oats inspect --request /absolute/inspection.json --json
12
- # Optional explicit request export (new private file; never overwrite):
13
- oats inspect --request /absolute/inspection.json --emit-prepare-request /absolute/preparation.json --json
14
- ```
15
-
16
- This mode accepts one request file, optional `--emit-prepare-request`, and `--json`.
17
- The 0.24.4 follow-up also accepts the complete preparation request's `operator`,
18
- `launch`, `helperLaunches`, `mode`, and `allowLocalPaths` fields. Inspection ignores
19
- their semantics: it does not validate provider payloads, select a runtime/model,
20
- execute a codec, or authorize local acquisition. `ignored: [...]` lists only the
21
- present field NAMES in a stable order; values stay out of the metadata view and
22
- `omitted.*` remains true. Preparation still validates those fields normally.
23
- Unknown fields remain errors. Explicit captured selectors
24
- or current-context flags conflict before file reads; inherited captured environment
25
- is not new-work input. Other existing inspect modes are unchanged. The shared
26
- bounded strict JSON request reader feeds the existing inspection validator intact:
27
- unknown fields are not dropped, and no missing context comes from current config.
28
-
29
- The public core export `inspectPortableOnboarding(input, {repositoryOptions}?)`
30
- owns one transient repository transaction and its guarded cleanup. Its input is
31
- the existing facade contract:
32
-
33
- ```json
34
- {
35
- "deployment": "/operator/deployments/example",
36
- "workTarget": "/operator/projects/example",
37
- "source": "advertised-alias",
38
- "origin": {"kind":"operator","document":{"kind":"operator","id":"setup"},"pointer":"/source"},
39
- "workspace": {
40
- "source": "git:https://example.org/team/framework.git",
41
- "origin": {"kind":"operator","document":{"kind":"operator","id":"setup"},"pointer":"/workspace"}
42
- },
43
- "member": {
44
- "source": "git:https://example.org/team/framework.git",
45
- "origin": {"kind":"operator","document":{"kind":"operator","id":"setup"},"pointer":"/member"}
46
- }
47
- }
48
- ```
49
-
50
- These paths/references are placeholders. Workspace and member may identify the
51
- SAME repository. They still require explicit workspace admission, a member
52
- backlink and matching observed commits. Omitted repository revisions observe the
53
- hosting default branch; they do not guess `main` or create circular future pins.
54
-
55
- Independent adoption replaces workspace/member with an explicit source reference
56
- `{source, soul, revision, alias}` and explicit `standaloneContextKey` (opaque string
57
- or null). It does not follow the source publisher's workspace backlink or inherit
58
- its development defaults/teams. A member check is optional; without one, import
59
- reports `not-requested` membership, never enrollment.
60
-
61
- ## Metadata is not authority or provider readiness
62
-
63
- Normal JSON envelope `result` retains schemaVersion1 and the existing statuses:
64
- `ready-for-preparation`, `needs-configuration`, `separate-deployment-required`.
65
- `ok:true` means the observation succeeded, including a truthful hold. Separate
66
- fields expose source identity/revision/export metadata, deployment/work paths,
67
- workspace identity/import locators, reciprocal observations, declared teams and
68
- non-effect claims. Inspection executes no provider, hook, approval or native
69
- backend and writes no deployment state; repository scratch is transient.
70
-
71
- The public projection deliberately does NOT expose `source.reference` as a
72
- reusable mutation input. Opaque adoption values and provider declaration payloads
73
- have not been classified by their owner and are omitted. Import summaries expose
74
- `adoptionPresent`; knowledge export summaries expose contract/version and
75
- `payloadOmitted`. Top-level `omitted:{providerPayloads:true,adoptionValues:true}`
76
- states that this is a metadata view, not a lossless request or a safe-payload claim.
77
- It is not an issued `buildFreshPreparationRequest` witness, even in the same
78
- process. The opt-in `--emit-prepare-request` route calls that existing builder
79
- on the real in-process inspection before dropping the private witness. It writes
80
- only `.preparation` to a new mode-0600 file at an explicit normalized absolute
81
- path with an existing real parent; existing files/symlinks are refused, never
82
- overwritten. JSON output names `prepareRequestFile` and records the explicit
83
- request-file write in `effects`; it does not echo the request contents. The
84
- export can carry unclassified adoption declarations and must remain private;
85
- requests must contain nonsecret values or credential references, never secrets.
86
- A held inspection cannot emit a fresh preparation request. Core callers can
87
- explicitly request this data via `{includePrepareRequest:true}`; the default
88
- metadata projection and its omissions are unchanged.
89
-
90
- The explicit export preserves authored prepare-only fields privately through the
91
- existing builder, without interpreting them; it must not silently drop operator
92
- bindings or launch/helper choices. They remain unvalidated until preparation.
93
- This does not expose their values in normal metadata or turn ignored values into
94
- inspection authority.
95
-
96
- The file is reusable new-work input, NOT a stored resolution, approval, admission,
97
- or serialized ready-inspection permission. Preparation performs fresh validation
98
- and observations, including re-resolving any mutable source selectors. Provider
99
- configuration still requires explicit operator choices; conversion invents none.
100
-
101
- Existing managed deployment state is preserved and reported, not repaired or
102
- migrated. An absent selected path requires explicit operator provisioning and
103
- reinspection. Prepare refuses it with typed `needs-configuration` and provisioning
104
- guidance before fetching or writing managed state, not a raw ENOENT. Inspection's
105
- `ready` means the path is eligible for fresh setup, not already provisioned.
106
- The serialized inspection does not lock the filesystem or authorize
107
- later mutation; preparation retains its own existing validation/custody rules.
108
- The inspected work target does not become source identity or an implied placement
109
- choice. Supported captured directory scaffolds own their separate H/work.
110
-
111
- ## Existing preparation and retained execution
112
-
113
- `oats prepare --request` accepts deployment/source/origin, optional `workTarget`,
114
- workspace/member OR standalone context, operator policy/bindings,
115
- mode/local-input authorization, launch and helperLaunches. The original minimal
116
- inspection request (without inspection-only `catalogIndexes`) is also accepted;
117
- use the converter rather than stripping fields from a metadata/result wrapper.
118
- Explicit `workTarget` is validated with the same physical existing-directory
119
- validator as inspection and returned as work-context metadata. It takes precedence
120
- over any caller assumption about cwd: no cwd/config fallback selects its value.
121
- Omitting it preserves prior preparation behavior without inventing a placement.
122
- It does not change source identity, `operator.localBase`, work mode, or captured
123
- H/work placement. Do not pass an inspection result/catalog wrapper or private
124
- scratch `directory` to preparation. Exact executable approval is separate. A required provider whose binding
125
- code is unapproved may return `needs-configuration` with an `approval-required`
126
- problem and exact artifact-set/capability requests, before any record exists:
127
-
128
- ```sh
129
- oats trust <capability> --deployment <D> --artifact-set <returned-id> --json
130
- oats prepare --request /absolute/preparation.json --json
131
- oats inspect --deployment <D> --resolution <R> --composition --json
132
- oats spawn <subject> --deployment <D> --resolution <R> --home <new-H> --no-launch --json
133
- oats session start --deployment <D> --resolution <R> --home <H> --request /absolute/native.json --json
134
- ```
135
-
136
- Each `selections[]` row carries an `artifactSet` id and an `approvalRequired[]`
137
- array of **capability ids**. Pair them: pass the capability to `trust` and that
138
- row's artifact-set id to `--artifact-set`. These are not interchangeable ids.
139
- `trust <capability> --dir <D>` against a v3 deployment now refuses with typed
140
- `needs-configuration` and exact available-set commands; it never picks or approves
141
- a set automatically. Classic v1/v2 trust remains the classic route.
142
-
143
- Provider preparation problems carry `slot` and `capability`, plus original
144
- provenance where available. A no-interface provider is identified with kernel-known
145
- manifest/version facts. Other supported slots still normalize, resolve through
146
- the same choice engine, and bind if their own choices are resolved; any required
147
- slot problem still prevents publication. Provider free text is not passed through.
148
- The 0.24.4 follow-up preserves only exact fixed reasons declared by the selected
149
- manifest (or its reviewed kernel compatibility list when absent); see the
150
- [binding wire](2026-09-16-provider-binding-wire.md). Human CLI output also shows a
151
- problem's existing choice key, without inventing new key/provider semantics.
152
- Different opaque inputs need not produce different public errors if both fail the
153
- same provider prerequisite. In particular, missing OKF host runtime settings can
154
- hold both syntactically valid Git locators; preparation does not test whether a
155
- remote repository exists. Required readiness checks remain later, with the provider.
156
-
157
- ### Operator input
158
-
159
- When present, `operator` requires both `policy` (object; `{}` is valid) and
160
- `document` (`{ "kind": "operator", "id": "setup-attempt" }`). Its ONLY optional
161
- fields are `localBase`, `allowLocalPaths`, `sourceContext`, and `bindings`:
162
-
163
- - `policy`: explicit provider/additive selections with their selected sources and
164
- settings, using the existing policy grammar. It cannot erase soul requirements.
165
- - `localBase`: explicit absolute base for relative local policy sources. Work
166
- context/cwd is not a substitute.
167
- - `allowLocalPaths`: explicit boolean authorization for those local policy sources.
168
- Top-level local acquisition authorization remains a separate input.
169
- - `sourceContext`: existing qualified repository anchor for `repo:` policy sources;
170
- not a new repository inferred from workTarget.
171
- - `bindings`: provider-owned map. Kernel preserves it and its document pointers;
172
- it does not interpret store names, Git destinations, credentials or private teams.
173
-
174
- Selecting an inherited store does not replace required provider runtime settings.
175
- Use the selected provider's instructions for those settings; kernel must not guess
176
- host-owned durable paths or copy native authentication.
177
-
178
- Repreparation after explicit approval is ordinary continuation in the selected,
179
- now-managed deployment; do not delete its state to make fresh preflight pass.
180
- Required hooks still run under their admitted custody with `--no-launch`; a parsed
181
- binding or team declaration is not proof of an enrolled/ready native provider.
182
- Native request version1 supplies backend/task/optional stopGraceMs, not a new
183
- model or current launch selection. Complete OATS home resources remain composed.
184
- Native auth stays native and permission bypass requires explicit user opt-in.
185
-
186
- ## Limits and focused evidence
187
-
188
- `test/workspace-onboarding-public.test.mjs` uses current public CLI/core, actual
189
- Git and a bounded local SSH upload-pack fixture, contract-shaped inert provider
190
- codecs/hooks, and inert native/backend executables. It covers self-membership,
191
- reciprocal stale observations, independent adoption, non-effect/opaque-output
192
- boundaries, exact approval, full retained resources, source deletion/current
193
- config poison, required-provider failure BEFORE native admission/backend effects,
194
- and original-incarnation native dispatch plus receipt-based stopped observation.
195
- No production provider/SDK/model/server or host installation is exercised.
196
-
197
- Captured input/wake and public captured retirement remain explicit unsupported
198
- boundaries; a stopped terminal observation is not permission to deliver a captured
199
- message or retire through legacy fallback. Session-delivered messaging must retain
200
- its required wake contract; a start-only fixture does not qualify that profile.
201
- Non-directory placement is not supplied by inspecting a Git work target. These
202
- limits go to their owners as precise seams, not silent requirement removal.
203
-
204
- The user requested removal of `oats-portable-setup` and no new skills in this
205
- increment. Fresh kernel composition no longer selects that skill; existing
206
- retained snapshots are unchanged. This document and CLI help describe the public
207
- adapter, not a replacement skill or a claim of completed workspace deployment.
@@ -1,58 +0,0 @@
1
- # Desktop parity — slice plan and kernel/provider seams (S8)
2
-
3
- Status: **proposal accepted for direction** by the lead on 2026-09-22; contracts K1–K8 and P1 are *proposed identifiers*, not shipped CLI grammar. Five policy decisions are routed to the human (below) before their slices start. Author of the plan: the Desktop engineer (`oats-desktop-engineer-1`); this document is the lead's record of it. Scope authority: the human's 2026-09-22 direction — the redesign to the letter, only frames 05 Knowledge and 06 Tasks excluded.
4
-
5
- ## Slices (each a PR from main; lead reviews and merges)
6
-
7
- | Slice | Delivers | Needs |
8
- |---|---|---|
9
- | 1a | Compact guides; engine-owned ⌘F / ⌘N; rebind-aware hints | — (PR45) |
10
- | 1b | Shell 01a/01b: right panel Instance · Git & GitHub · Soul tabs, collapse rail, two editor groups, focus mode; panel state survives repaint | existing tabs/terminal lifecycle |
11
- | 2a | Worktree branch/ahead/behind/path; changes list; bounded unified diff | **K1** |
12
- | 2b | PR card: title/#/state/commits/closes; per-job checks bound to head OID; unresolved review threads; Open PR; Send threads | **P1**, **K2** |
13
- | 2c | Remove / Stop confirmations with worktree/branch/open-PR/child/dirty facts and receipts | **K3** |
14
- | 3 | 03 Souls + Sources: imported editions + local souls, requirements, provenance, editability | **K4** |
15
- | 4 | 04 Capabilities: official catalog (`oats catalog --json`, 0.24.6+) + deployment inventory/readiness/used-by; Add capability = exact command | landed catalog + list/inspect + **K5** |
16
- | 5 | 09 First-run readiness quartet; View policy; Skip/Enrol | **K5** + enrollment decision |
17
- | 6a | 02 Spawn modal **design parity on existing seams** (human pulled forward 2026-09-22): two-column layout, soul chooser, provider/model dropdowns, launch config restored, opening instruction, readiness from known facts (`unknown` where not), ⌘↵ guards; not-yet-backed fields rendered disabled with "available after <seam>" | existing spawn/launch-config seams |
18
- | 6b | 02 Spawn fields live: soul chooser, provider/model, launch config (restored), work-area naming/worktree/base+branch, opening instruction, attach knowledge, child spawns, auto-PR, readiness, ⌘↵ | **K6** (+ knowledge-node JSON from the knowledge provider; 05 excluded but attach stays) |
19
- | 7a | 07 Active overview: counts, relations, activity/waiting-on-you, actions, pan/zoom | **K7** |
20
- | 7b | 08 Schedules: table/toggles/new/edit, next/last, recent runs, transcript handoff, captured-policy preservation | **K8** |
21
- | 8 | 10 Components: dropdowns, workspace join/manage, Open in split, Detach to window, Open worktree in editor, actions, toasts, collapsed rail | existing seams + Desktop IPC review for detach/editor |
22
-
23
- ## Shared JSON rules (accepted)
24
-
25
- Envelope `{schemaVersion:1, ok, result|error}` unchanged. Requests address a server-admitted exact target (`{home, server}` / exact source+revision+soul), never a renderer cwd. Results echo target + `contract`, `version`, `observedAt`, opaque `revision`, typed `problems[]`, explicit completeness/truncation. `null` = not known; empty = observed empty only when complete. Per-section availability `available | not-applicable | unavailable | denied | unsupported | error`. No stack traces, auth stderr, tokens or token-bearing URLs in renderer data. Remote paths are provenance, never local authority. Read-only calls never install, trust, enroll, spawn, fetch into the operator's worktree, switch branches or repair config.
26
-
27
-
28
- > **Ownership amendment (2026-09-22, human):** contract-dependent slices are not waits — the team implements the contracts. Kernel seams may be assigned to the Desktop engineer under lead review (the `lib/`/`bin/` lane rule is lifted per assigned seam). Current split (revised 17:10Z): **K1, P1 Decision, K3, K5 → lead** — the engineer's composed instructions forbid kernel edits and a mail cannot recompose them (role change = soul edit + recomposition; spawns blocked by the deployment's pi-profile pin). Engineer: slice 3 now (K4 merged), then 2a after K1. Kernel PRs: full root `npm test` + DTO in `docs/desktop-cli-api.md` in the same PR.
29
-
30
- ## Seams
31
-
32
- - **K1 `oats.instance-git` / `oats.instance-diff`** (kernel): typed per-instance Git state — worktree, head, upstream/merge-base comparison (missing upstream ≠ 0/0), NUL-delimited changes with rename paths and per-file counts; bounded unified diff by opaque file id + observation revision (stale selection refuses, never a different file). Replaces the Desktop-only `instance.git` aggregate whose fallback zeros can masquerade as clean.
33
- - **P1 `oats.instance-github`** (provider, not kernel): PR summary/checks/reviews through an additive Git/review **capability** with its own credential policy (native custody; Desktop never runs `gh`, reads tokens or opens credential forms). Needs a kernel dispatch contract for additive-capability structured views (today `operation run` accepts only knowledge/messaging/tasks). "No PR" ≠ unavailable ≠ unauthenticated ≠ rate-limited. Checks bind to exact head OID. Review markdown is untrusted text.
34
- - **K2 review-thread delivery**: explicit, confirmed send of selected threads to the exact home's session input with receipt (`delivered | refused | unknown`); delivered ≠ consumed. Typed producer events for commit / branch-renamed / PR-updated / review-request; **no prose parsing** to infer actions.
35
- - **K3 lifecycle plan/apply**: read-only plan (runtime activity, children, worktree dirt, branch + open PRs, retention per artefact, per-option allowed/default/reason, warnings, blockers) → apply with plan revision + idempotency key, revalidated under the lifecycle lock; per-target `completed | retained | partial | unknown`. Today there is **no standalone stop**, and retire removes owned worktrees; the design's default Remove retains worktree/branch/PR.
36
- - **K4 souls/sources enumeration** (✅ MERGED PR52 as additive `inspect --json` `soulsApi:1`, not a new command — see docs/desktop-cli-api.md): qualified list of imported editions + authored local souls with identity/source/revision/requirements/declarations/editability; readiness separate from launchability and adoption; no renderer YAML.
37
- - **K5 readiness quartet** (✅ MERGED PR63 — `oats readiness`): `installed | trusted | configured | enrolled`, each `pass | fail | unknown | not-applicable` with items (subject, requiredness, reason, producer, evidence, remedy); trust separates artifact approval from `signature {verified|unsigned|unknown|invalid, signer}`; policy view returns **enforced** child-spawn/worktree permissions with origins; native config items report labels/scope state, never secrets; unknown ≠ granted.
38
- - **K6 spawn preview/apply** (✅ MERGED PR63 — `oats spawn --preview`, `--base`, `--model @native-default`) (add, 2026-09-22 from 6a review: an explicit `model: {kind: "native-default"}` request field — today an omitted model inherits the configured/soul model and there is no force-native override; 6a renders that control disabled until K6): kernel returns suggestions, canonical worktree/home/branch/base OID, resolved knowledge refs, enforced child policy, auto-PR policy, readiness, typed field problems; apply revalidates and captures; no Desktop-derived paths or branches.
39
- - **K7 activity feed** (✅ MERGED PR64 — `oats instance events`): bounded typed events per instance with provenance; "waiting on you" only from a producer that reports it.
40
- - **K8 schedule run history** + captured-policy-preserving edit contract; transcript access via the owning CLI/provider.
41
-
42
- ## Decisions — DECIDED 2026-09-22 (lead, delegated by the human)
43
-
44
- Recorded in `agents/oats-expert/soul/knowledge/decisions/desktop-parity-lifecycle-and-policy-decisions.md`: (1) Remove retains worktree/branch/PR by default and re-homes the worktree to the deployment `worktrees/` root before the home is removed; (2) `stop` is a first-class recursive lifecycle route retaining everything for restart; (3) Enrol = workspace member admission with a two-document receipt; "signed by" renders only on a verified Git signature with a named signer; policy rows render enforced policy only; (4) child-spawn permission is enforced by the spawn route (attributed refusal); (5) auto-PR is provider-owned, default off, first pushed commit, draft, human undrafts. Gemini illustrative. The original questions follow for the record.
45
-
46
- ### Original questions
47
-
48
- 1. **Remove semantics** (K3, slice 2c): the design's default Remove deletes the instance but *retains* worktree, branch and remote PR; today retirement removes owned worktrees and there is no standalone Stop. Decide: adopt the design's retention default (needs a kernel placement/custody rule for a worktree that outlives its home) or keep current semantics and label the UI accordingly.
49
- 2. **Recursive Stop** (K3): Stop as a first-class lifecycle action (retain home/worktree for restart) including children — new kernel route.
50
- 3. **Enrollment** (K5, slice 5): what "Enrol workspace" *is* (workspace admission? team/machine registration?), its authority and receipt; `oats onboard` is bootstrap, not enrollment. Also what counts as **signature evidence** for "Trusted · signed by …" (catalog URL/hash is not a signer).
51
- 4. **Enforced child-spawn permission** (K6): "Allow child spawns" must be enforced by admitted spawn routes, not advisory — new kernel policy surface.
52
- 5. **Automatic PR** (K6 / P1): trigger (proposed: first non-empty *pushed* commit), draft status, publication consent; provider-owned; default off; never commits/pushes local data on its own.
53
-
54
- Also to confirm: prototype "Gemini" runtime is illustrative (not an OATS runtime) unless the human wants kernel work.
55
-
56
- ## Ownership
57
-
58
- Lead: K1, K4, K5 (readiness/policy shape), K6 preview/apply plumbing, K7/K8 projections, dispatch contract for additive-capability views — proposed as Decisions where they change contracts, implemented in small PRs otherwise. P1: **forge connections are ADE/workstation integrations, not capabilities** — **Decision ACCEPTED** (`agents/oats-expert/soul/knowledge/decisions/p1-forge-connection-is-an-ade-integration.md`). Desktop *Connections* surface (GitHub card: status / Connect = `gh auth login --web` in an owned pane / Disconnect), PR card read by the Desktop server via fixed-argv `gh pr view … --json` at the existing guarded boundary, typed states (available / no-pull-request / not-connected / cli-not-installed / unsupported-forge / no-remote / unavailable), remote workspaces refuse; OATS never holds a token. No kernel dispatch contract. Kernel: K1 gains `remote {name,url,host,path}` (lead). Slice **2b** = Connections + PR card (engineer; lead security gate before wiring). Auto-PR: ADE-owned, off, per spawn, after K6. Desktop engineer: all slices, Desktop IPC review items (detach, open-in-editor).