obsidian-tc 1.20.0 → 1.22.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.
package/README.md CHANGED
@@ -9,7 +9,7 @@ See the [repo root README](../../README.md) for project overview and the
9
9
 
10
10
  ## Status
11
11
 
12
- ✅ **Shipped — v1.20.0.** The full tool surface (159 tools across 31 domains, milestones
12
+ ✅ **Shipped — v1.22.0.** The full tool surface (163 tools across 31 domains, milestones
13
13
  M0–M7) is implemented and released. Built on Bun + Hono with Zod 4 schemas; runs under
14
14
  Node `>=24` (the test suite runs vitest under Node for `node:sqlite`).
15
15
 
@@ -38,3 +38,5 @@ config + caches (no server needed):
38
38
  | `metrics [--since ms] [--until ms] [--json f]` | Knowledge-health scorecard from the derive layer |
39
39
  | `gaps --queries <f> / --calibrate <golden.yaml>` | Knowledge-gap detector / threshold calibration |
40
40
  | `forget (--episode <id> \| --note <rel>) [--erase] / --verify` | Dependency-aware deletion + hash-chained audit |
41
+ | `context-export --out <f> [--vault id]` | Export the derived plane (preferences, episodes, note_quality, retrieval feedback, forget_log) as a versioned, vendor-neutral JSON bundle |
42
+ | `context-import <bundle> [--vault id] [--dry-run]` | Import a context-export bundle. `--vault` remaps the bundle's vault-scoped rows to the target vault (refuses a multi-source-vault bundle); forget always wins over import |
package/SKILLS.md CHANGED
@@ -163,13 +163,17 @@ want to do. Counts are approximate; the surface is 143 tools / 31 domains.
163
163
 
164
164
  These are the skills that set obsidian-tc apart. Teach your agent to prefer them.
165
165
 
166
- **Measured retrieval, not asserted.** Every ranking change is gated by an n=136
166
+ **Measured retrieval, not asserted.** Every ranking change is gated by an n=250
167
167
  multi-hop golden set with a statistical ship rule (paired permutation, BH-FDR,
168
- a ΔnDCG ≥ 0.010 cost gate). The live champion: graph nDCG@10 **0.786**, recall@10
169
- **0.871**, bridge recall **0.831**. Contextual chunk enrichment measured **+0.223
170
- nDCG** and defaults on. The practical takeaway for an agent: **trust the default
171
- retrieval**, it is the measured optimum for this vault, and experimental streams
172
- that did not beat it ship *dark* behind flags (see below).
168
+ a ΔnDCG ≥ 0.010 cost gate). Named "champion" figures previously quoted here were
169
+ **withdrawn on 2026-08-07** (THE-748) as unreproducible; see
170
+ [`docs/EVALUATION.md`](./docs/EVALUATION.md) for what is measured and how.
171
+ Contextual chunk enrichment measured **+0.223 nDCG** and defaults on. The
172
+ practical takeaway for an agent is narrower than it used to read: **the defaults
173
+ are the measured configuration**, and experimental streams that did not beat
174
+ their control ship *dark* behind flags (see below). There is currently **no
175
+ published figure** for how the graph walk compares to plain dense retrieval on
176
+ this corpus (THE-748) — do not quote one.
173
177
 
174
178
  **`vault_context`, the one-call context primitive.** Instead of hand-orchestrating
175
179
  search + graph + rerank, call `get_context(query, token_budget)` and get a
@@ -180,7 +184,8 @@ retrieval skill; reach for it first when answering from the vault.
180
184
  (retrieval events + dispatch episodes) into `experiential.db`, physically separate
181
185
  from your notes, with a pre-ingest secret/poison scanner and an outcome axis. By
182
186
  default it records the *action* axis only (tool, status, sizes, hashes, **no
183
- payloads**); `experiential.captureContent` opts into secret-scanned args. This is
187
+ payloads**); `experiential.captureContent` adds secret-scanned args, on under the
188
+ trusted-local posture and off under `hardened`. This is
184
189
  the substrate for a knowledge flywheel (`metrics`, `gaps`, `activation-recompute`),
185
190
  not something an agent reads as if it were authored content.
186
191
 
@@ -344,7 +349,7 @@ The complete option surface (every field, default, env var, and CLI command) is
344
349
  | `auth.mode` | `none` | `jwt` for anything non-loopback (required by the interlock). |
345
350
  | `toolFacade.mode` | `triad` | `flat` if your client prefers the full list. |
346
351
  | `transports.http.enabled` | false | Many-client / remote (then set auth). |
347
- | `experiential.captureContent` | false | Opt into storing (scanned) call args. |
352
+ | `experiential.captureContent` | true | Stores (scanned) call args. `securityProfile: "hardened"` turns it off. |
348
353
  | `OBSIDIAN_TC_GATEWAY_URL` (env) | unset | Enable the generative tier (`reflect`, `densify-llm`, `plane`). |
349
354
 
350
355
  **Gotchas that bite new users**