@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,205 +0,0 @@
1
- # Captured Pi print host — kernel implementation boundary
2
-
3
- This increment implements an explicit SDK host, not a reinterpretation of a Pi
4
- CLI executable. It is not interactive/plugin/private-provider qualification.
5
- The host is packaged by the existing `bin/` and `lib/` file inclusion; no new
6
- package metadata or mandatory model capability is introduced.
7
-
8
- ## Selection and native behavior
9
-
10
- Choose the physical installed `bin/oats-pi-sdk-host.mjs` path as an explicit
11
- captured Pi executable. Operator args are exactly:
12
-
13
- ```
14
- --oats-pi-host 1 --mode print --thinking medium --sdk-root /physical/pi/package --sdk-version 0.85.1
15
- ```
16
-
17
- Launch env is empty (no additional OATS contribution, NOT an empty inherited
18
- process environment); yolo is false; model is an exact `provider/id`. The kernel
19
- alone prefixes `--home H --session-dir S --model M --task-file H/TASK.md`.
20
- There is exactly one session-dir flag at prefix indices2/3. Unknown/duplicate
21
- args, arbitrary task/history/model flags and empty tasks refuse.
22
-
23
- The public SDK export is resolved from the exact selected package name/version
24
- and public export map without PATH/package acquisition or private imports.
25
- ModelRuntime.create() uses its normal native defaults. Native getAgentDir and
26
- SettingsManager.create preserve the user's ordinary profile/auth/helpers/OAuth,
27
- model config and persistence. There is no OATS credential selector/parser/store,
28
- no copied auth, and no null/empty/no-refresh production fixture configuration.
29
-
30
- The public ResourceLoader consumes only reverified retained instructions and
31
- exact skill files (`includeDefaults:false`). It has zero extensions and refuses
32
- resource additions. Public services, createAgentSessionFromServices,
33
- AgentSessionRuntime and runPrintMode remain the actual engine. The print host
34
- rejects session switch/import/fork/new operations before delegation. Native
35
- compaction/retry are not disabled. The captured exact model must exist; no
36
- first-available/default substitution occurs.
37
-
38
- ## Admission, history and activation hold
39
-
40
- The execution-side host verifies the original index/incarnation/intent, native
41
- pending receipt/target, task input digest, capability approvals, selected launch,
42
- zero-plugin eligibility and projected curriculum. It revalidates for resource
43
- reload and startup; it does not admit another action or create an identity.
44
-
45
- S is `nativeHistoryPath(H)`'s sibling named `<history-basename>.pi`, never inside
46
- the native UUID-receipt directory and never the native auth/profile directory.
47
- Core hooks the EXISTING native transaction's record preparation point, preserving
48
- its record-ID/pending/target/replay/uncertainty logic. Legacy noncaptured renderers
49
- are unchanged. A captured Pi CLI recipe is held rather than silently converted
50
- or launched with unqualified ambient extension behavior.
51
-
52
- **Fail-closed dependency:** the record library must provide the complete v2 root
53
- witness AND discovery/read/each-append guard implementation. This kernel checks
54
- `CAPTURED_PI_RECORD_VERSION === 2` and these synchronous native-history APIs:
55
-
56
- - `inspectCapturedPiRoot(home, { incarnationId, sessionDir })`: read-only original
57
- proof validation or truly absent fresh root; missing/ambiguous evidence holds.
58
- - `prepareCapturedPiStart(home, { incarnationId, intent, sessionDir, assertAuthority })`:
59
- pending-v2 before exclusive creation; kernel-authority checks around effects;
60
- durable witness outside S before dependent execution; original witness on reuse;
61
- returns the existing native record ID, never a replacement action identity.
62
- - `assertCapturedPiStart(home, id, { incarnationId, intent, sessionDir })`: validate
63
- the execution-side started-v2 receipt, original associations and root identity.
64
-
65
- The record owner's approved `history.json` v2 expected-ID claim is mutable
66
- record custody. For the exact strict Pi profile, Core's authority callback keeps
67
- index/incarnation/lifecycle/home/native-directory/baseline/target checks but does
68
- not duplicate that private codec or freeze its bytes to v1. The pinned read-only
69
- inspection, guarded preparation and started-v2 assertion own that validation.
70
- Re-entering inspection during a pending publication would incorrectly reject the
71
- record owner's own transition. Non-Pi retains literal v1 manifest equality.
72
- This narrow consumer correction was demonstrated by the combined package fixture;
73
- it is not acceptance of a path/self-marker or a weaker record implementation.
74
-
75
- The existing recordNativeStart execution must understand/check v2 before exec;
76
- all downstream guards must be present before the version advertises support.
77
- Until then, this increment refuses ZP1 BEFORE admission/backend effects. It does
78
- not fake a complete runnable path or bypass the separate record source exception.
79
- The API seam is subject to the parent-owned combined code review and coordinated
80
- record implementation; no record lib/bin edits occur in this increment.
81
-
82
- ## Non-authorizing print-completion observation (version 1)
83
-
84
- The dispatch ID marker and native SDK return value answer different questions.
85
- Neither proves that the native process terminated successfully AND produced an
86
- attributable final turn. The small observation increment uses the existing
87
- native ID, original pending/index/started-v2 custody and witnessed S, not another
88
- resolver, admission, identity, transcript parser or observation service.
89
-
90
- Two exclusive 0600 JSON files live in S:
91
-
92
- - `.oats-pi-sdk-<nativeRecordId>.json`: `kind: oats.pi-sdk-outcome`;
93
- - `.oats-pi-process-<nativeRecordId>.json`: `kind: oats.pi-process-outcome`.
94
-
95
- Both have `schemaVersion: 1`, `authority` and `observed`. Authority contains the
96
- original home/sessionDir/incarnation/IntentRef/nativeRecordId/executionBinding,
97
- target/admitted input integrity and expected `{runtime: pi, provider, id,
98
- sdkVersion}` selection. It is attribution, NOT an additional authorization.
99
- The original attempt remains original even when same-ID reconciliation advances
100
- the index counter (PH1). Existing/partial/conflicting receipt files are not
101
- rewritten, adopted or cleaned up. File and directory sync plus custody checks
102
- surround publication. Before ANY content read, and again before every bounded
103
- read, the opened outcome descriptor must match the CURRENT physically named
104
- regular file under original-root proof. An earlier stat can itself come from a
105
- redirected ancestor; a restored root or a post-read exception is not FD authority.
106
- Size/version stability checks remain, with no bytes read to discover a mismatch.
107
- These files are neither root witnesses nor native JSONL;
108
- the record3API, native inventory, S formula, v1 readers and capture parsing are
109
- unchanged. Their presence never establishes root ownership.
110
-
111
- SDK `observed` is `{exitCode, observation}`. `exitCode` is the actual numeric
112
- return from native `runPrintMode`, never a default. The public runtime's
113
- synchronous `setBeforeSessionInvalidate` hook snapshots actual public session
114
- metadata after shutdown handlers and BEFORE native disposal. It copies only
115
- SDK VERSION, SessionManager header/id/file, session.model, and the final native
116
- branch assistant entry's id/provider/model/optional responseModel/stopReason/
117
- timestamp. That entry must agree with the last state message; an earlier
118
- assistant followed by another message is not a final assistant. No prompt,
119
- content/nonce, raw error, profile, credential or request-as-response is copied.
120
- Unavailable observation stays null; it does not prevent native disposal or
121
- manufacture a successful turn. The host publishes only after native print mode
122
- returns and original custody is reverified. Native print output is unchanged.
123
-
124
- Process `observed` is `{exitCode, source: launcher-wait-status}`. The COMMON
125
- captured Pi completion wrapper used by tmux AND Herdr saves the native execution
126
- chain's actual shell `$?`, then invokes the existing host executable's PRIVATE
127
- `--oats-pi-record-exit 1 --home H --native-record UUID --exit-status N` mode under
128
- the ORIGINAL kernel command environment. The native recorder execs the original
129
- host, so this is post-process wait status, not a sidecar's intent or the SDK
130
- return value. Nonzero/signaled shell status is retained literally; no signal
131
- number is guessed. The observer imports/creates no SDK/model/auth services and
132
- cannot change the enclosing shell's saved native status. This private mode is
133
- NOT accepted by the launch recipe grammar. Ordinary/Claude/Codex paths are
134
- unchanged, including explicit permission settings and native defaults.
135
-
136
- Only after guarded process-receipt publication does the observer atomically
137
- publish the EXISTING `.oats-start-exited` with its unchanged dispatch-ID-only
138
- contents. Legacy readers remain correlation-only. If custody or publication is
139
- uncertain, missing evidence is held; there is no success fallback, repair or
140
- new native attempt. A failed process can have a process-only observation; a
141
- successful-looking SDK receipt without process observation is incomplete.
142
-
143
- ### Public read-only query
144
-
145
- ```
146
- oats session inspect --deployment /deployment --resolution <retained-id> \
147
- --home /original/home --native-record <native-UUID> --json
148
- ```
149
-
150
- For a helper, use the SOURCE resolution plus `--helper <exact-source-map-key>`.
151
- There is no current-context lookup. Inspect accepts only home/helper/native-record
152
- and json after the captured selectors; request/retry/model overrides are refused.
153
- It admits/provisions nothing, calls no backend/model, and does not forge process
154
- environment to inspect evidence. Existing source/helper and physical custody
155
- checks plus pinned `assertCapturedPiStart` surround every receipt read and
156
- native session-path check. The narrow query requires the ORIGINAL current
157
- pending dispatch; an old ID after another dispatch replaces pending, a deleted
158
- incarnation, changed curriculum/input or uncertain root remains held. Files in
159
- S remain retained; this is not a new historical-incarnation recovery API.
160
-
161
- The normal JSON envelope's `result.outcome` has `schemaVersion: 1`,
162
- `contract: oats.pi-print-completion`, `nonAuthorizing: true`, `authority`,
163
- `status: succeeded|failed|incomplete`, `qualified`, `processExitCode`,
164
- `sdkExitCode`, `finalObserved`, nullable `sdk`, and evidence-presence flags.
165
- Envelope `ok: true` means the QUERY succeeded, not that execution did.
166
-
167
- `qualified: true` requires BOTH actual exit codes0, the observed selected SDK
168
- version/header-v3/home/session-id/file, observed session and final assistant model
169
- tuples equal to the retained selection, and final `stopReason: stop`. Missing
170
- facts, mismatches, truncation/tool-use/error/aborted or nonzero status never pass.
171
- This qualifies only **native-print completion**, NOT meaningful task completion,
172
- automatic SOURCE helper execution, learning/privacy/capture correctness,
173
- installation or release. A gate must still compare the expected original IDs,
174
- consume protected native capture, and establish its domain-specific result.
175
- Optional native `responseModel` is reported literally, not substituted for a
176
- missing value or treated as cryptographic provider-side model attestation.
177
- Receipts share the existing trusted execution-host/filesystem boundary; they do
178
- not introduce signatures or promise detection of coherent privileged tampering.
179
-
180
- Packaging needs the new `lib/captured-pi-outcome.mjs` alongside the existing
181
- host/custody/SDK modules and bin. Existing lib inclusion already ships it; no
182
- package/version metadata changes are needed.
183
-
184
- ## Evidence and honest results
185
-
186
- Targeted unit tests use explicit SDK doubles to check parser/assembly argument
187
- flow, normal native service initialization, loader and before-delegation guards.
188
- They are NOT another SDK-consumer/model proof. Real retained preparation/scaffold
189
- checks establish missing-record-support refusal before native effects. Existing
190
- inert native regression checks cover unchanged custody/replay/placement behavior.
191
- The previously completed public SDK consumer proof remains separate and closed.
192
-
193
- `dispatchAccepted` proves native dispatch acceptance, not a model response.
194
- The existing `.oats-start-exited` ID marker still does not contain a success code.
195
- The new completion receipts/query are implemented as bounded kernel consumers;
196
- unit doubles and inert shells are not actual SDK/model/backend qualification.
197
- The coupled integration fixture REQUIRES actual complete record-v2 source (no
198
- skip/stub of record support), exercising kernel/record/CLI wiring on both backend
199
- paths with an explicitly FAKE SDK and inert transport. The bounded negative case
200
- uses an existing unwitnessed S and retains legacy CLI refusal, rather than an
201
- obsolete assumption that record support is absent. Neither fixture is actual
202
- native SDK/model/backend qualification.
203
- Real acceptance must observe SDK-created native session/assistant turns and
204
- actual capture/recall under the completed witness guards, on BOTH selected native
205
- backends. Do not fabricate process names, sessions, worker runs or learning.
@@ -1,131 +0,0 @@
1
- # First-cut retained execution: installation and release checklist
2
-
3
- This is an execution checklist for the release owner, **not a completed-release or
4
- runtime-readiness claim**. The first-cut goal is an actual runnable packaged retained
5
- path. A narrowly working profile does not establish full Desktop/plugin/lifecycle or
6
- private-provider parity. Developers deliver code; the parent reviews combined code,
7
- integrates, runs real acceptance and is the sole publisher. No independent-reviewer
8
- wait is required by the current human workflow.
9
-
10
- ## 1. Freeze what is actually being shipped
11
-
12
- - Record exact framework commit/tree, provider commit/manifest and runtime-consumer
13
- revision; retained resolutions, source/helper bindings, protocol selection and
14
- emitted witnesses must agree with that combination. Prior closed source gates are
15
- evidence at their old pins, not qualification of the new SDK host or protocol22.
16
- - Include the explicit print-mode SDK host/parser/native-services assembly only when
17
- its complete retained eligibility/curriculum, kernel-owned task/args/thinking/history
18
- controls and approved external session-directory identity witness are implemented.
19
- Path-only history attribution is not an original-root identity witness.
20
- - Launch the user's already-authenticated harness through its normal native profile,
21
- auth/helpers/OAuth/model configuration. **No auth-file selector, CredentialStore,
22
- key/provider allowlist, empty production store, profile substitution, credential
23
- inspection/copy or new login questionnaire.** Strict selected curriculum/history is
24
- a separate boundary, not a reason to replace native authentication.
25
- - Preserve selected hard runtime/bridge/plugin requirements. If the first supported
26
- host is zero-plugin, a profile selecting an unqualified plugin/bridge remains held;
27
- do not remove that requirement to advertise default-OKF success.
28
- - Record-runtime changes remain limited to the exact additional boundary explicitly
29
- assigned by the parent after resolving its scope. Do not import held patches or
30
- bypass the guard. No general record-package rewrite, bootstrap grammar, role-source
31
- adoption or proposed retirement semantics is part of this checklist.
32
-
33
- ## 2. Metadata and package surfaces (parent-controlled)
34
-
35
- Choose an actual unused release version **V** after the final code/pin selection;
36
- verify it against existing published artifacts. Do not invent a tag or claim that
37
- source/API2/protocol22 alone establishes a package compatibility floor.
38
-
39
- | Surface | Required check/update |
40
- |---|---|
41
- | `package.json`, `package-lock.json` | Kernel version/root lock agree; SDK host's real runtime dependencies/import resolution are declared and available after installation, not accidentally from a development/global checkout. Keep manifest exports usable. |
42
- | `packages/pi/package.json` | Version agrees with kernel; actual supported SDK/native package dependency contract and extension resource paths are truthful. |
43
- | `packages/desktop/package.json`, `packages/desktop/package-lock.json` | All three release manifests and lock root entries use V. This metadata alignment does not mean complete Desktop behavior is qualified. |
44
- | Provider distribution/capability manifests | Selected provider version and minimum OATS floor must include its actual supported wire/input/runtime requirements. Source-main with old metadata is not a released compatibility claim. |
45
- | `scripts/okf-source-inventory.json`, `capabilities/oats-okf/`, `package-catalog.json` | If shipping an updated default provider, use the authoritative provider source and existing mirror/finalization tooling, then verify exact retained closure/canonical aliases and real published refs. Never hand-edit the mirror or point a catalog at an invented tag. |
46
- | `docs/release-notes/<actual-tag>.md` | Exact tag-matching filename exists before build/tag. List implemented profile/actual gates and every remaining refusal; no real-worker/learning or model-health claim from inert output. |
47
-
48
- The existing `.github/workflows/release.yml` and `scripts/release-lane.mjs` derive V
49
- for **root, Pi and Desktop**, using `--allow-same-version`. The older release skill's
50
- blanket two-package/no-same-version description is not the current implementation.
51
- No developer package/version edits are authorized by this checklist alone.
52
-
53
- ## 3. Artifact/install boundary
54
-
55
- Release owner uses the existing release tooling; this lane performs no pack/install/
56
- publish operation. Build from the exact reviewed commit, not moving HEAD.
57
-
58
- 1. Run the applicable syntax/project/package gates on that assembled tree. Confirm
59
- the new SDK host/bin, parser, native adapter and all runtime dependencies are in the
60
- **actual** kernel tarball; Pi bridge resources must also be in its tarball. Verify
61
- no deployment config/lock, agents/instances, credentials, private KB or scratch leaks.
62
- 2. Keep canonical Git payload aliases intact for selected capabilities. npm's omission
63
- of source symlinks does not make its copied provider subtree a self-contained Git
64
- distribution; use the supported complete provider acquisition path.
65
- 3. Pack kernel and Pi bridge once and record hashes. Install those exact tarballs in a
66
- clean external location, outside the source checkout. Confirm installed CLI/core/
67
- SDK-host dependency resolution with no repository-module or unselected resource
68
- fallback. A checkout scaffold is not an installed-artifact test.
69
- 4. Use existing public `prepare --request` with an explicit valid source export,
70
- deployment and workspace-or-standalone context. Approval/reprepare is explicit;
71
- no private scratch input/current-config hole filling. Do not assume the parked five
72
- roles or public bootstrap package have been adopted/published.
73
- 5. Inspect retained instructions/skills/launch inputs and preserve unsupported-profile
74
- refusals. Create only a new owned home; do not overwrite old instances/state. A
75
- source-complete helper is selected by its **SOURCE edge**, not a bare helper-ID
76
- start. No-launch can still run admitted hooks and is not a real session gate.
77
-
78
- ## 4. Parent-run real first-cut acceptance
79
-
80
- Use the already assigned single provider/native path rather than inventing a second
81
- matrix. Pin and retain its real results separately from old inert/seeded evidence.
82
-
83
- - Both tmux and Herdr are required, not a deferred optional backend. For Herdr select
84
- the exact supported protocol and explicit operator-managed executable/socket; the
85
- server snapshot must match it. IDs are observed receipts. No automatic daemon start,
86
- tmux fallback, fabricated caller context or focused user session.
87
- - Run an actual retained primary and exact SOURCE-helper through the new host, using
88
- normal authenticated native harness operation. Verify an actual turn/task result,
89
- selected curriculum and original session-directory identity/history continuity.
90
- Source deletion/current-config poison must not redirect the retained selection.
91
- - Record dispatch acceptance separately from model health, task completion, capture,
92
- judged knowledge delivery, acceptance and fresh-reader learning. With default OKF,
93
- use the provider's explicit private owned directory-store path and required selected
94
- launcher/bridge; do not fake a worker/process/transcript or convert seed data into
95
- learning evidence. If a required bridge is unqualified, report the exact hold.
96
- - Preserve source versus helper execution authority and original incarnation/intent/
97
- pending/history receipts across replay/restart/failure. Same-ID ambiguity never
98
- authorizes redispatch. Missing public retirement/recovery remains a documented hold,
99
- not permission to call a legacy/private fallback or delete an uncertain home.
100
- - Credential/account/private-messaging authority is not granted by backend/model success.
101
- External human/admin private-aweb evidence cannot be manufactured by this gate.
102
-
103
- ## 5. Publication and honest first-cut status
104
-
105
- The existing tag workflow publishes only after build/test/smoke **and Desktop matrix**
106
- jobs are green; npm kernel then Pi, GitHub release/assets last. The existing runnerless
107
- lane can stage exact artifacts and publish its two staged npm tarballs; the parent owns
108
- whether/how to use that documented route. Do not edit away gates to meet a clock.
109
-
110
- Before publication retain exact source/tag ancestry, version probes, package checksums,
111
- provider provenance and completed gate receipts. Verify published versions, package
112
- integrities/source identity and installed behavior afterward. Do not move a tag after
113
- any publication; distinguish partial npm publication, GitHub assets and bump-PR results
114
- before retrying the appropriate existing phase. No force-push or credential repair here.
115
-
116
- If packaging or a required real gate is incomplete at the first-cut deadline, deliver
117
- its exact candidate artifacts plus named hold; label it **candidate**, not published or
118
- usable for the blocked profile. Do not reset the agreed clock or conflate npm readiness
119
- with all-platform Desktop delivery.
120
-
121
- ### Explicit limitations to carry into release notes unless genuinely closed
122
-
123
- - Adapter20/22 unit support is not public caller/schema22 or real-server readiness.
124
- - SDK feasibility/inert dispatch is not an actual normal-auth model turn.
125
- - Zero-plugin success is not eligibility for a selected plugin/bridge/managed profile.
126
- - Directory/history custody is not completed public retirement, wake or recovery.
127
- - Source/provider gates are not actual worker/capture/learning/private-aweb proof.
128
- - A packaged CLI/Pi path is not complete Desktop/platform behavior or rollout parity.
129
-
130
- Every open item retains its existing refusal and owner. This checklist changes no
131
- runtime semantics, metadata, release automation, live state or production authority.
@@ -1,60 +0,0 @@
1
- # Explicit Herdr protocol20/22 adapter compatibility
2
-
3
- The host-local adapter in `lib/herdr.mjs` supports exactly numeric protocols **20**
4
- (documented0.8 baseline) and **22** (documented0.9.0 native schema). This is explicit
5
- selection, not version negotiation or proof of an installed/running backend.
6
-
7
- ## Shared adapter interface
8
-
9
- - `HERDR_PROTOCOL` remains20 for existing legacy/default behavior. In particular,
10
- the unchanged legacy `ensureHerdr` path is not silently switched to22.
11
- - `HERDR_SUPPORTED_PROTOCOLS` is the frozen `[20,22]` set.
12
- - `isSupportedHerdrProtocol(value)` accepts only those numbers; no strings,
13
- omitted/null value, protocol21, future number or range is accepted.
14
- - `herdrSnapshot(target, io)` requires a supported explicit target protocol before
15
- issuing a command, then requires **snapshot.protocol === target.protocol** and a
16
- pane inventory. A20 target cannot accept a22 snapshot, or vice versa. Missing or
17
- malformed observations refuse; saved target metadata is not upgraded/downgraded.
18
- - `allocateHerdr` also validates the selected protocol before workspace creation,
19
- preserving it alongside the actual returned workspace/pane/terminal identifiers.
20
- As before, callers own preflight/admission and the pending/observed-target ledger;
21
- allocation is not a new independent lifecycle transaction.
22
- - `validHerdrTarget` recognizes both explicit protocols with its existing target
23
- checks. Delivered strict workspace/pane/terminal uniqueness, explicit socket
24
- transport, replacement refusal, run/input/stop behavior and server-error handling
25
- are retained. No daemon, focused target or alternate-backend fallback is added.
26
-
27
- The captured caller and generated request/target schema must use the same set and
28
- retain selected/admitted/observed target equality. That integration belongs to the
29
- lifecycle owner (`lib/captured-session-backend.mjs`, core and shared schema generator),
30
- not this adapter-only change. A current const20 caller still correctly refuses22 until
31
- that separate integration lands. API availability is not protocol/host/model readiness.
32
-
33
- ## Documented native0.9 subset
34
-
35
- The bundled protocol22 schema retains `.result.snapshot`, panes/agents and their
36
- workspace/pane/terminal identifiers, `.result.root_pane` allocation identifiers,
37
- agent status values and process-info fields used by the existing adapter. The CLI
38
- spellings remain `api snapshot`, `workspace create --cwd ... --label ... --no-focus`,
39
- `pane run <id> <command>`, `pane process-info --pane <id>` and `pane close <id>`.
40
-
41
- These observations justify reusing the adapter, not treating arbitrary later protocol
42
- numbers as compatible. Client version, server version, endpoint-protocol generation,
43
- OATS API version and native request version remain distinct facts. Explicit existing
44
- operator-managed executable/socket and actual server protocol must be qualified by the
45
- real acceptance gate. No `HERDR_ENV` value is fabricated or focused user session used.
46
-
47
- ## Evidence boundary
48
-
49
- `test/herdr-protocol.test.mjs` uses injected inert command responses, not a live
50
- server or process:20/22 preservation, unknown/missing refusal before commands, exact
51
- snapshot mismatches, actual-ID projection, explicit command/socket transport, strict
52
- ambiguous/foreign/replaced targets and stop/input behavior. Existing adapter tests
53
- remain applicable. The controlled scaffold probe composes resources and normally
54
- retires without invoking a backend.
55
-
56
- This slice does not qualify public native protocol22 integration, real model health,
57
- Pi managed-resource eligibility, worker completion, public retirement/recovery, private
58
- messaging, release floors or production. None of those guards is removed. Ordinary
59
- already-authenticated harness operation remains separate from this backend adapter;
60
- no auth-file selector, credential copy or production profile substitution is introduced.
@@ -1,142 +0,0 @@
1
- # OATS redesign — program board
2
-
3
- **Purpose:** the one accurate view of every work stream in the redesign, what is on main, what is in flight, who owns it, and what blocks it. Lead: `oats-expert` (redesign lead). Updated whenever anything merges, is returned, or reality changes. Older per-lane boards are superseded by this file.
4
-
5
- **Last update:** 2026-09-24 14:10Z · **0.25.0–0.25.7 PUBLISHED** (0.25.7 = v2 deployment root is a configuration boundary) (0.25.6 = decision 27 kernel half + Desktop 10B-0 terminal owner leases, native gate 23/23) (workspace model A–C; team-review fixes; operator-rebuild round; OATS_SOUL_ID; quarantine-retry fix; launch meta + catalog pins) · **OKF v2.1.4 + oats.aweb v1.12.0 TAGGED and pinned** · **decision 27 accepted; K1′/K1″/K2 kernel PR next** · **oats.aweb 1.13.0 (#110) queued** · **Desktop 10B-0 resumed** · Phase D plan next · **Desktop engineer paused by the human** (10B-0 uncommitted foundation preserved; resume is the human's call; 0.24.14 to be cut from a maintenance branch off `e5cdaf95` when its PR lands) · parity pipeline ⏸.
6
-
7
- Legend: ✅ on main/published · 🔄 in flight (PR/branch) · 🟡 preserved, not adopted · ⬜ not started · ⛔ blocked
8
-
9
- ## Streams at a glance
10
-
11
- | # | Stream | State | Owner | Next action |
12
- |---|---|---|---|---|
13
- | S1 | Knowledge capability contract rework (kernel↔provider boundary, OKF 2.x) | ✅ OATS 0.24.1 / OKF 2.1.1 published | P | done for this phase |
14
- | S2 | Workspace/Portable Souls adoption of the OATS repos | ✅ **FIRST SECOND-OPERATOR PUBLICATION (735296c5, 2026-09-21)**: fresh machine, published definition alone, no `launch` → `status: prepared`, resolution `sha256-f11c433c…`, zero problems. ❌ then OKF `check` → `needs-configuration / provider-not-qualified`, **no message/key/origins**, identical for `harvest-runtime` pi and claude — OKF's check phase is code-only and folds ≥4 causes into one code (P, OKF 2.1.3). ⏳ Pi `launch` blocked by kernel ifInstalled defect (L, 0.24.5). Earlier: ✅ knowledge: bound to public `oats-knowledge` via OKF 2.1.2 from a fresh machine, four kernel versions · ✅ messaging normalizes; `wider` deadlock gone; named reasons in one run · ❌ **operator's amended verdict (9816b8ec): no resolution can publish — behind `responsibleHuman`, helper composition refuses because `oats.core` and `oats.aweb` ship `inject` without `helperInjection`** (OKF adopted the contract; its siblings did not). Both remaining blockers are packaging, not operator input. Fix: [decision](https://github.com/awebai/oats/blob/main/agents/oats-expert/soul/knowledge/decisions/helper-injection-policy-on-every-injecting-capability.md) — core `inherit`, aweb `omit`, framework release check, attributed early refusal · then unchanged re-run | lead, Antares | oats.framework 1.1.3 + aweb 1.11.2 + pins; re-run |
15
- | S3 | Messaging capability readiness on the new infrastructure (aweb) | ✅ aweb 1.11.0 released · ✅ **catalog + six editions pin v1.11.0 (0.24.2)** · ✅ **second-operator `launch` re-run on 0.24.6 (Antares, 2026-09-21)**: resolution `sha256-0cbedec4…` published WITH launch selection {pi, model}; helper `oats.okf:memory-harvest` resolved alongside; hard runtime row (`delivery: channel`) refused attributed with capability/slot/runtime/package/install/origin — no bare `needs-configuration`. `check` half parked with OKF 2.1.3 by direction | P, lead | Antares re-run |
16
- | S4 | Official capabilities `oats.core` / `oats.setup` + explicit default + onboarding `oats-setup-expert` | ✅ D1, D2, **D3 merged (PR35)**: `oats onboard` verified live (acquire 1.1.1 → setup expert with both caps → scaffold composes the five capability skills, no legacy) · `oats.framework` 1.1.1 tagged | P, L | done; Desktop surfaces → S8 |
17
- | S5 | Official marketplace = reviewed list in oats repo | ✅ D4 merged · ✅ `oats.framework` 1.1.1 listed (`oats.core`, `oats.setup`, `oats.knowledge-theory` aliases) | M | Desktop view → S8 |
18
- | S6 | Five expert souls created in the oats repo (`souls/<name>/`) | ✅ five + `oats-setup-expert` on main, all declaring `oats.core`, exported + imported | M, L, lead | legacy `agents/` cutover after S7 proof |
19
- | S7 | Centralised per-soul knowledge in `oats-knowledge` (migration + PR-only learning) | ✅ **MIGRATED — PR #2 merged → main `7148a36`, 58 concepts / 35k words from 399 legacy** (kernel 26, expert 18, desktop 13, assistant 1, market-research chartered empty); option A roster; theory + no-code-teaching rule; two workflow passes (24 agents) + lead review; validator 58/0/0; ownership 14/14 · ⏸ harvest OFF until new souls run from the base (human) | lead | next: legacy `agents/` decommission with the `~/OATS` cutover |
20
- | S8 | Desktop parity with the redesign (Redesign v3, aweb palette, discovery-first control panel) | 🔄 **STARTED 2026-09-22**: existing `oats-desktop-engineer-1` retrofitted with an aweb identity (spawn hook replayed, `capabilityMeta` persisted, session reloaded); redesign artefacts copied into its home; brief sent (f16eed3f): merge main (0.24.5) first, then PR slices — shell/palette/sidebar → right panel follows selection → Souls view → **Capabilities view incl. official catalog (human's required feature; server-side via kernel catalog API, never auto-acquire/auto-trust)** → Knowledge/Tasks adapters → remainder. Lead reviews/merges each slice. **Decisions 2026-09-22:** human's later palette/row instructions supersede the HTML where they conflict; grouping is agent-group (cross-repo clusters), not repo; kernel seam `oats catalog --json` merged (PR46 `524180b7`, ships 0.24.6); the Juan-host fresh-engineer plan is superseded — this instance owns S8. | oats-desktop-engineer-1, lead | per-slice PRs | ✅ **Slice 2b MERGED** (PR65; Connections + PR card; 1654/1654) · ✅ **K5+K6 MERGED** (PR63; readiness quartet/signatures/enforced child policy; spawn --preview/--base/@native-default) · ✅ **K7+K8 MERGED** (PR64; typed instance events; schedule recentRuns) · ✅ **K3 MERGED** (PR62; `instance stop --plan|--apply`, `retire --plan`, retention-by-default retire with re-home) · ✅ baseline flakes fixed (PR61) · ✅ **P1 decided + K1 `remote` MERGED** (PR60) · ✅ **Components (frame 10, existing data) MERGED** (PR59; 1606/1606) · ✅ **Slice 2a MERGED** (PR57; Git panel on K1; legacy gitState collector removed) · ✅ **v0.24.7 tagged/published** (tag → `c923d81b`) · ✅ **Slice 3 MERGED** (PR54; Souls + Sources on K4 soulsApi 1; 1503/1503) · ✅ **K1 MERGED** (PR53; `oats instance git|diff`, instanceGitApi 1; DTO in docs/desktop-cli-api.md) · ✅ **K4 MERGED** (PR52; `inspect --json` soulsApi 1: declarations/provenance/readiness/sources; onboard records provenance; DTO in docs/desktop-cli-api.md) · ✅ **Slice 7a MERGED** (PR51; frame 07 Active overview on /api/panel; anonymous groups; 1466/1466) · ✅ **Slice 6a MERGED** (PR50; Spawn modal frame 02 on existing seams; launchConfig restored; 1435/1435) · ✅ **Slice 4 MERGED** (PR49; Capabilities view: official catalog via `oats catalog` + classic inventory; 1386/1386; server boundary reviewed) · ✅ **Slice 1b MERGED** (PR48; contextual panel + focus mode; 1238/1238) · ✅ **Slice 1a MERGED `508c4b5f`** (PR45; 273/273 real jsdom; gates green) → v0.24.6. **Plan + seams recorded: [`docs/design/2026-09-22-desktop-parity-seams.md`](2026-09-22-desktop-parity-seams.md)** — slices 1a–8, seams K1–K8/P1, five policy decisions **DECIDED 2026-09-22 under delegation** — see `decisions/desktop-parity-lifecycle-and-policy-decisions.md`.
21
-
22
- ## S1 — Knowledge capability contract rework
23
- - ✅ Provider-neutral contract, binding wire v1, helper/input contract, retained execution: OATS 0.24.0 + OKF 2.1.0 (f20f8e57) published.
24
- - ✅ **oats-okf PR4 merged (9f90ee9) → OKF v2.1.1 (01b48dfc)**: Claude/Codex helpers with complete approved closure accepted; strict-Pi unchanged. Framework mirror/inventory finalized, catalog ref and `souls/oats-expert` source → v2.1.1 (16c5c939, 87292f40).
25
- - Open: strict-Pi "enriched profile" remains unqualified (documented, not hidden).
26
-
27
- ## S2 — Workspace adoption of the OATS repos
28
- - ✅ **PR23 merged f6d5a89b**: `oats-workspace.yaml` (7 members, `imports: []`), `oats.yaml` (exports souls/oats-expert, oats-package, capabilities/oats-authoring), transitional `souls/oats-expert/` edition, the workspace adoption guide (removed in 0.26.0), layout tests.
29
- - ✅ **PR24 merged da38e5a9**: deletion of `skills/oats-portable-setup` + `oats inspect --request` read-only seam (ACCEPTED as the public inspection route); full gate 1621/0.
30
- - ✅ Member `oats.yaml` merged to main: oats-okf #3 (fec78a20), oats-aweb #1 (069ea2f6), oats-authoring #1 (54183a6a), oats-jira #1 (2f855daf).
31
- - ✅ oats-dev#1 (main 6e164ee3) and oats-linear#1 (main a2121e48) merged after Juan granted write access — M's exact commits 0434f4ef / 8c183c37.
32
- - ⬜ `imports:` pin of `souls/oats-expert` at its published revision (after member indexes).
33
- - ⬜ Fresh local deployment from the shared definition (P1.5) — the real acceptance gate.
34
-
35
- ## S2 — second-operator gate report (Antares, Juan's machine, 2026-09-20)
36
- Fresh dir, local `@awebai/oats@0.24.1`, no prior state. `inspect --request` → ready-for-preparation, membership eligible, source `souls/oats-kernel-expert@caa341f3`. `prepare` resolved and materialized `oats-package@caa341f3`, `oats.okf@v2.1.1`, `oats.aweb@v1.10.3`, `oats.core`, `oats.setup`, `oats.knowledge-theory` + soul; artifact-set approvals worked. Terminal: `needs-configuration` + `provider-not-qualified` (aweb 1.10.3 has no binding interface) — expected. Seams — **all fixed in PR36 (913c4f9e), shipped in 0.24.3**:
37
- 1. `inspect --request` requires `workTarget`; `prepare --request` refuses it (`buildFreshPreparationRequest` exists but the CLI never uses it).
38
- 2. `prepare` on the absent deployment inspect blessed → raw `ENOENT` + host path through the JSON envelope.
39
- 3. `prepare` writes lock v3; `oats trust <cap> --dir` rejects it (`unsupported lockfileVersion 3`) → dead end from `--help`.
40
- 4. The working `trust --deployment --artifact-set <sha256>` route is absent from `--help`.
41
- 5. Problems carry `origins: []` and no slot/capability, so with more than one unresolved slot the operator cannot tell which slot a `needs-configuration` refers to (Antares needed three runs and an ablation table). **Root cause of the original identical pair (L's trace, confirmed by P and by Antares' settings-aware run):** both OKF `normalize` calls refused because the request had no OKF runtime settings (`bindings-file`, `state-dir`); the identical pair is correct output for that input. With settings, OKF normalize diagnostics DO reach the operator (a malformed `acceptedBranch` yields a distinct `invalid-binding`); a structurally valid locator to a nonexistent repo is correctly not distinguished until OKF `check`. Fix (0.24.3, PR36) = attribution by slot/capability/phase/origins + kernel-fixed messages. Precision: the kernel names the missing item only where it knows it (missing binding interface: id/version/slot); for a provider `needs-configuration` it cannot name `bindings-file`/`state-dir` because OKF 2.1.1's wire is code-only — OKF 2.1.2 (assigned to P) adds the fixed safe message naming the setting. Antares' earlier "no signal at all" framing is withdrawn by its author.
42
-
43
- ## S2 — second-operator re-run on 0.24.2 (Antares, Juan's machine, 2026-09-21)
44
- - Found the five expert imports still pinned at `caa341f3` (aweb 1.10.3) while the setup expert was at `0aad753c` — the one repinned soul was the one that never exercises aweb. Fixed: all six imports at v0.24.3 `3156e4de` (638206b9); new layout guard fails when a pin's provider requirements lag the current edition (3ce40aaa, verified to catch the miss).
45
- - **aweb 1.11.0 qualifies**: via the direct source route on current main, `provider-not-qualified` disappeared → `approval-required` → after approval both slots on the settings hold. Confirms L's root cause.
46
- - `oats onboard --workspace git:github.com/awebai/oats` from a fresh dir: clean (acquired 1.1.1, both caps, spawn printed not run); scaffold composed exactly the five capability skills, both trusted, no hooks.
47
- - Seams 1–5 reproduced identically on 0.24.2 (baseline); fixed in 0.24.3. Gate decisions given: `harvest-model` arbitrary for the gate; aweb slot `delivery: session` without a private-team binding → expected typed `needs-configuration` naming the binding (Juan's team identity is never guessed).
48
-
49
- ## S2 — settings-aware run (Antares, direct source route on main, aweb 1.11.0, 2026-09-21)
50
- - With `bindings-file`/`state-dir`/`harvest-runtime: pi` and the public `oats-knowledge` bound as base `oats`: **the knowledge slot binds** (OKF problem gone). `harvest-model` is optional per manifest; aweb 1.11.0 declares exactly one setting (`delivery`).
51
- - **aweb 1.11.0 is the only remaining hold** (`needs-configuration`, identical for `delivery: session` and `channel` on 0.24.2's unattributed output). No resolution publishes → OKF `check` probe not reachable yet. 0.24.3 run will show the attributed aweb message (expected: private-team binding / Pi session-input).
52
-
53
- ## 0.24.5 — four small fixes, lead-implemented (2026-09-22, PR43 → `38b6c028`)
54
-
55
- Human authorised lead implementation after new spawns in the development deployment were blocked by a correct `pi-profile` drift refusal (profile pins bridge 0.23.2; global Pi has 0.24.0 — deployment policy, the human's re-pin). Merged: (1) retire recovery derives the branch from the worktree (drift recorded in `recovery.json`; detached HEAD recovers at its OID) — unblocks the three peers; (2) captured launch: `ifInstalled` rows satisfied by absence, hard rows refuse attributed (slot/capability/runtime/package/manifest `install`); (3) helper-injection refusal attributed; (4) `onboard --workspace` reads `package-catalog.json` from the workspace revision (bundled = fallback; `OATS_PACKAGE_CATALOG` = override; result `catalog.origin`; drift refusal names the lag). Full gate 1665/1661/0/4. Rule: `prepare` never ends in a bare `needs-configuration` after selection. Lesson: `lessons/pinned-release-lags-installed-release.md` (three lag refusals in one day). ✅ **v0.24.5 PUBLISHED** (npm both, GH release 7 assets, bump #44). ✅ **`~/OATS` re-onboarded clean on 0.24.5 with NO override**: `catalog.origin: workspace`, framework 1.1.3, setup expert from `7416d84e` — fix 4 proven the way a second operator meets it. ✅ **Three stuck peers retired by the normal path** (fix 1 proven live): each recovery records `branchDrift` (recorded vs worktree branch) and preserved home + untracked bytes + nested repos; L's recovery shows it had begun the 0.24.5 assignment on its own branch (superseded by PR43, preserved). Roster: only the lead and the Desktop engineer remain in the development deployment. Next: spawn the setup expert in `~/OATS` (human runs).
56
-
57
- ## Cutover started: `~/OATS` onboarded from the public workspace (lead, 2026-09-21 23:55Z)
58
-
59
- Kernel 0.24.4 installed globally; `oats onboard --dir ~/OATS --workspace git:github.com/awebai/oats` → `oats.framework` 1.1.3 acquired and exact-locked (lock v2), `oats.core` + `oats.setup` selected, `oats-setup-expert` copied from the workspace's pinned edition (`7416d84e`, workspace revision `c82a96af`), layers `none`. First attempt refused `integrity-drift` because the kernel's **bundled catalog snapshot** still listed framework 1.1.1 — correct refusal, misleading read; remedy `OATS_PACKAGE_CATALOG=<main's list>`; lesson `lessons/bundled-catalog-lags-the-reviewed-list.md` (proposes onboarding read the catalog from the workspace revision). Next: spawn the setup expert to adopt the workspace (knowledge → public `oats-knowledge` via OKF 2.1.2; messaging → aweb 1.11.2 or none) with explicit approvals; then the five expert souls run from the central base and this checkout becomes secondary. Harvest stays off until then.
60
-
61
- ## S2 — FIRST SECOND-OPERATOR PUBLICATION + `check` finding (Antares, 735296c5, 2026-09-21)
62
-
63
- Verified wave (aweb v1.11.2, framework v1.1.3, main cd3d4913, imports 7416d84e). Fresh deployment, unchanged request minus `launch`, synthetic `responsibleHuman`, `wider: []` → `{"status":"prepared","resolution":{"id":"sha256-f11c433c…"},"executionBinding":{…},"problems":[]}`, exit 0, empty stderr. **An operator holding none of the authoring state produced an executable resolution from the published workspace definition — the first.** Helper-injection fix confirmed from outside; `ignored` shrank to `["operator"]` correctly.
64
-
65
- Then P's OKF `check` probe against the published resolution (contacted the public repository): `{"status":"needs-configuration","problems":[{"code":"provider-not-qualified"}]}` — bare; the operator dumped the shape to prove nothing was elided. Second resolution with `harvest-runtime: claude`, no model (`sha256-1aa5ab9a…`, prepared) → identical. Traced by lead: OKF 2.1.2 `checkPhase` (`binding-wire.mjs` L256–282) returns `problem(code)` only and maps unadmitted action / >64 bases / `E_OWNER|E_BASE|E_VALIDATION|E_DIRECTORY_GIT|E_CONFIRM` all to `provider-not-qualified`; the kernel's check path already passes declared reasons. Fifth of the family. Operator's verdict adopted: *"A second operator reaches, resolves, approves and publishes an executable resolution from the public definition alone … The OKF check readiness probe then refuses as provider-not-qualified with no reason, no key and no origins, and the refusal is independent of the harvest runtime."* Decision amended: every check problem carries a fixed reason distinct per cause. **Assigned P: OKF 2.1.3** — ahead of 0.24.5 by the operator's priority, which the lead accepts (publication works; check is the next thing every operator hits). **Operator narrowed the cause from outside (9c9dc404), each elimination tested:** not action kind, not base count, not `validateBase` (validator from the 2.1.2 artifact against the public `knowledge/`: 25 concepts, 0/0), not directory-git, not runtime; staging IS reached (nonexistent repo → `unavailable/provider-unavailable` in 0.65s; real → `needs-configuration/provider-not-qualified` in 1.66s). Left: `verifyPublicationTree` (E_CONFIRM/E_BASE) or `checkKnowledgeRuntime` (E_OWNER; not a naive owner mismatch — public base owner = edition owner). Forwarded to P so 2.1.3 reasons split exactly these. Sharp edge noted: the validator at the repository root fails on bundle-root-absolute links — a wrong root will look like an invalid base. **Acceptance plan corrected by the operator (bbbb6bdd):** the two retained resolutions captured and approved the exact 2.1.2 artifact and `runCapturedProviderBinding` executes exactly that, so re-probing them must still return code-only — that is immutability working. After 2.1.3 is pinned: keep the old resolutions as before-evidence, prepare NEW resolutions from the same two request shapes with only the OKF source moved to v2.1.3, approve their exact artifact sets, run the same probe → valid before/after.
66
-
67
- ## Helper-injection gap FIXED + next blocker found (lead, 2026-09-21 20:30Z)
68
-
69
- - ✅ **oats.framework 1.1.3** (`oats-framework/v1.1.3` @ `6108bfbb`): `oats.core` 1.0.1 declares `helperInjection: inherit`. ✅ **aweb 1.11.2** (`v1.11.2` @ `a671884`): `helperInjection: omit`, manifest-only. Bundled copy byte-synced; catalog `oats.aweb` → v1.11.2, `oats.framework` → v1.1.3; six editions → aweb v1.11.2; six imports → `7416d84e`. Release check added: every injecting framework capability declares its helper policy (jira/linear/review pending upstream, not required by any edition). Notes: `docs/release-notes/oats-framework-v1.1.3.md`.
70
- - **Lead probe from the published 0.24.4 tarball, operator's request shape + synthetic `responsibleHuman` + `wider: []`:** helper composition now passes. **Without a `launch` block the resolution PUBLISHES** (`status: prepared`, resolution + execution binding) — first end-to-end publication from public definitions. **With the Pi `launch` block it refuses** on a bare `needs-configuration: runtime package requirements need retained runtime roots and a qualified loader`: kernel defect — the captured path treats aweb's `ifInstalled: true` Pi floor (`npm:@awebai/pi ≥0.3.10`, only if present) as a hard block, and refuses with no `details`. `delivery: channel` gives the byte-identical message. Lesson: `lessons/captured-launch-ignores-ifinstalled-and-refuses-bare.md`. **Assigned to L with the retirement defect → 0.24.5 (kernel), plus attribution for both bare refusals.** Operator's re-run: after 0.24.5, or now without `launch` to witness publication.
71
-
72
- ## S2 — operator's self-correction (9816b8ec, 2026-09-21): packaging gap behind `responsibleHuman`
73
-
74
- The operator supplied a deliberately synthetic `responsibleHuman` (`gate-probe-not-a-real-human`; accepted — `humanRef` checks only provider + non-empty id, i.e. an accountability claim the code records but does not verify) and preparation refused: `needs-configuration: new helper injection requires an explicit capability policy` (`lib/helper-injection-policy.mjs:38`), a bare top-level error with no `details`/attribution. Cause verified from the published manifests: `oats.okf` declares `helperInjection {omit}`; **`oats.core` (`injects/oats.md`) and `oats.aweb` (`injects/aweb.md`) declare none**. Every edition declares `oats.core`, so no edition could publish once its OKF harvest helper composed. Fourth finding of the same family (contract adopted by one provider, not its siblings). Operator's restated verdict adopted verbatim: *"A second operator reaches, resolves and approves the entire graph from the public definition, binds knowledge to the public `oats-knowledge` base, and normalizes messaging. Preparation cannot publish a resolution … Both remaining blockers are packaging, not operator input."* The earlier "EXIT GATE MET" entry below is superseded by this one.
75
-
76
- ## Kernel defect found at peer retirement (2026-09-21) — 0.25 lifecycle item
77
-
78
- `oats retire oats-expert-scheduler-peer` (self and spawner retry) fails closed: *recovered Git index/status disagreed with the source*. Cause: `preserveRetirementWork` clones the branch recorded in `instance.json` (`feat/portable-scheduler-captures`, tip e0c3232c) while the worktree is checked out on `docs/okf-host-runtime-settings` (5919a547); the status comparison cannot agree. Verified by hand: worktree clean, both branches pushed, every deliverable merged (oats PR39, oats-okf PR5, oats-aweb PR4); the only dirt is two untracked files in a nested scratch clone that are already on aweb main since 1.11.0. **Nothing unpreserved.** Instance left `RETIRING`; no branch/metadata/force surgery. Fix scoped to **0.25 (L)**: derive the recovery branch from the worktree, record drift as a typed observation. Lesson: `lessons/retire-recovery-uses-recorded-branch-not-checked-out-branch.md`.
79
-
80
- ## S2 — acceptance run on the 0.24.4 wave (Antares, Juan's machine, 2026-09-21) — superseded by the self-correction above (knowledge result stands)
81
-
82
- Fresh directory and deployment, `@awebai/oats@0.24.4`, policy sources v2.1.2 / v1.11.1, `wider: []`, request otherwise unchanged from the 0.24.3 run; wave verified independently first (npm, both provider tags, main `86b5f924`, six imports @ `08c68ece`).
83
-
84
- - inspect: exit 0, `ignored: ["operator","launch"]`, six imports @ `08c68ece`, `ready-for-preparation` — **seam 1 closed**.
85
- - prepare → two `approval-required` → approved via the printed `--artifact-set` commands → prepare: **knowledge binds with `wider: []` present (deadlock fixed)**; the single remaining problem is `{code: needs-configuration, slot: messaging, key: /bindings/messaging/responsibleHuman}`.
86
- - `bindings-file` removed → `setting bindings-file is required (absolute host path)` in one run — the named-reason criterion ("one run instead of six") met. `wider` removed → both messaging keys attributed separately.
87
- - Operator's observation, adopted: `required value has no concrete binding` is generic text but the `key` carries the address; sufficient — no more spend on the string.
88
- - **Operator's verdict (verbatim):** *"An outside operator on a fresh machine, holding none of the authoring state, now reaches a single, fully-named, legitimately-operator-owned requirement: `/bindings/messaging/responsibleHuman`. Everything else — source discovery, workspace membership, artifact resolution, exact approval, knowledge binding to the public `oats-knowledge` base through OKF 2.1.2, messaging normalize — resolves from the published definitions alone. That is the S2 exit gate met … not 'it works', but 'every remaining item is named and belongs to the operator'."*
89
- - Coda: the operator has put `responsibleHuman` to Juan as a real decision; if supplied, R publishes and the OKF `check` probe runs (typed status/problems only). If declined, that is a legitimate end state and is recorded as such.
90
- - Four acceptance trees retained on the operator's side (0.24.1–0.24.4) — every later check is a repeat, not a rebuild.
91
-
92
- ## S2 — 0.24.3 gate run (Antares, Juan's machine, 2026-09-21) — verdict
93
- - Seams 1, 3, 4 **fixed**; seam 2 fixed as typed (message does not echo the path — deliberate, consistent with no host diagnostics; expectation corrected); seam 5 **half**: attribution (slot/capability/full origins) fixed; naming the missing item only where the kernel knows it. The specificity half is provider-side: OKF 2.1.2 (assigned) and an aweb follow-up.
94
- - Six imports resolve at the repinned revision; workspace route selects aweb 1.11.0; **the knowledge slot fully resolves through the workspace route** with `bindings-file`/`state-dir`/`harvest-runtime` (`harvest-model` confirmed optional).
95
- - **Messaging was a SOURCE defect, not an operator gap**: aweb 1.11.0 normalize requires the workspace to declare `teams: {private: per-human}` and the soul a messaging declaration; neither was published, so the slot was unreachable by any input. Fixed on main **906b1558** (workspace policy + `teams: []` on the five messaging editions; verified against aweb v1.11.0 normalize) and imports repinned **f3ee31e0**. Remaining operator inputs after the fix: `responsibleHuman` (required) and `wider` (required, may be empty) — the private team is a later `check` outcome.
96
- - **S2 exit-gate verdict (amended per the operator):** knowledge — an outside operator on 0.24.3 discovers, resolves, approves and binds from public sources, remaining item attributed: **PASS**. Messaging — on 0.24.3 as published the operator hit a source defect wearing a configuration error; fixed on main 906b1558 and to be re-proven on the repinned imports before it is written as PASS.
97
- - **Re-run on 906b1558 (operator, b875669f):** messaging normalize passes; remaining problem is `responsibleHuman`, attributed. But end-to-end is **deadlocked**: `wider: []` (messaging requires) makes OKF 2.1.1 return `invalid-binding` on knowledge (it validates every `operator.bindings` key as a store locator); without it messaging needs `wider`. Operator's wording adopted for S2: *a second operator reaches a published, resolvable configuration boundary for knowledge; messaging is blocked by a kernel-level binding-namespace collision, not by operator input or identity.* Not Juan's to unblock; no identity requested. [Decision](https://github.com/awebai/oats/blob/main/agents/oats-expert/soul/knowledge/decisions/operator-bindings-ownership.md): flat map with declared ownership (`binding.keys`); providers ignore foreign keys (OKF 2.1.2, aweb 1.11.1); kernel attributes/refuses stray keys by name — **deferred to 0.25 by L's scope call (accepted): overlap refusal, filtered forwarding, owned/unowned attribution and the undeclared-provider path need their own regression matrix; the provider ignore rule is the floor and ships in 0.24.4's provider releases.**
98
- - ✅ **Provider wave published (2026-09-21 17:00Z):** OKF **2.1.2** (oats-okf PR5 → `f02a0d9a`, tag v2.1.2: named-setting reasons, source-owned operator bindings, `binding.reasons`, floor >=0.24.4), aweb **1.11.1** (oats-aweb PR4 → `d404da76`, tag v1.11.1: manifest-only reasons + keys, floor >=0.24.4), **oats.framework 1.1.2** (`oats-framework/v1.1.2` @ `6f98c7c9`), OKF mirror finalized + bundled aweb byte-synced (`08c68ece`), catalog refs, six editions repinned, six imports → `08c68ece`. **Lead's end-to-end probe from the published 0.24.4 tarball via the workspace route, Antares' exact request shape with `wider: []`:** inspect accepts the complete file (`ignored: [operator, launch]`), six imports resolve, both providers approve via the printed `trust` commands, **knowledge binds and messaging normalizes — the deadlock is gone**; the single remaining problem is `key: /bindings/messaging/responsibleHuman` (the operator's own decision). Named reasons cross in one run: `setting bindings-file is required (absolute host path)`; dropping `wider` yields both messaging keys attributed. Awaiting the independent operator's unchanged re-run to write it as PASS. **Seam 1 independently confirmed closed by the operator on 0.24.4** (same file that failed on 0.24.3 → exit 0, `ignored: [operator, launch]`).
99
- - ✅ **PR41 merged `ef211d3e`** (L): inspect accepts prepare's superset (`ignored`), provider reasons cross the wire by exact match (manifest `binding.reasons` / bundled lists), `binding.keys` shape-only, CLI renders `key`. Full gate 1657/1653/0/4 twice (L + maintainer). → ✅ **v0.24.4 PUBLISHED** (npm both packages, GH release 7 assets, tarball probe: installed validator accepts `binding.reasons`/`keys`, `inspect --request` accepts `operator`/`launch`), kernel-first; OKF 2.1.2 / aweb 1.11.1 floor `>=0.24.4` (closed validator on ≤0.24.3 rejects the fields — P's finding).
100
- - Two further kernel findings from the repeat (assigned to L, 0.24.4): (a) seam 1 converged one way only — `inspect --request` still refuses prepare's `operator`/`launch`; (b) **the kernel discards the adapter's reason** at the wire (`provider-binding-wire.mjs:23`) and templates it; aweb already sends whitelisted safe reasons. New [decision](https://github.com/awebai/oats/blob/main/agents/oats-expert/soul/knowledge/decisions/provider-problem-reasons-cross-the-wire.md): whitelisted fixed reasons cross the wire (`binding.reasons`), free text still refused.
101
-
102
- ## S3 — Messaging (aweb) on the new infrastructure
103
- - ✅ **aweb PR3 merged → v1.11.0 (93f8ab96)**: `binding {normalize,bind,check}` on the existing wire; `check` = HOME-route operational custody only (explicit private team, `delivery: session`, kernel ≥0.24.2 via caller-owned `OATS_CLI_BIN`, retained `launchSelection` must be input-capable Claude/Codex; strict-Pi print → `needs-configuration`, never downgraded). Native adapter over existing `aw` commands with physical identity-dir custody and redacted tokens. Standalone 30/0; coupling 14/0 vs kernel b92f0d07. PR33 (launchSelection projection, OATS_CLI_BIN in codec env) merged b92f0d07.
104
- - Facts: released aweb 1.10.3 has no binding interface; broker refuses. aw 1.36.1 broker calls `oats session inspect/input --home H`; never restarts stopped runtime; strict-Pi print mode can't take session input.
105
- - 🔄 oats-aweb **PR2** codec (165b20e) + uncommitted `lib/captured-execution.mjs` (6/6).
106
- - ✅ Lead answered (d9d912a4): pilot primary = Pi strict print host explicit model; helper = Pi sole-OKF (Claude/Codex allowed by 2.1.1); authority = existing HOME route + L's custody fix, gated on `oats >=0.24.1`; no new grant mechanism. P delivers aweb 1.11.0 PR.
107
- - ✅ **PR27 merged (5af848fc)**: HOME-only session route applies existing captured custody; refuses before transport on drift. Full gate 1626/1632 (2 pre-existing env failures reproduced on main). Ships in **v0.24.1** — the kernel floor the aweb adapter gates on.
108
-
109
- ## S4 — `oats.core` / `oats.setup` / onboarding
110
- - ✅ **D3 merged PR35 (37c5c012)**: `oats onboard` classic local bootstrap; edition `souls/oats-setup-expert` (core+setup, provider defaults `none`, no knowledge owner). Full gate 1639/0. Live: onboard → acquire `oats.framework` 1.1.1 @0aad753c → soul declares both caps at that commit → scaffold-only spawn composes exactly `oats-operate, oats-souls, oats-config, oats-packages, oats-workspace-setup` + the `oats.core` injection, no legacy kernel skills. Baseline hygiene fixed on main (a96f24df).
111
- - ✅ **D1 merged PR28 (70b10822)**, distribution tag `oats-framework/v1.1.0` on 9930dcfb; **D2 merged PR29 (9930dcfb)** full gate 1634/0. Verified live: `oats create` writes `requires.capabilities.oats.core` with the catalog source; `oats install oats.framework` acquires all three capabilities from the tag.
112
- - ✅ Decision + plan D1–D4 on main 18af53be; docs reference as accepted-not-shipped.
113
- - 🔄 **D1** (P, started 16:29Z; package identity confirmed: rename distribution package to `oats.framework` 1.1.0, capabilities 1.0.0, `oats.knowledge-theory` unchanged) package `oats.core` (`oats-operate`, `oats-souls`, oats.md injection) and `oats.setup` (oats-config, oats-packages, adoption guidance) under `oats-package/capabilities/`. Owner P.
114
- - 🔄 **D2** (L, after custody fix) soul creation writes explicit `requires.capabilities.oats.core`; kernel skill list de-ambiented (one-release coexistence); checked-in souls updated. Owner L.
115
- - 🔄 **D3** (L, in progress) onboarding creates `oats-setup-expert` (edition in `souls/`); CLI verb **`oats onboard`** — `oats setup` is already the record capture-setup command and stays untouched.
116
- - Exit: fresh onboarding → running setup expert; created soul shows `oats.core`; kernel ships no ambient operational skill.
117
-
118
- ## S5 — Official marketplace
119
- - ✅ Mechanism exists (`package-catalog.json`, `officialPackageCatalog()`); decision names it the official list.
120
- - ✅ **D4 merged PR26 (786490ae)**: the official list policy (now `docs/official-catalog.md`), `package-catalog.json` policy pointer (inert to the reader), README/packages/capabilities links, D3 sketch in adoption guide. ⬜ entries for `oats.core`/`oats.setup` at D1 release. Desktop view → S8.
121
-
122
- ## S6 — Five expert souls in the oats repo
123
- - ✅ **PR30 merged (40a579dc)** + maintainer follow-up **caa341f3**: all five declare `oats.core: {source: repo:oats-package}`, oats.okf@v2.1.1; `oats.yaml` exports all five; `oats-workspace.yaml` imports all five at caa341f3 (375b9f42). Live inspection against published main resolves them.
124
- - Roster (decided): `oats-expert`, `oats-kernel-expert`, `oats-desktop-expert`, `market-research-expert`, `oats-assistant`.
125
- - 🟡 Candidate: `expert-roster` worktree (b5e233b9 + 519 uncommitted changes: five `agents/<name>/soul/` + legacy roster deletions). Reviewed earlier; NOT committed.
126
- - ✅ `souls/oats-expert` transitional edition on main already declares owns/reads for the five nodes.
127
- - 🔄 Assigned to M (17:05Z): create `souls/<name>/` editions for the other four from the candidate; each declares `oats.core` explicitly (S4 rule) + `oats.okf`/`oats.aweb` sources; export in `oats.yaml`. Legacy `agents/` roster retirement is a separate, later cutover.
128
-
129
- ## S7 — Centralised knowledge in `oats-knowledge`
130
- - ✅ Juan made the repo PUBLIC (2026-09-20). Bootstrap history pushed to main; **PR #1 merged (8d67eab4)**: 25 curated concepts, roadmap re-verified to the 0.24.1 baseline and 2026-09-20 decisions, validator pinned to OKF v2.1.1, strict OKF 25/0/0, ownership tests 24/24.
131
- - 🟡 Curated corpus: 35 concepts (five nodes) on local `curation/expert-knowledge` in `/Users/pepe-reyero/OATS-workspace/oats-knowledge`, **uncommitted**. Bootstrap + one PR-only harvest already proven on `josep-reyero/oats-knowledge` (3 commits).
132
- - ⛔ Target `awebai/oats-knowledge` is EMPTY and PRIVATE; **visibility undecided** (stated requirement: public). Human decision needed before publishing.
133
- - ⬜ Then: push bootstrap + curation as PR to awebai; bind `stores.oats` in the pilot deployment; prove fresh-reader + Git-PR learning with the new souls; retire old in-soul knowledge (`agents/*/soul/knowledge`) as a final cutover.
134
-
135
- ## S8 — Desktop parity
136
- - Finding (L, D2 audit): the Desktop server has **no soul-creation endpoint** today (roster reads, existing-soul edits/capability operations, instance spawn only). Soul creation with explicit `oats.core`, the marketplace view and the onboarding flow are new Desktop features, not wiring.
137
- - ⬜ After S4/S5: official marketplace view/search; soul creation showing `oats.core`; onboarding flow; redesign parity vs `Oats UX Redesign and Desktop Discovery (1)`.
138
- - ⛔ Fresh `oats-desktop-engineer` not spawned: `claude` not on PATH → choose Pi/Codex or install (human).
139
-
140
- ## Blockers needing the human
141
- - ~~oats-knowledge visibility~~ → PUBLIC (Juan). ~~oats-dev/oats-linear access~~ → granted, indexes merged. ~~Desktop runtime~~ → Juan's machine hosts the Desktop lane (has `claude`).
142
- - None open at 23:10Z. Juan's side (Antares) takes: (a) fresh-deployment gate P1.5, (c) fresh-reader proof, (b) Desktop host after D3.