# Decisions Log
> Auto-extracted from conversations. Updated by fact extraction process.

## Technical Decisions

- **PM2 over systemd for Symph Agency** — zero-downtime reloads, ecosystem.config.js — [source: team decision, 2026-02-06] [confidence: high]
- **File-based memory over Mem0/Supermemory** — no migration needed yet, revisit at 10+ agents — [source: team discussion, 2026-02-10] [confidence: high]
- **Auto-thread + require-mention for #aria channel** — better conversation management — [source: Raven, 2026-02-10] [confidence: high]
- **Port-based app management** — caddy-ports.json is single source of truth, no PID files — [source: team decision, 2026-02-08] [confidence: high]
- **HTTPS over SSH for large git pushes** — SSH times out on repos >50MB — [source: learned, 2026-02-08] [confidence: high]

## Process Decisions

- **Subagent pattern for heavy heartbeat tasks** — heartbeat stays lean, spawns subagents for heavy work — [source: Raven, 2026-02-10] [confidence: high]
- **Human gates between every pipeline phase** — no auto-advancing — [source: team decision, 2026-02-03] [confidence: high]
- **All timestamps in GMT+8** — Symph is Philippines-based — [source: team standard] [confidence: high]

## Business Decisions

- **Approved models only:** Opus 4.6, Opus 4.5, Sonnet 4.5, Haiku 4.5 — [source: Dave, 2026-02-09] [confidence: high]

## Alignly Cloud Run Decisions

- **`NEXT_PUBLIC_*` = build-time args; Firebase Admin vars = runtime-only** — prevents Firebase Admin from initializing at build time (no env vars available) — [source: session, 2026-02-25] [confidence: high]
- **Alignly deployed standalone** — `output: 'standalone'` in `next.config.ts`, `Dockerfile` + `cloudbuild.yaml` + `deploy-prod.sh` committed — [source: session, 2026-02-25] [confidence: high]
- **gcloud builds submit with `--substitutions`** for alignly — substitutions string saved at `/tmp/alignly-subs.txt` — [source: session, 2026-02-25] [confidence: high]

## Build Process Decisions (2026-02-24)

- **build-orchestrator DEPRECATED** — removed 2026-02-24 by Ed; new standard is CLAUDE.md per product + global Claude skill; Claude Code reads CLAUDE.md automatically — [source: Ed, 2026-02-24] [confidence: high]
- **CLAUDE.md mandatory before any build spawn** — contains design system, brand, tech requirements; score target B grade (70+); generator: `skills/build-orchestrator/scripts/generate-claude-md.sh` — [source: session, 2026-02-24] [confidence: high]
- **Any coding task from Discord MUST use Claude Code** — no inline edits, no generic subagents for coding; even "quick fixes" go through Claude Code — [source: Ed, 2026-02-26] [confidence: high]

## Video Generation Decisions (2026-02-24)

- **Two-stage video pipeline**: Stage 1 = Veo for cinematic visuals (text stripped from prompts); Stage 2 = ffmpeg/Pillow burns captions + CTA + URL; text-only failures skip to Stage 2, never retry Veo for text — [source: loewe, 2026-02-24] [confidence: high]
- **80/100 confidence threshold** before surfacing video to human review — [source: loewe, 2026-02-24] [confidence: high]
- **Video QA discriminator architecture**: D1 SceneCardReviewer → D2 FrameDiscriminator → D3 VideoCritiqueRouter + VeoPromptSanitizer bridge → Temporal TemporalCoherenceChecker → L4 VideoL4SceneFidelity → L5 VideoL5PlatformFit — [source: session, 2026-02-24] [confidence: high]
- **B4 Brand Identity → POST_PROCESS** (not REGENERATE) — video frames don't have logos; logo burn-in happens in Stage 2 — [source: loewe debugging, 2026-02-24] [confidence: high]

## VectorPM Social Media Rules (2026-02-24)

- **ALWAYS add voiceover to all VectorPM reels** — Nova voice, scene-synced; never deliver a reel without it — [source: James Kuizon, 2026-02-24] [confidence: high]
- **Never mention competing products** (Slack, etc.) in VectorPM copy — [source: James Kuizon, 2026-02-24] [confidence: high]
- **VectorPM post timing**: Monday Drop @ 8:30 AM PHT; Reel @ Wednesday 9 AM PHT — [source: James Kuizon, 2026-02-24] [confidence: high]
- **NEVER invent stats in marketing copy** — always use real data or soft language ("teams move faster") — [source: James Kuizon correction, 2026-02-24] [confidence: high]

## App Process Architecture Decisions (2026-02-24)

- **app-manager v4.0 as single entry point** for ALL app starts (Symphony UI, subagent skills, CLI); `pm2 start npm --name "$slug" --stop-exit-codes 98`; skills updated to call `app-manager start {slug}` — [source: Jim session, 2026-02-24] [confidence: high]
- **Worktree dev servers → PM2 supervised** — `app-manager start-ephemeral` replaces nohup; PM2 name pattern `wt-<short-ts>-<user>`; independent from Symphony PM2 lifecycle — [source: Jim session, 2026-02-24] [confidence: high]

## CIP Project Decisions

- **Option A: Full migration to insights layer** — entities+events canonical model, rewire Send Money + n8n workflows — [source: Ben, 2026-02-10] [confidence: high]
- **No manual migration scripts** — use Drizzle schema + `drizzle push` for force-sync instead — [source: Ben correction, 2026-02-10] [confidence: high]
- **Phase 1 Claude Code migration launched** — task: customers→entities, activities→events, transactions→events; dual-writes in activities and transactions services — [source: team decision, 2026-02-10] [confidence: high]

## WanderKit Batch I Architecture Decisions (2026-02-26)

- **Packing List personal per user (#139)**: `Record<userId, ClothingItem[]>` on trip doc — [source: Tom, 2026-02-26] [confidence: high]
- **Activity privacy model (#140)**: `isPersonal: boolean` + `createdBy`; Owner/Editor gets Choice Modal; View-Only straight to Personal Private; Firestore rules enforce creator-only write/delete — [source: Tom, 2026-02-26] [confidence: high]
- **Documents subcollection (#141)**: `trips/{tripId}/documents/{docId}`; collapsible groups; search; upload/delete — [source: Tom, 2026-02-26] [confidence: high]
- **Destructive action dialogs**: Use regular `Button` (NOT `AlertDialogAction`) — AlertDialogAction auto-closes before async op completes — [source: session, 2026-02-26] [confidence: high]
- **Full PWA including Layer 3 (offline write/sync) in Batch I** — Tom wants it included even if last, not deferred — [source: Tom, 2026-02-26] [confidence: high]
- **alert-dialog stays centered modal only** — no swipe-to-dismiss on destructive confirms — [source: session, 2026-02-26] [confidence: high]

## Alignly Auth Decisions (2026-02-26)

- **Google Sign-In parked on Alignly** — button hidden with `{false && ...}` wrapper; all code preserved; re-enable by removing `{false &&}` wrappers in login + signup pages — [source: Med, 2026-02-26] [confidence: high]
- **signInWithRedirect preferred over signInWithPopup** — popup blocked in Cloud Run / some browser environments; redirect pattern with `getRedirectResult` is the fix — [source: session, 2026-02-26] [confidence: high]
- **Auto account-linking endpoint**: `POST /api/v1/auth/merge-google-account` — when Google email matches existing email/password account, merges to original UID, deletes orphaned Google user — [source: session, 2026-02-26] [confidence: high]

## ReadStreak Auth Decisions (2026-02-26)

- **iOS Safari → signInWithRedirect; Desktop → signInWithPopup** — iOS Safari blocks cross-origin popup postMessage — [source: session, 2026-02-26] [confidence: high]
- **`window.location.replace` not `router.push` for post-auth nav** — hard nav ensures middleware sees fresh `rs_auth` cookie — [source: session, 2026-02-26] [confidence: high]
- **`getRedirectResult` must be called in `useEffect`** — handles redirect return explicitly, not just `onAuthStateChanged` — [source: session, 2026-02-26] [confidence: high]

## Marketing QA Architecture Decisions (2026-02-26)

- **`brandless_mode=True` for lifestyle_photo asset generation** — B4 brand identity L1 failures become soft-warnings; L2-5 remain blocking — [source: session, 2026-02-26] [confidence: high]
- **Reuses `_is_video_frame_soft_failure()` heuristic** for brandless detection — no duplicate regex patterns — [source: session, 2026-02-26] [confidence: high]
- **Pre-flight check needed before batch generation** — validate brand-reference.json entry + style fragment exists before starting; any new product needs these — [source: session, 2026-02-26] [confidence: high]
- **Layer2BrandCompliance should reload brand-reference.json on UNKNOWN_PRODUCT** — stale in-memory cache caused DinQ to fail even after brand-reference was updated — [source: session, 2026-02-26] [confidence: high]

## Johndorf Pricing (confirmed by Gee, 2026-02-26)

- **Basic Suite**: ₱900/user/month — 2 fixed modules, 16 feature requests/year, hosting + 500GB — [source: Gee, 2026-02-26] [confidence: high]
- **Module Add-on**: +₱50/user/month per additional module (1=₱950 up to 5=₱1,150); at 6+ → recommend Fluid — [source: Gee, 2026-02-26] [confidence: high]
- **Fluid**: ₱1,200/user/month flat — unlimited modules, unlimited feature requests — [source: Gee, 2026-02-26] [confidence: high]
- **Fluid price is ₱1,200 NOT ₱1,500** — explicit Gee correction — [source: Gee correction, 2026-02-26] [confidence: high]

## The Agency Visual Language (locked spec, Alex 2026-02-26)

- **MODE**: Dark backgrounds ONLY — [source: Alex, 2026-02-26] [confidence: high]
- **COLORS**: Pure B&W + faint blue-gray; NO accent colors at all — [source: Alex correction, 2026-02-26] [confidence: high]
- **TYPOGRAPHY**: Inter — confirmed safe default for The Agency social posts (Alex, 2026-02-26). Geist origin unknown; Inter aligns with Jarrhey's core brand guidelines. [confidence: high]
- **TEXTURE**: Subtle blueprint grid every slide/asset — [source: Alex, 2026-02-26] [confidence: high]
- **ACCENTS**: ONE hand-drawn element per asset max — [source: Alex, 2026-02-26] [confidence: high]
- **OWNABLE**: White `•` after key statements; ghosted A lettermark 10-15% opacity every slide/asset — [source: Alex, 2026-02-26] [confidence: high]
- **A MARK**: Bleeds off edge (T2 Crop Hero) for ads/hero posts; ghosted 10-15% for cards — [source: Alex, 2026-02-26] [confidence: high]

## ContentVane Infrastructure Decisions (2026-02-25)

- **GCP Load Balancer over Firebase Hosting**: Firebase Hosting domain API failed; GCP LB with static IP used instead — [source: session, 2026-02-25] [confidence: high]
- **cert-v3 bare domain only** (`contentvane.com`) to unblock HTTPS while `www` DNS propagated — [source: session, 2026-02-25] [confidence: high]
- **No HTTP→HTTPS redirect on root URL map** during ACME cert validation (Google needs port 80 clear) — [source: session, 2026-02-25] [confidence: high]
- **Serverless NEG → backend service → URL map → HTTPS proxy → forwarding rule** architecture — [source: session, 2026-02-25] [confidence: high]

## Sales CRM Decisions (2026-02-25)

- **HTTP-only deployment for crm.dev.apps.symph.co** — LE rate limit blocked HTTPS; Caddyfile uses `http://` prefix explicitly, `NEXTAUTH_URL` set to http; will auto-provision HTTPS when rolling 7-day LE window resets — [source: session, 2026-02-25] [confidence: high]
- **AUTH_TRUST_HOST=true in `.env.local`** for NextAuth v5 behind Caddy reverse proxy (UntrustedHost error) — [source: session, 2026-02-25] [confidence: high]
- **Role access pattern**: Reps see only assigned companies; managers/admins see all — API-enforced — [source: session, 2026-02-25] [confidence: high]
- **Search: ILIKE over Postgres FTS** (prefix matching works at internal scale) — [source: session, 2026-02-25] [confidence: high]
- **Max 3 tasks per PR** (2 is sweet spot); Ian does own QA; fixes all reviewer feedback in one pass — [source: session, 2026-02-25] [confidence: high]
- **Edit company reuses `<AddCompanySheet>`** with optional `company` prop (PUT vs POST) — [source: session, 2026-02-25] [confidence: high]

## Brandcast TTS Decisions (2026-02-25)

- **TTS provider fallback chain**: ElevenLabs → OpenAI TTS-HD → Edge TTS (free local); auto-upgrades when better provider key is added — [source: loewe session, 2026-02-25] [confidence: high]
- **Remotion as compositor**: `<Video>` (Veo B-roll) + `<Audio>` (TTS MP3) + brand overlays + text in one React render pass — [source: loewe session, 2026-02-25] [confidence: high]
- **Phase 1 via ffmpeg mux**: audio muxed into each Veo clip; Phase 2 via Remotion — [source: loewe session, 2026-02-25] [confidence: high]

## Marketing QA Decisions (Xian, 2026-02-25)

- **Campaign intent required (or inferred)**: objective + targetAudience + campaignContext must be present on every generation request; auto-inferred if absent — [source: Xian, 2026-02-25] [confidence: high]
- **Learning from QA review actions**: approve_override/reject/fix_triggered/regenerate actions log to per-product `qa-learnings.json`; feeds back as generation hints — [source: Xian, 2026-02-25] [confidence: high]

## Worktree Preview Proxy Decision (2026-02-25 — designed, not yet implemented)

- **Single proxy subdomain `wt-preview.dev.apps.symph.co`** to replace per-session Caddy subdomains (LE rate limit hit: 149 certs, 76 this week) — [source: session, 2026-02-25] [confidence: high]
- **Architecture**: Node.js proxy on port 4200; first request `?s={sessionId}` sets `wt_session` cookie → proxies to `localhost:{devServerPort}`; subsequent iframe requests use cookie — [source: session, 2026-02-25] [confidence: medium]
- **SameSite=None; Secure required** on `wt_session` cookie for cross-origin iframe — [source: session, 2026-02-25] [confidence: high]
- **Pure Node.js built-ins only** (no `http-proxy` npm): `node:http`, `node:net`, `node:url`, `node:fs` — [source: session, 2026-02-25] [confidence: high]

## The Agency Social Post Design System (locked spec, Alex 2026-02-26)

- **10 templates (T1-T6) with 2 variants each for T2/T3/T5/T6** — [source: Alex, 2026-02-26] [confidence: high]
- **Gradient (purple→pink→orange): text only, max 2 posts/week + 1 carousel cover; NEVER fills/backgrounds** — [source: Alex, 2026-02-26] [confidence: high]
- **Layout**: upper ~45% decorative zone; category label at ~45%; headline + copy in bottom half; three-dash separator above logo — [source: Alex correction, 2026-02-26] [confidence: high]
- **Apple Premium variant explicitly NOT part of system** — one-off direction only, no future replication — [source: Alex, 2026-02-26] [confidence: high]

## SWEFC Design Decisions (raff, 2026-02-26)

- **Editorial/human design**: left-aligned asymmetric two-column (40% text / 60% photo); photo must look native Filipino; NO overlay gradient on photo — [source: raff, 2026-02-26] [confidence: high]
- **Build ONLY the hero** at `/v2` route — nothing else on the page — [source: raff, 2026-02-26] [confidence: high]

## GalaGrid Decisions (2026-02-26)

- **Waitlist listings inactive by default** — `waitlist.service.ts`: `is_active` defaults `false` — [source: session, 2026-02-26] [confidence: high]
- **Photo upload required if `allowFacebookPhotos` unchecked** — up to 3 photos, uploads to Supabase Storage `service-images` bucket at `waitlist/{email}/{timestamp}-{filename}` — [source: session, 2026-02-26] [confidence: high]
- **Public `GET /services` defaults to `isActive: true`** — hides inactive listings from public; admin endpoint unaffected — [source: session, 2026-02-26] [confidence: high]

## Adulting.Ph — Pending Decisions (2026-02-26)

- **Pivot question unresolved**: push notifications vs. todo-list UX direction — **pending raff decision** — [source: session, 2026-02-26] [confidence: high]

## Alignly GloryReborn Architecture Decisions (2026-02-26)

- **Hard fork from base Alignly** — NOT a branch or tenant; fork repo: `SymphonyAgents/alignly-gloryreborn` (private); upstream sync policy: cherry-pick UI/UX fixes as needed, no automated sync — [source: Med, 2026-02-26] [confidence: high]
- **Firebase project isolated**: `symph-alignly-gr` — completely separate from base Alignly `symph-alignly` — [source: session, 2026-02-26] [confidence: high]
- **Shift date = START date always** — midnight crossover fix (Sprout's main bug that GloryReborn migrates away from) — [source: session, 2026-02-26] [confidence: high]
- **Night diff**: 22:00–06:00 standard PH, 10% uplift, pure compute function — [source: session, 2026-02-26] [confidence: high]
- **Late deduction: OFF by default** (GloryReborn policy) — configurable toggle — [source: session, 2026-02-26] [confidence: high]
- **Leave monetization: VL-only by default, SL forfeited** — safe PH Labor Code default — [source: session, 2026-02-26] [confidence: high]
- **Gov contrib tables seeded in Firestore as data** (not hardcoded) — updateable without a deploy — [source: session, 2026-02-26] [confidence: high]
- **Biometrics (Chunk 5.2) PARKED** — need to know GloryReborn's device brand; add Q16 to GR-CLARITY.md — [source: session, 2026-02-26] [confidence: high]
- **Xero (Chunk 5.1) PARKED** — needs Xero app + client's chart of accounts — [source: session, 2026-02-26] [confidence: high]

## Wingman — Core Architecture Decisions (2026-02-26)

- **Turn-based message passing for A2A** — Agent A generates → Agent B receives + responds → loop; sequential LLM inference; both agents hold full conversation history — [source: JedAI/cyberblaze007, 2026-02-26] [confidence: high]
- **Both humans listen to full conversation in real-time** — stream token-by-token → TTS sentence-by-sentence; two distinct voices (one per agent) — [source: session, 2026-02-26] [confidence: high]
- **Between-turn, side-channel instruction buffer (per human)** — each human has their own buffer; feeds only their agent; agent checks buffer at START of its turn, incorporates + flushes after use; neither human sees other's instructions; agent never reveals it received one — [source: session, 2026-02-26] [confidence: high]
- **MVP intervention simplification**: between-turn only (no mid-generation interruption); free-form text input; all queued instructions honored in order; agents always follow instructions (no discretion logic for MVP) — [source: session, 2026-02-26] [confidence: high]
- **Dual user model (B1)**: Stated Model (onboarding) + Revealed Model (A2A behavior) = Living User Model; self-perception vs revealed behavior gap → silent weight adjustment (MVP), user-facing nudges (post-MVP) — [source: session, 2026-02-26] [confidence: high]
- **Two agent personas (B2)**: Inward (how agent talks to user) + Outward (how agent talks to other agents); outward must be authentic — no fabrication, strategic framing only — [source: session, 2026-02-26] [confidence: high]

## Symphony — Logo Generation Standing Rules (Ed, 2026-02-27)

- **Redesign Logo flow = nano-banana-pro via brand-guidelines.md context** — reads brand-guidelines.md + preview.json to enrich prompt; calls nano-banana-pro (Gemini); saves as `logo.png`; updates preview.json. Confirmed working as of 06:27 UTC 2026-02-27 — [source: Ed standing instruction, 2026-02-27] [confidence: high]
- **Same flow applies when logo generation is requested in chat** — not just via button; logged in error-log.md — [source: Ed, 2026-02-27] [confidence: high]
- **logo-generator SKILL.md = agent workflow ONLY** — questionnaire + research + 3-5 concepts + human selection via Discord; cannot be called from API route directly; route adapts the core generation logic for synchronous button-click UX — [source: Ed, 2026-02-27] [confidence: high]

## Symphony — Build Standards (updated 2026-02-27)

- **REMOVE `turbopack: {}` from next.config.mjs** — Turbopack breaks production builds with @google-cloud/dns, archiver, dnd-kit, monaco-editor; add `--webpack` to build script in package.json instead — [source: Ed session, 2026-02-27] [confidence: high]
- **`serverExternalPackages` alone is NOT sufficient for Turbopack** — full exclusion requires removing turbopack + forcing webpack — [source: Ed session, 2026-02-27] [confidence: high]

## Encore — Multi-User + Invite Architecture Decisions (2026-02-27)

- **Ragan's standing rule**: deploy to Cloud Run immediately after every commit to Encore — no batching, no waiting — [source: Ragan, 2026-02-27] [confidence: high]
- **`effectiveOrgId = orgId || userId` pattern**: backwards-compat with pre-org users whose data is under `userId`; all Firestore libs use this — [source: session, 2026-02-27] [confidence: high]
- **New org auto-created on first sign-up** — `resolveOrg()` in auth-context; if invite token in `sessionStorage`, joins invited org instead — [source: session, 2026-02-27] [confidence: high]
- **Invite flow is Firestore-backed** — tokens expire 7 days, status: pending/accepted/expired, duplicate prevention built in — [source: session, 2026-02-27] [confidence: high]
- **Support stat cards redesign**: removed SLA Compliance + CSAT Score (fake data with no real source); replaced with Resolved This Month + Avg Resolution Time (computable from real Firestore ticket records) — [source: session, 2026-02-27] [confidence: high]
- **White-label CNAME target**: `encoreclients.com` — any custom domain must CNAME to this — [source: session, 2026-02-27] [confidence: high]

## WanderKit PWA Offline Architecture Decisions (2026-02-27)

- **Dashboard as SW app-shell fallback**: if exact URL not cached in RUNTIME_CACHE, falls back to cached `/dashboard` before serving OFFLINE_HTML — [source: session, 2026-02-27] [confidence: high]
- **`start_url: "/dashboard"` limitation accepted**: only affects new/reinstalled PWAs; existing installs keep old behavior — [source: Tom, 2026-02-27] [confidence: high]
- **Proactive caching fires only when `navigator.onLine === true`** (guarded) — [source: session, 2026-02-27] [confidence: high]
- **Never-logged-in offline (Case A) shows OFFLINE_HTML** — accepted, no data to show — [source: session, 2026-02-27] [confidence: high]

## Engineering Standards — Next.js Version Policy (Raven, 2026-02-26)

- **Always use `next@latest`** — no pinning to specific versions; run `npm install next@latest` as part of every new app setup and every dependency update pass — [source: Raven, 2026-02-26] [confidence: high]
- **CVE-2025-29927 (CVSS 9.1)**: Affects Next.js versions < 15.2.3 — found 9+ Symph apps on vulnerable versions; enforcement is mandatory — [source: Raven, 2026-02-26] [confidence: high]
- **CVE-2025-29927 PATCHED** (Antonio, 2026-02-27): symph-agency + symphos-v2 live-patched to 16.1.6; hoa-solution, image-recognition-platform, tournament-hub PRs merged; centree, roundsave, running-fitness-tools, aria-dashboard, alignly-app, symph-agency-dev, symph-base, encore patched (stopped apps — will use 16.1.6 on next start). symphos-v2 branch `security/next-cve-2025-29927` awaiting manual PR merge. — [source: Antonio session, 2026-02-27] [confidence: high]
- **web-app-builder skill + coding standards must enforce `next@latest`** at creation time — no exceptions — [source: Raven, 2026-02-26] [confidence: high]

## VectorPM Positioning Strategy (2026-02-28)

- **Launch strategy: "Build horizontal, launch vertical"** — VectorPM is horizontal PM tool but launches targeting construction teams specifically; expand to other verticals once construction niche is proven — [source: James Kuizon discussion, 2026-02-28] [confidence: high]
- **Construction wedge messaging**: "Your projects have phases. Your PM tool should too." — lead headline; "Finish on time. Every phase, every handoff, every time." — outcome variant — [source: session, 2026-02-28] [confidence: high]
- **No competitor names in VectorPM copy** — Confirmed again 2026-02-28; drop challenger/comparison angle entirely — [source: James Kuizon, 2026-02-28] [confidence: high]

## Alignly GloryReborn Firebase Setup (2026-02-28)

- **Firebase reset email Action URL**: `alignly-gr.dev.apps.symph.co/reset-password` (custom domain, not firebaseapp.com default) — [source: session, 2026-02-28] [confidence: high]
- **Reset email branding**: sender = "Glory Reborn", subject = "Reset your Glory Reborn password", dark header branded template — [source: session, 2026-02-28] [confidence: high]

## Worktree Preview URL Security (2026-02-28)

- **Worktree preview URLs are public** — `rapidbuild.dev.apps.symph.co/?s=<sessionId>` is accessible to anyone with the session ID; no auth gate; Jim flagged this as a security concern 2026-02-28 — [source: Jim question, 2026-02-28] [confidence: high]

## InsureNow Product Flow (2026-02-28)

- **InsureNow onboarding flow**: Create in Symphony first (`symphony.symph.co`) → share product slug → Aria clones Lovable codebase into product repo and adds backend/payments — [source: session, 2026-02-28] [confidence: high]

## fashion-travel Product — StyleCast Discovery (2026-02-28)

- **Product name**: StyleCast — "Dress for the weather. Dress for the moment." — fashion + weather solution — [source: discovery pipeline subagent, 2026-02-28] [confidence: high]
- **Product slug**: `fashion-travel`; all 10 discovery artifacts generated at `/home/aria/products/fashion-travel/discovery/` — [source: session, 2026-02-28] [confidence: high]
- **Concept**: Space-in-mind — deciding what to wear everyday based on weather and current styles — [source: job processor session, 2026-02-28] [confidence: high]

## Video Pipeline — QA Gate Accountability (loewe correction, 2026-02-28)

- **When Vertex AI QA returns 403/errors, must flag explicitly before delivery** — do not deliver clips where QA gate could not complete; loewe correction: "should have flagged it harder before delivery" — [source: loewe, 2026-02-28] (updated existing QA gate bypass risk note) [confidence: high]

## Brandcast — Video Pipeline Runway Study Decision (2026-02-28)

- **Decision**: Study RunwayML principles but do NOT integrate Runway API — apply principles (character sheet, end-frame chaining, lighting consistency) to existing Veo + Gemini + Remotion stack. No extra API costs or dependencies. — [source: loewe, 2026-02-28] [confidence: high]

## Trussfolio — V1 Scope Decisions (2026-02-28)

- **JV licensed contractors excluded from V1**: V1 covers ~18,584 contractors; JV (Joint Venture) licenses are V2 scope — affects search/index size — [source: prd docs, 2026-02-28] [confidence: high]
- **No CAPTCHA in V1**: Rate limiting handles abuse via IP-based rules; CAPTCHA not in scope for initial launch — [source: edge-cases doc, 2026-02-28] [confidence: high]

## Nestiq — Home Inventory Feature (2026-02-28 evening)

- **Feature requested**: Home Inventory — track household items with AI-assisted text input (natural language → structured item), location tagging (room → storage spot), search + filter — [source: jhaisalcedo via #product-development, 18:21 UTC 2026-02-28] [confidence: high]
- **Build approach**: Claude Code spawned to build — Firestore schema + security rules, AI parsing route, inventory page, nav integration in AppShell — [source: session, 2026-02-28] [confidence: high]
