FlowHunni Veo Flow Extension v0.10.45
Artifact: SINGLE PRODUCTION ZIP
Phase: v0.9.9 STABLE-GAIA — v0.8.43 lifecycle + Gaia cookie import on flow.google.com; zero-oops generation gate (self-heal + fail-open), Version Controller and X-FlowHunni-Extension-Version self-report retained
Open contract: 1 click = 1 /app-session/open attempt (MAX_OPEN_ATTEMPTS = 1); no automatic re-open loop
Landing watch: soft, URL-only (flow.google.com/about or Google sign-in page, tab complete, 2 polls); 1 same-session navigation retry, then calm screen + close reason landing_logged_out; URL unavailable = fail-open; never acts mid-session
Build ID: fh-prod-v0.10.45-2c38b2bc430d4a8562bcdc5b
Server/API: guarded device-binding login, bootstrap, dirty-disable lock, and verified manual logout; existing heartbeat contract retained; extension block on overview/open/heartbeat tolerated when absent
bfcache defense: declarativeNetRequestWithHostAccess static rule sets Cache-Control no-store on flow.google.com main_frame; Back = full reload, never a live restore; no automatic tab reloads
Restore-race defense: pageshow persisted re-locks synchronously before revalidation; UI paint gate is fail-closed (hidden until entitlement confirmed)
Generation gate: MAIN-world acquire self-heals policy (awaited refresh + one retry) then FAILS OPEN with diagnostics — no in-fetch throw or XHR abort for legitimate flows; paid-model and >1080p upscale key blocks retained; plan limits remain server-enforced
Version controller: retired_blocked gates before session open (no pool account consumed); update_available banner is popup-only, notify-controlled, per-version dismissible
Lower Priority UI: exact LP-only, virtualized-list scroll discovery, progress-aware inactivity watchdog, manual-scroll coexistence, and no plain-Lite fallback
Provider cookies: trusted-context crash checkpoint only until injection; values never logged and checkpoint is cleared on completion
Cookie import: open-time only — clear Google scope + flow.google.com site data, pass-through inject with server attributes, verify-after-set; release removes exact extension-owned identities
Usage journal: chrome.storage.local crash-durable lifecycle; secrets and prompts excluded
Control cycle: one-minute overview, reconciliation, heartbeat order on existing routes
Idle/background: 15-minute Flow idle, 30-minute background grace, active-job protection
Cookie continuity: zero mid-session cookie writes — Google rotation is the only writer; heartbeat bundle_updated/updated_cookies/bundle_fp are audit-only; mid_session_cookie_writes diagnostic counter
Session protection: DNR session rules block Google sign-out, add-account, account-chooser and myaccount pages only while a session exists; removed on release; Set-Cookie never stripped
Cookie change observer: managed identities are observed only — never re-set, re-clamped or retired mid-session
Close reason: /app-session/close carries a sanitized reason ([a-z0-9_-], max 80; server preserve reasons prefixed ext_)
Page-world hardening: common foreign-extension document.cookie and Cookie Store access is best-effort denied; privileged chrome.cookies access remains outside this boundary
Pending close backstop: 22 minutes without active work, 122 minutes when active work existed at close
Sticky close: last-tab close allows one 90-second same-assignment reconnect before automatic release
Dead-man: one-second local runtime identity check locks the page, requests worker tab-close while alive, and navigates orphaned Flow pages to an inert locked screen
Message boundary: exact extension ID, popup/Flow sender, active tab binding, schema, age, size and replay checks
Risk preflight: exact cookie-tool IDs plus cookies and broad Google host capability pair; owner allowlist preserved
Native exit: secure cleanup precedes browser disable/uninstall confirmation
Install types: development, normal, admin
Distribution: flowhoney.com ZIP, permanent folder, Developer Mode, Load unpacked
Build: deterministic, minified, obfuscated, no source maps, no remote code, binary integrity metadata included
Obfuscation budget: 1139279/453865 bytes (2.510x)
DOM query budget: 30 querySelectorAll call sites; wildcard hot scans zero
Client-side integrity is deterrence and fail-closed policy, not a substitute for server enforcement
