Update docs/mockups/index.md
e97979dc5dc6 jacobcole 2026-04-23 1 file
index 55aee16..6ee8850 100644
@@ -1,6 +1,6 @@
# Mockups
-Three HTML artifacts, cross-linked. Open each in a browser for the full layout (chat bubbles, SVG architecture diagrams, dark theme).
+Four HTML artifacts, cross-linked. Open each in a browser for the full layout (chat bubbles, SVG architecture diagrams, dark theme).
## Viewing the artifacts
@@ -12,8 +12,12 @@ Primary: GitHub Pages (stable, no Tailscale required):
|---|---|---|
| 00 — Platonic ideal | https://jacobcole.ai/picortex/00-platonic-ideal.html | **v0.2 (current)** |
| 00 — Platonic ideal (historical) | https://jacobcole.ai/picortex/00-platonic-ideal-v0.1.html | v0.1 — superseded |
-| 01 — Option 2 · Piyush-style | https://jacobcole.ai/picortex/01-option-2-piyush-style.html | v0.1 (current) |
+| 01 — Option 2 · No-Docker architecture | https://jacobcole.ai/picortex/01-option-2-no-docker.html | **v0.2 (current)** |
+| 01 — Option 2 · Piyush-style (historical) | https://jacobcole.ai/picortex/01-option-2-piyush-style-v0.1.html | v0.1 — renamed |
| 02 — Option 4 · Noos-style | https://jacobcole.ai/picortex/02-option-4-noos-style.html | v0.1 (current) |
+| 03 — Piyush's literal architecture (reference) | https://jacobcole.ai/picortex/03-piyush-literal.html | v0.1 · reference |
+
+> `01-option-2-piyush-style.html` (the old canonical URL) now serves a redirect stub that sends you to the new No-Docker canonical. All external links pointing at the old URL still work.
Fallback: Tailscale HTTPS while the Mac Mini HTTP server is up:
@@ -21,14 +25,18 @@ Fallback: Tailscale HTTPS while the Mac Mini HTTP server is up:
|---|---|
| 00 — Platonic ideal (v0.2) | https://sdmm291.tailb2a35c.ts.net:8471/00-platonic-ideal.html |
| 00 — Platonic ideal (v0.1) | https://sdmm291.tailb2a35c.ts.net:8471/00-platonic-ideal-v0.1.html |
-| 01 — Option 2 · Piyush-style | https://sdmm291.tailb2a35c.ts.net:8471/01-option-2-piyush-style.html |
+| 01 — Option 2 · No-Docker (v0.2) | https://sdmm291.tailb2a35c.ts.net:8471/01-option-2-no-docker.html |
+| 01 — Option 2 · Piyush-style (v0.1) | https://sdmm291.tailb2a35c.ts.net:8471/01-option-2-piyush-style-v0.1.html |
| 02 — Option 4 · Noos-style | https://sdmm291.tailb2a35c.ts.net:8471/02-option-4-noos-style.html |
+| 03 — Piyush's literal architecture | https://sdmm291.tailb2a35c.ts.net:8471/03-piyush-literal.html |
### Version history
-- **Mockup 00 v0.2** (2026-04-23) — Architecture diagram collapsed to one Jacob's-phone box with annotation explaining "out-of-band = different DM thread, not different endpoint." Fix for Jacob's feedback on v0.1.
+- **Mockup 01 v0.2** (2026-04-23) — Renamed from "Piyush-style" to "**No-Docker architecture**." Dropped "Bot Gateway" jargon in favor of plain "bot server." Added a credit/divergence box clearly separating what's borrowed from Piyush vs. what's new in picortex. Created companion reference (mockup 03) showing Piyush's literal design. Old URL `01-option-2-piyush-style.html` serves a redirect stub.
+- **Mockup 03 v0.1** (2026-04-23) — New reference mockup. Documents what Piyush Jha actually shipped in Jan 2026 (9 commits, `238052c4` → `d2d6a534`): a 3-tier per-user web chat over SSH to a single shared EC2. No groups, no consent loop, no knowledge graph, no texting. Not a proposal — exists so other mockups can cite what's literal vs. adapted.
+- **Mockup 00 v0.2** (2026-04-23) — Architecture diagram collapsed to one Jacob's-phone box with annotation explaining "out-of-band = different DM thread, not different endpoint." Fix for feedback on v0.1.
- **Mockup 00 v0.1** (2026-04-23) — Initial draft. Diagram drew Jacob's phone twice (inbound DM box + out-of-band approval box). Same device, confusing — superseded by v0.2.
-- **Mockups 01 and 02 v0.1** (2026-04-23) — Initial concrete-architecture mockups, no revisions yet.
+- **Mockups 01 v0.1 and 02 v0.1** (2026-04-23) — Initial concrete-architecture mockups.
### Source
@@ -36,10 +44,13 @@ Fallback: Tailscale HTTPS while the Mac Mini HTTP server is up:
|---|---|---|
| 00 (v0.2, current) | [docs/mockups/00-platonic-ideal.html](00-platonic-ideal.html) | `~/code/picortex/docs/mockups/00-platonic-ideal.html` |
| 00 (v0.1, historical) | [docs/mockups/00-platonic-ideal-v0.1.html](00-platonic-ideal-v0.1.html) | `~/code/picortex/docs/mockups/00-platonic-ideal-v0.1.html` |
-| 01 | [docs/mockups/01-option-2-piyush-style.html](01-option-2-piyush-style.html) | `~/code/picortex/docs/mockups/01-option-2-piyush-style.html` |
+| 01 (v0.2, current — No-Docker) | [docs/mockups/01-option-2-no-docker.html](01-option-2-no-docker.html) | `~/code/picortex/docs/mockups/01-option-2-no-docker.html` |
+| 01 (v0.1, historical — Piyush-style) | [docs/mockups/01-option-2-piyush-style-v0.1.html](01-option-2-piyush-style-v0.1.html) | `~/code/picortex/docs/mockups/01-option-2-piyush-style-v0.1.html` |
+| 01 (old canonical URL, now redirect) | [docs/mockups/01-option-2-piyush-style.html](01-option-2-piyush-style.html) | `~/code/picortex/docs/mockups/01-option-2-piyush-style.html` |
| 02 | [docs/mockups/02-option-4-noos-style.html](02-option-4-noos-style.html) | `~/code/picortex/docs/mockups/02-option-4-noos-style.html` |
+| 03 (reference) | [docs/mockups/03-piyush-literal.html](03-piyush-literal.html) | `~/code/picortex/docs/mockups/03-piyush-literal.html` |
-> Note: WikiHub serves HTML files as `application/octet-stream` (raw source), so Safari will likely download them instead of rendering. Use the Tailscale URL for rendered view, or clone the wiki repo (`git clone https://wikihub.globalbr.ai/@jacobcole/picortex.git`) to view locally.
+> Note: WikiHub serves HTML files as `application/octet-stream` (raw source), so Safari will likely download them instead of rendering. Use the jacobcole.ai URL for rendered view. See `wikihub-8vk` (owner opt-in rendering) for the proposed fix.
## What each shows
@@ -52,18 +63,19 @@ The texting experience from the user's side + the abstract (channel- and executo
- **Scene B — the consent loop (the banger).** Side-by-side: group view (bot says "let me check", types, answers) + Jacob's DM (bot shows question context + proposed reply + approve/deny keys). Below: the `DisclosureEvent` audit row that gets written.
- **Scene C — manifest dialog.** Bot discloses what it knows about Jacob in this chat.
- **Scene D — reaction triggers.** ⭐ on a bot message → saves to notes; ❌ → retracts.
-- **Architecture diagram (abstract).** Channel adapter → Bot Gateway → {Attention, Executor, Consent Broker} → Knowledge Layer + out-of-band DM path + audit log. SVG, no machines named.
+- **Architecture diagram (abstract).** Channel adapter → Bot server → {Attention, Executor, Consent Broker} → Knowledge Layer + out-of-band DM path + audit log. SVG, no machines named.
- **Flow of a consent-loop turn** as 8 numbered steps.
-### 01 — Option 2 · Piyush-style
+### 01 — Option 2 · No-Docker architecture
-Concrete 3-machine architecture derived from Piyush's Jan 2026 design, adapted for per-chat isolation + P4 consent loop:
+Concrete 2-new-boxes architecture (+ 1 reused), derived-from-but-not-equal-to Piyush's Jan 2026 design:
-- **Architecture SVG:** Machine A (Bot Gateway, Hetzner VPS) + Machine B (Workspace host with per-chat Linux users) + Machine C (existing noos). SSH + `claude --session-id <chat> -p` per turn.
-- **"What lives where" table** — component × machine × failure cost.
+- **Credit/divergence box** — explicitly separates what's borrowed (split bot/workspace, SSH per turn, `claude -c -p`, narrow sudoers) from what's new (per-chat isolation, attention gating, consent broker, noos graph, Linq channel).
+- **Architecture SVG:** Box A (Bot server, Hetzner VPS) + Box B (Claude box with per-chat Linux users) + Box C (reused noos). SSH + `claude --session-id <chat> -p` per turn.
+- **"What lives where" table** — component × box × failure cost.
- **Concrete wire-view consent loop** (8 steps with exact commands).
-- **Code sketch** — Bot Gateway executor in TypeScript.
-- **Strengths/costs, head-to-head** — 5 strengths, 5 costs.
+- **Code sketch** — bot server executor in TypeScript.
+- **Strengths/costs, head-to-head** — 6 strengths (including "no Docker daemon / images / compose"), 5 costs.
- **5 failure modes** table with user-visible + recovery.
### 02 — Option 4 · Noos-style
@@ -76,16 +88,28 @@ Concrete single-box stateless architecture, closest to noos's existing Slack bot
- **Code sketch** — `executeTurn()` + `paused_turns` SQLite schema.
- **Strengths/costs, head-to-head** — cheapest to ship; no code execution surface.
- **5 failure modes** table.
-- **Migration path Option 4 → Option 2** — additive, not a rewrite.
+- **Migration path Option 4 → No-Docker (Option 2)** — additive, not a rewrite.
+
+### 03 — Piyush's literal architecture (reference)
+
+Factual snapshot of what Piyush Jha actually shipped in Jan 2026 — included so other mockups can cite provenance accurately. Not a proposal.
+
+- **The nine commits** listed with SHAs and dates.
+- **Architecture SVG:** Browser → Vercel (static CDN) → Backend server → single shared EC2 (per-user Linux accounts).
+- **The turn loop — verbatim code** from `claudeService.ts` and `chatHandler.ts` at SHA `d2d6a534`.
+- **Features table:** what he had (web chat, per-user workspace, xterm terminal, voice) vs. what he didn't (groups, attention gating, consent loop, knowledge graph, texting).
+- **Borrowed vs. new table** — which picortex pieces are truly inherited vs. added.
+- **Why his design was replaced** — Cortex pivoted to multi-tenant enterprise; picortex-as-personal-tool doesn't need that pivot's justification.
-## Design principles used in all three
+## Design principles used in all four
- Self-contained single-file HTML (no CDN, no JS, no external fetches)
- Dark theme for screenshot-ability
-- iMessage-style chat bubbles with reply-to pills and reaction badges
+- iMessage-style chat bubbles with reply-to pills and reaction badges (mockup 00)
- Inline SVG for architecture diagrams (crisp at any zoom)
- Cross-linked top nav on every page
- Mobile-friendly layout (split panels stack on narrow viewports)
+- Version pills on each page (green "current" / red "superseded" / amber "reference")
## Tickets closed
@@ -95,4 +119,5 @@ Concrete single-box stateless architecture, closest to noos's existing Slack bot
## Still open
-If the option-1 (current picortex tmux) arch ever needs a concrete mockup, file a new ticket. Right now it's documented narratively in the original specs and has provisional banners saying "do not start implementation here."
+- Mockup of Option 1 (the original picortex tmux design) — no ticket; current specs carry provisional banners saying "do not start implementation here." If/when we want a concrete mockup of why the tmux path is the wrong choice, file a new ticket.
+- Mockup of Option 3 (ephemeral per-chat Fly Machine) — no ticket yet; relevant if the D2 isolation report says per-chat container is required.