@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.
- package/CHANGELOG.md +41 -0
- package/docs/README.md +2 -0
- package/docs/harness-compatibility.md +5 -2
- package/docs/learning/CURRICULUM-MAP.md +3 -3
- package/docs/learning/FEATURE-GUIDE.md +7 -1
- package/docs/learning/lessons/L00-why-cairnkeep.md +1 -1
- package/docs/learning/lessons/L01-safe-trial.md +3 -3
- package/docs/learning/lessons/L02-installation.md +2 -2
- package/docs/learning/lessons/L03-first-project.md +1 -1
- package/docs/learning/lessons/L19-validated-skill-improvement.md +1 -1
- package/docs/learning/lessons/L20-mcp-tool-profiles.md +1 -1
- package/docs/learning/lessons/L21-context-packs.md +1 -1
- package/docs/learning/lessons/L22-native-windows.md +2 -2
- package/docs/learning/lessons/L23-guided-setup.md +1 -1
- package/docs/learning/lessons/L24-okf-exchange.md +1 -1
- package/docs/learning/lessons/L25-playbooks.md +1 -1
- package/docs/learning/lessons/L26-context-intelligence.md +1 -1
- package/docs/learning/lessons/L27-ecosystem-evidence.md +1 -1
- package/docs/learning/lessons/L28-security-assurance.md +5 -1
- package/docs/learning/lessons/L29-team-continuity.md +33 -1
- package/docs/learning/tracks/operator.md +2 -0
- package/docs/learning/video-scripts/V28-security-assurance.md +4 -0
- package/docs/learning/video-scripts/V29-team-continuity.md +19 -1
- package/docs/operating.md +6 -0
- package/docs/privacy-and-data-flow.md +21 -1
- package/docs/provider-data-flow-review.md +48 -0
- package/docs/security-assurance.md +11 -0
- package/docs/storage.md +14 -0
- package/docs/team-onboarding.md +226 -0
- package/docs/team-pilot.md +2 -0
- package/docs/team.md +11 -0
- package/examples/eval/bundled-fake.json +1 -1
- package/mcp-memory-server/dist/capability-config.js +12 -1
- package/mcp-memory-server/dist/team-cli.js +15 -5
- package/mcp-memory-server/dist/team-client.js +71 -0
- package/mcp-memory-server/dist/team-mcp.js +8 -1
- package/mcp-memory-server/dist/team-store.js +8 -2
- package/mcp-memory-server/package.json +2 -2
- package/package.json +1 -1
- package/scripts/cairn-cli.mjs +6 -1
- package/scripts/completion.sh +11 -3
- package/scripts/lib/team-retention.mjs +1 -1
- package/scripts/team-connect.mjs +366 -0
- package/scripts/test-ci-sharding.sh +1 -1
- package/scripts/test-codeql-cohort.mjs +35 -0
- package/scripts/test-completion.sh +4 -1
- package/scripts/test-package-install.sh +1 -0
- package/scripts/test-phase18-capability-lifecycle.sh +2 -2
- package/scripts/test-security-baseline.sh +1 -0
- package/scripts/test-team-docs.sh +11 -2
- package/scripts/test-team-installed.mjs +51 -0
- package/scripts/test-team-pilot.mjs +43 -1
- package/scripts/verify-security-baseline.mjs +20 -0
- 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
|
|
361
|
-
|
|
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.
|
|
4
|
-
**Last reviewed:** 2026-10-
|
|
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.
|
|
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:** 15 minutes
|
|
6
|
-
**Tested with:** Cairnkeep 2.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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:** Operator
|
|
5
5
|
**Time:** 30 minutes
|
|
6
|
-
**Tested with:** Cairnkeep 2.
|
|
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.
|
|
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'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# L28 - Verify Cairnkeep's security posture
|
|
2
2
|
|
|
3
3
|
**Status:** Ready
|
|
4
|
-
**Tested with:** Cairnkeep 2.
|
|
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;
|
|
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
|
|
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
|
|
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).
|