Grok Build Handoff — SynNA Publish Pipeline
Grok Build Handoff — SynNA Publish Pipeline
IN Lattice · Intelligent Netware · MA5 Council
| Field | Value |
|---|---|
| Last updated | 2026-06-18 |
| Carbon Steward | Daniel Comp (+ Angelina, live testing) |
| Primary build partner | Grok Build (D:\04_WORK\Code\Lattice\_ChatUI) |
| Prior spec author | Claude (charters/specs only; execution is Grok) |
| Status | 2.5 assemble shipped & verified · Gate 2 Codey: see Grok_Handoff_SynNA_Gate2_Codey.md |
Partnership model
Daniel is phasing out Claude as the day-to-day build partner. Grok Build is primary — direct project access, runs syn_pipeline.py / app.py, edits index.html, Cursor integration incoming.
| Role | Owner |
|---|---|
| Carbon direction, ratification, live testing | Daniel (+ Angelina) |
| Spec / charter edits (optional) | Claude or Daniel |
| Implementation, verification, handoffs | Grok Build |
| Runtime agents (Arnie, Picasso, etc.) | Hermes / daniel container |
New thread opener: Read this file first, then build the next item in Pathway forward only.
Executive summary
The SynNA pipeline watcher is working end-to-end through Gate 1 image selection:
`` promote inbox → packet (drafted) → xAI n=4 → masters_pending (4 candidates in modal) → user picks master → divider + 4 crops → images_pending (6 files) → assemble → [NEXT] sql_ready → publish ``
Gate 1 UX (shipped): Picasso chat + 2×2 modal in the Chat UI. User picks a master, or Regen all 4 (same prompt), or More like #N (Picasso refines text prompt → new panel). Crops run only after Use this.
Verified live by Daniel and Angelina (2026-06-18). Backups taken.
What exists (do not regress)
Key files
| Path | Role |
|---|---|
.Scripts/syn_pipeline.py | Watcher: inbox, panel n=4, masters_pending, --select, divider, crops, images_approved → assemble |
.Scripts/syn_assemble.py | Parse article.md, infill Tahoe template, assembled.html + preview.html |
.Scripts/syn_assemble_template.html | Parameterized Tahoe body fragment (divider slot + [Portal:Keywords]) |
.Scripts/syn_config.yaml | Paths, xAI, crops, scaled.divider.w, panel_count: 4 |
.Scripts/syn_pipeline.log | Watcher log |
.Scripts/arnie_output_contract.md | SYN_PIPELINE parser fixtures |
app.py | Chat bridge, regen, teach, pipeline API, more-like |
index.html | Chat UI, Gate 1 modal, composer buttons, resize grips |
agent_order.json | Sidebar: Dachs → Forrest → Arnie → … → Picasso |
handoffs/Grok_Handoff_SynNA_Gate1_Panel.md | This file |
D:/03_MAP/Syn_Pipeline/{slug}/ | Packet root (images flat, not images/ subfolder) |
D:/03_MAP/Line_Editing/_Promote/ | Arnie Article-*.md promote inbox |
State machine (image stages)
| State | Set by | Next action |
|---|---|---|
drafted | packet create / regen | watcher: xAI n=4 |
masters_pending | 4 candidates saved | Gate 1 modal — pick / regen / more-like |
images_pending | pick + divider + crops | Picasso refine / approve |
images_approved | human approve | watcher: assemble |
assembled | assemble (2.5) | sql_build (2.6) |
sql_ready | sql_build (later) | Gate 2 review |
published | publish (later) | terminal |
Regen sets drafted (not regen_requested). Clears candidates, images metadata, reruns panel.
Candidate + final image files
Before pick (masters_pending):
| file | notes |
|---|---|
{slug}_candidate_1.jpg … _4.jpg | xAI panel; listed in status.candidates |
After pick (images_pending) — six files:
| key | filename | how produced |
|---|---|---|
| master | {slug}_master.jpg | promoted from chosen candidate |
| divider | {slug}_{w}x{h}.jpg | full-frame scale (default 1920×960 for 2:1) |
| banner | {slug}_1920x420.jpg | cover_crop |
| tablet | {slug}_768x420.jpg | cover_crop |
| mobile | {slug}_480x420.jpg | cover_crop |
| thumb | {slug}_200.jpg | cover_crop |
status.yaml → candidates[], master_choice, panel_generated; after pick images.{key} each has file, w, h, bytes.
Observed live master: 2912×1456 (2k / 2:1). Divider height derived at runtime.
Agent workflow (chat-first, not kanban)
`` Dachs → Forrest → Arnie → promote → packet (drafted) → panel of 4 (masters_pending) → modal pick → six images (images_pending) → Picasso (regen, learn, more-like) → assemble → [NEXT] sql_ready → publish ``
Picasso Gate 1: open with Gate 1 — {slug} + scotoma. Sidebar Gate 1 — Images card also opens the modal.
Chat UI — Picasso composer
| Button | Action |
|---|---|
| regen | Same prompt → new panel of 4 → modal auto-opens |
| learn | Standing heuristics proposal |
Gate 1 modal buttons
| Button | Action |
|---|---|
| Use this | POST .../select-master → crops → images_pending |
| Regen all 4 | Same as regen button |
| More like #N | Picasso refines prompt toward pick → new panel |
API
routes (Gate 1 — shipped)
| Method | Route | Purpose |
|---|---|---|
| GET | /api/pipeline/{slug}/status | state, candidates, images metadata |
| GET | /api/pipeline/{slug}/image/{filename} | serve packet JPEG (path-safe) |
| POST | /api/pipeline/{slug}/select-master | {index: 1-4} → finalize + crops |
| POST | /api/regen | write prompt, --packet, open modal |
| POST | /api/more-like | Picasso refine + new panel |
| GET | /api/pipeline/{slug}/preview | serve preview.html (Gate 2) |
| POST | /api/pipeline/{slug}/approve-images | images_pending → images_approved |
| POST | /api/pipeline/{slug}/assemble | run assemble → assembled |
Chat UI composer buttons (all agents)
| Agent | Buttons |
|---|---|
| Dachs | Save Research (funnel) |
| Forrest | cats + assemble (brief) |
| Arnie | handoff + assemble + learn |
| Picasso | regen + learn |
| Others | handoff + assemble |
Divergences from SynNA Build Spec v1.0 (2026-06-09)
| v1.0 assumption | Current reality |
|---|---|
IMAGE_PROMPT in Arnie article | Picasso → image_prompt.txt |
| Packet metadata | SYN_PIPELINE: TITLE, SLUG, SCOTOMA |
images\master.jpg | {slug}_master.jpg at packet root |
| Single master at Gate 1 | 4 candidates in modal before crops |
| Pipeline kanban (§9) | Deferred — Gate 1 in Chat UI |
| Banner 1800×394 | 1920×420 |
Thumb _200x200 | {slug}_200.jpg |
| Master only | + section divider for assembled.html (no DB row) |
regen_requested state | Regen → drafted |
| Folder review for images | In-app modal |
Pathway forward (ordered backlog)
NOW
— SQL build (2.6) ← NEXT BUILD
Arnie_DB_Insert_v2.sqlscaffold fill- Four crop byte sizes + categories/badge from Forrest brief
N'...'escaping + round-trip test; uncommitted transaction for SSMSstate: sql_ready
Then — Publish (3.1)
- SFTP (paramiko): four crops + divider (URL resolve; divider has no DB row)
- HTTPS HEAD verify byte sizes
- Manual SSMS commit →
published, packet archive
Later
| Item | Notes |
|---|---|
| Pipeline kanban (v1.0 §9) | Full board when Gate 1/2 stable in chat |
| Picasso 2.9 | Automated prompt at drafted via Hermes |
| pyodbc insert | Replace SSMS gate |
| webp variants | Only if PageSpeed matters |
Shipped milestones (reference)
1.4 — Master rename + section divider (2026-06-17)
{slug}_master.jpg,{slug}_1920x960.jpgdivider, enrichedstatus.yaml--test-cropspasses
2.5 — Assemble (2026-06-18)
syn_assemble.py+syn_assemble_template.htmlarticle.md→assembled.html+preview.html- Divider
<img>usesstatus.images.divider.file+assemble.image_url_base(never hardcoded_1920x960) [Portal:Keywords]literal preservation (--test-assemble)preview.htmllinks live Tahoe CSS (syn.scotomaville.comskin)- Watcher:
images_approved→ assemble; state →assembled - Live packet
what-outlives-meverified
Gate 1 panel-of-4 (2026-06-17, verified 2026-06-18)
image_gen.panel_count: 4, xAInparameter- States:
drafted→masters_pending→images_pending finalize_master_selection()+ CLI--select slug:index- Modal 2×2, regen, more-like
- Daniel + Angelina sign-off; backups taken
Verification commands
```bash cd D:\04_WORK\Code\Lattice\_ChatUI\.Scripts python syn_pipeline.py --test-crops python syn_pipeline.py --test-parser python syn_pipeline.py --test-assemble python syn_pipeline.py --packet {slug}
state: drafted → masters_pending
python syn_pipeline.py --select {slug}:{1-4}
masters_pending → images_pending
python syn_pipeline.py --assemble {slug}
images_pending/approved → assembled
```
Gate 2 preview: http://127.0.0.1:8780/api/pipeline/{slug}/preview (after assemble)
Server: http://127.0.0.1:8780
Restart app.py after backend changes. If port in use:
``powershell netstat -ano | findstr :8780 taskkill /PID <pid> /F python app.py ``
Hard-refresh UI (Ctrl+Shift+R) after index.html changes.
Live packet: D:\03_MAP\Syn_Pipeline\what-outlives-me\
Reference specs (historical)
| Document | Role |
|---|---|
| SynNA Build Spec v1.0 (2026-06-09) | Original architecture map |
| Master Rename + Divider v2 | 1.4 — shipped |
| Gate 1 panel spec (this handoff, §shipped) | 2.1 + 1.6 — shipped |
When older specs and this handoff disagree, this handoff + the filesystem win.
Session continuity for Grok
- Read this file
git status/ tailsyn_pipeline.logif debugging- Read target packet
status.yaml - Build one backlog item — no drive-by refactors
- Update this handoff when a milestone ships
Updated by Grok Build · 2026-06-18 · 2.5 assemble shipped.