@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,119 +0,0 @@
1
- # Repository observation and source custody
2
-
3
- `lib/repository-observation.mjs` implements real repository observations for the
4
- forthcoming preparation transaction. It does not yet constitute workspace admission,
5
- complete preparation, approval or runtime dispatch.
6
-
7
- ## One transaction, one observed snapshot
8
-
9
- `createRepositoryTransaction` requires an explicit scratch directory and opaque
10
- access-context key. Credentials remain in the host's native Git/gh facilities;
11
- they are not extracted into source records. Caches are transaction-local, never
12
- shared across authorization contexts. Original repository/index/object environment
13
- is scrubbed without copying credential stores.
14
-
15
- `observe(source, {revision, origin, expectedIdentity})` validates through the shared
16
- source codec and records exact repository identity, selector and commit. GitHub
17
- identity is obtained with the native gh API; other supported Git hosts use canonical
18
- remote identity. An existing canonical identity is preserved explicitly rather than
19
- silently upgraded. Unavailable identity, changed IDs and redirected/renamed GitHub
20
- locators refuse, not silently fall back. No repository can assert its own hosting ID
21
- in an authored descriptor.
22
-
23
- Omitted revision means the hosting default branch or Git's actual symbolic remote
24
- HEAD, never a guessed main. Requests and failed observations are memoized. The
25
- resolved default branch and an explicit request for that same selector share one
26
- snapshot; qualified provider identity also unifies transport aliases. Each returned
27
- observation preserves the requested locator and origin. Changing an upstream ref
28
- mid-transaction cannot advance an already observed identity/selector pair.
29
-
30
- ## No source checkout or source execution
31
-
32
- The adapter uses an owned bare repository and fetches one shallow selected snapshot,
33
- requesting blob filtering. It never checks out source files, runs source hooks,
34
- loads source scripts, initializes submodules or applies checkout/smudge filters.
35
- Git hooks are directed to an empty owned directory, external transports and automatic
36
- HTTP redirects are disabled, and interactive Git prompts are disabled. Host credential
37
- helpers/SSH remain the explicitly selected host execution boundary.
38
-
39
- `readFile` reads only issued transaction handles and exact Git objects, with a 1 MiB
40
- metadata-file bound. Optional absence is explicit. Descriptor symlinks/non-files are
41
- not treated as alternate declarations. Return values include raw bytes and the exact
42
- source document/revision/byte witness for the common parser.
43
-
44
- `materialize` uses the shared `source-projection.mjs` writer (also used for explicit
45
- local package snapshots) to write a selected repository-root-relative projection into a NEW tree,
46
- never merging with an existing destination. It preserves literal links and Git owner-
47
- execute state, refuses Git administrative paths, unsupported submodules/object kinds,
48
- missing required roots and escaping/broken links. Parent directories are created and
49
- checked component-by-component without recursive mkdir through source links. Case or
50
- normalization aliases cannot turn an earlier source symlink into a later write parent;
51
- existing directory spellings must belong to this projection. Final names must round-trip
52
- exactly. Windows device/alternate-stream/trailing-dot aliases refuse before writing.
53
- A filesystem unable to retain owner-execute state refuses rather than certifying lost
54
- mode information. The caller retains
55
- and verifies this projection before closing the scratch transaction. A failed projection
56
- is reported by staging path; it is not a complete captured resolution.
57
-
58
- ## Budgets and limits
59
-
60
- Defaults bound snapshot count (32), request aliases (128), inspected entries (10,000),
61
- selected blob bytes (256 MiB), descriptor bytes (1 MiB), command output and command
62
- duration (Git 60 seconds, GitHub metadata 30 seconds). Blob data is cached by exact
63
- object within the transaction. These are application read/materialization limits,
64
- NOT a network-pack or disk-quota guarantee: a Git server can decline blob filtering.
65
- Git/host resource limits still apply to transport acquisition. No persistent source
66
- cache, background refresh, organization-wide scan or hostile-host isolation is claimed.
67
-
68
- `close` removes only the transaction's owned scratch directory, checks ownership and
69
- invalidates its handles. Materialized projections outside it remain intact. There is
70
- no force cleanup of another owner, live home or unrelated process.
71
-
72
- ## Evidence and remaining integration
73
-
74
- Native-Git tests cover observed non-main default and same-selector caching after
75
- upstream changes, alias identity/counterfeit-handle refusal, exact materialized bytes/
76
- links/execute mode without filters, byte budgets and escaping links. Local fixture
77
- transport mappings preserve production portable-identity rules. A separate read-only
78
- native GitHub probe resolved this framework repository's stable ID/default branch using
79
- existing credentials; it is not messaging/provider privacy qualification.
80
-
81
- Review found a real pre-refusal write escape using valid case-aliasing Git tree entries
82
- on a case-insensitive filesystem. A raw-tree regression reproduced the outside write
83
- in an owned temporary fixture before the correction; it now proves rejection without
84
- that write. The final containment check is defense-in-depth, never the first boundary
85
- protecting materialization side effects.
86
-
87
- ## Reciprocal discovery and imports
88
-
89
- `lib/workspace-discovery.mjs` now connects the native transaction to the shared
90
- workspace/member/soul parsers. `identify` resolves hosting identity without cloning
91
- unrelated allowlist repositories. Discovery views are frozen and transaction-issued;
92
- a serialized or mutated client object cannot substitute for a read workspace.
93
-
94
- `readWorkspace` reads the exact oats-workspace.yaml. `checkMember` qualifies the
95
- candidate and matches the workspace allowlist by repository identity, using the
96
- workspace-declared member revision (or observed hosting default), not the caller's
97
- work-tree branch. The observed member's oats.yaml must point back to that workspace.
98
- The backlink's workspace observation must match the selected workspace commit;
99
- mismatches remain stale rather than silently admitted. Missing/wrong backlinks,
100
- unlisted forks and inaccessible observations remain distinct blocked results.
101
- Eligibility records both descriptor witnesses and revisions, not live enrollment.
102
-
103
- `importSoul` instead reads the selected source's advertised export and exact soul
104
- metadata without following its publisher-workspace backlink. It returns qualified
105
- identity, alias/reference, explicit definition, minimum required source roots and
106
- adopter-owned policy inputs for the same planner. No adopter-maintained soul copy is
107
- created. Optional extra selected roots are finalized during preparation. Required
108
- repo: package roots remain source-repository-relative.
109
-
110
- The shared Origin enum now names workspace-admission, member-backlink and source-export
111
- facts explicitly. These are provenance labels, NOT new policy precedence tiers or
112
- approval authority. The generated schema consumes the runtime enum. Three focused
113
- discovery tests cover reciprocity/forks/revisions/immutable views and public import
114
- independence; a native Git smoke exercises the complete observation/discovery/import/
115
- projection path. The no-filter test also has an executable positive control.
116
-
117
- Source-aware package preparation, retained record publication and public consumer/
118
- migration integration still follow. They must use these observations and shared
119
- codecs, not a second Git/source resolver or mutable checkout.
@@ -1,77 +0,0 @@
1
- # Captured incarnation and admitted actions
2
-
3
- This is generic lifecycle custody, not a provider identity database or an enrollment guarantee. It extends the unreleased [shared invocation wire](2026-09-16-provider-binding-wire.md). Existing provider pins must be updated and tested explicitly.
4
-
5
- ## Identities and storage
6
-
7
- A fresh directory scaffold mints `instance.json.incarnationId` with `randomUUID()` once, before any provider hook. The value is independent of composition, path, name, account and OS user. Metadata also records `captured.custody:{home:{dev,ino},work:{dev,ino}}`. Neither restart nor retry remints these fields.
8
-
9
- The existing `.agents/portable/instance-references.json` becomes schema v2. Its rows retain the existing home/instance/agent/kind/status/executionBinding/responsibleHuman plus:
10
-
11
- ```
12
- incarnationId: UUIDv4
13
- custody: {home:{dev,ino},work:{dev,ino}}
14
- intents: [{executionId,capability,action,inputIntegrity,state,attempt,receipt,replayable}]
15
- ```
16
-
17
- Rows remain home-indexed, with unique incarnation IDs. A recreated home cannot replace an indexed incarnation's obligations. Old homes and v1 indexes without witnesses refuse `migration-required`; there is no silent backfill, deletion or automatic historical conversion. Release/reprovisioning of an occupied index location is not implemented here.
18
-
19
- Index limits are 4 MiB, depth 32, 40000 entries, at most 128 retained intent rows per incarnation. Receipts use the shared 128 KiB/depth-24/8192-entry bound. Limits refuse rather than prune receipts. All index transitions use the existing portable-state write guard. Identity metadata and index publication are synchronized before returning authorization to execute. Failed publication/synchronization or guard cleanup retains custody; an uncertain index publication does not trigger scaffold deletion.
20
-
21
- ## Activation publication custody
22
-
23
- Activation retains its original indexed home/work witnesses across hooks and settlement. Both success and failure metadata publication use the same guard before temporary-file creation, rename and cleanup; a replacement home/work is never adopted or written through. The hook runner propagates observed receipt/intent facts when its final custody assertion fails.
24
-
25
- On publication/custody failure, the independently owned deployment index is matched against the original authority and exact intent attempts WITHOUT resolving the replacement home. Publication and failure reporting also require the activation-owned `spawn-hooks-running` state; a newer state refuses before receipt/status mutation and is preserved, with a reporting diagnostic returned to the caller. It retains observed provider receipts, holds admitted/running work as unconfirmed, and records a bounded `custodyFailure` diagnostic and cleanup-required lifecycle. If independent reporting is itself blocked, the existing caller error envelope carries the observed facts and reporting failure. It never bypasses a held write guard. The post-hook authoritative classification read uses this same failure path. An unreadable index never implies terminal readiness or permits home metadata publication; if independent reporting also fails, exact observed meta/intent facts still accompany the caller error. This is preservation/reporting, not automatic replacement-home recovery or retry qualification.
26
-
27
- ## Admission and retries
28
-
29
- The public core API is:
30
-
31
- ```js
32
- admitCapturedAction({deployment, resolution, home, action,
33
- input: {/* explicit NONSECRET request data, not environment/credentials */},
34
- retryExecutionId // omitted for a distinct new logical request
35
- })
36
- // -> {intent:{schemaVersion:1,executionId,incarnationId,attempt},
37
- // receipt, replayed:false}
38
- // or completed replay: {..., replayed:true, replayable:boolean}
39
- ```
40
-
41
- Static retained record/action/approval/executable and owned metadata checks run before admission, without a provider phase. `inputIntegrity` commits canonical request data in the existing JSON digest domain. CLI operations commit their exact declared argument flags/values, not runtime environment. Secrets belong in provider credential references, not operation arguments.
42
-
43
- New requests mint independent opaque execution IDs, even for identical actions and inputs. One unsettled intent blocks replacement requests. `beginCapturedIntent({deployment,home,intent,action})` changes `admitted` to `running` once, immediately before the child can have effects. `settleCapturedIntent({... ,state,receipt,replayable})` records `completed`, `unconfirmed`, or pre-execution `blocked` outcomes. State, incarnation, action and attempt must match.
44
-
45
- An explicit retry names the saved execution ID and exact original action/input. `blocked` and `unconfirmed` retry keep the logical ID and observed receipt, incrementing the attempt. This authorizes a provider to reconcile, not blindly repeat native mutation. `running` and abandoned `admitted` states refuse concurrent retry: process-crash reconciliation remains a held boundary, not guessed liveness. Completed retry returns stored outcome without provider code; non-replayable runtime/environment contributions refuse rather than re-execute a completed hook.
46
-
47
- The latest indexed receipt for the selected capability takes precedence over the compatibility `capabilityMeta` mirror. The mirror seeds only the first action. An admitted retry uses its own intent receipt; it never falls back to another request or erases partial effects when metadata mirroring fails.
48
-
49
- ## Shared invocation
50
-
51
- ```
52
- instance: null | {home,work,name,agent,incarnationId}
53
- intent: null | {schemaVersion:1,executionId,incarnationId,attempt}
54
- ```
55
-
56
- These are required fields in the unreleased v1 projection. Existing exact subject, context, human, messaging choice, capability/action, execution binding and optional caller receipt equality checks remain. Instance identity is derived from current owned metadata and the matching index, not accepted from a caller's target description. An intent must match that incarnation, capability, action and active indexed attempt. Public broker checks rederive the same projection; check stdin and execution snapshots do not have different authority rules.
57
-
58
- Read-only scope checks can have no instance/intent. A null intent grants no mutation authority. Provider-specific account reuse, reconciliation, privacy qualification and grants remain provider responsibilities.
59
-
60
- ## Integrated execution paths
61
-
62
- - Fresh scaffold registers incarnation custody before hooks. Activation statically preflights every hook, then admits, checks readiness and executes each hook in retained order. Readiness sees the intent but cannot have effects. Required failure retains home, hook intent references and observed provider metadata.
63
- - `activateCapturedScaffold({...,retryIntents:{[capability]:executionId}})` treats explicit presence as retry, including `{}` after a failure before admission. It derives the entire expected map from indexed spawn intents, checks saved metadata references against it, and preserves those references across later preflight failures. Empty retry cannot remint over existing obligations. Completed hooks are not repeated. Unsupported contribution refresh refuses.
64
- - Optional hook functionality can fail without a required-hook error. Any blocked/unconfirmed intent nevertheless keeps activation at `spawned-cleanup-required`, with public `hooksPending:true`, `cleanupRequired:true`, and the exact retry map. The same explicit retry API accepts this nonterminal state. A terminal `spawned-launch-pending` state requires settled custody; optional failure before admission can remain advisory when it creates no obligation.
65
- - Home `kind:action` operations admit before readiness/execution. `--retry-intent EXECUTION_ID` explicitly retries/replays; output and error details carry the intent reference. Error details include the confirmed index settlement `{state,receipt}` and an explicit `unconfirmed` boolean, independently of provider message wording. Nonzero/contradictory/malformed/timeout/cleanup and non-timeout runner-error outcomes retain their unconfirmed classification and any actually observed envelope. Pre-execution readiness failure stays `blocked`, not an executed unknown outcome. A saved successful envelope is replayed without readiness or effects.
66
- - Non-admitted views omit a caller receipt assertion and let the same owned metadata/index builder derive it. They neither promote a stale `capabilityMeta` mirror over the index nor weaken rejection of explicitly supplied contradictory receipts. Readiness and execution receive the identical current projection without admitting a new action.
67
- - Scope mutation operations refuse `admission-required`; no scope incarnation is invented. `kind:view` inspection stays nonmutating. Raw capability commands without admitted instance context grant no setup authority; identity-dependent providers must continue refusing such mutation.
68
-
69
- ## Existing provider-run completion after source-home deletion
70
-
71
- Raw captured completion commands (for example a qualified provider's `complete` or non-rejudging delivery `retry`) use the SOURCE deployment/resolution through the existing namespace command route. That route supplies `instance:null`, `intent:null` and no instance-derived `priorReceipt`; it does not recreate or impersonate the deleted source incarnation. There is currently no alternative kernel-admitted existing-run completion projection for a deleted home.
72
-
73
- The kernel verifies the retained selection, approved command and provider readiness. The provider must independently validate the already-retained source/run/observed-receipt custody and authorize only that existing continuation under its qualified contract. Null intent itself grants nothing: it cannot authorize fresh setup/enrollment/lifecycle, new execution/rejudgment or new source registration. Missing/mismatched existing-run authority refuses rather than synthesizing an instance, intent or legacy fallback. Provider completion keeps the source binding, never the helper binding; live-home operation admission is not a workaround for the deleted source.
74
-
75
- This describes current transport/authority separation, not an additional provider action registry, new execution permission or a provider qualification test.
76
-
77
- Actual managed-runtime launch, start/restart/wake/retire recovery, scheduler execution-ID propagation, and helper launch are not qualified by these tests. Next steps are explicit retained launch inputs, exact runtime-root retention, then native backend/history/work-custody integration with preflight-before-stop. No `--no-launch` result can stand in for successful helper execution.
@@ -1,105 +0,0 @@
1
- # Retained helper selection — supported subset
2
-
3
- A capability's independent work must retain TWO selections: the source provider's
4
- saved `ExecutionBinding`, and the dedicated helper execution binding. A resolution
5
- ID describes immutable composition, not an instance or admitted request identity.
6
- This API resolves exact helper authority; it does not qualify runtime launch.
7
-
8
- ## Core and CLI
9
-
10
- ```text
11
- resolveCapturedHelper({executionBinding, helper, name?})
12
- capturedNativeSessionAvailability() // static callable contract, not readiness
13
-
14
- oats inspect --deployment ABS --resolution SOURCE_ID --json
15
- oats inspect --deployment ABS --resolution SOURCE_ID --helper EXACT_MAP_KEY --json
16
- oats inspect --deployment ABS --resolution SOURCE_ID --helper EXACT_MAP_KEY --composition --json
17
- ```
18
-
19
- `executionBinding` is the SOURCE's saved binding, not a worker's ambient selector.
20
- `helper` is an exact own key in that source record's `helpers` map. Source inspection
21
- lists those keys/references. If supplied, `name` must match the retained helper name.
22
- The sole static loader verifies both source and dedicated helper records, including
23
- its exact provider artifact, exported definition, curriculum and retained resources.
24
- No live soul/capability/config/lock lookup or name-based substitution occurs.
25
-
26
- The core result is:
27
-
28
- ```text
29
- {schemaVersion:1,
30
- sourceExecutionBinding, executionBinding,
31
- helper:{key,name,subject}, context, responsibleHuman, workMode,
32
- launch:{schemaVersion:1,
33
- api:{contract:'oats.captured-session',version:2,available:true,backends:['tmux','herdr']},
34
- readiness:{status:'not-checked'}}}
35
- ```
36
-
37
- `sourceExecutionBinding` remains the selection for provider completion/retry calls;
38
- `executionBinding` selects the helper. `launch` advertises the versioned callable
39
- API only; public inspect also returns that descriptor as `result.nativeSession`
40
- for persistent/helper selections. `readiness.status:'not-checked'` is literal:
41
- inspection probes no native backend/provider, creates no home or intent, and
42
- cannot certify the requested instance/host. API availability remains true even
43
- when the retained record has no launch recipe or lacks approval. Consumers must
44
- understand the exact contract/version and obey actual start refusals/receipts.
45
- Static verification is not approval, mutable provider readiness, incarnation
46
- admission or launch. Missing keys/records/resources
47
- refuse even when a healthy newer selection exists. The initial supported subset
48
- requires matching captured source/helper contexts and human choices; distinct
49
- helper contexts/owners require explicit helper-request policy and currently refuse.
50
- They are never silently overwritten. Runtime differences likewise require real
51
- retained launch inputs rather than flags that select ambient runtime software.
52
-
53
- ## Scaffold is not launch
54
-
55
- After resolving the helper, the existing public captured spawn can exercise only
56
- its explicit directory/no-launch subset:
57
-
58
- ```text
59
- oats spawn HELPER_NAME --deployment ABS --resolution HELPER_ID --home NEW_ABS_HOME --no-launch --json
60
- ```
61
-
62
- That route consumes the DEDICATED helper record and exact approvals/hooks, not a
63
- legacy name-only scaffold. It does not satisfy a request for a running worker.
64
- A separate public captured start now follows this scaffold/hooks stage:
65
-
66
- ```text
67
- oats session start --deployment SOURCE_DEPLOYMENT --resolution SOURCE_ID --helper EXACT_MAP_KEY --home OWNED_HELPER_HOME --request ABS_NATIVE_REQUEST_JSON --json
68
- ```
69
-
70
- It revalidates the exact source edge, checks that the owned home belongs to that
71
- dedicated helper, and calls the existing captured native session transaction.
72
- See the [public native request contract](2026-09-17-public-captured-start.md).
73
- Both existing tmux and Herdr adapters now use the same tagged public request and
74
- native custody path; see [backend parity](2026-09-17-captured-backend-parity.md).
75
- The unreleased blanket `launch.status:unsupported` projection is replaced by the
76
- versioned availability/not-checked descriptor above. An old or unknown descriptor
77
- is unqualified ingress, not permission to guess support or silently ignore a
78
- contradictory readiness signal. Providers must qualify this API at an exact
79
- compatible version before replacing their unsupported-helper guard. `launch:null` is never filled from current config;
80
- unsupported runtime prerequisites still refuse. Helper-authored policy holds and
81
- the existing recursion guards remain intact.
82
-
83
- ## Completion belongs to the source selection
84
-
85
- The capability saves a completion command using its source descriptor's explicit
86
- selection (provider arguments are owned by that capability):
87
-
88
- ```text
89
- oats NAMESPACE COMPLETE_COMMAND --deployment SOURCE_DEPLOYMENT --resolution SOURCE_ID -- PROVIDER_ARGS
90
- ```
91
-
92
- Do not use `--soul`, inherited worker selectors, or the helper execution binding
93
- for this command. Explicit selector pairs replace inherited selectors as a unit.
94
- Private invocation files are transient; freeze required data in existing provider
95
- source/run custody before returning. This contract imposes no harvester name,
96
- prompt, store layout, evidence-selection algorithm or publication mechanism.
97
-
98
- ## Evidence and limits
99
-
100
- Focused A/B fixtures prepare distinct dedicated helper records, remove original
101
- source/config/lock state, and inspect A and B independently through core/public CLI.
102
- Missing/prototype keys, wrong expected names and missing A records refuse; no home,
103
- job, provider setup or model process is created by inspection. This is retained
104
- selection evidence—not real source-independent worker launch, completion judgment,
105
- publication acceptance or provider/privacy qualification.
@@ -1,42 +0,0 @@
1
- # Explicit retained launch inputs
2
-
3
- This is the preparation half of actual captured launch, following [durable admission](2026-09-16-captured-admission.md). A non-null recipe is not a running instance and does not lift the retained-helper launch refusal.
4
-
5
- Public `prepareCapturedComposition` accepts optional `launch` and `helperLaunches`:
6
-
7
- ```js
8
- {
9
- deployment, source,
10
- launch: {
11
- runtime: "claude",
12
- executable: {capability: "example.runtime", command: "native"},
13
- args: [],
14
- env: {NATIVE_PROFILE: {fromEnv: "EXPLICIT_PROFILE"}},
15
- model: "explicit-native-model-id",
16
- yolo: false
17
- },
18
- helperLaunches: {
19
- "example.provider:worker": {/* independent complete request of the same shape */}
20
- }
21
- }
22
- ```
23
-
24
- All six request fields are required when a request is present. Model is literal nonempty text, not an alias resolved against current configuration. There is no runtime/model/yolo defaulting, package discovery, PATH lookup or enrollment during this compilation. Environment values follow the existing launch-config validator; additionally all captured OATS/instance aliases are reserved. Credentials must remain references, not literal values or arguments.
25
-
26
- The original executable subset was a command already exported by an exact selected capability. The [native start candidate](2026-09-17-captured-native-start.md) additionally accepts an explicit normalized absolute external host-tool path, without inventing a mandatory runtime capability or pretending to pin every host binary. No new package resolver is introduced, and a host-tool path is explicit host authority, not a retained OATS artifact. A selected capability can export a native runtime entrypoint; executable validity, required dependency roots and runtime-specific loading still need qualification before actual start. This is not a general native-runtime installer or a replacement for runtime package acquisition.
27
-
28
- Compilation reuses existing command resources and the existing LaunchRecipe codec. The stored recipe uses `executable:"captured-resource"`, `executableResource` referencing the exact file, and `entrypoint:{capability,command}`. It carries explicit args/env/model/yolo plus pending hook contributions and the TASK.md prompt convention. A future start must resolve the resource from the verified record and match the declared entrypoint, never pass the sentinel to a shell or look for an ambient executable. A resource pointer must match its selected capability and canonical command resource key.
29
-
30
- Helpers use only their exact own helper-map request; they never inherit the primary instance's launch selection. An omitted request stays `launch:null`. Unknown helper keys refuse. All primary/helper requests compile before any helper record publication, preventing a partially usable graph when another request is unsupported.
31
-
32
- When selected manifest requirements apply to the requested runtime, compilation currently refuses `needs-configuration`: those required runtime package roots must first be retained and loaded by a qualified adapter. It never falls back to globally installed plugins/packages. Unsupported work modes still refuse at materialization/start. Existing helper-authored policy refusals are unchanged.
33
-
34
- ## Next execution boundary
35
-
36
- Actual native start must consume these inputs under the same durable incarnation and admitted intent as other actions. The implementation sequence is:
37
-
38
- 1. Verify declared entrypoint, exact approval, executable permissions, runtime dependencies and environment references; validate supported native arguments. No provider/backend observation or stop before these checks.
39
- 2. Reuse existing native-history, independent session receipt and pending-start primitives. A captured home must bypass legacy `planLaunch`/current config entirely, including starts reached through the older public home API.
40
- 3. Admit the entrypoint action before backend effects; bind explicit backend placement and task input to the request. Use the admitted execution ID in pending/start evidence instead of generating an unrelated logical request ID. Retain unknown targets and receipts on failed acknowledgment or metadata writes.
41
- 4. Test actual inert native entrypoint execution for fresh primary/helper homes, source/config deletion, retries and preflight-before-stop. Only then expose real captured start/restart/helper launch; no `--no-launch` proxy.
42
- 5. Add exact managed runtime roots/loader support. Pi-specific changes require complete installed documentation reads before implementation; legacy ambient Pi extension behavior is not silently reused or changed by this generic request compiler.
@@ -1,86 +0,0 @@
1
- # Command/curriculum preparation
2
-
3
- `prepareCapturedComposition(input)` now connects native by-reference import,
4
- workspace/adoption choices, package preparation, manifest defaults and retained
5
- resources into real records. Provider-owned binding preparation and captured command
6
- readiness now use the [retained codec broker](2026-09-16-provider-binding-codecs.md).
7
- This is NOT yet full launch/runtime/lifecycle/migration completion.
8
-
9
- Public CLI (new command/curriculum preparation, no launch):
10
-
11
- ```text
12
- oats prepare --dir /deployment --source git:github.com/example/souls --revision v1 --export agents/expert --alias expert --json
13
- oats prepare --dir /deployment --workspace git:github.com/example/workspace --alias expert --json
14
- ```
15
-
16
- Use `--workspace-revision` to select a workspace revision explicitly; otherwise the
17
- hosting default is observed, never guessed. `--work` overrides the source's work hint.
18
- A new-work request needs its own explicit absolute `--dir`; an inherited command
19
- selector does not supply or change that intent. Unsupported/mixed flags refuse.
20
- Incomplete preparation returns a failing envelope with prospective software details;
21
- a complete but unapproved record reports `approval-required`, not executable readiness.
22
-
23
- Input names an explicit deployment and four-field source reference
24
- `{source,soul,revision,alias}`. A workspace request permits selecting an advertised
25
- alias instead. Optional member context requires reciprocal eligibility. Workspace
26
- adoption entries apply by qualified source identity across aliases; an alias cannot
27
- hide another entry's contradictory defaults. No publisher workspace is adopted.
28
-
29
- The wrapper reads one lock-v3 snapshot before creating scratch/fetching. Legacy
30
- state requires migration. A native repository transaction freezes observations;
31
- same-repo package roots and dependencies share that source commit. Packages use
32
- the existing walker/materializer/validators. Only selected capabilities enter the
33
- main record; per-root projections of the resolved package graph populate lock v3.
34
- They are graph projections, not another dependency resolver.
35
-
36
- Source retention includes the entire soul subtree, declared resources and needed
37
- same-repository package roots. Kernel instructions/skills are copied from explicitly
38
- named trusted resources, never by sweeping a checkout, credentials or node_modules.
39
- The record includes ordered instructions, discovered skill entries, inventoried
40
- command/hook files, and dedicated helper records. Duplicate skill names or a helper's
41
- own unresolved software, provider, team or resource policy refuse rather than silently
42
- inheriting incompatible parent choices/bindings. All helper definitions are preflighted
43
- before any helper record is published; accepted helpers are then committed before the
44
- main record.
45
-
46
- Missing provider binding interface/approval or unresolved fields return
47
- `needs-configuration` with no main resolution, while exact prospective package sets
48
- remain available for explicit artifact-set approval. Approved providers normalize
49
- fields into the same choice resolver, then render complete nonsecret bindings.
50
- Mutable host/provider readiness is checked separately at each captured action;
51
- a static binding is not certification. Provider code does not run merely because it was downloaded.
52
- No guessed nonsecret payload, owner, enrollment or privacy guarantee is generated.
53
- Valid retained orphan objects/records may survive later refusal or selection CAS loss;
54
- shared immutable stores are never rolled back wholesale.
55
-
56
- Result fields include `status`, `resolution`, `executionBinding`, exact observed
57
- source revision, per-root software selections and problems. Programmatic standalone
58
- preparation may carry an explicit `standaloneContextKey` that is either non-empty
59
- opaque text or explicit null; it is stored literally in the existing standalone
60
- context. It conflicts with workspace context and is never derived from source/work
61
- paths or the OS user. Null does not qualify messaging. Complete results expose
62
- `responsibleHuman`: null means messaging is actually disabled; incomplete preparation
63
- does not manufacture that claim. Approval-required is separate from complete capture.
64
- No spawn/setup/launch/scheduler side effect occurs during preparation.
65
-
66
- The home/worker binding extension agreed with the scheduler consumer is:
67
-
68
- ```text
69
- executionBinding = {
70
- schemaVersion: 1,
71
- deployment: <absolute local scope>,
72
- resolution: {schemaVersion: 1, id: <sha256-id>}
73
- }
74
- ```
75
-
76
- It will be stored in instance metadata by captured lifecycle adoption. Existing homes
77
- without it are legacy/evidence cases, not an excuse to infer current configuration.
78
- Scheduler fields `definitionVersion`, `recurrencePolicy` and `execution` are coordinated
79
- with that lane. A distinct execution ID identifies each admitted attempt; immutable
80
- capsule content identity must not collapse two otherwise identical work intents.
81
-
82
- Current records deliberately have no launch recipe or managed runtime-package claim.
83
- Full helper-policy planning, work-target setup, captured lifecycle adoption and
84
- explicit historical migration remain the next integration work. Native
85
- source-deletion tests prove preparation, curriculum/helper reads, explicit prospective
86
- approval and retained command execution—not those unfinished paths.
@@ -1,47 +0,0 @@
1
- ---
2
- type: Decision
3
- status: accepted
4
- title: Fresh-install-first Portable Souls rollout
5
- description: Prioritize fresh provisioning over automatic historical migration while preserving target architecture and user custody.
6
- timestamp: 2026-09-16
7
- ---
8
-
9
- # Fresh-install-first Portable Souls rollout
10
-
11
- The rollout can use fresh framework installations in controlled early deployments.
12
- General in-place migration and historical reconstruction are therefore **not on the
13
- current release-critical path**. This amends delivery sequencing in the
14
- [implementation handoff](2026-09-15-portable-souls-handoff.md), not the underlying
15
- [retention/evidence contract](2026-09-14-artifact-retention-contract.md).
16
-
17
- ## Priorities
18
-
19
- 1. Complete fresh source/workspace discovery and explicit deployment preparation.
20
- 2. Complete new-instance captured work placement, managed runtime/launch, lifecycle
21
- and independent-work consumers, using one resolver and retained authority.
22
- 3. Qualify real provider behavior, including private-first messaging, then release
23
- and deliberately provision the new deployment.
24
- 4. Deliver Desktop functional/UI parity after infrastructure deployment.
25
-
26
- Park additional historical conversion, reconstructed-record publication and
27
- migration-facing CLI development. Keep already delivered bounded partial/unknown
28
- evidence and refusal safeguards; do not delete them or call deferred work complete.
29
- Fresh setup should reuse existing discovery/preparation mechanisms, not introduce
30
- another config engine, registry or broad installer subsystem.
31
-
32
- ## Unchanged architecture and custody
33
-
34
- Source-complete souls, by-reference imports, two authorities/one resolver,
35
- immutable captured execution, exact approval, provider-neutral external knowledge
36
- and no new hosted control plane remain required. A clean install does not waive
37
- source-deletion/A-versus-B execution acceptance or actual provider/privacy checks.
38
-
39
- Fresh OATS state does not require deleting an existing project repository. It is
40
- not permission to wipe knowledge, native transcripts, unfinished work, identities
41
- or credentials. Use explicit fresh state/deployment locations; preserve old data
42
- and running sessions until replacement is qualified. Cleanup/retirement remains
43
- explicit and custody-preserving.
44
-
45
- If historical migration is revisited later, missing evidence stays partial/unknown;
46
- old trust or current files cannot be used to invent historical authority. This is
47
- a scoped deferral, not a second permanent resolution engine or a weakened contract.