---
output_file: "Lattice - Gate 1 Picasso.md"
feed: "WHITEPAPER"
template_version: "1.2"
source: "Lattice"
codex_section: "S16-S20"
conv_id: "lattice-build-history"
share_url: "none"
date: "2026-06-18"
content_date: "2026-06-18"
enriched_date: "2026-07-02"
date_modified: "2026-07-02"
message_count: 1
type: "lattice-build-spec"
status: "deposited"
path_hint: "IntelligentNetware/Lattice/"
category:
- "Lattice Infrastructure"
- "Gate 1 Imagery"
tags:
- "lattice"
- "synna"
- "picasso"
- "gate-1"
- "imagery"
- "assemble"
monomyth_stage: "06 - Tests, Allies, Enemies"
gameboard_position: "Gate 1 image selection shipped; 2x2 master modal verified"
summary: |
  Gate 1 Picasso handoff documenting shipped SynNA imagery pipeline: promote inbox to packet xAI n=4 masters_pending 2x2 modal master pick divider crops images_pending assemble.
  Partnership model Grok Build primary.
  Verified live by Daniel and Angelina 2026-06-18..
keypoints:
  - Pipeline through Gate 1: drafted → masters_pending → images_pending → assemble
  - Picasso chat plus 2x2 modal: Regen all 4 or More like #N before Use this
  - Crops run only after master selection; assemble 2.5 shipped and verified
  - Grok Build primary implementation partner; Claude specs only
sentiment: archival
emotions:
  - "purposeful"
sycophancy_level: "None"
truth_score: 95
entropy_score: "Low"
codex: true
pre_silicon: false
ma5_inheritance: "IntelligentNetware"
voice_print: false
lattice_release: "3.0"
original_handoff: "Grok_Handoff_SynNA_Gate1_Panel.md"
---
# 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.sql` scaffold fill
- Four crop byte sizes + categories/badge from Forrest brief
- `N'...'` escaping + round-trip test; uncommitted transaction for SSMS
- `state: 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.jpg` divider, enriched `status.yaml`
- `--test-crops` passes

### 2.5 — Assemble (2026-06-18)

- `syn_assemble.py` + `syn_assemble_template.html`
- `article.md` → `assembled.html` + `preview.html`
- Divider `<img>` uses **`status.images.divider.file`** + `assemble.image_url_base` (never hardcoded `_1920x960`)
- `[Portal:Keywords]` literal preservation (`--test-assemble`)
- `preview.html` links live Tahoe CSS (`syn.scotomaville.com` skin)
- Watcher: `images_approved` → assemble; state → **`assembled`**
- Live packet `what-outlives-me` verified

### Gate 1 panel-of-4 (2026-06-17, verified 2026-06-18)

- `image_gen.panel_count: 4`, xAI `n` parameter
- 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

1. Read this file
2. `git status` / tail `syn_pipeline.log` if debugging
3. Read target packet `status.yaml`
4. Build **one** backlog item — no drive-by refactors
5. Update this handoff when a milestone ships

---

*Updated by Grok Build · 2026-06-18 · 2.5 assemble shipped.*