@awebai/oats 0.29.3 → 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 (232) hide show
  1. package/README.md +12 -6
  2. package/bin/oats.mjs +203 -54
  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 +16 -9
  31. package/capabilities/oats-okf/lib/binding-wire.mjs +47 -15
  32. package/capabilities/oats-okf/lib/config.mjs +2 -1
  33. package/capabilities/oats-okf/lib/consult.mjs +26 -4
  34. package/capabilities/oats-okf/lib/harvest-switch.mjs +16 -3
  35. package/capabilities/oats-okf/lib/inspection.mjs +26 -7
  36. package/capabilities/oats-okf/lib/io.mjs +9 -1
  37. package/capabilities/oats-okf/lib/sources.mjs +34 -3
  38. package/capabilities/oats-okf/lib/stores.mjs +8 -6
  39. package/capabilities/oats-okf/lib/worker.mjs +7 -17
  40. package/capabilities/oats-okf/oats.json +6 -3
  41. package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +2 -2
  42. package/capabilities/oats-okf-harvest/oats.json +3 -3
  43. package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +6 -6
  44. package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +37 -16
  45. package/capabilities/oats-okf-maintenance/injects/maintainer.md +1 -1
  46. package/capabilities/oats-okf-maintenance/lib/provenance.mjs +6 -1
  47. package/capabilities/oats-okf-maintenance/oats.json +2 -2
  48. package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +17 -2
  49. package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +11 -23
  50. package/capabilities/oats-workspace-experts/injects/oats-experts.md +26 -0
  51. package/capabilities/oats-workspace-experts/oats.json +9 -0
  52. package/docs/capabilities.md +160 -171
  53. package/docs/capability-manifest.schema.json +7 -10
  54. package/docs/configuration.md +213 -64
  55. package/docs/design/2026-09-16-knowledge-capability-contract.md +36 -50
  56. package/docs/design/2026-09-23-workspace-module-contracts.md +377 -544
  57. package/docs/design/2026-09-26-okf-knowledge-operations.md +132 -357
  58. package/docs/design/2026-09-27-team-model-v2.md +116 -0
  59. package/docs/design/2026-09-28-automations-trust.md +38 -0
  60. package/docs/design/2026-09-28-soul-launch-preference.md +63 -0
  61. package/docs/design/HISTORY.md +65 -0
  62. package/docs/design/README.md +23 -54
  63. package/docs/desktop-cli-api.md +1787 -1777
  64. package/docs/desktop.md +30 -91
  65. package/docs/execution-targets.md +146 -292
  66. package/docs/first-team.md +31 -17
  67. package/docs/implementation.md +76 -288
  68. package/docs/integrations.md +118 -320
  69. package/docs/knowledge-capability-authoring.md +25 -52
  70. package/docs/knowledge-reference/acceptance.md +3 -3
  71. package/docs/knowledge-reference/adoption.md +1 -1
  72. package/docs/knowledge-reference/harvester.md +2 -2
  73. package/docs/knowledge-reference/package-craft.md +3 -3
  74. package/docs/knowledge-reference/provider-mapping.md +3 -6
  75. package/docs/knowledge-reference/reader-capture.md +3 -3
  76. package/docs/knowledge-theory.md +62 -166
  77. package/docs/knowledge.md +225 -404
  78. package/docs/layers.md +42 -97
  79. package/docs/oats-local.schema.json +58 -5
  80. package/docs/oats-membership.schema.json +1 -8
  81. package/docs/oats-package.schema.json +5 -5
  82. package/docs/oats-workspace.schema.json +8 -22
  83. package/docs/official-catalog.md +25 -28
  84. package/docs/packages.md +45 -63
  85. package/docs/plans/0.30-close-out.md +61 -0
  86. package/docs/release-lane.md +77 -0
  87. package/docs/release-notes/oats-framework-v1.1.3.md +10 -8
  88. package/docs/release-notes/v0.19.0.md +48 -147
  89. package/docs/release-notes/v0.19.1.md +2 -3
  90. package/docs/release-notes/v0.19.3.md +2 -15
  91. package/docs/release-notes/v0.20.0.md +0 -15
  92. package/docs/release-notes/v0.22.0.md +71 -138
  93. package/docs/release-notes/v0.22.1.md +42 -90
  94. package/docs/release-notes/v0.22.10.md +1 -1
  95. package/docs/release-notes/v0.22.11.md +1 -47
  96. package/docs/release-notes/v0.22.12.md +4 -13
  97. package/docs/release-notes/v0.22.13.md +1 -42
  98. package/docs/release-notes/v0.22.14.md +3 -11
  99. package/docs/release-notes/v0.22.15.md +1 -46
  100. package/docs/release-notes/v0.22.16.md +6 -8
  101. package/docs/release-notes/v0.22.18.md +1 -99
  102. package/docs/release-notes/v0.22.19.md +3 -14
  103. package/docs/release-notes/v0.22.2.md +6 -15
  104. package/docs/release-notes/v0.22.3.md +0 -1
  105. package/docs/release-notes/v0.22.4.md +1 -14
  106. package/docs/release-notes/v0.22.5.md +2 -12
  107. package/docs/release-notes/v0.22.6.md +0 -3
  108. package/docs/release-notes/v0.23.0.md +9 -25
  109. package/docs/release-notes/v0.23.1.md +9 -25
  110. package/docs/release-notes/v0.23.2.md +2 -4
  111. package/docs/release-notes/v0.24.0.md +56 -97
  112. package/docs/release-notes/v0.24.1.md +7 -11
  113. package/docs/release-notes/v0.24.10.md +34 -45
  114. package/docs/release-notes/v0.24.11.md +12 -20
  115. package/docs/release-notes/v0.24.12.md +35 -48
  116. package/docs/release-notes/v0.24.13.md +34 -41
  117. package/docs/release-notes/v0.24.2.md +9 -13
  118. package/docs/release-notes/v0.24.3.md +7 -11
  119. package/docs/release-notes/v0.24.4.md +6 -6
  120. package/docs/release-notes/v0.24.5.md +6 -10
  121. package/docs/release-notes/v0.24.6.md +2 -5
  122. package/docs/release-notes/v0.24.7.md +46 -75
  123. package/docs/release-notes/v0.24.8.md +58 -96
  124. package/docs/release-notes/v0.24.9.md +38 -54
  125. package/docs/release-notes/v0.25.0.md +59 -76
  126. package/docs/release-notes/v0.25.1.md +57 -81
  127. package/docs/release-notes/v0.25.2.md +51 -70
  128. package/docs/release-notes/v0.25.3.md +11 -13
  129. package/docs/release-notes/v0.25.4.md +9 -13
  130. package/docs/release-notes/v0.25.5.md +3 -5
  131. package/docs/release-notes/v0.25.6.md +20 -29
  132. package/docs/release-notes/v0.25.7.md +5 -7
  133. package/docs/release-notes/v0.25.8.md +26 -39
  134. package/docs/release-notes/v0.26.0.md +175 -646
  135. package/docs/release-notes/v0.27.0.md +4 -5
  136. package/docs/release-notes/v0.27.1.md +4 -6
  137. package/docs/release-notes/v0.27.2.md +1 -1
  138. package/docs/release-notes/v0.28.0.md +57 -124
  139. package/docs/release-notes/v0.29.0.md +89 -208
  140. package/docs/release-notes/v0.29.1.md +1 -1
  141. package/docs/release-notes/v0.29.2.md +3 -4
  142. package/docs/release-notes/v0.29.4.md +90 -0
  143. package/docs/release-notes/v0.30.0.md +205 -0
  144. package/docs/schedules.md +280 -349
  145. package/docs/servers.md +99 -117
  146. package/docs/soul.schema.json +2 -9
  147. package/docs/souls-and-instances.md +145 -158
  148. package/docs/workspaces.md +132 -215
  149. package/lib/automations.mjs +28 -6
  150. package/lib/core.mjs +226 -74
  151. package/lib/instance-events.mjs +1 -1
  152. package/lib/instance-inspect.mjs +109 -34
  153. package/lib/instance-lifecycle.mjs +14 -1
  154. package/lib/instance-resolution.mjs +26 -27
  155. package/lib/launch-preference.mjs +87 -0
  156. package/lib/materialize.mjs +3 -3
  157. package/lib/packages.mjs +2 -5
  158. package/lib/resolve.mjs +29 -87
  159. package/lib/schedule.mjs +32 -18
  160. package/lib/teams-verbs.mjs +195 -0
  161. package/lib/teams.mjs +190 -0
  162. package/lib/triggers.mjs +53 -17
  163. package/lib/workspace.mjs +54 -147
  164. package/package-catalog.json +9 -15
  165. package/package.json +1 -1
  166. package/skills/oats-getting-started/SKILL.md +25 -13
  167. package/capabilities/oats-review/injects/review.md +0 -69
  168. package/capabilities/oats-review/oats.json +0 -10
  169. package/capabilities/oats-review/skills/code-review/SKILL.md +0 -44
  170. package/capabilities/oats-review/skills/security-review/SKILL.md +0 -59
  171. package/docs/conventions.md +0 -90
  172. package/docs/design/2026-09-07-architecture-reassessment.md +0 -131
  173. package/docs/design/2026-09-07-desktop-souls-capabilities.md +0 -50
  174. package/docs/design/2026-09-07-mobile-agent-management-proposal.md +0 -228
  175. package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +0 -558
  176. package/docs/design/2026-09-13-knowledge-and-memory-direction.md +0 -744
  177. package/docs/design/2026-09-13-knowledge-implementation.md +0 -127
  178. package/docs/design/2026-09-13-knowledge-location-contract.md +0 -340
  179. package/docs/design/2026-09-14-artifact-retention-contract.md +0 -190
  180. package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +0 -708
  181. package/docs/design/2026-09-14-portable-souls-contract-amendments.md +0 -85
  182. package/docs/design/2026-09-14-portable-souls-explainer.md +0 -750
  183. package/docs/design/2026-09-15-captured-dispatch.md +0 -127
  184. package/docs/design/2026-09-15-captured-resolution-records.md +0 -143
  185. package/docs/design/2026-09-15-package-preparation.md +0 -100
  186. package/docs/design/2026-09-15-portable-data-contract.md +0 -121
  187. package/docs/design/2026-09-15-portable-declarations.md +0 -189
  188. package/docs/design/2026-09-15-portable-souls-handoff.md +0 -150
  189. package/docs/design/2026-09-15-portable-souls-implementation.md +0 -417
  190. package/docs/design/2026-09-15-selection-lock-and-approval.md +0 -122
  191. package/docs/design/2026-09-15-source-observation.md +0 -119
  192. package/docs/design/2026-09-16-captured-admission.md +0 -77
  193. package/docs/design/2026-09-16-captured-helper-dispatch.md +0 -105
  194. package/docs/design/2026-09-16-captured-launch-inputs.md +0 -42
  195. package/docs/design/2026-09-16-command-profile-preparation.md +0 -86
  196. package/docs/design/2026-09-16-fresh-install-first-rollout.md +0 -47
  197. package/docs/design/2026-09-16-fresh-operator-walkthrough.md +0 -282
  198. package/docs/design/2026-09-16-messaging-capability-contract.md +0 -59
  199. package/docs/design/2026-09-16-portable-migration-evidence.md +0 -158
  200. package/docs/design/2026-09-16-portable-onboarding.md +0 -179
  201. package/docs/design/2026-09-16-prepare-request-transport.md +0 -26
  202. package/docs/design/2026-09-16-provider-binding-codecs.md +0 -98
  203. package/docs/design/2026-09-16-provider-binding-wire.md +0 -274
  204. package/docs/design/2026-09-17-capability-helper-input-contract.md +0 -95
  205. package/docs/design/2026-09-17-captured-backend-parity.md +0 -53
  206. package/docs/design/2026-09-17-captured-native-start.md +0 -58
  207. package/docs/design/2026-09-17-portable-boundary-hookup.md +0 -19
  208. package/docs/design/2026-09-17-portable-boundary-resources.md +0 -52
  209. package/docs/design/2026-09-17-public-captured-start.md +0 -108
  210. package/docs/design/2026-09-17-public-prepare-request.md +0 -90
  211. package/docs/design/2026-09-18-captured-pi-host.md +0 -205
  212. package/docs/design/2026-09-18-first-cut-release-checklist.md +0 -131
  213. package/docs/design/2026-09-18-herdr-protocol-compatibility.md +0 -60
  214. package/docs/design/2026-09-20-redesign-program-board.md +0 -142
  215. package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +0 -289
  216. package/docs/design/2026-09-20-workspace-onboarding-public.md +0 -207
  217. package/docs/design/2026-09-22-desktop-parity-seams.md +0 -58
  218. package/docs/design/2026-09-23-simplified-workspace-model.md +0 -711
  219. package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +0 -65
  220. package/docs/design/2026-09-24-desktop-phase-f-boundary.md +0 -242
  221. package/docs/design/2026-09-24-phase-d-plan.md +0 -305
  222. package/docs/design/2026-09-25-teams-contract.md +0 -258
  223. package/docs/design/2026-09-26-desktop-design-brief-architecture.md +0 -241
  224. package/docs/design/desktop-ux-plan.md +0 -362
  225. package/docs/design/launch-configurations.md +0 -168
  226. package/docs/design/okf-mirror-provenance.md +0 -105
  227. package/docs/design/operations-contract.md +0 -141
  228. package/docs/oats-member.schema.json +0 -38
  229. package/skills/integration-authoring/SKILL.md +0 -84
  230. package/skills/oats-support/SKILL.md +0 -79
  231. package/skills/skill-craft/SKILL.md +0 -109
  232. package/skills/soul-craft/SKILL.md +0 -116
@@ -1,127 +0,0 @@
1
- # Captured dispatch integration
2
-
3
- This connects the record/package/source primitives to the exact action loader.
4
- Core exposes `loadCapturedDispatch`, and the CLI supports exact captured inspect,
5
- approval and command invocation. Lifecycle/provider adoption and complete
6
- preparation/migration are still in progress.
7
-
8
- ## Capture effective setting defaults, do not invent them on load
9
-
10
- `manifest-settings.mjs` derives setting defaults from the exact selected capability
11
- manifest bytes. Their provenance names an artifact-owned document: exact artifact
12
- reference, manifest path, raw-byte integrity and JSON pointer to the default.
13
- This also works for catalog/local sources without fabricating an upstream Git URL
14
- or a self-referential resolution ID.
15
-
16
- `manifest-default` is the intrinsic field-default candidate, below workspace, soul,
17
- adoption and operator choices in the SAME resolver. It is not a third policy authority.
18
- Hard requirements still constrain it. Explicit null, false and empty values survive;
19
- overridden defaults remain considered inputs with their exact witness. The shared
20
- schema consumes the runtime candidate/Origin enums.
21
-
22
- Preparation must call `captureManifestSettings` with every selected manifest before
23
- publishing the record. Every effective setting uses its canonical per-capability
24
- choice key. Loaded records verify the retained default value and artifact/file/pointer
25
- witness, even when overridden. Verification also checks every recorded intrinsic
26
- candidate against those exact selected manifests, including choices absent from the
27
- dispatch settings map; fabricated defaults are not valid considered inputs. Missing
28
- or misdirected settings are incomplete captures, not an invitation to consult the
29
- current manifest/configuration and fill them later.
30
-
31
- Two focused default tests and a real retained-record regression cover priority,
32
- nullable/false/empty/prototype-named data, complete definition coverage, original
33
- manifest ownership and refusal of omitted witnesses/noncanonical references.
34
-
35
- ## Public captured command ABI
36
-
37
- Builds advertise `capturedDispatchApi: 1` and their supported actions in
38
- `oats version --json`. Both selectors are required, with an absolute deployment
39
- and the complete `sha256-…` resolution ID; they can precede or follow the command.
40
-
41
- ```text
42
- oats inspect --deployment /deployment --resolution sha256-… --json
43
- oats inspect --deployment /deployment --resolution sha256-… --composition --json
44
- oats trust example.action --deployment /deployment --resolution sha256-… --json
45
- oats trust example.action --deployment /deployment --artifact-set sha256-… --json
46
- oats example-action show --deployment /deployment --resolution sha256-… -- --detail
47
- oats operation run knowledge:view --deployment /deployment --resolution sha256-… --home /instance --arg mode=full --json
48
- oats spawn expert --deployment /deployment --resolution sha256-… --home /fresh/instances/expert-1 --no-launch --json
49
- ```
50
-
51
- The operation form loads the selected provider and operation declaration from the
52
- exact record. Home-context operations additionally require the target home's stored
53
- `executionBinding` to match the deployment/resolution pair; scope operations run in
54
- the explicit deployment and reject a home. Both routes use current exact approval,
55
- provider readiness, retained settings/resources and the private invocation binding
56
- snapshot. They preserve the existing strict JSON-v1 operation receipt and unconfirmed-
57
- effects semantics without consulting a current soul, config, lock or manifest. The
58
- owned operation process uses non-ignorable `SIGKILL` at the bounded timeout. If the
59
- provider answered but private snapshot cleanup cannot be confirmed, the command fails
60
- as unconfirmed while retaining the observed provider envelope and cleanup diagnostic;
61
- it never reports ordinary pre-execution failure or drops the possible effects.
62
-
63
- The artifact-set variant approves exact prospective software BEFORE a provider codec
64
- can complete a resolution. It requires a verified v3 artifact set, never a fabricated
65
- partial resolution or current selected-ID lookup, and supports trust only.
66
-
67
- The last command passes `--detail` to the capability. Tokens after `--` are never
68
- interpreted as OATS selectors. Duplicate/partial pairs and mixed legacy context
69
- selectors refuse. Explicit pairs replace inherited captured selectors as a whole.
70
- Child commands receive `OATS_DEPLOYMENT`/`OATS_RESOLUTION` plus their captured settings;
71
- invoking-agent OATS/PI identity variables are removed. Host credentials/configuration
72
- outside those identity namespaces are not copied or reconfigured. Dispatch uses the
73
- current absolute Node executable and the exact retained, inventoried script.
74
-
75
- An inherited pair propagates to subsequent CLI invocations. Unsupported captured
76
- kernel commands refuse rather than use current configuration; host `version` probing
77
- remains available under inherited context. Existing uncaptured invocations are unchanged
78
- pending explicit lifecycle/migration cutover. Trust is an explicit operator action;
79
- inspect/help never execute capability code. Provider binding qualification and captured
80
- operation CLI support are implemented; captured spawn/lifecycle CLI support is not
81
- implied by the advertised actions.
82
-
83
- ## Implemented action-loading boundary
84
-
85
- `loadCapturedDispatch({deployment, resolution, action})` verifies exact retained
86
- inputs, applies core's strict full manifest loader/self-containment/compatibility
87
- checks, and reconstructs captured settings without consulting current config.
88
- It reads current exact-artifact approvals separately, sharing evaluation with
89
- approval diagnostics. No provider payload code runs before approval.
90
-
91
- Actions are inspect, compose, command (capability or namespace), operation (slot
92
- and name), and hook (capability and event). Command/operation/hook loading requires
93
- the exact action declaration, approved target artifact, host requirements, and an
94
- inventoried retained executable file. Fundamental provider bindings remain blocked
95
- until their qualification adapter is integrated; choices are not enrollment.
96
- Unsupported actions and unverified historical reconstruction refuse, never fall back.
97
-
98
- `dispatch.composition` records canonical soul body, ordered instruction references,
99
- work mode, named skills, and explicit injection omission/override choices. Launch
100
- recipes require this projection. Non-launch command records may omit it; compose
101
- then refuses. The common formatter is shared with existing preparation, while the
102
- captured path reads only verified retained resources. Body ownership, duplicate
103
- sources/skill names, override references and disabled choices are checked. Complete
104
- manifest-to-curriculum coverage and lifecycle materialization remain integration work.
105
-
106
- The actual complete manifest codec and both applicable launch checks (recipe plus
107
- configuration, including reserved environment/NUL rules) are supplied by core.
108
- This static validation does not qualify launch: launch action adoption and mutable
109
- host/provider gates are still separate work. No current lock/config/marketplace
110
- fallback and no inferred executable permission from diagnostic booleans.
111
-
112
- Core now also exposes a bounded scaffold-only adapter for a preselected explicit
113
- home. It requires exact executable approvals and retained `directory` work mode,
114
- then materializes the retained soul/helper link, composed instructions, copied skill
115
- trees, private directory work and `instance.json` execution binding/responsible-human
116
- metadata. `instance.json` explicitly records `scaffolded-hooks-pending`; no launch,
117
- non-directory work-target setup or roster discovery is implied. The public captured
118
- spawn route currently requires an explicit absolute new home and `--no-launch`; it does
119
- not infer placement, work or launch inputs. A separate exact activation step derives
120
- any source receipt from the record and runs the captured hook preflight/runner. Before
121
- hooks it publishes a durable captured-home reference outside the source/home, so source
122
- deletion cannot hide an uncertain lifecycle obligation. Success records
123
- `spawned-launch-pending`; required or uncertain hook failure keeps the home, hook metadata
124
- and `spawn-failed-cleanup-required` status in both metadata and the index rather than
125
- deleting possible external effects. The scaffold adapter creates the home exclusively and rolls
126
- back only its inode-owned home on pre-hook failure. Other work modes refuse until their
127
- work-target inputs are retained.
@@ -1,143 +0,0 @@
1
- # Captured resolution records — implementation boundary
2
-
3
- This checkpoint implements versioned record-shape validation, immutable publication
4
- and exact retained-input verification. It does **not** yet wire public preparation,
5
- lock v3, executable approval, provider readiness, lifecycle dispatch or schedules.
6
- The [binding retention contract](2026-09-14-artifact-retention-contract.md) remains
7
- the authority for that subsequent consumer migration.
8
-
9
- ## Record and address
10
-
11
- `lib/resolution-shape.mjs` is the executable wire validator. The structural schema
12
- is `docs/captured-resolution.schema.json`, using `docs/portable.schema.json` shared
13
- definitions; semantic and filesystem checks remain mandatory. A reference is
14
- `{ schemaVersion: 1, id: "sha256-<64 lowercase hex>" }`. The ID hashes the complete
15
- canonical JSON record including its final LF, with no self-ID field. Records live at:
16
-
17
- ```text
18
- <explicit-deployment>/.agents/resolutions/<id>.json
19
- ```
20
-
21
- They are outside instance homes and independent of today's selection lock. Each
22
- record has these closed top-level fields:
23
-
24
- ```text
25
- schemaVersion, capture, subject, context, artifacts, choices, bindings,
26
- messagingChoice, resources, resourceBundles, dispatch, helpers, evidence
27
- ```
28
-
29
- `capture` is prepared or reconstructed; partial/unknown evidence is not a complete
30
- record. Reconstructed wire data requires evidence. The current publication API
31
- accepts only newly prepared records: historical publication remains explicitly
32
- migration-required until the evidence/migration verifier is implemented. This is
33
- not a claim that old instances were reconstructed.
34
-
35
- ## Source and artifact structure
36
-
37
- A persistent subject has a soul selection containing identity, revision, alias,
38
- sourceArtifact, definition and projection.roots. Qualified identity and artifact
39
- identity must agree. The definition lies inside its exported path and retained
40
- projection. Roots are a canonically ordered set.
41
-
42
- A Git observation carries its matching repository identity, canonical remote,
43
- selector, exact commit and provenance. A local observation names an explicit local
44
- source and the witnessed projection integrity. For a local working snapshot of a
45
- Git soul it also carries the matching repository identity; it does not pretend the
46
- local bytes are a clean Git commit. The same identity/digest can be retained while
47
- different records preserve different observations.
48
-
49
- A helper subject contains provider, definition and name. Its provider must be a
50
- selected capability, and its definition belongs to that provider. Verification
51
- requires the helper to be exported by the retained manifest and checks the retained
52
- name and canonical AGENTS.md/CLAUDE.md alias. It is not a persistent-import shortcut.
53
-
54
- The embedded artifact set has schemaVersion, package rows and capability rows.
55
- Package rows carry normalized source/path, exact commit or local witness, version,
56
- versioned payload integrity and dependencies. Dependency edges are own-key checked,
57
- unique/canonically ordered, and traversed with a bounded iterative cycle check.
58
- Capability rows carry their exact artifact reference and package/projection or
59
- honest local-capability provenance. Verification checks installation-provenance
60
- fields against these captured rows, never today's lock.
61
-
62
- ## Choices, bindings and managed resources
63
-
64
- Choices retain value, selectedBy, constraints and considered candidates. Candidates
65
- also retain their authority kind so replay does not guess precedence from a display
66
- origin. The record validator replays them through the SAME pure choice resolver and
67
- requires an identical satisfied result. It does not add a second policy algorithm.
68
- Origins identify source/deployment/operator/record/artifact documents and JSON pointers;
69
- source witnesses include exact revision and raw-byte document integrity. Manifest defaults
70
- name their exact selected artifact, oats.json bytes and default pointer, and are retained
71
- as lowest-priority candidates. Missing defaults or noncanonical setting references refuse;
72
- loading never invents a default. See `2026-09-15-captured-dispatch.md`.
73
-
74
- Bindings identify a selected fundamental provider, payload contract/version,
75
- provider-owned payload, credential references and provenance. The kernel imposes no
76
- OKF payload model. Credential entries name environment/provider lookups, never
77
- literal credential values. Payload classification and provider readiness remain the
78
- provider/preparation boundary; arbitrary JSON passing this shape is not proof of
79
- correct or non-secret service configuration.
80
-
81
- Resources refer to a selected capability, source or explicitly selected resource
82
- bundle and a contained path/kind. Dispatch holds exact manifest references,
83
- per-capability/per-setting choice-key maps, a launch recipe, managed runtime-package
84
- references, host requirements and work-target inputs. Manifests correspond exactly
85
- to selected capability IDs; runtime/work-target references must be in the inventory.
86
-
87
- The input verifier checks source hard capability/provider/settings requirements
88
- against captured selections and provenance. `soul-constraints.mjs` derives these
89
- hard facts for both preparation and verification; their equality/presence constraint
90
- and retained-definition document/pointer must remain in the captured choices.
91
- An equal effective value with an operator-only origin is not a substitute.
92
-
93
- Explicit extra source resources and repo-relative package roots must be present in
94
- the projection. A repo: package's versioned payload integrity must match that root
95
- inside the retained source snapshot, not merely the original local pathname or a
96
- claimed commit. Missing required source or helper inputs refuse before publication.
97
-
98
- Launch/host structures retain their existing codec boundary. Full manifest and
99
- launch-contract compilation belongs to the sole preparation/dispatch adapter; this
100
- storage checkpoint is not permission to execute a merely shape-valid recipe.
101
-
102
- ## Private messaging choices are not membership
103
-
104
- Disabled messaging has no private/wider tuple. Enabled messaging records the
105
- selected provider, provider-resolvable human reference, matching workspace or
106
- explicit standalone context, canonically ordered chosen wider teams and provenance.
107
- The tuple is an intent, not a certificate or a privacy assertion. Mutable credentials,
108
- live membership and conversation-history authorization remain outside the software
109
- pin and require the named provider owner's qualification.
110
-
111
- ## Publication and verification
112
-
113
- `commitCapturedResolution` validates the shape and verifies retained managed inputs,
114
- then writes a private candidate and atomically hard-links it into the addressed
115
- namespace without replacing an existing entry. The managed ignore is published
116
- before payloads. Matching existing bytes are reused; damaged entries refuse without
117
- repair. Cleanup is confined to owned staging and preserves primary failures.
118
-
119
- `readCapturedResolution` uses a bounded, descriptor-backed read, requires canonical
120
- bytes and the matching address, then validates shape. It checks the hash before
121
- following references. `verifyResolutionInputs` verifies the selected trees, source
122
- projection/canonical aliases, hard software requirements, resource kinds/containment,
123
- manifest identity/layer/provenance and helper definitions. A helper graph has explicit
124
- active/visited state and record/depth/edge/aggregate-byte budgets. Shared nodes and
125
- trees are cached only within that verification operation.
126
-
127
- No read falls back to current config, current lock, source checkout, catalog or
128
- network. Exact-input verification does not grant executable trust, prove enrollment,
129
- freeze external state or establish host readiness. The eventual action loader must
130
- perform those current action-specific checks through the supported contracts.
131
-
132
- ## Evidence and following work
133
-
134
- Focused tests cover canonical source/revision/alias structure; constraint replay;
135
- embedded graph/ownership errors; provider opacity/credential references; immutable
136
- A/B record resources after original-source removal and poisoned ambient config/lock;
137
- corrupt-record refusal; and missing requirements/helpers before publication.
138
-
139
- These are record/input tests, NOT the end-to-end old-instance/queued-job lifecycle
140
- acceptance. The shared structural schemas and private lock/approval primitives are
141
- implemented, but public selection-lock integration, complete source-aware preparation,
142
- exact action dispatch, managed-runtime authorization,
143
- provider payload qualification and explicit historical migration remain separate gates.
@@ -1,100 +0,0 @@
1
- # Package preparation integration
2
-
3
- The source/data/discovery foundation is on main. This next increment reuses the
4
- existing package engine instead of implementing an unrelated portable installer.
5
- Public preparation/dispatch/migration is not complete at this checkpoint.
6
-
7
- ## Shared materialization
8
-
9
- `lib/package-materialization.mjs:createCapabilityMaterializer` is now the single
10
- materializer called by existing acquisition and exact restore. The kernel supplies
11
- its existing runtime-dependency, declared-resource containment, dependency-link
12
- containment and native-binary checks. The module has no core import, source resolver,
13
- current lock lookup, approval decision or activation side effect.
14
-
15
- The order remains: production dependency materialization with no lifecycle scripts;
16
- complete containment/native checks; projection into staging; deterministic v1
17
- installation provenance; integrity. Published flat capability roots still copy
18
- rather than move so later template reads keep their source. Dedicated roots move
19
- as before. Links and actual modes are retained.
20
-
21
- `.oats-installation.json` remains exactly the same ordered two-space JSON, final LF
22
- and mode0644. It records the supplied true source/commit/package path, never a writer
23
- kernel version or a fabricated temporary local source. The legacy integrity result
24
- remains literal compatibility evidence; new preparation calculates the explicit
25
- new-format digest over the same resulting tree. No approval transfers between formats.
26
-
27
- Materialization also rejects aliased capability roots and source-controlled links,
28
- directories, executable entries or case aliases at the reserved provenance path BEFORE
29
- dependency work. Generated provenance replaces its own entry atomically; it never writes
30
- through an authored link or shared inode. Valid v1 bytes remain unchanged. A temporary
31
- fixture reproduced an inherited acquisition overwrite through a provenance symlink
32
- before this correction, then verified refusal and preservation of the unrelated target.
33
-
34
- Whole-closure platform-invariance preflight remains the caller's responsibility and
35
- must occur BEFORE any sibling npm materialization. The reusable callback factory does
36
- not replace that transaction-level requirement or the full manifest codec.
37
-
38
- One focused test pins exact provenance bytes, modes, links and absence of selection/
39
- approval writes. Existing acquisition, integrity-drift, restore and no-install-script
40
- regressions plus the scaffold-only dependency probe exercise the core adapter.
41
-
42
- ## Shared staged closure
43
-
44
- `lib/package-closure.mjs:resolvePackageClosure` now owns the one bounded dependency
45
- walk, identity/source-key collision checks, cycle detection and dependency-first
46
- ordering. Existing acquisition delegates to it through its existing source, manifest,
47
- compatibility and literal legacy-digest adapters. Source adapters must provide explicit
48
- owned staging and cleanup; repeated edges cannot discard a reused authoritative root.
49
-
50
- The default limits are 256 unique package identities, 64 dependency levels and 1024
51
- source requests. These are resource guards, not another version solver. The engine
52
- never installs, activates, writes a lock, grants approval or calls a catalog on its own.
53
- Two focused graph tests and existing acquisition/closure/restore/incremental/platform
54
- preflight regressions verify the extraction. The legacy source parser remains explicit
55
- in the old adapter while the new preparation adapter uses the shared portable grammar.
56
-
57
- Package dependencies in new preparation use `source-spec.mjs:parsePackageDependency3`:
58
- pinned Git shorthand/raw transports share the portable parser, catalog convenience is
59
- explicitly dependency-only, and local dependencies need an explicit base/authorization.
60
- No catalog nickname becomes an intrinsic soul source and no remote dependency inherits
61
- cwd or HOME. The legacy adapter retains its literal older parser until cutover.
62
-
63
- ## Portable package adapter
64
-
65
- `lib/portable-package-preparation.mjs:preparePackageArtifacts` connects the shared
66
- walker/materializer to frozen repository observations. It verifies required exports,
67
- uses one staged source per normalized package request, binds repo: dependencies to
68
- their declaring snapshot, applies whole-closure platform checks before materialization,
69
- and retains new-format artifacts with their real source/commit/path provenance.
70
- The existing full package/capability loader accepts an explicit strict-ingress option:
71
- bounded strict bytes are read BEFORE either package or capability semantic validation,
72
- not as a late post-check. Legacy default readers keep their existing interpretation.
73
-
74
- Local inputs require explicit authorization and a clean selected package subtree.
75
- A bounded no-follow preflight refuses known deployment/auth/instance roots at EVERY
76
- depth before copying, and excludes nested Git metadata. Source identity/stat witnesses
77
- are checked around copying. Git and local sources share the same guarded projection
78
- writer, including exclusive leaf creation, parent-alias protection and exact final names.
79
- Remote package dependencies cannot borrow adopter-local paths merely because another
80
- root request was local. Owned staging cleanup uses the shared safe read-only-directory
81
- cleanup, never changes original sources or retained artifacts.
82
-
83
- Newly obtained observations join the same selector/commit cache as caller-supplied ones.
84
- A repo: dependency reuses a snapshot already obtained by this preparation operation;
85
- it does not require another upstream fetch to serve an already-known commit.
86
-
87
- The result contains the acquired artifact set and root package IDs plus owned cleanup.
88
- It writes neither current selection locks nor approvals and activates nothing. Complete
89
- composition must still select active capabilities, classify/resolve provider bindings,
90
- retain source/runtime resources, commit the full record and perform selection CAS.
91
- Four focused tests cover original local provenance/source deletion, real Git A plus
92
- repo dependencies without a second observation after upstream B, nested private-state
93
- refusal, nested Git exclusion and bounded capability ingress before semantic validation.
94
-
95
- ## Following integration
96
-
97
- Complete the composition transaction and public consumers using this adapter. Portable
98
- preparation must resolve each selector once, retain exact artifacts and records, and
99
- update only its mutable selection snapshot. Existing old-format readers
100
- remain literal evidence/migration paths, not ambient fallback for captured dispatch.
@@ -1,121 +0,0 @@
1
- # Portable data and digest contract
2
-
3
- Status: implementation foundation for the accepted Portable Souls architecture.
4
- These codecs do not yet change installed locks, approvals or lifecycle dispatch.
5
- The [retention contract](2026-09-14-artifact-retention-contract.md) and
6
- [binding decisions](2026-09-15-portable-souls-handoff.md) govern the consumer migration.
7
-
8
- ## Explicit integrity identity
9
-
10
- An integrity is `{ format, value }`, with a supported format name and the complete
11
- `sha256-<64 lowercase hexadecimal digits>`. Format is part of identity and approval;
12
- matching bare hex values from different formats cannot transfer trust.
13
-
14
- | Format | Meaning |
15
- | --- | --- |
16
- | `oats.tree-exec.v1` | Complete retained tree, including materialized dependencies/provenance, with owner-execute semantics |
17
- | `oats.package-payload-exec.v1` | Same encoding with the existing package exclusions: root oats-lock.json and all node_modules entries |
18
- | `oats.json.v1` | Canonical UTF-8 JSON including exactly one final LF; no implicit hash prefix |
19
- | `oats.bytes.v1` | Exact raw descriptor bytes; not canonical JSON or a tree |
20
-
21
- Existing legacy digest functions and their exclusions/order/framing remain literal
22
- in their current modules. They are not renamed to the new format or interpreted
23
- as executable-mode evidence. The new format fixes both the missing executable flag
24
- and the legacy ambiguity between arbitrary binary content and entry delimiters.
25
- Computing a new digest does not prove historical bytes or grant approval.
26
-
27
- ## New tree encoding
28
-
29
- The stream begins with the UTF-8 format name and one NUL. Entries are sorted by
30
- UTF-8 bytes of their complete POSIX-relative paths, not locale or insertion order.
31
- `L(bytes)` is an unsigned 64-bit big-endian byte count followed by those exact bytes.
32
-
33
- ```text
34
- file: F || L(path) || X || L(content)
35
- symlink: S || L(path) || L(literal target)
36
- ```
37
-
38
- F/S are single ASCII bytes. X is one binary byte, 0 or 1, from
39
- `(mode & 0o100) !== 0`. Git and local-path materializations use this same rule.
40
- Group/other execute bits, other permission bits, directory modes and empty
41
- directories are outside identity. Copy/retention still preserves actual modes.
42
- Links are not followed. Unsupported entries and invalid UTF-8 names/targets refuse;
43
- there is no lossy normalization. Retention separately validates containment.
44
-
45
- File reads use a descriptor and compare observed metadata before/after reading.
46
- This is not a hostile-host or atomic whole-filesystem snapshot guarantee.
47
- Resource limits bound traversal and bytes.
48
-
49
- ## Canonical records and strict ingress
50
-
51
- `lib/portable-values.mjs` provides the shared canonical encoder and strict JSON
52
- reader. The declaration decoder must use this reader for JSON, rather than another
53
- permissive JSON.parse entry point.
54
-
55
- - Emit object keys directly in UTF-8 byte order; rebuilding an object and calling
56
- JSON.stringify would reorder integer-looking keys.
57
- - Preserve array order. Field-specific set validation/ordering belongs to the
58
- shared wire schema, not arbitrary provider payload normalization.
59
- - Use ECMAScript primitive JSON serialization for finite numbers, including -0→0.
60
- - Accept Unicode-scalar strings only. Invalid UTF-8 and escaped lone surrogates fail.
61
- - Reject duplicate decoded JSON keys, including alternate escape spellings.
62
- - Produce null-prototype decoded maps; consumers still use explicit own-key checks.
63
- - Refuse cycles, sparse/extended arrays, unsupported prototypes, non-JSON values,
64
- symbols and accessor/non-enumerable properties. Do not invoke caller getters or
65
- toJSON. This is a data contract, not a sandbox for hostile JavaScript proxies.
66
- - Apply byte/depth/entry limits. The canonical output ends with exactly one LF.
67
-
68
- Record IDs, identity keys, source-request keys and artifact-set keys must use this
69
- one encoding. Validate a stored record's content address before following its
70
- references. Complete/evidence separation, graph budgets and semantic cross-reference
71
- validation are the next record-store layer, not claims supplied by a digest alone.
72
-
73
- ## Shared portable source grammar
74
-
75
- `lib/source-spec.mjs` is the pure new-format codec. It neither reads the filesystem
76
- nor acquires anything, supplies credentials, observes hosting-provider identity,
77
- or grants trust. It is not wired into legacy CLI/lock readers at this checkpoint.
78
-
79
- - Intrinsic declarations use exactly `git:`, `repo:` or `path:`.
80
- - Git declarations require an explicit revision selector; omitted package fragments
81
- use the documented `oats-package` default. `#.` and an empty fragment select root.
82
- - The normalized source and canonical package path remain separate in lock rows.
83
- - SSH user@host is authority, not a selector. Slash-bearing refs remain intact;
84
- ambiguous additional delimiters refuse rather than select another repository.
85
- - Shorthand host/repository locators expand through the documented HTTPS/.git
86
- convention. Explicit repository endpoints retain their path; no .git suffix is
87
- invented for an explicit SSH/HTTPS/file endpoint.
88
- - Repository/import/knowledge locators have no package-root default, ref or fragment;
89
- the surrounding declaration supplies revision and exported path separately.
90
- - `repo:` is a repository-root relation at the captured soul revision, not a local
91
- path and not a new persisted package transport. Containment is also checked later.
92
- - `path:` acquisition requires explicit local adoption authorization; relative local
93
- paths require an explicit absolute authoring base. No cwd or HOME inference.
94
- - New-format locked values must already be canonical; reading does not repair them.
95
- Catalog convenience remains valid for package locks/CLI, never as the sole source
96
- of an intrinsic portable soul requirement. Captured provenance must preserve the
97
- actual resolution; a catalog ID is not immutable publisher authority.
98
- - Existing legacy-format parsers remain literal evidence readers until their explicit
99
- migration. Consumer integration must route new values through this codec rather
100
- than adding private URL/ref splitters.
101
-
102
- ## New-format retained trees
103
-
104
- `lib/portable-artifacts.mjs` stores new-format capability, soul-source and other
105
- managed-resource trees under the explicit deployment. Capability namespaces use
106
- validated IDs; soul namespaces use the canonical hash of the supplied qualified
107
- identity, not an adopter alias; resource namespaces are content-addressed.
108
- The source/record layer must establish that identity and its source witness.
109
- Storage alone does not certify repository identity or a complete soul projection.
110
-
111
- New revisions live under a `tree-exec-v1` path component; legacy artifact addresses
112
- remain distinct. Existing relative-link containment, same-parent tree publication
113
- and atomic managed-ignore publication are reused. Source and copied bytes are
114
- verified; damaged entries refuse without repair; valid identical trees are reused.
115
- Managed directory symlinks refuse, while an explicitly selected deployment alias
116
- may resolve to its real directory. No current lock, source checkout or network is
117
- consulted when verifying a retained tree.
118
-
119
- A verification receipt establishes tree bytes/containment only. It does not grant
120
- trust, prove all required resources are present, resolve provider bindings or
121
- implement lifecycle dispatch. Those are the captured-resolution layer's checks.