You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+15-4Lines changed: 15 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -35,6 +35,7 @@ http://127.0.0.1:3000/
35
35
- Optional creator-managed room note after creation
36
36
- Reads-first room view for published field notes, with legacy feed/wins routes kept for compatibility
37
37
- Slack/private-dump to field-note to team-read loop
38
+
- Private pattern graph for logged-in dumps, with pgvector-backed working map and private insight review
38
39
- Phrase-based reactions with local or logged-in dedupe
39
40
- Edit/delete for new room posts through per-post edit tokens, with optional logged-in continuity across browsers
40
41
- Private dump and field-note edit/delete, including bulk cleanup for selected private dumps
@@ -68,13 +69,20 @@ Weekly heartbeat generation is scheduled through Vercel Cron in `vercel.json` an
68
69
69
70
The current generator is deterministic/local and reads only published team-read posts (`posts.type = 'field_note'`). Private dumps, Slack history, hidden feed posts, and presence never feed the heartbeat. An AI provider can replace the generator later while keeping the anonymised published-read payload shape. Heartbeat history and vibe-over-time are displayed from stored heartbeat rows.
70
71
72
+
## Pattern Graph
73
+
74
+
Logged-in private dumps are processed asynchronously for private pattern features. OpenAI extracts signals and embeddings into Supabase pgvector-backed `dump_signals`; Anthropic generates milestone insights into `patterns`. Anonymous/session-only dumps are excluded. Pattern APIs are owner-scoped and must not expose source dump content.
75
+
76
+
Users can review insights at `/patterns` and explore the working map at `/dump/map`. Local and staging can enable `MUMBL_ENABLE_PATTERN_TEST_TOOLS=true` for manual QA controls; production should keep it disabled. See [docs/pattern-graph.md](/Users/dawn/Code/mumbl-app/docs/pattern-graph.md).
77
+
71
78
## Backend Setup
72
79
73
80
The frontend now uses these backend route handlers for spaces, posts, reactions, and room reads.
74
81
75
82
1. Create a Supabase project.
76
83
2. Copy `.env.example` to `.env.local`.
77
-
3. Fill in `NEXT_PUBLIC_SUPABASE_URL`, `NEXT_PUBLIC_SUPABASE_ANON_KEY`, `SUPABASE_SERVICE_ROLE_KEY`, `MUMBL_TOKEN_HASH_SECRET`, `MUMBL_SIDE_QUEST_ENCRYPTION_KEY`, and `CRON_SECRET`.
84
+
3. Fill in `NEXT_PUBLIC_SUPABASE_URL`, `NEXT_PUBLIC_SUPABASE_ANON_KEY`, `SUPABASE_SERVICE_ROLE_KEY`, `MUMBL_TOKEN_HASH_SECRET`, `MUMBL_CONTENT_ENCRYPTION_KEY`, `MUMBL_SIDE_QUEST_ENCRYPTION_KEY`, and `CRON_SECRET`.
85
+
Pattern graph work also needs `MUMBL_ENABLE_PATTERN_GRAPH=true`, `OPENAI_API_KEY`, `OPENAI_SIGNAL_MODEL`, `ANTHROPIC_API_KEY`, and `ANTHROPIC_INSIGHT_MODEL`.
78
86
4. Authenticate the Supabase CLI with `npx supabase login`.
79
87
5. Run `npm run db:link -- your-project-ref` or `npm run db:link -- https://your-project.supabase.co`.
80
88
`npm run db:link:staging` reads `.env.local`; `npm run db:link:prod` reads `.env.production.local`.
@@ -87,6 +95,8 @@ Creator access starts with the local room creator token. When a logged-in creato
87
95
88
96
Creators can delete test or unused rooms from the room danger zone. Deleting a room hard-deletes the room reads/feed signal, frees the slug, and leaves user-owned field notes in the author's dump with their room/post linkage cleared.
89
97
98
+
User-entered and user-derived text is encrypted into per-row `encrypted_payload` JSON before it is stored. The rollout backfills existing rows, uses `0030_scrub_plaintext_content.sql` as a verification scrub, then `0031_drop_legacy_plaintext_content_columns.sql` removes the legacy plaintext columns. This is server-side field encryption, not end-to-end encryption: Mumbl route handlers can decrypt content when needed to render rooms, draft field notes, generate heartbeats, and serve owner-scoped private data.
99
+
90
100
Until those variables exist, API routes return a setup `503`.
- Subscribe to bot events: `app_home_opened`, `member_joined_channel`
107
117
108
118
Set `SLACK_CLIENT_ID`, `SLACK_CLIENT_SECRET`, `SLACK_SIGNING_SECRET`, and `MUMBL_SLACK_TOKEN_ENCRYPTION_KEY` in the deployment environment. Install through `/api/slack/install`.
109
119
110
-
`/mumbl room platform team` creates a Mumbl room from Slack and returns a one-time creator handoff link for opening the room in a browser. `/mumbl start platform team` remains an alias. Slack-created rooms are auto-pinned and linked to creator ownership when Mumbl can match or later connect the Slack user to a Mumbl login. `/mumbl pin platform-team` explicitly adds a Mumbl room to that Slack user's publish list without tracking room membership, and best-effort invites them into the room's Mumbl-created Slack reads channel when one exists. App Home can draft, review, edit, publish private field notes to pinned Mumbl spaces, and manage personal pinned spaces. Optional team-read Slack posting is creator-enabled per room. If a creator switches it on, Mumbl starts an optional Slack permission upgrade that asks for `chat:write`, `groups:write`, and `groups:read` so it can create one private channel, post published team reads there, and auto-pin that Mumbl room when a connected user joins the Mumbl-created Slack channel. It still does not request Slack history scopes.
120
+
`/mumbl room platform team` creates a Mumbl room from Slack and returns a one-time creator handoff link for opening the room in a browser. `/mumbl start platform team` remains an alias. Slack-created rooms are auto-pinned and linked to creator ownership when Mumbl can match or later connect the Slack user to a Mumbl login. `/mumbl pin platform-team` explicitly adds a Mumbl room to that Slack user's publish list without tracking room membership, and best-effort invites them into the room's Mumbl-created Slack reads channel when one exists. App Home can draft, review, edit, publish private field notes to pinned Mumbl spaces, and manage personal pinned spaces. Optional team-read Slack posting is creator-enabled per room. If a creator switches it on, Mumbl starts an optional Slack permission upgrade that asks for `groups:write` and `groups:read` so it can create one private channel, post published team reads there using the core `chat:write` scope, and auto-pin that Mumbl room when a connected user joins the Mumbl-created Slack channel. It still does not request Slack history scopes.
111
121
112
122
Beta default: Slack team-read channels are private. A future public workspace channel option can use admin-approved Slack permissions such as `channels:manage`, only for creating the reads channel and still without history scopes.
113
123
@@ -132,6 +142,7 @@ GitHub Actions runs `npm ci` and `npm run build` on pushes and pull requests to
132
142
133
143
Prompt rotation, heartbeat job queueing, rate limits, and pooler notes are documented in [docs/scaling.md](/Users/dawn/Code/mumbl-app/docs/scaling.md).
134
144
Free-tier tradeoffs and future upgrade paths are documented in [docs/free-tier-compromises.md](/Users/dawn/Code/mumbl-app/docs/free-tier-compromises.md).
145
+
Private pattern graph behavior, pgvector checks, and staging QA steps are documented in [docs/pattern-graph.md](/Users/dawn/Code/mumbl-app/docs/pattern-graph.md).
0 commit comments