@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,282 +0,0 @@
1
- # Fresh operator walkthrough: working preparation versus pending launch
2
-
3
- > **Superseded (2026-09-23).** The acceptance driver and helper this walkthrough runs (`test/portable-onboarding-public.acceptance.mjs`, `test/helpers/portable-onboarding-consumer.mjs`) were deleted with the workspace model v2; the 0.25 operator path is `oats onboard` → `oats sync` → `oats spawn` (`docs/first-team.md`). Read [2026-09-23-simplified-workspace-model.md](2026-09-23-simplified-workspace-model.md) (worked example) and [2026-09-23-workspace-module-contracts.md](2026-09-23-workspace-module-contracts.md) (normative) instead; kept as history.
4
-
5
- ## Scope of this evidence
6
-
7
- This is a **source-level integration walkthrough**, not a claim about an installed
8
- release. The onboarding builder/acceptance boundary is from `3b8f6532`; the real
9
- preparation consumer remains pinned to
10
- `c5c6a3c9171e424a36a1bdbf3932b9319a3c6c72`. A separate producer/CLI case is pinned
11
- to `257c4b96b67001fa2bcf38436e57106c44aa797b` and exercises actual public
12
- `spawn --no-launch`, including incarnation and intent custody. Neither test implies
13
- compatibility with an untested newer wire. Core owns preparation scratch,
14
- artifact retention, binding execution, approval and incarnation/admission. Onboarding does not replace
15
- those implementations.
16
-
17
- The acceptance uses a small manifest-declared **fixture knowledge capability**.
18
- It does not use OKF, access external services, exercise harvesting, or qualify
19
- private messaging. Its provider program interprets only its own collection and
20
- explicit destination data. The source carries an unreachable publisher-workspace
21
- backlink; inspection/preparation never adopts or contacts that workspace.
22
-
23
- ## Reproduce the pinned public consumer
24
-
25
- **No longer runnable.** The acceptance driver and its helper were deleted with
26
- the workspace model v2; the command below fails with `Could not find
27
- 'test/portable-onboarding-public.acceptance.mjs'`. The equivalent 0.25 evidence
28
- is the CLI suite over the Northwind fixture (`test/onboard.test.mjs`,
29
- `test/spawn-standalone.test.mjs`, `test/fixtures/northwind/build.mjs`).
30
-
31
- ```text
32
- # historical (deleted): node --test --test-timeout=60000 test/portable-onboarding-public.acceptance.mjs
33
- ```
34
-
35
- This explicit acceptance driver was separate from the default `*.test.mjs` suite:
36
- a shallow checkout or source tarball need not contain a historical cross-branch
37
- commit. An explicit run **failed** if the pin or matching dependency lock was absent;
38
- it never silently skipped, fetched a moving branch, substituted current core or
39
- stripped unsupported request fields.
40
-
41
- `test/helpers/portable-onboarding-consumer.mjs` (deleted) archived committed core objects
42
- into owned ignored `stage/onboarding-consumer-*` scratch and verified the pin and
43
- held-patch exclusion. It linked only this worktree's dependencies after comparing
44
- the complete npm lock. No working files from another agent were loaded and no Git
45
- worktree/branch was added, reset or merged. Only the fixture's scratch was removed
46
- on completion.
47
-
48
- The test runs real native Git observations with isolated host configuration and
49
- explicit local file transport mappings. Other transports are disabled. Public
50
- preparation creates retained software/state **inside temporary fixture
51
- deployments**; after explicit fixture-only artifact approval, its inert provider
52
- normalize/bind/check commands run. The separate 257c4b96 case also executes the
53
- fixture's declared spawn hook through the actual public CLI. It never hand-writes
54
- permissive instance metadata: the producer mints and indexes each incarnation,
55
- admits the hook intent, and settles the receipt. Guarded test executables detect
56
- any attempted backend/model/client/host-timer invocation. No runtime, helper,
57
- schedule, normal capability command or live provider is launched.
58
-
59
- ## Exact operator sequence at this source checkpoint
60
-
61
- ### 1. Choose independent inputs
62
-
63
- Choose an explicit source export/revision/alias, deployment directory and work
64
- target. Existing project files/Git repositories need not be empty. For organization
65
- setup, choose an explicit workspace; consuming a public source does not make its
66
- repository a member. Supply a member request only when reciprocal admission is
67
- actually intended.
68
-
69
- For standalone setup, supply an own `standaloneContextKey` field containing an
70
- explicit opaque key, or explicit `null` for no private context. Never derive it
71
- from a path, username, source alias or agent identity. Do not also supply a
72
- workspace. The fixture prepares both keyed and explicit-null standalone requests,
73
- with messaging disabled; neither case proves messaging enrollment/privacy.
74
-
75
- Onboarding and pinned core both accept at most **256 UTF-8 bytes** for the key.
76
- Oversized keys are refused, never truncated, dropped or derived from another input.
77
- The earlier onboarding limit of 1,024 characters has been corrected: local ingress
78
- rejects over-limit ASCII and non-ASCII keys before source access, and the real
79
- pinned consumer retains an exact 256-byte non-ASCII key unchanged.
80
-
81
- The key boundary is verified against pinned c5 preparation. Incarnation/admission
82
- behavior is checked separately against exact 257c4b96, not inferred from c5.
83
-
84
- ### 2. Inspect, without authorizing installation
85
-
86
- Use `preflightFreshDeployment({deployment})` and then
87
- `inspectPortableOnboarding(input, {repositories})`, where `repositories` is the
88
- existing `createRepositoryTransaction` owned by the caller. Inspect explicit
89
- workspace imports/exports and optional catalog descriptor witnesses. There is no
90
- automatic topology scan or publisher-workspace adoption.
91
-
92
- - `separate-deployment-required`: preserve everything at that deployment and
93
- select another path. Do not delete its OATS state, knowledge, identity or history.
94
- - `needs-configuration`: resolve the reported explicit input/membership issue.
95
- - `ready-for-preparation`: advisory preflight/discovery passed; it is **not**
96
- provider readiness, executable approval, installation or launch permission.
97
-
98
- Close the inspection repository transaction when inspection ends. The issued
99
- inspection may be used to build a public request without retaining its scratch.
100
- The real consumer proves this by closing inspection scratch before preparation.
101
-
102
- A missing deployment path can be inspected, but public preparation requires an
103
- existing directory. Provision that explicit path separately without replacing an
104
- existing entry; onboarding does not create it. **Re-inspect after provisioning**
105
- before the first preparation call. The old absent-path inspection is not permission
106
- to use a directory that appeared later. Replacement of the selected deployment,
107
- its absent-path parent or the work-target directory also requires reinspection;
108
- ordinary project-file edits do not.
109
-
110
- ### 3. Supply explicit provider bindings and build the public request
111
-
112
- ```js
113
- const choices = { operator, mode: "directory", allowLocalPaths: false };
114
- const handoff = buildFreshPreparationRequest(inspection, choices);
115
- ```
116
-
117
- `operator` uses the existing public operator envelope (`policy`, operator
118
- `document`, optional `bindings`). A capability interprets its own binding payload;
119
- there is no universal `writeDestination` schema or default destination in
120
- onboarding. The fixture's `bindings.destination` is **fixture-provider syntax**,
121
- not an OKF or generic kernel field.
122
-
123
- Pass **all** of `handoff.preparation` unchanged. It contains deployment/source/
124
- origin, explicit workspace or standalone key, operator/mode/local-input choices,
125
- and an optional member request. It contains no `directory`: public
126
- `prepareCapturedComposition` creates and cleans its own private scratch.
127
- `handoff.workTarget` stays separate; this step does not perform actual work
128
- placement.
129
-
130
- ### 4. Explicitly perform the first preparation
131
-
132
- Given `core` loaded from the intended compatible kernel and explicit native
133
- `repositoryOptions`, the working API handoff is:
134
-
135
- ```js
136
- const first = prepareFreshOnboarding(inspection, choices, {
137
- prepareCapturedComposition(request) {
138
- return core.prepareCapturedComposition(request, { repositoryOptions });
139
- },
140
- });
141
- ```
142
-
143
- This is a **mutating command boundary**, unlike inspection/building. The driver
144
- rechecks fresh state and its ephemeral selected directory witnesses immediately
145
- before calling public core. If a legacy lock or other relevant managed state
146
- appeared, it throws `fresh-deployment-required`; if an inspected directory was
147
- replaced or a previously absent deployment was provisioned, it throws
148
- `selection-changed` and requires a fresh inspection. Both refuse before calling
149
- core. No project-content pin or new persistent custody registry is added; this
150
- local recheck does not replace core's own concurrency and lifecycle guards.
151
-
152
- An absent deployment returns `pending/fresh-deployment-provisioning-required`;
153
- an absent callable adapter returns `pending/onboarding-integration-required`.
154
- Both have `mutationAttempted:false`. An installed core that rejects a supplied
155
- field remains a typed error, not a reason to strip the field and retry.
156
-
157
- ### 5. Review an exact approval request, then explicitly continue
158
-
159
- An executable binding codec must itself be approved before normalize/bind may
160
- run. In the real fixture, the first result has `resolution:null`, an
161
- `approval-required` problem and an exact `{capability, artifactSet, request}`
162
- approval request. No provider phase ran before that approval.
163
-
164
- After the operator has reviewed and chosen **that exact** artifact:
165
-
166
- ```js
167
- core.approveAvailableCapability(
168
- handoff.preparation.deployment,
169
- chosenApproval.artifactSet,
170
- chosenApproval.capability,
171
- explicitOperatorApprovalOrigin,
172
- );
173
- const prepared = core.prepareCapturedComposition(
174
- handoff.preparation,
175
- { repositoryOptions },
176
- );
177
- ```
178
-
179
- These are two deliberate mutations, not an automatic approval loop. Never approve
180
- all returned requests merely to obtain a green result. The capability may still
181
- report incomplete/conflicting bindings afterward.
182
-
183
- After the first preparation writes managed state, the deployment is **no longer
184
- fresh**. Continue through ordinary explicit public preparation as above; rerunning
185
- the fresh driver correctly refuses. Do not erase the newly retained state to
186
- bypass that guard. The driver is not a full resumable onboarding orchestrator.
187
-
188
- ### 6. Inspect the captured result, not a launch claim
189
-
190
- When public preparation returns a resolution, use the existing public
191
- `core.loadCapturedDispatch({deployment, resolution, action:{kind:"inspect"}})`.
192
- The real test verifies the exact source commit/qualified identity, adopter-local
193
- alias, explicit provider destination, workspace or standalone context, and
194
- messaging-disabled choice from the retained record. Full-subject invocation data
195
- also matches that record through the generic fixture check seam.
196
-
197
- It verifies retained inspection again after removing **fixture-owned original
198
- sources**, not after deleting real user repositories. This is preparation and
199
- retention evidence—not actual running instance/job lifecycle acceptance.
200
-
201
- ### 7. Explicit public spawn without runtime launch (257c4b96 only)
202
-
203
- At the separately pinned producer, a reviewed prepared **directory-mode** record
204
- can create a new home and run its approved spawn hooks:
205
-
206
- ```bash
207
- node "$PINNED_KERNEL/bin/oats.mjs" \
208
- --deployment "$DEPLOYMENT" --resolution "$RESOLUTION" \
209
- spawn "$RETAINED_SUBJECT_ALIAS" --home "$NEW_ABSOLUTE_HOME" --no-launch --json
210
- ```
211
-
212
- These variables must name the explicit pinned kernel, retained resolution and a
213
- new home under a real existing parent; the alias must match the retained subject.
214
- Do not point the command at an occupied home or substitute an old instance's
215
- metadata. No additional work-target flag is supported by this captured spawn
216
- form. Its `home/work` is a newly owned execution directory, not silent adoption
217
- of the separately inspected project checkout.
218
-
219
- The real consumer uses this exact CLI after removing its fixture source/workspace
220
- repositories. It asserts producer-created `incarnationId`, exact execution binding,
221
- retained source/context/provider binding, index schemaVersion 2, and the same
222
- completed hook intent in index/metadata/opaque provider receipt. Two homes with the
223
- same resolution receive distinct incarnation and execution IDs. It also proves
224
- private invocation/binding snapshots are cleaned up after hooks.
225
-
226
- Successful output is **still pending launch**:
227
-
228
- ```text
229
- ok:true
230
- result.launched:false
231
- result.launchPending:true
232
- result.hooksPending:false
233
- instance/index lifecycle: spawned-launch-pending
234
- ```
235
-
236
- `ok:true` confirms this no-launch operation, not that a runtime started or user work
237
- completed. Repeating the call for the same home, or choosing an occupied user-data
238
- directory, returns `E_INSTANCE_EXISTS` without changing existing metadata/index/
239
- work or dispatching another hook. The operator must preserve the occupied path;
240
- there is no force/cleanup shortcut in this flow. Actual runtime start/wake/retire
241
- and production provider qualification remain separate lifecycle/acceptance gates.
242
-
243
- ### Pending request-file router (lifecycle-owned)
244
-
245
- The requested addition is `prepare --request <absolute-regular-json-file> [--json]`;
246
- it is **not implemented in either pinned CLI**. The
247
- [request transport helper](2026-09-17-public-prepare-request.md) is now implemented
248
- as `readPortablePreparationRequest({file,inputFlags,explicitSelector})`; it takes
249
- already-parsed transport forms, reads bounded strict JSON, and returns the whole
250
- input unchanged to public core. The real preparation consumer exercises it.
251
- The file is exactly `handoff.preparation`, never its wrapper or a captured
252
- execution selector. The
253
- lifecycle adapter must retain the existing source/workspace flag forms, make
254
- request mode mutually exclusive with all source/deployment input overrides, and
255
- use the existing bounded reader, strict JSON decoder and public core validator.
256
- Explicit captured selectors must be refused for new preparation, including before
257
- the command; stale inherited resolution/instance environment must not supply
258
- new-work authority. The existing global selector parser owns this routing—there
259
- is no onboarding-owned parallel parser. Until implemented/tested, use the working
260
- public JavaScript handoff above, not invented request flags.
261
-
262
- ## Working versus pending
263
-
264
- | Boundary | Status at the pinned consumer |
265
- |---|---|
266
- | Explicit source/workspace inspection and exact public preparation handoff | Exercised with real native Git and unchanged request objects |
267
- | String/null standalone context in the public JavaScript API | Exercised; core's 256-byte limit applies |
268
- | Exact artifact approval before provider compilation, explicit adopter binding | Exercised with a declared fixture capability only |
269
- | Fresh preflight refuses newly appeared legacy state | Exercised before the real adapter is invoked |
270
- | Private `directory` in public request | Correctly refused before scratch/acquisition writes |
271
- | Request-file helper feeding the existing public preparation API | Implemented and exercised with unchanged inputs; no installer/global parser |
272
- | Onboarding CLI request mode and standalone-key/operator-binding flags | **Not implemented in pinned `prepareCmd`**; lifecycle-owned router still pending |
273
- | Public `oats prepare` source/workspace forms | Present in pinned source, but cannot express this complete fresh-context/binding flow; not a substitute for the tested API request |
274
- | Core-owned inspection of a retained resolution | Exercised without source/workspace availability |
275
- | Actual public `spawn --no-launch` at exact 257c4b96 | Exercised producer-created incarnation/index/intent and fixture hooks; returns pending launch, refuses overwrite |
276
- | Full actual captured launch/start/wake/retire, managed runtimes and non-directory work placement | **Not qualified by these tests**; lifecycle-owned work/gates remain |
277
- | Real knowledge delivery and private messaging grants/reuse | **Not qualified**; provider-owned implementation and bounded live acceptance remain |
278
- | Historical reconstruction/in-place migration | Deferred; not required or silently satisfied by fresh setup |
279
-
280
- No migration CLI, alternate installer/config engine, registry, identity database or
281
- provider backend is introduced here. Main integration/release remain coordinator
282
- operations, not consequences of a passing local consumer test.
@@ -1,59 +0,0 @@
1
- ---
2
- type: Decision
3
- status: accepted-boundary
4
- title: Messaging capability contract boundary
5
- description: Define generic messaging inputs and outcomes in OATS, then implement their provider behavior in oats.aweb.
6
- timestamp: 2026-09-16
7
- ---
8
-
9
- # Messaging capability contract boundary
10
-
11
- OATS supplies the messaging contracts; the selected messaging capability consumes
12
- them. `oats.aweb` owns the aweb implementation. This follows the accepted
13
- [Portable Souls decisions](2026-09-15-portable-souls-handoff.md), not a new kernel
14
- messaging backend or OATS-hosted identity/permissions system.
15
-
16
- ## Existing shared contracts
17
-
18
- Reuse [provider wire v1](2026-09-16-provider-binding-wire.md), ProviderBinding1,
19
- MessagingChoice1, execution bindings and manifest-owned commands/hooks.
20
-
21
- | Contract responsibility | Kernel supplies/enforces | Capability implements/reports |
22
- |---|---|---|
23
- | Selection | One selected provider, exact artifact approval, shared resolver choices | Provider-domain normalization/binding, no hidden precedence |
24
- | Ownership/context | Responsible-human reference; qualified workspace or explicit standalone key; inherited owner for children/jobs | Native reference resolution and proof it addresses the intended human/context |
25
- | Membership intent | Private floor plus explicit wider set; source/team declarations are not enrollment | Native private-team provision/reuse and wider membership reconciliation |
26
- | Invocation | Exact execution binding, validated instance/subject and action/event, own binding and prior provider receipt | Native operation using only supplied authority and supported credential lookup |
27
- | Outcomes | Typed readiness, action/result and cleanup custody; nonsecret retained receipts | Provider-specific identity/team/member references and actual evidence |
28
- | Access | Four distinct expected grants, no privacy inferred from configuration | Verification through actual catalog/live/contact/history mechanisms |
29
-
30
- The existing generic wire is implemented. The exact additional captured messaging
31
- lifecycle projection, if required, must be reviewed/versioned before hookup. It
32
- must derive from the captured record and invocation, not ambient team/configuration
33
- or a knowledge-specific source declaration. This table does not invent a second
34
- command table, resolver or readiness protocol.
35
-
36
- ## Phase and effect boundary
37
-
38
- - Normalize/bind compile supplied intent into nonsecret provider data and common
39
- messaging choices. No identity/team enrollment occurs merely from acquisition.
40
- - Check is read-only and action-specific. A setup action may be admissible when
41
- authorized to provision; that is not proof membership already exists.
42
- - Explicit capability setup/lifecycle actions perform permitted mutations, retain
43
- receipts and handle retries/cleanup. Subsequent readiness reflects actual state.
44
- - Unadapted captured actions refuse before using live legacy configuration. No
45
- hidden fallback, arbitrary team creation or identity borrowing is acceptable.
46
-
47
- ## Getting the aweb capability working
48
-
49
- Investigate and use supported aweb identity, team, membership and transport
50
- mechanisms inside the capability. A missing field in `whoami`, or absence of a
51
- single human/context lookup command, is not sufficient to declare the design
52
- blocked. Establish the native resolution/reuse mechanism and its authority; where
53
- that truly cannot be implemented, report the precise missing backend contract.
54
-
55
- The four grants intentionally need not share a native API. Compose their separate
56
- mechanisms without treating contact as history access. Preserve the no-new-OATS-
57
- control-plane constraint and validate cross-host identity/private-team reuse with
58
- real provider evidence before claiming privacy. Fixtures and connectivity alone
59
- remain insufficient. No credential values belong in captured contracts or logs.
@@ -1,158 +0,0 @@
1
- # Portable migration evidence reader and planner
2
-
3
- > **Superseded (2026-09-23).** The modules this note describes (`lib/portable-migration-evidence.mjs`, `lib/portable-migration.mjs`, `lib/portable-migration-store.mjs`, `lib/portable-migration-artifacts.mjs`, `lib/legacy-lock-codec.mjs`) were deleted with the workspace model v2 — there is no migration (decision 5/15: a 0.24 lock is `E_LOCK_SCHEMA`, not evidence). Read [2026-09-23-simplified-workspace-model.md](2026-09-23-simplified-workspace-model.md) (worked example) and [2026-09-23-workspace-module-contracts.md](2026-09-23-workspace-module-contracts.md) (normative) instead; kept as history.
4
-
5
- 16 September 2026. This is the first read-only implementation slice of the
6
- Portable Souls consumer migration. The retention contract and the fifteen
7
- binding decisions in `2026-09-15-portable-souls-handoff.md` remain authoritative.
8
-
9
- ## Boundary
10
-
11
- `lib/portable-migration-evidence.mjs` inventories an explicitly supplied bounded
12
- set of deployment-local inputs:
13
-
14
- - legacy/current lock files;
15
- - instance homes (`instance.json` plus an optional rollback-incomplete cleanup
16
- descriptor); and
17
- - schedule scopes (`oats-schedules.json` plus schedule state).
18
-
19
- The caller supplies the target list. The reader does not recursively discover a
20
- workspace, infer an owner from an alias, consult current config, fetch source,
21
- execute a provider, inspect a live process, or write any file. Targets must be
22
- contained by one explicit canonical deployment and may not traverse symlinked
23
- parents. Metadata is read through the shared descriptor-backed bounded reader.
24
- Every present document is identified by `oats.bytes.v1` over its literal bytes,
25
- including historical whitespace and old field spelling.
26
-
27
- The inventory deliberately emits a bounded summary rather than copying arbitrary
28
- legacy settings, commands, task text, credentials, or hook output into a new
29
- record. A valid-shaped `executionBinding` or scheduled execution capsule is
30
- preserved as a candidate reference, but shape validation is not retained-input,
31
- approval, host, provider, or lifecycle verification.
32
-
33
- `verifyPortableMigrationInventory` repeats the same bounded reads and compares the
34
- complete deterministic projection. Byte drift, disappearance, appearance, or a
35
- changed summary returns `selection-changed`. This is a precondition for a future
36
- apply operation, not an apply operation itself.
37
-
38
- ## Honest planning
39
-
40
- `lib/portable-migration.mjs` is pure. `planPortableMigration(inventory)` emits only:
41
-
42
- - `preserve`: retain an existing captured job authority while verifying it;
43
- - `verify`: verify an existing captured reference and all separate readiness
44
- gates; or
45
- - `hold`: preserve literal evidence because reconstruction is not established.
46
-
47
- Every target remains `partial` or `unknown`. This planner cannot emit
48
- `reconstructed`, sets `readyToApply:false`, and declares that it performs no
49
- writes, provider execution, session or schedule changes, or trust transfer.
50
-
51
- ## Separate unselectable evidence store
52
-
53
- `lib/portable-migration-store.mjs` validates `ResolutionEvidence1` and publishes
54
- planned partial/unknown evidence under:
55
-
56
- ```text
57
- <deployment>/.agents/resolution-evidence/<oats.json.v1 id>.json
58
- ```
59
-
60
- The store is distinct from `.agents/resolutions/`; partial/unknown documents must
61
- carry `resolution:null`. `listResolutionEvidence` provides bounded deterministic
62
- diagnostics with incremental visited-entry, retained-record and aggregate-byte
63
- limits. Managed metadata/staging consumes the visited-entry budget even though it
64
- is not returned. An absent store is empty; every returned content address is
65
- verified, and corruption or unexpected entries fail closed.
66
- `commitPlannedResolutionEvidence` re-reads and compares
67
- the complete inventory before it creates the evidence store, recomputes the
68
- planner output rather than trusting caller-supplied status, and publishes canonical
69
- private bytes by atomic no-replace hard link. Matching existing bytes are reused;
70
- damaged existing evidence refuses without repair. Publication changes no source
71
- lock, home, schedule, session or approval state.
72
-
73
- `commitHistoricalHomeCapabilityEvidence` can publish the narrow verified
74
- home-to-v2-artifact association as `partial`. It persists capability/package IDs,
75
- paths and old/new digests, but deliberately omits unclassified legacy source,
76
- settings and command text; the original byte-addressed documents remain the
77
- witnesses. It still grants no selection, approval or retention authority.
78
-
79
- The validator can read a future `reconstructed` evidence document only when it has
80
- no unresolved inputs and names a shaped resolution reference. This slice exposes
81
- no writer for that state. A later dedicated historical verifier must establish and
82
- publish the complete reconstructed record before it can publish that evidence.
83
-
84
- Old v1/v2 lock rows remain literal historical evidence. Their legacy digest and
85
- trust fields are not reinterpreted as owner-execute identity or exact-artifact
86
- approval. `lib/legacy-lock-codec.mjs` is the acyclic bytes-in structural decoder
87
- for both historical formats. It preserves the existing v1 entry, retired-entry,
88
- v2 row/graph/back-reference, state-free empty-v2 and transitional-v2 semantics,
89
- while routing ingress through the common bounded strict JSON decoder. Duplicate
90
- decoded keys, malformed UTF-8 and oversized inputs therefore refuse before any
91
- row is exposed. Retired capability policy is an injected pure callback; the
92
- codec imports no core/config/filesystem module.
93
-
94
- The migration inventory accepts this codec as `legacyLockDecoder`. Successful
95
- structural verification removes only that unresolved item from the plan.
96
- `verifyHistoricalLockCandidate` then rechecks the complete inventory, rereads the
97
- chosen explicit target and returns the strictly decoded v1/v2 rows with their
98
- literal witness and `trustAuthority:"none"`. It does not retain artifacts or
99
- associate the lock with a home/job. A deployment lock still cannot establish which
100
- revision an individual home or job used. Home runtime rows, rendered hook paths,
101
- copied skills and launch metadata can narrow investigation but do not establish
102
- the full source, capability, helper and managed-runtime closure. A legacy or
103
- unknown scheduled attempt is held exactly; it is never rebound to today's
104
- definition or lock. The inventory distinguishes an existing legacy attempt from
105
- an absent attempt even when no execution field exists. A captured current
106
- definition cannot turn that old unresolved attempt into preserved captured
107
- authority; the planner keeps the target `unknown` and `hold` pending owner
108
- reconciliation.
109
-
110
- `lib/portable-migration-artifacts.mjs` adds one narrower read-only proof for an
111
- explicit materialized-v2 candidate. It requires the strict lock witness, verifies
112
- the existing legacy artifact digest and exact `.oats-installation.json` provenance,
113
- preflights `.oats-installation.json` through the bounded descriptor-backed
114
- regular-file reader before the legacy tree hasher can allocate it, records the
115
- exact provenance-byte digest, and then measures both old and new tree digests
116
- twice. A final bounded provenance read must match the preflight witness. A
117
- symlinked, oversized, replaced or drifting provenance file therefore cannot lend
118
- external/pre-hash bytes to the candidate. The old digest implementation and its
119
- historical mode limitations remain unchanged. The result labels modes
120
- `observed-at-migration`, trust/selection authority `none`, and retention
121
- `not-retained`.
122
-
123
- V1 candidates require the existing literal legacy digest as an injected callback;
124
- the migration module never imports core or substitutes the v2 algorithm. It
125
- preflights and byte-witnesses bounded regular `oats.json`, requires its
126
- capability/version to match the v1 row, brackets old/new digest measurements, and
127
- still treats `trustedExecutables` only as evidence. V1 `package` and capability
128
- `path` are persisted as `null`: unknown historical row keys do not become verified
129
- artifact provenance. No legacy source, settings or other unknown row text is copied
130
- into the new evidence document; only the independently verified artifact path is.
131
-
132
- `verifyHistoricalHomeCapabilityCandidate` can additionally prove that one unchanged
133
- home's `capabilityRuntime` names exactly one capability with the same old digest.
134
- That is a narrow per-capability association only: the result remains `partial`,
135
- retains the legacy trusted bit only as a claim, and leaves source revision, full
136
- resources/helpers/runtime closure and new-format approval unresolved.
137
-
138
- ## Required follow-on seams
139
-
140
- 1. The acyclic strict legacy-lock byte decoder is implemented. Parent integration
141
- must replace `core.parseLockFileStrict`'s duplicate body with a tiny file-read
142
- wrapper around it and expose the bound bytes seam with the kernel's retired-ID
143
- callback. Until that integration lands, core remains the live parser and the
144
- migration inventory requires explicit decoder injection.
145
- 2. Parent lifecycle integration must provide the authoritative bounded target
146
- list, including quarantined/deferred homes and independent provider records.
147
- This module does not infer deployment topology.
148
- 3. Reconstructed publication needs a dedicated historical evidence verifier. It
149
- must establish every managed input, recheck unchanged witnesses, retain exact
150
- artifacts, require new-format executable approval, and use immutable guarded
151
- publication. It must not weaken the existing prepared-only
152
- `commitCapturedResolution` gate.
153
- 4. Partial/unknown evidence now has its own immutable evidence store and never
154
- enters `.agents/resolutions/` or becomes dispatch-selectable. A later lifecycle
155
- adapter may index these references without changing that authority boundary.
156
-
157
- No live migration, lock conversion, timer, provider, instance, or deployment
158
- operation is performed by this slice.