@awebai/oats 0.23.0 → 0.23.1

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 (37) hide show
  1. package/README.md +48 -18
  2. package/capabilities/oats-okf/agents/memory-harvest/AGENTS.md +18 -24
  3. package/capabilities/oats-okf/agents/memory-harvest/soul.yaml +2 -2
  4. package/capabilities/oats-okf/bin/oats-okf.mjs +105 -517
  5. package/capabilities/oats-okf/injects/okf.md +32 -67
  6. package/capabilities/oats-okf/lib/config.mjs +112 -0
  7. package/capabilities/oats-okf/lib/inspection.mjs +96 -0
  8. package/capabilities/oats-okf/lib/io.mjs +103 -0
  9. package/capabilities/oats-okf/lib/migration.mjs +116 -0
  10. package/capabilities/oats-okf/lib/sources.mjs +238 -0
  11. package/capabilities/oats-okf/lib/stores.mjs +331 -0
  12. package/capabilities/oats-okf/lib/worker.mjs +352 -0
  13. package/capabilities/oats-okf/oats.json +23 -7
  14. package/capabilities/oats-okf/schemas/okf-base.schema.json +46 -0
  15. package/capabilities/oats-okf/schemas/okf-bindings.schema.json +112 -0
  16. package/capabilities/oats-okf/schemas/okf-soul.schema.json +37 -0
  17. package/capabilities/oats-okf/skills/memory-harvest/SKILL.md +263 -140
  18. package/capabilities/oats-okf/skills/okf/SKILL.md +13 -4
  19. package/docs/capabilities.md +14 -3
  20. package/docs/configuration.md +11 -1
  21. package/docs/design/okf-mirror-provenance.md +105 -0
  22. package/docs/desktop-cli-api.md +59 -10
  23. package/docs/first-team-demo.md +6 -1
  24. package/docs/first-team.md +151 -115
  25. package/docs/integrations.md +42 -42
  26. package/docs/knowledge-capability-authoring.md +10 -7
  27. package/docs/knowledge-migration.md +138 -0
  28. package/docs/knowledge.md +316 -129
  29. package/docs/layers.md +57 -62
  30. package/docs/migration-from-oas.md +7 -1
  31. package/docs/packages.md +26 -2
  32. package/docs/release-notes/v0.23.1.md +97 -0
  33. package/docs/schedules.md +42 -3
  34. package/docs/souls-and-instances.md +55 -48
  35. package/package-catalog.json +6 -1
  36. package/package.json +1 -1
  37. package/capabilities/oats-okf/lib/harvest-branch.mjs +0 -43
@@ -43,6 +43,8 @@ capabilities:
43
43
  knowledge:
44
44
  capability: oats.okf
45
45
  from: installed
46
+ settings:
47
+ bindings-file: /absolute/config/okf-bindings.json
46
48
  messaging:
47
49
  capability: oats.aweb
48
50
  from: installed
@@ -65,7 +67,7 @@ capabilities:
65
67
  CLI equivalents:
66
68
 
67
69
  ```bash
68
- oats use oats.okf --global
70
+ oats use oats.okf --global --settings bindings-file=/absolute/config/okf-bindings.json
69
71
  oats use oats.aweb --type product-agents
70
72
  oats use oats.linear --type product-agents
71
73
  oats use none --layer tasks # leave an inherited slot deliberately unfilled
@@ -78,11 +80,14 @@ is different from a soul whose type restricts its reach.
78
80
 
79
81
  ## Bundled integrations
80
82
 
81
- **`oats.okf`** fills `knowledge`: OKF soul bundles, instance `STATE.md`,
82
- `log.md`, and `notes/`, the `okf` and `memory-harvest` skills, and
83
- `oats okf harvest`, which promotes pending notes after a commit through the
84
- capability-defined `memory-harvest` soul. Its scaffold and spawn hooks own
85
- memory mechanics; the kernel stays knowledge-format agnostic.
83
+ **`oats.okf` v2** fills `knowledge`: external owned OKF bases, immutable
84
+ reader views, instance `STATE.md`/`log.md`/`notes/`, durable notes-and-record
85
+ custody and an independent directory worker. Git delivery is PR-only; plain
86
+ directory delivery is recoverable and needs no Git/gh. Explicit bindings,
87
+ `soul/okf.json` and accepted base metadata are required before a working source
88
+ can spawn. `owns`/`reads` are responsibility/context, not ACLs. See
89
+ [knowledge](knowledge.md) for the **prepared** version scope, provisioning and
90
+ commands, and [migration](knowledge-migration.md) before updating v1.
86
91
 
87
92
  **`oats.aweb`** fills `messaging`: mints an instance identity at spawn,
88
93
  removes it at retire, contributes the aweb messaging and team skills, wires
@@ -117,13 +122,15 @@ kernel only through `OATS_CLI_BIN` and the JSON envelope, never by importing
117
122
  kernel files. Never name target souls in the manifest; targeting belongs to
118
123
  configuration.
119
124
 
120
- **Knowledge.** Scaffold the soul's store on `soul-scaffold`; create instance
121
- ephemeral state on `spawn`; teach the read side (index-first, selective,
122
- binding) in the inject and skill; ship a harvester as a capability-defined
123
- soul and a command that spawns it attached to the source instance's tree;
124
- route promotions by custody (commit, pull request, or direct edit); apply the
125
- promotion doctrine in the contract; and, once the `harvest` event exists,
126
- declare it instead of relying on the instance to call the command.
125
+ **Knowledge.** Each capability owns its complete runtime and format, including
126
+ reader/capture instructions, judgment and provider-native delivery. Do not
127
+ assume a soul bundle, attached worker, Git store or mandatory shared harvester.
128
+ The optional [authoring guide](knowledge-capability-authoring.md) describes the
129
+ reference model and how to adapt or replace it. OKF v2 is one implementation:
130
+ explicit external ownership, instructional read-only sources, evidence custody
131
+ outside disposable homes, independent workers, PR-only Git and recoverable
132
+ non-Git publication. Existing lifecycle hooks and supported CLI/scheduler
133
+ commands implement it; no proposed universal `harvest` event is required.
127
134
 
128
135
  **Communication.** Mint an address on `spawn` with a `required` hook and
129
136
  remove it on `retire`; supply the roster; teach send, reply, chat, and "read
@@ -140,40 +147,33 @@ Test an integration as a capability package: acquire, lock, trust, activate,
140
147
  spawn, retire, with the golden fixtures as the behavior oracle for the kernel
141
148
  side.
142
149
 
143
- ## oats.okf harvest settings (1.5.1)
150
+ ## oats.okf v2 settings and recovery
144
151
 
145
- The harvester can use a different harness from the source instance. Select one
146
- that is installed and authenticated on the host where the harvest runs:
152
+ V2 requires `bindings-file`, an absolute path to capability-owned JSON. Paths
153
+ inside it resolve from that file's directory. The source soul needs stable
154
+ `owner`, `owns` and `reads` declarations; every referenced accepted node must
155
+ exist and match its owner. Acquisition/activation never bootstraps a knowledge
156
+ base. If activating globally, provision each working soul first or target only
157
+ ready sources.
147
158
 
148
159
  ```bash
149
- oats use oats.okf --settings harvest-runtime=claude
160
+ oats use oats.okf --soul domain-expert --settings bindings-file=/absolute/config/okf-bindings.json harvest-runtime=claude
150
161
  ```
151
162
 
152
- - `harvest-runtime: pi | claude | codex` defaults to `pi`.
153
- - `harvest-model` is an optional pin, for example to use a cheaper model.
154
- When omitted, each harness uses its configured default. Pi accepts
155
- provider/model patterns. Claude and Codex require a native model name
156
- (for example `sonnet` or `gpt-5.5`), without a Pi provider prefix.
157
-
158
- These settings apply to note and record harvests, including deferred retirement
159
- and remote harvests. For a remote instance, configure its host's knowledge
160
- binding; the local viewer does not supply its own provider credentials.
161
-
162
- If a record harvester was spawned but did not advance its watermark, planning
163
- the same windows again warns with that instance and the boundary IDs and skips
164
- another spawn. Inspect the previous attempt first. `oats okf harvest
165
- --from-record --force` retries those windows explicitly; it still refuses to
166
- start a second harvester while the first one's home exists. The check uses the
167
- existing prepared watermark file and does not treat a successful spawn as
168
- completed learning.
169
-
170
- ## oats.okf 1.5.2
171
-
172
- `okf harvest` exits non-zero when it reports a failure (the plain and the
173
- `--json` forms alike). A leftover `memory-harvest/<slug>` branch from a merged
174
- promotion is deleted before the next workspace-mode harvest; an unmerged one
175
- refuses the harvest and names the remedy. `oats okf harvest --help` prints
176
- usage and never spawns.
163
+ - `harvest-runtime: pi | claude | codex` defaults to `pi`, independently of the
164
+ source. Select an installed/authenticated runtime on the execution host.
165
+ - `harvest-model` optionally pins its model. Omitted models use the harness
166
+ default; native Claude/Codex names are not Pi provider-prefixed patterns.
167
+ - Old record-window settings and `--from-record --force` recovery are not v2
168
+ interfaces. Every capture takes notes **and** record; use durable run receipts
169
+ and explicit `retry`/`complete` reconciliation, never old watermark moves.
170
+
171
+ For remote sources, configure custody and credentials on their execution host,
172
+ not the viewer. One source job continues from stable deployment context after
173
+ retirement, subject to current activation/trust. Timer installation requires
174
+ explicit consent. `inspect` is read-only and combines identity-guarded live
175
+ memory with durable receipts; `--source` remains usable after home deletion.
176
+ [Command and recovery details](knowledge.md#inspection-and-operator-commands).
177
177
 
178
178
  ## oats.aweb late joins (1.10.3)
179
179
 
@@ -31,14 +31,14 @@ their compatibility. Installing the theory package activates nothing.
31
31
  ## Install the optional authoring package
32
32
 
33
33
  The kernel's npm package ships this public guide and the CLI, **not** the
34
- optional expert payload. `oats.knowledge-theory` 1.0.0 is distributed through
35
- this repository's Git `oats-package/` subtree. Git preserves the canonical
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
36
  source `CLAUDE.md -> AGENTS.md` symlink; npm omits symlinks, so a partial npm
37
37
  copy is not a supported distribution. Acquisition does not repair source
38
38
  aliases or relax installed-artifact integrity checks.
39
39
 
40
- Once the immutable framework `v0.23.0` tag is published, select a deployment
41
- scope explicitly and acquire, then opt in for an author soul:
40
+ Select a deployment scope explicitly and acquire the published source, then
41
+ opt in for an author soul:
42
42
 
43
43
  ```bash
44
44
  oats install git:github.com/awebai/oats@v0.23.0 --dir /path/to/scope
@@ -46,9 +46,12 @@ oats use oats.knowledge-theory --soul <author-soul> --dir /path/to/scope
46
46
  ```
47
47
 
48
48
  Git sources select `oats-package/` by default and lock the resolved commit.
49
- The official catalog shortcut may follow after the immutable tag exists; do
50
- not assume an unpublished catalog pin. For local development, use an explicit
51
- complete source package path instead. Activation exposes the expert and targets
49
+ The `oats.knowledge-theory` catalog shortcut uses that same published v0.23.0
50
+ source. The current authoring-reference patch is package 1.0.1: once framework
51
+ v0.23.1 is published, an explicit initial Git acquisition at that tag selects
52
+ the patch instead. It does not silently change the catalog's 1.0.0 selection
53
+ or an existing lock. For local development, use an explicit complete source
54
+ package path instead. Activation exposes the expert and targets
52
55
  the authoring skill, without selecting or replacing a knowledge integration.
53
56
  There are no executable surfaces to trust in this package. Installed experts
54
57
  use their materialized local curriculum, not this repository at runtime.
@@ -0,0 +1,138 @@
1
+ # Migrating OKF v1 knowledge to v2
2
+
3
+ > **Prepared, not a live migration.** These instructions target oats.okf 2.0.0
4
+ > with OATS >=0.23.0 and the prepared framework v0.23.1 integration. Confirm the
5
+ > final standalone source tag and dependencies are published before following
6
+ > the acquisition path. See [release gates](release-notes/v0.23.1.md).
7
+
8
+ This is **not** `oats migrate`: kernel lock/package migration and
9
+ [OAS name migration](migration-from-oas.md) do not relocate knowledge, establish
10
+ v2 ownership or preserve source cursors. Nor does upgrading npm activate a new
11
+ knowledge layer. V2 uses external accepted bases and independent workers, not
12
+ `soul/knowledge/`, attached harvest commits or source-home watermarks.
13
+
14
+ ## 1. Inventory and preserve before changing activation
15
+
16
+ - Record each scope's package lock, active knowledge binding, effective settings,
17
+ soul instructions/skills and current knowledge bytes. Do not hand-edit locks.
18
+ - Inventory live source homes, state/log/notes, v1 current/prepared watermark
19
+ files, active harvesters, unpublished commits and open PRs. Resolve or preserve
20
+ in-flight work deliberately; do not run old and new writers concurrently.
21
+ - Back up source material outside disposable homes/worktrees. Keep v1 artifacts
22
+ available until accepted delivery, owner cutover and fresh-reader verification
23
+ have succeeded. A successful scaffold or command exit is not learned expertise.
24
+ - Plan the deployment interruption and test the migration on isolated copies.
25
+ The required v2 spawn hook refuses a legacy `soul/knowledge/`; it never silently
26
+ substitutes an empty bundle.
27
+
28
+ After publication, explicitly acquire/update the catalog **Git** package and
29
+ review/re-trust its executable surfaces. An existing exact lock does not advance
30
+ on bare `oats install`. Do not install the npm bundled mirror as a self-contained
31
+ package: npm drops the source worker's canonical `CLAUDE.md` symlink.
32
+
33
+ ## 2. Bind and provision external destinations
34
+
35
+ Follow [bindings and owner descriptors](knowledge.md#acquire-bind-and-provision-explicitly).
36
+ Choose stable base IDs, stable owner IDs, nonoverlapping node paths and durable
37
+ `stateDir`. `owns` routes responsibility; `reads` chooses starting context, not
38
+ permissions. Confirm aliases and owners explicitly, rather than deriving them
39
+ from an instance branch or name.
40
+
41
+ Configure the absolute `bindings-file` for each source soul. Remove obsolete v1
42
+ settings such as `record-window-turns` and `record-window-bytes`; v2 accepts only
43
+ `bindings-file`, `harvest-runtime` and `harvest-model`. Provision **empty owned
44
+ nodes** using `oats okf init`. Accept Git initialization through a reviewed PR
45
+ before migration delivery; directory provisioning requires explicit confirmation
46
+ and a genuinely non-Git location.
47
+
48
+ ## 3. Stage and deliver each legacy bundle
49
+
50
+ From the durable deployment configuration context in an operator shell without
51
+ inherited instance identity, selecting the source soul:
52
+
53
+ ```bash
54
+ oats okf migrate --legacy /absolute/soul/knowledge --base project --node expert --output /absolute/empty-migration-stage --soul domain-expert --json
55
+ # Use the exact migration.json path returned above:
56
+ oats okf migrate --deliver /absolute/state/migrations/UUID/migration.json --soul domain-expert --json
57
+ ```
58
+
59
+ Staging preserves the full original in migration custody, rewrites bundle-root
60
+ Markdown links into the external node namespace and validates the whole base.
61
+ The output must be disjoint from **every** configured accepted base and directory
62
+ coordination artifact. The destination node must be empty; migration refuses
63
+ ambiguous automatic merges.
64
+
65
+ Delivery follows the actual provider protocol:
66
+
67
+ - **Git:** a real PR, never a direct push to the accepted branch. Review and merge
68
+ it, then repeat `migrate --deliver` to confirm merge-visible acceptance.
69
+ - **Directory:** recoverable publication with a cooperative lock, baseline check,
70
+ journal and validated acceptance receipt. Resolve any journal before proceeding.
71
+
72
+ A staged bundle, delivered PR or proposed owner mapping is not cutover.
73
+
74
+ ## 4. Deliberate owner cutover
75
+
76
+ ```bash
77
+ oats okf migrate --cutover /absolute/state/migrations/UUID/migration.json --soul-dir /absolute/soul --soul domain-expert --json
78
+ ```
79
+
80
+ Cutover requires accepted delivery, unchanged legacy bytes and current bindings
81
+ still pointing to the frozen delivered base. It verifies accepted readiness,
82
+ node owner/path and delivered content, then renames the old bundle into durable
83
+ custody and updates `soul/okf.json`. It changes no skills and leaves no permanent
84
+ knowledge symlink in the soul. Cross-device rename fails safely: arrange an
85
+ explicit operator cutover rather than deleting originals to force it. An
86
+ incomplete cutover marker blocks new source registration until that recorded
87
+ cutover is retried.
88
+
89
+ Explicitly review old soul instruction references to `soul/knowledge/`, direct
90
+ promotion and after-commit harvest. Point readers to the capability-provided
91
+ accepted views; ordinary agents capture but never edit accepted knowledge. This
92
+ instruction review is not an automatic rewrite performed by migration.
93
+
94
+ ## 5. Preserve and re-register existing sources
95
+
96
+ For every surviving v1 source home:
97
+
98
+ ```bash
99
+ oats okf migrate --source-home /absolute/legacy-instance-home --soul domain-expert --json
100
+ ```
101
+
102
+ This copies allowlisted state/log/notes and old cursors into migration custody,
103
+ **deleting nothing**. Old watermarks are retained as evidence, not trusted as v2
104
+ processing proof. After soul migration, explicit `harvest` from that clean deployment context
105
+ re-registers a source,
106
+ captures visible notes and record, and idempotently verifies its per-source job:
107
+
108
+ ```bash
109
+ oats okf harvest --home /absolute/legacy-instance-home --no-launch --soul domain-expert --json
110
+ ```
111
+
112
+ `--no-launch` is a scaffold-only worker request, not a read-only operation: it
113
+ captures and writes durable state/schedule definitions, but starts no model and
114
+ installs no timer. Existing homes retain their composed capability snapshot;
115
+ plan refresh/replacement or dispatch through the deliberately selected v2
116
+ configuration context. Do not assume updating a package rewrites a running
117
+ home's curriculum, trust or native session. Preserve evidence before retiring
118
+ or replacing any old home. Replay may legitimately produce merge/drop judgments.
119
+
120
+ ## 6. Verify before retiring old custody
121
+
122
+ Inspect the durable source descriptor and its receipts. Confirm frozen owners,
123
+ accepted view paths, captured notes **and full record windows**, processing and
124
+ provider acceptance separately. Verify live inspection only shows the matching
125
+ source's state/log/notes. After safe source retirement, `--source` inspection and
126
+ read/refresh must still work from durable context; new views belong in state,
127
+ not the deleted home or invoking repository.
128
+
129
+ Enable a host timer only with explicit operator consent after reviewing source
130
+ jobs and available worker runtimes. Existing no-launch sources cannot cause
131
+ scheduled model launches; do not turn an isolated rehearsal into a deployment.
132
+ A source whose final capture is incomplete must retain its home for retry.
133
+
134
+ Finally start a fresh, deliberately selected runtime instance and verify it can
135
+ find **and use** the accepted lesson without the original source. A no-launch
136
+ reader verifies layout and links, not model learning. Only then consider old
137
+ custody cleanup under an explicit retention decision; v2 does not automatically
138
+ remove preserved evidence, old views, migration archives or unresolved runs.