@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
package/docs/layers.md CHANGED
@@ -1,116 +1,61 @@
1
1
  # The OATS contracts
2
2
 
3
- OATS supplies common contracts; capabilities supply behavior. The current architecture combines [Git workspaces and portable sources](workspaces.md), retained instance execution and provider-owned knowledge, messaging and tasks.
4
-
5
- This page is the current conceptual map, not a replacement for the versioned schemas or a claim that every provider/profile is implemented. Use [release scope](release-notes/v0.24.0.md) and actual readiness results. Earlier contract inventories remain in [Git history](https://github.com/awebai/oats/blob/249899a9a1ae865cc640fbc52b3585765fba473f/docs/layers.md); dated designs are navigated through the [design index](design/README.md).
6
-
7
- ## How the pieces fit
3
+ OATS supplies common contracts; capabilities supply behaviour. The kernel
4
+ discovers souls and capabilities, resolves what each soul gets, copies it into
5
+ an instance home and runs the lifecycle; it implements no knowledge, messaging
6
+ or task model of its own.
8
7
 
9
8
  ```text
10
- Git workspace definition
11
- ├── admits repositories with reciprocal backlinks
12
- ├── supplies bounded defaults and provider declarations
13
- └── imports exported souls by source reference and revision
14
- └── soul declares requirements, defaults and software sources
15
- └── resolution pins and records an exact composition
16
- └── instance runs against an independent work target
17
- ├── knowledge capability
18
- ├── messaging capability
19
- ├── tasks capability
20
- └── any additional capabilities
9
+ workspace (oats-workspace.yaml) members, packages, shared teams, defaults, stores
10
+ └── soul (soul.yaml) role, work mode, capabilities, slot choices
11
+ └── resolution exact commits and digests, recorded at spawn
12
+ └── instance home soul + copied capabilities + its own work view
13
+ ├── knowledge capability
14
+ ├── messaging capability
15
+ ├── tasks capability
16
+ └── any additional capabilities
21
17
  ```
22
18
 
23
- The workspace definition, source repository, local deployment, work target and messaging team are different identities. They may share a repository or machine without becoming interchangeable authority.
24
-
25
- ## Soul format
26
-
27
- Portable `soul.yaml` uses `schemaVersion: 1`, a name, optional role/runtime/work preferences and explicit requirements/defaults. Canonical `AGENTS.md`, its `CLAUDE.md` alias and the declared resources provide the operating curriculum. See the [schema](soul.schema.json).
28
-
29
- A soul can require a concrete implementation **and its source**, or require a provider by presence with supported defaults/operator choice. Naming OKF or a tracker does not make a soul malformed: it makes a particular source policy explicit. A source that genuinely promises interchangeable implementations must use compatible requirements and test that claim.
30
-
31
- Concrete capability selections carry `source`; software must not be inferred from an ambient installation or the publisher's unshared config. Imports retain source identity and revision rather than creating local forks. Source updates do not silently rewrite an existing instance's retained curriculum.
32
-
33
- Classic `kind`/`type`/`repo` declarations and config-targeted agent types are a compatibility model, not mandatory fields or a third policy tier in portable resolution. See [souls and instances](souls-and-instances.md) and [classic configuration](configuration.md).
34
-
35
- ## Workspace, repository and adoption contracts
36
-
37
- - `oats-workspace.yaml` (v2) declares members, the pinned `packages:`, team labels, defaults per slot and per team, stores, the messaging payload and pinned `external:` souls.
38
- - `oats-membership.yaml` is a repository's half of the handshake: the workspace backlink plus an optional default team label. Everything under `souls/` and `capabilities/` is discoverable by convention (`private: true` opts out); there are no export lists.
39
- - Membership requires compatible observations on both sides; folder adjacency or a copied declaration is not admission.
40
- - External source import does not adopt the publisher's workspace. A framework repository may host its own development workspace without imposing it on consumers.
41
- - Operator choices and workspace defaults must respect source requirements. Git read access is not write permission, a trust declaration or messaging enrollment.
42
-
43
- The [workspace guide](workspaces.md) explains these boundaries and the [declaration contract](design/2026-09-15-portable-declarations.md) defines their versioned forms.
44
-
45
- ## Capability manifest and lifecycle events
46
-
47
- A capability's `oats.json` declares its identity, an optional `layer` field (which names the core capability it is, if any), resources, host/runtime prerequisites, commands, operations and supported lifecycle contributions. A distribution package's `oats-package.json` exports one or more capabilities; a package is not itself an active capability or workspace.
48
-
49
- The current [manifest schema](capability-manifest.schema.json) includes the published binding interface. A manifest shape alone does not certify its implementation:
50
-
51
- - A core capability declares normalize/bind/check binding phases; readiness runs its `check` (the kernel relays its answer without implementing its domain model).
52
- - Commands/hooks execute only from a declared source (a member, or a package the workspace declares, at its locked commit and integrity).
53
- - `helperInjection` and hook `inputs` are accepted and ignored since 0.26 (they served the removed captured path).
54
- - Required setup/capture outcomes cannot be silently omitted to make a launch or cleanup appear successful.
55
-
56
- Use [capability details](capabilities.md) and the [provider wire](design/2026-09-16-provider-binding-wire.md).
19
+ The forms are in [workspaces.md](workspaces.md) and the schemas beside it;
20
+ capability manifests, hooks and readiness in [capabilities.md](capabilities.md).
57
21
 
58
22
  ## The three core capabilities
59
23
 
60
- Knowledge, messaging and tasks are the **core capabilities**: at most one of each per soul, each filling its own slot. `none` is an explicit permitted choice only where requirements allow it; it empties that slot. Other capabilities are unlimited and nonexclusive; the three core capabilities do not limit domain tools or workflows.
24
+ Knowledge, messaging and tasks are **slots**: a soul has at most one
25
+ capability in each, and `none` empties a slot. Any number of other
26
+ capabilities compose beside them. A slot provider declares `layer:` in its
27
+ manifest and may answer the kernel's [readiness check](capabilities.md#readiness-check-bindingcheck).
61
28
 
62
29
  ### The knowledge contract
63
30
 
64
- The kernel supplies selection, retained identity/resources, exact locking, invocation/lifecycle context, independent helper execution and truthful outcomes. It does not mandate OKF, memory filenames, a taxonomy, a harvester or external-only mutable placement.
65
-
66
- The knowledge capability supplies organization, stores, readers, evidence capture, judgment, maintenance and delivery/acceptance policy. Mutable knowledge is never permission to alter immutable retained software/source artifacts.
67
-
68
- The reference OKF model uses centralised per-soul knowledge, stable ownership/read routing, independent promotion and PR-only Git delivery. `owns` routes harvests; `reads` selects context; neither is an ACL. Directory publication, a proposed PR, an accepted merge and a fresh reader's observation are separate facts.
69
-
70
- Alternatives may choose different placement or learning procedures. A supported co-located profile is not implied merely because the architecture allows one. See [knowledge theory](knowledge-theory.md), [version-scoped operations](knowledge.md) and [provider-neutral boundary](design/2026-09-16-knowledge-capability-contract.md).
71
-
72
- ### The tasks contract
73
-
74
- The tasks core capability owns work assignment, claims, status, blockers, outcomes and handoff procedures. OATS supplies the selected capability/runtime boundary, not one mandatory tracker workflow. Jira and Linear are available tasks capabilities; none is mandatory when source requirements permit `none`.
75
-
76
- Messaging is conversation, not automatically task state. Accepted knowledge may explain a decision or important situation without duplicating the tracker.
31
+ The kernel supplies selection, the copied modules, the lifecycle hooks and
32
+ their environment. The knowledge capability owns everything else: where
33
+ knowledge lives, who reads and owns what, how evidence is captured and judged,
34
+ and how accepted knowledge is delivered. The official provider is `oats.okf`
35
+ ([knowledge.md](knowledge.md), [knowledge theory](knowledge-theory.md)); the
36
+ boundary is the [knowledge and messaging capability contract](design/2026-09-16-knowledge-capability-contract.md).
77
37
 
78
38
  ### The communication contract
79
39
 
80
- The current slot name is **`messaging`**. The capability owns native identity, addressing, team membership, transport, wake delivery and qualification. A team alias in a workspace is a declaration, not proof that an actor is enrolled or a privacy property is enforced.
81
-
82
- aweb 1.10.3 supports its setup/lifecycle path but lacks the provider-binding interface. **aweb 1.11.0** (OATS >=0.24.2) adds it (1.11.2, OATS >=0.24.4, is code-identical and declares its fixed reasons and `helperInjection: omit`): `check` qualifies HOME-route operational custody for an input-capable Claude/Codex primary with an explicit private team and `delivery: session`; a strict-Pi print primary reports `needs-configuration` rather than dropping the requirement. Qualification is not account delegation, broker delivery or model consumption.
83
-
84
- The earlier proposed `reach` ladder is **not an enforced universal field**. In particular, aweb's `team_and_contacts` includes verified same-team senders; the compatibility spellings `contacts-only` and `contacts_only` do not establish owner-only admission. A config command succeeding proves neither inbound/outbound restrictions nor knowledge visibility. See the [identity/membership amendment](design/2026-09-08-expert-assisted-deployment-proposal.md#membership-reach-and-visibility-are-separate) and [messaging boundary](design/2026-09-16-messaging-capability-contract.md).
85
-
86
- Roster membership is not a live process or a responsive session. Retirement may leave provider-side records or incomplete cleanup; inspect the actual outcome rather than promising aliases disappear.
87
-
88
- ## Runtime and work-target contracts
89
-
90
- The selected runtime owns its normal model/authentication/profile mechanisms. OATS supplies complete composed resources, task, work selection and retained execution authority; it does not copy or repair credentials or enable permission bypass merely because a session is unattended.
40
+ The slot is named **`messaging`**. The capability owns identity, addressing,
41
+ team membership, transport and wake delivery. The kernel supplies each soul's
42
+ teams in the hook environment ([capabilities.md](capabilities.md#teams-in-the-provider-environment))
43
+ and never joins a team itself. A team in a workspace file is a declaration,
44
+ not proof that an agent is enrolled. The official provider is `oats.aweb`.
91
45
 
92
- Pi, Claude Code and Codex have version/profile-specific support. Claude Code and Codex retain normal native context and permissions; strict selected Pi execution has its own verified profile limits. Tmux and Herdr are backend choices, not soul identities. A source can support several realizations without every combination being qualified.
93
-
94
- The work target is independent of source publication and knowledge placement. Preserve the selected work-mode discipline and ownership. Unsupported required lifecycle, wake, plugin or recovery behavior must remain explicit, not be replaced with an easier hidden profile. See [execution targets](execution-targets.md) and the [release notes](release-notes/v0.24.0.md).
95
-
96
- ## Kernel briefings versus operational capabilities
97
-
98
- The kernel owns only what describes the layout it creates: the `instance-boundary` briefing (home versus `work/`), the selected work-mode briefing and config-declared injections. Knowing how to *operate* OATS (status, spawn, retire, soul discovery) and how to *configure* it (workspaces, packages, the lock) is capability content — the official capabilities `oats.core` (a workspace default via `defaults.capabilities`, removable per soul with `off`) and `oats.setup` (held by an onboarding expert), both provided by the `oats.framework` package; see [souls and instances](souls-and-instances.md#oats-operational-knowledge-is-a-capability).
99
-
100
- ## Capture and knowledge are separate
101
-
102
- The native turn record is an evidence substrate, not accepted knowledge or a compulsory fourth core capability. A capability decides which evidence it consumes and how it judges it. Source attribution, before-read custody and incomplete-outcome handling remain necessary wherever those guarantees are promised.
103
-
104
- A successful capture is not a completed judgment; completed judgment is not accepted Git knowledge. Source loss or retirement must not erase pending obligations or make an uncertain record complete. See [the record package](../packages/record/README.md) and the relevant versioned lifecycle contracts.
105
-
106
- ## Replaceability without invented readiness
46
+ ### The tasks contract
107
47
 
108
- A capability boundary is useful when implementations can differ without a new kernel-owned version of their behavior. But:
48
+ The tasks capability owns assignment, claims, status, blockers and handoff.
49
+ `oats.jira` and `oats.linear` are the official providers. Messaging is
50
+ conversation, not task state.
109
51
 
110
- - Two stores within OKF are not proof of a genuinely different knowledge model.
111
- - Schema validation is not native authority, provider readiness or learning.
112
- - A working old configuration does not prove compatibility with a new profile.
113
- - Workspace membership does not select every capability a member exports.
114
- - Published primitives and documentation do not constitute a completed deployment.
52
+ ## What the kernel does not own
115
53
 
116
- Use the same kernel contracts, preserve declared requirements and verify the specific supported profile. New generic authority or schema semantics require an explicit decision rather than an undocumented bypass.
54
+ - **The harness.** pi, Claude Code and Codex start normally, with their own
55
+ authentication, models and permissions ([execution-targets.md](execution-targets.md)).
56
+ - **Operating knowledge.** How to operate and configure OATS is capability
57
+ content: `oats.core` and `oats.setup` from the `oats.framework` package
58
+ ([souls-and-instances.md](souls-and-instances.md#oats-operational-knowledge-is-a-capability)).
59
+ The kernel writes only the home-versus-work and work-mode briefings.
60
+ - **Proof of readiness.** A valid manifest or a declared team is not a working
61
+ provider; `oats readiness` asks the provider.
@@ -18,7 +18,7 @@
18
18
  "type": "string",
19
19
  "minLength": 1,
20
20
  "pattern": "^(?:git@[^@\\s]+|[^@\\s]+)$",
21
- "description": "Repo ref to realize in the STANDALONE view (decision 10): its own souls and from: here capabilities plus oats.core (decision 25), no workspace lookup. Use when the repo's workspace cannot be read; `workspace:` still names the repo you point the kernel at."
21
+ "description": "Repo ref to realize in the STANDALONE view: its own souls and from: here capabilities plus oats.core, no workspace lookup. Use when the repo's workspace cannot be read; `workspace:` still names the repo you point the kernel at."
22
22
  },
23
23
  "clones": {
24
24
  "type": "object",
@@ -37,15 +37,15 @@
37
37
  },
38
38
  "launch-configs": {
39
39
  "type": "object",
40
- "description": "Named ways to start a harness on this host, independent of any soul (lead decision 2: a spawn-time host choice). Selected by name at spawn or session start/restart; explicit flags override its fields. Written by `oats launch-config set|remove`.",
40
+ "description": "Named ways to start a harness on this host, independent of any soul (a spawn-time host choice). Selected by name at spawn or session start/restart; explicit flags override its fields. Written by `oats launch-config set|remove`.",
41
41
  "propertyNames": { "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$" },
42
42
  "additionalProperties": {
43
43
  "type": "object",
44
44
  "additionalProperties": false,
45
45
  "anyOf": [{ "required": ["harness"] }, { "required": ["runtime"] }],
46
46
  "properties": {
47
- "harness": { "type": "string", "enum": ["pi", "claude", "codex"], "description": "The harness this configuration starts (named `runtime` before 0.27.0); it decides the kernel's own baseline arguments (skills, instructions, task) and how model/yolo are expressed." },
48
- "runtime": { "type": "string", "enum": ["pi", "claude", "codex"], "deprecated": true, "description": "The pre-0.27 name of `harness`, still read (a deprecation warning); both, disagreeing, are refused. `oats launch-config set` writes `harness`." },
47
+ "harness": { "type": "string", "enum": ["pi", "claude", "codex"], "description": "The harness this configuration starts; it decides the kernel's own baseline arguments (skills, instructions, task) and how model/yolo are expressed." },
48
+ "runtime": { "type": "string", "enum": ["pi", "claude", "codex"], "deprecated": true, "description": "The old name of `harness`, still read (a deprecation warning); both, disagreeing, are refused. `oats launch-config set` writes `harness`." },
49
49
  "executable": { "type": "string", "minLength": 1, "description": "The program to run instead of the harness's default binary: a bare name is looked up on PATH on the execution host; a path containing a slash is resolved against the deployment directory (where this oats-local.yaml lives) when relative. Checked to exist and be executable before any start; never executed just to probe it." },
50
50
  "args": { "type": "array", "items": { "type": "string" }, "description": "Extra arguments, each passed literally (no shell interpretation): native configuration files or profiles go here as ordinary arguments." },
51
51
  "env": {
@@ -69,7 +69,7 @@
69
69
  "additionalProperties": false,
70
70
  "required": ["name"],
71
71
  "properties": {
72
- "name": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$", "description": "This machine's name (0.29.0). A workspace trigger or schedule runs on the host whose name is its `runsOn` (and only when this host's gh account is its `owner`). A machine fact, never in Git." }
72
+ "name": { "type": "string", "pattern": "^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$", "description": "This machine's name. A workspace trigger or schedule runs on the host whose name is its `runsOn` (and only when this host's gh account is its `owner`). A machine fact, never in Git." }
73
73
  }
74
74
  },
75
75
  "triggers": {
@@ -94,6 +94,19 @@
94
94
  }
95
95
  }
96
96
  },
97
+ "automations": {
98
+ "type": "object",
99
+ "additionalProperties": false,
100
+ "properties": {
101
+ "trust": {
102
+ "description": "The workspace triggers and schedules this host agrees to run, by qualified id <member>/<id>, or \"*\" for every one the workspace places on this host (0.30). A workspace automation runs only when its runsOn is host.name, its owner is this host's gh account AND trust admits it; absent or empty, none runs. A host fact: the committed workspace file refuses it. Local triggers and schedules need no trust.",
103
+ "oneOf": [
104
+ { "const": "*" },
105
+ { "type": "array", "uniqueItems": true, "items": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*/[a-z0-9-]{1,40}$" } }
106
+ ]
107
+ }
108
+ }
109
+ },
97
110
  "souls": {
98
111
  "type": "object",
99
112
  "additionalProperties": false,
@@ -103,8 +116,48 @@
103
116
  "type": "array",
104
117
  "uniqueItems": true,
105
118
  "items": { "type": "string", "pattern": "^(?:[a-z0-9][a-z0-9._-]*/)?[a-z0-9]+(?:-[a-z0-9]+)*$" }
119
+ },
120
+ "teams": {
121
+ "description": "Which teams each soul belongs to on this deployment (`oats soul teams` writes it): \"*\" applies to every soul; a soul's own entry (its bare name, or <package>/<soul> for a package soul) adds to it. Every soul is also in its default. Eligible, never auto-joined: an instance joins its default at spawn and the others on request.",
122
+ "type": "object",
123
+ "propertyNames": { "type": "string", "pattern": "^(?:\\*|(?:[a-z0-9][a-z0-9._-]*/)?[a-z0-9]+(?:-[a-z0-9]+)*)$" },
124
+ "additionalProperties": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/label" } }
125
+ },
126
+ "launch": {
127
+ "description": "Launch preferences on this machine (0.30; feature launch-preference), overriding the soul's own launch: \"*\" applies to every soul; a soul's own entry (its bare name, or <package>/<soul>) wins over it. A value is a launch configuration's name (in launch-configs of this file) or an inline { harness, model? }. Explicit spawn flags win over both. A changed preference affects no existing home until --reselect-launch or a respawn.",
128
+ "type": "object",
129
+ "propertyNames": { "type": "string", "pattern": "^(?:\\*|(?:[a-z0-9][a-z0-9._-]*/)?[a-z0-9]+(?:-[a-z0-9]+)*)$" },
130
+ "additionalProperties": { "oneOf": [ { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$" }, { "$ref": "#/$defs/launchPreference" } ] }
131
+ },
132
+ "default": {
133
+ "description": "A per-soul override of defaultTeam (`oats soul teams <soul> --default <label>`); it must be one of that soul's teams here (E_TEAM_NOT_ELIGIBLE).",
134
+ "type": "object",
135
+ "propertyNames": { "type": "string", "pattern": "^(?:[a-z0-9][a-z0-9._-]*/)?[a-z0-9]+(?:-[a-z0-9]+)*$" },
136
+ "additionalProperties": { "$ref": "#/$defs/label" }
106
137
  }
107
138
  }
139
+ },
140
+ "teams": {
141
+ "description": "LOCAL teams (`oats teams add` writes it): <label>: { team, description? }, the messaging provider's team id for a team only this deployment uses. Shared teams are committed in oats-workspace.yaml teams:; a label in both is team-label-collision (the shared one wins).",
142
+ "type": "object",
143
+ "propertyNames": { "$ref": "#/$defs/label" },
144
+ "additionalProperties": {
145
+ "type": "object",
146
+ "required": ["team"],
147
+ "additionalProperties": false,
148
+ "properties": {
149
+ "team": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:@/+-]{0,255}$", "description": "The messaging provider's team id (for oats.aweb, <team>:<namespace>). The kernel's safety rule: never '-'-led, no whitespace or control characters, at most 256 characters; the provider validates its own shape." },
150
+ "description": { "type": "string" }
151
+ }
152
+ }
153
+ },
154
+ "defaultTeam": {
155
+ "$ref": "#/$defs/label",
156
+ "description": "The team every instance of this deployment lives in (its primary identity), unless souls.default overrides it for a soul: a label of teams here or in oats-workspace.yaml (`oats teams default` writes it; the first `oats teams add` sets it)."
108
157
  }
158
+ },
159
+ "$defs": {
160
+ "launchPreference": { "type": "object", "additionalProperties": false, "required": ["harness"], "properties": { "harness": { "enum": ["pi", "claude", "codex"], "description": "The harness the role should run on." }, "model": { "type": "string", "minLength": 1, "pattern": "^[^\\s-][^\\s]*$", "description": "A model id for that harness; absent: the harness's own model." } } },
161
+ "label": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$" }
109
162
  }
110
163
  }
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://oats.dev/schemas/membership-v2.json",
4
4
  "title": "Repository membership backlink v2 (oats-membership.yaml)",
5
- "description": "The repo's half of the reciprocal handshake: it names the workspace it belongs to, plus an optional default team label for the repo's items. Nothing else. A backlink is consent, not admission — the workspace must list the repo too.",
5
+ "description": "The repo's half of the reciprocal handshake: it names the workspace it belongs to. Nothing else. A backlink is consent, not admission — the workspace must list the repo too.",
6
6
  "type": "object",
7
7
  "required": ["schemaVersion", "workspace"],
8
8
  "additionalProperties": false,
@@ -13,13 +13,6 @@
13
13
  "minLength": 1,
14
14
  "pattern": "^(?:git@[^@\\s]+|[^@\\s]+)$",
15
15
  "description": "Repo ref of the workspace host, without revision."
16
- },
17
- "team": {
18
- "anyOf": [
19
- { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$" },
20
- { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$" } }
21
- ],
22
- "description": "Default team label, or a non-empty list of distinct labels (the first is the primary), for souls in this repo that carry no `team:` of their own. A capability without its own `team:` is listed under the primary."
23
16
  }
24
17
  }
25
18
  }
@@ -54,7 +54,7 @@
54
54
  "uniqueItems": true
55
55
  },
56
56
  "souls": {
57
- "description": "Package souls (OATS 0.28.0): package-relative soul directories, each an ordinary soul (soul.yaml + AGENTS.md, optional skills/). A soul's name is its directory's. They are versioned and locked with the package (oats-lock.json records each soul's name, path and digest), listed with their package origin, and spawned by the qualified name <package>/<soul> (or the bare name when unique). `from: here` in a package soul is its own package at the locked commit.",
57
+ "description": "Package souls: package-relative soul directories, each an ordinary soul (soul.yaml + AGENTS.md, optional skills/). A soul's name is its directory's. They are versioned and locked with the package (oats-lock.json records each soul's name, path and digest), listed with their package origin, and spawned by the qualified name <package>/<soul> (or the bare name when unique). `from: here` in a package soul is its own package at the locked commit.",
58
58
  "type": "array",
59
59
  "items": {
60
60
  "type": "string",
@@ -67,7 +67,7 @@
67
67
  "uniqueItems": true
68
68
  },
69
69
  "triggers": {
70
- "description": "Trigger templates (OATS 0.28.0): `oats trigger add --from <package>:<id> [--set <name>=<value>]…` instantiates one from the locked package. Each file is { parameters: { <name>: { path, required?, default?, description? } }, definition: { …a trigger definition… } }; see docs/schedules.md#triggers.",
70
+ "description": "Trigger templates: `oats trigger add --from <package>:<id> [--set <name>=<value>]…` instantiates one from the locked package. Each file is { parameters: { <name>: { path, required?, default?, description? } }, definition: { …a trigger definition… } }; see docs/schedules.md#triggers.",
71
71
  "type": "array",
72
72
  "items": {
73
73
  "type": "object",
@@ -93,7 +93,7 @@
93
93
  }
94
94
  },
95
95
  "configTemplates": {
96
- "description": "Named config TEMPLATES: complete reference oats-config.yaml files of the classic line, whose adoption verb is removed under the workspace model. A template is a recommended starting point that becomes ordinary local policy on adoption — adopters may change every copied setting, and package updates never rewrite an adopted config. Templates must stay portable: no secret, credential, account, machine path or provider-local ID. Installation applies none of them. This is the canonical spelling; a manifest may not carry both this and the legacy `configs`.",
96
+ "description": "Tolerated and ignored: named classic config templates, accepted so published packages still validate; the workspace model reads nothing from them.",
97
97
  "type": "object",
98
98
  "propertyNames": {
99
99
  "pattern": "^[a-z0-9][a-z0-9._-]*$"
@@ -125,7 +125,7 @@
125
125
  }
126
126
  },
127
127
  "configs": {
128
- "description": "DEPRECATED 0.19 spelling of `configTemplates`, readable only so immutable published 0.19 package tags stay consumable. Both spellings normalize to one descriptor shape; the diagnostic `legacySpelling` flag records which was used. It is NOT the discriminator for a \".\" capability root — published legacy packages exist with neither spelling. New authoring must emit `configTemplates`; carrying both spellings is an invalid manifest.",
128
+ "description": "Tolerated and ignored: the old spelling of `configTemplates`.",
129
129
  "type": "object",
130
130
  "propertyNames": {
131
131
  "pattern": "^[a-z0-9][a-z0-9._-]*$"
@@ -155,7 +155,7 @@
155
155
  }
156
156
  },
157
157
  "dependencies": {
158
- "description": "Package source specifications (NOT capability IDs): official catalog selectors (e.g. \"oats.okf@v1.4.0\"), git:host/org/repo@ref, raw HTTPS/SSH git URLs with @ref, or local paths. No general semver ranges; the resolved closure is exact-locked.",
158
+ "description": "Tolerated and ignored: package source specifications from the classic line. The workspace model resolves only the workspace's `packages:`; a package's dependencies are not followed.",
159
159
  "type": "array",
160
160
  "items": {
161
161
  "type": "string",
@@ -25,7 +25,7 @@
25
25
  "type": "object",
26
26
  "propertyNames": { "$ref": "#/$defs/label" },
27
27
  "additionalProperties": { "$ref": "#/$defs/team" },
28
- "description": "Org team labels. A label never gates, restricts or partitions anything."
28
+ "description": "SHARED teams: <label>: { description?, team? }. `team` is the messaging provider's team id, the same for everyone; without it the team is declared but not yet created (readiness team-unmapped). Local teams, the default and which teams each soul belongs to live in the deployment's oats-local.yaml (`oats teams`, `oats soul teams`). A label never gates, restricts or partitions anything."
29
29
  },
30
30
  "defaults": { "$ref": "#/$defs/defaults" },
31
31
  "stores": {
@@ -36,14 +36,7 @@
36
36
  },
37
37
  "messaging": {
38
38
  "type": "object",
39
- "description": "Opaque provider payload consumed by the messaging core capability. May carry byTeam: { <team label>: <payload> } — the kernel merges base ⊕ byTeam[soul.team] and strips byTeam before the provider sees it (decision 23).",
40
- "properties": {
41
- "byTeam": {
42
- "type": "object",
43
- "propertyNames": { "type": "string", "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$" },
44
- "additionalProperties": { "type": "object" }
45
- }
46
- }
39
+ "description": "Opaque provider payload consumed by the messaging core capability. A team's provider id is teams.<label>.team."
47
40
  },
48
41
  "external": {
49
42
  "type": "array",
@@ -113,7 +106,10 @@
113
106
  "team": {
114
107
  "type": "object",
115
108
  "additionalProperties": false,
116
- "properties": { "description": { "type": "string" } }
109
+ "properties": {
110
+ "description": { "type": "string" },
111
+ "team": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:@/+-]{0,255}$", "description": "The messaging provider's team id (for oats.aweb, <team>:<namespace>). Absent: declared, not yet created. The kernel's safety rule: never '-'-led, no whitespace or control characters, at most 256 characters; the provider validates its own shape." }
112
+ }
117
113
  },
118
114
  "defaults": {
119
115
  "type": "object",
@@ -122,16 +118,7 @@
122
118
  "capabilities": { "$ref": "#/$defs/capabilityMap" },
123
119
  "knowledge": { "$ref": "#/$defs/slotDefault" },
124
120
  "messaging": { "$ref": "#/$defs/slotDefault" },
125
- "tasks": { "$ref": "#/$defs/slotDefault" },
126
- "byTeam": {
127
- "type": "object",
128
- "propertyNames": { "$ref": "#/$defs/label" },
129
- "additionalProperties": {
130
- "type": "object",
131
- "additionalProperties": false,
132
- "properties": { "capabilities": { "$ref": "#/$defs/capabilityMap" } }
133
- }
134
- }
121
+ "tasks": { "$ref": "#/$defs/slotDefault" }
135
122
  }
136
123
  },
137
124
  "external": {
@@ -145,8 +132,7 @@
145
132
  "minLength": 1,
146
133
  "pattern": "^(?![A-Za-z]:)(?!/)(?!.*(?:^|/)\\.{1,2}(?:/|$))[^/\\\\\u0000]+(?:/[^/\\\\\u0000]+)*$",
147
134
  "description": "Repository-relative directory holding the soul's soul.yaml."
148
- },
149
- "team": { "$ref": "#/$defs/label" }
135
+ }
150
136
  }
151
137
  }
152
138
  }
@@ -5,19 +5,33 @@ list in [awebai/oats](https://github.com/awebai/oats), not a separate registry
5
5
  service. **A package listed there is official.** A name, logo, repository owner
6
6
  or workspace membership alone does not make a package official.
7
7
 
8
+ ## The packages
9
+
10
+ | package | release | capabilities | package souls |
11
+ |---|---|---|---|
12
+ | `oats.framework` | `oats-framework/v1.4.0` (this repository) | `oats.core`, `oats.setup`, `oats.knowledge-theory` | `knowledge-theory-expert` |
13
+ | `oats.okf` | `v4.0.4` | `oats.okf` (knowledge), `oats.okf-harvest`, `oats.okf-maintenance` | `knowledge-harvester`, `knowledge-maintainer` |
14
+ | `oats.aweb` | `v1.17.1` | `oats.aweb` (messaging) | |
15
+ | `oats.engineering` | `v1.1.0` | `oats.engineering-expert`, `oats.developer`, `oats.code-review` | `code-reviewer` |
16
+ | `oats.authoring` | `v1.0.3` | `oats.authoring` | |
17
+ | `oats.jira` | `v1.0.1` | `oats.jira` (tasks) | |
18
+ | `oats.linear` | `v1.0.1` | `oats.linear` (tasks) | |
19
+
20
+ Each package lives in its own `awebai/oats-*` repository except
21
+ `oats.framework`, whose payload root is `oats-package/` here. A capability id
22
+ names the package that supplies it through the catalog's aliases, so
23
+ `oats.developer: { from: package }` selects `oats.engineering`. This catalog ships with
24
+ the CLI: an older installed CLI keeps its own copy, and a change here rewrites
25
+ no lock and adds nothing to an existing workspace.
26
+
8
27
  ## Find and use packages
9
28
 
10
- - Browse the catalog for the kernel/source version you use. Each package entry
11
- identifies its repository, release ref and payload root; capability aliases
12
- can point to the package that supplies them.
13
29
  - A workspace pins an official package by **bare version** in its
14
- `packages:` map (`oats.okf: v2.1.3`); `oats sync` resolves it through the
30
+ `packages:` map (`oats.okf: v4.0.4`); `oats sync` resolves it through the
15
31
  catalog to an exact commit, fetches it, verifies its integrity and locks it.
16
- A package outside the catalog is written `git:<repo>@<ref>`.
17
- Pinning does not enroll a team or adopt the publisher's workspace. See
32
+ A package outside the catalog is written `git:<repo>@<ref>`. Pinning does
33
+ not join a team or adopt the publisher's workspace. See
18
34
  [packages](packages.md).
19
- - The Desktop catalog view/search is **planned for the parity phase**, not
20
- shipped by this policy. There is no catalog CLI verb.
21
35
  - **Discoverable ≠ declared.** A catalog listing grants nothing; a
22
36
  `packages:` pin is the workspace's decision to trust that package at that
23
37
  version, and the lock pins it to an exact commit and integrity. Nothing is
@@ -63,27 +77,10 @@ or workspace membership alone does not make a package official.
63
77
  Contact and license evidence may live in the package/repository documentation;
64
78
  this policy does not invent new catalog or manifest fields.
65
79
 
66
- ## Listed first set
67
-
68
- - Listed capabilities: `oats.okf`, `oats.okf-harvest`, `oats.okf-maintenance`,
69
- `oats.aweb`, `oats.authoring`, `oats.jira`, `oats.linear`, `oats.dev`,
70
- `oats.knowledge-theory`, `oats.core` and `oats.setup`. `oats.okf-harvest` and
71
- `oats.okf-maintenance` select the `oats.okf` package (4.0.0).
72
- - **`oats.framework` 1.3.1** is listed at tag `oats-framework/v1.3.1` in
73
- `awebai/oats`, payload root `oats-package`. The `oats.core`, `oats.setup` and
74
- `oats.knowledge-theory` aliases select that distribution; package identity is
75
- distinct from capability identity. Core supplies operation/soul guidance;
76
- setup supplies OATS Soul Setup, configuration and package guidance. The
77
- package also ships the `knowledge-theory-expert` package soul.
78
-
79
- These entries are in the current repository catalog. An older installed CLI keeps
80
- its bundled catalog; publication here does not update that installation or rewrite
81
- locks or tags. No package is silently added to an existing workspace.
82
-
83
80
  ## Updates, deprecation and removal
84
81
 
85
82
  Use the same catalog PR and maintainer-review path to update, deprecate or remove
86
83
  an entry. State the reason, affected releases and supported replacement or hold,
87
- and assess existing locks/restores before changing discovery. Preserve immutable
88
- release history. A list change is not permission to rewrite a deployment's locks,
89
- change what a workspace declares, uninstall packages or delete retained resources.
84
+ and assess existing locks before changing discovery. Preserve immutable
85
+ release history. A list change is not permission to rewrite a deployment's
86
+ lock or change what a workspace declares.