@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,744 +0,0 @@
1
- # Knowledge and memory in OATS: the central knowledge base and the expertise doctrine
2
-
3
- **Status:** founder direction (Pepe), consolidated on 2026-09-13 as the
4
- implementation brief for the `oats.okf` knowledge capability. Written by
5
- oas-expert (the OAS steward soul) from the recorded decisions listed in
6
- section 10. Where this document states a requirement, it names the decision
7
- it comes from. Where it proposes a mechanism, it says so, and the mechanism
8
- is the implementers' call as long as the requirement holds.
9
-
10
- **Audience:** the OATS engineers who will implement this in `oats.okf`, and
11
- their reviewers. Read section 3 before anything else. An implementation that
12
- gets every mechanism in sections 4 to 6 right and section 3 wrong is worse
13
- than the current package.
14
-
15
- ---
16
-
17
- ## Scoping amendments — 2026-09-13
18
-
19
- Subsequent direct human scoping settles eight points. These supersede any
20
- conflicting mechanisms or completion tests below. The requirements describe
21
- OATS's default knowledge model and its OKF implementation, not compulsory
22
- theoretical policy for every third-party knowledge capability:
23
-
24
- 1. **All knowledge leaves the soul**, including general expertise.
25
- 2. **For now, cannot-write is explicit OKF injection guidance**, not a
26
- mechanical filesystem-refusal guarantee (amends sections 4.6, 7.8 and 8.1).
27
- 3. **Harvesting is independent of the source instance's context**; its worktree,
28
- branch and work mode do not determine execution or destination custody.
29
- 4. **Git-committed knowledge uses PR delivery**, for both public and private
30
- repositories; there is no attached/private direct-commit exception
31
- (amends sections 4.11 and 7.7).
32
- 5. **For now, repository permissions rest on users' GitHub accounts.** Assume
33
- all agents in a workspace/team can access its configured knowledge repos.
34
- Defer the public/private distinction, per-agent ACLs, and disclosure routing;
35
- `reads` is context selection, not an access-control boundary (settles the
36
- initial read-scoping choice in section 7.6).
37
- 6. **The first working version includes Git-backed OKF and a non-Git knowledge
38
- store.** Non-Git support is not a later stub or roadmap item. Whether its
39
- first implementation is directory-backed OKF or another tool is still open.
40
- 7. **The reference knowledge/memory theory is independent of storage tools.**
41
- A CLI-backed integration such as the proposed Omnigraph case can adopt the
42
- same concepts and doctrine while using native tools, but may also choose a
43
- different theoretical model. OKF files, indexes, validation and Git PR
44
- mechanics below are implementation choices, not universal requirements.
45
- 8. **OATS provides canonical theory and authoring help; capabilities own runtime.**
46
- Maintain canonical docs for knowledge injections/skills and provide a
47
- `knowledge-theory-expert` agent to help capability authors. Default OKF
48
- follows the reference framework. Every capability supplies its own complete
49
- skills, injections, memory behavior, harvester and related machinery; no
50
- mandatory shared runtime doctrine is injected by OATS. The expert and full
51
- authoring material are planned, not implemented yet.
52
-
53
- The accepted rulings are recorded in
54
- [external knowledge custody](../../agents/oats-expert/soul/knowledge/decisions/external-knowledge-custody.md)
55
- and [provider-neutral knowledge and harvest](../../agents/oats-expert/soul/knowledge/decisions/provider-neutral-knowledge-and-harvest.md).
56
- The [knowledge location contract](2026-09-13-knowledge-location-contract.md)
57
- is a **proposal**, separating the common model from integrations and custody,
58
- with explicit bindings, embedded/dedicated Git OKF, and non-Git storage.
59
- Its schema and mechanisms are not accepted yet; the earlier public/private
60
- policy proposal is deferred. The original brief is retained
61
- below for rationale and further scoping; it is not an implementation-ready
62
- contract where these questions remain open.
63
-
64
- ---
65
-
66
- ## 1. What this changes, in one paragraph
67
-
68
- Today every soul carries its own `soul/knowledge/` bundle, the working
69
- instance is told to run `oats okf harvest` after committing, and the
70
- harvester promotes that instance's notes (or captured session turns) into
71
- that soul's bundle. After this change there is **one knowledge base per
72
- project**, normally living in the project's repository; each soul's former
73
- knowledge folder becomes a **node** of that base, with exactly one owning
74
- soul; souls declare which nodes they **own** and which they **read**; the
75
- running agent reads its nodes and the wider base, keeps its instance memory
76
- current, and **never writes to the base and never learns that a harvester
77
- exists**; a harvester runs **per instance**, on a schedule the capability
78
- declares and once more at retirement, and is the **only writer**; and the
79
- harvester's first rule, ahead of all mechanics, is that knowledge is what
80
- makes an agent an expert in a subject, **never a description of what the
81
- code already says**.
82
-
83
- ---
84
-
85
- ## 2. Vocabulary
86
-
87
- These terms are used precisely throughout. Most are already OATS vocabulary
88
- (`docs/knowledge.md`, `docs/knowledge-theory.md`, the September 3
89
- architecture proposal); the new ones are marked.
90
-
91
- | Term | Meaning |
92
- |---|---|
93
- | **Soul** | Durable specialist identity: `soul.yaml`, `AGENTS.md`, `skills/`. Committed, reviewed, versioned. Identity across incarnations. |
94
- | **Instance** | One disposable incarnation of a soul with its own home, task, and work view. |
95
- | **Instance memory** | `STATE.md`, `log.md`, `notes/` in the instance home. Indexical (I, here, now). Dies with the instance. |
96
- | **Knowledge base (KB)** *(new)* | One versioned OKF bundle per project holding every node. Repo-resident by default; a team-scope location is the option for cross-repository or private knowledge. |
97
- | **Node** *(new)* | A sub-bundle of the KB (its own `index.md`, `log.md`, sections) with exactly one owning soul. What `soul/knowledge/` used to be, relocated. The unit of ownership, of reading interest, and of promotion destination. The 2026-09-08 deployment proposal calls this a *collection*. |
98
- | **Owns / reads** *(new)* | A soul's declarations: the nodes its harvesters write to, and the nodes its instances load at session start. |
99
- | **Harvester** | A soul of the type permitted to write knowledge (`memory-harvest`). Converts one instance's notes and captured record into KB writes. The only writer. |
100
- | **Harvest** | The act of de-indexicalization: rephrasing what an instance learned so the claim survives its author, then judging it against the promotion bar. |
101
- | **Promotion bar** | "Durable AND would change what a future instance of this soul does." An invariance test. Extended in section 3 by the second test: "and could it NOT have been found by reading the repository." |
102
- | **Capture vs judgment** | The working instance captures without judging (cheap, in-flow). The harvester judges (deliberate, one consistent standard). |
103
- | **Soul type** | The policy unit in OATS: which capabilities a soul receives, what knowledge it may read, whether it may write knowledge, and its communication reach. |
104
- | **Record** | The turn record (`packages/record`): every Claude Code, Pi, and Codex session captured verbatim, content-addressed; `oats recall` reads windows of it. |
105
-
106
- ---
107
-
108
- ## 3. The doctrine: what knowledge is, and what it is not
109
-
110
- ### 3.1 The single most important thing
111
-
112
- > Knowledge is what makes an expert agent an expert in a topic or a project.
113
- > It is **not** a description of what lives in the code.
114
-
115
- Source: founder direction of 2026-09-09, restating the position first taken
116
- on 2026-08-27 and recorded in the OATS architecture proposal on 2026-09-04
117
- ("The line is decision versus description").
118
-
119
- An agent that knows how the code is laid out, what the modules are called,
120
- and how they fit together has learned nothing an agent with a fresh clone and
121
- ten minutes could not learn. Worse, a stored description competes with the
122
- code and loses on freshness: once it drifts it lies, silently, to every
123
- future instance. That is the content automatic memory systems accumulate,
124
- and it is what public audits of those systems found to be worthless (section
125
- 9, source 4). Code is the truth about code.
126
-
127
- What no amount of code reading recovers is **why** the code is the way it
128
- is, **what was rejected** on the way, **what was decided** about where it is
129
- going, **what was discovered** to be a limitation and how it was worked
130
- around, **what the state of an area is** right now, and **what someone
131
- concluded** after thinking a problem through. That is expertise. It is what a
132
- senior engineer knows and a new hire does not, even when both can read the
133
- same repository. It is what we are building souls to accumulate.
134
-
135
- ### 3.2 The accept list
136
-
137
- The harvester promotes these kinds of knowledge. Each is illustrated so the
138
- category is unmistakable.
139
-
140
- 1. **Decisions and their rationale.** What was chosen and why. *"Registration-time
141
- authorization: every tool's gate is decided in `newServer()` and nowhere
142
- else, because a second line of defence invites the first one to be
143
- skipped."*
144
- 2. **Rejected alternatives and why.** Code shows the outcome, never the
145
- alternatives. Without this record a capable agent will "helpfully" refactor
146
- toward the rejected option. *"A standalone `semantic_models:` spec was
147
- rejected: it silently disables the production semantic layer with a green
148
- parse."*
149
- 3. **Architecture rationale.** Why the shape is what it is, and whether it is
150
- deliberate or a stopgap. Not the shape itself. *"The client talks GraphQL for
151
- both metadata and query execution because no Go SDK exists; this diverges
152
- from both Python reference implementations on purpose."* The description of
153
- which package implements the client is not knowledge; the repository says
154
- it.
155
- 4. **Roadmap and direction.** Where the project is going and what it is
156
- sponsored to become. *"The epic exists to stop generated SQL being how data
157
- gets read; the end state retires the text-to-SQL tool entirely."*
158
- 5. **How the work is going: typed slow state with an owner.** A maintained,
159
- dated, superseded-on-change picture of an area: what is on main, what is in
160
- flight, what is blocked, what is open. This is the compounding-expertise
161
- claim itself, and it is safe only when it has an owner and an
162
- update-on-change rule. Without those it is indistinguishable from slop.
163
- 6. **Blockers**, named with what they block and what unblocks them.
164
- 7. **Discoveries.** Facts about the world that were not written anywhere and
165
- cost effort to establish. *"MCP tool descriptions are truncated at 2,048
166
- bytes and clients that defer schemas replace optional parameter descriptions
167
- with generated summaries; only the description and required parameters
168
- survive."*
169
- 8. **Limitations found and the solutions that worked.** *"GraphQL pages at
170
- about 1,024 rows where Arrow Flight streams; follow `totalPages`, never send
171
- 'no limit'."*
172
- 9. **Conclusions of thinking things through or researching.** The output of
173
- an investigation, not its transcript.
174
- 10. **Inspiration genealogy** (the strongest case for design souls). What was
175
- borrowed from where, which patterns were rejected, and which observed
176
- failures drove the rejection. Code shows pixel values, never intent.
177
- 11. **Process and environment lessons** that the repository cannot express:
178
- CI and release traps, toolchain gotchas, review protocol, the way this team
179
- ships. *"CI does not build or test this repository; the local verification
180
- loop is the only gate."*
181
-
182
- ### 3.3 The reject list
183
-
184
- The harvester drops these, however well written.
185
-
186
- 1. **Anything a fresh agent could derive by reading the repository:**
187
- structure, style, naming, how modules fit, what a file does, which function
188
- calls which. Including "helpful" maps of the codebase. If a navigational
189
- hint is genuinely needed, it belongs in the repository's own docs where it
190
- moves with the code.
191
- 2. **Task residue:** PR numbers, half-done plans, "was working on X", "liked
192
- variant C", point-in-time environment facts, who was on shift. Indexical
193
- content whose referents die with the instance.
194
- 3. **Session trivia and tool noise:** what commands were run, what the tool
195
- output said, retries, dead ends that taught nothing.
196
- 4. **Secrets and credentials**, however they appear.
197
- 5. **Third-party message content verbatim.** A lesson may be *about* a
198
- received message; unverified sender content is not knowledge by
199
- transcription.
200
- 6. **Lessons that should have been code.** A gotcha that a lint rule, a test,
201
- a type, or a CI check would eliminate is knowledge debt unless it says so
202
- and points at the real fix. The harvester asks for the elimination route
203
- first: architecture, then lint/CI/tests, then a skill or rule, and only
204
- then a lesson.
205
-
206
- ### 3.4 The two-part test
207
-
208
- For every candidate the harvester asks:
209
-
210
- 1. **Would a future instance of this soul act differently for knowing it?**
211
- 2. **Could it NOT have found this by reading the repository?**
212
-
213
- Both must be yes. The first is the original promotion bar (an invariance
214
- test). The second is the code-is-truth guard. "Architecture" passes only as
215
- rationale or decision; an architecture *description* fails the second test
216
- by definition. Keep that word precise in the skill.
217
-
218
- ### 3.5 Why decisions and descriptions age differently
219
-
220
- A description goes stale and **silently lies**. A decision is **superseded**,
221
- which is an explicit, loggable act: the new decision names the old one. This
222
- is why decision records are safe to keep for years and descriptions are not
223
- safe to keep for weeks. Slow state (accept item 5) sits between the two and
224
- is only safe because it carries a timestamp, an owner, and the rule that
225
- whoever changes the reality updates the record in the same session.
226
-
227
- ### 3.6 Non-coding souls are almost pure knowledge
228
-
229
- The code-is-truth objection bites developer souls hardest and non-coding
230
- souls not at all. An `oats-expert` soul's accepted project direction and
231
- rejected alternatives, or a domain expert's model of the subject: none of
232
- that rationale is re-derivable just by reading the code. For those
233
- souls the knowledge node **is** the expertise, and the doctrine's reject
234
- list mostly removes noise rather than substance. The harvester must not apply
235
- a "developers rarely need knowledge" heuristic to them. Source: founder
236
- correction of 2026-08-27 ("developer agents should know about important
237
- architecture decisions... UX agents can also hold valuable knowledge of
238
- inspiration... do push back if you don't think so"), and the OATS proposal's
239
- write-side paragraph of 2026-09-04.
240
-
241
- ### 3.7 One home per decision: the homing rule
242
-
243
- Split-brain comes from copies, not from the existence of a record. Route each
244
- piece of knowledge to exactly one home, by audience:
245
-
246
- | Kind | Home |
247
- |---|---|
248
- | Multi-role project facts every contributor needs (module boundaries, IPC contracts, platform constraints that bind several roles) | The repository's own docs (ADR-style), because a per-role node silos what everyone, including non-OATS contributors, needs. Nodes hold **pointers**, never copies. |
249
- | Role-scoped craft decisions (why this panel renders this way, why the CLI parses arguments as it does) | That role's node. |
250
- | Product direction and cross-cutting vision | The steward's node. Other souls consult it and never duplicate it. |
251
- | Procedures future instances should run the same way every time | The soul's `skills/`, not knowledge. (Section 4.9.) |
252
-
253
- A concrete pattern already in production on one deployment: an engineer
254
- soul's operating doc says *"the repository documents itself unusually well;
255
- your knowledge carries only what those files do not say, plus a record of
256
- where they are stale."* That sentence is the doctrine applied. Its node then
257
- holds the decisions behind the tool surface and a stale-docs ledger, and
258
- nothing that the repository's own `ARCHITECTURE.md` already says.
259
-
260
- ### 3.8 The audit question
261
-
262
- The doctrine came out of a public audit of an automatic memory system
263
- (source 4): dozens of stored memories per clone, most never read, a roughly
264
- three-to-one write-to-read ratio, content dominated by point-in-time state,
265
- outdated facts, duplication of the instructions file, and per-machine
266
- divergence in a hidden store. Every one of those failures is a guard this
267
- design holds: indexical content is rejected at harvest; reading is explicit
268
- and index-first; the base is versioned and reviewed; capture and judgment are
269
- separate roles. The standing test for any concept in the base is therefore:
270
-
271
- > **Would this survive that audit?** It is either likely to be consulted,
272
- > explicitly freshness-marked where it must be, or absent because the
273
- > repository can already answer it.
274
-
275
- ---
276
-
277
- ## 4. The target architecture
278
-
279
- ### 4.1 One knowledge base per project, repo-resident by default
280
-
281
- **Requirement (founder, 2026-09-09, amended the same day):** all knowledge
282
- of a project lives in one versioned OKF bundle, auditable as a whole: one
283
- index of nodes, one history, one validator run. The base **may live in the
284
- repository itself**, and that is the default for a single-repository project
285
- and for every open-source project: a `knowledge/` bundle at the repository
286
- root, one sub-bundle per node. Portability is then git. Clone the project and
287
- its knowledge comes along, for contributors from any organization, with no
288
- export step.
289
-
290
- A **team-scope base** (a directory or repository at the deployment's team
291
- scope) remains the option for a multi-repository deployment's cross-repo or
292
- private knowledge. **Base location is a binding, not a design constant**:
293
- souls reference nodes by name; deployment configuration says where a named
294
- node lives.
295
-
296
- Why central rather than per soul: with knowledge scattered across soul
297
- directories, nothing can audit the whole, no single validator run covers it,
298
- nodes of different souls cannot cross-link cleanly, a steward cannot see what
299
- the team knows, and "the expert's memory" becomes an unauditable second
300
- source of truth (the failure the 2026-09-08 deployment proposal names for
301
- deployment experts: *the expert must not become the deployment's database*).
302
-
303
- Why repo-resident rather than a separate store: it keeps the property the
304
- current design already has (soul knowledge is versioned in the repo today),
305
- it makes knowledge governance equal to repository governance (a harvester's
306
- promotion to an open-source project is a pull request reviewed like code),
307
- and it removes the export/import mechanism the first draft required. The
308
- founder withdrew that requirement explicitly: *"Portability matters for
309
- things like open source projects with contributors from many orgs. Nothing
310
- stops the knowledge from being in the repo itself."*
311
-
312
- ### 4.2 Nodes
313
-
314
- A node is what `soul/knowledge/` is today, relocated: an OKF sub-bundle with
315
- its own `index.md`, `log.md`, core sections (`lessons/`, `decisions/`,
316
- `playbooks/`, `references/`) and whatever role-grown sections its owner
317
- needs (`architecture/`, `roadmap/`, `stewardship/`, `codebase-gotchas/`).
318
- The knowledge ontology is itself part of the specialization: a steward grows
319
- `roadmap/`; a developer soul does not, and a `Roadmap` concept in a developer
320
- node is a smell (project direction belongs to whoever stewards the project).
321
-
322
- Every node has **exactly one owning soul**. This is the homing rule lifted
323
- one level. A node may be owned by a soul whose role is stewardship of a
324
- project or an area: that is where multi-role project decisions go when the
325
- repository's own docs are not the right home. Role craft goes to the role's
326
- own node.
327
-
328
- Illustrative layout (the implementers choose the exact shape):
329
-
330
- ```text
331
- <base>/ # repo root knowledge/, or a team-scope directory
332
- index.md # the base: lists every node, its owner, one line each
333
- log.md # base-level history: one entry per harvest delivery
334
- <node>/ # one sub-bundle per node
335
- index.md
336
- log.md
337
- lessons/ decisions/ playbooks/ references/ <role-grown>/
338
- ```
339
-
340
- ### 4.3 Soul declarations: owns and reads
341
-
342
- A soul declares, in `soul.yaml` (exact keys are the implementers' call):
343
-
344
- - the nodes it **owns**: the harvesters that run for its instances write
345
- there by default;
346
- - the nodes it **reads**: loaded index-first at session start and consulted
347
- throughout the session.
348
-
349
- A soul with no declarations owns a node named after itself and reads only
350
- that: the current behavior, relocated. Portable souls reference nodes by
351
- name; the deployment's configuration binds names to a base location, so a
352
- soul copied between deployments keeps working as long as a node of that name
353
- exists or is created at scaffold time.
354
-
355
- Illustrative:
356
-
357
- ```yaml
358
- # soul.yaml
359
- name: semantic-layer-engineer
360
- knowledge:
361
- owns: [semantic-layer-engineer]
362
- reads: [lens-semantic-layer, platform-architecture]
363
- ```
364
-
365
- ```yaml
366
- # oats-config.yaml, knowledge layer settings (illustrative)
367
- capabilities:
368
- layers:
369
- knowledge:
370
- capability: oats.okf
371
- settings:
372
- base: knowledge # repo-resident, relative to the scope root
373
- # base: /srv/team-kb # or a team-scope base for cross-repo knowledge
374
- ```
375
-
376
- ### 4.4 The read side
377
-
378
- Requirement, in this order, carried by the okf skill and the injection:
379
-
380
- 1. **At session start**, read the owned nodes index-first: `index.md`, then
381
- only the links the task needs. Never bulk-read.
382
- 2. **Throughout the session**, consult the owned and read nodes, and the
383
- wider base on demand, whenever a decision could already have been made.
384
- Prior decisions, lessons, and playbooks are binding context. Re-deriving
385
- what the base already knows is a bug.
386
- 3. **After every compaction**, re-read the owned nodes' indexes and the
387
- instance's own `STATE.md`. On Pi this is the existing `session_compact`
388
- hook; on Claude Code it is the session-start hook with the compaction
389
- matcher, contributed at launch by the capability.
390
- 4. Keep `STATE.md`, `log.md`, and `notes/` current as you work.
391
-
392
- Nothing about harvesting. The whole base is readable on demand; scoping by
393
- soul type or team stays a policy knob (the architecture proposal's read side:
394
- *"an instance can find and consult organizational knowledge within its
395
- type's scope"*). The default for a single-team deployment is: everything
396
- readable, owned and read nodes loaded.
397
-
398
- Why the read side leads: the July 2026 audit of the OKF injection found it
399
- heavily write-biased (capture and harvest explicit, consultation one passing
400
- sentence). Memory contracts must be symmetric, or knowledge accumulates and
401
- is never used, which is exactly the three-to-one write-to-read failure of
402
- the audited auto-memory systems.
403
-
404
- ### 4.5 Instance memory is unchanged
405
-
406
- `STATE.md` (rewritten, `# Next` names the single next action), `log.md`
407
- (append-only, dated, newest first), `notes/` (one OKF concept per insight,
408
- written in soul genre from birth). The capture discipline stays exactly as
409
- it is: write every non-obvious insight down, do not judge whether it is
410
- "important enough", keep state current before every commit. This is the
411
- harvester's primary input together with the captured record.
412
-
413
- ### 4.6 The harvester: one per instance, the only writer
414
-
415
- - **One harvester per instance per run.** Never one harvester sweeping all
416
- instances. Its briefing names the source instance, the nodes its soul
417
- owns, the notes directory, and the record windows.
418
- - **Inputs:** the instance's pending notes plus its captured session turns
419
- since the last harvest, record-fed and id-bounded with a watermark
420
- advanced on delivery. `oats.okf` 1.5.x already does this (`oats recall
421
- --thread ... --after ... --until`, `.okf-harvest-record.json` and its
422
- prepared `.next.json`, the replan detector, `--from-record`, `--force`).
423
- - **Judgment:** the doctrine of section 3, as the **first section** of the
424
- harvester's skill, with the accept list, the reject list, and the two-part
425
- test verbatim. Then the existing mechanics: promote/merge/drop,
426
- knowledge-versus-skill routing, `Finding` to `Lesson`, index and log
427
- discipline, strict validation.
428
- - **Destination:** the nodes the source soul owns. Procedure-shaped
429
- candidates still route to the soul's `skills/` (section 4.9).
430
- - **Harvesters are the only writers to the base.** A running instance's
431
- attempt to write into the base is refused, not ignored. Enforcement is by
432
- the composed instructions plus whatever the implementers can make
433
- mechanical (a read-only view, a check in the harvester's delivery path, a
434
- validator rule on authorship).
435
- - **Exclusions stand:** never promote a secret; never promote third-party
436
- message content verbatim.
437
- - **The harvester is a soul** of the type permitted to write knowledge,
438
- spawned by the knowledge capability. OATS runs no special harvester
439
- (architecture proposal, "three simplifications"). Its runtime and model
440
- are the capability's `harvest-runtime` and optional `harvest-model`
441
- settings, independent of the source instance's runtime.
442
-
443
- ### 4.7 The running agent does not know the harvester exists
444
-
445
- Requirement (founder, 2026-09-09). The agent knows: which nodes are its own
446
- to read, that the whole base is readable, that it must keep notes, state,
447
- and log current because they are harvested for it, and that it never writes
448
- to the base. The injection **stops** telling instances to run `oats okf
449
- harvest`, stops explaining custody paths, and stops describing the
450
- harvester. Note-writing discipline stays; the trigger moves out of the
451
- agent's hands.
452
-
453
- Why: the harvest trigger was a discipline point in the agent's operating
454
- loop that competed with the task, that agents skipped, and that failed for
455
- reasons the agent could not fix (on one deployment `oats okf harvest`
456
- failed on the harvester's messaging identity, and the working agent had to
457
- escalate an infrastructure fault it should never have seen). Today's
458
- injection spends roughly thirty lines on harvest mechanics: that is the
459
- write bias of section 4.4 in another form. The agent's job is the task.
460
-
461
- ### 4.8 Triggers: a per-instance local schedule, and a final harvest at retirement
462
-
463
- 1. **Capability-declared schedule template.** The knowledge capability
464
- declares "harvest this instance every N". Spawn materializes one
465
- per-instance job of kind `operation` through the existing local host
466
- scheduler (`docs/schedules.md`: one launchd or systemd host timer, no
467
- daemon, `oats operation run knowledge:harvest --home <home>`). Retire
468
- removes the job. The job skips when nothing is new (watermark and replan
469
- detection already exist). Instances are never harvested by a fleet-wide
470
- job. No server is involved.
471
- 2. **Final harvest at retirement.** The `harvest` lifecycle event (migration
472
- step 6 of the architecture proposal, now delegated to the OATS team to
473
- rule on) runs on retire **before the home is removed**. Either the harvest
474
- completes synchronously, or the notes and the record window are
475
- snapshotted to a location that survives the home and the job runs against
476
- the snapshot. The watermark makes the double run (scheduled plus final)
477
- idempotent.
478
-
479
- This reverses a deliberate earlier decision (2026-07-09: "retirement is a
480
- knowledge no-op", to make long-lived sessions feed the soul while alive
481
- instead of hoarding until death). The reason it can be reversed now is that
482
- the continuous harvest no longer depends on the agent: the schedule feeds
483
- the base while the instance lives, and the final harvest only closes the
484
- gap between the last scheduled run and retirement. Nothing is lost either
485
- way, and nothing is hoarded.
486
-
487
- ### 4.9 Skills stay with the soul; knowledge moves to the base
488
-
489
- This is the steward's reading of the direction, not a founder sentence, and
490
- it is flagged in section 8 for confirmation. Skills are procedural, are part
491
- of the curated curriculum materialized at spawn, and are soul artifacts by
492
- the OATS soul anatomy. The harvester's routing table is unchanged: facts
493
- future instances should **know** go to the owned node; steps they should
494
- **run the same way** go to `soul/skills/`; a correction to an existing
495
- procedure maintains that skill. Skill deliveries keep the soul's custody
496
- (commit on the instance's branch, PR for workspace-mode souls, direct edit
497
- for local souls); knowledge deliveries follow the base's custody (section
498
- 4.11).
499
-
500
- ### 4.10 Parallel instances of one soul
501
-
502
- N instances of one soul each own a different part of a problem. Each becomes
503
- expert in its part while alive (instance memory). What it learns that is
504
- durable for the **part**, not the instance (limitations, decisions,
505
- solutions), consolidates into the soul's node, typically as a section per
506
- part. The next incarnation of the soul starts with all of it. Instance
507
- expertise dies; part expertise survives. Realization artifacts ("clothes",
508
- derived from the record) are what make replicating such instances cheap;
509
- they do not carry knowledge and are never a knowledge store.
510
-
511
- ### 4.11 The write side: git custody into the base
512
-
513
- Harvesters write with git custody: a branch per harvest, rebase onto the
514
- base's head, one commit prefixed `memory-harvest:`, publish, watermark on
515
- delivery. Index and log entries are append-shaped so concurrent harvests
516
- conflict rarely. For a repo-resident base the delivery follows **that
517
- repository's** branch and review flow: for an open-source project a
518
- harvester's promotion is a pull request reviewed like code (the promotion
519
- bar plus human review). For a private single-team repository the deployment
520
- may allow direct commits to the working branch, exactly as the current
521
- attached-harvest path does. For a team-scope base the same rules apply to
522
- that base's repository. Local souls (`local-agents/`, uncommitted by
523
- contract) need an uncommitted node location; see section 6.
524
-
525
- ### 4.12 Human-accepted decisions pass by construction
526
-
527
- A steward soul records a decision the human already made. It goes through
528
- `notes/` like everything else, but a note typed `Decision` carrying an
529
- explicit acceptance marker (who accepted it, when) passes the bar by
530
- construction: the harvester does the mechanics (index, log, links,
531
- supersession of an older decision) and does not re-judge. Otherwise
532
- stewardship latency grows and the harvester becomes a second judge with less
533
- context than the human.
534
-
535
- ---
536
-
537
- ## 5. Worked examples of the doctrine
538
-
539
- ### 5.1 A developer soul, before and after
540
-
541
- Candidate from a session transcript of a feature engineer:
542
-
543
- > *"The tool registration lives in `internal/tools/`, one file per tool; each
544
- > registers via a `Register*` function, appears in `defaultTools`, and gets a
545
- > gated branch in `newServer()`."*
546
-
547
- Verdict: **drop** the first two clauses (repository says it) and **promote**
548
- the third as a lesson only if it is phrased as the failure it prevents:
549
-
550
- > *"Three edits, not two: a `Register*` function, a `defaultTools` entry, and
551
- > a gated branch in `newServer()`. Two out of three compiles cleanly and ships
552
- > nothing. Elimination route: a registration test that fails on a missing
553
- > gate would make this lesson unnecessary; until it exists this is a
554
- > stopgap."*
555
-
556
- The promoted form passes both tests (a future instance acts differently; the
557
- repository does not say that two-of-three ships nothing) and names its own
558
- elimination route.
559
-
560
- ### 5.2 A steward soul
561
-
562
- Candidate: *"Pepe decided on 2026-09-09 that the knowledge base is central
563
- and may be repo-resident, and withdrew the export/import requirement."*
564
- Verdict: **promote by construction** as a `Decision` with the acceptance
565
- marker; supersede the paragraph in the earlier direction that required
566
- export/import; link both. This is exactly the fast path of section 4.12.
567
-
568
- ### 5.3 A domain expert with no code
569
-
570
- Candidate from a semantic-layer expert: *"The `lf_region` rollup is
571
- provisional pending stakeholder sign-off; judgment calls in it must be
572
- flagged when they matter to an answer, never quietly redefined."* Verdict:
573
- **promote** as typed slow state (owner: this soul; superseded when sign-off
574
- lands). Nothing in any repository carries this; the soul is almost pure
575
- knowledge.
576
-
577
- ### 5.4 Residue
578
-
579
- Candidate: *"Opened PR #123 and #124; #124 is waiting on Eric; next I should
580
- rebase #123."* Verdict: **drop**. Task residue, all of it. If there is a
581
- durable claim underneath ("PRs in this repository sit unmerged for weeks;
582
- verify state against `origin/main` and open PRs before relying on it"), the
583
- harvester promotes that sentence and nothing else.
584
-
585
- ---
586
-
587
- ## 6. What changes in `oats.okf`, concretely
588
-
589
- Baseline: `oats.okf` 1.6.1 as shipped in `capabilities/oats-okf/` of this
590
- repository (manifest with `harvest-runtime` and `harvest-model` settings,
591
- `soul-scaffold` and `spawn` hooks, `harvest` and `inspect` commands and
592
- operations, `injects/okf.md`, `skills/okf`, `skills/memory-harvest`,
593
- `agents/memory-harvest`, `lib/harvest-branch.mjs`). The record-fed harvest,
594
- watermarks, replan detection, exclusions, non-zero exit on failure, and the
595
- operations contract all exist and stay.
596
-
597
- | Area | Change |
598
- |---|---|
599
- | **Manifest** | Add the base binding setting (repo-resident default, team-scope option). Add the per-instance schedule template the spawn hook materializes. Declare participation in the `harvest` lifecycle event once the kernel ships it. |
600
- | **`soul-scaffold` hook** | Create the soul's default node in the base (not `soul/knowledge/`), register it in the base index with its owner, and write the default `owns`/`reads` if the soul declares none. |
601
- | **`spawn` hook** | Resolve the soul's owned and read nodes to paths through the binding; record them in `instance.json`; make them reachable from the instance home without the agent knowing the base layout (a `./knowledge/` view with one entry per node is one option); materialize the per-instance harvest job; on Claude Code contribute the compaction re-read hook. |
602
- | **`retire` / `harvest` hook** | Remove the schedule job; run the final harvest before home removal, or snapshot notes and the record window and run against the snapshot. |
603
- | **Injection (`injects/okf.md`)** | Rewrite around the read side (section 4.4). Remove every instruction to run `oats okf harvest`, the custody explanations, and the harvester description. Keep the capture discipline. State plainly: you read your nodes and the base; you never write to the base. |
604
- | **Harvester skill (`skills/memory-harvest`)** | Section 3 verbatim as the first section. Destination becomes the owned nodes. Add per-node write serialization, the base-custody delivery paths, the Decision fast path, and the pending-for-owner rules. Keep the record-window protocol and exclusions. |
605
- | **Harvester agent and briefing** | The briefing names the source instance, its soul's owned nodes and their paths, the notes directory, the record windows, the base custody, and the serialization handle. |
606
- | **`harvest` command and operation** | Per instance (`--home`), invoked by the schedule and by the retire path; still runnable by a human or the Desktop through the operations contract. Never fleet-wide. |
607
- | **`inspect` operation** | Extend the view to show the instance's owned and read nodes and the base's freshness (last harvest, pending notes, watermark position). |
608
- | **Validator** | Validate the whole base strictly after every harvest, not only the touched node. |
609
- | **`okf` skill** | Teach the base and node model on the read side; the authoring craft is unchanged. |
610
- | **Migration** | An explicit command (or a step of `oats migrate --from-oas`) that moves each existing `soul/knowledge/` into a node of the base, rewrites intra-bundle links, registers the node, and leaves `soul/knowledge` resolvable to the node during the transition so existing `AGENTS.md` links keep working. Souls' `AGENTS.md` files that reference `./soul/knowledge/...` are then updated by their owners. |
611
- | **Kernel asks** | The `harvest` lifecycle event (proposal step 6); `soul.yaml` keys for owns/reads read by the kernel or passed through to the capability; the configuration key for the base binding; a way for a capability to declare a per-instance schedule template that spawn materializes. |
612
-
613
- ---
614
-
615
- ## 7. Design requirements the implementers must settle (not optional)
616
-
617
- 1. **Concurrent harvesters on one node.** Four instances of one soul mean
618
- four harvesters writing the same node, and with a repo-resident base four
619
- harvesters on one repository branch is the same race. Serialize per node
620
- (a base-level lock or a queue) and require rebase-before-commit; never let
621
- two harvesters race on an `index.md`. This is the one new failure mode
622
- the design introduces. It must have a test.
623
- 2. **Doctrine first, verbatim.** Section 3's accept list, reject list, and
624
- two-part test are the first section of the harvester skill. Mechanics
625
- come after.
626
- 3. **Human-accepted decisions pass by construction** (section 4.12), with a
627
- defined acceptance marker.
628
- 4. **Local souls need an uncommitted node location.** `local-agents/` souls
629
- are uncommitted by contract; their nodes cannot be committed into a
630
- repo-resident base. Options: a gitignored area of the base, or a local
631
- base bound at the machine scope. Decide, document, and keep the doctrine
632
- identical.
633
- 5. **Pending-for-owner queue** (from the 2026-09-08 proposal): if kept, a
634
- named owner and an expiry, or it becomes the slop pile in a new location.
635
- 6. **Read scoping by soul type**: decide whether it ships in the first
636
- version or stays "everything readable" with the knob reserved. Either is
637
- acceptable; say which.
638
- 7. **Delivery for repo-resident bases**: default to the current attached
639
- commit for private repositories and to a pull request where the
640
- repository's governance requires review; make the choice a binding, not a
641
- guess in the harvester.
642
- 8. **Refusal, not silence, on a forbidden write.** An instance that tries to
643
- write into the base must get an error it can report, not a no-op.
644
- 9. **Acceptance is knowledge output, not harvester activity.** The bar for
645
- "done" is a fresh instance answering from the base, verified through the
646
- selected runtime (section 8 tests), not evidence that a harvester ran.
647
-
648
- ---
649
-
650
- ## 8. Completion tests
651
-
652
- 1. **Two souls, two nodes.** Each owns one node and reads the other's. An
653
- instance of each sees both at session start; neither can write to the
654
- base directly (an attempted write is refused, not ignored).
655
- 2. **Four parts, one soul.** Four instances of one soul, each briefed with a
656
- different part of a problem, harvested on schedule and at retirement. The
657
- soul's node contains a section per part with the decisions and
658
- limitations each found; no code descriptions; no task residue. The base
659
- log shows one commit per harvest and no conflicts or lost writes.
660
- 3. **Expertise survives the instance.** A fresh instance of that soul,
661
- spawned afterwards, answers a question about a limitation found by
662
- instance three with no access to instance three's home or transcript.
663
- 4. **Retire mid-task with pending notes.** The final harvest lands before the
664
- home is gone; the notes' durable content is in the node; the point-in-time
665
- content is not.
666
- 5. **Exclusions hold.** A harvester fed a transcript containing a secret and
667
- a third-party message promotes neither and promotes the positive-control
668
- lesson.
669
- 6. **Doctrine holds.** A harvester fed a transcript containing a correct
670
- architecture description, a decision with rationale, a rejected
671
- alternative, and a PR-number plan promotes the decision and the rejected
672
- alternative, and drops the description and the plan. The promoted
673
- concepts carry turn-id provenance.
674
- 7. **The read side is real.** A fresh instance's captured session shows it
675
- opened its owned node's `index.md` before its first non-trivial action,
676
- and re-read it after a forced compaction.
677
- 8. **Whole-base validation.** Strict OKF validation of the entire base passes
678
- after every harvest.
679
- 9. **Migration.** An existing deployment with per-soul `soul/knowledge/`
680
- bundles migrates to one base with one node per soul, links intact,
681
- validator clean, and every soul's next instance reads its node.
682
- 10. **The agent is unaware.** The composed `AGENTS.md` of a migrated
683
- instance contains no instruction to run a harvest and no description of
684
- the harvester.
685
-
686
- ---
687
-
688
- ## 9. What is out of scope, deliberately
689
-
690
- - **Picking up ordinary top-level `CLAUDE.md`/`AGENTS.md` setups as
691
- spawnable agents** that join the team. Real, wanted, parked by the founder
692
- on 2026-09-09. Do not design it inside this change.
693
- - **An export/import mechanism for nodes.** Withdrawn by the founder on
694
- 2026-09-09; moving a node between bases is git (subtree, or a copy plus a
695
- log entry).
696
- - **A central knowledge service or database.** The base is files under git.
697
- A different provider may implement a different store; the default OKF
698
- package does not.
699
- - **Changing the OKF format** or its type vocabulary. The typology
700
- (`Instance State`, `Finding`, `Lesson`, `Decision`, `Playbook`,
701
- `Reference`, role-grown types) is unchanged.
702
- - **A fleet-wide harvester.** Explicitly rejected: one harvester per
703
- instance per run.
704
- - **Moving skills out of the soul.** Pending confirmation (section 4.9), the
705
- soul keeps `skills/`.
706
-
707
- ---
708
-
709
- ## 10. Where each decision comes from
710
-
711
- The chronology, so that an implementer or reviewer can trace any requirement
712
- to its source. Paths are in the OAS steward's knowledge bundle
713
- (`agents/oas-expert/soul/knowledge/` of the OAS repository) unless another
714
- repository is named.
715
-
716
- | Date | Decision or evidence | Source |
717
- |---|---|---|
718
- | 2026-07-08 | Knowledge typology: soul knowledge is incarnation-invariant, instance memory is indexical, harvest is de-indexicalization, types are consolidation stages, sections are role-grown, souls hold project-slow state. | `architecture/knowledge-typology.md`; restated in OATS `docs/knowledge-theory.md`. |
719
- | 2026-07-09 | Capture and judgment are separate roles; the promotion bar is held only by the harvester; continuous post-commit harvest; retirement is a knowledge no-op (now reversed, section 4.8). | `architecture/memory-design.md`. |
720
- | 2026-07-10 | The OKF injection was write-biased; read-side consultation must be explicit and index-first. | `lessons/okf-injection-read-side-gap.md`. |
721
- | 2026-07-26 | Provider-agnostic specialization: compounding expertise across sessions, models, and runtimes; memory outside any one harness. | `decisions/provider-agnostic-specialization-and-curated-context.md`. |
722
- | 2026-08-27 | Investigation of the public auto-memory audit: governed memory must survive that audit; developer souls must not mirror code; harness-agnostic knowledge enables mixed-runtime teams. | `lessons/governed-memory-survives-auto-memory-audit.md`, `lessons/developer-souls-should-not-mirror-code.md`, `lessons/harness-agnostic-knowledge-enables-mixed-runtime-teams.md`; the video "Turn off Claude Code's Memory" (Theo, t3.gg, YouTube id Jf54k7tFeEc). |
723
- | 2026-08-27 | Founder correction: developer and UX souls hold decisions, rejected alternatives, inspiration genealogy, and typed slow state; the bias is against descriptions, not decisions. Decision-vs-description; one home per decision; freshness discipline. | Steward note `decision-vs-description-and-knowledge-homing.md` (instance notes, pending harvest); relayed to the OATS coordinator on 2026-09-04. |
724
- | 2026-09-03/04 | OATS architecture proposal: knowledge is a contract with a read side and a write side; a harvester is a soul type permitted to write knowledge; the write side's doctrine is decision versus description; non-coding specialists are almost pure knowledge; custody scoping belongs to the contract. | the September 3 architecture proposal (this repository until 0.26.0; in the v0.25.x tags), sections "Soul type", "The slot contracts", "Three simplifications". |
725
- | 2026-09-05 to 09-08 | Record-fed harvest shipped: `oats.okf` 1.5.0 to 1.6.1 (record windows, watermark, replan detection, exclusions, harvest runtime and model settings, non-zero exit on failure, inspect view and harvest action). | `capabilities/oats-okf/` at 1.6.1 (this repository); `docs/design/operations-contract.md`. |
726
- | 2026-09-07 | Founder: the OATS team holds the agreed architecture vision; OAS-side review is advisory. | Steward note `oats-vision-delegated-to-juan.md`. |
727
- | 2026-09-08 | Expert-assisted deployment proposal: shared knowledge collections with explicit promotion destinations; pending-for-owner for ambiguous material; the expert must not become the deployment's database; acceptance is knowledge output, not harvester activity. | `docs/design/2026-09-08-expert-assisted-deployment-proposal.md` (this repository), "Shared knowledge and promotion destinations"; steward note `deployment-as-capability-not-a-layer.md`. |
728
- | 2026-09-09 | **Founder direction:** central knowledge base of soul-owned nodes; owns/reads; harvester-only writes; one harvester per instance; per-instance local schedule plus final harvest at retirement; the running agent unaware of the harvester; doctrine first; parallel instances consolidate per part; design requirements and completion tests. | Steward note `central-knowledge-base-soul-owned-nodes.md`; sent to the OATS coordinator the same day. |
729
- | 2026-09-09 | **Founder amendment:** the base may be repo-resident; portability is git; export/import withdrawn; base location is a binding. | Same note, amended; sent the same day. |
730
- | 2026-09-10 | Deployment evidence: engineer souls whose operating docs say the repository documents itself and the knowledge carries only what the docs do not say plus where they are stale; repository-resident review knowledge bases mined from real reviews and gating a learnings reviewer. | The LFX deployment's souls and repositories (uncommitted local souls; not in any framework repository). |
731
- | 2026-09-13 | This consolidation. | This document. |
732
-
733
- ---
734
-
735
- ## 11. A note to the implementers
736
-
737
- Read section 3 twice before opening the harvester skill. The mechanics in
738
- sections 4, 6, and 7 exist so that the doctrine reaches the base reliably,
739
- under concurrency, without the working agent's involvement, and with git as
740
- the audit trail. But the product is not the pipeline. The product is a soul
741
- whose next incarnation knows what the last one learned, and knows nothing
742
- the repository could have told it. When a mechanism and the doctrine
743
- conflict, the doctrine wins, and the conflict is a finding to report, not a
744
- detail to resolve quietly.