@awebai/oats 0.29.4 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +12 -6
  2. package/bin/oats.mjs +194 -50
  3. package/capabilities/oats-aweb/bin/oats-aweb.mjs +538 -204
  4. package/capabilities/oats-aweb/injects/aweb.md +1 -1
  5. package/capabilities/oats-aweb/lib/binding-wire.mjs +31 -22
  6. package/capabilities/oats-aweb/oats.json +5 -12
  7. package/capabilities/oats-aweb/skills/VENDORED.md +4 -4
  8. package/capabilities/oats-aweb/skills/aweb-team-membership/SKILL.md +1 -1
  9. package/capabilities/oats-aweb/skills/oats-aweb/SKILL.md +83 -13
  10. package/capabilities/oats-code-review/injects/reviewer.md +26 -0
  11. package/capabilities/oats-code-review/oats.json +16 -0
  12. package/capabilities/oats-code-review/skills/adversarial-review/SKILL.md +66 -0
  13. package/capabilities/oats-code-review/skills/review-dev-docs/SKILL.md +30 -0
  14. package/capabilities/oats-code-review/skills/security-review/SKILL.md +56 -0
  15. package/capabilities/oats-code-review/skills/simplification-review/SKILL.md +34 -0
  16. package/capabilities/oats-developer/injects/developer.md +38 -0
  17. package/capabilities/oats-developer/oats.json +17 -0
  18. package/capabilities/oats-developer/skills/execution-strategy/SKILL.md +43 -0
  19. package/capabilities/oats-developer/skills/maintain-dev-docs/SKILL.md +47 -0
  20. package/capabilities/oats-developer/skills/run-the-review-loop/SKILL.md +65 -0
  21. package/capabilities/oats-developer/skills/understand-the-spec/SKILL.md +37 -0
  22. package/capabilities/oats-developer/skills/worktrees/SKILL.md +36 -0
  23. package/capabilities/oats-engineering-expert/injects/expert.md +37 -0
  24. package/capabilities/oats-engineering-expert/oats.json +17 -0
  25. package/capabilities/oats-engineering-expert/skills/coordinate-developers/SKILL.md +37 -0
  26. package/capabilities/oats-engineering-expert/skills/coordinate-experts/SKILL.md +52 -0
  27. package/capabilities/oats-engineering-expert/skills/land-your-prs/SKILL.md +50 -0
  28. package/capabilities/oats-engineering-expert/skills/plan-and-spec/SKILL.md +53 -0
  29. package/capabilities/oats-engineering-expert/skills/verify-developer-work/SKILL.md +49 -0
  30. package/capabilities/oats-okf/bin/oats-okf.mjs +8 -4
  31. package/capabilities/oats-okf/lib/binding-wire.mjs +47 -15
  32. package/capabilities/oats-okf/lib/inspection.mjs +26 -7
  33. package/capabilities/oats-okf/lib/sources.mjs +16 -2
  34. package/capabilities/oats-okf/lib/worker.mjs +5 -16
  35. package/capabilities/oats-okf/oats.json +6 -3
  36. package/capabilities/oats-okf-harvest/bin/okf-harvest.mjs +2 -2
  37. package/capabilities/oats-okf-harvest/oats.json +3 -3
  38. package/capabilities/oats-okf-harvest/skills/knowledge-harvest/SKILL.md +6 -6
  39. package/capabilities/oats-okf-maintenance/bin/okf-maintenance.mjs +2 -2
  40. package/capabilities/oats-okf-maintenance/injects/maintainer.md +1 -1
  41. package/capabilities/oats-okf-maintenance/oats.json +2 -2
  42. package/capabilities/oats-okf-maintenance/skills/knowledge-review/SKILL.md +1 -1
  43. package/capabilities/oats-okf-maintenance/skills/okf-trigger-setup/SKILL.md +11 -23
  44. package/capabilities/oats-workspace-experts/injects/oats-experts.md +26 -0
  45. package/capabilities/oats-workspace-experts/oats.json +9 -0
  46. package/docs/capabilities.md +160 -171
  47. package/docs/capability-manifest.schema.json +6 -11
  48. package/docs/configuration.md +213 -64
  49. package/docs/design/2026-09-16-knowledge-capability-contract.md +36 -50
  50. package/docs/design/2026-09-23-workspace-module-contracts.md +377 -544
  51. package/docs/design/2026-09-26-okf-knowledge-operations.md +132 -357
  52. package/docs/design/2026-09-27-team-model-v2.md +97 -117
  53. package/docs/design/2026-09-28-automations-trust.md +38 -0
  54. package/docs/design/2026-09-28-soul-launch-preference.md +63 -0
  55. package/docs/design/HISTORY.md +65 -0
  56. package/docs/design/README.md +23 -54
  57. package/docs/desktop-cli-api.md +1787 -1777
  58. package/docs/desktop.md +30 -91
  59. package/docs/execution-targets.md +146 -292
  60. package/docs/first-team.md +31 -17
  61. package/docs/implementation.md +76 -288
  62. package/docs/integrations.md +118 -320
  63. package/docs/knowledge-capability-authoring.md +25 -52
  64. package/docs/knowledge-reference/acceptance.md +3 -3
  65. package/docs/knowledge-reference/adoption.md +1 -1
  66. package/docs/knowledge-reference/harvester.md +2 -2
  67. package/docs/knowledge-reference/package-craft.md +3 -3
  68. package/docs/knowledge-reference/provider-mapping.md +3 -6
  69. package/docs/knowledge-reference/reader-capture.md +3 -3
  70. package/docs/knowledge-theory.md +62 -166
  71. package/docs/knowledge.md +225 -404
  72. package/docs/layers.md +42 -97
  73. package/docs/oats-local.schema.json +58 -5
  74. package/docs/oats-membership.schema.json +1 -8
  75. package/docs/oats-package.schema.json +5 -5
  76. package/docs/oats-workspace.schema.json +8 -22
  77. package/docs/official-catalog.md +25 -28
  78. package/docs/packages.md +45 -63
  79. package/docs/plans/0.30-close-out.md +61 -0
  80. package/docs/release-lane.md +77 -0
  81. package/docs/release-notes/oats-framework-v1.1.3.md +10 -8
  82. package/docs/release-notes/v0.19.0.md +48 -147
  83. package/docs/release-notes/v0.19.1.md +2 -3
  84. package/docs/release-notes/v0.19.3.md +2 -15
  85. package/docs/release-notes/v0.20.0.md +0 -15
  86. package/docs/release-notes/v0.22.0.md +71 -138
  87. package/docs/release-notes/v0.22.1.md +42 -90
  88. package/docs/release-notes/v0.22.10.md +1 -1
  89. package/docs/release-notes/v0.22.11.md +1 -47
  90. package/docs/release-notes/v0.22.12.md +4 -13
  91. package/docs/release-notes/v0.22.13.md +1 -42
  92. package/docs/release-notes/v0.22.14.md +3 -11
  93. package/docs/release-notes/v0.22.15.md +1 -46
  94. package/docs/release-notes/v0.22.16.md +6 -8
  95. package/docs/release-notes/v0.22.18.md +1 -99
  96. package/docs/release-notes/v0.22.19.md +3 -14
  97. package/docs/release-notes/v0.22.2.md +6 -15
  98. package/docs/release-notes/v0.22.3.md +0 -1
  99. package/docs/release-notes/v0.22.4.md +1 -14
  100. package/docs/release-notes/v0.22.5.md +2 -12
  101. package/docs/release-notes/v0.22.6.md +0 -3
  102. package/docs/release-notes/v0.23.0.md +9 -25
  103. package/docs/release-notes/v0.23.1.md +9 -25
  104. package/docs/release-notes/v0.23.2.md +2 -4
  105. package/docs/release-notes/v0.24.0.md +56 -97
  106. package/docs/release-notes/v0.24.1.md +7 -11
  107. package/docs/release-notes/v0.24.10.md +34 -45
  108. package/docs/release-notes/v0.24.11.md +12 -20
  109. package/docs/release-notes/v0.24.12.md +35 -48
  110. package/docs/release-notes/v0.24.13.md +34 -41
  111. package/docs/release-notes/v0.24.2.md +9 -13
  112. package/docs/release-notes/v0.24.3.md +7 -11
  113. package/docs/release-notes/v0.24.4.md +6 -6
  114. package/docs/release-notes/v0.24.5.md +6 -10
  115. package/docs/release-notes/v0.24.6.md +2 -5
  116. package/docs/release-notes/v0.24.7.md +46 -75
  117. package/docs/release-notes/v0.24.8.md +58 -96
  118. package/docs/release-notes/v0.24.9.md +38 -54
  119. package/docs/release-notes/v0.25.0.md +59 -76
  120. package/docs/release-notes/v0.25.1.md +57 -81
  121. package/docs/release-notes/v0.25.2.md +51 -70
  122. package/docs/release-notes/v0.25.3.md +11 -13
  123. package/docs/release-notes/v0.25.4.md +9 -13
  124. package/docs/release-notes/v0.25.5.md +3 -5
  125. package/docs/release-notes/v0.25.6.md +20 -29
  126. package/docs/release-notes/v0.25.7.md +5 -7
  127. package/docs/release-notes/v0.25.8.md +26 -39
  128. package/docs/release-notes/v0.26.0.md +175 -646
  129. package/docs/release-notes/v0.27.0.md +4 -5
  130. package/docs/release-notes/v0.27.1.md +4 -6
  131. package/docs/release-notes/v0.27.2.md +1 -1
  132. package/docs/release-notes/v0.28.0.md +57 -124
  133. package/docs/release-notes/v0.29.0.md +89 -208
  134. package/docs/release-notes/v0.29.1.md +1 -1
  135. package/docs/release-notes/v0.29.2.md +3 -4
  136. package/docs/release-notes/v0.30.0.md +205 -0
  137. package/docs/schedules.md +280 -363
  138. package/docs/servers.md +99 -117
  139. package/docs/soul.schema.json +2 -9
  140. package/docs/souls-and-instances.md +145 -158
  141. package/docs/workspaces.md +132 -215
  142. package/lib/automations.mjs +21 -6
  143. package/lib/core.mjs +226 -74
  144. package/lib/instance-events.mjs +1 -1
  145. package/lib/instance-inspect.mjs +109 -34
  146. package/lib/instance-lifecycle.mjs +14 -1
  147. package/lib/instance-resolution.mjs +26 -27
  148. package/lib/launch-preference.mjs +87 -0
  149. package/lib/materialize.mjs +3 -3
  150. package/lib/resolve.mjs +29 -87
  151. package/lib/schedule.mjs +1 -1
  152. package/lib/teams-verbs.mjs +195 -0
  153. package/lib/teams.mjs +190 -0
  154. package/lib/triggers.mjs +2 -2
  155. package/lib/workspace.mjs +54 -147
  156. package/package-catalog.json +9 -15
  157. package/package.json +1 -1
  158. package/skills/oats-getting-started/SKILL.md +25 -13
  159. package/capabilities/oats-review/injects/review.md +0 -69
  160. package/capabilities/oats-review/oats.json +0 -10
  161. package/capabilities/oats-review/skills/code-review/SKILL.md +0 -44
  162. package/capabilities/oats-review/skills/security-review/SKILL.md +0 -59
  163. package/docs/conventions.md +0 -90
  164. package/docs/design/2026-09-07-architecture-reassessment.md +0 -131
  165. package/docs/design/2026-09-07-desktop-souls-capabilities.md +0 -50
  166. package/docs/design/2026-09-07-mobile-agent-management-proposal.md +0 -228
  167. package/docs/design/2026-09-08-expert-assisted-deployment-proposal.md +0 -558
  168. package/docs/design/2026-09-13-knowledge-and-memory-direction.md +0 -744
  169. package/docs/design/2026-09-13-knowledge-implementation.md +0 -127
  170. package/docs/design/2026-09-13-knowledge-location-contract.md +0 -340
  171. package/docs/design/2026-09-14-artifact-retention-contract.md +0 -190
  172. package/docs/design/2026-09-14-portable-souls-and-git-workspaces.md +0 -708
  173. package/docs/design/2026-09-14-portable-souls-contract-amendments.md +0 -85
  174. package/docs/design/2026-09-14-portable-souls-explainer.md +0 -750
  175. package/docs/design/2026-09-15-captured-dispatch.md +0 -127
  176. package/docs/design/2026-09-15-captured-resolution-records.md +0 -143
  177. package/docs/design/2026-09-15-package-preparation.md +0 -100
  178. package/docs/design/2026-09-15-portable-data-contract.md +0 -121
  179. package/docs/design/2026-09-15-portable-declarations.md +0 -189
  180. package/docs/design/2026-09-15-portable-souls-handoff.md +0 -150
  181. package/docs/design/2026-09-15-portable-souls-implementation.md +0 -417
  182. package/docs/design/2026-09-15-selection-lock-and-approval.md +0 -122
  183. package/docs/design/2026-09-15-source-observation.md +0 -119
  184. package/docs/design/2026-09-16-captured-admission.md +0 -77
  185. package/docs/design/2026-09-16-captured-helper-dispatch.md +0 -105
  186. package/docs/design/2026-09-16-captured-launch-inputs.md +0 -42
  187. package/docs/design/2026-09-16-command-profile-preparation.md +0 -86
  188. package/docs/design/2026-09-16-fresh-install-first-rollout.md +0 -47
  189. package/docs/design/2026-09-16-fresh-operator-walkthrough.md +0 -282
  190. package/docs/design/2026-09-16-messaging-capability-contract.md +0 -59
  191. package/docs/design/2026-09-16-portable-migration-evidence.md +0 -158
  192. package/docs/design/2026-09-16-portable-onboarding.md +0 -179
  193. package/docs/design/2026-09-16-prepare-request-transport.md +0 -26
  194. package/docs/design/2026-09-16-provider-binding-codecs.md +0 -98
  195. package/docs/design/2026-09-16-provider-binding-wire.md +0 -274
  196. package/docs/design/2026-09-17-capability-helper-input-contract.md +0 -95
  197. package/docs/design/2026-09-17-captured-backend-parity.md +0 -53
  198. package/docs/design/2026-09-17-captured-native-start.md +0 -58
  199. package/docs/design/2026-09-17-portable-boundary-hookup.md +0 -19
  200. package/docs/design/2026-09-17-portable-boundary-resources.md +0 -52
  201. package/docs/design/2026-09-17-public-captured-start.md +0 -108
  202. package/docs/design/2026-09-17-public-prepare-request.md +0 -90
  203. package/docs/design/2026-09-18-captured-pi-host.md +0 -205
  204. package/docs/design/2026-09-18-first-cut-release-checklist.md +0 -131
  205. package/docs/design/2026-09-18-herdr-protocol-compatibility.md +0 -60
  206. package/docs/design/2026-09-20-redesign-program-board.md +0 -142
  207. package/docs/design/2026-09-20-workspace-and-portable-adoption-plan.md +0 -289
  208. package/docs/design/2026-09-20-workspace-onboarding-public.md +0 -207
  209. package/docs/design/2026-09-22-desktop-parity-seams.md +0 -58
  210. package/docs/design/2026-09-23-simplified-workspace-model.md +0 -711
  211. package/docs/design/2026-09-23-workspace-v2-implementation-plan.md +0 -65
  212. package/docs/design/2026-09-24-desktop-phase-f-boundary.md +0 -242
  213. package/docs/design/2026-09-24-phase-d-plan.md +0 -305
  214. package/docs/design/2026-09-25-teams-contract.md +0 -258
  215. package/docs/design/2026-09-26-desktop-design-brief-architecture.md +0 -241
  216. package/docs/design/desktop-ux-plan.md +0 -362
  217. package/docs/design/launch-configurations.md +0 -168
  218. package/docs/design/okf-mirror-provenance.md +0 -105
  219. package/docs/design/operations-contract.md +0 -141
  220. package/docs/oats-member.schema.json +0 -38
  221. package/skills/integration-authoring/SKILL.md +0 -84
  222. package/skills/oats-support/SKILL.md +0 -79
  223. package/skills/skill-craft/SKILL.md +0 -109
  224. package/skills/soul-craft/SKILL.md +0 -116
@@ -1,26 +1,24 @@
1
1
  # Integrations: binding an implementation to a contract
2
2
 
3
- An **integration** is a capability package selected to fill one exclusive
4
- slot: `knowledge`, `messaging` (the communication contract), or `tasks`.
5
- The contracts themselves are in [the OATS contracts](layers.md); this
6
- document is about choosing an implementation, and about building one.
7
-
8
- Read [capability packages](capabilities.md) first for manifests, acquisition,
9
- targeting, instance-local composition, locks, trust, hooks, and commands.
3
+ An **integration** is a capability that fills one exclusive slot:
4
+ `knowledge`, `messaging` (the communication contract) or `tasks`. The
5
+ contracts themselves are in [the OATS contracts](layers.md); this page is
6
+ about choosing an implementation and building one. For manifests, hooks,
7
+ commands and settings in general, read [capability packages](capabilities.md)
8
+ first.
10
9
 
11
10
  ## The slots
12
11
 
13
12
  For each soul, OATS resolves zero or one implementation per slot:
14
13
 
15
- | Slot | Contract | Bundled implementations |
14
+ | Slot | Contract | Official providers |
16
15
  | --- | --- | --- |
17
16
  | `knowledge` | [knowledge](layers.md#the-knowledge-contract) | `oats.okf` |
18
17
  | `messaging` | [communication](layers.md#the-communication-contract) | `oats.aweb` |
19
18
  | `tasks` | [tasks](layers.md#the-tasks-contract) | `oats.jira`, `oats.linear` |
20
19
 
21
- A capability manifest becomes an integration by declaring one `layer`. It
22
- may not declare several. Two active packages for one slot and one soul are a
23
- configuration error; capabilities without `layer` compose additively.
20
+ A capability becomes an integration by declaring exactly one `layer` in its
21
+ manifest. Capabilities without `layer` compose additively.
24
22
 
25
23
  Exclusivity is the point. Task state belongs to the selected tasks
26
24
  implementation even when a messaging tool also offers task features, and
@@ -29,332 +27,132 @@ offers comments.
29
27
 
30
28
  ## Selecting an integration
31
29
 
32
- The workspace supplies a default per slot; a soul may name another, or `none`.
33
- The manifest already declares the slot, so a soul's `capabilities:` entry does
34
- not repeat it — a capability with `layer: knowledge` fills the knowledge slot
35
- wherever it arrives from:
30
+ A soul gets a capability from its own `capabilities:` and slot choices plus
31
+ the workspace `defaults`. Member capabilities are trusted by membership;
32
+ package capabilities by the workspace's `packages:` declaration, which pins
33
+ each by version and is locked by `oats sync` ([workspaces.md](workspaces.md#membership-and-trust),
34
+ [packages.md](packages.md)).
35
+
36
+ The manifest already declares the slot, so a `capabilities:` entry does not
37
+ repeat it: a capability with `layer: tasks` fills the tasks slot wherever it
38
+ arrives from.
36
39
 
37
40
  ```yaml
38
- # oats-workspace.yaml — one default per slot, for every soul
41
+ # oats-workspace.yaml: one default per slot, for every soul
42
+ packages:
43
+ oats.okf: v4.0.4
44
+ oats.aweb: v1.17.1
45
+ oats.linear: v1.0.1
46
+ oats.jira: v1.0.1
39
47
  defaults:
40
48
  knowledge: { oats.okf: { from: package } }
41
49
  messaging: { oats.aweb: { from: package } }
42
50
  tasks: { oats.linear: { from: package } }
43
51
 
44
- # souls/planner/soul.yaml — keep the defaults, supply the soul's payloads
45
- knowledge:
46
- owns: planner
47
- reads: [developer]
48
- messaging:
49
- channels: [product]
52
+ # souls/planner/soul.yaml: keep the defaults, supply a slot payload
50
53
  tasks:
51
54
  team: ENG
52
55
  project: Agent Platform
53
56
 
54
- # souls/support-triager/soul.yaml — opt out of one slot, replace another
57
+ # souls/support-triager/soul.yaml: opt out of one slot, replace another
55
58
  knowledge: none # empties the slot
56
59
  capabilities:
57
- oats.jira: { from: package } # its manifest says layer: tasks → replaces the default
60
+ oats.jira: { from: package } # its manifest says layer: tasks, so it replaces the default
58
61
  ```
59
62
 
60
- Packages are pinned once in the workspace's `packages:`
61
- (`oats.okf: v2.1.3`, …) and synced ([packages.md](packages.md)). Host-owned
62
- values (absolute paths) go in `oats-local.yaml`:
63
-
64
- ```yaml
65
- settings:
66
- oats.okf:
67
- bindings-file: /absolute/config/okf-bindings.json
68
- oats.aweb:
69
- delivery: channel
70
- ```
71
-
72
- Every soul gets one implementation per slot. Two layered capabilities arriving
73
- for one slot (a default plus a soul entry, or two soul entries) is
74
- `E_SLOT_CONFLICT`; spell `<cap>: off` to remove the one you do not want. `none`
75
- is a slot selection, not a policy: a soul with `messaging: none` has no address.
76
-
77
- ## Bundled integrations
78
-
79
- **`oats.okf` v2** fills `knowledge`: external owned OKF bases, immutable
80
- reader views, instance `STATE.md`/`log.md`/`notes/`, durable notes-and-record
81
- custody and an independent directory worker. Git delivery is PR-only; plain
82
- directory delivery is recoverable and needs no Git/gh. Explicit bindings,
83
- `soul/okf.json` and accepted base metadata are required before a working source
84
- can spawn. `owns`/`reads` are responsibility/context, not ACLs. See
85
- [knowledge](knowledge.md) for the **prepared** version scope, provisioning and
86
- commands.
87
-
88
- **`oats.aweb`** fills `messaging`: mints an instance identity at spawn (local
89
- mode) or grants an instance an expiring session as a resident global identity
90
- (global mode), removes or revokes it at retire, contributes the aweb messaging
91
- and team skills, wires the channel plugin so sessions are woken by mail, and
92
- exposes `oats aweb roster` and `oats aweb setup`. Requires the `aw` CLI.
93
-
94
- **`oats.jira`** fills `tasks`: the `jira-tasks` protocol and an advisory
95
- spawn hook. Requires `acli`; settings commonly include `site` and `project`.
96
-
97
- **`oats.linear`** fills `tasks`: JSON-first `oats linear` commands, the
98
- `linear-tasks` skill, and an advisory spawn hook. Uses `LINEAR_API_KEY`;
99
- secrets never belong in OATS config. See
100
- `capabilities/oats-linear/README.md` for its support boundary.
101
-
102
- > **Removed: `oats.web`.** The browser web-panel capability was retired in
103
- > favor of the OATS Desktop app (`packages/desktop/`), which bundles the same
104
- > zero-dependency loopback server. If an `oats-workspace.yaml` (`packages:`,
105
- > `defaults.capabilities`) or a `soul.yaml` still names `oats.web`, remove that
106
- > entry and `oats sync`.
63
+ - A soul's slot key is either `none` or that slot's payload (settings for the
64
+ provider that fills it).
65
+ - Two layered capabilities for one slot (a default plus a soul entry, or two
66
+ soul entries) is `E_SLOT_CONFLICT`; spell `<cap>: off` to remove the one you
67
+ do not want.
68
+ - `none` is a slot selection, not a policy: a soul with `messaging: none` has
69
+ no address.
70
+ - Host facts (absolute paths, custody directories) go in the deployment's
71
+ `oats-local.yaml` under `settings.<capability>`. The full merge order of
72
+ provider settings is in [capabilities.md](capabilities.md#who-gets-a-capability).
73
+
74
+ ## Official providers
75
+
76
+ Each provider's own repository documents its settings, commands and
77
+ operations in full.
78
+
79
+ | Slot | Provider | Needs on the host | Documentation |
80
+ | --- | --- | --- | --- |
81
+ | `knowledge` | `oats.okf` | `settings.oats.okf.bindings-file` and `state-dir` (absolute paths) in `oats-local.yaml`; `git` and `gh` for Git-backed bases; the harvest harness (`harvest-runtime`: `pi`, `claude` or `codex`) when harvest is on | [awebai/oats-okf](https://github.com/awebai/oats-okf), [knowledge.md](knowledge.md) |
82
+ | `messaging` | `oats.aweb` | the `aw` CLI at 1.36.13 or later; for channel delivery, `@awebai/pi` in pi or the `aweb-channel` plugin in Claude Code; host-only `root`, `roots` and `residents` in `oats-local.yaml` | [awebai/oats-aweb](https://github.com/awebai/oats-aweb) |
83
+ | `tasks` | `oats.jira` | `acli`, authenticated to the Jira site; `site` and `project` in the soul's `tasks:` payload or `settings.oats.jira` | [awebai/oats-jira](https://github.com/awebai/oats-jira) |
84
+ | `tasks` | `oats.linear` | `LINEAR_API_KEY` in the environment (never in OATS config); `team` (and optionally `project`) in the soul's `tasks:` payload or `settings.oats.linear` | [awebai/oats-linear](https://github.com/awebai/oats-linear) |
85
+
86
+ - **`oats.okf`** consults the soul's external OKF bases, keeps instance
87
+ knowledge, and, where the host switches harvest on, hands each instance's
88
+ notes and session to the `knowledge-harvester` package soul; the
89
+ `knowledge-maintainer` package soul reviews the resulting PRs.
90
+ - **`oats.aweb`** mints a messaging identity for each instance at spawn and
91
+ removes it at retire, contributes the aweb messaging skills, and wires the
92
+ channel so sessions are woken by mail. `oats aweb roster` lists the team.
93
+ - **`oats.jira`** teaches the `jira-tasks` protocol and adds an advisory spawn
94
+ hook that names the configured site and project.
95
+ - **`oats.linear`** provides JSON-first `oats linear` commands, the
96
+ `linear-tasks` skill and an advisory spawn hook.
97
+
98
+ The pinned versions and each package's capabilities and souls are in the
99
+ [official catalog](official-catalog.md#the-packages).
107
100
 
108
101
  ## Building an integration
109
102
 
110
- A slot provider that declares `binding` answers `oats readiness` through its
111
- `binding.check` command; the request, environment and answer are specified in
112
- [capabilities.md](capabilities.md#readiness-check-bindingcheck).
113
-
114
- Building an integration is implementing a contract. The checklist per slot:
115
-
116
- **Any slot.** A namespaced capability manifest with exactly one `layer`; an
117
- `inject` block that tells the instance what this implementation is and which
118
- skill to load before first use; skills that carry the craft; commands that
119
- support `--json`; hooks only on the accepted events; `requires` for every
120
- host command and runtime package; `environment` for every launch variable
121
- contributed, under the vendor prefix. Package commands and hooks reach the
122
- kernel only through `OATS_CLI_BIN` and the JSON envelope, never by importing
123
- kernel files. Never name target souls in the manifest; targeting belongs to
124
- configuration.
125
-
126
- **Knowledge.** Each capability owns its complete runtime and format, including
127
- reader/capture instructions, judgment and provider-native delivery. Do not
128
- assume a soul bundle, attached worker, Git store or mandatory shared harvester.
129
- The optional [authoring guide](knowledge-capability-authoring.md) describes the
130
- reference model and how to adapt or replace it. OKF v2 is one implementation:
131
- explicit external ownership, instructional read-only sources, evidence custody
132
- outside disposable homes, independent workers, PR-only Git and recoverable
133
- non-Git publication. Existing lifecycle hooks and supported CLI/scheduler
134
- commands implement it; no proposed universal `harvest` event is required.
135
-
136
- **Communication.** Mint an address on `spawn` with a `required` hook and
137
- remove it on `retire`; supply the roster; teach send, reply, chat, and "read
138
- the event first" in the inject and skill; contribute launch arguments so the
139
- session is woken; enforce the soul type's `reach` on both sides; state
140
- whether the address outlives the instance; and keep task coordination out.
141
- Any messaging provider emits `identity: { mode, alias, team, address|null,
142
- resident|null, grant?: { id, expiresAt, scopes } }` in its spawn meta (and
143
- in its launch meta when it renews); `oats.aweb` is the reference
144
- implementation. **This is a messaging-layer contract, not an oats.aweb
145
- detail** (decision 27): from kernel 0.25.6 the kernel copies it through as
146
- the principal the instance *acts as* — `oats status --json
147
- instances[].identity`, the roster's `identity:` line, `oats inspect --home …
148
- selected.identity` — preferring the capability whose recorded layer is
149
- `messaging`, adding `provider: <capability id>`, and never interpreting
150
- `grant`. The kernel offers no `--identity` flag: the choice travels as
151
- `--provider <cap> identity.mode=… identity.resident=…` and is bound by the
152
- spawn decision's `effective.providers`.
153
-
154
- A provider whose settings include a **host fact** — a custody directory, a
155
- state root — declares that key `hostOnly: true` in its manifest. The
156
- resolver then accepts it **only** from the deployment's `oats-local.yaml`
157
- `settings.<cap>` and refuses it in the workspace file, `byTeam` payloads, a
158
- soul's slot payload and `--provider` flags (`E_WORKSPACE_SCHEMA`, reason
159
- `host-only-key`, path and key named). The provider cannot enforce this
160
- itself: it receives one merged payload without provenance.
161
-
162
- **Tasks.** Teach claim, update, block, hand off, and complete; identify the
103
+ Building an integration is implementing a contract. The framework's
104
+ `integrations-expert` soul is the specialist for contract design.
105
+
106
+ **Any slot.**
107
+
108
+ - A namespaced capability manifest with exactly one `layer`.
109
+ - An `inject` that tells the instance what this implementation is and which
110
+ skill to load before first use; skills that carry the craft.
111
+ - Commands that support `--json`; hooks only on the accepted events.
112
+ - `requires` for every host command and harness package, and `environment`
113
+ for every launch variable contributed, under the vendor prefix. A
114
+ requirement row may carry `when: { <setting>: <value> }` (it applies only
115
+ when the effective setting matches), `minVersion` (a floor on the installed
116
+ harness package) and `ifInstalled: true` (an absent package satisfies the
117
+ row, so the floor applies only to an ambient extension).
118
+ - A setting that is a host fact (a custody directory, a state root) is
119
+ declared `hostOnly: true`. The resolver then accepts it only from
120
+ `oats-local.yaml` `settings.<cap>` and refuses it elsewhere
121
+ (`E_WORKSPACE_SCHEMA`, reason `host-only-key`). The provider cannot enforce
122
+ this itself: it receives one merged payload without provenance.
123
+ - A slot provider that declares `binding` answers `oats readiness` through
124
+ its `binding.check` command
125
+ ([capabilities.md](capabilities.md#readiness-check-bindingcheck)).
126
+ - Package commands and hooks reach the kernel only through `OATS_CLI_BIN` and
127
+ the JSON envelope, never by importing kernel files. Never name target souls
128
+ in the manifest: which souls get a capability is configuration.
129
+
130
+ **Knowledge.** The capability owns its complete runtime and format, including
131
+ reader and capture instructions, judgment and delivery. Do not assume a soul
132
+ bundle, an attached worker, a Git store or a shared harvester. The
133
+ [authoring guide](knowledge-capability-authoring.md) describes the reference
134
+ model and how to adapt or replace it.
135
+
136
+ **Communication.**
137
+
138
+ - Mint an address on `spawn` with a `required` hook, and remove it on
139
+ `retire`.
140
+ - Supply the roster; teach send, reply, chat and "read the event first" in the
141
+ inject and skill; contribute launch arguments so the session is woken.
142
+ - Enforce the soul type's `reach` on both sides, state whether the address
143
+ outlives the instance, and keep task coordination out.
144
+ - Emit `identity: { mode, alias, team, address|null, resident|null, grant?:
145
+ { id, expiresAt, scopes } }` in the spawn meta (and in the launch meta when
146
+ it renews). This is a messaging-layer contract: the kernel copies it
147
+ through, from the capability whose recorded layer is `messaging`, as the
148
+ principal the instance acts as (`oats status --json instances[].identity`,
149
+ the roster's `identity:` line, `oats inspect --home … selected.identity`),
150
+ adds `provider: <capability id>`, and never interprets `grant`. The choice
151
+ of identity travels as `--provider <cap> identity.mode=…
152
+ identity.resident=…`.
153
+
154
+ **Tasks.** Teach claim, update, block, hand off and complete; identify the
163
155
  instance to the tracker in a way that survives it; keep conversation out.
164
156
 
165
- The framework's `integrations-expert` soul remains the specialist for
166
- contract design, and the `integration-authoring` skill routes work to it.
167
- Test an integration as a capability package: acquire, lock, trust, activate,
168
- spawn, retire, with the golden fixtures as the behavior oracle for the kernel
169
- side.
170
-
171
- ## oats.okf v2 settings and recovery
172
-
173
- V2 requires `bindings-file`, an absolute path to capability-owned JSON. Paths
174
- inside it resolve from that file's directory. The source soul needs stable
175
- `owner`, `owns` and `reads` declarations; every referenced accepted node must
176
- exist and match its owner. Acquisition/activation never bootstraps a knowledge
177
- base. If activating globally, provision each working soul first or target only
178
- ready sources.
179
-
180
- ```yaml
181
- # oats-local.yaml
182
- settings:
183
- oats.okf:
184
- bindings-file: /absolute/config/okf-bindings.json
185
- harvest-runtime: claude
186
- ```
187
-
188
- - `harvest-runtime: pi | claude | codex` defaults to `pi`, independently of the
189
- source. Select an installed/authenticated runtime on the execution host.
190
- - `harvest-model` optionally pins its model. Omitted models use the harness
191
- default; native Claude/Codex names are not Pi provider-prefixed patterns.
192
- - Old record-window settings and `--from-record --force` recovery are not v2
193
- interfaces. Every capture takes notes **and** record; use durable run receipts
194
- and explicit `retry`/`complete` reconciliation, never old watermark moves.
195
-
196
- For remote sources, configure custody and credentials on their execution host,
197
- not the viewer. One source job continues from stable deployment context after
198
- retirement, subject to current activation/trust. Timer installation requires
199
- explicit consent. `inspect` is read-only and combines identity-guarded live
200
- memory with durable receipts; `--source` remains usable after home deletion.
201
- [Command and recovery details](knowledge.md#inspection-and-operator-commands).
202
-
203
- ## oats.aweb late joins (1.10.3)
204
-
205
- `aw team join` at spawn gets 120 s (a slow link is slow, not broken). If the
206
- join is reported failed or is killed on timeout but the home then holds a
207
- bound identity (signing key, team certificate, workspace alias), the hook
208
- reports that alias in its meta so the kernel's compensation retires it
209
- instead of orphaning it. The retire hook likewise reads the alias from the
210
- home's `.aw/workspace.yaml` when its meta carries none.
211
-
212
- ## oats.aweb retire report (1.10.2)
213
-
214
- On a host whose installed `aw` is 1.36.1 or later, the retire hook deletes
215
- the workspace with `aw workspace delete <alias> --json` and reports what the
216
- platform answered: `meta.aliasReusable` is true when `alias_released` is
217
- true (the certificate was revoked and a later spawn may reuse the slug),
218
- false otherwise with `meta.aliasReason` carrying the platform's reason and a
219
- warning naming the fresh-purpose remedy. On an older `aw` the pre-1.36.1
220
- report stands (`aliasReusable: false`, warning naming aweb-abim), because
221
- that CLI cannot revoke the certificate.
222
-
223
- ## oats.aweb settings (1.12.2)
224
-
225
- Set portable team policy in the workspace/soul `messaging:` payload; set host
226
- facts in `oats-local.yaml` under `settings.oats.aweb.<key>`. Per-spawn
227
- `oats spawn … --provider oats.aweb <key>=<value>` is for non-host settings only.
228
- The effective payload is merged in order: workspace messaging, `byTeam[<primary label>]`,
229
- soul messaging, `oats-local.yaml` `settings.oats.aweb`, then per-spawn
230
- `--provider` values. `root`, `roots`, and `residents` are manifest-declared
231
- `hostOnly: true`: absolute root/custody paths are accepted only from
232
- `oats-local.yaml`; kernels since 0.25.6 refuse those keys in the workspace file,
233
- `byTeam`, soul payloads and `--provider` flags with `E_WORKSPACE_SCHEMA` reason
234
- `host-only-key`.
235
-
236
- - `team: <team id>`. The payload team wins over `OATS_TEAM_ID`/
237
- `OATS_TEAM_NAME`; if both are set and differ, the hook warns and uses the
238
- payload. Workspace v2 spawns can have an empty `OATS_TEAM_ID`, so set this in
239
- the workspace file's `messaging:` / `messaging.byTeam.<label>.team`, or in
240
- `settings.oats.aweb.team` for a host override.
241
- - `root: /absolute/dir`. Host-owned absolute directory whose `.aw` is the aweb
242
- minting root. A declared root without `.aw` is fatal; run `oats aweb setup`
243
- there or set `settings.oats.aweb.root` to the initialized root.
244
- - `roots: { <team id>: /absolute/dir }`. Host-owned map for deployments that
245
- mint into several aweb teams. When a team is known, `roots[team]` wins over
246
- `root`.
247
- - Minting root resolution for spawn and setup is: `roots[team]` when the team is
248
- known and present, else `root`. With no declared root, workspace v2 uses
249
- `<OATS_WORKSPACE>` (the deployment directory whose `.aw` is used) and never
250
- searches above it; classic deployments with `OATS_TEAM_SCOPE` keep the
251
- historical bounded candidate search order exactly (team scope, home, home git
252
- root, context, context git root, then workspace).
253
- - `binding-check` answers `needs-configuration` before spawn with one problem
254
- per missing item: `no messaging root at <dir>: run oats aweb setup there or
255
- set settings.oats.aweb.root`; `no team: set messaging.byTeam.<label>.team in
256
- the workspace file or settings.oats.aweb.team`. With both present it answers
257
- `ready`.
258
- In classic deployments this readiness check approximates the full bounded
259
- spawn search by checking `OATS_TEAM_SCOPE` before `OATS_WORKSPACE`; the spawn
260
- hook itself still keeps the exact 1.12.0 bounded candidate order. With no
261
- explicit team and no workspace team label, readiness follows spawn: an active
262
- aweb team at the root is enough to answer ready; an unmapped workspace team
263
- label still reports the team-setting remedy above.
264
- - `oats aweb setup` is idempotent and uses existing aw primitives. With
265
- `--username <u>` it runs `aw init --username <u>` at the messaging root and
266
- tells the operator to map the workspace team to `default:<u>.aweb.ai` when
267
- that team is not already the configured target. With `AWEB_API_KEY` in the
268
- environment it runs `aw init` at the root for the hosted team behind the key.
269
- With `--invite <token>` it runs `aw team join <token>`. It never prints the
270
- API key or invite token, re-reads `aw team list --json` after the action, and
271
- prints the same ready/needs-configuration verdict as binding-check.
272
- - `identity.mode: local | global` (default `local`). Any other value is fatal.
273
- Local mode is the historical behavior: a spawned team identity is minted for
274
- the instance, or `identity.source` uses the existing retained-seat flow below.
275
- Its spawn meta includes `identity: { mode: "local", alias, team, address:
276
- null, resident: null }` beside the existing top-level `alias`, `team`, and
277
- `delivery` keys. Local-mode spawn output contributes
278
- `env.AWEB_IDENTITY_HOME=<home>/.aw` (and retained-seat local mode contributes
279
- the same path) so `aw mail`, `aw chat`, `aw whoami`, `aw wake`, and
280
- `aw workspace status` work from the instance's `work/` or any other cwd.
281
- - `identity.mode: global` makes the instance act as a resident global identity
282
- through an aweb session grant; it never mints a new global identity and never
283
- copies root keys into the instance home. `identity.resident` is required and
284
- resolves through `residents.<name>` to an absolute custody directory whose
285
- `.aw/identity.yaml` already exists. Missing or unresolved residents fail with
286
- the `oats-local.yaml settings.oats.aweb.residents.<name>` key to set. Optional
287
- `identity.scopes` defaults to exactly `[mail.read, mail.send, chat.read,
288
- chat.send]`; optional `identity.ttl` defaults to `8h` (aw accepts `60s` to
289
- `720h`). Spawn first runs `aw custody status --json` in the resident custody
290
- directory and uses exactly the reported `socket_path`; a status without a
291
- socket is refused. It then runs `aw id grant mint --team <team-id> --scope
292
- <comma-list> --ttl <ttl> --label oats:<instance> --out
293
- <home>/.aweb-identity --custody-socket <preflight-socket> --json` from the
294
- custody directory when aw is 1.36.2 or later for `--team`; grants need aw >=
295
- 1.36.3 (`CUSTODY_ATTACH_MIN`) with aweb server >= 1.27.5 for
296
- `--custody-socket`. `AWEB_IDENTITY_HOME`
297
- is removed from mint/revoke child environments: grant commands are not
298
- identity-home-aware and intentionally refuse both `--identity-home` and
299
- external `AWEB_IDENTITY_HOME`, so cwd selects the custody identity. The hook
300
- parses the whole JSON document because aw `--json` output is indented across
301
- lines, with a fallback to the first brace-prefixed block when progress lines
302
- precede it; it then verifies the minted grant's `team_id`, reads back
303
- `<grantHome>/grant.yaml` (not `encryption.yaml`) and requires
304
- `custody.socket_path` to equal the preflight socket, and runs
305
- `aw custody status --json` with `AWEB_IDENTITY_HOME=<grantHome>` from the grant
306
- home to verify the resident alias and ready team row. Missing or mismatched
307
- custody attachment revokes the grant, removes the grant home and fails the
308
- spawn. It returns `env.AWEB_IDENTITY_HOME=<home>/.aweb-identity`. If the minted
309
- team differs, the hook revokes the grant and keeps nothing. Receiving, wake registration,
310
- and `aw whoami` work through a grant. On aw 1.36.1 the server rejected mail
311
- or chat sent through a grant with 422 (`from_did must match the authenticated
312
- sender`) because the client signed with the grant-key DID. aw 1.36.2 with
313
- aweb server 1.27.5, the floor, fixes this; grant mail and chat sends passed
314
- real-server acceptance there. A hosted team whose server has not yet adopted
315
- 1.27.5 still refuses grant sends; the custody preflight reports that as
316
- needs-configuration before spawn through `grant_status_endpoint_ready`.
317
- Retire revokes
318
- `meta.identity.grant.id` through the custody directory; with no grant id it
319
- reports `nothing-to-revoke`. A failed revoke exits nonzero and reports the TTL
320
- expiry. A binding-less home readiness check for global mode never reports ready
321
- for a grant home whose `grant.yaml` lacks `custody.socket_path`; it reports
322
- `needs-configuration` / code `custody` and tells the operator to retire and
323
- respawn on an aw new enough to attach custody.
324
- - `residents: { <name>: /abs/custody/dir }` is the host-owned map for global
325
- mode. Each custody directory's `.aw` holds the resident identity root keys and
326
- team certificate. Do not put this map in committed source; the hook cannot
327
- distinguish payload provenance.
328
- - `delivery: channel | session` (default `channel`). `session` hands
329
- notification delivery to the host wake broker: `AWEB_DELIVERY=session` in
330
- the launch environment (declared by the manifest), no Claude channel flag,
331
- a pi extension that honours the opt-out (`@awebai/pi` 0.3.10 or later) and
332
- a Claude Code channel plugin that does too (`aweb-channel` 1.7.9 or later),
333
- both enforced as conditional requirements with a version floor when
334
- installed (an older plugin starts its own channel server beside the broker
335
- and can fetch a message before the broker delivers it), and a briefing
336
- and registration of the home with the host wake broker (`aw wake register`).
337
- Until an aw that ships `aw wake` exists (aweb-abil), session mode REFUSES
338
- to spawn rather than leave an instance that nothing wakes: it is for broker
339
- qualification only; leave the default otherwise.
340
- - `identity: { source: "/abs/path/to/legacy/.aw" }`, per soul, explicit and
341
- never inferred. The spawned instance becomes the retained seat of that
342
- existing identity (same did:aw and address). The aweb service URL comes
343
- from the source's `workspace.yaml` (`aweb_url`); a hosted-init source has
344
- none, so set `OATS_AWEB_URL` (for example `https://app.aweb.ai/api`) in
345
- the spawn environment when the source lacks it: the identity-authority files
346
- are copied into the home's `.aw` (never `workspace.yaml` or caches), the
347
- coordination binding is reconnected with `aw workspace connect`, and the
348
- seat is verified online before the instance is briefed. A lock beside the
349
- source (`.aw-retained-seat.json`) refuses a second seat while a holder is
350
- live. Retire releases the lock and touches neither the identity nor the
351
- source; removing the legacy `.aw` is a human step. Rehearse on a disposable
352
- global identity first: a send, a claim and a heartbeat from the new home
353
- must all work before any real seat moves.
354
-
355
- Requirement rows in a manifest may carry `when: { <setting>: <value> }` (the
356
- row applies only when the capability's effective setting matches) and
357
- `minVersion` (the version is read from the package.json under the install
358
- directory the runtime's listing names; an older or absent manifest fails the
359
- requirement with the install remedy). `ifInstalled: true` makes an absent
360
- package satisfy the row, so the floor applies only to an ambient extension.
157
+ Test an integration as a capability package: pin, sync, spawn and retire, with
158
+ the golden fixtures as the behavior oracle for the kernel side.
@@ -7,66 +7,40 @@ The released skill includes checked copies of this set; authors and the
7
7
 
8
8
  ## Authority and scope
9
9
 
10
- OATS offers an opinionated reference knowledge theory. Default OKF follows it;
11
- other capabilities may adopt, adapt, or replace it. The kernel owns generic
12
- layer selection, configuration, composition, lifecycle, work-mode boundaries
13
- and executable trust, not a compulsory memory ontology or universal judge.
10
+ OATS offers an opinionated reference knowledge theory. The default provider,
11
+ OKF, follows it; other capabilities may adopt, adapt or replace it. The kernel
12
+ owns slot selection, composition, lifecycle, work-mode boundaries and the
13
+ hook contract, not a memory model or a judge.
14
14
 
15
- This guide distills the approved 2026-09-13 knowledge scoping session. The
16
- reference derivation comes from OATS's knowledge theory; its historical
17
- references to physical soul bundles are replaced here by external knowledge
18
- custody. The approved implementation plan settles plain-directory OKF as the
19
- first non-Git path and keeps Omnigraph an uninvestigated authoring scenario.
20
- Earlier drafts' open choices are not implementation facts. The curriculum is
21
- a design/authoring reference, not a claim that all default runtime behavior
22
- has already shipped. Verify the capability version actually being evaluated.
15
+ Every implementing capability supplies its full runtime: reader tools,
16
+ injections, capture conventions, judgment instructions, a harvester if any,
17
+ lifecycle and scheduling, validation, delivery and diagnostics. Reuse may be
18
+ explicit and versioned, never a hidden fetch of mutable doctrine. The theory
19
+ expert advises authors; it does not operate their stores or approve their
20
+ compatibility. Composing this capability selects no knowledge provider.
23
21
 
24
- Every implementing capability supplies its full runtime package: reader tools,
25
- injections, capture conventions, judgment instructions, harvester if any,
26
- lifecycle/scheduling machinery, validation, delivery and diagnostics. Reuse
27
- may be explicit and versioned, never a hidden fetch of mutable doctrine.
28
- The theory expert advises authors; it does not operate their stores or approve
29
- their compatibility. Installing the theory package activates nothing.
22
+ ## Getting the authoring package
30
23
 
31
- ## Install the optional authoring package
32
-
33
- The kernel's npm package ships this public guide and the CLI, **not** the
34
- optional expert payload. The catalog selects `oats.knowledge-theory` 1.0.0
35
- from the already-published framework v0.23.0 Git `oats-package/` subtree. Git preserves the canonical
36
- source `CLAUDE.md -> AGENTS.md` symlink; npm omits symlinks, so a partial npm
37
- copy is not a supported distribution. Acquisition does not repair source
38
- aliases or relax installed-artifact integrity checks.
39
-
40
- Select a deployment scope explicitly and acquire the published source, then
41
- opt in for an author soul:
24
+ `oats.knowledge-theory` ships in the `oats.framework` package, read from Git
25
+ (npm omits the package's `CLAUDE.md -> AGENTS.md` symlink, so an npm copy is
26
+ not a supported distribution). Pin the framework and give the capability to
27
+ an author soul:
42
28
 
43
29
  ```yaml
44
30
  # oats-workspace.yaml
45
31
  packages:
46
- oats.framework: v1.1.3 # provides oats.core, oats.setup, oats.knowledge-theory
32
+ oats.framework: v1.4.0 # provides oats.core, oats.setup, oats.knowledge-theory
47
33
 
48
34
  # souls/<author-soul>/soul.yaml
49
35
  capabilities:
50
36
  oats.knowledge-theory: { from: package }
51
37
  ```
52
38
 
53
- `oats sync` resolves the version to a commit and locks it; the package is read
54
- at `oats-package/` of its repository.
55
- The `oats.knowledge-theory` catalog shortcut uses that same published v0.23.0
56
- source. The current authoring-reference patch is package 1.0.1: once framework
57
- v0.23.1 is published, an explicit initial Git acquisition at that tag selects
58
- the patch instead. It does not silently change the catalog's 1.0.0 selection
59
- or an existing lock. For local development, use an explicit complete source
60
- package path instead. Activation targets the authoring skill, without
61
- selecting or replacing a knowledge capability.
62
-
63
- The expert is an oats.framework **package soul** from framework 1.3.0
64
- (`oats-package/souls/knowledge-theory-expert/`, reading `oats.knowledge-theory`
65
- 1.1.0 from its own package): spawn it by its qualified name in the author's
66
- repository, `oats spawn oats.framework/knowledge-theory-expert --repo <repo>`.
67
- Before 1.3.0 it was a capability-defined agent, which OATS 0.29.0 removed.
68
- There are no executable surfaces to trust in this package. Installed experts
69
- use their materialized local curriculum, not this repository at runtime.
39
+ The expert is the framework's package soul `knowledge-theory-expert`, which
40
+ reads `oats.knowledge-theory` from its own package. Spawn it in the author's
41
+ repository: `oats spawn oats.framework/knowledge-theory-expert --repo <repo>`.
42
+ The package has no commands or hooks, and an expert uses its copied local
43
+ curriculum, not this repository.
70
44
 
71
45
  ## A bounded authoring session
72
46
 
@@ -98,9 +72,9 @@ use their materialized local curriculum, not this repository at runtime.
98
72
  - Custody: named destinations, owner identity, accepted state, concurrency,
99
73
  retry and reader-refresh semantics. No credentials in the report.
100
74
  - Proposed artifacts: capability manifest, local resources, instructions,
101
- skills, optional agent, hooks/operations and declared trust surface.
75
+ skills, package souls, hooks and operations, and the declared environment.
102
76
  - Verification: tests run, actual receipts/visibility, failures, untested claims
103
- and the next required approvals. Do not call scaffold-only an agent trial.
77
+ and the next required reviews. Do not call scaffold-only an agent trial.
104
78
 
105
79
  ## Maintaining these references
106
80
 
@@ -108,6 +82,5 @@ Edit this file and `docs/knowledge-reference/` in the framework source, then
108
82
  run `node scripts/check-knowledge-theory-package.mjs --write` from that checkout.
109
83
  Run `node scripts/check-knowledge-theory-package.mjs` and
110
84
  `node --test test/knowledge-theory-package.test.mjs` to verify parity and the
111
- installed artifact. These are maintainer commands, not tools required in an
112
- installed expert's work tree. The copies belong to a package release; edits to
113
- repository docs do not change any installed capability at runtime.
85
+ packaged copy. The copies ship with the next framework release; editing the
86
+ docs changes no deployed capability.
@@ -2,9 +2,9 @@
2
2
 
3
3
  These are reusable authoring cases for the [reference model](model.md), plus
4
4
  generic package isolation checks. They are not compulsory theoretical
5
- conformance tests for an [alternative model](adoption.md). The default OKF
6
- workstream must exercise both Git and real non-Git custody; Omnigraph is not a
7
- required dependency. Record provider/kernel versions and checks actually run.
5
+ conformance tests for an [alternative model](adoption.md). OKF's cases exercise
6
+ both Git and real non-Git custody. Record provider/kernel versions and checks
7
+ actually run.
8
8
 
9
9
  ## Package and policy isolation
10
10
 
@@ -25,7 +25,7 @@ lifecycle effects, scheduling, native persistence, validation and diagnostics.
25
25
  There is no invisible shared theory layer underneath it. It must be usable
26
26
  without the expert running or reference documentation fetched over the network.
27
27
 
28
- The default-theory rework chooses external bases/nodes, instructional
28
+ The default OKF model chooses external bases/nodes, instructional
29
29
  read/capture-only workers, independent harvesting, PR-only Git delivery and
30
30
  real non-Git custody. These are adoption choices, not new mandatory kernel
31
31
  fields. OKF-specific files, schemas and validator calls stay in OKF. A