@cairnkeep/cli 2.25.0 → 2.26.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 (54) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/docs/README.md +2 -0
  3. package/docs/harness-compatibility.md +5 -2
  4. package/docs/learning/CURRICULUM-MAP.md +3 -3
  5. package/docs/learning/FEATURE-GUIDE.md +7 -1
  6. package/docs/learning/lessons/L00-why-cairnkeep.md +1 -1
  7. package/docs/learning/lessons/L01-safe-trial.md +3 -3
  8. package/docs/learning/lessons/L02-installation.md +2 -2
  9. package/docs/learning/lessons/L03-first-project.md +1 -1
  10. package/docs/learning/lessons/L19-validated-skill-improvement.md +1 -1
  11. package/docs/learning/lessons/L20-mcp-tool-profiles.md +1 -1
  12. package/docs/learning/lessons/L21-context-packs.md +1 -1
  13. package/docs/learning/lessons/L22-native-windows.md +2 -2
  14. package/docs/learning/lessons/L23-guided-setup.md +1 -1
  15. package/docs/learning/lessons/L24-okf-exchange.md +1 -1
  16. package/docs/learning/lessons/L25-playbooks.md +1 -1
  17. package/docs/learning/lessons/L26-context-intelligence.md +1 -1
  18. package/docs/learning/lessons/L27-ecosystem-evidence.md +1 -1
  19. package/docs/learning/lessons/L28-security-assurance.md +5 -1
  20. package/docs/learning/lessons/L29-team-continuity.md +33 -1
  21. package/docs/learning/tracks/operator.md +2 -0
  22. package/docs/learning/video-scripts/V28-security-assurance.md +4 -0
  23. package/docs/learning/video-scripts/V29-team-continuity.md +19 -1
  24. package/docs/operating.md +6 -0
  25. package/docs/privacy-and-data-flow.md +21 -1
  26. package/docs/provider-data-flow-review.md +48 -0
  27. package/docs/security-assurance.md +11 -0
  28. package/docs/storage.md +14 -0
  29. package/docs/team-onboarding.md +226 -0
  30. package/docs/team-pilot.md +2 -0
  31. package/docs/team.md +11 -0
  32. package/examples/eval/bundled-fake.json +1 -1
  33. package/mcp-memory-server/dist/capability-config.js +12 -1
  34. package/mcp-memory-server/dist/team-cli.js +15 -5
  35. package/mcp-memory-server/dist/team-client.js +71 -0
  36. package/mcp-memory-server/dist/team-mcp.js +8 -1
  37. package/mcp-memory-server/dist/team-store.js +8 -2
  38. package/mcp-memory-server/package.json +2 -2
  39. package/package.json +1 -1
  40. package/scripts/cairn-cli.mjs +6 -1
  41. package/scripts/completion.sh +11 -3
  42. package/scripts/lib/team-retention.mjs +1 -1
  43. package/scripts/team-connect.mjs +366 -0
  44. package/scripts/test-ci-sharding.sh +1 -1
  45. package/scripts/test-codeql-cohort.mjs +35 -0
  46. package/scripts/test-completion.sh +4 -1
  47. package/scripts/test-package-install.sh +1 -0
  48. package/scripts/test-phase18-capability-lifecycle.sh +2 -2
  49. package/scripts/test-security-baseline.sh +1 -0
  50. package/scripts/test-team-docs.sh +11 -2
  51. package/scripts/test-team-installed.mjs +51 -0
  52. package/scripts/test-team-pilot.mjs +43 -1
  53. package/scripts/verify-security-baseline.mjs +20 -0
  54. package/scripts/windows-platform.mjs +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,47 @@ All notable user-facing changes are documented here. This project follows
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [2.26.0] - 2026-10-26
9
+
10
+ ### Guided team onboarding
11
+
12
+ - Add opt-in `cairn team connect` with terminal harness selectors, a no-write
13
+ plan, explicit apply/confirmation and a read-only default. Add a dedicated
14
+ project-local MCP entry for Claude Code, OpenCode, Qwen Code or Codex without
15
+ replacing personal/unrelated MCPs. Store only private token-file references;
16
+ pin the bridge to one explicit server project.
17
+ - Add `cairn team doctor --client` with authenticated, metadata-only project
18
+ diagnostics; no local admin store or memory payload. Add drift-aware
19
+ `disconnect`, private recoverable backups, serialized writers and a committed
20
+ activation record so interrupted multi-file connections stay inactive.
21
+ - Add synthetic two-identity, adapter/cwd continuity, denied self-publication,
22
+ revocation and interrupted-recovery controls, plus actual installed-package
23
+ onboarding checks. Update completions, storage/privacy and learning/video
24
+ briefs. No new dependency, automatic enrollment or production admission.
25
+
26
+ ### Verification
27
+
28
+ - Keep all CodeQL actions on one reviewed commit and group their dependency
29
+ updates; reject split or unpinned cohorts with mutation controls. Refresh
30
+ pinned CodeQL, Scorecard and release artifact-download actions.
31
+ - Retry bounded capability-lock acquisition when the previous writer removes
32
+ the lock between contention and inspection. Keep other inspection failures
33
+ denied and add a deterministic disappearance regression; preserve concurrent
34
+ child diagnostics on lifecycle-test failure.
35
+
36
+ - Serialize asynchronous security fixtures that patch shared filesystem
37
+ built-ins, with an aggregate hook-ownership/restoration regression. Preserve
38
+ runtime read guards and all actual replacement/growth injection assertions.
39
+ - Add real MCP coverage and a review of file-derived provider workspace flows;
40
+ verify destination, credential and selected-content boundaries without
41
+ suppressing static-analysis findings.
42
+
43
+ ### Documentation
44
+
45
+ - Add role-based team-preview onboarding, a tested reader connection card and
46
+ deployment-readiness checklist; align the reference, pilot, lesson and video
47
+ brief without enabling sharing or changing the released CLI.
48
+
8
49
  ## [2.25.0] - 2026-10-24
9
50
 
10
51
  ### Team continuity preview
package/docs/README.md CHANGED
@@ -80,6 +80,8 @@ linked guides rather than the project landing page.
80
80
  authenticated shared-memory store, human review, local MCP bridge and recovery.
81
81
  It ships as an opt-in experimental preview from 2.25.0, not general production admission. The
82
82
  [isolated pilot guide](team-pilot.md) keeps trials separate from personal memory.
83
+ [Role-based onboarding](team-onboarding.md) adds a tested reader check and
84
+ the deployment decisions to resolve before any real-data pilot.
83
85
  - [Building an overlay](building-an-overlay.md) explains how to add private
84
86
  provider or organization policy without forking the core.
85
87
  - [Managed overlay distributions](overlay-distributions.md) covers wrapper CLIs,
@@ -357,8 +357,11 @@ itself is not enough to claim Cairnkeep support.
357
357
  ## Optional team bridge (opt-in 2.25 preview)
358
358
 
359
359
  [Team continuity](team.md) adds an additional generic local stdio MCP:
360
- `cairn team mcp`. It does not replace `cairn-memory`, rewrite harness config
361
- or change existing setup. Every call supplies a server project ID explicitly;
360
+ `cairn team mcp`. It does not replace `cairn-memory` or change existing setup.
361
+ The 2.26.0 explicit `team connect` wizard adds only a project-local team
362
+ entry for Claude Code, OpenCode, Qwen Code or Codex; global config is unchanged.
363
+ See [supported files and safe recovery](team-onboarding.md#guided-connection-next-release--matching-source-checkout).
364
+ Other adapters retain the manual connection recipe. Every call supplies a server project ID explicitly;
362
365
  the same credentials/project IDs work regardless of the starting cwd.
363
366
  Configure private file-based credentials and the separate JSON API URL in the
364
367
  client environment. Human reviewer credentials must not enter the agent's
@@ -1,7 +1,7 @@
1
1
  # Curriculum Coverage Map
2
2
 
3
- **Baseline:** Cairnkeep 2.25.0
4
- **Last reviewed:** 2026-10-22
3
+ **Baseline:** Cairnkeep 2.26.0
4
+ **Last reviewed:** 2026-10-26
5
5
 
6
6
  This map prevents the course from drifting behind the product. It assigns each
7
7
  user-facing surface to a lesson and records whether the lesson is complete or
@@ -99,7 +99,7 @@ against `cairn help` so a new command cannot bypass a curriculum decision.
99
99
  | `cairn sync-omp` | L02 |
100
100
  | `cairn doctor` | L03; advanced repair in L13-L14 |
101
101
  | `cairn security` | L28 |
102
- | `cairn team` | L29 opt-in preview, included from 2.25.0 |
102
+ | `cairn team` | L29 opt-in preview, included from 2.25.0; next-release guided connect/client doctor/disconnect requires matching client/API |
103
103
  | `cairn playbook` | L25 |
104
104
  | `cairn trajectory` | L13 |
105
105
  | `cairn artifact` | L13 |
@@ -1,6 +1,6 @@
1
1
  # Cairnkeep feature guide
2
2
 
3
- **Baseline:** Cairnkeep 2.25.0
3
+ **Baseline:** Cairnkeep 2.26.0
4
4
 
5
5
  This is the step-back map for choosing and operating Cairnkeep features. The
6
6
  [course labs](https://github.com/cairnkeep/cairnkeep-course-labs) provide one
@@ -191,6 +191,12 @@ human-only review and an additional local stdio MCP bridge. It never scans
191
191
  personal memory or automatically installs a harness entry. Serving requires
192
192
  separate HTTP consent; this JSON API is not OAuth remote MCP HTTP.
193
193
 
194
+ From 2.26.0, `cairn team connect` plans an additive project-local connection,
195
+ `cairn team doctor --client` checks authenticated metadata, and `disconnect`
196
+ supports drift-aware recovery. Both client and team API must be 2.26 or newer.
197
+ These commands do not enroll users or enable sharing automatically. See the
198
+ [guided recipe](../team-onboarding.md#guided-connection-226-or-newer).
199
+
194
200
  Authority is rechecked per request. Backup/restore validates integrity and
195
201
  revokes restored credentials; retention is manual, and logical deletion is not
196
202
  physical erasure. Feature/profile changes require restarting the bridge;
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart
5
5
  **Time:** 10 minutes
6
- **Tested with:** Cairnkeep 2.25.0
6
+ **Tested with:** Cairnkeep 2.26.0
7
7
 
8
8
  ## Outcome
9
9
 
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart
5
5
  **Time:** 15 minutes
6
- **Tested with:** Cairnkeep 2.25.0
6
+ **Tested with:** Cairnkeep 2.26.0
7
7
 
8
8
  ## Outcome
9
9
 
@@ -26,7 +26,7 @@ ephemeral; the named course volume is persistent.
26
26
  1. Pull the public image:
27
27
 
28
28
  ```bash
29
- podman pull ghcr.io/cairnkeep/cairnkeep:2.25.0
29
+ podman pull ghcr.io/cairnkeep/cairnkeep:2.26.0
30
30
  ```
31
31
 
32
32
  2. Start the stdio server with a read-only root filesystem and no Linux
@@ -38,7 +38,7 @@ ephemeral; the named course volume is persistent.
38
38
  --read-only --cap-drop=all --security-opt=no-new-privileges \
39
39
  --tmpfs=/tmp:rw,noexec,nosuid,size=64m,mode=1777 \
40
40
  --volume cairnkeep-course-data:/data:Z,U \
41
- ghcr.io/cairnkeep/cairnkeep:2.25.0 stdio
41
+ ghcr.io/cairnkeep/cairnkeep:2.26.0 stdio
42
42
  ```
43
43
 
44
44
  3. The process waits quietly for MCP input. Press `Ctrl-C` after confirming it
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart
5
5
  **Time:** 25 minutes
6
- **Tested with:** Cairnkeep 2.25.0 and Node.js 22 or newer
6
+ **Tested with:** Cairnkeep 2.26.0 and Node.js 22 or newer
7
7
 
8
8
  ## Outcome
9
9
 
@@ -47,7 +47,7 @@ sync. Codex project trust remains an explicit operator decision.
47
47
  2. Install Cairnkeep:
48
48
 
49
49
  ```bash
50
- npm install --global @cairnkeep/cli@2.25.0
50
+ npm install --global @cairnkeep/cli@2.26.0
51
51
  cairn --version
52
52
  ```
53
53
 
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart
5
5
  **Time:** 25 minutes
6
- **Tested with:** Cairnkeep 2.25.0
6
+ **Tested with:** Cairnkeep 2.26.0
7
7
 
8
8
  ## Outcome
9
9
 
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Evidence and Evaluation
5
5
  **Time:** 50 minutes
6
- **Tested with:** Cairnkeep 2.25.0
6
+ **Tested with:** Cairnkeep 2.26.0
7
7
 
8
8
  ## Outcome
9
9
 
@@ -1,7 +1,7 @@
1
1
  # L20 - Least-authority MCP tool profiles
2
2
 
3
3
  **Status:** Ready
4
- **Tested with:** Cairnkeep 2.25.0 and Node.js 22 or newer
4
+ **Tested with:** Cairnkeep 2.26.0 and Node.js 22 or newer
5
5
  **Time:** 25 minutes
6
6
 
7
7
  ## Outcome
@@ -1,7 +1,7 @@
1
1
  # L21 - Immutable context packs and skill approval
2
2
 
3
3
  **Status:** Ready
4
- **Tested with:** Cairnkeep 2.25.0 and Node.js 22 or newer
4
+ **Tested with:** Cairnkeep 2.26.0 and Node.js 22 or newer
5
5
  **Time:** 40 minutes
6
6
 
7
7
  ## Outcome
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Operator
5
5
  **Time:** 30 minutes
6
- **Tested with:** Cairnkeep 2.25.0, Windows x64, and Node.js 22 or newer
6
+ **Tested with:** Cairnkeep 2.26.0, Windows x64, and Node.js 22 or newer
7
7
 
8
8
  ## Outcome
9
9
 
@@ -16,7 +16,7 @@ perform a reversible uninstall without relying on WSL or Git Bash.
16
16
  From PowerShell:
17
17
 
18
18
  ```powershell
19
- npm install --global @cairnkeep/cli@2.25.0
19
+ npm install --global @cairnkeep/cli@2.26.0
20
20
  cairn version
21
21
 
22
22
  $Lab = Join-Path $env:TEMP 'Cairnkeep Windows Lab'
@@ -3,7 +3,7 @@
3
3
  **Status:** Ready
4
4
  **Track:** Quickstart and Operator
5
5
  **Time:** 35 minutes
6
- **Tested with:** Cairnkeep 2.25.0; Pi 0.84.1; Node.js 22, 24, and 26
6
+ **Tested with:** Cairnkeep 2.26.0; Pi 0.84.1; Node.js 22, 24, and 26
7
7
 
8
8
  ## Outcome
9
9
 
@@ -1,7 +1,7 @@
1
1
  # L24 - Reviewed knowledge exchange
2
2
 
3
3
  **Status:** Ready
4
- **Tested with:** Cairnkeep 2.25.0 and Node.js 22 or newer
4
+ **Tested with:** Cairnkeep 2.26.0 and Node.js 22 or newer
5
5
  **Time:** 35 minutes
6
6
 
7
7
  ## Outcome
@@ -1,7 +1,7 @@
1
1
  # L25 - Bounded workflow playbooks
2
2
 
3
3
  **Status:** Ready
4
- **Tested with:** Cairnkeep 2.25.0 and Node.js 22 or newer
4
+ **Tested with:** Cairnkeep 2.26.0 and Node.js 22 or newer
5
5
  **Time:** 35 minutes
6
6
 
7
7
  ## Outcome
@@ -1,7 +1,7 @@
1
1
  # L26 - Context intelligence with explicit authority
2
2
 
3
3
  **Status:** Ready
4
- **Tested with:** Cairnkeep 2.25.0 and Node.js 22 or newer
4
+ **Tested with:** Cairnkeep 2.26.0 and Node.js 22 or newer
5
5
 
6
6
  ## Outcome
7
7
 
@@ -1,6 +1,6 @@
1
1
  # L27 - Evaluate context companions without moving authority
2
2
 
3
- **Tested with:** Cairnkeep 2.25.0 and Node.js 22 or newer
3
+ **Tested with:** Cairnkeep 2.26.0 and Node.js 22 or newer
4
4
 
5
5
  ## Outcome
6
6
 
@@ -1,7 +1,7 @@
1
1
  # L28 - Verify Cairnkeep's security posture
2
2
 
3
3
  **Status:** Ready
4
- **Tested with:** Cairnkeep 2.25.0 and Node.js 22 or newer
4
+ **Tested with:** Cairnkeep 2.26.0 and Node.js 22 or newer
5
5
 
6
6
  ## Outcome
7
7
 
@@ -80,6 +80,10 @@ node mcp-memory-server/scripts/smoke-note-mcp.mjs --fixture-security-only
80
80
  node scripts/verify-phase19-runtime-evidence.mjs --self-test
81
81
  ```
82
82
 
83
+ The aggregate serializes fixtures that patch Node's shared filesystem hooks.
84
+ Read the [provider data-flow review](../../provider-data-flow-review.md): a
85
+ read-only network tool can still disclose a configured workspace and query.
86
+
83
87
  The baseline rejects unpinned external Actions, `pull_request_target` and
84
88
  workflow-wide write permissions. It also checks the exact preparation/npm/OCI
85
89
  job permission maps, including missing provenance grants and unnecessary write
@@ -1,7 +1,8 @@
1
1
  # L29 - Reviewed team continuity preview
2
2
 
3
3
  **Status:** Brief; opt-in experimental preview in Cairnkeep 2.25.0
4
- **Compatibility:** Cairnkeep 2.25.0 or newer; Node 22.13 or newer for team storage.
4
+ **Compatibility:** Cairnkeep 2.25.0 or newer for manual connection; 2.26.0 or newer
5
+ on both client and team API for guided connection. Node 22.13 or newer for team storage.
5
6
  Use a matching source checkout for the executable regression exercises below.
6
7
  Installing the released CLI does not enable team sharing.
7
8
 
@@ -32,6 +33,7 @@ node mcp-memory-server/scripts/smoke-team-http.mjs
32
33
  node mcp-memory-server/scripts/smoke-team-mcp.mjs
33
34
  node mcp-memory-server/scripts/smoke-team-restore.mjs
34
35
  node mcp-memory-server/scripts/smoke-team-cli.mjs
36
+ node mcp-memory-server/scripts/smoke-team-onboarding.mjs
35
37
  ```
36
38
 
37
39
  These create disposable local fixtures and an authenticated loopback service,
@@ -40,6 +42,36 @@ No model, personal store, external API or corporate system is used. The MCP
40
42
  control changes client identity/cwd and retrieves the same approved decision;
41
43
  it does not infer authority from the working folder or a display name.
42
44
 
45
+ Use the [role-based handoff](../../team-onboarding.md) to separate operator,
46
+ reader/contributor and human-reviewer tasks. Its executable reader check uses
47
+ the original 2.25.0 CLI or newer. The 2.26.0 guided connection exercise below is
48
+ still opt-in, not automatic enrollment or deployment. Complete
49
+ the readiness checklist with missing decisions marked pending; do not enroll
50
+ real users or introduce real data during this exercise.
51
+
52
+ ## Guided client exercise (2.26 or newer)
53
+
54
+ Use the [guided connection recipe](../../team-onboarding.md#guided-connection-next-release--matching-source-checkout)
55
+ with a disposable project and the operator's synthetic workload-reader file.
56
+ Run `cairn team connect` once without `--apply`: inspect its selected project,
57
+ read-only profile and additional harness files. Confirm that personal/unrelated
58
+ MCP entries remain present. Explicitly apply, then run
59
+ `cairn team doctor --client --project-root PATH`. Explain the reported credential
60
+ expiry/roles and why no memory text is needed to check project access.
61
+
62
+ Move to another folder: the saved connection still names the explicit team
63
+ project. Try an unrelated project and a revoked credential; both must fail.
64
+ Compare a disconnect plan with `disconnect --apply --yes`: tokens/backups stay,
65
+ only owned unchanged entries disappear. Existing sessions require restart or
66
+ server-side revocation; removing local config is not offboarding.
67
+
68
+ The onboarding regression uses two workload identities and four generated
69
+ adapter configurations, actual MCP reads from different folders, a synthetic
70
+ review-policy fixture, interrupted activation/recovery and competing writers.
71
+ It does not claim two independent humans, a real user approval, every native
72
+ harness UI or an LLM quality advantage. No paid model is used. Keep the lesson
73
+ Brief until the release-verified learner lab is independently rehearsed.
74
+
43
75
  Trace the lifecycle beside the operator commands in the reference:
44
76
 
45
77
  ```text
@@ -21,6 +21,8 @@
21
21
  15. [L28 - Verify Cairnkeep's security posture](../lessons/L28-security-assurance.md)
22
22
  16. Optional 2.25 preview: [L29 - Reviewed team continuity](../lessons/L29-team-continuity.md).
23
23
  Do not enable it in production before the independent review and approved pilot.
24
+ Version 2.26.0 adds guided additive connection, client
25
+ diagnostics and disconnect/recovery exercises; no production enrollment.
24
26
 
25
27
  All modules are optional. The track is complete when the operator can add and
26
28
  remove each integration without breaking the standalone local workflow and can
@@ -60,6 +60,10 @@ npm --prefix mcp-memory-server run check:http-guard
60
60
  Highlight full-SHA action pins, CodeQL, dependency review, token non-leakage,
61
61
  portable Windows/POSIX path cases, and the HTTP 413 test. Do not show repository
62
62
  secrets or live security-alert details.
63
+ Explain that a passing retry is not a root-cause fix: the aggregate now
64
+ serializes filesystem-hook fixtures without weakening read/growth assertions.
65
+ Use the [provider flow review](../../provider-data-flow-review.md) to distinguish
66
+ an intentional workspace/query disclosure from arbitrary-file upload.
63
67
 
64
68
  Include the offline pointer-lock control in a source checkout:
65
69
  `node mcp-memory-server/scripts/smoke-context-pack-lock.mjs`. It reproduces
@@ -1,6 +1,7 @@
1
1
  # V29 - Remember together without sharing everything
2
2
 
3
- Status: technical rehearsal brief for the opt-in Cairnkeep 2.25.0 preview.
3
+ Status: technical rehearsal brief for Cairnkeep 2.26.0 guided onboarding to the
4
+ opt-in preview introduced in 2.25.0. Not a recorded or independently rehearsed lesson.
4
5
  Target: 10–12 minutes, experienced-developer audience. Describe a released
5
6
  experimental preview, not a generally production-admitted team service.
6
7
  Use the [isolated pilot guide](../../team-pilot.md) for a separately authorized
@@ -20,6 +21,10 @@ Use a disposable source checkout and only synthetic fixtures. Show
20
21
  `docs/team.md`; highlight that a reviewer token is human-only and is never
21
22
  handed to the agent. Briefly show initialization/membership command forms,
22
23
  with no token contents on screen. The server is loopback-only.
24
+ Use the [role-based handoff](../../team-onboarding.md) connection card to show
25
+ which steps belong to the operator, reader and human reviewer. Run its actual
26
+ reader check in the disposable lab; never film a credential or replace the
27
+ personal memory entry. Keep a pause on the pending deployment decisions.
23
28
 
24
29
  ## 3:30–6:00 — Make the boundary visible
25
30
 
@@ -47,6 +52,19 @@ on “restored credentials revoked”: copying a backup must not silently restor
47
52
  access. Show fresh-only restore, no-overwrite and uninstall-retention controls.
48
53
  Explain that logical deletion is not secure disk erasure or backup deletion.
49
54
 
55
+ With a matching 2.26.0-or-newer client and team API, insert a short dynamic client segment:
56
+ open the harness checkboxes in `team connect`, pause on the no-write plan and
57
+ read-only default, then explicitly apply in a disposable project. Keep the
58
+ personal MCP entry visible beside the new team entry. Run `team doctor --client`
59
+ and zoom into expiry/project/roles, never the token file or original-config
60
+ backup. Switch folders, show the pinned project, then plan/apply disconnect.
61
+ Explain that disconnect is not revocation and running sessions need a restart.
62
+ Use the maintained `smoke-team-onboarding.mjs` results for interruption/drift
63
+ controls, not a fabricated typing transcript. The automated human-class policy
64
+ fixture is not actual human consent; no independent-human trial is claimed.
65
+ Do not record this addition against a 2.25-only client/API; follow the version
66
+ note in the onboarding guide and verify the published package before recording.
67
+
50
68
  ## 10:00–11:30 — Honest closing
51
69
 
52
70
  End on the admission checklist in `docs/team.md`, not a production deployment.
package/docs/operating.md CHANGED
@@ -1550,6 +1550,12 @@ project memory. It is default off (`CAIRN_TEAM=1` required); serving also needs
1550
1550
  `CAIRN_TEAM_HTTP=1`. It does not change ordinary setup or existing MCP entries.
1551
1551
  Use [the team reference](team.md) for roles, private credentials, additional
1552
1552
  local stdio registration, human review, backup/restore and incident handling.
1553
+ The 2.26.0 guided client workflow is documented in
1554
+ [team onboarding](team-onboarding.md#guided-connection-next-release--matching-source-checkout):
1555
+ `team connect` plans before explicit apply, `team doctor --client` checks only
1556
+ authenticated project/credential metadata, and `team disconnect` preserves
1557
+ personal memory and credentials. Both client and team API must support 2.26's
1558
+ connection check. No ordinary setup or production sharing is enabled implicitly.
1553
1559
  The internal governed review and approved isolated native pilot are complete;
1554
1560
  independent production review and a deployment-specific approved real-data pilot
1555
1561
  are still required before using real organization data.
@@ -14,7 +14,7 @@ below (some operator-owned endpoints do not require a credential).
14
14
  | Embedding-ranked search | Stored memory values that are not cached, plus the search query | `CAIRN_MEMORY_EMBEDDING_URL` or `CAIRN_LLM_API_URL` |
15
15
  | Separately opted-in memory reranking | Query and at most 50 scope/current/filter-admitted key/value excerpts, each at most 4 KiB | Only the explicit `CAIRN_MEMORY_RERANK_URL`; separate optional credential, no retries/redirects/alternate hosts |
16
16
  | `memory_extract` | The transcript supplied to the tool | `CAIRN_LLM_API_URL` |
17
- | `domain_knowledge_query` | Workspace slug and query | `ANYTHINGLLM_BASE_URL` |
17
+ | `domain_knowledge_query` | Workspace identifier and query | Configured domain provider: `ANYTHINGLLM_BASE_URL`, or separately enabled `CAIRN_OPENVIKING_BASE_URL` |
18
18
  | `domain_knowledge_sync` | Files selected by the sync configuration | `ANYTHINGLLM_BASE_URL` |
19
19
  | `route_check` | A health request, with no memory or prompt content | `CAIRN_ROUTE_ENDPOINT` |
20
20
  | `context_explore` | Repository path and query are passed to the configured local executable | `CAIRN_EXPLORE_BINARY`; any further data flow is controlled by that tool |
@@ -57,6 +57,14 @@ it does not require or inherit `CAIRN_LLM_API_KEY`. A local provider is still a
57
57
  separate process that receives these excerpts. Neither a chat agent nor a
58
58
  research assistant is part of reranking or authorization.
59
59
 
60
+ ## Domain retrieval configuration
61
+
62
+ Domain queries may derive a workspace identifier from local configuration;
63
+ that identifier is intentionally disclosed to the chosen provider. This does
64
+ not upload the configuration file or other local documents. See the
65
+ [provider data-flow review](provider-data-flow-review.md) for the exact tested
66
+ boundary and its limitations.
67
+
60
68
  ## Playbook decision and receipt flow
61
69
 
62
70
  Playbooks are local workflow policy, not model inference. A check reads the
@@ -720,3 +728,15 @@ tokens. Backups include shared proposals and memberships and need separate
720
728
  encryption and access control. No unapproved personal content is discoverable.
721
729
  A hash confirmation does not establish human consent or content truth.
722
730
  Review and production admission remain separate operator responsibilities.
731
+
732
+ The opt-in guided connection workflow stores endpoint/org/project IDs and a
733
+ credential **file path**, never the credential bytes, in private client state.
734
+ Its project-local MCP entry references that connection file; personal/global
735
+ MCP configuration is not replaced. Private recovery snapshots copy the original
736
+ harness configuration and may therefore contain preexisting operator secrets;
737
+ keep them out of source control and protect/encrypt backups separately.
738
+ Client doctor's authenticated metadata probe discloses the chosen project ID
739
+ to the configured service and returns only subject, roles and credential
740
+ ID/class/expiry. It neither reads memory text nor sends data to model providers.
741
+ It appends a normal value-free service audit event. Disconnect retains backups
742
+ and tokens and is not server-side revocation. See [onboarding](team-onboarding.md).
@@ -0,0 +1,48 @@
1
+ # Domain retrieval data-flow review
2
+
3
+ The `js/file-access-to-http` findings in `domain-retrieval-provider.ts` trace
4
+ the default workspace from the local memory configuration through
5
+ `domain_knowledge_query` to the configured provider. The source is the
6
+ `anythingllm_workspaces` field, not arbitrary document contents or stored memory.
7
+
8
+ This is an intentional disclosure boundary, not evidence of no disclosure:
9
+ the configured workspace identifier and the selected query leave the process.
10
+ Only configure a provider trusted to receive both. A read-only MCP annotation
11
+ means the tool does not mutate Cairnkeep state; it does **not** mean no network
12
+ traffic. The tool's open-world annotation reflects this boundary.
13
+
14
+ ## Boundaries checked
15
+
16
+ - Provider origin and authentication come from operator environment settings,
17
+ not workspace values or unrelated keys in a memory configuration file.
18
+ - The default provider percent-encodes the workspace as one path segment. A
19
+ workspace that resembles a URL cannot select another origin or add headers.
20
+ - The optional resource provider uses its fixed read-only endpoint, scopes
21
+ target identifiers below resources and rejects decoded traversal segments.
22
+ It requires explicit feature consent and separate remote-HTTP consent.
23
+ - Neither request path reads, enumerates or uploads local documents. The
24
+ query tool is separate from explicitly approved document synchronization.
25
+ - Both providers refuse redirects, bound responses and sanitize failures.
26
+ Do not weaken these controls to make a static-analysis finding disappear.
27
+
28
+ `smoke-provider-config-flow.mjs` exercises the actual stdio MCP configuration
29
+ path for both providers, including a URL-shaped workspace, unrelated file
30
+ sentinels and forged endpoint/credential fields. It asserts the exact selected
31
+ request body, fixed mock origin and operator-supplied authentication. All
32
+ fixtures are synthetic and run against loopback only. Existing outbound tests
33
+ cover redirect denial, consent, response bounds and payload-free failures.
34
+
35
+ ## Review disposition and limits
36
+
37
+ The reviewed flows are expected provider-routing disclosures, not a discovered
38
+ arbitrary-file-upload or file-selected-origin vulnerability. The alerts are
39
+ not dismissed or suppressed by this change: retain the finding and this
40
+ rationale for review, and reassess when source fields, destination selection,
41
+ workspace handling or provider behavior changes.
42
+
43
+ This is not a sandbox or a provider-side workspace ACL. A trusted local caller
44
+ can explicitly choose another workspace served by its provider credential;
45
+ the existing shared-token HTTP service is one trusted storage domain. Team
46
+ authorization remains separate, and team retrieval does not use these providers.
47
+ Same-account processes can change operator configuration. Tests establish the
48
+ documented application boundary, not the trustworthiness of a configured host.
@@ -138,6 +138,10 @@ prove a future privileged publish run succeeds.
138
138
 
139
139
  ## Verification evidence
140
140
 
141
+ The [domain retrieval data-flow review](provider-data-flow-review.md) records
142
+ the intentional file-derived workspace disclosure and its tested destination,
143
+ credential and content boundaries. Static-analysis alerts are not suppressed.
144
+
141
145
  The maintained gates are `npm run security:baseline`, both production
142
146
  `npm audit` checks, `scripts/test-security-baseline.sh`, the memory-server
143
147
  security-assurance and HTTP-guard smoke tests, native-Windows tests, and the
@@ -161,6 +165,7 @@ node mcp-memory-server/scripts/smoke-runtime-file-reads.mjs
161
165
  node mcp-memory-server/scripts/smoke-bounded-input-reads.mjs
162
166
  node mcp-memory-server/scripts/smoke-workspace-file-security.mjs
163
167
  node mcp-memory-server/scripts/smoke-outbound-security.mjs
168
+ node mcp-memory-server/scripts/smoke-security-fixture-order.mjs
164
169
  node scripts/test-runtime-file-security.mjs
165
170
  node scripts/test-omp-staged-security.mjs
166
171
  node scripts/test-container-health.mjs
@@ -173,6 +178,12 @@ assert that every historical CodeQL/Scorecard alert is fixed. Triage findings
173
178
  individually and use a fresh default-branch analysis to confirm alert status;
174
179
  never dismiss an uninvestigated finding merely to improve the score.
175
180
 
181
+ The aggregate imports filesystem-hook fixtures sequentially. Top-level-await
182
+ siblings are not a serial test runner: overlapping imports can restore another
183
+ fixture's hooks and create a false failure before growth injection. The
184
+ aggregate ownership/restoration observer covers this test-isolation contract;
185
+ runtime reader checks and injection assertions remain unchanged.
186
+
176
187
  The developer-evidence follow-up also hardens the shared runtime note pre-image
177
188
  hasher: it reads from an inspected descriptor under a 64 MiB cap and rejects
178
189
  replacement or growth before accepting a hash. Missing targets remain valid
package/docs/storage.md CHANGED
@@ -620,3 +620,17 @@ pages, WAL or backup copies. Uninstall retains team data and refuses purge
620
620
  targets overlapping its configured directory. Independently selected
621
621
  `--data` stores must be outside purge targets or also configured through
622
622
  `CAIRN_TEAM_BASE_DIR`. Keep encrypted backups separately protected.
623
+
624
+ Guided client connection state is separate from the organization database:
625
+ `~/.cairnkeep/team-clients/<sha256-of-canonical-project-path>/` holds a strict
626
+ versioned connection, private recovery receipt/original config snapshots and
627
+ an exclusive sibling `<project-path-hash>.operation.lock`. Keeping the open lock
628
+ outside the archived directory preserves native Windows rename semantics and
629
+ continuous writer exclusion. Records contain token-file paths, not raw tokens.
630
+ Original MCP configs can contain other secrets, so protect these backups.
631
+ Activation is committed only after all selected entries are written. An
632
+ interrupted connect stays inactive; interrupted disconnect can resume without
633
+ overwriting unrelated edits. There is no automatic stale-lock cleanup.
634
+ Disconnect archives state in a unique `.disconnected-*` sibling and retains
635
+ credentials; uninstall/purge refuses to delete team client state/backups.
636
+ See [client diagnostics/recovery](team-onboarding.md#client-diagnosis-and-recovery).