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.
Files changed (44) hide show
  1. package/AGENTS.md +10 -11
  2. package/CHANGELOG.md +153 -13
  3. package/README.md +2 -2
  4. package/SECURITY.md +4 -2
  5. package/bin/memhouse.js +105 -49
  6. package/docs/guides/admin-password.md +1 -1
  7. package/docs/guides/configuration.md +2 -2
  8. package/docs/guides/install.md +1 -1
  9. package/docs/guides/invite.md +1 -1
  10. package/docs/guides/storage.md +10 -7
  11. package/docs/guides/uninstall.md +4 -2
  12. package/docs/releases/README.md +2 -0
  13. package/docs/releases/v0.18.10.md +7 -7
  14. package/docs/releases/v0.18.11.md +187 -0
  15. package/docs/releases/v0.18.12.md +59 -0
  16. package/docs/tutorials/01-first-house.md +2 -2
  17. package/editors/claude.js +70 -12
  18. package/editors/cursor-agent.js +1 -1
  19. package/examples/01-local-one-machine/README.md +4 -4
  20. package/examples/02-existing-clickhouse/README.md +7 -7
  21. package/memhouse/DESIGN.md +9 -2
  22. package/memhouse/RESUME-AND-UPDATE.md +1 -1
  23. package/memhouse/capabilities.js +1 -1
  24. package/memhouse/convert.js +3 -3
  25. package/memhouse/delivery/PROMPT.md +1 -1
  26. package/memhouse/delivery/plugin/.claude-plugin/plugin.json +1 -1
  27. package/memhouse/delivery/plugin/reference/HOUSE.md +21 -9
  28. package/memhouse/delivery/plugin/skills/access/SKILL.md +2 -2
  29. package/memhouse/delivery/plugin/skills/admin/SKILL.md +3 -3
  30. package/memhouse/delivery/plugin/skills/house/SKILL.md +2 -2
  31. package/memhouse/delivery/plugin/skills/recall/SKILL.md +36 -16
  32. package/memhouse/delivery/plugin/skills/sql/SKILL.md +2 -2
  33. package/memhouse/flags.js +28 -1
  34. package/memhouse/host.js +11 -6
  35. package/memhouse/house/HOUSE.md +6 -6
  36. package/memhouse/house/house.js +31 -5
  37. package/memhouse/invite-target.js +37 -0
  38. package/memhouse/self-update.js +1 -1
  39. package/memhouse/server/queries.js +11 -6
  40. package/memhouse/shipper/ship.js +148 -31
  41. package/package.json +3 -3
  42. package/public/THIRD_PARTY_NOTICES.txt +2114 -0
  43. package/ui/README.md +16 -0
  44. 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, never pushing to `ramazanpolat/*`)
7
- live in [`~/agent-realm/CLAUDE.md`](../CLAUDE.md) and are not repeated here.
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 zeo ran the pre-0.18 layout. Since its conversion there
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 one line | `main` (default) | `latest`, and `team` as an alias | 0.18.x | everyone — `npm install -g memhouse` (zeo was converted to the one layout with `memhouse convert`; `release/0.17` is retired) |
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 zeo machine never receives a team build by accident, and vice versa.
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 pilot's publish token lives in the macOS keychain as `npmjs-token`
39
- (`~/.pilot-profile/online/npm.md` has the temp-userconfig recipe). Lend it to the one
40
- command; never print it.
41
- - **One owner per line at a time.** Before releasing, check `ListAgents`/herdr for another
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 pilot (2026-10-08). The drill runs before 0.19.0.**
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 by O's sandbox
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. zeo was converted to the one layout the same evening with `memhouse convert` (six members, every row count identical before and after, shares carried).
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 zeo converted to the one layout there is no 0.17 line to keep:
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 (`polat.messages`, `ALL ON polat.*`). `convert`
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
- zeo's 0.17.1, a different house layout. A real member was downgraded on her first update.
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.polat_messages`,
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 polat.*`. That grant is **dynamic** —
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 yigit_messages`
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 (`polat` ships into `polat.messages`), and `memhouse invite` mints a per-user
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 yigit fix X", "search … in yigit", "query yigit's house"), resolve it
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 yigit" silently filtered your own project column and returned
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 (`polat` ships to `polat.messages`) and is
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 minted once per
18
- install. A team pointed at one house gets a shared memory with real attribution.
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 issues to the maintainer
68
- directly (ramazanpolat@gmail.com) rather than in a public channel.
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.