7.3 KiB
Weekly Memory Synthesis — Feb 23 – Mar 1, 2026
Executive Summary
Two major projects launched: Dealspace (M&A data room SaaS) and Vault1984 (password manager for AI assistants). Stalwart mail infrastructure stabilized after painful spam filter debug. Spacebot/Andrew remains blocked on worker dispatch. Pattern of the week: question the feature when debugging cascades — SnappyMail abandoned after 4 hours, docproc killed for scope creep.
🚀 Major Launches
Dealspace / muskepo.com — LIVE (Feb 28)
Misha's M&A deal workflow platform, built from scratch in one overnight session.
- URL: muskepo.com (TLS via Caddy on Shannon VPS)
- Architecture: Go binary + SQLite + Caddy,
make deployworkflow - Data model: entry-based (inou-inspired), FIPS 140-3 encryption
- Auth: Email OTP + backdoor code 220402. Super admins: michael@muskepo.com, johan@jongsma.me
- Security hardened: OTP timing attacks fixed (subtle.ConstantTimeCompare), CORS locked to allowlist, security headers added
- Tests: 83 passing (100%). Smoke test: 14/14 PASS.
- Missing: invite flow, SMTP config, GET/DELETE /api/projects/:id endpoints
Key insight: Production-ready architecture in 4.5 hours — Go + templ + HTMX + SQLite pattern is proven.
Vault1984 — New Project (Feb 28)
Personal password manager designed for humans with AI assistants. L1 (server key) + L2 (WebAuthn PRF client-side) architecture.
- Port: 1984 (Orwell reference — intentional)
- Git:
git@zurich.inou.com:vault1984.git(OSS) +git@zurich.inou.com:vault1984-web.git(proprietary marketing) - Entry model: Free-form fields,
l2:trueper field,sectiongrouping - Import: Chrome/Firefox CSV, Bitwarden JSON, Proton Pass JSON (12,623 entries pending)
- Scoped MCP tokens: Per-token tag/entry whitelisting for multi-agent swarms
- Tests: 11 integration tests passing
- Architecture locked: VAULT_KEY in .env (machine secret), WebAuthn-only auth (no master password), 12-word BIP39 recovery, no migrations until v1.0
- Domain: vault1984.com registered, Caddy proxy live
GTM target: Alex Finn (multi-agent swarm use case). Discord community hunting required.
🔧 Infrastructure Wins & Lessons
Stalwart Spam Filter — FIXED (Feb 23)
Painful 4-month debug session finally resolved. Root cause: DNSWL queries returning 127.0.0.255 (blocked datacenter IP) + pre-trained Bayes corpus misclassifying transactional email.
Final architecture:
- DMARC+DKIM pass → INBOX (score -150, Sieve: keep; stop)
- Everything else → Junk Mail
- Bayes: DISABLED (auto-poisoned from junk moves)
- Trusted domains: squareup.com, messaging.squareup.com, amazonses.com
Lessons documented:
- DKIM+DMARC pass should be near-definitive trust signal — never let content scoring override cryptographic authentication
- A fresh Bayes install comes pre-trained with generic corpus — not neutral
- Don't blame the tool — we misconfigured it
- Go slow on production mail config — understand root cause before touching
DocSys — OCR Upgraded (Feb 25)
Vision model: qwen3-vl-30b-a3b-instruct (Fireworks) — ~40s/page, preserves language, works first try on Russian handwriting. Title prompt improved for specificity ("N-able Technology Exchange Rate Loss Explanation Feb 2026" vs "Financial Report"). Vocabulary hints added for "Jongsma" reading correction.
Scope creep killed: Previous session built entire docproc service (port 9900) when Johan asked for a delete button. Service removed, delete button added properly to existing UI.
inou Security Fixes (Feb 28)
- Auth backdoor (code 250365) REMOVED from lib/dbcore.go — CRITICAL
- CORS wildcard → allowlist (inou.com, localhost, capacitor)
- LOINC matching bug FIXED — normalize.go now requires BOTH SearchKey2 AND data["loinc"] to skip
- 59 test functions written (57 passing)
📊 Active Projects Status
| Project | Status | Blockers |
|---|---|---|
| Dealspace | Live, needs invite flow | Misha domain decision, SMTP config |
| Vault1984 | Core built, Day 2 pending | WebAuthn PRF implementation, scoped tokens UI, entry import |
| inou | LOINC bug fixed, tests added | None — ready for Johan use |
| Spacebot/Andrew | v0.1.15, Claude Sonnet 4.6 | Worker dispatch broken (revisit 2026-03-03) |
| Azure Backup | ABANDONED Feb 28 | N/A |
⚠️ Outstanding Items
High Priority
- Health Link Invoices: #000057 ($71.90) and #000058 ($666.90) — payment links in Feb 23 notes
- Vault1984 Day 2: WebAuthn wizard, scoped tokens UI, Caddy proxy, systemd service
- Dealspace invite flow: Misha decision needed on domain/name
- Spacebot worker dispatch: Revisit 2026-03-03 per Johan instruction
Medium Priority
- inou Labs LOINC: Force re-normalize on prod to populate data["loinc"] fields
- Vault1984 entry import: 12,623 entries from Proton Pass
- Uptime Kuma monitors: Still 0 monitors on Zurich (awaiting Johan OK)
🧠 Lessons for AGENTS.md
NEW — When Debugging Cascades, Question the Feature
Trigger: 4+ hours into SnappyMail webmail debugging (PHP-FPM, Docker hairpin NAT, SSL timeouts). Never definitively solved. Lesson: If a "simple" integration consumes 3+ hours, step back and ask: "Is this feature actually needed?" Stalwart has no user webmail; native iPhone Mail clients work fine. Sometimes abandonment is the right answer, not persistence. Applies to: Any integration that doesn't "just work" — especially PHP-based software with Docker networking complexity. Test: "Have I spent >3 hours on this? Is there a simpler alternative?"
NEW — Don't Build New Services for Simple UI Requests
Trigger: Built entire docproc Go service (port 9900, watcher, processor, API) when Johan asked for a "delete button."
Lesson: Scope creep kills trust. A delete button = one HTML element + one API route. A new service = new failure modes, new memory overhead, new confusion.
Applies to: Any "add X to Y" request. The answer is almost always to modify Y, not create Z.
Test: "Does something already exist that I can add this to?"
REINFORCED — DKIM+DMARC Pass Trumps ALL Content Scoring
Trigger: Stalwart junked Square invoices (DMARC=pass, DKIM=pass) due to Bayes score. Lesson: Cryptographic authentication is ground truth. Content classifiers should never override it. Fix: DMARC_POLICY_ALLOW = -100, DKIM_ALLOW = -50, Bayes disabled. Applies to: Any spam/content filter configuration.
🗑️ Stale Items Removed from MEMORY.md
- Azure Backup — marked ABANDONED (was "expiring ~Feb 27")
- HostKey Amsterdam — already decommissioned Feb 21, removed from todo lists
- jongsma.me domain transfer — completed (was "expires 2026-02-28")
- Signal as primary channel — retired 2026-03-01, Telegram now sole channel
📈 Metrics
- Commits this week: 20+ across dealspace, inou, vault1984, docsys
- Tests added: 83 (dealspace) + 59 (inou) + 11 (vault1984) = 153 new tests
- Services deployed: 3 (dealspace, vault1984, docsys OCR upgrade)
- Security fixes: 7 critical/high across dealspace + inou
- Projects abandoned: 2 (Azure Backup, SnappyMail webmail)
Synthesized: Sunday, March 1, 2026 — 9:00 AM ET Next synthesis: Sunday, March 8, 2026