memhouse 0.18.10 → 0.18.12
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/AGENTS.md +10 -11
- package/CHANGELOG.md +153 -13
- package/README.md +2 -2
- package/SECURITY.md +4 -2
- package/bin/memhouse.js +105 -49
- package/docs/guides/admin-password.md +1 -1
- package/docs/guides/configuration.md +2 -2
- package/docs/guides/install.md +1 -1
- package/docs/guides/invite.md +1 -1
- package/docs/guides/storage.md +10 -7
- package/docs/guides/uninstall.md +4 -2
- package/docs/releases/README.md +2 -0
- package/docs/releases/v0.18.10.md +7 -7
- package/docs/releases/v0.18.11.md +187 -0
- package/docs/releases/v0.18.12.md +59 -0
- package/docs/tutorials/01-first-house.md +2 -2
- package/editors/claude.js +70 -12
- package/editors/cursor-agent.js +1 -1
- package/examples/01-local-one-machine/README.md +4 -4
- package/examples/02-existing-clickhouse/README.md +7 -7
- package/memhouse/DESIGN.md +9 -2
- package/memhouse/RESUME-AND-UPDATE.md +1 -1
- package/memhouse/capabilities.js +1 -1
- package/memhouse/convert.js +3 -3
- package/memhouse/delivery/PROMPT.md +1 -1
- package/memhouse/delivery/plugin/.claude-plugin/plugin.json +1 -1
- package/memhouse/delivery/plugin/reference/HOUSE.md +21 -9
- package/memhouse/delivery/plugin/skills/access/SKILL.md +2 -2
- package/memhouse/delivery/plugin/skills/admin/SKILL.md +3 -3
- package/memhouse/delivery/plugin/skills/house/SKILL.md +2 -2
- package/memhouse/delivery/plugin/skills/recall/SKILL.md +36 -16
- package/memhouse/delivery/plugin/skills/sql/SKILL.md +2 -2
- package/memhouse/flags.js +28 -1
- package/memhouse/host.js +11 -6
- package/memhouse/house/HOUSE.md +6 -6
- package/memhouse/house/house.js +31 -5
- package/memhouse/invite-target.js +37 -0
- package/memhouse/self-update.js +1 -1
- package/memhouse/server/queries.js +11 -6
- package/memhouse/shipper/ship.js +148 -31
- package/package.json +3 -3
- package/public/THIRD_PARTY_NOTICES.txt +2114 -0
- package/ui/README.md +16 -0
- package/ui/vite.config.js +4 -1
package/AGENTS.md
CHANGED
|
@@ -3,18 +3,18 @@
|
|
|
3
3
|
Conventions for any coding agent in this repository — Claude Code, Codex, Gemini CLI,
|
|
4
4
|
OpenCode, whatever comes next. `CLAUDE.md` points here; this file is the canonical copy.
|
|
5
5
|
|
|
6
|
-
Constellation-wide rules (worktrees, branch naming,
|
|
7
|
-
|
|
6
|
+
Constellation-wide rules (worktrees, branch naming, which remotes are frozen) live in the
|
|
7
|
+
parent directory's [`CLAUDE.md`](../CLAUDE.md) and are not repeated here.
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
## Release lines — read before tagging, publishing, or merging a release
|
|
11
11
|
|
|
12
|
-
memhouse shipped two lines while
|
|
13
|
-
is one line; the rules below are kept because a second line can happen again.
|
|
12
|
+
memhouse shipped two lines while the first production house ran the pre-0.18 layout. Since
|
|
13
|
+
its conversion there is one line; the rules below are kept because a second line can happen again.
|
|
14
14
|
|
|
15
15
|
| line | git branch | npm dist-tag | versions | who installs it |
|
|
16
16
|
|---|---|---|---|---|
|
|
17
|
-
| the
|
|
17
|
+
| the 0.18 line | `release/0.18` (cut at v0.18.11; `main` stays the default branch) | `latest`, and `team` as an alias | 0.18.x | everyone — `npm install -g memhouse` (the production house was converted to the one layout with `memhouse convert`; `release/0.17` is retired) |
|
|
18
18
|
|
|
19
19
|
Rules, each learned once:
|
|
20
20
|
|
|
@@ -28,18 +28,17 @@ Rules, each learned once:
|
|
|
28
28
|
its own CHANGELOG entry, never assumed. The one-layout (0.18) renamed every room to
|
|
29
29
|
`<member>_*`; anything touching room names ports with care (`house/HOUSE.md`).
|
|
30
30
|
- **`memhouse update` follows the channel a machine was installed from** (`MEMHOUSE_CHANNEL`),
|
|
31
|
-
so a
|
|
31
|
+
so a machine on the old line never receives a team build by accident, and vice versa.
|
|
32
32
|
- **`master` is retired.** It was the pre-0.18 default; `main` is the default now. Do not
|
|
33
33
|
branch from it, tag on it, or push to it.
|
|
34
34
|
- **A publish is live when `npm view` says so.** `npm publish` prints `+ memhouse@x.y.z`;
|
|
35
35
|
confirm with `npm view memhouse dist-tags --prefer-online`. A version that seems missing
|
|
36
36
|
right after a publish is registry lag or a stale local npm cache (`npm cache verify`),
|
|
37
37
|
not a "staged" publish. That misdiagnosis cost three releases.
|
|
38
|
-
- **Which token.** The
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
session on the same repo and agree who cuts it; the release record lives in `CHANGELOG.md`
|
|
38
|
+
- **Which token.** The publish token is a secret reference, resolved at the moment of use
|
|
39
|
+
and lent to the one `npm publish` (a temporary userconfig); never print it.
|
|
40
|
+
- **One owner per line at a time.** Before releasing, check for another
|
|
41
|
+
session working on the same repo and agree who cuts it; the release record lives in `CHANGELOG.md`
|
|
43
42
|
on the line's branch and in `drills/`.
|
|
44
43
|
|
|
45
44
|
## What memhouse is
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,146 @@ Versions before 0.8.0 were beta-only. Beta installs of 0.7.x and earlier should
|
|
|
4
4
|
uninstall and reinstall — the 0.8.0 layout is new, and an in-place `update` +
|
|
5
5
|
migration path is planned work, not a promise the old versions can cash.
|
|
6
6
|
|
|
7
|
+
## 0.18.12 — 2026-10-29
|
|
8
|
+
|
|
9
|
+
Release notes: [`docs/releases/v0.18.12.md`](docs/releases/v0.18.12.md).
|
|
10
|
+
|
|
11
|
+
- **Skills:** each `/mem` skill's `allowed-tools` is restricted to the read-only memhouse
|
|
12
|
+
commands it teaches, instead of `Bash` as a whole. Any other command goes through the
|
|
13
|
+
normal permission prompt. `memhouse update` refreshes installed skills; then
|
|
14
|
+
`/reload-plugins`.
|
|
15
|
+
- `misc/skill-allowlist-test.js` and `misc/env-guard-test.js` join `npm test`. Test tooling
|
|
16
|
+
reads its deploy targets from an untracked `deploy/targets.env`, and fixtures use stand-ins.
|
|
17
|
+
- The 0.18 line is cut from `release/0.18`.
|
|
18
|
+
- No drill was run for this patch release.
|
|
19
|
+
|
|
20
|
+
## 0.18.11 — 2026-10-10
|
|
21
|
+
|
|
22
|
+
Release notes: [`docs/releases/v0.18.11.md`](docs/releases/v0.18.11.md). Read its upgrade
|
|
23
|
+
section first: the first pass after the upgrade re-sends every stored session with
|
|
24
|
+
subagents once.
|
|
25
|
+
|
|
26
|
+
- Sessions with subagents ship only their new rows.
|
|
27
|
+
- **Security:** `invite` no longer sends a stored credential to `--url` (G4).
|
|
28
|
+
- The 0.18.10 pre-tag list is finished, and the gentar kit is v0.9.3.
|
|
29
|
+
- The dashboard ships the license notices of every package it bundles (`public/THIRD_PARTY_NOTICES.txt`).
|
|
30
|
+
- **No drill was run for this release; waived (2026-10-08) under the maintainer's 0.18.10 ruling. The drill runs before 0.19.0.**
|
|
31
|
+
|
|
32
|
+
- **The dashboard now ships the license notices of what it bundles.** The built dashboard
|
|
33
|
+
(`public/`) includes React, chart.js, lucide-react (ISC), react-markdown, the remark and
|
|
34
|
+
micromark family, tailwindcss and others: every bundled package. Their licenses require the
|
|
35
|
+
notice to travel with every copy, and Vite's minifier strips the license comments, so
|
|
36
|
+
every published package so far carried those copies without one.
|
|
37
|
+
- `ui/third-party-notices.js`, a Vite plugin with no dependencies of its own, now writes
|
|
38
|
+
`public/THIRD_PARTY_NOTICES.txt` at build time from the bundle's module graph. It
|
|
39
|
+
lists each package with its version, declared license, and the license text it ships.
|
|
40
|
+
- A bundled package with no license text fails the build. The only exception is an
|
|
41
|
+
explicit, reasoned list of packages that truly ship none; it is empty today. Each
|
|
42
|
+
`name@version` is listed once, so a second bundled version keeps its own text.
|
|
43
|
+
- CI's tarball audit also fails if the file is missing or does not list the main
|
|
44
|
+
packages.
|
|
45
|
+
- **A session with subagents ships only its new rows, like any other.** 0.18.8's tail-only
|
|
46
|
+
shipping did not reach the sessions that grow the most: folded subagent rows were numbered
|
|
47
|
+
by position after the parent's turns, so one new parent turn moved every one of them, the
|
|
48
|
+
session forked to a new epoch and re-sent itself whole on every pass. Measured on a real
|
|
49
|
+
house: 1.07 M message rows written in 24 h against 10.2 M in total, most of them full
|
|
50
|
+
copies of five sessions, one 6,120-line session stored 60 times in a day. A subagent's
|
|
51
|
+
rows now sit in a block of their own — `seq = 1,000,000,000 + slot × 100,000 + turn`,
|
|
52
|
+
`tool_calls.idx` the same — where `slot` is the subagent's rank by start time, so neither
|
|
53
|
+
the parent growing, a running subagent growing, nor a new subagent appearing moves an
|
|
54
|
+
existing row. The session's own turns keep `0, 1, 2, …`, so a session without subagents
|
|
55
|
+
is numbered exactly as before. Readers that `ORDER BY seq` see the parent first, then each
|
|
56
|
+
subagent contiguous, in the order they started (they were in agent-id order, which is
|
|
57
|
+
random). `seq` is sparse now: count with `count()`, never `max(seq) + 1`.
|
|
58
|
+
**Upgrade cost, once:** every stored session with subagents forks exactly one time, the
|
|
59
|
+
first time it is re-shipped after the upgrade (it grows, or `ship --full`), and is
|
|
60
|
+
tail-only from then on. The superseded epoch is kept, as every epoch is. Sessions without
|
|
61
|
+
subagents are not affected. Two things widen that first pass:
|
|
62
|
+
- A session whose subagent files are newer than the house's record of it is read again on
|
|
63
|
+
the first pass even if it did not grow. `lastUpdatedAt` now counts subagent writes; see
|
|
64
|
+
the next entry. So the first pass after the upgrade forks and re-sends every such
|
|
65
|
+
session whole, once.
|
|
66
|
+
- Two installs that ship the SAME session files (two instances on one machine, or a
|
|
67
|
+
synced directory) must be upgraded together. A 0.18.10 and a 0.18.11 number the same
|
|
68
|
+
session differently, and each would fork it back on every pass.
|
|
69
|
+
|
|
70
|
+
**The first pass is a one-time bulk write into the house.** Schedule it, and do not
|
|
71
|
+
run it on a house whose storage is degraded. A parse that does not fit the blocks (a parent past 1e9
|
|
72
|
+
turns, a subagent past 100,000, more than 32,949 subagents) falls back to positional
|
|
73
|
+
numbering, which is correct and merely re-ships whole.
|
|
74
|
+
- **A subagent that runs on after its parent goes quiet is shipped on the next pass.** The
|
|
75
|
+
incremental skip compared only the parent file's mtime (or the index's `modified`), and a
|
|
76
|
+
subagent writes only its own file, so a background agent's turns waited for the parent's
|
|
77
|
+
next write, or were never shipped. A session's `lastUpdatedAt` is now the newest mtime of
|
|
78
|
+
the parent and every subagent transcript, Workflow-run agents included — stat calls only,
|
|
79
|
+
and only for sessions that have a subagent directory. After upgrading, a session whose
|
|
80
|
+
subagents are newer than its parent is re-read once on the first pass, and ships the turns
|
|
81
|
+
it was missing.
|
|
82
|
+
- **`memhouse update --no-install` restarts a tarball or nightly install.** It is the command
|
|
83
|
+
every nightly prints for itself, and on exactly those builds it stopped at "no automatic
|
|
84
|
+
update for this install" (a tarball is on no registry tag), exited 1, and left the old
|
|
85
|
+
shipper running the old code in memory. `--no-install` no longer needs a channel: the
|
|
86
|
+
files are already in place, and the restart, migrations and schema check run. Found while
|
|
87
|
+
upgrading testbed from 0.18.9 to a nightly of this release.
|
|
88
|
+
|
|
89
|
+
- **A subagent caught before its first line is written holds its session for one pass.**
|
|
90
|
+
A subagent with no timestamped line ranked last. When its first line then landed with an
|
|
91
|
+
earlier time than a sibling's, it moved ahead of it, renumbered every sibling after it,
|
|
92
|
+
and the session forked and re-shipped whole. Now the shipper waits a pass (`held for one
|
|
93
|
+
pass` in the log) and ranks it by its real start time. A file that never gets a
|
|
94
|
+
timestamped line stops holding the session after 10 minutes. (SUB-1)
|
|
95
|
+
- **An option that takes no value no longer swallows the next word.**
|
|
96
|
+
- `memhouse update --no-install yes` set no-install to "yes", and ran the npm install it
|
|
97
|
+
was told to skip.
|
|
98
|
+
- `memhouse share --revoke bob` revoked nobody.
|
|
99
|
+
- Switches are now true when present, and the next word stays a positional.
|
|
100
|
+
(A6, review G34)
|
|
101
|
+
- **`update --channel <name>` pins only a channel the registry has.** It compared the flag
|
|
102
|
+
with itself and never wrote the pin at all. A name that is not a tag is now refused, and
|
|
103
|
+
nothing is pinned. When the registry does not answer, the channel is not pinned. (A5)
|
|
104
|
+
- **`update --no-install` no longer prints "files updated"** for files it did not touch.
|
|
105
|
+
It also now runs on a project-dependency install too; it installs nothing, so where the
|
|
106
|
+
files came from does not matter. (A6)
|
|
107
|
+
- **The epoch log line counts rows, not the highest seq.** On a session with subagents it
|
|
108
|
+
read "1000000123 messages stored". (A4)
|
|
109
|
+
- **Docs: the host id is derived from the machine's own id, not random,** since 0.18.6.
|
|
110
|
+
The guides, `HOUSE.md`, `host.js` and `uninstall --full-removal` said a reinstall mints a
|
|
111
|
+
new identity. It derives the same one again. (A8)
|
|
112
|
+
- **`invite` never sends a credential this install keeps to `--url` (G4, security).** `--url`
|
|
113
|
+
is the invitee's address, typed on a command line. A typo, a tunnel or somebody else's
|
|
114
|
+
server got the member's own credential (the reachability probe and the grants read), or
|
|
115
|
+
a kept admin's (provisioning). `resolveConfig()` lets the flag outrank the env file, so
|
|
116
|
+
the "configured" URL the code used WAS `--url`.
|
|
117
|
+
- A stored credential now goes only to the house it was saved for: the member's, a
|
|
118
|
+
`--keep-admin` admin's, or a password resolved from the env file.
|
|
119
|
+
- `--url` gets an unauthenticated `/ping` to confirm the invitee can reach it.
|
|
120
|
+
- An admin given for this command (`--admin-user` or an exported
|
|
121
|
+
`MEMHOUSE_ADMIN_USER`, with its password from a file, stdin, the environment or a
|
|
122
|
+
prompt) still provisions at `--url`.
|
|
123
|
+
- `misc/invite-matrix.sh` points `--url` at a spy server and asserts it receives
|
|
124
|
+
nothing but a ping.
|
|
125
|
+
- **The dashboard no longer goes empty on a quiet house (G11).** The stats tables carry a
|
|
126
|
+
one-day TTL and were refreshed only by a pass that shipped something. So a house whose
|
|
127
|
+
machines went quiet for a day lost every generation, and the dashboard, which had chosen
|
|
128
|
+
its tables once per process, kept reading the emptied one.
|
|
129
|
+
- The shipper now also refreshes when the newest generation is over an hour old.
|
|
130
|
+
- The dashboard re-resolves its rooms every five minutes, so it falls back to the inline
|
|
131
|
+
rollup when a stats table is empty.
|
|
132
|
+
- **The skills find their reference again (G26).** All five said
|
|
133
|
+
`Read ../reference/HOUSE.md`, a path that does not exist in the installed plugin; the
|
|
134
|
+
file is at `../../reference/HOUSE.md`. A unit test now resolves every skill's reference
|
|
135
|
+
path from its own directory.
|
|
136
|
+
- **`/mem:recall` queries that run (A2).**
|
|
137
|
+
- "Recent sessions" ordered by `started_at`, which the room does not have; it now uses
|
|
138
|
+
`created_at` / `last_updated_at`, read `FINAL`.
|
|
139
|
+
- The search now returns `hit_seq`, which the transcript read needs.
|
|
140
|
+
- The read takes its window by position (three turns before, twelve after) instead of
|
|
141
|
+
by `seq` arithmetic, which a subagent's block numbering defeats.
|
|
142
|
+
- **`HOUSE.md`'s subagent queries keep to the current parse (A3).** They had no epoch
|
|
143
|
+
filter, so a re-parsed session doubled each subagent's turns.
|
|
144
|
+
- `misc/skill-recipe.sh` now runs these queries verbatim, extracted from the docs, against
|
|
145
|
+
fixture rows with a superseded parse and a subagent block.
|
|
146
|
+
|
|
7
147
|
## 0.18.10 — 2026-10-08
|
|
8
148
|
|
|
9
149
|
Release notes: [`docs/releases/v0.18.10.md`](docs/releases/v0.18.10.md), covering what
|
|
@@ -11,7 +151,7 @@ changed, the upgrade steps, and the status of the 0.18.10 pre-tag list.
|
|
|
11
151
|
|
|
12
152
|
- **A security release; everyone on 0.18.x should upgrade.** It covers G23 (#20), the admin
|
|
13
153
|
password off argv (#14) and the scoped share boundary (#13).
|
|
14
|
-
- **No drill was run for this release; waived by the
|
|
154
|
+
- **No drill was run for this release; waived by the maintainer (2026-10-08). The drill runs before 0.19.0.**
|
|
15
155
|
- **Moved to 0.18.11:** the subagent re-ship fix and the gentar kit v0.9.3 bump.
|
|
16
156
|
- **Docs:** the repository now meets the documentation standard (#17): a short README,
|
|
17
157
|
`docs/` tutorials and guides, `examples/`, and the `AGENTS.md` install section.
|
|
@@ -38,7 +178,7 @@ changed, the upgrade steps, and the status of the 0.18.10 pre-tag list.
|
|
|
38
178
|
stdin), from `MEMHOUSE_ADMIN_PASSWORD` (so `with-secret` lends it to one command), from a
|
|
39
179
|
credential this install already keeps for the same admin, or from a prompt. Before, giving
|
|
40
180
|
`--admin-user` as a flag switched every other source off, so the only scriptable admin
|
|
41
|
-
path put the password on argv, where `ps` and shell history keep it. Found
|
|
181
|
+
path put the password on argv, where `ps` and shell history keep it. Found in a sandbox
|
|
42
182
|
rehearsal. **Deprecation:** `--admin-password <value>` still works in this release, with a
|
|
43
183
|
warning, and is **removed in 0.19.0**, the next minor release after this one (deprecated
|
|
44
184
|
2026-10-08). Move scripts to `MEMHOUSE_ADMIN_PASSWORD` or `--admin-password-file`.
|
|
@@ -138,14 +278,14 @@ The upgrade path itself, and a machine that stays the same machine.
|
|
|
138
278
|
|
|
139
279
|
## 0.18.5 — 2026-09-18
|
|
140
280
|
|
|
141
|
-
The first release on **one line**: published to `latest` and `team` alike.
|
|
281
|
+
The first release on **one line**: published to `latest` and `team` alike. The first production house was converted to the one layout the same evening with `memhouse convert` (six members, every row count identical before and after, shares carried).
|
|
142
282
|
|
|
143
|
-
- **One release line.** With
|
|
283
|
+
- **One release line.** With the production house converted to the one layout there is no 0.17 line to keep:
|
|
144
284
|
`latest` now points at the same 0.18.x build as `team` (kept as an alias), the publish
|
|
145
285
|
guard and `AGENTS.md` say so, and `release/0.17` is retired.
|
|
146
286
|
|
|
147
287
|
- **`memhouse convert` — an operator moves a pre-one-layout house to the one layout.**
|
|
148
|
-
Before 0.18 each member owned a database (`
|
|
288
|
+
Before 0.18 each member owned a database (`sam.messages`, `ALL ON sam.*`). `convert`
|
|
149
289
|
finds every such member, renames their five rooms into `mem.<name>_*` in one atomic
|
|
150
290
|
statement (nothing copied), swaps the database-wide grant for the one wildcard, carries
|
|
151
291
|
whole-house shares and row policies to the new names, drops the 0.17.1 refreshable
|
|
@@ -164,7 +304,7 @@ On the `team` channel. Found by the operator's own second machine on its first `
|
|
|
164
304
|
|
|
165
305
|
- **`memhouse update` never crosses release lines on its own.** An unpinned 0.18.2 whose
|
|
166
306
|
`team` tag had moved to 0.18.3 matched no tag, and the picker fell back to `latest` —
|
|
167
|
-
|
|
307
|
+
the 0.17 line's 0.17.1, a different house layout. A real member was downgraded on her first update.
|
|
168
308
|
The picker now follows the tag on the install's own major.minor line, and when no tag is
|
|
169
309
|
on that line, or the registry does not answer, it stops and says so; `--channel` is the
|
|
170
310
|
only way across.
|
|
@@ -295,7 +435,7 @@ possible.
|
|
|
295
435
|
every adapter is watching and the variable that changes it. A name or directory that
|
|
296
436
|
does not exist is refused against that adapter, never shipped from the default instead.
|
|
297
437
|
|
|
298
|
-
- **One layout.** Every member's rooms are named for them — `mem.
|
|
438
|
+
- **One layout.** Every member's rooms are named for them — `mem.sam_messages`,
|
|
299
439
|
`mem.alice_messages` — and one grant covers them: `GRANT … ON mem.<name>_* TO <name>
|
|
300
440
|
WITH GRANT OPTION`. A wildcard on the member's own name, verified on 25.11 and 26.7: it
|
|
301
441
|
lets the member create and rebuild their own rooms and share them, and reaches nothing
|
|
@@ -331,7 +471,7 @@ possible.
|
|
|
331
471
|
(25.11, the default local tag).
|
|
332
472
|
|
|
333
473
|
- **Bringing a housemate into a house you already own now works, and moves nothing.** A
|
|
334
|
-
member alone in their own database holds `ALL ON
|
|
474
|
+
member alone in their own database holds `ALL ON sam.*`. That grant is **dynamic** —
|
|
335
475
|
it covers rooms created later — so a housemate's rooms would be readable *and
|
|
336
476
|
droppable* by the owner the moment they existed (both measured). `invite` used to
|
|
337
477
|
refuse and point at a migration command that did not exist.
|
|
@@ -447,7 +587,7 @@ possible.
|
|
|
447
587
|
fourteen places, which names nothing in a house holding `alice_messages`. Rather than
|
|
448
588
|
teach fourteen query sites about prefixes, the `q()` helper in `reference/HOUSE.md` —
|
|
449
589
|
the single connection every skill routes through — now rewrites room names after
|
|
450
|
-
`FROM`/`JOIN`. A needle like `LIKE '%messages%'` is untouched, and `FROM
|
|
590
|
+
`FROM`/`JOIN`. A needle like `LIKE '%messages%'` is untouched, and `FROM bob_messages`
|
|
451
591
|
is left alone so a shared room still reads.
|
|
452
592
|
|
|
453
593
|
Written with `[[:space:]]` classes, not `\b`: **BSD `sed` does not support `\b`**, and
|
|
@@ -696,7 +836,7 @@ possible.
|
|
|
696
836
|
|
|
697
837
|
- **The skills no longer fall back to a hardcoded `mem` house.** A house is a database
|
|
698
838
|
named for its owner — `resolveConfig` defaults `MEMHOUSE_DB` to the connection's
|
|
699
|
-
username (`
|
|
839
|
+
username (`sam` ships into `sam.messages`), and `memhouse invite` mints a per-user
|
|
700
840
|
database. But the plugin skills hardcoded `${MEMHOUSE_DB:-mem}` in their connection
|
|
701
841
|
recipes, so a config missing `MEMHOUSE_DB` would silently query a `mem` house that the
|
|
702
842
|
user-named convention had moved on from. All eight skills now fall back to
|
|
@@ -731,10 +871,10 @@ possible.
|
|
|
731
871
|
- **Read a friend's shared memory by naming their house.** A share is a read-only GRANT on
|
|
732
872
|
a whole house (a ClickHouse database), and the rooms resolve by the connection's
|
|
733
873
|
database — so `/mem:ask`, `/mem:search` and `/mem:sql` now recognize a house named in the
|
|
734
|
-
question ("how did
|
|
874
|
+
question ("how did bob fix X", "search … in bob", "query bob's house"), resolve it
|
|
735
875
|
against `SHOW DATABASES`, and point the connection at that house with your own
|
|
736
876
|
credentials, read-only. A name that matches a readable house wins over the `in <project>`
|
|
737
|
-
qualifier — otherwise "in
|
|
877
|
+
qualifier — otherwise "in bob" silently filtered your own project column and returned
|
|
738
878
|
nothing. `/mem:hello` now names the phrase, and `/mem:users` still lists the houses shared
|
|
739
879
|
with you.
|
|
740
880
|
|
|
@@ -915,7 +1055,7 @@ now the whole install.
|
|
|
915
1055
|
stamp cannot be skipped) and `host` (a random fingerprint minted once per install).
|
|
916
1056
|
- **Joining any ClickHouse is two statements**: `CREATE USER` + `GRANT ALL ON <house>.*`.
|
|
917
1057
|
The member's own shipper creates and evolves the rooms.
|
|
918
|
-
- The house name defaults to the username (`
|
|
1058
|
+
- The house name defaults to the username (`sam` ships to `sam.messages`) and is
|
|
919
1059
|
freely decoupled (`--db`); `system` and `information_schema` are refused everywhere —
|
|
920
1060
|
previously `--db system` granted a member everything on the server's own database.
|
|
921
1061
|
- Removed: per-member suffixed rooms, Merge rooms, the narrowed grant set,
|
package/README.md
CHANGED
|
@@ -14,8 +14,8 @@ can search every past session, see what it cost, and reopen the one that solved
|
|
|
14
14
|
before.
|
|
15
15
|
|
|
16
16
|
Every row says where it came from, in a way no client can fake. `user_id` is stamped by
|
|
17
|
-
the server (`MATERIALIZED currentUser()`), and `host` is a fingerprint
|
|
18
|
-
|
|
17
|
+
the server (`MATERIALIZED currentUser()`), and `host` is a fingerprint derived from
|
|
18
|
+
the machine's own id. A team pointed at one house gets a shared memory with real attribution.
|
|
19
19
|
|
|
20
20
|
## Install
|
|
21
21
|
|
package/SECURITY.md
CHANGED
|
@@ -64,5 +64,7 @@ makes the security model short, and worth stating without varnish.
|
|
|
64
64
|
|
|
65
65
|
## Reporting
|
|
66
66
|
|
|
67
|
-
The repository is private during beta. Report security
|
|
68
|
-
|
|
67
|
+
The repository is private during beta. Report a security issue privately, never in a
|
|
68
|
+
public issue or channel: once the repository is public, through GitHub's private
|
|
69
|
+
vulnerability reporting (the **Security** tab, **Report a vulnerability**); until then,
|
|
70
|
+
to the maintainer through the channel that gave you access.
|