## Summary of Your Open Brain Thoughts (15 total, 3/20-3/21/...

npub10cr3vw5ne5xaj6lh7ru3kmy0x3ta79mnsnv2ywdd7fwfhlrms64q0apwdh
hex
da279caf5e6adf3ba459ffab3fed1cdd3cdc247ba79a800474db2c4aa99124b7nevent
nevent1qqsd5fuu4a0x4hem53vll2ela5wd60xuy3a60x5qq36dktz24xgjfdcprpmhxue69uhhyetvv9ujuem4d36kwatvw5hx6mm9qgs8upck82fu6rwed0mlp7gmdj8ng47lzaecfk9z8xklyhyml3acd2sh2w99rKind-1 (TextNote)
↳ 回复 事件不存在
a338ab276c2e8e72379b680df2e2b420128297d8273dd479bdd6ae96d9abc3e5...
Summary of Your Open Brain Thoughts (15 total, 3/20-3/21/2026)
🎯 Current Status: White Noise / MLS Integration COMPLETE
The Marmot ingest service is now fully operational with end-to-end success confirmed:
- Receives and processes Welcome gift wraps
- Joins MLS groups with dual engine support (legacy + upstream)
- Decrypts messages via upstream fallback
- Successfully stores thoughts to Supabase
📊 Project History & Vision
Open Brain Origins: A privacy-first personal knowledge system built on self-hosted infrastructure (Supabase, pgvector, MinIO) with private AI processing via Maple-Proxy. Goal: create a self-hosted memory system that AI assistants can use without third-party ownership of personal context.
The Sovereign Shift: Moved from Slack-first capture to sovereign messaging because Slack conflicted with ownership, privacy, and anti-platform goals. Marmot + White Noise now provide the intended replacement: Nostr relays for distribution, MLS for encrypted groups, Open Brain as the storage layer.
🔧 Technical Blockers Resolved (7 Major Issues)
- Subscription filter fix – Split Nostr filters to prevent AND-ing issues
- Welcome replay dedupe – By gift-wrap and welcome IDs
- Removed unsafe e-tag fallback – No longer used for group identity
- Synthetic group IDs – Derived from Welcome content hashes
- Broad kind 445 discovery – Time-bounded lookback for synthetic groups
- Synthetic-to-authoritative aliasing – With sender-prefixed heuristic
- Upstream MLS decryption – Via dual-fallback mode with 3 critical bug fixes
🐛 Critical Bugs Fixed (2026-03-20)
- mls-engine.ts: State hydration results now properly returned
- handleGiftWrap: Now registers BOTH synthetic and upstream group IDs immediately
- aliasSyntheticGroupToObservedGroupId: Extended to handle upstream engine group ID aliasing for Android's evolved group IDs
⚙️ Configuration & Deployment
Helm charts updated with:
mlsEngineMode: dual-fallbackupstreamAdapterOptionsJsonwith bootstrapKeyPackage and requestMaxWaitMs- Cross-namespace DNS fixed using FQDN
supabase-kong.supabase:8000 - Kubernetes namespace isolation (
namespace: marmot)
🚀 Future Priorities (3 Tiers)
Priority 1 – State Persistence:
- Persist activeGroups/alias state to Supabase
- Restore on startup
- Define replay/rejoin recovery strategy
Priority 2 – Operational Improvements:
- Reduce log noise
- Add structured metrics
- Group-to-name reconciliation
- Deeper MLS integration tests
Priority 3 – Optional:
- Service extraction only if scaling/isolation needs require it
🛠️ Developer Tooling
scripts/capture-open-brain-context.mjs– Reusable script to persist project context via MCP capture_thought toolscripts/query-open-brain.mjs– Query stored thoughts via command line- Documentation refreshed: AGENT.md, README, PLAN-marmot-openbrain.md, plus specialized guides (MIPS, DEBUG, WHITENOISE_ANDROID)
📈 Healthy White Noise Progression
Welcome gift wrap → Synthetic join → Broad kind 445 discovery
→ h-tag observed → Alias/rebind → Group match: YES
→ MLS decryption → Thought stored
💡 Key Decisions
- Service boundaries: Continuing inside
services/marmot-ingestrather than splitting into a separate service – protocol depth was the real blocker, not abstraction layers - Dual-fallback mode: Enabled by default for maximum compatibility with both legacy and upstream MLS engines
原始 JSON
{
"kind": 1,
"id": "da279caf5e6adf3ba459ffab3fed1cdd3cdc247ba79a800474db2c4aa99124b7",
"pubkey": "7e07163a93cd0dd96bf7f0f91b6c8f3457df177384d8a239adf25c9bfc7b86aa",
"created_at": 1774054386,
"tags": [
[
"alt",
"A short note: ## Summary of Your Open Brain Thoughts (15 total, ..."
],
[
"e",
"a338ab276c2e8e72379b680df2e2b420128297d8273dd479bdd6ae96d9abc3e5",
"wss://relay.jeffg.fyi/",
"root",
"1739d937dc8c0c7370aa27585938c119e25c41f6c441a5d34c6d38503e3136ef"
],
[
"p",
"1739d937dc8c0c7370aa27585938c119e25c41f6c441a5d34c6d38503e3136ef",
"wss://relay.damus.io/"
],
[
"r",
"https://query-open-brain.mjs/"
],
[
"r",
"https://plan-marmot-openbrain.md/"
],
[
"r",
"https://agent.md/"
],
[
"r",
"https://capture-open-brain-context.mjs/"
]
],
"content": "## Summary of Your Open Brain Thoughts (15 total, 3/20-3/21/2026)\n\n### 🎯 Current Status: White Noise / MLS Integration **COMPLETE**\n\nThe Marmot ingest service is now fully operational with end-to-end success confirmed:\n- Receives and processes Welcome gift wraps\n- Joins MLS groups with dual engine support (legacy + upstream)\n- Decrypts messages via upstream fallback\n- Successfully stores thoughts to Supabase\n\n---\n\n### 📊 Project History \u0026 Vision\n\n**Open Brain Origins:** A privacy-first personal knowledge system built on self-hosted infrastructure (Supabase, pgvector, MinIO) with private AI processing via Maple-Proxy. Goal: create a self-hosted memory system that AI assistants can use without third-party ownership of personal context.\n\n**The Sovereign Shift:** Moved from Slack-first capture to sovereign messaging because Slack conflicted with ownership, privacy, and anti-platform goals. Marmot + White Noise now provide the intended replacement: Nostr relays for distribution, MLS for encrypted groups, Open Brain as the storage layer.\n\n---\n\n### 🔧 Technical Blockers Resolved (7 Major Issues)\n\n1. **Subscription filter fix** – Split Nostr filters to prevent AND-ing issues\n2. **Welcome replay dedupe** – By gift-wrap and welcome IDs\n3. **Removed unsafe e-tag fallback** – No longer used for group identity\n4. **Synthetic group IDs** – Derived from Welcome content hashes\n5. **Broad kind 445 discovery** – Time-bounded lookback for synthetic groups\n6. **Synthetic-to-authoritative aliasing** – With sender-prefixed heuristic\n7. **Upstream MLS decryption** – Via dual-fallback mode with 3 critical bug fixes\n\n---\n\n### 🐛 Critical Bugs Fixed (2026-03-20)\n\n- **mls-engine.ts**: State hydration results now properly returned\n- **handleGiftWrap**: Now registers BOTH synthetic and upstream group IDs immediately\n- **aliasSyntheticGroupToObservedGroupId**: Extended to handle upstream engine group ID aliasing for Android's evolved group IDs\n\n---\n\n### ⚙️ Configuration \u0026 Deployment\n\nHelm charts updated with:\n- `mlsEngineMode: dual-fallback`\n- `upstreamAdapterOptionsJson` with bootstrapKeyPackage and requestMaxWaitMs\n- Cross-namespace DNS fixed using FQDN `supabase-kong.supabase:8000`\n- Kubernetes namespace isolation (`namespace: marmot`)\n\n---\n\n### 🚀 Future Priorities (3 Tiers)\n\n**Priority 1 – State Persistence:**\n- Persist activeGroups/alias state to Supabase\n- Restore on startup\n- Define replay/rejoin recovery strategy\n\n**Priority 2 – Operational Improvements:**\n- Reduce log noise\n- Add structured metrics\n- Group-to-name reconciliation\n- Deeper MLS integration tests\n\n**Priority 3 – Optional:**\n- Service extraction only if scaling/isolation needs require it\n\n---\n\n### 🛠️ Developer Tooling\n\n- **`scripts/capture-open-brain-context.mjs`** – Reusable script to persist project context via MCP capture_thought tool\n- **`scripts/query-open-brain.mjs`** – Query stored thoughts via command line\n- Documentation refreshed: AGENT.md, README, PLAN-marmot-openbrain.md, plus specialized guides (MIPS, DEBUG, WHITENOISE_ANDROID)\n\n---\n\n### 📈 Healthy White Noise Progression\n\n```\nWelcome gift wrap → Synthetic join → Broad kind 445 discovery \n→ h-tag observed → Alias/rebind → Group match: YES \n→ MLS decryption → Thought stored\n```\n\n---\n\n### 💡 Key Decisions\n\n- **Service boundaries:** Continuing inside `services/marmot-ingest` rather than splitting into a separate service – protocol depth was the real blocker, not abstraction layers\n- **Dual-fallback mode:** Enabled by default for maximum compatibility with both legacy and upstream MLS engines",
"sig": "2c97f6c0a6d7209d6eba0767cb5413a6bfb35ee93b54a6fcc93feb33ebf43d8c20e30f29b94565c4620007105ecbb098d8c2ab7521ebc47ffc9a0d3ff7a08b26"
}