Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
208 commits
Select commit Hold shift + click to select a range
88fd2d3
chore: sync Cargo.lock workspace versions to 0.13.12
Jun 15, 2026
36ac2fc
feat(collab): trusted-keys keystore + multi-key PSK auth (mae-mcp)
Jun 15, 2026
d410e84
feat(collab): wire trusted-keys keystore into daemon + editor
Jun 15, 2026
e890935
docs(adr): ADR-017 asymmetric peer auth (SSH-style keys + TOFU)
Jun 15, 2026
1841107
feat(collab): Ed25519 identity + KeyAuth signed-challenge handshake (…
Jun 15, 2026
e00b150
feat(collab): daemon 'key' auth mode + admin CLI (ADR-017 phase 2)
Jun 15, 2026
886cdaa
feat(collab): native mTLS transport from Ed25519 identities (ADR-017 …
Jun 15, 2026
9f3b533
feat(collab): daemon mTLS accept + session identity binding (ADR-017 …
Jun 15, 2026
db30451
feat(collab): editor key-mode options + peer identity CLI (ADR-017 ph…
Jun 15, 2026
447fc44
feat(collab): editor mTLS client transport + mTLS e2e test (ADR-017 p…
Jun 15, 2026
5432219
feat(collab): strict identity binding on the daemon (ADR-017 phase 3)
Jun 15, 2026
1e3028d
feat(collab): per-KB membership enforcement (ADR-017 phase 4)
Jun 15, 2026
5b19f78
feat(collab): editor KB membership commands (ADR-017 phase 4 editor)
Jun 15, 2026
8ebf673
fix(collab): re-stamp KB creator to authenticated identity + two-edit…
Jun 15, 2026
99881c2
feat(collab): interactive TOFU host-key prompt (ADR-017 phase 2c)
Jun 16, 2026
6760303
docs(collab): fix COLLABORATION.md bugs + trusted-peer (key mode) guide
Jun 16, 2026
2b2f2de
ci: run trusted-peer mTLS + per-KB membership e2e in the e2e job
Jun 16, 2026
fd2e35a
docs: trusted-peer collaboration testing plan (automated + 2-machine …
Jun 16, 2026
daadc94
docs: add build/setup + key-setup section to the collab testing plan
Jun 16, 2026
b88c759
feat(collab): mae setup-collab + opt-in SSH identity reuse (ADR-017)
Jun 16, 2026
7644794
fix(collab): avoid port collisions in e2e tests + guard setup-collab …
Jun 16, 2026
a8ac842
fix(collab): make trusted-peer e2e cross-platform (macOS + Linux)
Jun 16, 2026
b947a52
docs(collab): live-run coordination board for the two-machine validation
Jun 16, 2026
30776b9
docs(collab): require accept-new policy + rebuild instructions for bo…
cuttlefisch Jun 16, 2026
6b2b3cf
docs(collab): start bob-side test notes log (issues from the live run)
cuttlefisch Jun 16, 2026
985fa41
docs(collab): restructure bob notes — tag every observation with its …
cuttlefisch Jun 16, 2026
6c048bc
docs(collab): alice-side test notes — record I-1 rope panic + cross-r…
cuttlefisch Jun 16, 2026
a57455f
fix(mouse): clamp double-click word-select offset; guard word_start_b…
cuttlefisch Jun 16, 2026
b6fdc8b
docs(collab): Run 2 — bidirectional CRDT sync confirmed; I-1/I-2/I-7 …
cuttlefisch Jun 16, 2026
82df2ff
docs(collab): alice Run-2 notes — T2.5 convergence ✅, I-2 reattributed
cuttlefisch Jun 16, 2026
13a18f1
docs(collab): T2.5 simultaneous-edit convergence confirmed (Run 2)
cuttlefisch Jun 16, 2026
1304d67
docs(collab): reconcile I-2 with alice's notes + record her I-3 follo…
cuttlefisch Jun 16, 2026
ca141cb
test(collab): add collabtest KB fixture + wire into membership e2e
cuttlefisch Jun 16, 2026
d352be2
test(collab): drop stray KB instance marker from collabtest fixture
cuttlefisch Jun 16, 2026
b111b9e
feat(collab): `:kb-share <name>` to share a specific KB instance (I-4)
cuttlefisch Jun 16, 2026
281d2ae
fix(collab): resolve named KB by uuid for share; kb-join/leave honor …
cuttlefisch Jun 16, 2026
863d854
feat(collab): ADR-018 Phase 0 — principal accessors + authorized_keys…
cuttlefisch Jun 16, 2026
caad6eb
feat(collab): ADR-018 Phase 1 — KbCollectionDoc v2 schema (owner/role…
cuttlefisch Jun 16, 2026
9b72494
feat(collab): ADR-018 Phase 2+3 — kb_access engine + identity-anchore…
cuttlefisch Jun 16, 2026
7147f75
feat(collab): ADR-018 Phase 4 — daemon CLI revoke-by-fingerprint + la…
cuttlefisch Jun 16, 2026
774af1b
fix(collab): ADR-018 — owner-gate raw kbc: sync/update (membership-sm…
cuttlefisch Jun 16, 2026
335eeee
feat(collab): ADR-018 Phase 5 — editor commands for roles, policy, ap…
cuttlefisch Jun 16, 2026
4d107c3
feat(collab): ADR-018 Phase 6 — KbCollectionDoc.migrate_if_legacy
cuttlefisch Jun 16, 2026
6e13c9c
test(collab): ADR-018 — membership e2e to invite→pending→approve (pri…
cuttlefisch Jun 16, 2026
76ed368
docs(collab): ADR-018 + COLLABORATION.md — identity-anchored KB acces…
cuttlefisch Jun 16, 2026
585f799
docs(collab): ADR-018 — in-editor KB concept for human + AI peers
cuttlefisch Jun 16, 2026
2ce3ebf
docs(collab): alice notes — ADR-018 done + the new live T2.6 flow for…
cuttlefisch Jun 16, 2026
ce878b2
docs(collab): Run 3 (ADR-018 T2.6) — membership + replication validat…
cuttlefisch Jun 16, 2026
8509b97
docs(collab): T2.6 revoke+restrictive denial confirmed; B-1 upgraded,…
cuttlefisch Jun 16, 2026
47cf7eb
docs(collab): Run 3 live T2.6 — steps 1-5 PASS over mTLS; I-8 (federa…
cuttlefisch Jun 16, 2026
e3429cc
docs(collab): T2.6 restrictive deny-by-default PASSES live; I-9 (edit…
cuttlefisch Jun 16, 2026
1b8a729
docs(collab): I-10 (once-at-startup auth, no live revoke) logged; piv…
cuttlefisch Jun 16, 2026
2792908
fix(collab): I-10 — daemon honors authorize/revoke live (no restart)
cuttlefisch Jun 16, 2026
697b901
fix(collab): I-9 — shared-KB edits resolve + propagate (federation-aw…
cuttlefisch Jun 16, 2026
43f6c5a
fix(collab): B-1 — kb-join surfaces joined / pending / denied distinctly
cuttlefisch Jun 16, 2026
c16468b
docs(collab): mark I-8/I-9/I-10/B-1 fixed; resume plan for both machines
cuttlefisch Jun 16, 2026
9dc858e
docs(collab): B-5 (kb_join stalls on malformed KB row) + B-6 (KB stor…
cuttlefisch Jun 16, 2026
9e46c1c
docs(collab): Run 4 — B-1 + I-9 fixes verified; editor propagation pa…
cuttlefisch Jun 16, 2026
23b73f1
feat(collab): ADR-019 Phase 0+1 — observability + durable emit gate
cuttlefisch Jun 16, 2026
35aafc2
feat(collab): ADR-019 Phase 2+4 — joined KBs are first-class instance…
cuttlefisch Jun 16, 2026
e6a4c45
feat(collab): ADR-019 Phase 3 — reconnect/startup reconstruction of s…
cuttlefisch Jun 16, 2026
cf673b7
fix(collab): ADR-019 Phase 5 — robustness/parity/UX tail
cuttlefisch Jun 16, 2026
fb5c455
docs(collab): ADR-019 Phase 6 — ADR doc + restart-survival e2e
cuttlefisch Jun 16, 2026
5ccb6fe
docs(collab): ADR-019 landed — durable shared-KB sync; both machines …
cuttlefisch Jun 16, 2026
5d903d3
fix(collab): ADR-019 — reconnect re-subscribe skips primary KB (Colla…
cuttlefisch Jun 17, 2026
91db1f1
docs(collab): Run 5 (ADR-019) — B-3 resolved; B-8 editor edit doesn't…
cuttlefisch Jun 17, 2026
d9f7fbd
test(collab): B-8 repro (passes) + analysis — gate logic correct, bug…
cuttlefisch Jun 17, 2026
2a79040
docs(collab): B-10 — joined KB instance has dir=""; likely B-8 root c…
cuttlefisch Jun 17, 2026
18f9a97
docs(collab): holistic design guidance for alice — shared KB as durab…
cuttlefisch Jun 17, 2026
b93498d
docs(collab): ADR-020 Phase 0 — durable replicated KB artifact + obse…
cuttlefisch Jun 17, 2026
0865b4d
fix(collab): ADR-020 Phase 1 — never silently lose a kb/node_update (…
cuttlefisch Jun 17, 2026
4d72ed4
fix(collab): ADR-020 Phase 2 — merge-on-join instead of overwrite
cuttlefisch Jun 17, 2026
1f4a699
fix(collab): ADR-020 Phase 3 — durable joined instance + disk-first l…
cuttlefisch Jun 17, 2026
aaf33f8
docs(collab): Stage 1 (ADR-020 P0–3) landed + pushed — bob pickup + l…
cuttlefisch Jun 17, 2026
8e648b4
docs(collab): bob Stage-1 baseline — B-10 fixed (3 nodes reload), B-8…
cuttlefisch Jun 17, 2026
569d4dd
docs(collab): Step 1 (alice→bob receive) FAIL — B-8 confirmed from ow…
cuttlefisch Jun 17, 2026
95295a2
fix(collab): ADR-020 — kb/node_update is a request, not a dropped not…
cuttlefisch Jun 17, 2026
9a3b973
docs(collab): B-8 root cause + fix landed (95295a2b) — bob rebuild + …
cuttlefisch Jun 17, 2026
5ca2c8f
docs(collab): B-8 fix build — new B-12 (approve→no auto-subscribe) + …
cuttlefisch Jun 17, 2026
b69d4b5
docs(collab): Step 1 re-run — B-8 EMIT FIXED, new B-13 (join doesn't …
cuttlefisch Jun 17, 2026
76d3461
docs(collab): B-13 narrowed to member-side-only — daemon delivery con…
cuttlefisch Jun 17, 2026
4602ce4
fix(collab): ADR-020 B-13 — joined member must live-subscribe to KB n…
cuttlefisch Jun 17, 2026
ab19fb1
docs(collab): B-13 fix landed (4602ce4b) — bob rebuild instructions +…
cuttlefisch Jun 17, 2026
d06e5d2
docs(collab): B-13 CONFIRMED fixed (build verified) — new B-14 no-op …
cuttlefisch Jun 17, 2026
490d9a3
fix(collab): ADR-020 B-14 + B-15 — KB node edits now actually merge a…
cuttlefisch Jun 17, 2026
8d1e040
docs(collab): B-14+B-15 fixed (490d9a3c) — bob rebuild + re-join to a…
cuttlefisch Jun 17, 2026
f77706a
docs(collab): ✅ STEP 1 (alice→bob receive) PASSES on B-14+B-15 build
cuttlefisch Jun 22, 2026
16b8a86
docs(collab): Step 2 (bob→alice) — emit GREEN at bob+daemon, owner-si…
cuttlefisch Jun 22, 2026
02546bf
test(collab): ADR-020 B-16 — production-fidelity two-peer CRDT tests …
cuttlefisch Jun 22, 2026
1652fcf
fix(collab): ADR-020 B-16 — canonical persisted lineage on share + st…
cuttlefisch Jun 22, 2026
decf6ba
docs(collab): KB-sync bug chain + testing-methodology lessons (for wr…
cuttlefisch Jun 22, 2026
4a33016
docs(collab): B-16 fixed (1652fcf4) — bob rebuild + bidirectional re-…
cuttlefisch Jun 22, 2026
a49e54f
docs(collab): ✅✅ BIDIRECTIONAL Stage-1 KB sync CONFIRMED (B-16 build)
cuttlefisch Jun 22, 2026
c87ae3a
fix(collab): ADR-020 B-12 — owner re-share preserves membership (no s…
cuttlefisch Jun 22, 2026
ca08e52
docs(adr): ADR-021 — durable, auditable membership & policy (complian…
cuttlefisch Jun 22, 2026
3a67a54
docs(collab): bidirectional GREEN + B-12 deployed — remaining manual …
cuttlefisch Jun 22, 2026
3578acd
docs(collab): ✅ T1 (B-12 owner-restart) PASS — membership preserved +…
cuttlefisch Jun 22, 2026
8635951
docs(collab): T2 restart-survival PASS (bob) — disk-first reload + au…
cuttlefisch Jun 22, 2026
d86fd4f
docs(collab): T1 + T2 PASS — results log (cross-validated daemon ⇄ bo…
cuttlefisch Jun 22, 2026
71f86d8
docs(collab): T3 offline-merge — ready-to-run procedure (roles, steps…
cuttlefisch Jun 22, 2026
a53368b
docs(collab): ✅ T3 offline-merge PASS (bob) + yellow flag (offline-pe…
cuttlefisch Jun 22, 2026
6a1a560
fix(collab): observability — pending_kb_updates now reflects the DURA…
cuttlefisch Jun 22, 2026
9c58dfd
docs(collab): T3 PASS + yellow-flag fix recorded; T3b ready-to-run (o…
cuttlefisch Jun 22, 2026
268847e
docs(collab): ✅ T3b PASS — offline edit survives full editor restart …
cuttlefisch Jun 22, 2026
81d3145
docs(collab): ✅ T3b PASS — offline edit survives editor restart; T3c …
cuttlefisch Jun 22, 2026
5b67d2e
docs(collab): T3c — kill-9 crash CHARACTERIZATION procedure (observe …
cuttlefisch Jun 22, 2026
27ffc6d
docs(collab): 🔬 T3c kill-9 characterization — no clobber this run, bu…
cuttlefisch Jun 22, 2026
b41b321
docs(adr): ADR-022 — crash-safe convergent KB sync (state-vector reco…
cuttlefisch Jun 22, 2026
4a99039
feat(collab): ADR-022 W1 — N-peer reconcile harness + crash-safe reco…
cuttlefisch Jun 22, 2026
945f294
feat(collab): ADR-022 W2 — SV-reconcile on KB (re)join, end to end
cuttlefisch Jun 22, 2026
cb3a65e
docs(collab): ADR-022 as-built impl + B-17 lesson (the harness's firs…
cuttlefisch Jun 22, 2026
a8650ea
docs(collab): T3c-stress READY-TO-RUN (PASS/FAIL) — ADR-022 crash-saf…
cuttlefisch Jun 22, 2026
cbcdb4d
docs(collab): ✅ T3c-stress PASS (ADR-022 build) — clean pre-connect c…
cuttlefisch Jun 22, 2026
800a048
docs(collab): T3c-stress LIVE RESULT — PASS (2 runs), ADR-022 crash-s…
cuttlefisch Jun 22, 2026
91a5201
fix(collab): per-launch auto-connect overrides win over init.scm (fou…
cuttlefisch Jun 22, 2026
75c213a
test(collab): W3 — collab_tcp_e2e uses shared wire builders (kills th…
cuttlefisch Jun 22, 2026
a1e5fde
test(collab): W3 — revive network_e2e (dead gate → self-contained, ru…
cuttlefisch Jun 22, 2026
b2ab2be
style(test): rustfmt network_e2e (drop leftover blank lines from the …
cuttlefisch Jun 22, 2026
d90561e
docs(collab): T4–T7 live matrix READY-TO-RUN (PASS/FAIL) — concurrent…
cuttlefisch Jun 22, 2026
7cf979b
feat(collab): kb_add_member / kb_remove_member tools (AI peer drives …
cuttlefisch Jun 22, 2026
83a1b7c
docs(collab): T4 concurrent same-node — bob converged title (alice ve…
cuttlefisch Jun 22, 2026
b2cdf79
docs(collab): ✅ T4 PASS — concurrent same-node convergence (byte-iden…
cuttlefisch Jun 22, 2026
2816b82
docs(collab): T5 — body/title multi-field PASS, NEW B-18 (tags YArray…
cuttlefisch Jun 22, 2026
d041d77
docs(collab): B-18 marked PROVISIONAL — step-3 tags run was muddled, …
cuttlefisch Jun 22, 2026
3eba14a
docs(collab): ✅ B-18 CONFIRMED (clean run) — tags YArray do not CRDT-…
cuttlefisch Jun 22, 2026
97af88d
fix(collab): B-18 — node tags now CRDT-sync (KbNodeDoc::set_tags + up…
cuttlefisch Jun 22, 2026
5736599
docs(collab): T5 verdict — title/body PASS, tags=B-18 (found live, fi…
cuttlefisch Jun 22, 2026
a131e9e
docs(collab): B-18 fix re-verify — alice->bob tags STILL no-op (likel…
cuttlefisch Jun 22, 2026
53538a9
docs(collab): ✅ B-18 FIX VERIFIED (alice->bob) — tags now CRDT-sync, …
cuttlefisch Jun 22, 2026
5fa8b05
docs(collab): ✅ T5 FULL PASS — B-18 fix verified live both directions
cuttlefisch Jun 22, 2026
d3ac2cf
docs(collab): ✅ T6 daemon-restart survival — bob side PASS (alice to …
cuttlefisch Jun 22, 2026
46903d9
docs(collab): ✅ T6 PASS — ungraceful (kill -9) daemon restart, WAL cr…
cuttlefisch Jun 22, 2026
14de807
docs(collab): ✅ T7 roles/policy PASS + 🎉 LIVE MATRIX T1–T7 COMPLETE
cuttlefisch Jun 22, 2026
073b7c6
docs(collab): ✅ T7 PASS — roles/policy enforcement; FULL T1–T7 matrix…
cuttlefisch Jun 22, 2026
69a9400
docs(adr): ADR-023 — secure write-access for membership-gated KBs (ep…
cuttlefisch Jun 22, 2026
35611be
feat(collab): B-19 epoch-fenced-rebase primitives (ADR-023) + unit tests
cuttlefisch Jun 22, 2026
e95bb3c
feat(collab): B-19 epoch fence — daemon enforcement + editor rotation…
cuttlefisch Jun 22, 2026
fac0095
test(collab): T5 tags (B-18) + T6 KB-node restart WAL recovery e2e (A…
cuttlefisch Jun 22, 2026
a452969
docs(collab): Step 8 — B-19 epoch-fence live test plan + bob's next-t…
cuttlefisch Jun 22, 2026
98c6368
docs(collab): Step 8 — adapt to live state (collabtest KB, bob leftov…
cuttlefisch Jun 23, 2026
05dcfce
docs(collab): Step 8/B-19 epoch fence LIVE (steps 2-4 PASS) + UX hicc…
cuttlefisch Jun 23, 2026
38cdb35
docs(collab): Step 8 8d BLOCKED — post-grant re-author also fenced (s…
cuttlefisch Jun 23, 2026
12038f0
docs(collab): UX story — magit-style collab conflict/divergence buffe…
cuttlefisch Jun 23, 2026
d7c61fd
feat(ui): ADR-024 NotificationCenter attention bus — core + routing (…
cuttlefisch Jun 23, 2026
a4e2277
feat(ui): mode-line attention badge for the notification bus (ADR-024…
cuttlefisch Jun 23, 2026
55b7dda
feat(ui): *Notifications* magit-style attention buffer (ADR-024 phase 3)
cuttlefisch Jun 23, 2026
2b9d77a
feat(collab): R1 — kb/node_fetch RPC + async adopt-and-re-author (ADR…
cuttlefisch Jun 23, 2026
fb2db10
feat(collab): R2 fenced-edit notification + R3 MCP notify tools (ADR-…
cuttlefisch Jun 23, 2026
e8474bd
feat(ui): R4 — generalized modal reply + TOFU migration (ADR-024)
cuttlefisch Jun 23, 2026
03d5e5a
feat(collab): R5 — no silent overwrite of divergent local edits on (r…
cuttlefisch Jun 23, 2026
37e1823
docs(collab): Step 9 — ADR-024 notification-bus resolution UX live te…
cuttlefisch Jun 23, 2026
9bbe252
feat(modules): required/core module tier — auto-enable regardless of …
cuttlefisch Jun 23, 2026
8ce8b06
docs(collab): Step 9 readiness — 2 concerns for alice (notifications …
cuttlefisch Jun 23, 2026
6e55e99
docs(collab): Step 9 GO — alice's answers (required-module tier done;…
cuttlefisch Jun 23, 2026
8afb0f5
docs(collab): ✅ Step 9 9a+9b PASS — 8d closed live via ADR-024 Keep-mine
cuttlefisch Jun 23, 2026
897b949
docs(collab): 🛑 Step 9c — B-20: viewer-era edit CASCADES on demote->r…
cuttlefisch Jun 23, 2026
d934d68
fix(collab): B-20 — fence stale-epoch contiguous continuations of a c…
cuttlefisch Jun 23, 2026
1fc2627
docs(collab): B-20 FIXED + 9c re-test plan for bob (no editor rebuild…
cuttlefisch Jun 23, 2026
f37aae7
docs(collab): Step 9c re-test STEP A — bob local state clean (B-20 fi…
cuttlefisch Jun 23, 2026
5511304
docs(collab): 9c re-test GREEN-LIT — bob role=Editor(epoch4) confirme…
cuttlefisch Jun 23, 2026
597c66d
docs(collab): ✅ Step 9c RE-RUN — B-20 fix verified live (continuation…
cuttlefisch Jun 23, 2026
5d8f34f
docs(collab): Step 9c CLOSED (both sides) + proposed 9d (TOFU/R4 moda…
cuttlefisch Jun 23, 2026
bdf059e
docs(collab): 9c CLOSED (alice WAL throughout-proof) + 9d TOFU/R4 ans…
cuttlefisch Jun 23, 2026
4e8a7de
docs(collab): 🛑 9d BLOCKED — B-21: runtime collab_host_key_policy not…
cuttlefisch Jun 23, 2026
8fe5a73
fix(collab): B-21 — runtime collab_host_key_policy now honored by the…
cuttlefisch Jun 23, 2026
e5538ae
docs(collab): B-21 FIXED (8fe5a73e) + updated 9d instructions for bob…
cuttlefisch Jun 23, 2026
cc52c7b
docs(collab): 9d — B-21 fix CONFIRMED (runtime prompt honored) + 🛑 B-…
cuttlefisch Jun 23, 2026
371803c
fix(gui): B-22 — host-key TOFU modal renders + captures input (runtim…
cuttlefisch Jun 23, 2026
5337cb5
docs(collab): B-22 fixed (render+focus, 371803c8) + 9d re-test for bo…
cuttlefisch Jun 23, 2026
f2e3e9d
docs(collab): 9d re-test — B-22b (focus) FIXED, but B-22a (modal rend…
cuttlefisch Jun 23, 2026
ffa90d1
docs(collab): B-22a addendum — stall confined to the pending-prompt w…
cuttlefisch Jun 23, 2026
101ded4
docs(collab): B-22a code trace — TOFU modal DOES reuse MiniDialog; bu…
cuttlefisch Jun 23, 2026
7fe4f93
feat(collab): B-22c — bus Accept/Reject actions on the host-key TOFU …
cuttlefisch Jun 23, 2026
33fbdd3
docs(collab): 9d FUNCTIONALLY PASSES (accept+reject proven) + B-22c d…
cuttlefisch Jun 23, 2026
c7a4bc4
debug(collab): B-22a instrumentation — trace host-key prompt forwarde…
cuttlefisch Jun 23, 2026
fe14986
docs(collab): B-22a experiment + interpretation matrix for bob (instr…
cuttlefisch Jun 23, 2026
c4c8901
docs(collab): ✅ B-22a experiment DECISIVE — frame paints, modal OVERL…
cuttlefisch Jun 23, 2026
b09becd
fix(gui,tui): B-22a — render the mini-dialog modal whenever present (…
cuttlefisch Jun 23, 2026
65c2281
refactor(render): unify overlay priority in one place so GUI/TUI can'…
cuttlefisch Jun 23, 2026
f526aef
docs(collab): B-22a fixed (render-path, both backends) + architectura…
cuttlefisch Jun 23, 2026
3d95153
docs(collab): ✅ B-22a FIXED (modal renders) + 🛑 NEW B-23 (modal doesn…
cuttlefisch Jun 23, 2026
595c64d
docs(collab): B-23 STRUCTURAL fix recommendation — content-adaptive M…
cuttlefisch Jun 23, 2026
c976c1f
fix(gui,tui): B-23 — content-adaptive MiniDialog sizing (shared), ful…
cuttlefisch Jun 23, 2026
a66449f
docs(collab): B-23 FIXED (shared content-adaptive dialog sizing, c976…
cuttlefisch Jun 23, 2026
a903927
docs(collab): ✅✅ B-23 FIXED + 9d (TOFU/R4) FULL PASS — B-22/B-23 moda…
cuttlefisch Jun 23, 2026
0f3750e
chore(collab): retire B-22a instrumentation → clean collab-target hos…
cuttlefisch Jun 23, 2026
9d7db62
test(collab): automate manual fence/config/surface tests + fix non-UX…
cuttlefisch Jun 23, 2026
2c5c269
feat(collab): connect-config liveness guards + build-SHA observabilit…
cuttlefisch Jun 23, 2026
0589518
test(collab): bridge adopt round-trip + real-daemon concurrent conver…
cuttlefisch Jun 23, 2026
f72f54a
feat(collab): relearn KB authorization epoch on live kbc broadcast (W…
cuttlefisch Jun 23, 2026
f036f20
test(collab): lock primary KB store XDG-first contract (Wave 4: B5 / …
cuttlefisch Jun 23, 2026
b72e1eb
test(collab): security-negative coverage — MITM no-overwrite + unauth…
cuttlefisch Jun 23, 2026
4c580f1
docs(collab): automated-coverage map + residual-manual flagging (Wave…
cuttlefisch Jun 23, 2026
b94784b
feat(collab): KB-sharing introspection snapshot — buffer/MCP/Scheme s…
cuttlefisch Jun 23, 2026
04dedc7
feat(collab): magit-style *KB Sharing* management buffer (P1)
cuttlefisch Jun 23, 2026
fc28d61
feat(collab): Scheme/MCP/command parity + fingerprint-free member pic…
cuttlefisch Jun 23, 2026
7a16eb6
feat(collab): pending-request notifications + configurable fence reso…
cuttlefisch Jun 23, 2026
ad8c45e
docs(collab): KB-sharing management UX, scripting/AI guide, recovery …
cuttlefisch Jun 23, 2026
761af26
fix(collab): non-blocking background mDNS discovery (P3)
cuttlefisch Jun 23, 2026
01b1a6d
test(collab): daemon membership/policy gate audit + KB-sharing covera…
cuttlefisch Jun 23, 2026
91be0a9
chore(deps): bump safe Rust dependencies (supersedes #68's non-crypto…
cuttlefisch Jun 24, 2026
f473407
docs(claude): refresh status line — KB sharing user-ready, v0.14.0 pe…
cuttlefisch Jun 24, 2026
42916b5
fix(collab): audit fix-now — KB-sharing span computer + daemon harden…
cuttlefisch Jun 24, 2026
3342e0c
docs: sweep static docs for outdated config-topology + stale facts
cuttlefisch Jun 24, 2026
7b82b73
docs(manual): sweep kb_seed manual for config-topology + stale facts …
cuttlefisch Jun 24, 2026
8ef9f46
docs(ai): bring AI prompts + agent guidance up to date for v0.14.0 co…
cuttlefisch Jun 24, 2026
507ad4c
docs(roadmap): cross-ref deferred work to issues, reorganize, correct…
cuttlefisch Jun 24, 2026
e4a7a9e
chore(skills): share the comprehensive /mae-audit command with all co…
cuttlefisch Jun 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
327 changes: 297 additions & 30 deletions .claude/commands/mae-audit.md

Large diffs are not rendered by default.

28 changes: 26 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,10 @@ jobs:
run: cd daemon && cargo test -- --test-threads=1 --nocapture
timeout-minutes: 10
env:
# MAE_TCP_E2E=1 un-skips network_e2e.rs (real-TCP daemon-spawn suite —
# the only e2e for sync/resync). Each test spawns an XDG-isolated daemon,
# so it composes with the in-process collab_e2e tests in this same run.
MAE_TCP_E2E: "1"
RUST_LOG: "mae_daemon=debug,mae_sync=debug,warn"
- name: TCP E2E tests (PSK auth + KB protocol)
run: |
Expand Down Expand Up @@ -187,12 +191,12 @@ jobs:
e2e:
name: e2e / scheme + packages
runs-on: ubuntu-latest
needs: [check]
needs: [check, daemon]
steps:
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@stable
- name: Install GUI dependencies
run: sudo apt-get update && sudo apt-get install -y clang libfontconfig1-dev libfreetype6-dev
run: sudo apt-get update && sudo apt-get install -y clang libfontconfig1-dev libfreetype6-dev iproute2
- name: Download mae binary
uses: actions/download-artifact@v8
with:
Expand All @@ -203,6 +207,16 @@ jobs:
mkdir -p target/release
cp /tmp/mae-dl/mae target/release/mae
chmod +x target/release/mae
- name: Download daemon binary
uses: actions/download-artifact@v8
with:
name: mae-daemon-binary
path: /tmp/daemon-dl
- name: Install daemon binary
run: |
mkdir -p daemon/target/release
cp /tmp/daemon-dl/mae-daemon daemon/target/release/mae-daemon
chmod +x daemon/target/release/mae-daemon
- name: Validate init.scm
run: ./target/release/mae --check-config
- name: Editor tests
Expand All @@ -211,6 +225,16 @@ jobs:
run: ./target/release/mae --test tests/crdt/
- name: Collab local tests
run: ./target/release/mae --test tests/collab-local/
- name: Trusted-peer mTLS e2e
env:
MAE_BIN: ${{ github.workspace }}/target/release/mae
MAE_DAEMON_BIN: ${{ github.workspace }}/daemon/target/release/mae-daemon
run: scripts/collab-mtls-e2e.sh
- name: Per-KB membership e2e
env:
MAE_BIN: ${{ github.workspace }}/target/release/mae
MAE_DAEMON_BIN: ${{ github.workspace }}/daemon/target/release/mae-daemon
run: scripts/collab-membership-e2e.sh
- name: Package install
run: |
mkdir -p ~/.config/mae
Expand Down
24 changes: 22 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@ These are derived from analysis of 35 years of Emacs git history. They are non-n

12. **Local-first by design.** MAE satisfies 5 of 7 Ink & Switch local-first ideals today (no spinners, multi-device, network optional, collaboration without conflict, user ownership). P2P collaboration and E2E encryption will complete the remaining two. The daemon is an optimization for persistence and discovery, not a requirement for collaboration.

13. **Cross-platform parity (macOS + Linux) is a development constraint, not an afterthought.** MAE is developed and run across macOS and Linux *simultaneously* (often on the same branch, same day). Every script, path-resolution, and tool invocation MUST behave identically on both — or fail loudly with a portable fallback, never silently no-op on one platform. A "fix" that only works on one developer's machine is not a fix; it manufactures the stop-and-go cross-machine debugging this principle exists to prevent. Concretely:
- **Directory resolution is XDG-first on ALL platforms.** Honor `XDG_CONFIG_HOME` / `XDG_DATA_HOME` when set, then fall back to the platform default. The bare `dirs` / `directories` crate follows Apple conventions on macOS (`~/Library/Application Support`) and *ignores* XDG — so calling `dirs::config_dir()` / `dirs::data_dir()` directly breaks env-var test isolation and contradicts the documented `~/.config/mae` + `~/.local/share/mae` contract. Use the XDG-first helpers (`mae-mcp::identity::default_collab_dir`, `mae-mcp::keystore`, editor `pkg/paths.rs::{dirs_candidate,data_dir_candidate}`), never raw `dirs::*` for primary config/data paths.
- **Shell scripts use portable tooling.** No Linux-only commands without a fallback: `ss` → `lsof` → `netstat`; `timeout` → `gtimeout` → optional/omitted; avoid GNU-only behavior (`sed -i` arg differences, `readlink -f`, `mktemp` templates, `date` flags). Prefer POSIX; gate platform branches on capability (`command -v`), not `uname`. Keep the Linux path first so CI/driver behavior is unchanged.
- **CI must exercise both OSes** for anything touching paths, sockets, or scripts — the collab e2e (`scripts/collab-*-e2e.sh`) especially, since that's where this bites.
This is the cross-machine corollary to principles #8 (shared computation) and #9 (downstream impact): verify the change on *both* platforms, not just the one in front of you.

### Rendering Pipeline
The GUI renderer uses a three-phase pipeline: `compute_layout()` produces
a `FrameLayout`, `render_buffer_content()` draws text, and `render_cursor()`
Expand All @@ -149,7 +155,12 @@ All phases below are COMPLETE. See ROADMAP.md for granular milestone details.
| 7. Documentation | Help system (862 KB nodes), tutorials, `:describe-configuration` | — |
| 8. GUI Backend | winit + Skia, inline images, multi-cursor, magit-style git | 2,629 |

**Current:** 5,863+ tests. **Next:** Org export & babel, PDF preview, module system.
**Current:** v0.14.0 pending (PR #69) — collaborative **KB sharing** is now user-ready: trusted-peer mTLS
auth, per-KB membership/roles/policy (Owner/Editor/Viewer, ADR-018), epoch-fenced write access (ADR-023),
the ADR-024 attention bus, a magit-style `*KB Sharing*` management buffer (`SPC C K m`), and full
introspection + lifecycle parity across the human (buffer + Scheme `(kb-…)` primitives) and the AI peer
(`kb_sharing_status` + lifecycle MCP tools). See `docs/COLLABORATION.md`.
**Next:** crypto-deps bump (hmac/sha2/rand alignment), hosted-edit (ADR-020 D1), ADR-021 audit log.

## Key Design Decisions Already Made

Expand Down Expand Up @@ -258,7 +269,7 @@ make test-scheme-all # All local tests

## Developing MAE Inside MAE (MCP Tools)

All 130+ MAE editor tools are exposed via MCP with full parity — the same tools the built-in AI agent uses. When developing MAE with Claude Code connected via the MCP shim (`mae-mcp-shim`), prefer these tools over raw file reads for structured editor operations.
All 135+ MAE editor tools are exposed via MCP with full parity — the same tools the built-in AI agent uses. When developing MAE with Claude Code connected via the MCP shim (`mae-mcp-shim`), prefer these tools over raw file reads for structured editor operations.

### Connection

Expand Down Expand Up @@ -314,9 +325,18 @@ Node ID namespaces: `cmd:*` (commands), `concept:*` (architecture), `lesson:*` (
| `collab_doctor` | Run connectivity diagnostics |
| `collab_list` | List shared documents on the server |
| `collab_discover` | Discover MAE peers via mDNS |
| `kb_sharing_status` | Introspect KBs + members/roles/policy/pending/my-role (call before managing) |
| `kb_share` | Share a KB for collaborative editing |
| `kb_join` | Join a shared KB from the server |
| `kb_leave` | Leave a shared KB (local copy preserved) |
| `kb_add_member` / `kb_remove_member` | Add/remove a member by fingerprint (owner-only) |
| `kb_approve` | Approve a pending join request as a role (owner-only) |
| `kb_set_policy` | Set join policy: restrictive\|invite\|permissive (owner-only) |

KB-sharing lifecycle is also first-class in Scheme: `(kb-share)`, `(kb-join)`,
`(kb-leave)`, `(kb-add-member)`, `(kb-remove-member)`, `(kb-approve)`,
`(kb-set-policy)`, `(kb-sharing-status)`. The `*KB Sharing*` buffer (`SPC C K m`),
the Scheme primitive, and the MCP tool all read the same introspection snapshot.

### Buffer / Editor

Expand Down
7 changes: 4 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ The Dockerfile mirrors GitHub CI exactly. If `make docker-ci` passes, the PR wil

## Architecture Overview

MAE is organized as a Rust workspace with 20 crates and 19 Scheme modules.
MAE is organized as a Rust workspace with 20 crates and 25 Scheme modules.

### Crate Map

Expand All @@ -98,7 +98,7 @@ MAE is organized as a Rust workspace with 20 crates and 19 Scheme modules.
| `mae-lsp` | LSP client — connection, navigation, diagnostics, completion |
| `mae-dap` | DAP client — breakpoints, stepping, watches |
| `mae-shell` | Terminal emulator (alacritty_terminal), PTY management |
| `mae-kb` | Knowledge base — graph store, org parser, FTS5 |
| `mae-kb` | Knowledge base — CozoDB graph store, typed relationships, org parser, federation |
| `mae-mcp` | MCP bridge — Unix socket, JSON-RPC, stdio shim |
| `mae-babel` | Literate programming — code block execution, tangling |
| `mae-export` | Org export (HTML, Markdown) |
Expand All @@ -107,11 +107,12 @@ MAE is organized as a Rust workspace with 20 crates and 19 Scheme modules.
| `mae-make` | Build system integration |
| `mae-lookup` | Documentation lookup |
| `mae-spell` | Spell checking |
| `mae-canvas` | Visual buffer (diagrams, drawings) |
| `mae-sync` | CRDT sync (yrs/YATA), ropey bridge, collaborative state |
| `mae-daemon` | Background daemon — KB persistence, collab sync, WAL persistence |
| `mae` | Binary crate — CLI entry point, config loading, event loops |

The 19 Scheme modules in `modules/` provide keybinding overlays and optional features (agenda, dashboard, git-status, org, tables, surround, multicursor, etc.). See [docs/CODE_MAP.md](docs/CODE_MAP.md) for the dependency graph and module sizes.
The 25 Scheme modules in `modules/` provide keybinding overlays and optional features (agenda, dashboard, git-status, org, tables, surround, multicursor, etc.). See [docs/CODE_MAP.md](docs/CODE_MAP.md) for the dependency graph and module sizes.

Key files to know:
- `crates/core/src/editor/mod.rs` — editor state struct
Expand Down
Loading