# Session summary — 2026-05-05 late evening

Continuation of the earlier evening summary. Everything below is **net-new** work since 18:30.

## TL;DR

- **Bia HyperFrames groundwork shipped** — Day 1 + Day 2 of Phase 1 task #15 done. She can iterate with you NOW on motion infographics, not just static carousels.
- **Brand typo fixed** (`jaoa → joao`).
- **Tony Simons' Operator Guide ingested** — 2 hygiene rules captured (workspace discipline, profile-name verification), 5 patterns confirmed already-correct.
- **Concierge cf_crawl pivot scope corrected** — I had it wrong earlier. CF can't replace the Booking Extranet whitelist (different concern). It CAN unblock the 3 currently-disabled JS-rendered event sources.
- **plur-hermes seeded** with 10 core engrams (your preferences, brand rules, scope) — now persistent across container recreations.
- **rtk-hermes verified compressing** at 78% on `ls -la`. Watch the next long dev-gateway run.
- **Scrapling shared skill scaffolded** — pip baked, doc written, per-profile MCP wiring left for you.
- **Plan v2.11** written.

---

## What's now LIVE for Bia (motion content)

You said you wanted to iterate with Bia on real photos + brand-aligned infographics. The 1-day unlock is **done**:

1. **`/opt/data/profiles/social/scripts/regen-brand-css.py`** — Python adapter reading `brand-foundation.yaml` → emits `brand-foundation.css` with:
   - All design tokens as `:root` CSS variables (palette, fonts, type scale, spacing, canvas dimensions, safe areas, wordmark)
   - `.subbrand-relax` + `.subbrand-city` context classes (override primary color + chip + label per scene)
   - `.lsa-h1-hero` / `.lsa-h2-display` / `.lsa-body` / `.lsa-chip` etc. type-scale utilities
   - Imports Playfair Display + Montserrat Alternates from Google Fonts
2. **`/opt/data/profiles/social/render/hyperframes/story-card/`** — first HyperFrames composition:
   - 9:16 portrait, 5s
   - Property hero photo with Ken Burns (slow 1.0→1.12 zoom + 3% pan up)
   - Sub-brand chip top-left (fades in @ 0.3s)
   - Headline center (Playfair italic, rises in @ 0.8s)
   - Property name below headline (rises in @ 1.4s)
   - Wordmark + sub-brand label bottom (fade in @ 2.2s)
   - Body class swap (`subbrand-relax` ↔ `subbrand-city`) for full visual reskin
3. **Demo render**: https://artifacts.galhardo.cloud/bia-storycard-smoke-relax.mp4 (2.8 MB · 5s)

**What you can do with Bia today** via Telegram:

> "Bia, render a Story for Quinta da Capelinha using photo X, headline 'Where almond trees meet the ria', sub-brand relax."

She has the template + the brand-locked CSS + GSAP. Iterate with you on copy, photo selection, micro-timings. The brand discipline is enforced at the source — she can't accidentally use the wrong color or wrong type.

**What's still NOT ready** (Phase 1 task #15 remaining ~3 days):
- PromoCard motion (price-pill drop-in animation) — Day 3
- ReelCard composition (15-60s narrative) — Day 3
- Audio library wiring — Day 4 (waits on you to drop the 20-30 .mp3s in `data/profiles/social/audio/library/`)
- End-to-end Meta API smoke — Day 5

---

## Tony Simons Operator Guide — actionable insights

PDF processed ($\approx$5MB image-heavy, extracted via pdftotext). Full memo at `~/memory/operator_guide_insights_20260505.md`.

**Two rules to apply going forward:**

### 1. Kanban tasks producing files MUST set `--workspace dir:/abs/path`

Default scratch (`~/.hermes/kanban/workspaces/<task_id>/`) is **garbage-collected on archive**. Output disappears. We've never explicitly required this. Memo: `~/memory/feedback_kanban_workspace_discipline.md` with target paths per task type.

### 2. Verify profile name post-assign

`hermes kanban assign` returns exit 0 even on a typo — dispatcher then loops forever spawning workers for the nonexistent profile. Always run `hermes kanban show <id>` after assign.

**Five patterns Tony recommends — we already do them right** (per-profile isolation, file-based checkpoints, direct curl for Telegram, decision-making skills, parallel kanban fanout). Your instinct on rejecting war-room maps directly to his "if you're watching every turn, you're babysitting" principle.

**Things Tony's guide doesn't cover** (where we're ahead): persistent orchestrator (Maestro), structured human-gate workflow (GAL-109's 11 named gates with bridge timeouts), per-tenant kanban (`--tenant lsa`), per-agent cost attribution (cost-events.jsonl).

---

## Concierge cf_crawl pivot — corrected

**My earlier 17:30 note was wrong.** I said cf_crawl might replace the Booking Extranet whitelist. It can't — that whitelist is Booking.com's outbound-sender + link-domain compliance policy on **their** side (registers `info@livinstaysalgarve.com` + 11 approved link domains in their messaging-security settings). cf_crawl reads websites; it doesn't change Booking's inbox policy.

**Real cf_crawl fit for Concierge** (corrected):
- The 3 currently-disabled JS-rendered event sources in `sources.yaml` (viralagenda.com, eventos.visitalgarve.pt, cm-tavira agenda) need a JS-aware browser. cf_crawl drops the planned Scrapling+Playwright dependency. ~1h work after you provide `CLOUDFLARE_API_TOKEN` + `CLOUDFLARE_ACCOUNT_ID`.
- **Phase 6 quality enhancement**, not a Phase 1.5 go-live unblocker.

Detail: `~/memory/concierge_cf_crawl_pivot_20260505.md`. Concierge handoff doc remains accurate — your 3 prerequisites haven't changed (Resend DNS verify, Booking Extranet whitelist, V7 sign-off).

---

## plur-hermes — 10 core engrams seeded

Volume-mounted at `/root/.plur` for cross-recreation persistence. Engrams loaded:

1. EOM rollover anchor on tomorrow not today (Camila daily reports)
2. Property posts MUST be 5+ slide carousels with CTA
3. Never Twilio — voice via Telegram + Piper TTS + Whisper.cpp STT
4. Never publish Bia without explicit Joao approval
5. JG prefers terse, no trailing summary
6. All kanban tasks producing files MUST set --workspace
7. Crypto IS in scope at trading phases (don't auto-skip)
8. Bia primary motion = HyperFrames (Remotion fallback)
9. RevMan = read-only advisory, no state-changing tools
10. Concierge gated on 3 prerequisites — don't flip without explicit signal

Verify any time: ask any agent in Telegram "what's my PLUR status?" — should answer with engram_count: 10.

---

## Other items shipped

- **Brand typo** fixed in `brand-foundation.yaml` line 230 (`jaoa → joao`)
- **rtk-hermes intercepting** — verified compression on `ls -la` (3072 → 673 bytes, 78%). Watch wave2 dev gateway behavior over next long task.
- **Scrapling shared skill** scaffolded at `/opt/data/_shared/skills/scrapling/SKILL.md` (per plan §11.1). Pip lib baked in Dockerfile. Per-profile `mcp_servers:` wiring deferred to your call.
- **Dockerfile + compose hardened** — Node 22, all pip plugins (httpx/rtk-hermes/plur-hermes/scrapling), rtk binary, plur-mcp CLI all baked into image (durable across rebuilds). Compose adds `shm_size:512m` + named volumes `hyperframes_cache` + `plur_engrams` (durable across recreations).
- **Plan v2.11** written `/root/plan-fleet-evolution-v2.md` §19. Includes Bia unlock, Concierge correction, plur seeding, rtk verification, operator-guide hygiene rules.

---

## Tasks for you (carryover + new)

### From earlier session (still pending)

1. Open Themes tab at https://kanban.galhardo.cloud — confirm Montserrat looks right.
2. Drop env vars: `CLOUDFLARE_API_TOKEN`+`ACCOUNT_ID`, `SERPER_API_KEY` or `BRAVE_API_KEY`, `BFL_API_KEY`.
3. Decide on Maestro voice (design at `~/memory/maestro_voice_design_20260505.md`).
4. Watch rtk-hermes effect on next long dev task.
5. Concierge — Resend DNS, Booking Extranet whitelist, V7 sign-off.
6. Bia audio — drop .mp3s into `data/profiles/social/audio/library/`.

### New from this round

7. **Iterate with Bia in Telegram** on a real photo + brand-aligned StoryCard. Prompt: *"Bia, render a Story for Quinta da Capelinha using a sunset photo, headline 'Where almond trees meet the ria', sub-brand relax."* — see what the iteration cycle feels like. Tweak GSAP timings, Ken Burns intensity, etc. based on what looks right.
8. **Have Bia run the hospitality-comms research brief** (separate from #7 — just a research session, no rendering). Prompt: *"Research social media communication standards for hospitality. Focus: boutique stays, Algarve region, IG+FB, EN+PT audiences. Cover tone, cadence, photo discipline, infographic conventions, what works, what doesn't, top 5 references. Save to your memories."*
9. **Glance at plur engram contradictions** — system flagged 22 "tensions" between the 10 seeded engrams. Could be benign overlap; if you want to clean up, `plur tensions` (run inside container) shows them.
10. **(Optional)** When you decide on cf_crawl env vars, the 3 disabled JS event sources can flip on with ~1h wiring — gives Camila/Concierge a deeper event corpus.

---

## Verification commands

```bash
# everything alive?
docker exec hermes-agent-qykq-hermes-agent-1 hermes profile list | grep -c running   # → 7
docker exec hermes-agent-qykq-hermes-agent-1 plur status | grep engram_count           # → 10
docker exec hermes-agent-qykq-hermes-agent-1 rtk --version                              # → rtk 0.38.0
docker exec hermes-agent-qykq-hermes-agent-1 hermes skills list | grep -E "Skill Factory|hyperframes|flux-best-practices|bfl-api" | wc -l   # → 4
ls /docker/hermes-agent-qykq/data/profiles/social/render/hyperframes/story-card/index.html   # exists
ls /docker/artifacts/bia-storycard-smoke-relax.mp4                                          # exists
ls /docker/artifacts/hyperframes-smoke-warm-grain.mp4                                       # exists
```

Halt state preserved (Concierge cron + maestro flag + titan-mail off). Nothing reversed without your go.
