Home / Start Here / Project State
Updated Jun 26, 2026 · Affirmology_PROJECT_STATE.md
https://studio.affirmology.ai (app.json extra.apiBaseUrl), but that pretty domain is behind Cloudflare Access and returns a 302 HTML login wall to any non-browser/headless call (/api/* -> 302), so the app's auth never reaches the studio cleanly; a code emailed by one backend (cloud Postgres) can't verify against another (local sqlite affirmology-studio/data/consumer.db), and vice-versa. The LOCAL backend itself is healthy: jeff@jeffparker.love is invited + a founding person in consumer.db, RESEND is configured in affirmology-studio/.env, and a mint->verify round-trip over http://127.0.0.1:8765 returns ok:true (leading-zero codes included). FIXES: (1) added a dev-only echo to affirmology-studio/api/consumer.py auth_request -- when AUTH_DEV_ECHO is truthy it prints the code to the server console AND returns dev_code in the JSON (gated off by default; MUST stay unset on Render so beta testers always get email and codes never leak). (2) affirmology-atlas/.env (gitignored) now sets EXPO_PUBLIC_API_BASE_URL=http://192.168.1.153:8765 so the app talks to the laptop studio; app.json production default is untouched. The local studio was restarted on 0.0.0.0:8765 (agent venv python) with AUTH_DEV_ECHO=1, logs at /tmp/affirmology-studio-dev.log. OPEN/NEXT for production beta-tester email (item 4): the prod app base should be the raw https://affirmology-studio-api.onrender.com (the documented headless URL, returns 200), NOT the Access-walled studio.affirmology.ai; confirm Render has RESEND_API_KEY+FROM_EMAIL and that testers are in the CLOUD invite table.affirmology-demo-worker now routes demo.affirmology.ai/api/* to a demo bridge added to the cloud Studio (affirmology-studio/api/demo_render.py: /render-sacred-audio + /status, token-gated by DEMO_AUTH_TOKEN), which reuses the Studio's raw-birth -> script -> audio+QC+PDF -> R2 pipeline. Verified live end-to-end (POST demo.affirmology.ai/api/render -> 202 -> rendered in cloud, R2-hosted). The agents (Hermes) + audio hosting (R2, media.affirmology.ai) are also cloud-native; Cowork now reaches Hermes at https://affirmology-studio-api.onrender.com/api/hermes (bearer STUDIO_AUTH_TOKEN); the Tailscale funnel is RETIRED (CLAUDE.md "Interfacing from Cowork" updated to the cloud endpoint). THE OLD NATAL-WALK SPINE IS KILLED (Jeff's explicit call, demo lock lifted): the engine's rigid SCRIPT_SYSTEM_PROMPT is dead code (no path selects it). The foundational/demo audio now renders SCRIPT_SYSTEM_PROMPT_ORIGIN -- identity-first opening ("I am [name]" by sentence 2-3), strong aspirational hooks, shadow->gift body with astrology placements KEPT (Virgo Sun in the 8th) but Human Design gate/channel NUMBERS OUT (translated to felt qualities), "I am the one who…" declarations + three-noun title, the REQUIRED hand-on-heart breath + embodied-gratitude/coherence beat, open-loop close (never a CTA), ~3-4 min, Charlotte, Heavenly Circuit bed, QC. natal_sacred relabeled "Origin Soul Song", target 3.0 min. Council bug fixed: pipeline.run_script only runs --council when a directive/concept is present, so the no-directive demo uses the Origin formula (it was silently going through the FLEX/jargon path before). Gold approved Jeff script saved: CLAUDE OUTPUTS/Affirmology/Affirmology_OriginSoulSong_Jeff_ApprovedScript_v1.md. System of record for audio structures: Affirmology_AudioStructures_Tracker_v1.csv (golden value + status per parameter) + Affirmology_AudioStructures_Formula_and_WIP_v1.md. STANDING RULE: every Origin audio email to Jeff includes the golden script + the new script + a written audit, and the ACTUAL rendered script is verified (name present in the first ~3 sentences, ZERO HD gate/channel numbers) before sending. Keys: Cloudflare demo token in affirmology-studio/.env as CLOUDFLARE_DEMO_TOKEN (DNS + worker edit); Render API key drives deploys; Zoho email DNS for affirmology.ai all live. OPEN/NEXT: lock the Origin formula by ear, wire the proven 0.96 speed into the demo render path (currently the slower ~0.95 standard pace -> ~4 min), trim ~60 words toward the ~430-word gold; then The Mirror (9-11 min reading, Fish male "Dr. Young") + the PDF rework; Fish Audio for scaled production (demo voice stays ElevenLabs/Charlotte). NOTE: this supersedes the now-stale "## 4. Demo audio baseline (locked)" and "## 5. Demo backend (laptop)" sections below.resource-hub/. It indexes CLAUDE OUTPUTS/Affirmology IN PLACE (no files moved, the 2 hardcoded paths in hermes_tools.py + craft_seed.py untouched), so the FileOrg Phase 1/2 cleanup is now OPTIONAL and de-risked; the generated manifest is the ready catalog if a physical migration is ever wanted. NOW LIVE (2026-06-26, Claude Code on the Mac, deploy paste executed end to end): the hub is DEPLOYED + GATED at https://resources.affirmology.ai (Cloudflare Pages project affirmology-resources, 422 docs / 48 archived). The Cloudflare Access gate was put in FRONT before the custom domain: Access app "Affirmology Resources" with one Allow policy "Team allowlist" = exactly jeff@jeffparker.love + solballard@gmail.com + cjacobsandassoc@gmail.com (everyone else default-block); verified live (unauthenticated GET 302s to the Access login at weathered-feather-0bae.cloudflareaccess.com, no content served; dedicated TLS cert CN=resources.affirmology.ai active). The proxied CNAME resources -> affirmology-resources.pages.dev was created with CLOUDFLARE_DEMO_TOKEN (the wrangler OAuth + studio .env tokens lack DNS write; the Access app + custom domain were created with a one-off Access-scoped token Jeff pasted, since neither standing token has Zero Trust Access scope). The launchd 2-hour cron ai.affirmology.resourcehub is INSTALLED + loaded (RunAtLoad + every 7200s) and its regenerate->wrangler-deploy path is validated under a stripped launchd env; rebuild.sh was hardened to add Homebrew to PATH (launchd's minimal PATH would otherwise never find npx/wrangler). Incremental rebuild proven (edit 1 doc -> reprocessed 1, unchanged docs skipped). Cron relies on wrangler's stored OAuth login to deploy unattended (no .deploy_env needed; if Jeff ever logs wrangler out, the cron deploy step will fail until re-login OR a Pages-scoped token is dropped in resource-hub/.deploy_env). Paste-ready brief: Affirmology_ResourceHub_DeployPaste_v1.md. Generator + taxonomy in resource-hub/ (tune topics by editing resource-hub/clusters.json, no code). Original build brief: Affirmology_ResourceHub_BuildBrief_v1.md.origin_soul_song, optimized in a separate Code session) and new videos/graphics/investor pieces. natal_sacred is being KILLED everywhere (studio + palette + the demo render path if it uses it). It is fine to break the old demo. Everything is in draft mode. Keep changes committed so anything is recoverable from git. ALL CHATS/CODE SESSIONS: do not re-lock or protect the demo.affirmology-studio/api/growth_cron.py, written to run as a Render Cron Job "No laptop", never switched on); only the laptop launchd timer (com.affirmology.nightly.plist, meant for the un-set-up Mac mini) is live, which is why it stalls when the lid closes. JEFF GREENLIT moving the WHOLE corpus-wisdom build to the cloud (deploy growth_cron as a nightly Render Cron Job, push freshest corpus to R2 as canonical, retire the laptop launchd, load a WIDE identity roster not a few names + mine Substack as a Phase-2 source tier, identity-first, cost-capped). EXECUTED 2026-06-26 from Cowork via Render API + R2 (boto3), keys from affirmology-studio/.env + the Render service env. DISCOVERY: the cloud cron ALREADY EXISTED and was running nightly (Render cron affirmology-growth-nightly crn-d8quk8ugvqtc73e9na9g, 0 9 * * * UTC, R2 bucket affirmology-media key corpus/corpus.db); the "stalled" look was only because the LOCAL corpus.db Jeff saw was a stale Jun-21 snapshot while the cloud advanced daily; it only mined 6/night (default batch unset). DONE: (1) widened research_backlog +33 with a robust identity/transformation roster (Dan McAdams narrative identity, Bruce Ecker memory reconsolidation, Lisa Feldman Barrett + Andy Clark predictive brain, Rick Hanson, A.H. Almaas essence, Hal & Sidra Stone, Gendlin, Pat Ogden, Deb Dana, Janina Fisher, Fosha, Steven Hayes, Kristin Neff, Tony Robbins, Benjamin Hardy, Caroline Myss, Estes, Plotkin, etc.) + the "Is it true, or just familiar" Socratic craft line; (2) set GROWTH_PRACTITIONERS_BATCH=120 + GROWTH_PRACTITIONERS_MAX_COST_USD=5 on the cron; (3) triggered a manual run (job-d8vc83svikkc73ffgja0) that SUCCEEDED and cleared the whole backlog: research_backlog 143 done / 0 pending, practitioners craft 143, total craft 252; (4) DELETED the Mac's local corpus copies (corpus/corpus.db + 2 .bak) per Jeff = R2 is the SOLE source of record now (this intentionally breaks the laptop Hermes funnel's default local-corpus path so everything is forced onto the cloud; the cloud Studio/demo/render already read R2 and are unaffected). INTERFACE BUILT: Cowork scheduled task wisdom-corpus-daily-briefing (daily 08:02 local; /Users/jeffreyparker/Claude/Scheduled/wisdom-corpus-daily-briefing/SKILL.md) that pulls the corpus from R2 to /tmp (NEVER stores it on the Mac), writes a SYNTHESIS (what is useful + what NEW IDEAS it sparks, not a pull log), keeps its memory in R2 (reports/briefing_state.json), and is a chat Jeff can reply to in order to probe the corpus + add research leads (appended to the R2 backlog for the next run). Substack = a BROAD Phase-2 source tier (not limited by topic/modality), not built yet. NEXT: build the Substack source tier; consider re-pointing the engine default corpus path / laptop funnel to R2-only; Jeff can hit "Run now" on the briefing task for the first synthesis immediately. Named our identity model = ESSENCE-CONGRUENCE (chart reveals essence, install congruence; wedge = others make you guess your essence, we read it, so the identity is already yours and wires in faster). SHARED RESEARCH DOCS at project root for OTHER chats to search/pull/synthesize (these are feeders for Jeff's master docs + video chat, not finished creative): Affirmology_IdentityResearch_AuditAndMap_v1.html (the audit + the beladivine "Identity Shifting 101" reference mapped to our craft corpus + gaps + the 96-name roster + captured frameworks), Affirmology_IdentityNeuroscience_BrandStory_Synthesis_v1.md (copy-ready 18-to-254-day essence-congruence argument in multiple registers), Affirmology_InvestorVideo_EducationalSegment_v1.md (extracted teach-then-reveal education for the vision/investor video), Affirmology_BlueprintAsCharacter_Model_v1.md (CANONICAL model tying identity + transformation: blueprint casts the character, soul plays it, design schedules the ego-deaths/rebirths via Gene Keys sequences + Saturn returns; personalization holds BOTH the designed character AND the lived soul-state, learned via the chatbot + questionnaire discovery layer). CONCEPTS CAPTURED for later build: the "Transformation Architect" internal design agent (holds craft + install-rules, tests journey sequencing WITH Jeff, separate from Hermes); a dedicated NARRATIVE IDENTITY journey (real gap, worth a flagship build); reframing the witnessing/relationship layer (Constellation, invites) as identity-SOLIDIFICATION. Living tracker = the AuditAndMap HTML.CLAUDE OUTPUTS/Affirmology/BUILD-PROGRESS.md). PHASE 1 (shared foundation): new repo affirmology-shared/ (commit 81f0baa) is the ONE source for both apps (design system, UI kit, magic-link auth, API client, oracle faces, player, event queue); the consumer app affirmology-app/ was refactored to consume it as a git submodule at ./shared (commit a9c92e9) with NO regression (tsc clean, identical iOS bundle). The submodule lives UNDER each app root because Metro's node crawler (no watchman on this Mac) only resolves files under the root AND EAS only uploads the project tree; a sibling package + watchFolders was proven not to work. PHASE 2 (native Atlas): new repo affirmology-atlas/ (Expo SDK 56, bundle ai.affirmology.atlas, commits c2f1d5c + 621cf87) on the shared foundation: magic-link Login, the HERMES CREATION centerpiece (chat-primary + reachable controls panel + council "working" theater + co-creation quick-replies, wired to /api/hermes + /api/compose + /api/jobs + /api/audio), People (data-driven charts), Listening Room (/api/library play + Love/Needs-work/Approve + push), and an A/B Compare view. Structures/people are FETCHED from the backend (data-driven, no app release to change them). Verified: tsc clean, iOS export, expo-doctor 21/21. BACKEND (affirmology-studio commit d08c75f, Studio-only, additive, demo byte-untouched, LOCAL not pushed): creator roles (api/roles.py + GET /api/roles + soft compose gate behind CREATOR_ROLES_ENFORCED, off by default) and A/B variant groups (variant_group/variant_label columns + /api/jobs/{id}/variant + /api/variants/{group}); tests test_roles.py + test_variants.py; full suite 172 passed, 1 failed = the SAME pre-existing test_chart_cache nondeterminism. NEXT (with Jeff): seed the named starter palette as data (a script-content change), run Atlas in the Simulator once the Xcode license is accepted, wire the per-audio metrics as creation controls, flip CREATOR_ROLES_ENFORCED when the opt-in map is right, push the studio backend when ready. Jeff steps in BUILD-PROGRESS.md "FOR JEFF".CLAUDE OUTPUTS/Affirmology/OVERNIGHT-REPORT.md + MORNING-FOR-JEFF.md. BRIEF A (commit cdfc834 + email guard c765e99): consumer system-of-record + magic-link auth added to the affirmology-studio API (api/db.py, db_models.py per spec s10, auth.py, consumer.py /api/auth/ + /api/app/, consumer_chat.py guardrailed oracle with NO audio-creation tools, consumer_seed.py). SQLAlchemy with Postgres via DATABASE_URL and a SQLite FALLBACK (runs now without a live DB); tests tests/test_consumer.py 12/12. BRIEF C (NEW repo affirmology-app/, commit 20edcd3): Expo SDK 56 + TS + expo-router consumer app, bundle ai.affirmology.app; login/home/library/player/chat/feedback/report/profile; react-native-track-player (bg+offline+lock-screen) behind one src/player.ts seam; offline event queue; 17 oracle photos in assets/oracles (current names incl Sri Agastya). Verified without Xcode: tsc clean, expo-doctor 21/21, full iOS Metro export succeeds. BRIEF B (commit 9cfd62a): Atlas Capacitor wrap (affirmology-studio/atlas-capacitor, ai.affirmology.atlas, remote server.url) + web/atlas-login.html magic-link sign in (additive) + require_token also accepts a circle member's session gated by ATLAS_MAGIC_LINK (OFF by default = live Studio unchanged); tests/test_atlas_auth.py 7/7. Full studio suite 138 pass / 1 pre-existing chart_cache failure (unrelated). BLOCKERS for Jeff (all in MORNING-FOR-JEFF.md, none blocked the night): (1) create Render Postgres + set DATABASE_URL (billable plan choice + live redeploy, not auto-done); (2) install full Xcode + CocoaPods (this Mac has only Command Line Tools, so no Simulator run / iOS build / pod install); (3) Apple: App Store Connect app records, an ASC API key for EAS, testers, an APNs key; (4) Cloudflare Access relax + set ATLAS_MAGIC_LINK=1 when moving Atlas to magic-link. NEXT: install Xcode+pods, then next session launch the app in the Simulator + verify end to end; create the Postgres; publish a few audios via POST /api/app/publish (team token) so the founders have content.git works again (Xcode-bundled git 2.50.1); the old /Library/Developer/CommandLineTools/usr/bin/git workaround is no longer needed. Xcode 26.5 selected at /Applications/Xcode.app, xcodebuild -version clean. REMAINING gates before an actual iOS Simulator run of the RN apps: (1) CocoaPods is NOT installed (pod not found) needed for the native dev build (npx expo run:ios runs pod install) -> sudo gem install cocoapods or brew install cocoapods; (2) no iOS Simulator runtime appears installed -> open Xcode once and install an iOS platform/runtime (Xcode > Settings > Components), or xcodebuild -downloadPlatform iOS. Until then verification of the apps stays at tsc + expo export (both green).cd affirmology-agent && .venv/bin/pytest = 70 passed. Studio cd affirmology-studio && ../affirmology-agent/.venv/bin/python -m pytest = 162 passed, 1 failed = the SAME pre-existing test_chart_cache::test_determinism_cached_vs_fresh (documented aspect-ordering nondeterminism, unrelated). All C30/C31 engine changes vendored byte-identical into affirmology-studio/affirmology-agent. No em dashes. NOTE: run the studio suite with python -m pytest (not the pytest entrypoint) so the studio root is on sys.path for import api.CLAUDE OUTPUTS/Affirmology/Affirmology_AppArchitecture_Decision_v1.md (section 10 = Round 2; supersedes the Capacitor framing in Affirmology_AppDelivery_Plan_v1.md). Consumer spec: CLAUDE OUTPUTS/Affirmology/Affirmology_DeliveryApp_Spec_v1.md. GREENLIT 2026-06-24: Atlas LOGIN = MAGIC-LINK (final, Jeff). Backend start greenlit. BUILD BRIEFS WRITTEN: CLAUDE OUTPUTS/Affirmology/Affirmology_AppBuild_Briefs_v1.md = a paste-ready overnight Claude-Code package: a KICKOFF prompt + Brief A (lean Postgres system-of-record + magic-link auth, extending the existing affirmology-studio API; reuse /api/hermes, /api/library, /api/feedback), Brief B (Atlas Capacitor wrap + magic-link to TestFlight internal), Brief C (Affirmology consumer app in Expo/React Native, lean v1: magic-link login, data-driven library, react-native-track-player offline+background player, scoped oracle chat w/ avatars, feedback+notes+unrated-nudge, in-app report reading view, push). Guardrails baked in (don't touch locked demo, no em dashes, every audio chart-driven, verify w/ pytest + RN build, don't block on Apple/secrets -> log to MORNING-FOR-JEFF.md). Oracle face photos exist per Jeff but NOT in repo -> Code to ask for the folder, placeholders until then. Morning human-only steps: App Store Connect app records, signing/EAS API key, testers, APNs push key, Render Postgres DATABASE_URL if not auto-provisioned, oracle photos folder, relax Cloudflare Access on studio domain. NEXT: Jeff pastes the KICKOFF block into Claude Code on the Mac to run overnight; review OVERNIGHT-REPORT.md + MORNING-FOR-JEFF.md in the AM.CLAUDE OUTPUTS/Affirmology/OVERNIGHT-REPORT.md + MORNING-FOR-JEFF.md. BLOCKERS NEEDING JEFF: (1) install full Xcode + CocoaPods (this Mac has only Command Line Tools) to launch in Simulator -> TestFlight; (2) create Render Postgres + set DATABASE_URL (SQLite works until then, zero code change; Render team tea-d8pf325ckfvc73a7mtqg, svc srv-d8pkp20js32c738r8ofg); (3) Apple: 2 app records, App Store Connect API key for EAS, testers, APNs key. Heads-up: 4 real "enter code" emails hit Jeff during tests (own single-use codes); kill switch shipped (c765e99) so tests can't send real mail.CLAUDE OUTPUTS/Affirmology/Affirmology_HermesCreation_Brainstorm_v1.md. Decision detail: architecture doc section 11.CLAUDE OUTPUTS/Affirmology/Affirmology_AppExperience_NorthStar_Vision.md. First build brief ready: CLAUDE OUTPUTS/Affirmology/Affirmology_Build_Phase1_Foundation_Brief.md.CLAUDE OUTPUTS/Affirmology/Affirmology_InvestorVideo_AppVisionInsert_v1.md (fold into the investor video brief/master).relationship.py + oracles Eros/Concordia/Hestia/Gaia). VIRAL MECHANIC: a user can't SEND a relationship's revelations to the other person unless that person JOINS; one-button invite (marketing/pitch/opportunity); on joining, that relationship piece is ALREADY UNLOCKED so the new member lands in a personalized "holy shit" moment about a real person in their life = built-in high-intent compounding referral. Consent/privacy: entering another's birth data is for the user's own exploration; SHARING requires the other to join (the consent gate); keep invites tasteful. Captured in vision doc section 7b + investor insert.Affirmology_FundingStrategy_Memo_v1.md captures Jeff's evolving funding thinking cross-referenced against existing TermSheet_v1 / BuildVsHire_UseOfFunds / CashCowReturns / MoneyList / RoundContingency. KEY DELTAS vs on-paper: (a) Jeff now leaning a leaner staged Round 1 ~$75-150K (possibly two tranches, favorable first / higher-valuation second) instead of the documented single $150-250K @ $1.5M post; valuation math unchanged ($15K=1%, $5K=0.33%). (b) Convertible-note question RESEARCHED + marked POSSIBILITY only: a SAFE does not fit an LLC and convertible notes in an LLC carry COD-income + basis-drop tax traps (counsel generally says avoid in an LLC or convert to C-corp first); clean LLC options = membership units / straight promissory note / profits interest; recommendation = let each investor choose equity, loan, or both (already in the term sheet) rather than a hybrid; only do a true convert-or-repay note as a counsel-papered one-off if an investor insists. (c) Debt-vs-equity: given Jeff's cash fragility, lean equity cushion over a debt repayment cliff during the launch window. Sol up-to-25% + Colin up-to-5% advisor+finder already match existing earn-in/finder structures; future-CEO (Jackie 10-25%) is a real later dilution event to model. ELEVENLABS STARTUP GRANT researched + full application drafted (Affirmology_ElevenLabsGrant_Application_v1.md): 33M chars / ~680 hrs voice AI free for 12 mo, under-25-employees product-with-monetization bar = strong fit; it is CREDITS not cash (offsets the voice-render line + partner relationship, does NOT replace the raise); apply at elevenlabs.io/startup-grants, ~1 wk decision. NOT going to Colin yet (Jeff: prep more first, then send for review). OPEN for Jeff: confirm Round 1 number/tranche shape; define Sol 20->25% trigger; confirm Colin base 2-3% + finder; park or kill the convertible note; price the app-ops line + Korea living + demo-kit; submit the ElevenLabs app.LAUNCH CRM PLAYBOOK BUILT (2026-06-26, Cowork, NO code): new Affirmology_LaunchCRM_Playbook_v1.html is the operating plan for the Jun 29 warm outreach wave + the Airtable CRM. Reconciles the existing launch docs (DemoLaunchPlan v2, LaunchRunway 12-Day, NDAGate Design, MutualNDA, LaunchTimeline, TimingAndLaunch ActionPlan) into ONE funnel: 1:1 WhatsApp invite -> demo behind the existing Mutual-NDA e-sign gate -> same vision video -> self-sort (Tester/Investor/Connector as independent flags) -> 1:1 convo -> Jul 4 free beta -> escalate top testers to the Studio "Creator/Community" tier. KEY DECISIONS IN THE DOC: (a) Airtable is the SYSTEM OF RECORD (GHL demoted to send-only or retired, Jeff to confirm); (b) Jun 29 send is WARM-only (consistent w/ Mercury Rx Jun 29-Jul 23 favoring warm beta invites); COLD investor outreach holds until after Jul 23; Jul 4 beta strictly FREE/gift-framed (no paid/founding upsell that day per the locked timeline). INCENTIVE STRUCTURE designed (Jeff's 2026-06-26 download) + TIERS NAMED (Jeff, 2026-06-26): Floor (List Member, couple months free, always welcome to buy) -> INNER ORBIT (the first beta testers: free thru beta + founding status; earned usage milestones add free time stacking to lifetime-at-a-tier + affiliate + custom Soul Songs; owes usage+feedback) -> THE CONSTELLATION (the creator membership tier: design audios in the Studio WITH us and FOR us via chatbot + controls + their own voice notes; make their OWN audio journeys + audios for their communities; affiliate/rev-share; the charter cohort upgraded from Inner Orbit = the FOUNDING CONSTELLATION; also open to outside creators later; live in-app chatbot audio-creation is a fast-follow but the Constellation distinction holds because they make+publish, not just listen). KICK-OUT = soft downgrade Active->Warning->Downgraded-to-Floor, Jeff approves. COMPLIANCE FLAG: cash affiliate for referred USERS, but investor-intro rewards stay NON-CASH (finder/broker-dealer risk; route finder deals through Colin/counsel). AI CONVERSATION TRACKING: no WhatsApp/Airtable MCP in the registry yet, so the flow is WhatsApp Export chat/forward/screenshot -> paste into Cowork -> AI parses person+summary+intent+sentiment+next-step+named-connections -> writes Interaction + updates People (directly once an Airtable MCP is added via a personal access token, else import-ready rows). Demo-taker cross-ref = match engine/Listening-Room emails to People, flip Stage=Took demo. Airtable schema = 5 tables (People spine, Interactions AI-log, Beta Testers, Investor Pipeline, Audios) delivered as 4 import-ready CSV templates (Affirmology_Airtable_{People,Interactions,BetaTesters,InvestorPipeline}_v1.csv). Doc ends with a categorized checklist + 6 open decisions for Jeff (free-usage numbers, lifetime tier scope, affiliate cash, investor-intro reward, GHL fate, who owns the CRM daily). CAPITAL MODEL CLARIFIED (Jeff, 2026-06-26, hard correction): there is NO cold raise, NO public round, EVER. ALL capital is WARM, from people Jeff knows or one warm step into his network, inside conversations already underway. Jeff WILL and MUST take money BEFORE Aug 11 (needs cash now); taking a warm check during the Mercury Rx is fine (the Rx only cautioned against cold-INITIATING strangers, which he is not doing). Aug 11-13 is reframed as the formal CLOSING / membership-unit ISSUANCE date (money comes in before; units issue at closing, riding the launch), NOT "when the raise opens." A beta tester who connects him to someone = a warm path he keeps working. Likely instrument (FOR COUNSEL, not decided): short subscription/investment agreement signed now (amount, units or loan or both per investor-chooses, units issue at the Aug closing), funds in now, member ledger updated at closing; gating facts = LLC must be filed (Jun 26/28) + operating agreement must DEFINE the units first; NO convertible notes (Jeff, hard rule). LLC FILED 2026-06-25 effective 2026-06-26 (done), bank account Mon/Tue so cash can be taken straight up. THE ROUND STAYS OPEN / ROLLING, it does NOT close: capital arrives on each investor's own timing across the warm phase, and units are issued in BATCHES at EXACTLY TWO "ISSUANCE CEREMONIES" (Jeff confirmed 2026-06-26, both dates, NO future dates): Aug 11-13 launch + Sep 11 solar return (multi-birthday principle applied to capital); whoever funded by each date is issued in that batch, money in flight between them lands in the Sep ceremony. NO premature close but BOUNDED (not open forever). This is BRIDGE capital to fuel through the end-of-Sept launch + the scale it takes; by Sept, ads + event customer/affiliate enrollments cross $20k/mo and climbing, so REVENUE takes over and the raise winds down. OPERATING AGREEMENT is an INTERNAL doc (adopt/execute this weekend with Sol, NOT filed with the state). SEQUENCE: vision/intent (the Jun 28 mission video + high-level story, and an ~80pg company report at the vision level) can go out BEFORE the OA exists (intent landing is what matters there); but specific equity language (percentages, "this many units"), the detailed terms report quoting those numbers, any SIGNED investment doc, and MONEY changing hands wait until the OA defining units is in place. Likely instrument = a short subscription/investment agreement (units or loan or both per investor-chooses, units issued at the next ceremony); a bespoke instrument only if a specific investor wants one, counsel-papered then. Agreements counsel-papered even among friends (Colin owns). Doc updated to remove all cold/strangers/angel-raise/convertible-note framing and to add the issuance-ceremony (rolling-round) concept (sections 7.2/7.3 + timing table Sep 11 row + Investor table "Units issued at" field). RESOLVED (Jeff): use BOTH dates as two ceremonies, no electional pick needed. ALSO: GHL is RETIRING (Airtable is the sole record). SEND DATE moved to SUN JUN 28 (not Mon 29) per a fresh Hermes/Sophia electional reading (2026-06-26, funnel healthy): publishing finished materials to a WARM list at the station is resonant (Mercury stations ~3deg Cancer on his natal Moon = homecoming not solicitation); 28 beats 29 because Mercury still direct on the 28th (forward momentum when it lands) + Jupiter enters Leo Jun 30 (be already in conversation when it fires) + Sunday-evening beats Monday inbox; caveat = Neptune square Moon can blur the ask, so sharpen the terms / read aloud first. AIRTABLE MCP path confirmed (official hosted MCP at https://mcp.airtable.com/mcp, add as a custom connector in Claude desktop + OAuth or a scoped personal access token); no WhatsApp personal MCP exists so conversation logging stays Export-chat -> paste. ASSET FLOW REFINED (Jeff, 2026-06-26): NOT a single forced path. The one pasted link opens a front door with TWO clear doors = "Start with the experience" (demo, primary) and a quiet "Watch the 2-min vision first" (for investor-minded who won't fall for the demo cold), with a deeper link from the vision to the company report. After the demo audio, a SHORT ~1-min HYPE VIDEO plays. Every person gets a PERMANENT PERSONAL HUB (their own tokenized link) holding their audio + the hype video + a "learn more about the mission" button + a "talk to Jeff / become founding member" CTA, delivered by BOTH email and text so nothing is lost and they can return/forward; follow-ups update the same hub. HUB IS TECHNICALLY ONE TEMPLATE PAGE, NOT A PAGE PER PERSON (Jeff asked): same pattern as the existing player.html (single static page personalized by URL); a hub.html on the demo site reads a per-person TOKEN in the URL (e.g. demo.affirmology.ai/h/
RESOURCE HUB BUILD BRIEF WRITTEN (2026-06-26, Cowork, NO code): Affirmology_ResourceHub_BuildBrief_v1.md is a paste-ready kickoff for ANOTHER chat (Claude Code on the Mac) to build an internal, GATED HTML resource hub at a NEW subdomain resources.affirmology.ai (Cloudflare Pages + Cloudflare Access allowlist jeff@jeffparker.love + Sol solballard@gmail.com + Colin cjacobsandassoc@gmail.com) for the team to read the project's docs as clean navigable HTML. House-style reference = Affirmology_LaunchCRM_Playbook_v1.html (extract its CSS). A CRON (launchd, every 2h on the Mac) runs a Python generator that hash-detects new/changed docs, Haiku-extracts title/summary/category/related per doc into a manifest.json, regenerates index + category + per-doc pages, and wrangler pages deploys. Decoupled from the studio on purpose (studio is being retired). Doubles as the doc reorg. Jeff is handing the brief to another chat to execute. (hub.html per-person launch landing page = PARKED, Jeff lukewarm.)
THIS IS THE SINGLE SOURCE OF TRUTH ACROSS ALL CHATS.
Protocol for every chat, no exceptions: 1. READ THIS FILE FIRST before doing anything or making any claim about project state. 2. Trust this file over older session notes, over scattered docs, and over your own assumptions. Where this file and another doc disagree, this file wins, or you reconcile them and fix this file. 3. UPDATE THIS FILE LAST before the session ends: what changed, what is now true, what is the next action. Keep it short and current. Delete stale lines rather than appending contradictions. 4. This file is intentionally unversioned. It is living. Do not make a v2; edit this one. 5. DELIVERING FILES TO JEFF: always surface any file as a clickable card via the present_files tool so it opens in Claude desktop. NEVER tell Jeff to find or open a file by path or filename. He will not hunt for it, and raw .md/.txt open in a hard-to-read editor. He compares quickly via links. When the point is reading or comparing, present it as a link and prefer rendered formats (PDF or HTML) over raw markdown.
Last updated: 2026-06-24 (Cowork, timing/launch session, NO code). SESSION (electional + launch planning): Jeff missed the June 20 LLC filing (no funds + Saturday). Routed the electional/timing question to Hermes live (bridge healthy, corpus ok). Council result: best LLC file date before the retrograde = THU JUN 26 morning before ~1pm EDT (Taurus Moon trines his Virgo Sun-Venus 8th-house axis, Mercury still direct); workable backup Sat Jun 28; STRONGEST overall = AUG 11-13 (Sun on his Vertex 21 Leo 7th, Jupiter building into Leo, Moon over PoF/Jupiter). Mercury retrograde verified Jun 29-Jul 23 2026 in Cancer (shadow clears ~Aug 5), sitting ON his natal Cancer Moon (6th). Guidance: cold investor outreach before Jun 29 or after Jul 23; WARM re-engagement + warm beta invites are favorable DURING the retrograde. Money squeeze = Saturn in Pisces opposing his Virgo Sun-Venus (8th) + Sun crossing natal Saturn-Mercury this week; eases Jul 24-Aug 13; big expansion bell early Nov (Sun conj natal Jupiter 10th). Move now: brief warm check-ins to each paused coaching deal before Jun 29. DELIVERABLES (project root): Affirmology_TimingAndLaunch_ActionPlan_v1.md (master plan: dates, Mercury messaging, travel/beta ops, audio), Affirmology_Kairos_ElectionalAgent_Spec_v1.md (PROPOSED new electional/timing oracle "Kairos", NOT built, awaiting Jeff's go), Affirmology_DaytimeAnchor_AudioScript_v1.md (looping daytime reassurance/wealth script), Affirmology_ElectionalTimingReading_2026-06-24.md (raw council reading). RENDER INFRA CORRECTION (Jeff-verified 2026-06-24): Jeff verified that the CLOUD renders audios laptop-independent (works with the laptop out of the loop). This supersedes the older "the whole render path runs on the laptop / only works while the laptop is awake" notes in sections 11 + 13 + the section-5 operational fact, for the STUDIO/cloud path. Net: beta testers can enroll + receive audios 24/7 without Jeff's laptop, so the travel week is NOT render-blocked. (The LOCKED DEMO laptop path is a separate matter; this correction is about the Studio/beta render infra.) NEXT: confirm whether the Hermes/agent funnel reading path is likewise cloud-served or still laptop (today's reading went through the laptop funnel macbook-pro-2:8443).
OPEN: (a) Jeff to pick audio render path (RESOLVED: chart-driven engine render, ~25-30 min; render command + Code paste delivered); (b) Jeff to approve building Kairos electional agent. NEW HARD RULE ADDED TO CLAUDE.md (Jeff 2026-06-24): ALL audio, anywhere/anytime, MUST be rendered through OUR system (engine/council via funnel), NEVER a third-party TTS. AUDIO BUG FOUND: the Hermes render_sacred_audio tool does NOT honor a custom source_script, it regenerates its default natal/chart structure (verified: a custom "I am Jeff" daytime-anchor script came back as a 2nd-person natal reading, entry 5e779947...). So custom long-form affirmation tracks must currently render via the engine CLI --script-file on the Mac (reliable), OR render_sacred_audio needs a fix to actually pass source_script through. Render-ready files in project root: Affirmology_DaytimeAnchor_AudioScript_v2.md (the script: no warm-up, name woven in, all first person, smorgasbord of techniques) + Affirmology_DaytimeAnchor_RenderScript_x3.txt (same script x3 = ~40 min for a long background loop).
LOCKED LAUNCH TIMELINE (2026-06-24, Jeff said "lock it in"): seven-beat electional sequence, full detail + caveats in Affirmology_LaunchTimeline_v1.md. Beats: (1) Jun 26 file the WY LLC (direct on wyobiz.wyo.gov, agent ADDRESS+consent only NOT their filing service; resolve the wyomingagents.com $163 or use a fresh RA; EIN+bank, money can come in July; NO SAFEs); (2) Jul 4 beta opens FREE (no payments/upgrades that day; beta users never pay, free + escalating incentives); (3) Aug 11-13 HARD commercial launch (app live, Meta ads, payment links, customer money) + open the angel raise ($5-50k chunks, goal ~150k); app can ship via an individual Apple acct then convert to LLC; (4) Sep 11 first in-person Miami exposure + sales test (Jeff's bday/solar return); (5) Sep 24-26 Ultimate Wellness Event (Faena MC gig, agreement in Affirmology_UltimateWellness_MC_Agreement_v1.md); (6) Nov 11 consciousness GATHERING not commerce (Scorpio Mercury Rx is an asset for depth; lock venue + promote BEFORE Oct 24; venue target = Palapa, Jeff's feelers out); (7) early Dec Art Basel OPTIONAL/LATER after an explosive UWE, join an existing event, keep it intimate. Verified Mercury Rx 2026: Jun 29-Jul 23 (Cancer) + Oct 24-Nov 13 (Scorpio). NOTE: caught + corrected a council factual slip (it claimed Mercury clear on 11/11; it is not). PRIOR SESSION BELOW. ---
Earlier 2026-06-21 (Cowork, C-build session). SESSION (C29 backfill + C28 confirm + C26 STEP 3 BUILT): Audited the four-step app-changes build and found STEP 1 C29 (rule+form+scope craft schema) and STEP 2 C28 (practitioners/wisdom nightly research lane) were ALREADY built + committed (studio commits 347bc09 and 3975330 + the practitioners chain a21fbcf/e922b6e/8ce25f8/612797c); verified green (test_craft_rule_form.py + test_practitioners.py). Ran the C29 craft backfill --apply on the live corpus (corpus/corpus.db): 112 craft entries, 106 already tagged, the last 6 processed for $0.0038 (5 production/QA-craft entries correctly left untagged, 1 tagged rule=7 form=journaling_prompt,mindset_practice). BUILT + COMMITTED STEP 3 C26 (audio delivery pacing + activation), studio commit 601e7f0, Studio-only + additive + demo byte-for-byte unaffected (standard pace is a true no-op): Structure gains pace + bed_profile (before_bed + gk_single_sphere = deep; confidence_abundance = activation/driving; natal_sacred stays standard); new agents/pacing.py (pace->speed deep 0.88 / standard 0.95 / activation 1.03 under the 1.05 ceiling; mix-time silence after questions + at section breaks via new audio_mix.concat_voice_segments; synthesize_voice_paced segmented synth, standard delegates to the unchanged single-call path; target_word_count for length consistency; deterministic pacing_gate); cli.py gains --pace / --bed-profile and a paced QC-gated synthesis branch (QC gate + 1.05 ceiling preserved); council.compose takes pace/bed_profile (Hypnos sequences pacing, Orpheus writes the question + laddered arc, Apollo folds in the pacing gate); studio pipeline.py + jobs.py thread pace from the structure (a standard render still passes --speed 1.0, no --pace). Engine changes vendored into affirmology-studio/affirmology-agent (kept in sync). Tests: test_c26_pacing.py (4 acceptance, decisions + CLI args) + test_c26_pacing_render.py (real ffmpeg silence insertion passes the QC gate; QC still catches a true dropout), 6/6 green; engine pytest 46/46; full studio suite 114 pass / 1 fail = test_chart_cache::test_determinism_cached_vs_fresh, a PRE-EXISTING aspect-ordering nondeterminism proven independent of this work by a baseline run (stash-all -> still fails), unrelated to C26 and a chart-engine fix for later WITH Jeff. STOPPED before any paid ElevenLabs render per Jeff: NEXT = Jeff listen-checks one deep render (before_bed) + one activation render (confidence_abundance), then STEP 4 (C3 tones). Queue updated: C29 schema + C28 checked off, C26 marked [~] built/pending-listen-check, C3 left for after the listen-check. EARLIER SAME DAY: reconciled the Test & Change Queue (C22/C24/C25 were shipped 2026-06-20 but still showed unchecked; now checked off, PROJECT_STATE remains the source of truth). Wrote four new build docs: Affirmology_AudioPacingActivation_C26_BuildBrief_v1.md (slower deep delivery, pauses, activation questions, per-Structure pace/target_minutes/bed_profile, render-length consistency), Affirmology_FrequencySoundLayer_C3_Spec_v1.md (synthesized isochronic/binaural/tonal entrainment layer in audio_mix.py, state-to-frequency map, honesty rule, off by default), Affirmology_BeliefInstallation_C29_Kickoff_v1.md (the rule+form tagging schema for the craft/practitioners corpus, plus first wealth-journey journaling prompts + mindset practices), and Affirmology_SoundDesign_DynamicBeds_Report_v1.md (plain-language sound report: layers/stems/sections, vocabulary, do-now-vs-hire-later, Suno recipes for Sol, free/public-domain learning). Also two prompts: Affirmology_AudioStructures_CoworkSession_StarterPrompt_v1.md (launch a Cowork session to organize techniques + design structures/suites: starter kit, transformation tracks, wealth suite with affirmations/journaling/EFT/before-bed/motivational) and Affirmology_AppChanges_MasterCodePrompt_v1.md (one sequenced Code paste: C29 schema -> C28 research lane -> C26 pacing -> C3 tones, demo locked, QC kept, vendored). Added a free/public-domain sources section to the C28 plan (Neville/Wattles/Shinn/Troward/Behrend/Allen/Coue/Kybalion ingest-fully; in-copyright + RTT benchmark-only; hypnotherapy researched first). NOTE: the dedicated C28 hypnotherapy/practitioners research lane is NOT built yet; usable hypnosis craft today lives in the craft areas meditation_hypnosis (15) + breakthrough (24). NEXT for Jeff: (a) commit the test-only C24 acceptance test, (b) paste the master Code prompt or run C26 first, (c) launch the audio-structures Cowork session, (d) give C28 the add-all/trim. Prior 2026-06-20: HERMES IS NOW EFFECTIVE AND PROVEN LIVE. The agentic loop fix + two hardening fixes are deployed on studio.affirmology.ai (commits ca3a055/eb6c075): FIX A front-end polls /api/hermes/history so there is no more "could not reach my model" flash on a slow read; FIX B keeps tools=HERMES_TOOLS in the forced-synthesis call so heavy multi-oracle reads no longer 400. T1 PASSED: a live two-person (Jeff+Sol) wealth-codes reading returned a full mechanism-level answer (Pearls 45.5/49.5, channels, Lilith/Chiron blocks, live transits), and a craft-grounded sleep-technique reading fused chart + craft + timing, brand-clean (heart coherence breath, never the teacher's name). Craft Knowledge Engine Phase 2 is wired AND live on cloud (craft + techniques synced to R2, commits 5be790e/bc507c1; cloud /api/corpus-stats: craft=94, techniques=18, records=25570). NEW DIRECTION (Jeff): HERMES AS COMMAND CENTER, "a cheat code superhighway into all our systems," Jeff full keyset, Sol/Colin governed. Map: Affirmology_Hermes_CommandCenter_CapabilityMap_v1.md. The shared ACTION LAYER (endpoint + Hermes tool + chat button + server-side tier check) is GREENLIT with briefs written: C16 cross-chat messaging (Affirmology_CrossChatMessaging_C16_BuildBrief_v1.md) + C17 send-to-Studio (Affirmology_SendToStudio_C17_BuildBrief_v1.md), to BUILD TOGETHER in one Code pass (combined paste delivered in chat). C15 field-briefing / read-aloud audio rides on that layer (Affirmology_FieldBriefingAudio_C15_BuildBrief_v1.md + cost memo Affirmology_FieldBriefingAudio_CostMemo_v1.md): two modes, casual read-aloud is primary ("read me the chat while I cook"), field-briefing-with-save is the upgrade. ENGINE PATH for C15: start on ElevenLabs (already wired, no new account), HARD-capped per user + tier-gated server-side (Jeff's cost constraint), then move the default read-aloud voice to a LOCAL open TTS (Kokoro/Piper on the Mac mini) for ~$0; do NOT rely on OpenAI (Jeff cancelled it); Fish Audio is the cheap hosted fallback. Public share LINK for saved audio still needs C10 (R2 public media). Single living backlog of tests + changes: Affirmology_TestAndChange_Queue_v1.md. PENDING NEXT: paste the combined C16/C17 build to the studio Code window; the local funnel server still needs a manual restart to pick up the Phase 2 engine changes for local --council renders. Also logged: Hermes chat readings do NOT pass Apollo's craft gate, so chat-side accuracy slips (e.g. one reading briefly conflated Pearl 44.1 with 45.5) need a lightweight Hermes self-check, to be folded into Phase 3 of the craft grower.
Earlier 2026-06-18 (Cowork, Atlas+Studio planning session: Jeff's brain dump captured. ATLAS DECISIONS LOCKED (section 17b): in-app messaging Jeff/Sol/Colin only, Hermes takes actions, permission tiers, remember-last-mode, transcript-only voicenotes, nightly auto-applies SAFE changes only, Whisper now / Parakeet later, brand the Cloudflare Access page. STUDIO UPGRADE QUEUE added (Affirmology_StudioChangeList_v1.md top block): numerology full-name accuracy guard, structure overview/scope panel, length up to 45min, music-bed selector (None+Heavenly now, pace categories defined), conversation history, demo-candidate labeling, openings/endings research, slower ElevenLabs pacing, relationship in-app, internal-report transparency. NEW COUNCIL AGENT: PERSEPHONE, the breakthrough/transformation guardian (section 12). Prior entry below: (1) CHIRON, the Technique Healer, added to the council as a new prompted role between Sophia and Orpheus, with a before/after on Jeff's real chart. See section 12. (2) LAPTOP HOUSEKEEPING now that the Studio is on the cloud: retired the local laptop Studio server, moved the corpus OFF the external SSD to an internal path under the AFFIRMOLOGY folder, and corrected the misleading corpus status counting. See section 20. Earlier same day: STUDIO DEPLOYED TO THE CLOUD on Render + R2, full render pipeline proven end-to-end incl. PDF; corpus + music bed pulled from R2 on boot; auth locked; dependency audit. See section 19. Also: corpus-structurer model bake-off = HOLD on Haiku, and the "remaining backlog" is non-structurable junk, both in Affirmology_Nemotron_CorpusUpgrade_Plan_v1.md.)
ACTIVE WORK POINTER (Studio + Atlas build, 2026-06-18): the work order for today's Claude Code session is Affirmology_ClaudeCode_BuildBrief_2026-06-18_v1.md (Studio upgrades S1-S10, then Atlas v1 B1-B9, with exact files, acceptance criteria, and guardrails). Build Studio first (Sol tests tonight), then Atlas. Persephone gate prompt: CLAUDE OUTPUTS/Affirmology/Affirmology_Persephone_GatePrompt_v1.md.
ACTIVE WORK POINTER: for the current website-video and demo-web redesign haul, READ Affirmology_SessionHandoff_VideoBuild_v1.md next. It is the portable continuity capsule with the locked cosmos-film direction, the generated Lily voiceovers and their word-timing maps, the tech approach, and every open task. Use the design-motion-principles and emil-design-eng skills on the film.
Past chats kept starting ignorant and repeating or undoing work. Concrete failures that prove it: session notes claimed the transits tradition had 0 docs when the database actually had 146; one chat did not know the demo audio baseline another had set; a chat claimed the corpus was not architected into generation when it was. The cure is this file plus the discipline above. If you are a chat reading this, the most useful thing you can do is keep it accurate.
scripts/audio_qc.py runs on the voice-only track of EVERY render and refuses to serve a dropout (re-renders slower first). WeasyPrint was missing (that is why demo PDFs never generated); it is now installed and the macOS lib path is wired, so the PDF generates. Re-rendered Jeff at 1.0: QC PASS, clean, 6:17, PDF OK. THE DEMO IS LOCKED; all experiments live in the Studio. See sections 4 and 5.affirmology-studio/ app, cloud-shaped per Affirmology_CloudStudio_BuildSpec_v1.md, running local-first on this laptop off the agent's keys. Two-phase, structure-driven, script-first cost discipline. Verified end to end. See section 11.affirmology-studio-api Worker to the Tailscale funnel to the laptop; media persists on the SSD. Jeff rendered his own audio and it "sounds like my story." The single build queue + live-use bug list is Affirmology_StudioChangeList_v1.md. CRITICAL open bug: chart-integrity (a placeholder chart leaked into a report). Side door still open: disable the workers.dev URL. See sections 11-13.WIRED and working:
- Chart engines (astrology, Human Design, Gene Keys, numerology), verified against Jeff, Josh Parini, Sol fixtures (pytest).
- Script generation, voice synthesis (ElevenLabs Charlotte), FFmpeg mix, Sacred Audio PDF. One CLI command produces a full render.
- CLI Studio flags (2026-06-15): --concept "<directive>" (the structure directive; passes through to generate_script(concept=), content stays chart-only) and --build-report (writes the team-facing backend/build_report.md: design rationale, what was used/why, what was NOT used/why, suggestions, and a techniques footer from the Techniques Library). New module agents/build_report.py. Cost discipline: the script uses the strong model (Sonnet), the script map and build report use Haiku (AFFIRMOLOGY_BACKOFFICE_MODEL, default claude-haiku-4-5).
- Audio QC gate (scripts/audio_qc.py) is NOW WIRED into the CLI --audio path (2026-06-15): it runs on the voice-only track after synthesis, and on a detected dropout it re-renders at a lower speed (--qc-retries, default 2) and refuses to serve a bad file (no mp3/PDF produced). It exposes run_qc() for in-process use. Speed: --speed is honored; auto-tune ceiling lowered to 1.05 so it never warbles.
- Corpus scrape + structure pipeline (Haiku backend), with whole-document chunking and a re-mine mode.
- Verifier that regex-checks scripts against the chart JSON to catch hallucinated placements.
NOT wired yet (do not claim otherwise):
- Corpus-fed generation: WIRED 2026-06-14 (pending a live test render). script_generator.py now calls _corpus_sources(chart), which uses db.search_records() to pull real A/B-tier interpretation snippets for the chart's spine (the four Gene Keys spheres, Sun/Moon/Rising, HD type and authority, Life Path) and injects them into the prompt as SOURCE MATERIAL so the language is grounded in the tradition texts. The v5 reference script was replaced with a content-free STRUCTURAL SKELETON, so no founder placements can leak into anyone's script. Corpus DB path is env AFFIRMOLOGY_CORPUS_DB (default /Volumes/Affirmology/corpus/corpus.db); if the DB is missing or locked the retrieval returns empty and generation proceeds chart-only (robust, will not break a render). STILL TO VERIFY: run a real render and read the script to confirm quality and that the grounding shows through. The fuller PersonalizationAgent design (context bundle, specialist) is in Affirmology_SubconsciousOS_AgenticArchitecture_v1.md Part Four.
- Demo web backend (server + Worker) not yet stood up.
/Users/jeffreyparker/CLAUDE/AFFIRMOLOGY/corpus; was on the external SSD. See section 20 for the move + the corrected structurable status.)Scorecard (docs / words / structured docs):
- western_astrology: 550 / 3.61M / 34
- human_design: 1,487 / 1.57M / 706
- transits: 382 / 1.08M / 369
- vedic_astrology: 527 / 0.88M / 42
- gene_keys: 413 / 0.40M / 186
- numerology: 507 / 0.19M / 7
- Total: ~3,866 docs, ~7.7M words, ~1,344 structured docs.
- Live record counts (2026-06-14, SELECT tradition, COUNT(*) FROM record): human_design 7,863; transits 2,525; gene_keys 1,524; western_astrology 544; vedic_astrology 362; numerology 87. Total ~12,905 records, up from ~10,600 on 2026-06-13. Doc/word/structured-doc columns above are the 2026-06-13 snapshot.
Important nuance: the low "structured %" on western, vedic, numerology is NOT a budget wall. Those traditions are big scanned books. Their real content is partly mined; most of their unstructured docs are sub-100-word junk pages that are correctly skipped. The genuine remaining work is (a) finishing the human design YouTube backlog, and (b) re-mining the big books deeper with --redo-min-words plus a higher --max-chunks-per-doc (needs more credit).
Code capabilities added this week (in affirmology-agent/src/affirmology/corpus/):
- Haiku/Anthropic structurer backend (default), removes the Gemini/Google billing blocker. --backend anthropic.
- Real structure-only mode that structures existing extracted docs.
- Whole-document chunking (--chunk-chars, --max-chunks-per-doc) so big books are read past the front matter.
- Re-mine mode (--redo-min-words) that clears a long doc's shallow records and re-chunks it deeper, no duplicates.
- Stale-path remap (_resolve_extracted_path) so paths from old sandbox sessions resolve to the SSD.
- transits added to the default tradition set; transit element types added to the structurer prompt.
- New gene keys sources added; human design YouTube channels switched to uncapped.
- scripts/overnight_corpus.sh: chained, unattended, cost-capped corpus run with a morning report.
NEW TRADITION (2026-06-19): techniques folded into the corpus. The Techniques Library (Affirmology_TechniquesLibrary_v1.md) is now structured into 18 tier-A records (inductions, identity/language, somatic, state/timing, sound layers, closing, plus the 3 proposed/benchmark techniques) under tradition techniques, so the engine and the oracles (Chiron especially) retrieve methods the same way they retrieve chart interpretations. Ingest is the re-runnable module affirmology-agent/src/affirmology/corpus/techniques.py (python -m affirmology.corpus.techniques), idempotent (wipes prior techniques records first), so re-run it when Jeff's heart-coherence technique is added. techniques added to _TRADITIONS in affirmology-studio/api/hermes_tools.py (the list search_corpus iterates and exposes in its tool enum) and the tool description now points the council at the methods layer. Verified live: /api/corpus-stats reports techniques: 18 after a server restart. NOT scraped, so it is intentionally left out of the scraper's run.py TRADITIONS list.
CRAFT KNOWLEDGE ENGINE - PHASE 1 DONE (2026-06-19, per Affirmology_CraftKnowledgeEngine_Plan_v1.md). The second knowledge pillar (craft = HOW we say it and make it land, vs the chart = WHAT we say). New distilled store: table craft on corpus.db, owned by affirmology-agent/src/affirmology/corpus/craft.py (CraftStore, search_craft with tokenized relevance ranking, search_craft_text helper). Each entry is actionable: area / method / why / when_to_use / how_to_apply / one_liner / tags, across five areas (neuroscience, frequency_sound, audio_production, meditation_hypnosis, reading_craft). SEEDED by a one-time Haiku distillation (affirmology-agent/src/affirmology/corpus/craft_seed.py, reusable by the Phase 3 nightly grower) from 6 docs: TechniquesLibrary, Neuroscience_AudioEfficacy, PredictiveBrain_IdentityChange, AudioMastering_Production, DepthPsychology_JungianIntegration, and the ReadingCraft standard. Result: 94 entries (audio_production 24, reading_craft 38, meditation_hypnosis 16, neuroscience 9, frequency_sound 7), cost $0.19 of a $1.50 cap. Brand-checked (no em dashes, no named teacher, no medical claims). Idempotent: re-run python -m affirmology.corpus.craft_seed to re-seed (clears each doc's prior seed rows first). STILL TO DO - Phase 2: wire it in (replace the static TECHNIQUES_LIBRARY menu in build_report.py with craft retrieval; give Chiron/Orpheus a search_craft tool; add a craft check to Apollo's efficacy gate; add search_craft to Hermes in affirmology-studio/api/hermes_tools.py). Phase 3: extend the nightly growth cron to grow the craft tradition (crawl wide, distill, fold in feedback). Phase 4 (later): frequency/sound overlays in audio_mix.py (Studio-only, demo untouched).
CRAFT KNOWLEDGE ENGINE - PHASE 2 DONE (2026-06-19): the craft base is now wired into the agents (Studio --council path only; the LOCKED DEMO never passes --council and is untouched, and generate_script is unchanged). Ownership per the corrected plan: HYPNOS is the PRIMARY owner of technique selection/sequencing. Changes: (1) affirmology-agent/src/affirmology/agents/council.py - new select_craft() (technique set + a healing slice for CHIRON), writing_craft() (reading_craft slice for Orpheus), hypnos_plan() (Hypnos selects/sequences an ordered technique plan from the live craft base), and HYPNOS_SYSTEM prompt; compose() runs Hypnos once, injects the plan + writing-craft into Orpheus's draft context, and feeds the craft plan + base into apollo_review() (new craft_plan/craft_base args) so Apollo's technique/hypnos gates check the script against the craft base; the Hypnos plan is written into council_transcript.md. (2) affirmology-agent/src/affirmology/agents/build_report.py - the static TECHNIQUES_LIBRARY menu is REPLACED by live search_craft retrieval (_craft_menu_text); the static list is kept only as a fallback. (3) affirmology-studio/api/hermes_tools.py - new search_craft(query, area) tool (function + schema + dispatch) so chat readings ground in craft. (4) affirmology-studio/api/main.py - Hermes system prompt documents the search_craft tool. ALL craft retrieval degrades to empty on any failure, so a render never breaks. Verified: imports clean, craft menu/plan/tool all return real entries, demo path untouched, graceful fallback confirmed. REQUIRES a git push of affirmology-studio (for the Hermes search_craft tool to reach studio.affirmology.ai) AND a restart of the local funnel server (so the live agents + the --council render path pick up the engine changes). Phase 3 next: extend the nightly growth cron to grow the craft tradition.
DEPLOYED TO CLOUD 2026-06-20 (commits ca3a055 + eb6c075, live on studio.affirmology.ai): the Phase 2 craft wiring + two Hermes hardening fixes shipped together. (a) Hermes FIX A (front-end polling in web/app.js: hermesSend polls /api/hermes/history for up to 3 min instead of flashing an error on a slow/throwing POST; cache-bust v18->v19). (b) Hermes FIX B (api/main.py: both forced-final-synthesis calls now keep tools=HERMES_TOOLS, fixing the multi-oracle BadRequestError; reading quality + oracle model untouched). Both per CLAUDE OUTPUTS/Affirmology/Affirmology_HermesLoop_Bug_v1.md. VENDORED-ENGINE SYNC: the cloud Dockerfile bundles affirmology-studio/affirmology-agent/ (AFFIRMOLOGY_AGENT_ROOT=/app/affirmology-agent), which was missing corpus/craft.py and had stale council.py/build_report.py; all three were synced into the vendored copy so cloud --council renders match local. CRAFT DATA SYNCED TO R2 + LIVE ON CLOUD 2026-06-20 (commit 5be790e). MERGED, not overwritten: pulled R2 corpus/corpus.db (the studio boot key), confirmed the nightly cron had NOT run (R2 had no meaning/distinctions/craft tables; record=25552 = the 6 original traditions), backed the original up to corpus/backups/corpus.db.pre-craft-20260620, copied the craft table (schema + all 94 rows) into the R2 copy via ATTACH (integrity_check ok; record/source/document unchanged at 25552/102/3880), and pushed it back to the same key (18,796,544 bytes). corpus_boot re-pulls on size mismatch, so the redeploy reloaded it. VERIFIED LIVE: cloud /api/corpus-stats returns craft=94 (audio_production 24, reading_craft 38, meditation_hypnosis 16, neuroscience 9, frequency_sound 7), records still 25552, size 18796544. /api/corpus-stats was extended to report craft/meaning/distinctions counts (public). NOTE: the authenticated cloud Hermes search_craft call could not be run from here (cloud STUDIO_AUTH_TOKEN is Render-only + Cloudflare Access); verified equivalently via search_craft against the exact merged DB (real entries, not fallback). TECHNIQUES TRADITION ALSO SYNCED TO R2 + LIVE 2026-06-20 (empty redeploy bc507c1): same merge method, copied the techniques source+document+18 record rows into the R2 corpus (backup corpus/backups/corpus.db.pre-techniques-20260620; no id collisions; integrity_check ok, foreign_key_check clean; craft stayed 94 and all 6 base traditions unchanged), pushed back (18,808,832 bytes), cloud re-pulled. Cloud /api/corpus-stats now: records 25570, by_tradition includes techniques=18, craft=94. Cloud corpus now matches local. Local funnel server still needs a manual restart to pick up the Phase 2 engine changes for local renders.
C16 + C17 BUILT + DEPLOYED 2026-06-20 (commit 96d8dd6, live on studio.affirmology.ai; app.js v20). Per Affirmology_CrossChatMessaging_C16_BuildBrief_v1.md and Affirmology_SendToStudio_C17_BuildBrief_v1.md. Shared shape (bearer endpoint + permission-gated Hermes tool + chat button); api/ + web/ only (no engine change, demo untouched). C16 cross-chat messaging: deliveries table in jobs.py (add_delivery/list_inbox/mark_delivery_read, read scoped to recipient); POST /api/hermes/push, GET /api/hermes/inbox, POST /api/hermes/inbox/read; send_to_person Hermes tool; founder-circle tiers (jeff/sol/colin) enforced SERVER-SIDE in hermes_tools.check_send_permission (josh rejected); web "Send to..." control + inbox surface. C17 send-to-Studio: draft job state + source/music_bed/production_notes/draft_script columns (migrated) + create_draft() + JobManager.render_draft() (promotes a draft through the normal chart-driven script path on the same entry); POST /api/studio/draft (status draft, source hermes), POST /api/studio/draft/{id}/render; send_to_studio tool; web "Send to Studio" control + Studio-home drafts tagged "from Hermes" with a Render button. Both tools are USER-INITIATED ONLY (descriptions forbid autonomous sends) and ADDITIVE ONLY. Chart-driven preserved: the Studio stays canonical; the draft script is editable/regenerable. All 8 acceptance checks pass at API/tool level (incl. permission rejections); verified live by route gating (401 = registered). LATER (per briefs): audio payloads (C15), notifications, read receipts, advisor<->client; render-as-is vs regenerate nicety; Hermes-triggered render. FOLLOW-UP FIX 2026-06-20 (commit 849d9e1, live): the action layer shipped in 96d8dd6 but the Hermes system prompt never listed send_to_person/send_to_studio, so Hermes self-reported it "cannot" push to a person or create a Studio draft and would not use them. Added both tools to _hermes_system with the user-initiated-only framing ("you DO have this ability; only act when the user explicitly asks"). Added BUILD_TAG to /api/health so prompt-only deploys are verifiable. If Hermes is tested on the LOCAL funnel server, restart it to pick up all of this (and the still-pending Phase 2 engine changes).
C18 HERMES-RENDERED SACRED AUDIO BUILT + DEPLOYED 2026-06-20 (commit 4a0e0ea, live; build tag 2026-06-20-c18-hermes-rendered-sacred-audio; app.js v21). Per Affirmology_HermesRenderedSacredAudio_C18_BuildBrief_v1.md. Completes the action layer: Hermes renders a full Sacred Audio (voice + PDF) from chat through the EXISTING proven render/QC/PDF pipeline, delivers the finished player + PDF into the chat, then offers to share it to a searchable library. api/ + web/ only (no engine change, demo + render settings untouched); user-initiated + additive + tier-checked server-side. STORE (jobs.py): deliveries.pdf_ref + jobs.visibility(default private)/created_by (migrated); set_visibility() + list_shared(q over title/person/structure, done+shared only); JobManager.render_sacred_audio()+_run_full_render (reuses _run_script then _run_audio, then drops a kind "audio" delivery from "hermes" to the requester carrying mp3_url+pdf_url; non-blocking single worker). TOOLS (hermes_tools.py): render_sacred_audio (creates the entry via C17 create_studio_draft internals, starts the render, returns immediately with entry_id + a "rendering" message), check_my_render (status -> media urls when done), share_studio_entry (owner-only: jeff any, sol/colin own via created_by), search_studio_library; check_share_permission; run_tool now also receives the manager. ENDPOINTS (main.py): POST /api/studio/entry/{id}/share, GET /api/studio/library?shared=1&q=; inbox surfaces pdf_ref; all four C18 tools added to the Hermes SYSTEM PROMPT with the honest "everyone with Studio access = the Cloudflare Access allowlist" wording. WEB: Hermes inbox renders kind "audio" deliveries as an inline audio player + PDF link; Studio home has a Shared Library list + text search (loadSharedLibrary, GET /api/studio/library). All C18 acceptance checks pass at the wiring level (render kickoff, completion delivery with media, check tool, share + search, cross-owner permission block); the full ElevenLabs render was NOT run in the test to avoid spend (it uses the unchanged proven pipeline). LATER (per brief): customer-facing name (Cast/Invoke/Conjure/Summon) TBD; render-as-is vs regenerate.
C18 PART 1 (URGENT FIX) + PART 2 BUILT + DEPLOYED 2026-06-20 (commit 788c358, live; build tag 2026-06-20-c18-part2-cast-deliver-to; app.js v22). PART 1: Hermes 400'd on follow-up turns ("check on it") because hermes() built the model messages from the last 24 stored turns, a window that could start with an assistant turn or contain consecutive same-role turns (a reply + a render-completion delivery), both of which Anthropic rejects. Fix: _normalize_history() in api/main.py drops empty turns, drops leading assistant turns, and merges consecutive same-role turns so roles strictly alternate (falls back to the current user message if the window collapses); the except block now logs full str(exc)+traceback. Unit tests in affirmology-studio/tests/test_hermes_history.py (5/5). PART 2: (1) permissions relaxed to Studio-openness WITHIN the circle: any of jeff/sol/colin may render from any member's chart, deliver to any member, and share/unshare any circle record (check_draft_permission now requires sender+subject in circle; check_share_permission requires sender in circle). Hard stops only: reject anyone outside the circle (actor/subject/recipient); NO delete path exists (verified); demo locked. (2) render_sacred_audio gained deliver_to with REGENERATE-PER-RECIPIENT: a Cast to X is regenerated from X's OWN chart (person=X) and delivered to X, never a forward; EXCEPTION: relationship/teamwork structures (new Structure.is_relationship flag + is_relationship_structure() keyword detector in structures.py) are ONE shared audio delivered to both, no regen. JobManager.render_sacred_audio/_run_full_render now deliver to a list of recipients; created_by records the actual caster. (3) UI Hermes-render button labeled "Cast" (tool stays render_sacred_audio). (4) start_public.sh intentional edit committed (media defaults to ./data/media, no SSD needed; token print masked to last 4 chars, no secret committed). api/ + web/ only (no engine change, demo untouched), server-side enforcement. All PART 1 + PART 2 acceptance checks pass at the wiring level (full ElevenLabs render not run in tests, to avoid spend).
C19 STORED NATAL CHART BASIS + TIMING SNAPSHOT BUILT + DEPLOYED 2026-06-20 (commit 8452cda, live; build tag 2026-06-20-c19-stored-natal-basis). Per Affirmology_StoredNatalChartBasis_C19_BuildBrief_v1.md (two-tier). TIER 1 (immutable natal basis, compute once + reuse): the FULL natal Chart is cached and reused for all audio gen, Hermes, and readings. Vedic is now part of the basis: added a vedic dict field to the Chart model (api models.py), populated once in compute_chart (derived from tropical longitudes), so the complete blueprint (western incl. aspects/extended points/asteroids, HD, Gene Keys both sequences + Pearl, numerology, AND Vedic) serializes + round-trips faithfully. New affirmology/chart/cache.py: CHART_ENGINE_VERSION="2026-06-20.1" (bumping busts all caches so engine upgrades recompute once), chart_cache_key=sha1(normalized birth + version), compute_chart_cached/get_or_compute. Lookup order: committed fixtures -> SQLite chart_cache (env AFFIRMOLOGY_CHART_CACHE_DB, set to studio.db) -> compute+store. Committed natal fixtures for Jeff/Sol/Colin/Josh in src/affirmology/verification/known_charts_computed/, regenerable by scripts/precompute_known_charts.py on a version bump (instant on laptop + cloud, zero first-compute). TIER 2 (timing snapshot, date-dependent, layered on the basis): progressed_summary (progressed Sun, progressed Moon + lunation phase, upcoming sign changes) + timing_snapshot in chart/timing.py; timing_snapshot_cached per (person, date) with a TTL in cache.py. render_timing_facts STAYS LIVE (date-stamped) so timing always reflects now. WIRING: compute_chart_cached routed through get_person_chart/compute_chart_from_birth (hermes_tools._compute), people.chart_summary, overview, and the render path (cli.py) + orchestrator; studio config exports AFFIRMOLOGY_CHART_CACHE_DB=studio.db so the engine CLI subprocess shares the cache. Guardrails: identical output (caching is pure performance; natal facts byte-identical cached vs fresh, proven), demo render settings unchanged, no em dashes, engine changes VENDORED into affirmology-studio/affirmology-agent/ (verified the cloud copy loads fixtures with 0 compute). Tests: C19 acceptance 8/8 (tests/test_chart_cache.py), engine pytest 46/46. NOTE: acceptance #5 proves the natal BASIS/facts are byte-identical cached vs fresh (the audio's inputs are unchanged); a literally byte-identical audio FILE also depends on the non-deterministic LLM script step + TTS. ON VERSION BUMP: re-run scripts/precompute_known_charts.py and re-vendor the fixtures.
HERMES LONG-THREAD 400 FULLY FIXED 2026-06-20 (commit fbf49e9, live; build tag 2026-06-20-hermes-history-endonuser-fix). The C18 PART 1 normalize fix did NOT fully resolve it; reproduced the real error with a live API call: "This model does not support assistant message prefill. The conversation must end with a user message." Root cause: list_hermes_history used ORDER BY created_at ASC LIMIT 24 = the OLDEST 24 turns, so on a long thread it dropped the just-added current message and the window ended on an old assistant turn (400). Locally it never showed because jeff had only 18 turns. Fixes: (1) list_hermes_history now returns the most recent N turns in chronological order (subquery DESC LIMIT N re-sorted ASC) so the current message is always last; (2) _normalize_history also drops TRAILING assistant turns so the window always ends on a user turn. Verified by replaying real stored history (+a simulated >24-turn thread) through a live Anthropic call: succeeds (stop=end_turn) instead of 400. Unit tests 6/6. api/ only (jobs.py + main.py), no engine change, no vendor.
DAILY-DIGEST EMAIL ENDPOINT ADDED + DEPLOYED 2026-06-20 (commit 94f16be, live; build tag 2026-06-20-send-digest-resend). POST /api/send-digest (bearer-auth, studio token; for a scheduled task) sends a report email via the Resend REST API (POST https://api.resend.com/emails, Authorization: Bearer RESEND_API_KEY) from FROM_EMAIL (default reports@affirmology.ai on the verified affirmology.ai domain). Body {subject, html, text?, to:[emails]} -> {ok, id} or a clear error (503 if RESEND_API_KEY unset, 400 bad input, 502 surfacing the Resend message). stdlib urllib, no new dependency. ACTION REQUIRED (Jeff): add RESEND_API_KEY and FROM_EMAIL=reports@affirmology.ai to the Render affirmology-studio-api service env, then redeploy. Wiring verified locally (route registered, correct 503/400/502 paths); the actual test send to jeff@jeffparker.love is PENDING the Resend key (Cowork has no key + no cloud studio token, so it cannot send from here). Verified live: /api/send-digest returns 401 (registered + gated).
HERMES AVAILABILITY HOTFIX (SELF-HEAL + CLEAR) BUILT + DEPLOYED 2026-06-20 (commit 90dc89c; build tag 2026-06-20-hermes-selfheal-and-clear; app.js v24). Symptom: Hermes chat returned BadRequestError on EVERY message (even "hi"/"ye") for jeff on the CLOUD. DIAGNOSIS (evidence, not guess): the structural normalization (_normalize_history + most-recent-N list_hermes_history, commit fbf49e9) is already on origin/main and, replayed against the LIVE Anthropic API on jeff's real 20-turn history + a fresh "hi" + a 1.5M-char oversized turn, did NOT 400. A bare "hi" with the full system + all 12 tools also succeeded. So the live failure is the CLOUD running a build OLDER than fbf49e9 (its Render deploy never landed; the cloud build tag is unreadable from here because Cloudflare Access 302s /api/health). FIX (api/ + web/ only, no engine change, demo untouched): (1) SELF-HEAL in the hermes() loop: the first time Anthropic rejects the window, collapse to just the current user message (with any C22 doc context) and retry once, so a bad window can never again take the whole chat down; full exception logged. (2) CLEAR: jobs.clear_hermes_history + POST /api/hermes/clear + a "Clear chat" button in the Hermes header, the instant unblock if a thread wedges (user-initiated, scoped to the person). (3) BUILD_TAG bumped so the redeploy is verifiable at /api/health. Tests: tests/test_hermes_selfheal.py (self-heal on a forced 400 + clear wipes history), isolated against a tmp studio.db; 8/8 with the existing hermes-history tests. NOTE: could not clear jeff's CLOUD hermes_history from here (no cloud token + Access gate); the redeploy itself restores Hermes via self-heal, and the Clear button resets any thread.
C22 ATTACH/PASTE FILES INTO HERMES CHAT BUILT + DEPLOYED 2026-06-20 (commit 7f7809c; app.js v25). User hands Hermes a .txt/.md/.pdf as READ-ONLY context for one question; never stored, never shared. Frontend (web/): paperclip attach button + hidden file input + paste-a-file on the textarea (intercepts only real files; text paste falls through); text read client-side, PDFs sent as base64; removable chips above the bar that ride the next message then clear; attachment-only send gets a default "read these" ask. Backend (api/main.py): HermesRequest.attachments [{filename, text?, pdf_base64?}]; PDFs extracted server-side with pypdf (already a dep, never raises, scanned/broken PDF degrades to a visible note); per-doc cap ~20k chars + total ~48k with truncation notes; labeled context ("Attached document
HERMES SYNTHESIS-CREATE HARDENING BUILT + DEPLOYED 2026-06-20 (commit 0c2e2ed; build tag 2026-06-20-hermes-synthesis-selfheal). Symptom: Hermes surfaced BadRequestError again on a CAST (render_sacred_audio with deliver_to). ROOT CAUSE (evidence): all 12 HERMES_TOOLS schemas validate clean against Anthropic's rules (malformed-schema ruled out); the in-loop create() already self-heals (90dc89c), but the TWO forced-synthesis create() calls (the round-cap branch and the short/stub branch) were NOT wrapped, so a 400 on the accumulated tool-block window after a multi-round Cast propagated to the outer except and surfaced raw to the user. FIX (api/main.py only, no engine change, demo untouched): new _synth_create() wraps both synthesis calls (try full window with tools; on any error retry once on a flattened tools-free text window via new _flatten_messages_to_text(), which folds tool_result data into plain text and drops tool_use/tool_result blocks; returns None if even that fails, so the caller keeps the best text gathered so far). Regression test tests/test_hermes_cast_synthesis.py reproduces the exact Cast-with-deliver_to flow where synthesis 400s and asserts Hermes still returns a real reply (no raw BadRequestError); 24/24 studio tests green. Confirmed /api/health serves the new build tag (TestClient 200). NOTE: the currently-running LOCAL funnel server (port 8765) still reports the OLD build 2026-06-20-send-digest-resend, so it must be restarted (./start_public.sh) to pick up ALL of today's Hermes work (self-heal+clear 90dc89c, C22 7f7809c, synthesis hardening 0c2e2ed); the cloud picks them up on Render redeploy. The three live Hermes BadRequestError reports today were all consistent with the deployed server running code OLDER than the relevant fix.
CLOUD RENDER PATH FIX (AGENT_PYTHON RESOLUTION + AUDIO PREFLIGHT) BUILT + DEPLOYED 2026-06-20 (commit cac707a; build tag 2026-06-20-cloud-render-agentpython-preflight). Symptom: a Cast on studio.affirmology.ai returned the script but no audio link/file; cloud /api/health showed agent_python_exists:false (agent_python "python"). DIAGNOSIS: both render phases shell out to subprocess.Popen([config.AGENT_PYTHON,"-m","affirmology.cli",...]) (api/pipeline.py run_script/run_audio). The cloud Dockerfile sets AGENT_PYTHON=python and pip-installs the agent into the image's main interpreter; config returned the bare "python" verbatim, so Path("python").exists() read False (a misleading health flag) and on any host where "python" is not on PATH the render subprocess would fail. The SCRIPT step needs only the Anthropic API; the AUDIO step also needs ELEVENLABS_API_KEY + the music bed, so the real audio-only blocker (most likely ELEVENLABS_API_KEY unset on Render, or the R2 music bed not present) showed up as "script yes, audio no" with no surfaced reason. FIX (api/ only, engine + demo untouched): (1) config._agent_python() now resolves to a REAL runnable interpreter (absolute existing override honored; bare override resolved on PATH via shutil.which; unresolvable override ignored -> local venv, else sys.executable, the dep-complete single-image interpreter), so agent_python_exists is true and the subprocess always runs. (2) pipeline.run_audio() preflight fails LOUD + CLEAR when ELEVENLABS_API_KEY is unset or the music bed is missing, surfaced to the chat via the existing _run_full_render failure delivery instead of dying silently. Tests: tests/test_cloud_render_path.py (override resolution incl. cloud bare-python, fallback, absolute-honored, health true, both audio preflights); 30/30 studio tests green; verified the resolved interpreter runs affirmology.cli --audio/--council; real local end-to-end Cast render verified (audio+PDF produced + delivered). ACTION REQUIRED (Jeff): on the Render affirmology-studio-api service, confirm ELEVENLABS_API_KEY is set and check cloud /api/health now shows agent_python_exists:true, elevenlabs_key_set:true, music_bed_exists:true; those three being true is the cloud-render green light. NOTE: a JobManager re-init (server restart, OR any concurrent import of api.main such as a pytest run against the live data/studio.db) reaps in-flight jobs as "Interrupted by a restart" via _reap_stale(); do not run the studio test suite against the live db while a real render is in flight.
PERSONAL KNOWLEDGE BASE (GOLDEN-TIER CORE) BUILT + DEPLOYED 2026-06-20 (commit d028d81; build tag 2026-06-20-personal-knowledge-base). Per Affirmology_PersonalKnowledgeBase_GoldenTier_Concept_v1.md. The durable per-person standing-context store, the foundation of the golden tier and the real fix for context loss. (1) STORE: knowledge_base table in studio.db (id, person_id, title, content, kind [standing_context|reading|goal|note|suite], pinned, created_at, updated_at) with kb_add/get/list/list_all/update/delete/upsert in jobs.py; mirrored to R2 as ONE JSON object (api/kb_r2.py, STUDIO_KB_R2_KEY=knowledge_base/kb.json) on every write + restored on boot, so it survives a server REBUILD (not just a restart). No-op locally / if R2 unconfigured; never raises. (2) ALWAYS-INJECT: every Hermes turn appends the person's PINNED entries to the system prompt (main.py kb_standing_context), separate from + additional to chat history, so a chat clear or restart NEVER loses standing context; clear_hermes_history explicitly never touches the KB. (3) ADD/EDIT: Hermes tool save_to_knowledge_base {title, content, kind, pinned} (fires on "remember this / keep as standing context") + GET/POST/PATCH/DELETE /api/kb for the UI panel; circle-gated, each member manages their OWN entries (person_id scopes every write), outsiders (josh) rejected. (4) FEED AUDIO: create_studio_draft folds the person's pinned entries into the render brief (hermes_tools.pinned_kb_brief), so a Cast is bespoke to the accumulated context (ties to C24). (5) SEED: the standing WEALTH CONTEXT (from CLAUDE OUTPUTS/Affirmology/Affirmology_WealthCodes_JeffAndSol_v1.md) is the first pinned standing_context entry for Jeff and Sol, committed as text in api/seed_data/wealth{jeff,sol}.md and seeded on boot (idempotent, api/kb_seed.py, re-runnable python -m api.kb_seed), so both local + cloud seed identically. LIVE LOCAL DB SEEDED + VERIFIED (jeff 5.8k chars, sol 6.8k chars, both pinned; always-inject confirmed). Tests: tests/test_knowledge_base.py (persistence across a simulated restart, survival of a chat clear + always-inject, pinned-only injection, ownership scoping, idempotent seed, tool + permission, Cast brief, R2 no-op, endpoints); 39/39 studio tests green. api/ + render.yaml only, engine + demo untouched. NEXT (per concept doc): UI panel to view/edit the KB; grow toward the full Living Profile (C20); design the golden-tier credit model. ACTION (Jeff): restart the local funnel server to pick up the KB (and all prior Hermes/render fixes); the cloud auto-redeploys on push and boot-seeds itself.
C24 CAST VOICES THE RIGHT SCRIPT BUILT + DEPLOYED 2026-06-20 (commit 327465c; build tag 2026-06-20-c24-cast-right-script). Benchmark: Affirmology_BeliefBreakthrough_SacredAudio_Jeff_v1.md. Problem: render_sacred_audio defaulted source_script to "from_chart", so a script Hermes composed in chat was ignored and the audio recited the bare natal blueprint. Fix (api/ only; the verbatim render-as-is plumbing landed earlier in 425dbda): (1) THE SCRIPT RULE, enforced in the tool description AND the Hermes system prompt: if Hermes wrote a script it MUST pass it as source_script (voiced VERBATIM); never Cast with an empty source_script when a script exists. (2) render_sacred_audio gains brief: when generating from the chart (no source_script), the conversation's theme/intent is woven into the render brief via _from_chart_brief() (a craft directive: themed, first-person, present-tense, SPEND the chart, do not recite placements) combined with the person's pinned knowledge base (pinned_kb_brief) and the live timing already in the council path; relationship branch carries the theme too. New schema fields document source_script + brief. Tests tests/test_c24_cast_brief.py (verbatim source_script rides through as the draft; a from-chart Cast for "wealth, belief, and breakthrough" puts theme + craft directive + standing context into the concept). LIVE VERIFY: a real from-chart council render for that theme produced a 5164-char themed first-person script that names the theme and reuses Jeff's standing anchor line ("Wealth flows to the order I keep") from his seeded Wealth Context, not a placement recitation; verbatim word-for-word was proven by the Morning Activation renders. 45/45 studio tests green. NOTE: C24 makes the from-chart path themed via the brief, but the actual first-person craft still depends on the council honoring the directive; the benchmark doc is the quality bar.
RENDER OUTPUT NAMING + THEME/TYPE/AUTO-VERSION BUILT + DEPLOYED 2026-06-20 (commit 5302423; build tag 2026-06-20-render-naming-theme-type). New convention {FirstLast}{Theme}{Type}_v{N}.mp3 + {..}_v{N}_Report.pdf, applied in the STUDIO PIPELINE ONLY via the storage key after the integrity guard (engine + locked demo untouched; "Demo" kept only for the demo path). pipeline.render_basename(): FirstLast = first two name tokens (Jeff_Parker, Sol_Ballard); Theme = short CamelCase slug (default SacredAudio); Type = modality (default Custom, structure fallback via structures.structure_modality, before_bed->Bed); v{N} AUTO-INCREMENTS past any existing file with the same base. jobs: audio_theme/audio_type columns (migrated) + create_draft stores them + _run_audio keys the published mp3/pdf with the new base. hermes_tools.render_sacred_audio + create_studio_draft gain theme/type; the tool description + Hermes system prompt REQUIRE inferring + passing theme + type on every audio (version never asked). main: StudioDraftRequest gains theme/type. VERIFIED with two real renders: Jeff_Parker_WealthCodes_Morning_v1.mp3 + _v1_Report.pdf, then auto-named v2. Tests tests/test_render_naming.py.
BREAKTHROUGH CRAFT AREA ADDED + SEEDED + SYNCED 2026-06-20 (commits d86378a + c122af5; build tag 2026-06-20-breakthrough-craft-area). Sixth craft area "breakthrough" (surfacing + rewriting limiting beliefs via reconsolidation, reframing, identity, rehearsal). Added to CRAFT_AREAS in BOTH craft.py copies (local engine + vendored) and to hermes_tools _CRAFT_AREAS (test test_craft_areas.py asserts the tool enum stays in sync with the engine areas); Affirmology_BreakthroughCraft_SeedSource_v1.md added to craft_seed SEED_DOCS (local engine; the vendored copy has no craft_seed.py, seeding is local-only). Seeder run (cheapest model, $0.21 of $1.50 cap): breakthrough=24 entries, craft total 94->108, brand-clean. R2 SYNC via merge-and-push: pulled R2 corpus/corpus.db, backed up to corpus/backups/corpus.db.pre-breakthrough-20260620, replaced ONLY the craft table with the local 108-row craft (integrity_check ok; meaning=20/distinctions=1 and record=25570 preserved), pushed back. FINAL craft by_area: audio_production 22, breakthrough 24, frequency_sound 6, meditation_hypnosis 15, neuroscience 10, reading_craft 31 (total 108). NOTE: re-running craft_seed re-distills ALL docs (non-deterministic) so existing areas shifted slightly. ALSO: craft_seed only authenticates if ANTHROPIC_API_KEY is in the env, so run it as: cd affirmology-agent && source .venv/bin/activate && set -a && source .env && set +a && python -m affirmology.corpus.craft_seed. ACTION (Jeff): restart the local funnel server (it has been on STALE build 2026-06-20-hermes-synthesis-selfheal for several tasks) to pick up the naming change, C24, KB, render fix, AND the breakthrough corpus.
PRACTITIONERS & TECHNIQUES RESEARCH LANE ADDED TO NIGHTLY GROWTH 2026-06-20 (commit a21fbcf). Per Affirmology_PractitionersTechniques_ResearchCorpus_Plan_v1.md. New seventh craft area "practitioners" (the assess-later wisdom layer: teachers + techniques of transformation/manifestation). New module corpus/practitioners.py (sibling + vendored): a research_backlog table seeded from the canon (29 items: Wilber, Gurdjieff, Jung, Neville, Murphy, Coue, Erickson, NLP, Maltz, the living-from-the-end / wave-function family, etc.) and growable via add_to_backlog (e.g. Jeff's ChatGPT lists). research_lane() takes the next bounded batch, distills each via the cheapest model (injected for tests) into a KEPT craft entry: core method, mechanism (labeled evidenced/traditional/metaphor), the actionable practice, how it serves an audio, tags, usefulness/confidence score; copyright tier-wall (original method only, never verbatim; public-domain fuller; quantum/wave flagged as metaphor); no medical claims; no em dashes; NEVER auto-adopted (council reads it, a human/Apollo's gate graduates it). Wired in api/growth_cron.py AFTER the meaning stages with its own caps (GROWTH_PRACTITIONERS_MAX_COST_USD default 1.0, GROWTH_PRACTITIONERS_BATCH default 6) so it never starves the meaning builder; appends a morning-report section (teachers researched, entry counts, top new finds). CRAFT_AREAS (both) + hermes_tools _CRAFT_AREAS gain "practitioners" (kept in sync, tested). NOTE: "research" is LLM-distillation from the model's knowledge, like the existing growth stages (no live web fetch wired in the cron); a search backend can be added later. Runs on the next nightly cron (not run live here); tests/test_practitioners.py covers area+sync, backlog seed/grow, a distilled batch + advance + report, and the entry fields. 53/53 studio tests green. BACKLOG GROWN (commits e922b6e + 8ce25f8 + 612797c): canon 29 -> 57 -> 92 -> 110 (Jeff's ChatGPT archive: depth/somatic/manifestation, eastern wisdom/yogic, western esoteric/mystical, meaning/flow/growth psychology, trauma/mindfulness/breathwork, sound/frequency/journey, mind-body, indigenous/shamanic, stoic/taoist, performance, AND an 18-entry HYPNOTHERAPY block: Braid, McGill, Boyne, Yapko, Gilligan, Rossi, Kappas, Banyan, Marisa Peer/RTT + inductions/deepening/Milton Model/suggestion/regression/parts/post-hypnotic/self-hypnosis/suggestibility). SORTING FLAGS: each researched entry now also carries scope (now|future|archive) + form (audio|journaling|mindset|journey|breath|sound), validated and folded into tags as "scope:..., form:...,"; the report shows scope + form counts. RESEARCH PRIORITY: _pending orders the backlog by CATEGORY_PRIORITY (hypnotherapy then neuroscience_suggestion, the disciplines closest to our audios) before broader traditions. WIRED INTO HYPNOS: council.select_craft adds a dedicated PRACTITIONER METHODS slice (area="practitioners") and HYPNOS_SYSTEM lists practitioner methods + belief breakthrough as craft to draw on for induction/deepening/suggestion/post-hypnotic (both council.py copies synced; empty+skipped until the lane populates the area). Live backlog seeded to 110 pending (queue head is hypnotherapy). 55/55 studio tests green.
API spend: started ~$29 of credit, ~$19 spent, roughly $9-10 left (confirm in Console at https://console.anthropic.com/settings/billing). Haiku 4.5 rates: $1/M in, $5/M out. Max plan does NOT cover API; credits are separate.
Canonical spec: Affirmology_DemoAudio_Baseline_v1.md (with the underscore). Do not use Affirmology_DemoAudioBaseline_v1.md, that one is a superseded stub.
Essentials: the Jeff Parker render is the reference (files in affirmology-agent/out/jeff_parker_demo_2026-05-21/). Voice ElevenLabs Charlotte, model eleven_turbo_v2_5, settings stability 0.65 / similarity 0.85 / style 0.0 / speaker boost on. Music bed Heavenly Circuit, voice-anchored mix, target -16 LUFS, -1 dBTP.
SPEED LOCKED TO 1.0 (2026-06-15): the proven-clean gold-standard renders (Jeff v1/v2) were at speed 1.0; v3 was 1.05. The earlier auto-tune climbed to 1.12+ on longer scripts and caused pitch warble (Jeff reported the demo unlistenable). The demo server now passes --speed 1.0 explicitly (locked), and the CLI auto-tune ceiling is capped at 1.05 so even the auto path can never warble. THE DEMO IS LOCKED: do not change its structure or settings without Jeff's explicit say-so. All experiments live in the Studio.
QC NOW WIRED (2026-06-15): the failure mode is ElevenLabs Turbo dropping voice mid-track at high speed (Sol's/Alex's old renders). scripts/audio_qc.py runs on the voice-only track of every CLI --audio render, re-renders slower on a dropout, and refuses to serve a bad file. Note: QC catches dead-air dropouts, not pitch warble; the speed-1.0 lock is what prevents the warble. PDF: WeasyPrint was never installed (why demo PDFs failed); now installed, and on macOS the pipeline injects DYLD_FALLBACK_LIBRARY_PATH=/opt/homebrew/lib so WeasyPrint finds pango/glib. PDF confirmed generating.
Architecture: demo.affirmology.ai (Cloudflare Pages) -> Cloudflare Worker -> laptop over Tailscale -> FastAPI (affirmology-demo-site/server/api.py) -> affirmology CLI -> audio + PDF -> webhook -> Resend email.
Done: Tailscale installed and connected on the laptop. Machine name macbook-pro-2, Tailscale IP 100.98.80.60. That IP is the Worker's MAC_MINI_URL target.
Front-end (rebuilt 2026-06-13, in CLAUDE OUTPUTS/Affirmology/demo-site-v2/): cinematic landing with a short NDA gate and the intake form (index.html), and the result experience (result.html): a ~2 minute web-native teaser (kinetic text in the brand palette, scored by the Lily trailer VO plus music bed at assets/teaser.mp3), then a ritual cue, the personalized audio player, an educational outro, a partial report reveal, and download buttons for the MP3 and the PDF. Hero line is now "One voice. One chart. One healing." The form posts to /api/render; the result page polls /api/status/{job_id}. No bundled example is loaded. A clean Cloudflare Pages upload folder (index.html, result.html, assets/teaser.mp3 only) is at CLAUDE OUTPUTS/Affirmology/deploy/cloudflare-pages-upload/. The "video while audio loads" slot is web-native animation, not Higgsfield; a separate chat is also building an animation variant for it. Deploying this folder to the existing direct-upload Pages project (demo.affirmology.ai) via New deployment is in progress. Until the Worker and Tailscale are wired, the page holds after the teaser (no audio) by design. Future automation option: connect a GitHub repo to the Pages project for auto-deploy instead of manual upload.
Single upload folder (2026-06-13): UPLOAD-THIS-TO-CLOUDFLARE/ at the AFFIRMOLOGY root is the one place to deploy. It now holds index.html (NDA forced every visit), result.html, assets/teaser.mp3, and the two new self-contained animation pages copied from the marketing chat: primer.html (= Affirmology_Primer_v5, the loading film with the lit-up bodygraph, Gene Keys wheel, audio-wave, Lily VO) and whatsinstore.html (= Affirmology_WhatsInStore_v2, the upsell reel). Uploading this folder makes all of them live (demo.affirmology.ai/primer.html, /whatsinstore.html). FUSED (2026-06-13): the flow is now form -> primer.html#<job_id> (the cosmic film with Lily VO) -> when the film ends it hands the job to result.html#<job_id>&film, which skips its own teaser, waits for the render (holding on "Composing your soul song"), then ritual ("Play my audio") -> audio player -> educational outro -> partial report reveal -> the two download buttons wired to the rendered files from /api/status. The in-page kinetic teaser stays as the fallback for a direct visit to result.html with no job. Standalone /primer.html (no job in hash) still shows its own endcard. Edits: index.html go() points to primer.html; primer toEnd() redirects when a job_id is present in the hash; result.html parses &film and runs film-mode. Also fixed a null name-wait reference that could have broken result.html. NEEDS Jeff's on-laptop live test (submit the form while the server and tailscale funnel 8443 are running). Re-upload the UPLOAD-THIS-TO-CLOUDFLARE folder to pick up the fused index.html, result.html, primer.html. POST-AUDIO FUSED (2026-06-14): when the personal audio ends, result.html now hands off to whatsinstore.html#<job_id> (the use-case reel). The reel's endcard wires its two buttons (Download your audio, Download your report) to the real files from /api/status and renders a partial report blueprint BELOW the buttons (buttons above the writeup, by request). So the re-upload now also carries the updated result.html and whatsinstore.html.
DEPLOY ARCHITECTURE CHANGED (2026-06-15): the site is now a GitHub-connected Cloudflare Worker named affirmology-site (GitHub repo jeffparkerlove22/affirmology-site, local working copy at AFFIRMOLOGY/affirmology-site/), and it AUTO-DEPLOYS on git push. It serves demo.affirmology.ai (the custom domain was moved off the old direct-upload Pages project affirmology-demo, which is now orphaned and can be deleted later). The API worker affirmology-demo-worker still owns demo.affirmology.ai/api/* and was verified still working alongside the new worker. Canonical site files now live in AFFIRMOLOGY/affirmology-site/ (index.html, result.html, primer.html, whatsinstore.html, assets/teaser.mp3); Cloudflare also added its own Workers config commit to the repo. DEPLOY WORKFLOW going forward: edit the affirmology-site files, then in GitHub Desktop Pull (to pick up Cloudflare's config commit), Commit, Push; it auto-deploys in about a minute. There is also a test URL (affirmology-site.jeff-e97.workers.dev) for checking before/without touching the domain. The old UPLOAD-THIS-TO-CLOUDFLARE drag-and-drop path is retired.
VERIFIED END TO END (2026-06-15): a real form submission on demo.affirmology.ai ran the full flow, form to primer film to personalized audio (rendered on the laptop, served over the Tailscale funnel) to the post-audio reel to the report and download buttons. Server terminal confirmed POST /render-sacred-audio 200, GET /status/{id} 200, and GET /files/.../.mp3 200/206. So /api/ on demo.affirmology.ai still routes correctly to the API worker even though the new static worker holds the custom domain (the earlier empty external probes were caching, not a routing break). The corpus-grounded, style-only generator was the version used. Open improvement notes from Jeff (to capture and work later): the audio, the report, the "video" pieces, and the overall process all have refinements he wants.
LIVE (2026-06-13): FastAPI server (affirmology-demo-site/server/api.py) running on the laptop at port 8443, exposed publicly via Tailscale Funnel at https://macbook-pro-2.tail333640.ts.net . Worker deployed with MAC_MINI_URL and MAC_MINI_AUTH_TOKEN; shared secret is affirmology-demo-secret-2026; route demo.affirmology.ai/api/* active. Chain proven externally: /api/health and /api/status/{id} both answer through the Worker from the laptop. Server adds GET /status/{job_id} (returns state + audio_url + pdf_url + blueprint) and serves the rendered files at /files via the Funnel; Worker adds GET /api/status/{job_id} proxy. Resend domain affirmology.ai is verified, but RESEND_API_KEY and FROM_EMAIL are not yet added to the Worker, so email is still off (optional). First real form submission was fired 2026-06-13 for Jeffrey Alan Parker (job 535b38a3): the chain worked, the laptop accepted it and began rendering, but it was still rendering after ~7 minutes (slower than the usual 3-5, likely the concurrent corpus runs competing for CPU/API) when the laptop had to go offline for an investor meeting, so this render did not finish. Not a failure of the wiring; the POST and status polling both worked.
CRITICAL operational fact: the live custom-audio demo only works while THIS laptop is awake, online, and running both the server and tailscale funnel 8443. When the laptop sleeps or leaves internet, the demo's audio generation is offline (Sol cannot test it remotely for this reason). The Cloudflare side (the site, the teaser, primer.html, whatsinstore.html) stays live regardless; only the per-person render needs the laptop.
Restart recipe (Worker + secrets persist, no redeploy; funnel host stays macbook-pro-2.tail333640.ts.net):
1. Server window: cd affirmology-agent && source .venv/bin/activate && cd ../affirmology-demo-site then run uvicorn with AFFIRMOLOGY_AUTH_TOKEN="affirmology-demo-secret-2026", AFFIRMOLOGY_PUBLIC_BASE_URL="https://macbook-pro-2.tail333640.ts.net", PYTHONPATH=".../affirmology-agent/src", uvicorn server.api:app --host 127.0.0.1 --port 8443.
2. Tunnel window: /Applications/Tailscale.app/Contents/MacOS/Tailscale funnel 8443.
Full commands in CLAUDE OUTPUTS/Affirmology/deploy/BACKEND-TEST-RUNBOOK.md.
Still to do: complete one real render end to end (re-run a submission once the laptop is back online with the server up); consider whether the background corpus runs should pause during a live demo so renders finish in 3-5 min; add RESEND_API_KEY + FROM_EMAIL to the Worker to turn email on; re-upload already done for the always-on NDA + primer.html + whatsinstore.html.
Hard rules for the demo:
- The live demo must ALWAYS generate the custom audio for the exact person and chart entered in the form. Never load a bundled or stock example. The form posts to /api/render and the result page polls /api/status/{job_id}.
- Do not use the Alex Carper render as an example anywhere; it has a mid-track audio volume problem (the dropout failure mode).
- Cloudflare dashboard navigation (Jeff's account): Pages and Workers live under the sidebar item Compute (Workers), not "Workers & Pages." Inside a website (zone) the sidebar only shows zone tools, so click the Cloudflare logo to return to Account Home first.
script_generator.py as rule 0, and the full recipe plus a fictional exemplar live in Affirmology_ScriptStyle_Reference_v1.md.Affirmology_Studio_Spec_v1.md.human_design.py _derive_type now detects a motor-to-throat connection through the full defined-centers graph (indirect connections through the Spleen/G/etc. count, not just a single direct channel), so the engine returns Manifesting Generator for Jeff. His chart was otherwise correct (profile 2/5, Single definition, Sacral authority all matched his report, so birth data and gate calc are fine). Verified on his real channels (16/48, 26/44, 34/57) and control cases; Josh's oracle test is unaffected because his Throat is undefined. Re-run pytest on the Mac and re-render to confirm in the full pipeline (the server spawns a fresh process per render, so no restart is needed).affirmology-agent/src/affirmology/verification/known_charts.py and the May 29 renders in affirmology-agent/out/. They seed the Studio People Library so birth data is never re-typed.Affirmology_DemoAudio_Baseline_v1.md: locked audio spec.Affirmology_ScriptStyle_Reference_v1.md: the script craft recipe and a fictional style exemplar (style shared, content never).Affirmology_CloudStudio_BuildSpec_v1.md: AUTHORITATIVE build plan for moving the studio to the cloud (Render API + Cloudflare Pages + R2, phone-usable, 24/7, no laptop). MVP target before a Tennessee trip ~2 weeks out. Being built in a Claude Code session. Supersedes laptop+Tailscale as the target; the laptop demo runs interim. The studio FEATURE design lives in Affirmology_Studio_Spec_v1.md and layers on top.Affirmology_InvestorVideoScriptBrief_v2.md: source brief for the investor video script and investor details (voice direction, differentiation, June 20 launch astrology, Jeff/Sol chart, macro moment, Loft, CTA).Affirmology_SubconsciousOS_AgenticArchitecture_v1.md: the agent architecture (three tiers, corpus-fed generation design).Affirmology_BackendArchitecture_v1.md: what is built across the five layers.Affirmology_AudioMastering_Production_Research_v1.md: the mastering craft and tool research.Affirmology_AudioSetup_Checklist_v1.md: install list, free audio tools, LANDR.Affirmology_CorpusStatus_2026-06-13_v1.md: detailed corpus status snapshot.Affirmology_MacMiniSetup_Guide_v1.md: Mac mini install path (paused).Affirmology_DemoLaunchPlan_v2.md: canonical demo launch plan.affirmology-agent/: the code. affirmology-demo-site/: the web demo scaffold.Affirmology_Primer_v5.html (LATEST; v1-v4 are superseded iterations): the consumer "loading trailer" web experience that plays while the demo audio renders. Single self-contained file (Lily VO embedded), zero external dependencies (built-in Web Animations + CSS; do NOT reintroduce a CDN animation library, it broke in preview). Cosmic scenes: chart forms, then sustained Astrology / Gene Keys / Human Design showcases (with the centers and channels lighting up) with big titles and concept word-throw, the turn, a warm audio-wave bridge (concentric sound rings + stacked waveforms, no figure), bloom. Highlights-only big text, gentle typewriter, timing frame-accurate, non-overlapping word slots. It now ends on a "Your soul song is ready" hand-off with TWO inert download boxes (Download your audio, Download your report PDF), to be wired to the rendered files later. No membership/preparing language.Affirmology_WhatsInStore_v2.html (LATEST): short post-audio upsell/concept film, now with a Lily VO (Affirmology_WhatsInStore_VO_Lily_v1.mp3, ~65s) hammering use cases (breathwork/journey priming, morning walk, run, gym, pre-sleep, relationships, abundance, healing, the transit cadence, the chatbot guide), big held use-case lines, an audio-wave/equalizer motif, ending on the SAME two inert download boxes (Download your audio, Download your report PDF). NOTE: concept/marketing piece, not the real results screen. The real results page (user's astrology text + the two real download links) is built in the separate webpage chat; see the handoff doc.pFZP5JQG7iQjIQuC4Bku), generated at speed 0.7 then time-stretched atempo 0.95, synced via the with-timestamps endpoint. File: Affirmology_TrailerVO_Lily_synced_v1.mp3 (~109s). The trailer script is Sol's edit (in Affirmology_TrailerVO_Sol_v1_script.md). Note: demo-audio voice is still Charlotte (section 4); investor-video narrator should be the male voice per the v2 brief. Three different voices for three different assets, on purpose.Affirmology_VideoStrategy_v3.md (trailer + investor film strategy, evidence vault), Affirmology_TrailerProductionKit_v1.md, Affirmology_InvestorVideoKit_v1.md, Affirmology_InvestorBrief_v1.pdf/.html (written investor brief, terms section left open for Jeff), Affirmology_PredictiveBrain_IdentityChange_Research_v1.md, Affirmology_CreatorEconomy_Monetization_Research_v1.md, Affirmology_WebFlow_Handoff_v1.md (copy-paste handoff for the webpage-building chat: the consumer flow, the two download buttons, design tokens, brand rules, voices).Affirmology_InvestorVideoKit_v1.md was rewritten to follow Affirmology_InvestorVideoScriptBrief_v2.md (the governing brief): male narrator, Subconscious Operating System frame, moat reframed honestly as taste + Sol/Miami community + Jeff + velocity (NOT the database), and the June 20 launch chart, Jeff-and-Sol synastry, Aphrodite name layer, macro "AI reshaping work" moment, the Affirmology Loft, the Affirmologist/affiliate ceremony network, belong-to-the-movement investor psychology, and multi-door CTA all added. Narrator pick still open (test George/Brian/Bill). STILL TO DO: the written Affirmology_InvestorBrief_v1 PDF and the investor section of VideoStrategy_v3.md predate the v2 brief and still lead with the database/bridge moat and older rollout; bring them to the brief's framing in a future pass.Affirmology_InvestorVideoKit_v1.md Parts G and H, NOT yet scripted): reframed as a participation/mission film (recruiting beta testers, ambassadors/affiliates, and investors/team, not just investors). Two host characters in dialogue, both as LIVING MARBLE-AND-GOLD STATUES with inner constellations: a robed Hellenistic Oracle (Urania/Sophia wisdom, intact and draped, NOT a nude Venus) and a timeless Astronomer-Sage (philosopher-astronomer, NOT a fantasy wizard). They mirror Sol and Jeff; Jeff and Sol appear in their own office-studio clips near the end. Includes an objection-handling map, a 'how it works' agentic-system/backend visualization beat, and the ask (tiers $5k-$30k, target $30k+ this summer, $50k+ desired, small amounts welcome; numbers stay off screen). CAPITAL PHILOSOPHY (2026-06-15, Jeff, important for all investor framing): NOT raising millions and NOT courting VC firms. Total target roughly $30k to $150k, up to ~$250k, to break through and stand up the Loft/engine, after which the business is profitable via ads, affiliates, events, and product revenue. Direct Wyoming LLC units are REAL OWNERSHIP (not SAFEs): the right to share in profit exists from the start, BUT actual distributions are realistically 12-24 months out, after break-through and profitability (Jeff was explicit 2026-06-15: do NOT claim "distributions from day one" or near-term cash; be honest about timing). The "steal" rests on a low entry valuation on a live, working product before revenue reprices it, not on immediate income (Jeff: "people seeding with us are getting a steal"). The entity stays an LLC on purpose (the C-corp/VC path is explicitly NOT the plan). New investor docs (2026-06-15): Affirmology_NorthStar_v1.md (first-person founder vision/conviction narrative, the data-room centerpiece), Affirmology_InvestorDataRoom_Blueprint_v1.md (data-room gap analysis + build order inspired by the YouPoff pre-seed breakdown). TOOLING decided: GSAP is now 100% free (use on the live in-browser web pages); Higgsfield generates the cinematic footage. ON-SCREEN GRAPHICS TOOLING (updated 2026-06-15, Jeff): build all motion graphics in BOTH Remotion AND Hyperframes IN PARALLEL and A/B which is better per need until a clear winner emerges (if ever); applies to the V2 website videos (teaser + post audio) AND the investor film. Both render via headless Chrome + FFmpeg on Jeff's Mac and both export transparent ProRes 4444 overlays. Remotion = React (free <=3 employees, mature, great for high-volume-from-data); Hyperframes = HeyGen's open-source HTML+GSAP, agent-native (Claude authors compositions in plain HTML, our strongest format), likely the lower-friction fit for how we work. Remotion starter already scaffolded in Affirmology_RemotionGraphics/. When full per-video plans are written, start creating the actual assets here (Claude authors, Jeff renders). Mac render prereqs: Node 22+ and FFmpeg. Full map: Affirmology_VideoToolingPlan_v1.md; research: Affirmology_VideoAsCode_Research_v1.md; friends-and-family raise structure: Affirmology_FriendsAndFamilyRound_v2.pdf (v2 SUPERSEDES v1; v1 wrongly implied day-one distributions, do not send it). North Star narrative: Affirmology_NorthStar_v1.md.Full demo feedback from the 2026-06-15 run-through is tracked in Affirmology_DemoPunchList_v1.md. Resolved 2026-06-15: HD type (Manifesting Generator fix held), the audio (speed-1.0 lock + QC gate, voice-anchored 6:17 mix covers the voice), and PDF generation (WeasyPrint installed + lib path). Still open: email needs the Resend key added to the worker; the primer film needs gap-filling text (all sphere names, more astrology points) and subconscious-block visuals instead of Human Design on the "bypass" beat; compare on-screen blueprint vs PDF vs original baseline for consistency.
audio_qc.py WIRED into every render, WeasyPrint installed so the demo PDF generates. Re-rendered Jeff clean (QC PASS, 6:17, PDF OK). The demo is LOCKED.affirmology-studio/, section 11). Local-first, two-phase script-then-audio, named structures, QC-gated audio, mobile-first brand-matched page. Run with affirmology-studio/run_local.sh.render.yaml) + R2 bucket (STUDIO_STORAGE=r2) + Cloudflare Pages for web/ + Cloudflare Access gating on studio.affirmology.ai. All scaffolding is in the repo._corpus_sources() in script_generator.py; v5 reference is a content-free skeleton. Refine retrieval keywords if snippets read noisy./Users/jeffreyparker/CLAUDE/AFFIRMOLOGY/corpus (moved off the SSD 2026-06-18, section 20). Renders/studio-media still persist to the SSD (/Volumes/Affirmology/studio-media). A cloud sandbox cannot see local files, and Terminal is locked to click-only under screen control, so credit-spending commands run on the Mac and are pasted by hand. This is why the human runs commands, not the agent..venv/bin/python) before running the agent; a fresh reboot drops the venv..claude/settings.local.json: the permission UI owns it and rewrites it on every grant, clobbering edits. Put durable allow rules in .claude/settings.json (project), which merges and is not auto-overwritten. A broad safe allowlist (python, curl, grep, pip, uvicorn, pytest, file edits) plus defaultMode: acceptEdits is already there to reduce permission prompts during infra work.Governing build spec: Affirmology_CloudStudio_BuildSpec_v1.md (infrastructure). Feature design: Affirmology_Studio_Spec_v1.md. Both honored. The app is affirmology-studio/ at the AFFIRMOLOGY root.
What it is: one app that is BOTH Jeff's desktop tool and the future studio.affirmology.ai. It wraps the existing affirmology-agent pipeline (does not rewrite it). Cloud-shaped (FastAPI api/, static web/, storage.py abstraction, api/Dockerfile, render.yaml) but runs LOCAL-FIRST on this laptop using the agent's venv and .env. Storage is local now (files served at /media), R2 is a drop-in swap (STUDIO_STORAGE=r2 + R2_* env, R2Storage already written).
Two-phase, script-first cost discipline (matches the hard rule):
- "Generate script" (cheap default): CLI --script --build-report --concept <structure directive>. Strong model for the script, Haiku for the script map and build report. No voice cost.
- "Render the audio" (on demand, keepers only): CLI --audio --music <bed> --speed 1.0, QC-gated, into the same job folder so it reuses the script. Produces the mixed MP3 + the Sacred Audio Report PDF.
Structures are DEFINED, NAMED templates: api/structures.py has 14 structures across 8 categories (Foundational, Gene Keys, Astrology, Human Design, Numerology, Subconscious & somatic, Integrative, Custom). Each locks a shape (which systems lead, sequence, technique slots, length, tone) as a directive; the chart supplies all content; the model never re-invents the shape. "Custom" takes a free directive.
Endpoints (api/main.py): GET /api/structures, POST /api/script, POST /api/audio/{job_id}, GET /api/jobs/{id}, GET /api/jobs (the library), GET /api/health. GATE: local dev runs WITH NO GATE (2026-06-15). ROOT CAUSE of the "stuck on the access screen / button does nothing" bug was CSS, not auth: .gate sets display:grid, and an author display rule overrides the browser default [hidden]{display:none}, so toggling the hidden attribute in JS never actually hid the gate (it stayed painted as a fixed overlay even though the code had dismissed it and loaded the shell underneath). Fixed with [hidden]{display:none !important;} in styles.css. Separately, the gate is now also removed for local entirely: config.REQUIRE_AUTH (env STUDIO_REQUIRE_AUTH, default false) controls it: when false the API does not require the token and the front-end skips the gate entirely (it reads health.config.require_auth and lands straight on the compose screen). The cloud deploy sets STUDIO_REQUIRE_AUTH=true (in render.yaml) so studio.affirmology.ai stays gated by the shared bearer token (STUDIO_AUTH_TOKEN, default affirmology-studio-local-dev). Front-end asset refs are cache-busted (?v=2). Jobs run one-at-a-time in a thread, state in SQLite (affirmology-studio/data/studio.db), so the library survives a restart. Web (web/index.html|styles.css|app.js) is mobile-first and brand-matched to the live site (forest green / gold / cream; Cormorant Garamond + Inter + JetBrains Mono): gate, compose (person + structure), live progress, script view (script + build report + chart chips + "Render the audio"), result view (player + MP3/PDF downloads), and the library.
VERIFIED END TO END (2026-06-15): script phase produced a grounded 1009-word script (0 em dashes, correct chart: Manifesting Generator) + build report on Haiku; audio phase rendered Charlotte at 1.0, QC PASS, mixed MP3 + PDF, both served via /media. 29 pytest green after all engine changes.
FRONT-END REBUILT TO THE APPROVED MOCKUP (2026-06-15, later same day): per Affirmology_StudioBuildBrief_v1.md, the front-end now matches CLAUDE OUTPUTS/Affirmology/Affirmology_StudioUI_v3.html exactly (locked brand: starfield + aura + grain, Cormorant/Inter/JetBrains, emerald+gold). It is a 5-screen SPA wired to the real engine: LOGIN (local: log in as any of the four seeded people), HOME (greeting, quick actions, People Library with REAL computed charts, activity feed from real jobs, approved picks, category grid with readiness badges ✓ working / empty / in progress / ★ pick), COMPOSE (conversational workbench: paste-anything brief -> real chart-driven script via the two-phase engine; sending more messages makes new versions; gold "Render to audio" spends voice credits only on keepers; right rail with person/category select/length/status/versions), LIBRARY (per category, empty states + working-version badge across people), VERSION DETAIL (player, full script, "Why this build" = the team build report + Audio QC status, feedback thread with comfort vote 1-5 + comments, Make-this-the-pick).
NEW BACKEND: api/people.py seeds four charts (Jeff, Sol, Colin, Josh) from known_charts.py, which now also holds SOL_BIRTH and COLIN_BIRTH. Endpoints: /api/people, /api/categories, /api/categories/{id}, /api/compose, /api/audio/{id}, /api/jobs[/{id}], /api/jobs/{id}/feedback, /api/jobs/{id}/pick. Jobs are organized as PERSON + CATEGORY + VERSION with picks and feedback in SQLite. Deep-link #as=<person>[&pg=<page>][&job=<id>] logs straight in.
VERIFIED (2026-06-15): pytest 29 green; real two-phase render for Sol / Before-bed reprogramming (826-word script, 0 em dashes; Audio QC PASS; MP3 9.9MB + PDF 71KB served via /media; build report 11.6k chars); feedback + pick persist; category readiness updates; home screen screenshotted and matches the mockup, with the live render showing in the activity feed.
FAST-FOLLOW (UI present, not yet wired, per the brief): relationship/multi-chart synergy, deep cosmic report (PDF, no audio), new-category creation, share/required-request notifications. The Verifier is not yet surfaced in the Studio build report (Audio QC is).
Run it locally: cd affirmology-studio && ./run_local.sh then open http://localhost:8000. Access key not needed locally (gate-free on localhost).
PHASE 1 DEPLOY = LAPTOP ENGINE + CLOUDFLARE (2026-06-15, per Affirmology_StudioDeploy_Runbook_v1.md; NOT Render yet, that is Phase 2 this week). The WHOLE Studio (UI, API, script phase, audio renders, SQLite library) runs on the laptop. PERSISTENCE: finished media (MP3 + PDF + build report) persist to the SSD at /Volumes/Affirmology/studio-media (env STUDIO_MEDIA_DIR); the library DB stays on the laptop at affirmology-studio/data/studio.db; render scratch in data/renders/. Both survive restarts (verified). START (two terminals): cd affirmology-studio && ./start_public.sh (server on 127.0.0.1:8765, prints the token; sets STUDIO_REQUIRE_AUTH=true, media on SSD) and /Applications/Tailscale.app/Contents/MacOS/Tailscale funnel --bg --https=8443 8765. Public funnel URL: https://macbook-pro-2.tail333640.ts.net:8443 (the demo's funnel on 443 is untouched; studio uses 8443). AUTH: the token is required for funnel/public traffic (the Cloudflare worker injects it); direct http://localhost use on the laptop is exempt by Host header, so the laptop tool stays gate-free. Token persisted in affirmology-studio/.studio_token (gitignored).
CLOUDFLARE (Jeff clicks, click-by-click in affirmology-studio/PHASE1_CHECKLIST.md): front-end on Pages (Direct Upload of web/, no GitHub needed) at studio.affirmology.ai; a Worker (affirmology-studio/cloudflare-worker/) routes studio.affirmology.ai/api/* AND /media/* to the funnel URL with the token injected (secrets STUDIO_FUNNEL_URL, STUDIO_AUTH_TOKEN); Cloudflare Access (Zero Trust) one-time-PIN allowlist for jeff@jeffparker.love and solballard@gmail.com ONLY.
VERIFIED 2026-06-15 (laptop + funnel side; the studio.affirmology.ai hop is Jeff's clicks): pytest 29 green; whole app runs on the laptop; media persists to SSD, DB on laptop; a rendered audio + the library survive a server restart; script phase works through the public funnel (Jeff/Founder confidence, 898 words, 0 em dashes); the ONE approved audio render persisted to the SSD and plays back over the funnel (HTTP 206, seekable); token enforced over the funnel (401 without it), localhost gate-free. UI fixes done: logo is Affirm + gold ology; Jeff and Sol both labeled "Founder" (equal billing). COST DISCIPLINE: script-only by default; audio (ElevenLabs) only on explicit per-version approval; the engine never auto-renders. KEEP READY for Phase 2 (a config switch, not a rebuild): render.yaml, api/Dockerfile, the R2 backend in api/storage.py, and STUDIO_REQUIRE_AUTH all in place.
STUDIO UI APPROVED 2026-06-15 (Jeff signed off on the direction): the clickable mockup CLAUDE OUTPUTS/Affirmology/Affirmology_StudioUI_v3.html is now the DESIGN SOURCE OF TRUTH, and Affirmology_StudioBuildBrief_v1.md is the authoritative build brief for Claude Code. The approved Studio is more than the current build: (1) Compose is a CONVERSATIONAL workbench, one big paste-anything box (no char limit, takes a whole Gemini dump), the system reflects back / asks questions / drafts a script inline / revises as you type, until you say "I want to hear this version" then the render button spends voice credits (script-first cost discipline preserved). (2) The logged-in person is the DEFAULT subject; you can compose for someone else and both can see/hear it (testing). (3) Per-category Library with proper EMPTY states ("be the first to create one") and a green "✓ working version" badge so the team can see the suite of audios that are actually ready. (4) Share + HARD REQUEST with a note + notify (required requests stay flagged on the recipient's list). (5) Reports on every audio. (6) Relationship / Synergy (combine 2+ charts) and one-click Deep Cosmic Report (report only, any person). (7) New-category creation (some categories like EFT may hold several audios + instructions). (8) Login: log-in-as-anyone kept for Jeff's LOCAL build; the WEB build gives Sol and Jeff their own logins (Colin later). NAMING: full names everywhere (Jeff Parker Love, Sol Ballard, Colin Jacobs, Josh Parini); equal billing, no "founder" slight, never "system/soul" framing. NEXT: Claude Code builds to this brief and deploys to the web so Sol can test.
Open studio refinements (not yet done): a few structures slightly overran the word cap (founder structure hit 1009 vs the 950 target) so per-structure length tuning is worth a pass; the Studio Spec's later layers are not built yet (comfort vote 1 to 5, A/B variants, multi-person feedback, the leaderboard, push-to-inner-circle, the techniques corpus tradition, Google Sheet tracking, the known-chart accuracy harness). Cloud deploy (Render + R2 + Cloudflare Pages + Cloudflare Access gating on studio.affirmology.ai) is pending Jeff creating the Render/R2 accounts.
CLAUDE OUTPUTS/Affirmology/Affirmology_CouncilLoop_Prompts_v1.md. Live demo on Sol (v1 generic -> loop -> v2 cleared, showing the lift): CLAUDE OUTPUTS/Affirmology/Affirmology_CouncilLoop_Demo_Sol_v1.md. NEXT CODE STEP: add sophia_brief(), chiron_plan(), apollo_review(), compose() to script_generator.py and verify with a live API render (needs Jeff's go). Acceptance rule honored: script-only, shown, no ElevenLabs.Affirmology_TechniquesLibrary_v1.md; later the structured "techniques" corpus tradition), it SELECTS and SEQUENCES the fitting techniques and outputs an ordered technique plan (technique | position in the arc | one-line rationale) plus a "left out and why" note. Orpheus weaves the techniques in at Chiron's positions; the build report ("Why this build") prints the plan verbatim. The existing Apollo technique-fit gate and Hypnos gate are KEPT and now CHECK Chiron's plan (fit + adherence), so techniques are designed up front instead of discovered reactively through the loop. Brand rules honored: never names the meditation teacher (heart coherence breath / embodied gratitude induction); sound/frequency layers claimed as felt experience only, beds only where they fit. Before/after demonstration on Jeff's real chart (founder-confidence audio): CLAUDE OUTPUTS/Affirmology/Affirmology_CouncilLoop_Chiron_Demo_Jeff_v1.md (shows the plan and how the script changed). Still prompts-only; wiring into code waits with the rest of the council.council.py + Apollo's gates with Sophia/Chiron/Orpheus after. Gate prompt drafted in CLAUDE OUTPUTS/Affirmology/Affirmology_Persephone_GatePrompt_v1.md. Origin: Jeff's 2026-06-18 note that the breakthrough piece "almost needs to be a bot itself."affirmology-agent/src/affirmology/chart/relationship.py, additive, demo untouched. Shared two-chart synastry engine (HD connection + Penta, Western synastry/composite, Vedic Moon nakshatra + partial Kuta, Gene Keys Venus overlap), reusing human_design.py maps. It is the shared engine under Prometheus + the Eros/Concordia/Hestia/Gaia lenses, per the council doc. Spec: Affirmology_RelationshipAgent_Spec_v1.md. TODOs: full Vedic Ashtakoot, Western interpretation/weighting layer, wire into Prometheus and lenses (Eros-for-clients first).Studio is LIVE at studio.affirmology.ai (gated for Jeff + Sol; the affirmology-studio-api Worker routes to the laptop funnel; SSD persistence). Jeff rendered his own audio: the story "sounds like me" (the North Star showing up), voice clear, good music balance. The single prioritized build queue is Affirmology_StudioChangeList_v1.md. Key items:
- P0 CRITICAL chart-integrity bug: a report crossed two charts (placeholder "render"/2000-01-01 in the header/blueprint/section-labels; Jeff's real data in the prose). Cause: people library not wired (so the render used the placeholder identity) and report vs script read different chart sources. Fix: wire the four real charts so a selected person passes real birth data; report + script from ONE chart computation; never fall back to a placeholder (fail loudly); purge the "render" job. Oracle: Jeff = Virgo Sun, Cancer Moon, Capricorn Rising, MG, Sacral, 2/5, Single, Gate 47, Life Path 22.
- P0 iterative composer: the script step is one-way and loses the user's notes. Keep notes editable after generation, regenerate as versions, render as a separate explicit step. The conversational composer from the mockup.
- Live audio feedback: music bed must cover the FULL audio length (loop/extend/fade tail); cadence, let key recognitions breathe instead of being rattled past (the council loop's job).
- Voice-note feedback; feedback reachable from EVERY screen and accepting a long pasted transcript; co-created length (stop defaulting to the demo's ~6 min); named agents speak in the UI (Sophia/Orpheus/Apollo), shown in the v3 mockup.
- Craft: structure-aware endings, and the openings AND endings are crafted by Orpheus as bookends (never a placement checklist). Docs: Affirmology_AudioOpenings_Framework_v1.md, Affirmology_BeforeBed_AudioStructure_v1.md.
- Design source of truth for the UI: CLAUDE OUTPUTS/Affirmology/Affirmology_StudioUI_v3.html. Agent design: Affirmology_AgenticCouncil_Design_v1.md, Affirmology_InsightAgents_Design_v1.md. Build brief: Affirmology_StudioBuildBrief_v1.md. Change queue: Affirmology_StudioChangeList_v1.md.
- Ops: Affirmology_StudioDeploy_Runbook_v1.md (Phase 1 done; Phase 2 = Render + R2 later). Living user guide with changelog: CLAUDE OUTPUTS/Affirmology/Affirmology_StudioGuide_v1.html (link in the Studio nav). Onboarding any chat to the system: Affirmology_SystemInterface_Guide_v1.md.
- Before sending to Sol: land the two P0 fixes (chart-integrity + iterative composer), refresh, then invite her. Security: disable the workers.dev URL on affirmology-studio-api so the gated domain is the only way in.
- BUILD ORDER now (per Jeff 2026-06-16): (1) council+loop prompted roles [done as prompts+demo; code wiring next], (2) Blueprint Insight Agent [feeds Sophia, opens Studio composer], (3) wire relationship.py into Prometheus+lenses, (4) Transit & Timing, (5) Potentials & Recommendation, (6) Echo + trend agents.
- Kickoff-week client work (2026-06-16): 6 scripts in Affirmology_KickoffWeekSuite_v1.md, deep blueprint report Affirmology_CosmicBlueprint_Report_v2.pdf, analysis, Penta hiring map. All script-only, no renders.
BUILT as a prompted role and demonstrated on Jeff (ranked "what matters most" + convergences/tensions/gifts + suggested audio angles). Spec + demo: CLAUDE OUTPUTS/Affirmology/Affirmology_BlueprintInsightAgent_Spec_v1.md. Output is a BRIEF, not an audio. Feeds Sophia and opens the Studio composer. Code wiring (ahead of Sophia in compose(), and into the composer screen) pending the live-render step. NEXT: step 3, wire relationship.py into Prometheus + the lenses (Eros-for-clients first).
The council/loop is now CODE, not just prompts, and embedded at the creation entry points:
- affirmology-agent/src/affirmology/agents/council.py: sophia_brief(), apollo_review(), compose() (Sophia -> Orpheus -> Apollo loop, writes council_transcript.md). Additive.
- script_generator.generate_script() gained an additive council_context="" param (empty by default, so the LOCKED DEMO path is byte-for-byte unchanged).
- cli.py gained --council; both script-gen call sites route through compose() when set.
- Studio pipeline.run_script() now passes --council, so every Studio creation runs the loop. The demo backend never passes it, so the demo is untouched.
- LIVE TEST (real Anthropic API, model claude-sonnet-4-6) on Sol: Sophia + Orpheus + Apollo ran; Apollo passed all 4 gates first draft; output in CLAUDE OUTPUTS/Affirmology/Affirmology_CouncilLiveTest_Sol_v1.md. ElevenLabs voiced a 62-word opening clip OK (Sol_CouncilVoiceTest_opening.mp3). No full render.
- Sandbox note: the engine venv is a Mac build (broken on Linux); tests here used system python3 with pip-installed deps. Full --audio (ffmpeg mix + QC + WeasyPrint PDF) should run on the Mac.
affirmology-studio/api/pipeline.run_audio shelled the CLI with a PLACEHOLDER identity (--name render --date 2000-01-01 --location n/a), so the Sacred Audio Report recomputed a placeholder chart (Cap Sun, Scorpio Moon, Aries Rising, GK38, LP4, 1/4 Split) while the script was the real person. Fix: run_audio(job_id, birth, ...) now requires and uses the job's OWN stored real birth data; jobs._run_audio builds BirthInput from the stored row and fails loudly if birth data is missing (no placeholder fallback). The people library already seeds the four real charts and the script path already used them, so report + script now compute from the same real birth data (deterministically identical chart). Verified: Jeff's chart from one source = oracle (Virgo Sun, Cancer Moon, Cap Rising, MG/Sacral/2-5, LP22, Gate 47). Still to do on the Mac: (a) run one Jeff --audio render and eyeball that the PDF header/blueprint match the script (WeasyPrint runs there, not in this sandbox); (b) purge the leftover "render" job row from the live jobs DB (harmless now; new ones can't be created and would fail loud).src/affirmology/chart/. The Western engine is tropical only. The only Vedic code is the partial Moon-nakshatra + 3-of-8 Kuta inside relationship.py (synastry). Parashara is designed in the council doc but unbuilt. Any "Vedic" in the reports so far was hand-computed, not engine-driven. Proposed: build a real chart/vedic.py (Lahiri sidereal positions, Moon nakshatra/pada, Vimshottari dasha, D9 Navamsa, key yogas) so Parashara has real data. Queued; sequence per Jeff.Jeff's call: not a separate Vedic silo yet (custom Vedic audio paths come later), but Vedic should speak when SYNERGIES appear across systems. Done: new src/affirmology/chart/vedic.py computes the Lahiri sidereal layer from the chart's already-computed tropical longitudes (no re-geocode): sidereal rashis for Sun/Moon/Ascendant, Moon nakshatra + pada + Vimshottari lord, gana, nadi. vedic_facts_text() is now fed into council.sophia_brief() so Sophia can let the sidereal sky confirm or complicate a convergence. Verified facts: Jeff sidereal Sun Leo, Moon Gemini/Ardra (lord Rahu), Asc Sagittarius; Sol sidereal Sun Capricorn, Moon Gemini/Ardra (lord Rahu), Asc Pisces. Notable synergy: BOTH founders share a sidereal Moon in Gemini, nakshatra Ardra, Rahu-ruled, reinforcing their shared tropical Cancer Moon. Live full-Sophia weave not shown here only because one Sophia call exceeds this sandbox's 45s shell cap; run on the Mac to see it woven. Full Vedic (dashas, Navamsa, yogas) + Parashara + Vedic audio paths remain queued.
Plan: CLAUDE OUTPUTS/Affirmology/Affirmology_VedicEngine_PhasedPlan_v1.md. PART NOW (done): synergy-level sidereal facts (chart/vedic.py) feeding Sophia. PART LATER (phased, heavy): L1 Vimshottari dasha, L2 divisional charts + yogas, L3 strengthen the WEAK Vedic corpus (required before Vedic-led generation), L4 Parashara + dedicated Vedic audio paths. Every phase must pass a known-Vedic-chart fixture before shipping (same discipline as HD vs Josh). No Vedic-led audio yet. Keep Jeff updated here + in the change list.
Studio composer is now iterative (minimum viable, matches the mockup intent). Changes:
- web/index.html: added an editable "Notes for this version" textarea (composeNotes) + a "Regenerate as new version" button (reviseBtn) in the composer rail. The script keeps showing in the chat alongside the notes; Render stays a separate explicit step.
- web/app.js: refactored the compose call into a shared runCompose() used by both Send (append a change) and reviseFromNotes() (edited notes replace the brief). Every compose creates a NEW version (backend _next_version increments per person+category, confirmed). Added briefKey/persistComposer/syncNotes; the working brief is saved to localStorage and restored in bootChat, so navigation/reload loses nothing. setComposeBusy disables both buttons during a draft.
- Verified: node --check web/app.js passes; wiring consistent; backend versioning confirmed. Full browser click-through is a Mac check (live FastAPI + browser not runnable in this sandbox).
- P0 (chart-integrity + iterative composer) now COMPLETE. Next: Priority 1.5 (named agents in UI, feedback-everywhere + voice notes + pasted transcript, co-created length) and the live-audio fixes (music covers full length, structure-aware/crafted endings, cadence) which lean on the council loop already built.
CLAUDE OUTPUTS/Affirmology/Affirmology_Report_Redesign_Plan_v1.md. Interim readability already applied in the Colin report (Liberation fonts embedded, sizes up, agent voices enlarged) and ready to backport.CLAUDE OUTPUTS/Affirmology/Affirmology_CouncilCharacters_Project_v1.md.CLAUDE OUTPUTS/Affirmology/Affirmology_CouncilCharacters_VoiceProfiles_v1.md. KEY GUARDRAIL baked in: personalities show in the composer/council transcript/Hermes chat, NEVER inside the Sacred Audio (the audio stays pure first-person). Humor is premium, room-reading, dials to zero on tender topics. Nice touch: Pythagoras in-character REFUSES name-numbers without a confirmed full name (mirrors the numerology accuracy rule). HUMOR CALIBRATION (Jeff 2026-06-18, important): they must NOT be funny all the time and must not sound like one person with different names. Added a "humor dial" to the doc: most of the council is LOW or near-zero humor (Sophia/Hypnos/Parashara/Gaia near zero; Apollo/Persephone/Athena/Concordia low-dry; Hermes/Eros/Echo/Prometheus high-but-situational). Personality comes primarily from VALUES + WORLDVIEW (what each notices first on the same chart), not jokes. Differentiation test baked in: swap two agents' names and if you can't tell, fix by changing what they VALUE, not the joke. Default to the low end; heavier/tender moments lower every dial. Hermes's live prompt updated to "humor is occasional, not default" (helpful/warm first). Visuals (marble-gold avatars) coming per character.
WIRED NOW: Hermes's voice+humor folded into the live /api/hermes system prompt (api/main.py), so Atlas chat has his personality on first test. TO WIRE NEXT: per-role VOICE blocks into agents/council.py so Sophia/Orpheus/Apollo/Chiron/Persephone speak in character in the transcript + "Why this build" report (after Code's corpus run, since council.py is in the shared engine repo).
ROSTER LOCKED (2026-06-18, Jeff): the five tradition experts are Western astrology = SOPHIA (she also synthesizes; the lead, most client-facing oracle), Gene Keys = ATHENA, Human Design = PROMETHEUS, Vedic = PARASHARA, Numerology = PYTHAGORAS. HERMES is the assistant + ROUTER (front desk who hands questions to the right expert), NOT a tradition specialist. (My first VoiceProfiles draft wrongly made Athena a "strategist" and Prometheus the "relationship engine"; the older Affirmology_CouncilCharacters_Project_v1.md brief had Athena=Gene Keys + Prometheus=Human Design RIGHT all along; the only real change is Western astrology moved Hermes -> Sophia because Hermes became the Atlas assistant. Both character docs corrected.) HERMES CLIENT-CONCIERGE = PHASE 2: today internal-team only; later the client's concierge/router, gated by a new CLIENT permission tier (own chart + audio only). Captured in Affirmology_Atlas_Overview_v1.md section 3.CLAUDE OUTPUTS/Affirmology/Affirmology_Gamification_v1.html. North star = mechanics must serve the transformation (Subconscious OS frame: installing updates / being initiated, not earning points); earned-not-bolted-on, ritual over reward, no shame mechanics, cold-to-warm, and ALWAYS corpus-true (gamification shapes pacing/presentation/progression, never the truth of a reading). FLAGSHIP PARKED CONCEPT = CHOOSE YOUR SPIRIT GUIDE: after a user listens to a meaningful amount of base audios they UNLOCK the ability to pick a Spirit Guide who becomes their customer-facing personality/relationship/presentation layer (their own Hermes/Sophia). KEY REFINEMENT (Jeff, locked thinking): nothing changes architecturally - HERMES STILL LINKS ALL of it (routes to the oracle specialists, corpus grounds the answer); the guide is purely the human-facing voice Hermes brings forward for the message + relationship. Guardrail = guide picks wording/warmth, the oracles + corpus still supply the truth (same rule the chat follows). The unlock gate does 3 jobs at once: drives base-audio consumption, makes the guide feel earned, prevents day-one choice overload. PHASING: v1 = use the EXISTING character suite (Sophia, Atlas, council) as guide options, ships inside what exists; v2 = a large multi-tradition archetype library (male + female) as the rich expansion. This maps onto HERMES CLIENT-CONCIERGE = PHASE 2 above (the client's gated concierge/router). The doc also seeds a progression spine (Arrival -> Initiation -> The Guide -> The Councils -> Integration -> Mastery), seed mechanics (constellation-fills-in instead of streaks, initiation track, integration quests = tapping/gratitude/chatbot, sky-timed rituals, council unlock ladder, create-your-own journeys, the Affirmologist community path, milestone ceremonies), and themed TRACKS (Initiation, Wealth/Abundance, Love, Purpose, Rest, Shadow/Breakthrough). ONGOING: keep adding gamified rituals + tracks to this doc. CONSTELLATION SYSTEM (Jeff 2026-06-20, added to the doc): the sky-constellation + lights-unlocking theme is the spine of the whole unlock system; a user holds SEVERAL constellations at once (some filling in PARALLEL), each tied to a theme/tradition; COMPLETING a constellation unlocks something for it, headline reward = ACTIVATING a Wisdom Council member as a guide (the constellation you fill brings the guide to life), plus "that and more" (a deeper reading, a track, a ceremony). So the Spirit Guide unlock runs ON the constellation mechanic, not a separate progress bar.CLAUDE OUTPUTS/Affirmology/Affirmology_Reports_Obsidian_Index_v1.md (point a vault at the Affirmology outputs folder; tags/search/graph; links to the HTML deliverables; PROJECT_STATE stays the narrative source of truth, the index is the browse layer). Since most deliverables are brand HTML and Obsidian's native unit is Markdown, the pattern is an MD index + short MD companions linking to the HTML. (2) SOL/COLIN delivery + idea-capture = an ATLAS feature, NOT Obsidian (single-player). Brief: CLAUDE OUTPUTS/Affirmology/Affirmology_AtlasReportsHub_Brief_v1.md. Direction (Jeff): a REPORTS spot on the Hermes side where Sol/Colin browse pushed reports and easily give ideas (TEXT now, VOICENOTES when enabled), plus an email nudge in parallel. Rides on rails ALREADY built (C16 deliveries/inbox + send_to_person + tiers + cross-device Hermes history + voicenotes v1). Phasing: v1 text + Reports tab + Open-full link + tagged responses + Jeff Responses view (additive, demo untouched); v2 voicenotes via Whisper/on-device Parakeet, GATED ON APPLE DEVELOPER TOOLS ("soon"); v3 Hermes synthesizes responses per report. Hosting the styled HTML link = the R2 public-media (C10) dependency. EMAIL NOT SENT yet (Jeff holding; many such docs to come, build the mechanism first).CLAUDE OUTPUTS/Affirmology folder as redundant/confusing (root cause = a line in his PERSONAL GLOBAL instructions that writes outputs to CLAUDE OUTPUTS/<project>/, which fires even though /CLAUDE/AFFIRMOLOGY is already the project). Plan: Affirmology_FileOrg_Plan_v1.md (root). DO NOT reorganize or move files without Jeff's sign-off on the target structure. Key facts from the dependency scan: only 15 files reference the CLAUDE OUTPUTS path (10 root prose incl. PROJECT_STATE, 3 inside the folder, and 2 RISKY CODE files that hardcode it: affirmology-studio/api/hermes_tools.py + affirmology-agent/src/affirmology/corpus/craft_seed.py); Obsidian vault is rooted at the PROJECT ROOT (in-project moves won't break it); root is NOT a git repo (use a zip backup + symlink pointers). Safe method = move + leave a SYMLINK + _MOVED.md stub at the old path so old paths still resolve, update the 2 code paths explicitly, find/replace prose refs. Recurrence fix = add a "no CLAUDE OUTPUTS folder here" convention to the project CLAUDE.md AND change the global instructions line (Jeff does the global edit). Phasing: Phase 0 new files go to the new structure now (zero risk); Phase 1 retire the CLAUDE OUTPUTS folder; Phase 2 sort the ~252 loose root docs.CLAUDE OUTPUTS/Affirmology/Affirmology_VideoScenes_OvernightGallery_v1.html; clips in Affirmology_VideoEditKit/{rooftop_guide,broll_why,joe_alignment,monika_arc}. LOCKED DECISIONS (Jeff): (1) GUIDE = the existing blond male friend (he carries the scene; Joe barely talks, his beat is "why does astrology even matter?"). (2) SEQUENCE keeps ALL existing scenes; INSERT the guide convo. Two-phase guide: Phase-1 guide introduces the WHY (new scene), Phase-2 guide answers the HOW (existing friend-hands-phone + couch). Order: NEW friend conversation (why) -> Joe at home w/ books+report frustrated (linear brain) -> friend hands phone -> friend on couch as Joe gets on Affirmology -> love affair. (3) Guide scene LOCATION = ROOFTOP at golden hour (people in bg), NOT gym/cafe (Joe is already established as a workout beast via ice bath/run/beach, and the Aurum cafe is reused for the Monika reunion). Generated: rooftop two-shot (friend talks/Joe listens) + reverse (Joe talks) + OTS singles + tight friend CU + alt takes (real shot/reverse coverage; singles must be DIFFERENT ANGLES/OTS or the model duplicates/erases a person). (4) Cutaways under the friend's VO: mountain-temple seeker, cosmic astrological CHART-IN-THE-SKY, and a SOUL-BIRTH body-of-light. JEFF LOVES the cosmic chart + soul-of-light look = adopt as a DEMO-VIDEO visual lane. (5) Joe BEACH-RUN replaced by a MIAMI DOG-WALK: coastal park, over-ear headphones, gold constellations forming on his chest (alignment motif), bay + Miami Beach skyline across the water. Also: swap one of the two JOG scenes for a dog-walk (pending). (6) MONIKA earned arc (suite + repetition, not one trick): keep her app "blocked area" chat + business-success + bath; ADD wealth-codes AHA (engagement) + a varied-doors montage (morning activation, athletic, heart-coherence car moment, EFT as one quick flash, before-bed) with on-screen labels; headphones throughout; app screens EMERALD+GOLD Affirmology branding (NEVER Aurum; Aurum = the physical studio only). On-screen guide words (overlays, system already built): PURPOSE / WHY YOU KEEP HITTING THE SAME WALL / HOW YOU'RE WIRED / HOW TO BREAK THROUGH. Drop the "microdose" door (investor optics). STRATEGY note that drove this (from another chat's manifesto doc): lead with cosmic-blueprint recognition BUT make the self-realization purpose explicit >=2x so a cold viewer/investor never reduces it to "an astrology app" (answers Sol's concern). EM-DASH-FREE. CREDITS: Higgsfield ran DRY at the end of this batch (balance ~1.18; "out of stills"). All 20 overnight clips finished before it drained. QUEUED for when credits return: (a) redo the temple cutaway with the FRIEND as the climbing seeker (not a generic monk); (b) extend the cosmic-chart/soul-birth look for the demo; (c) the COUNCIL OLYMPUS-ORB scene Jeff requested (core council, not wisdom circle, gathered around a big rotating light-filled orb looking into someone's life; a premium contrast to a mechanical agent/oracle diagram) - HELD pending credits per Jeff. Jeff likely needs the bigger Higgsfield account. (d) REDO the Monika heart-coherence clip: current one shows her in a MOVING car with headphones on and hands in her lap (reads as distracted driving = unusable); regenerate as a clearly PARKED/stationary car or move it to a still setting (window seat at home, couch). All other Monika doors + dog-walk + rooftop coverage are usable. CREDIT/PLAN NOTE: Higgsfield Plus shows "365-day"/"7-day" UNLIMITED perks for some models (Nano Banana, Kling 3.0, etc.) BUT they're tied to a promo purchase window ("buy until ~June 20") and marked "available on web"; the MCP/Cowork generation path bills the METERED credit pool (image=1-2 cr, Kling video=7.5 cr each), which is why we hit a wall at ~1.18 cr despite the "unlimited" wording. Jeff to verify exact entitlements on higgsfield.ai directly; options = top-up (500/$26 … 4000/$190, 90-day expiry) or upgrade Ultra ($129/mo, 3000 cr) + auto-refill.CLAUDE OUTPUTS/Affirmology/Affirmology_Atlas_BaldSuite_v1.html.CLAUDE OUTPUTS/Affirmology/Affirmology_OpeningSequence_v3.mp4 (2:20). Built AUDIO-FIRST per Jeff: full dialogue voiced (Inworld, Monika=Olivia, Joe=Ethan, Friend=Liam, Oracle=Serena, Narrator=Evelyn), silence-trimmed, stitched to a master VO with pauses for non-verbal beats + overlapping his/her stars audio + music bed, then sped atempo 1.30 to hit 2:20. Master VO: Affirmology_OpeningSequence_MasterVO_v3.m4a. Video = Ken-Burns animatic of painterly stills cut to the master track (segplan in outputs/assembly). Timed shot list: Affirmology_OpeningSequence_TimedShotList_v1.html. FIXES applied: walk-and-talk opener added (was missing), Monika 3-arm artifact fixed (new walk 572bf53c), montage line now chart-specific "Gate One, create not compare" (8659abbb), app+promise scene added (Joe+phone 275c370b, phone insert 648919cf), chatbot branded Affirmology not "Aurum Oracle" (34e51e73), jog single-Joe fixed (6648672d), gibberish rides into babble overload. NEXT PASS: swap hero beats to the kling-animated clips, layer Remotion on-screen text, optional ElevenLabs final voices. Lesson: build the master VO first and cut picture to its timestamps; do not force fixed-length clips.
VIDEO CONTINUITY RULE (Jeff, 2026-06-19): whenever an avatar is LISTENING to Affirmology, HEADPHONES must be visibly on, every time. PREFERENCE: over-ear headphones (easier to see on screen); earbuds acceptable. GREENLIT (2026-06-19): Jeff loves the storyboard v2 frames + scratch VO; full motion-and-music pass approved. Monika's abundance payoff = HER BUSINESS BLOWING UP (job 3ed14d37). MORE RULES (Jeff): (a) Scene 2 friend is IN PERSON, not a text (rhymes with Joe handing it to Monika in person in SC4 = app spreads person-to-person). (b) The alignment montage is a LOVE-AFFAIR montage but the love affair is with HIMSELF (self-recognition); it makes him magnetic. (c) The Joe/Monika connection is AMBIGUOUS: they NEVER hold hands or kiss; platonic-or-romantic is the viewer's call. (d) Added a tasteful candlelit BATH listening beat for Monika (over-ear headphones, no nudity, shoulders up; job aa6127f2) as her love-affair mirror to Joe's montage. Scratch audio rendered: music bed 0537817b (Sonilo 45s), Joe Sacred Audio clips (Ethan) 796e86a0/23916773/7152d70c/36f0b46d, narrator (Evelyn) ed82a1e7, Monika clip (Olivia) a8e81a33, Atlas e05e8626, disclaimer f15470b6. SC5 dual overlapping clips: his (Ethan) c15cba56/1034d57c, hers (Olivia) 83ea5744/be0794bb. FULL MOTION PASS DONE (2026-06-19, kling3_0_turbo, 5s/720p, ~7.5 cr each): babble a41381cd, couch 18d68a6c, eureka 44add432, jog a65d4816, kitchen ab4aadc3, juice 5574b142, stars 8eb43be9, bath ae5e671f, EFT 4238d348, business 81924a68. Galleries: Affirmology_MotionPreview_v2.html (all 10), Affirmology_AvatarSequence_Storyboard_v2.html (stills+audio). Remotion overlays coded: CLAUDE OUTPUTS/Affirmology/Affirmology_RemotionText/. SCRIPT MODS this session: SC1 Monika babble = denser Gene Keys gibberish; SC5 runs LONGER w/ several parallel his/her text pairs + overlapping male+female audio clashing over one music bed. NEXT: assemble clips to the locked audio + Remotion text in an NLE/Remotion; extend SC5; then build the Atlas-voice thesis trailer + rest of film.
VIDEO PRODUCTION PIPELINE (Jeff direction, 2026-06-19): AUDIO-FIRST. Lock VO + music timing first so it dictates exact video clip lengths, then generate footage to fit (with handles/variations per scene to extend in the edit). Do the WHOLE sequence, not parts, with a few variations per scene. ElevenLabs is NOT available as a connector in Cowork; voicing done via Higgsfield Inworld TTS (70+ voices; Atlas = "Hades", disclaimer = "Brian") + Sonilo music; ElevenLabs stays an optional final swap on the Mac engine. Atlas trailer VO rendered (job e05e8626), disclaimer VO (f15470b6). SC5 dual-audio scene must run long enough to clearly show TWO different audios + two sets of on-screen text playing at once. Storyboard frames (painterly, anchored to ref 2a7421c8): babble f3f6bd61, couch-books 67e29bef, eureka-earbuds 37a3471a, jog c1f99f4c, kitchen(+earbuds) c3f6d43a, juice-shop eb4de27d, stars 8a445f43, EFT 75504b15.
INVESTOR VIDEO - HUMAN LAYER (2026-06-19): the customer-world look is LOCKED as PAINTERLY SEMI-REAL illustration (warm, between photo and illustration, soft brushwork, emerald+gold light) so the human world harmonizes with the painted marble-oracle world. Two avatars are invented original ACTORS (not real likenesses): MONIKA (Convinced Woman - radiant warm woman early 30s, long wavy brown hair, sage-green athleisure) and JOE (the Seeker - fit friendly man mid 30s, short beard, charcoal athleisure). Locked style/character anchor = the yoga-meeting two-shot outside "Aurum Wellness Collective" (aurum = gold, nice brand tie). Style-test sheet: CLAUDE OUTPUTS/Affirmology/Affirmology_MonikaJoe_StyleTest_v1.html (option 2 = painterly chosen). STORYBOARD TO BUILD (Jeff's rough arc, applied to Colin's submitted idea): (1) Monika+Joe meet after yoga class. (2) Joe gets the app; scenes of him walking his dog in the park with headphones, listening before bed, learning astrology. (3) They talk again, Joe is fluent in the lingo, Monika is impressed, he gets her on the app. (4) A ~45-min Gene Keys journey: same music/time, different voice+content, outside lying under the stars. (5) Monika happily using it: EFT tapping at home, working through issues with the chatbot, abundance theme, receives a financial blessing. Build each beat in the locked painterly style. NOTE: Oshun final image (cowrie-shell crown + gold bokeh sky) is the one Jeff wants but it only arrived as inline previews, not a hostable file; needs a FILE attachment to host + lock into sheets (until then sheets fall back to e5a1a470).
BANDIT (Jeff's dog, 2026-06-19) - HANDLE WITH CARE: the real dog was named GAMBIT, and he passed away on Jeff's 40th birthday. "Bandit" is the in-app character name; Gambit is the soul behind it. This is a memorial/tribute woven into the app as a rare recurring easter egg. Treat with warmth and respect always. He is a character: a senior Boston Terrier rendered as a marble-and-gold "God of the Animal Kingdom," but his real nature is TRICKSTER / comic relief. The bit: he's fully convinced he's a cosmic deity while being the council's clown; ~15 personalities, one of which takes itself dead seriously (the god persona). Primary image = job 25c16a27 (take 1, Jeff's pick); alt = da39d918. Built from his photos, reusable Higgsfield media refs: 75fd789e (front, beads) + 76899353 (chair). Jeff may send more photos to tweak. Sheet: CLAUDE OUTPUTS/Affirmology/Affirmology_DogGod_v1.html.
RENDER QUEUE (Higgsfield reconnected 2026-06-19 ~02:00; dog-god done): (1) DOG-GOD - a "deity of the animal kingdom," Boston Terrier head (Jeff's senior dog, already wears rudraksha mala beads, serene wise half-lidded eyes), as a living marble-and-gold Anubis-class god statue, beads carved in marble+gold, divine crown/halo, glowing gold eyes, emerald starfield, epic not cute. Reference photos prepped: outputs/dog_IMG_7804.jpg (front, beads) + dog_IMG_8986.jpg (in green egg chair). (2) OSHUN SPARKLE - take the EXACT locked Oshun (job e5a1a470, untouched figure + water) and add the drifting gold bokeh/sparkle ONLY into the dark empty background void (the look from his cowrie-crown bokeh reference). Prior regen attempts (516a73cb etc.) subtly changed the figure, which Jeff rejected; preserve the figure exactly (compositing is an option if regen keeps altering her). Higgsfield MCP (server 75975218) disconnected mid-session; reconnect then fire both.
ATLAS CARD RULE (Jeff, 2026-06-18): Atlas's default/primary look uses the NON-HOODED clean robes, NOT the bunched-up cowl. The hood is a secondary variation only. Use the non-hooded clothes on his character card and anywhere he's the lead.
VISUAL BIBLE built (2026-06-18): CLAUDE OUTPUTS/Affirmology/Affirmology_VisualBible_v1.html consolidates EVERYTHING in one file with a jump menu, Heroes (2 + 4K model sheets), Core Engine (16), Hermes morphs (5, rarity-tagged), Wisdom Circle (13 incl. both Oshun takes), Founder (Sol), Worlds (4). NEXT (possibly overnight): build individual CHARACTER CARDS to the BuildStandard, then train Souls for locked heroes. Only Wisdom seats not fully locked: the Sound Healer (Polynesian) and which Oshun variant.
SOL BALLARD ("Mindset Ninja", founder) = LOCKED (2026-06-18) as a LIVING MARBLE-AND-GOLD STATUE built from her own photos (face media 5b03f465 + hair media 4a0ed5e1): warm bronze-cream marble, her exact joyful smile + full cheeks, big dark natural curls, a MODERN stylish dress CARVED in marble with gold-thread trim, clean marble face with NO facial kintsugi, gold kintsugi veins only on the garment, glowing gold eyes (job d01d51f9). Hard-won lesson logged: the marble-statue MEDIUM is fixed for everyone, only attire/features/attributes vary; a prior attempt that made her a realistic/cartoon person was rejected. Sheet: CLAUDE OUTPUTS/Affirmology/Affirmology_Sol_and_FinalVoices_v1.html. (For an exact video-grade likeness, train a Higgsfield Soul from more Sol photos later.)
OSHUN = LOCKED (2026-06-18) as a WATER ELEMENTAL: her West African face surfacing and taking marble form out of a churning emerald-and-gold river, water all around, gold beaded crown + collar, glowing gold eyes, half-emerald/half-cream marble (job e5a1a470; takes 76247d60/bc056c62/09fd9b52 are the alts; the earlier honey/clear-water versions are superseded). She takes the West African seat (covers griot/orisha). HILDEGARD = LOCKED as the Christian mystic-healer (veil, vision-wheel, healing herbs, job eda30b81). FEMALE TAO = LOCKED (screen-facing, flowing water/yin-yang/jade, job c6a448b9; covers I Ching + Quan Yin). PARKED ideas still without a bust: a Dogon star-sage, Laozi, a Kabbalist (Jewish Tree of Life, likely just the Tree motif + Wizard Hermes covers it), an Eastern Orthodox light-mystic, an Aboriginal Dreamtime voice, a Polynesian sound-healer priestess (in progress), optionally Campbell/Wilber. Sheet: CLAUDE OUTPUTS/Affirmology/Affirmology_WisdomCircle_Sheet_v1.html. (GAIA was also reworked as an Indigenous earth-mother woman, job 176f2987, handled respectfully with no specific sacred regalia.) SOPHIA = lead oracle, flowing waved hair, gold zodiac diadem, constellation threads to a heart-star, cream marble. Both saved as REUSABLE HIGGSFIELD ELEMENTS named "Atlas" (id 17c8ddc8-5684-42e5-901e-5842349a4b6d) and "Sophia" (id 107e9d5a-1d5f-4b73-b7ba-3781659577f2). PROMETHEUS = young Black man, dark bronze marble, a molten fire-heart cut-out blazing in the chest, a crown of flame from the head (job b92285c7). HYPNOS = hooded verde-green marble, a gold dream-mask over the eyes with glowing eye-slits, gold poppy (job 39062581).
WHOLE ROSTER busts generated (glow state) and many refined to Jeff's notes: Athena (owl, tight updo, cream), Pythagoras (tetractys), Orpheus (lyre, honey), Apollo (mature, sun-disc, cream), Chiron (LOCKED 2026-06-18 as a Middle Eastern Jewish Essene healer-mystic, olive-bronze marble, linen head-wrap, healer's staff with herb, gold kintsugi scar; reworked so he reads distinct from Apollo and adds Levantine representation, job 9a0faaa2), Persephone (black-and-gold Nero), Echo (verde sound-rings), Hermes (the warm "baller" messenger, refined to a bigger caduceus WAND + small wings on a worn back-strap, no silly hat; LOCKED on the refined 2nd take, job 0b609b93), Eros (kept at TWO ages, younger and ~thirty), Concordia (LOCKED as a Black African woman holding glowing gold scales, job 5a7b9ef2; she takes the African-woman seat, so Gaia stays bronze), Hestia (older grandmotherly), Gaia (bronze, world held). HERMES SHAPE-SHIFTER FORMS generated (he morphs across worlds): Greek base (locked), Thoth (Egyptian ibis-scribe, job 86f52d31), Quetzalcoatl (feathered serpent, 2b09f14e), Hermes Trismegistus (alchemist-sage, 1f8bc9fd), Atlantean / Emerald Tablets mystic-king (14d3e2b7, deliberately NOT ibis-faced). SRI AGASTYA replaces Parashara as the Vedic/Nadi seat (bronze, palm-leaf scroll).
ARCHITECTURE: the cast is TWO CIRCLES, a small fixed Core Engine (Sophia, Sri Agastya, Prometheus, Athena, Pythagoras) plus an expandable WISDOM CIRCLE of world-tradition voices (Rumi locked male; Siddhartha; Lakshmi; Isis; Ix Chel for Mayan; Quan Yin; Oshun + a Dogon star-sage for Africa; Celtic Taliesin/Cerridwen; a Siberian shaman; animism/spirit-totems as a future upgrade). Doc: CLAUDE OUTPUTS/Affirmology/Affirmology_CouncilArchitecture_WisdomCircle_v1.md.
WORLDS (backplates) generated: a locked emerald-and-gold COUNCIL CHAMBER (domed oculus, central orrery, above the clouds), a grand ancient TEMPLE-LIBRARY/observatory with an open center, a SKY-TERRACE overlook, and a serene FEMININE SANCTUARY (two variants, no-bath and background-bath).
DELIVERABLES (all in CLAUDE OUTPUTS/Affirmology/): Affirmology_OracleHeroSpec_Sophia-Hermes_v1.md, Affirmology_CharacterSheet_BuildStandard_v1.md (the full-sheet standard, sourced from AI UPGRADE/Knowledge/Video-and-Characters/), Affirmology_HeroCharacterSheets_Sophia-Atlas_v1.html, Affirmology_CouncilLookbook_v1.html, Affirmology_VisualGallery_v1.html, Affirmology_CouncilBustSheet_v1.html, Affirmology_Explorations_Prometheus-Hypnos_v1.html. (Note: the chat image previews were failing on Jeff's end, so all images are delivered via these local HTML galleries that load from Higgsfield's CDN.)
PIPELINE / NEXT: Nano Banana Pro busts -> reusable Higgsfield Elements/Souls (train a Soul from 10-25 views to lock identity for video) -> full character MODEL SHEETS (full-body turnaround front/3-4/side/back + expression strip + key poses + face/attribute callouts + color swatches, one canvas, eyes always glow or amber) -> Seedance 2.0 video. NEXT STEPS: finalize Hermes; train Souls for the locked heroes; build full model sheets; then generate the Wisdom Circle busts. Higgsfield is on the Plus plan (1,200 credits/mo, ~2 credits per Nano Banana Pro image); the false "out of credits" wall earlier was a concurrency misfire, plenty of budget remains.CLAUDE OUTPUTS/Affirmology/Affirmology_FoundingChart_forColin_v1.pdf (Jeff+Sol base, then Colin woven in as advisor; readable type pass applied).Built a self-contained reportlab report engine that finally embeds the REAL brand fonts (Cormorant Garamond + Inter + JetBrains Mono, instanced from Google Fonts variable files) instead of the Liberation substitutes the old builds used. This is the single biggest premium lift the redesign plan flagged. It lives in CLAUDE OUTPUTS/Affirmology/report-engine/ so Claude Code can use it too (Jeff wants tools fluid between lanes): report_engine.py (reusable builder: emerald cinematic page frame + starfield, full-cream ~11.5pt body, gold mantras with flanking rules, oracle-voice callout cards, convergence cards, founder panels, constellation/diamond motifs + a hand-drawn cover), assemble_report.py (style-aware extractor that reconstructs an existing report PDF into ordered role-tagged blocks, text verbatim, so NO content drift), build_jeffsol_v10.py (config), jeffsol_content.json, and fonts/static/*.ttf. Regenerated Jeff & Sol as Affirmology_CosmicBlueprint_Report_v10.pdf (16pp, montage-reviewed, cover is a clear upgrade). The locked APPROVED FORMAT (continuous flow, panels, oracle ORACLES, sparing gold mantras, overview, "What This Asks of You", future-journal close) is preserved exactly; only the typography/beauty changed. Chart-data panel font bumped slightly per Jeff. Jeff's design notes (2026-06-17): the look is good, the small chart-data font was bumped, investor/business docs do NOT need the emerald background (white is fine for those), and real graphics come LATER from a visual-aids suite (current motifs are light placeholders). NEXT: apply the engine to Colin (v10) and make it the template for ALL future reports; backport into the Mac builders or just use this engine. The investor/exec standalone PDFs (FriendsAndFamily, InvestorBrief, ExecSummary, data-room one-pagers, North Star) are DRAFTS and LOWER priority per Jeff; if/when done, correct the ExecSummary's stale "distributions from day one" framing to the locked v2 capital philosophy, and they can be on white, not emerald.
After several iterations, the report format Jeff approved is: continuous flow (no forced page-per-section), compact "mechanical" panels with RICH explanatory + cross-system SYNTHESIS prose underneath, the named agents as "ORACLES" giving short signed blurbs throughout plus a longer Oracle council conversation, a few sparing gold mantras, an OVERVIEW up top, a "What This Asks of You" ACTIONABLE section, and a future-journal close. Build with reportlab + embedded Liberation fonts; ALWAYS run a render-every-page montage review for deadspace before delivering. Builders: outputs/build_js_v9.py (Jeff & Sol) and outputs/build_colin_v3.py (Colin). Finals: CLAUDE OUTPUTS/Affirmology/Affirmology_CosmicBlueprint_Report_v9.pdf and Affirmology_FoundingChart_forColin_v3.pdf. This is the template for all future reports (the Reporting System Overhaul project). Sol correction baked in: she is the orchid/voice/pulse who shines when invited; Jeff convenes community in person and sets her stage.
Correct path locked in: this chat drives the Studio API over the Tailscale funnel (https://macbook-pro-2.tail333640.ts.net:8443, token in affirmology-studio/.studio_token). compose -> audio -> poll jobs; the render runs ON THE MAC (chart-driven, council loop, QC-gated, Heavenly Circuit bed). NO in-sandbox synthesis, NO chunking. The earlier failure was trying to synthesize inside the Cowork sandbox (hard 45s command cap) during an ElevenLabs slow patch; not a token/credit/server problem (account healthy, ~75% chars left). Rendered + delivered to CLAUDE OUTPUTS/Affirmology/KickoffWeek_Audio/: - Sol_TheCrowning_v1 (astro_moment, sol, 8:14) - Jeff_RePourAndOverflow_v1 (astro_moment, jeff, 7:33) - Wealth_Is_The_Weather_Jeff_v1 (before_bed, jeff, 7:50) OPEN: Solstice Launch is a TWO-PERSON team audio; Studio compose is single-person and there is no team/relationship category wired in yet (relationship.py exists in the engine but is not exposed via the Studio). Needs a decision: single-person solstice render now, or wire the team path into the Studio (with Jeff). Also: team-script Sol-role fix applied in Affirmology_KickoffWeekSuite_v1.md (02/06); combined Jeff "Re-Pour and the Overflow" added as Script 09.
Spec: CLAUDE OUTPUTS/Affirmology/Affirmology_CompanionAudio_TwoVoice_Spec_v1.md. Decision (Jeff): ship MODEL A now (one narrator, "we" + occasional direct address to each); flagship later is Model B two-voice with Jeff/Sol CLONED voices (instant clone ~1-3 min calm sample each; pro clone 30+ min). Per-person voice_id to live on the Studio profile. Delivered the 4th kickoff audio via brief-driven compose on the existing single-person path (anchor jeff + astro_moment + relationship facts in the brief): SolsticeLaunch_Team_v1 (6:09). Came out as a true "we" piece with shared Cancer Moon / Scorpio Mars body integration + direct address to each. NOTE: engine named Jeff's Pearl as Gate 45 Synergy (his real chart) vs the brief's 44 teamwork; minor, chart-grounded. DURABLE BUILD (next, with Jeff): proper team path = generalize relationship call to N people, team composer with speaker tags [JEFF]/[SOL]/[BOTH], Studio "Companion" category with people[] on /api/compose. start_public.sh runs uvicorn WITHOUT --reload, so adding the endpoint needs a server restart by Jeff to go live.
Catalog of music sources with license terms: Affirmology_MusicToolkit_Catalog_v1.md (uploaded). Audition pad: Affirmology_MusicAudition_Log_v1.md. STRATEGY DECISION (Jeff): cheap route to proof-of-concept and FUNDING first, custom beds later. Phase 1 (now): Suno (already subscribed, $0 incremental) for on-demand beds + 2-3 pay-once Meditation Music Library beds only where the clean sold-product license matters (sleep/journey/morning); no subscriptions or buyouts yet. Phase 2 (after funded): submit the Sonic Spheres quote form (https://forms.gle/7xkDpx2NvEjRcyKL6) and commission owned, on-brand signature beds per use case (the Affirmology house sound); revisit TunePocket/PremiumBeat if still useful. Sonic Spheres has NO public pricing (quote-only). LYRIA 3 (Google) added to the toolkit (2026-06-17): Lyria 3 Fast ~30s, Lyria 3 Pro up to ~3min structured, commercial-OK on paid Gemini tiers, SynthID watermark, on Gemini API/Vertex (~$0.08/song) so programmable; best NOW for marketing soundtracks (pairs with Higgsfield), candidate for product beds, later API per-user music (verify Vertex redistribution-at-scale first). Consolidated index of ALL music tools + links: Affirmology_MusicTools_MasterList_v1.md; licensing detail in Affirmology_MusicLicensing_v1.md. The locked demo bed (Heavenly Circuit) is untouched by any of this. SUNO BED PROMPT PACK built (2026-06-17): Affirmology_SunoBedPrompts_v1.md, ready-to-paste instrumental/loopable bed prompts (3 variants each) for Sleep, Journey, Morning, Gym, with an Affirmology sonic signature; Jeff generates in his Suno Pro/Premier account (commercial-cleared) and logs keepers in the audition log.
Deep multi-source eval of Fish Audio (OpenAudio / Fish Speech, flagship S2 Pro) vs ElevenLabs for two Jeff use cases: (1) real-time "talk to Sophia" avatar installation, (2) cloning a person's voice into the sold Sacred Audios. Doc: Affirmology_VoiceTools_FishAudio_Eval_v1.md. Findings: Fish S2 rivals/beats ElevenLabs on raw naturalness (vendor-run blind test; independent leaderboards put it mid-pack), far cheaper (~$1.25/hr audio), great breathy/calm emotion tags. KEY TRAPS: Fish open weights are NON-COMMERCIAL (Fish Audio Research License + CC-BY-NC-SA; the "MIT/Apache" claim online is stale, verified via raw LICENSE), so self-hosting for a SOLD product is a license violation, the license-clean path is Fish's PAID hosted API. Fish has NO consent-verification (ElevenLabs enforces a voice-captcha); neither indemnifies you. RECOMMENDATION: keep ElevenLabs as production voice; ElevenLabs PVC (not Instant, not Turbo; stability ~35-40%, similarity ≤80%) is the more robust path for long-slow Sacred Audio AND the real fix for the Turbo dropout issue. Fish is the stronger fit for the avatar-installation voice (HeyGen LiveAvatar accepts Fish as TTS; only top option self-hostable offline for a kiosk) and worth a cheap A/B (~$11 Plus plan) on one real script. Legal: cloning a real person into a sold product needs a signed consent+commercial-use release per person + AI-generated disclosure to listeners (EU AI Act Art 50 from 2026-08-02; TN ELVIS Act; NO FAKES not yet law). Locked demo unchanged.
Cloud move is DONE (section 19: Studio live on Render + R2), so Atlas is unblocked. Spec: Affirmology_Atlas_Overview_v1.md (sections 10-14 hold the locked decisions; builds on the thin Affirmology_Atlas_AppSpec_v1.md). Concept (locked): Atlas = the app, Hermes = the in-app assistant; two modes (Hermes chat default + full Studio one tap away) with a persistent corner toggle; installable PWA on phone + Mac; one Cloudflare Access login.
DECISIONS LOCKED 2026-06-18 (Jeff):
- Messaging circle v1 = Jeff, Sol, Colin only; messaging is IN-APP ONLY for v1 (email/external reach deferred).
- Hermes TAKES ACTIONS (not read-only): creates audios from concepts, runs the composer, logs feedback, stores/pulls info wherever relevant ("the messenger").
- PERMISSION TIERS: Jeff = owner (everything, incl. private business material). Sol + Colin = collaborators: create/iterate/render audios, log feedback (text+voice), ask anything, message the team, read the shareable knowledge base and the investor-pitch/research/product material (they may be dropping insights into exactly that). They CANNOT overwrite/delete permanent files, and CANNOT see private ownership material (cap table/shares, Jeff+Sol founder agreements, legal terms). Future people: narrower. Reason Atlas matters: it is how Sol/Colin use the whole system without living in GitHub/Claude/Gemini.
- Default landing = REMEMBER LAST MODE per person, with the always-present toggle.
- Voicenotes = TRANSCRIPT ONLY (do not retain raw audio in R2).
- Nightly improvement loop = AUTO-APPLY SAFE CHANGES + report the rest. "Safe" fenced hard: only low-risk reversible changes (copy/content/config/triage/draft proposals); NEVER the locked demo, NEVER delete/overwrite permanent files, NEVER auto-deploy engine/chart/script-structure code, NEVER silently spend voice credits; anything touching audio content/charts/structure/money/demo is report-and-propose for human approval (recommend git with easy revert).
- VOICE TRANSCRIPTION (CORRECTED 2026-06-18): preferred path is NVIDIA Parakeet ON-DEVICE via sherpa-onnx (exported ONNX run on the phone CPU, offline, NO GPU; prebuilt iOS/Android examples exist for Parakeet-TDT-0.6b). This is what Jeff's dev demoed on a non-NVIDIA phone, and it is genuinely better: offline, zero per-use cost, private (audio never leaves the phone, which fits "transcript only" further), fast. Tradeoff: nudges Atlas toward a thin native wrapper or sherpa-onnx's WASM-in-browser build vs a pure PWA; settle at B7. If the dev's phone module works, route through it and skip server transcription. FALLBACK only: server-side OpenAI Whisper API on Render (seamless cloud call) to get something live before the native piece is ready. ("Wispr Flow" = Jeff's personal dictation app, not the app's layer; Granola = meeting notetaker, not for this.)
- CLOUDFLARE ACCESS LOGIN is off-brand; brand the Access app (emerald/gold/cream + wordmark) or use a branded splash that hands off to Access.
OPEN MEDIA NOTE: R2 public serving for media.affirmology.ai was 403 (section 19); Jeff believes it was fixed/tested OK overnight 2026-06-17/18 - VERIFY before relying on it.
ATLAS v1 BUILD STARTED (2026-06-18, Cowork, building DIRECTLY in affirmology-studio since Jeff asked Cowork to build it; Atlas == the Studio repo + PWA + Hermes, not a separate app). All ADDITIVE, existing Studio pages/flows untouched, static-checked (node --check, python ast). UNCOMMITTED in the working copy; deploys to studio.affirmology.ai on commit+push (autoDeploy). Built so far:
- PWA layer: web/manifest.webmanifest, web/sw.js (conservative: caches only the static shell, never API/media/auth/POST/cross-origin, network-first), brand icons web/icons/ (gold Cormorant "A" on emerald, 192/512/180/32), apple-touch + manifest + apple-mobile-web-app meta + SW registration in index.html. Installable on iPhone/Android home screen + Mac dock. iPhone Add-to-Home-Screen works on the manifest+meta alone.
- ATLAS TWO-MODE SHELL: a fixed corner toggle (#modeToggle, bottom-left; shifts right of the sidebar on desktop) flips between HERMES (chat) and STUDIO (workbench); remembers the last mode per person (localStorage atlas_mode). New #page-hermes chat screen reusing the brand chat styles.
- HERMES HOME HERO (2026-06-18, Jeff asked): Hermes is now the FIRST-CHOICE entry on the Studio Home screen, a prominent constellation-dripped card at the top (.hermes-hero in index.html): a twinkling SVG gold constellation (connected stars + scattered dim stars, soft glow filter, prefers-reduced-motion respected), "Talk to Hermes" headline, "Enter Hermes ->" CTA, taps straight into chat mode. APP ICON upgraded to a sexier cinematic version (glowing gold gradient Cormorant "A" with bloom, soft halo, faint starfield, sparkle, whisper of a gold ring) at all sizes in web/icons/.
- HERMES backend POST /api/hermes (api/main.py): permission-aware Claude call. Owner (jeff) = full access incl. private business; collaborators (sol/colin/josh) = product/system/research yes, private equity/legal/agreements withheld. System prompt carries the brand rules (no em dashes, Sol not Soul, Subconscious OS, recognition over instruction, no meditation-teacher name, Tier C wall) + the four charts + curated context. Degrades gracefully if no key/model. Uses ANTHROPIC_API_KEY (already in the studio env for script gen); model via env HERMES_MODEL (default claude-sonnet-4-6). Front-end Hermes chat persists history per person in localStorage.
- ALSO FIXED the S3 backend half: compose minutes clamp widened 20 -> 60 in api/main.py so the new 3-45 min length slider is actually honored by the engine (was silently capping at 20).
STILL TO BUILD on Atlas: in-app (Hermes-side) messaging between Jeff/Sol/Colin, the approvals queue, voicenote capture (server-side Whisper interim; on-device Parakeet later), deeper Hermes actions (kick off a render, file structured feedback) + real knowledge-base/doc retrieval, and Cloudflare Access page branding. NEEDS ON DEPLOY: confirm ANTHROPIC_API_KEY present on Render (it is, for script gen) and optionally set HERMES_MODEL. Mobile studio nav is still sidebar-only (hidden on phones) - the mode toggle works on mobile, but studio page nav on mobile is a follow-up.
ATLAS UPDATE (2026-06-18 later): (1) PUSHED (commit 6670b79): Hermes persona (humor calibration so he is not funny all the time + app-support scope + routing to the oracle specialists + a "how Atlas works" guide) and the in-app messaging BACKEND (messages table + /api/messages). (2) MESSAGING DEFERRED: Jeff is unsure it is needed; the backend rides along dormant/harmless, no UI built (task parked). (3) NEW + UNCOMMITTED (needs a push): CROSS-DEVICE HERMES HISTORY. Hermes turns now persist server-side per person (hermes_history table + add_hermes_turn/list_hermes_history in jobs.py; /api/hermes saves both turns and builds context from the stored history; new GET /api/hermes/history; front-end initHermes loads it). So a chat follows the person computer->phone (Jeff noticed history did not carry over). Files: api/jobs.py, api/main.py, web/app.js, web/index.html (app.js bumped ?v=17). (4) DONE (same uncommitted batch): VOICENOTES v1 = speak-to-text via the browser Web Speech API (transcript-only, no audio stored, feature-detected/hides if unsupported). Mic buttons in ALL boxes: Hermes input, composer input, composer notes, per-version feedback (#fbInput), and the global feedback popup (#fbText). toggleDictation()/speechSupported()/hideUnsupportedMics() in app.js; .micbtn styles + buttons in index.html. CAVEAT: Web Speech API can be flaky in an iOS standalone PWA; upgrades if so = server-side Whisper (needs a key) or on-device Parakeet via the native wrapper. The iPhone keyboard's own dictation mic also works in every field as a fallback. (5) JEFF PREFERS A NATIVE APP FEEL over the web app; the thin native Capacitor wrapper (cheap, store-free via TestFlight/sideload, also unlocks on-device Parakeet voice) is teed up for when he wants it.
HERMES EFFECTIVENESS - PHASE 1 BUILT (2026-06-18, Cowork; UNCOMMITTED, needs a push + LIVE TEST). Trigger: Sol asked Hermes for her+Jeff "wealth codes" across Gene Keys/HD/astrology/full-numerology + 2026 transits and got useless results. Root cause: Hermes was a single Claude call with a THIN static prompt (only ~5 placements/person, no engine/corpus/oracle access). NOT an Atlas data gap (the engine has full charts) but a gap in the initial Hermes build. Fix: HERMES IS NOW AGENTIC (tool use). New api/hermes_tools.py + a tool loop in /api/hermes: tools = get_person_chart + compute_chart_from_birth (full astrology/HD/all-3-GeneKeys-incl-Pearl/full-numerology/Vedic via render_all_facts, engine already in cloud), search_corpus (the ~17k records), consult_oracle (sophia/athena/prometheus/pythagoras/parashara specialist sub-readings). System prompt updated to USE the tools. Cost-bounded (max 6 rounds). Files: api/hermes_tools.py (new), api/main.py. Plan + full Phase-2 list: CLAUDE OUTPUTS/Affirmology/Affirmology_Hermes_Effectiveness_Plan_v1.md. PHASE 2 PENDING: full Vedic engine (today only partial sidereal; collect Vedic for Jeff/Sol), Transit & Timing agent (Venus/Jupiter/Pluto 2026), store confirmed full LEGAL names for name-numerology, the KNOWLEDGE BRAIN (sync deep docs hard-drive->R2 via nightly cron + search_docs), the AGENTIC COUNCIL (oracles talking to each other; wire Chiron+Persephone), new client accounts in R2 + client tier. ROSTER NOTE: roles corrected (Sophia=Western astro+synthesis lead, Athena=Gene Keys, Prometheus=Human Design, Parashara=Vedic, Pythagoras=Numerology, Hermes=assistant/router).
CRAFT KNOWLEDGE ENGINE (2026-06-20, Jeff flagged as the next pillar). Plan: Affirmology_CraftKnowledgeEngine_Plan_v1.md. GAP (verified in code): the cosmic blueprint got the full treatment, but the CRAFT side (neuroscience, frequency/sound, meditation/hypnosis technique, audio production, pro reading craft) is shallow, just a STATIC TECHNIQUES_LIBRARY menu in agents/build_report.py that Chiron picks from; the deep research sits in ~10 docs, not distilled/actionable/growing; the audio mix does NO frequency/binaural work (just a music bed). UPGRADE = a second knowledge pillar (blueprint = WHAT we say, craft = HOW we make it land): a "craft" corpus/meaning tradition seeded by distilling our research docs into actionable entries, wired DEEPLY into Chiron + Orpheus + Apollo's efficacy gate + the audio mix + Hermes (search_craft tool, replacing the static menu), and grown by the nightly cron (crawl wide). Optional later: binaural/solfeggio/tonal overlays in audio_mix.py (the one piece that changes the actual SOUND; Studio-only, demo locked). Code prompt + phased build in the plan doc. HERMES LOOP BUG fixed same day (see below / Affirmology_HermesLoop_Bug_v1.md); needs the api/main.py+hermes_tools.py push + local restart.
TEST & CHANGE QUEUE (2026-06-20) - the single living list of pending tests + changes, prioritized P0-P3, each with the exact next action: Affirmology_TestAndChange_Queue_v1.md. This is the operational hub; ADD every new "we should test/change X" here, and check items off as done. A daily 8am scheduled digest ("affirmology-test-change-digest") surfaces the top P0/P1 items to Jeff. Craft-engine agent ownership corrected: HYPNOS is primary (subconscious-efficacy + frequency/entrainment), with the Neuroscientist (the science), Orpheus (writing craft), Apollo (the gate), Chiron (healing slice only), Echo (feedback loop), not Chiron-as-primary. Frequency/sound layer (binaural/solfeggio overlays in audio_mix) = Jeff WANTS it; filed as queue C3, to spec.
COSMIC BLUEPRINT ENGINE UPGRADE (2026-06-18, Cowork) - "be masters of the cosmic blueprint." Master gap analysis (from another chat): CLAUDE OUTPUTS/Affirmology/Affirmology_EngineCoverage_Gaps_v1.md (7 priorities). HOW-to-build brief: Affirmology_CosmicBlueprint_EngineUpgrade_BuildBrief_v1.md. BIGGEST gap = the engine computes NO ASPECTS (positions without aspects = a list, not a reading). BUILT (Cowork, additive new modules, UNWIRED, need integration+test on the Mac because they touch the locked demo chart path): affirmology-agent/src/affirmology/chart/aspects.py (aspect grid: major+minor, orbs, applying/separating) and chart/extended.py (no-data-file: Black Moon Lilith mean+true, Part of Fortune/Spirit sect-correct, Vertex/anti-Vertex; data-file: Chiron + Ceres/Pallas/Juno/Vesta best-effort). NOTE: the no-file points were already computed ad hoc for Jeff & Sol by the other chat (out/*/extended_points_facts.md) = a regression anchor. PENDING (Code/Mac, sequence with corpus session; all chart/+reports/+Dockerfile, low collision): wire both modules into compute_astrology + models.AstrologyChart + reports/render.py render_all_facts (so it flows to reports AND Hermes), install seas_18.se1 in api/Dockerfile (+ AFFIRMOLOGY_EPHE_PATH, switch asteroids to FLG_SWIEPH), pytest + demo-chart regression, re-vendor/deploy. THEN Vedic depth (Vimshottari dasha, vargas D9/D10/D2, dhana yogas), condition/timing + transit-to-natal (also powers Hermes timing), HD/numerology/Gene-Keys depth (Priorities 3-7).
DOMAIN PLAYBOOKS (2026-06-18, Cowork) - Jeff: the system should already KNOW how to use the blueprint for predictable life questions (money, relationships, career) so agents don't figure it out on the fly. Model: tradition oracles read by SYSTEM; DOMAIN agents read by QUESTION (which cross-system signatures matter + how to synthesize), plugging into the agentic consult_oracle. Built: CLAUDE OUTPUTS/Affirmology/Affirmology_DomainPlaybooks_Lakshmi_v1.md = LAKSHMI's full wealth playbook (she is already the Wisdom Circle abundance voice per Affirmology_CouncilArchitecture_WisdomCircle_v1.md) + the life-domain->voice map. Wealth signatures she reads: Gene Keys Pearl sequence, astro 2nd/8th/11th + Jupiter/Venus/Part of Fortune/MC, Vedic Dhana yogas + D2 Hora + dasha timing, numerology 8/4/22, HD type/Heart-Ego/Sacral/not-self. DECISIONS (Jeff 2026-06-18 late): CAREER/vocation = ATHENA ("unless/until someone better"); HEALTH/body = IX CHEL (decided); QUAN YIN removed (FEMALE TAO absorbs compassion/being-heard); Christian mystic = HILDEGARD; AGASTYA confirmed (Vedic seat). COUNCIL WIDENED (Jeff: "be smart, not too limited"). The agentic consult_oracle (api/hermes_tools.py ORACLES) now has 12 voices: tradition experts sophia, athena (+career/vocation), prometheus, pythagoras, AGASTYA (renamed from parashara, the Vedic seat); client-facing DOMAIN voices lakshmi (wealth), eros (love), concordia (partnership/teams), hestia (family/home), gaia (community/foundation), persephone (transformation/breakthrough), chiron (healing). The domain voices can speak directly to clients. HERMES himself can also speak directly, especially on ALCHEMY (his Hermes Trismegistus alchemist form), wired into his persona prompt. More can be added over time; deeper/obscure Wisdom voices stay premium.
READING CRAFT STANDARD (the "Forrest standard", from another chat's CLAUDE OUTPUTS/Affirmology/Affirmology_ReadingCraft_Standard_v1.md). Diagnosis (correct): strong DATA layer, thin INTERPRETATION layer, so the agents grab a keyword ("8th house = other people's money") instead of teaching the MECHANISM + the choice. The 7 disciplines: mechanism-not-label, free-will-not-fate, high-road/low-road, synthesize, one living metaphor, talk warmly, end on a choice. APPLIED NOW (Cowork, uncommitted): a CRAFT block folded into all 12 Hermes consult_oracle oracle prompts + Hermes's synthesis (api/hermes_tools.py, api/main.py), so readings improve at the source. STRATEGIC (the "could be big" lever): the DEEP MEANING LAYER + DISTINCTIONS LIBRARY should be a structured store the NIGHTLY CORPUS IMPROVER builds + grows, and every Jeff/Sol "this reads odd" feedback becomes a permanent distinctions entry (corrections loop = feedback store -> nightly improver -> distinctions). The CRAFT-CRITIQUE PASS (an Apollo-style QA gate that rejects determinism/keyword-dumping/missing-high-low-road/house errors) is the reliability lever, build FIRST. Aspects (Phase 2) are the prerequisite for the synthesis discipline. Sophia already is the humanistic-Oracle voice. Recommended order: prompt-craft (done) -> critique gate -> meaning layer + distinctions via the nightly improver.
STRUCTURES ENRICHED with the new blueprint (2026-06-18, Cowork, UNCOMMITTED, rides the Hermes-layer push). api/structures.py: a global BLUEPRINT_ENRICHMENT directive is appended to EVERY audio's generation in api/main.py compose (so all audio types, incl. the natal/demo structure, now draw on the aspect grid + Lots + Lilith + Vertex + Chiron + Vedic, read with craft, using only what serves the piece). Plus targeted per-structure directive tweaks: gk_pearl (Fortune/Spirit), gk_venus (Venus aspects + Vertex), confidence_abundance (Lilith/Fortune), before_bed (Chiron/Lilith gently), founder (Spirit + MC aspects), astro_chart_power + all_systems_agree (the aspect grid). api/overview.py appends a "DEEPER READ" note to every structure's compose panel. NOTE: this enriches STUDIO generation; the separate LOCKED demo render server would need the same enrichment wired to get aspects into the live demo audio (coordination item). ORCHESTRATION (dynamic, not fixed): usually the core astrologers (Sophia/Athena/Prometheus) + Hermes bear the message with specialists feeding support; sometimes the bearer asks a specialist to go deep; sometimes a domain voice (Lakshmi/Eros) speaks to the client directly. UNCOMMITTED: hermes_tools.py + main.py (Lakshmi + Eros oracles) need a push. Next playbook: relationships (Eros live + the lenses).
Jeff's call: start creating tests with Fish Audio (fish.audio, by Hanabi AI) as an alternative voice engine to ElevenLabs. Evaluated 2026-06-17. What it is: an expressive real-time TTS + voice-cloning platform (current model Fish Audio S2; open-source lineage OpenAudio S1 / Fish Speech), with a hosted API and an open-source self-host path.
Why it is worth testing for us:
- Cost. API is roughly $15 per 1M UTF-8 bytes (s2-pro), pay-as-you-go, no subscription or monthly minimum. Independent and Fish's own comparisons put it about 50 to 70 percent cheaper than ElevenLabs for comparable quality. At our render volume this matters once the Studio scales.
- Voice cloning from a very short sample (they claim 10 to 15 seconds), multilingual (30+ languages, same voice). Directly relevant to the Model B flagship two-voice plan (cloned Jeff and Sol voices, section 16): a cheaper, faster clone path to A/B against ElevenLabs.
- Inline emotion and delivery tags ([soft], [whispering], [breathy], [sighing], [pause], [long pause], [excited], etc.). Promising for our meditative cadence and for letting key recognitions breathe, which is an open Studio craft item (section 13).
- Open-source self-host option for cost and control at scale, and an API with low-latency streaming for the future Atlas voice-note / chatbot directions.
Hard constraints on any test (do not break):
- THE DEMO STAYS LOCKED to ElevenLabs Charlotte at the proven baseline (section 4). Fish is a STUDIO / sandbox experiment only. No Fish output goes near the demo unless Jeff explicitly says "make this the new demo."
- scripts/audio_qc.py still gates every Fish render (dropout/artifact reject), same as ElevenLabs. Verify Fish honors a reliable, warble-free pace before trusting it; our whole baseline lock exists because Turbo warbled at speed.
- Commercial use needs a paid Fish plan (their free tier is personal-use only). Confirm commercial rights and data/privacy terms before any client-facing use, especially for cloned founder voices.
- Voice identity: blind A/B Fish vs ElevenLabs for (a) a cloned Jeff/Sol voice and (b) a Charlotte-equivalent narrator, judged on authenticity, emotional nuance, and artifact-free long renders, before adopting anywhere.
NEXT: stand up a small Fish test in the Studio sandbox: clone Jeff and Sol from short calm samples, render the same script through Fish and through ElevenLabs, QC both, and compare. Pricing/API source: docs.fish.audio + 2026 cost write-ups.
Jeff's question: automate SMS delivery instead of email for better response on sample/free/affiliate Affirmology audios; concern that email is needed for the Meta ads pixel. Looked at quo.com + 2026 benchmarks. Findings: - Response gap is real: 2026 benchmarks put SMS open ~90-98% vs email ~28%, SMS CTR ~19-22% vs email ~3% (about 9x). SMS wins the single high-intent "your audio is ready, tap to listen" moment. - The pixel premise is slightly off, and this changes the decision. The Meta pixel fires on the WEB PAGE, not inside the email or text. Whatever channel carries the link, the pixel fires when they land on the audio player page, so retargeting works either way. For audience matching, Meta Custom Audiences + Conversions API accept HASHED PHONE NUMBERS as a primary identifier, not just email. So SMS does NOT sacrifice Meta retargeting/audience building. Email's genuine edge is different: far cheaper per send, better long-form nurture, universal CRM key. - Therefore not either/or. Plan: capture BOTH email + phone on the free-audio form (phone with explicit SMS consent); deliver the audio LINK by SMS for response rate; the link lands on a pixel-tracked player page so tracking/retargeting works; keep email for cheap ongoing nurture + as a second match key. Audio is never attached; always a link to a hosted player page (where pixel + analytics live). - Real cost of SMS is COMPLIANCE, not the pixel: US marketing texts need explicit opt-in, 10DLC A2P brand+campaign registration, STOP/HELP handling, TCPA (statutory damages per message). Highest risk with AFFILIATE traffic: consent must be captured on OUR form with clear SMS-consent language, never assumed from an affiliate list. This is the gating workstream before scaling SMS. Tooling tiers: - Quo (formerly OpenPhone): a shared business phone + inbox for two-way conversations (calls, texts, AI receptionist, routing), NOT a bulk-marketing blaster. Has an API, Zapier/Make, a Quo MCP, and a Claude integration "coming soon"; automated texts via Zapier ~$0.01/msg. FIT: the personal/relationship layer (a real number that texts the audio link and can reply, for Jeff's Miami community + founder-led/affiliate concierge warmth). The "Claude integration coming soon" is worth watching for our agent stack. - Twilio or a marketing-SMS platform: the automated, scaled sample/free/affiliate funnel. Our engine already produces per-person output, so a send can fire on render-complete. Twilio ~$0.0079/SMS + carrier fees. NET: pursue SMS as primary delivery for samples/affiliate audios, keep email alongside, treat consent/10DLC as the gating workstream. Quo = human/relational sends; Twilio (or similar) = automated funnel. Sources: dotdigital/omnisend 2026 benchmarks, quo.com, Twilio pricing.
DELIVERY FLOW DECISION (2026-06-17, Jeff + Cowork): - Do NOT gate the free/sample/affiliate audio behind an app install. For top-of-funnel, friction kills conversion: a stranger's first taste must be a no-install WEB PLAYER PAGE (PWA, app-like, zero install), and that page is where the Meta pixel lives and fires. The Atlas app is the UPSELL / retention layer for converted + community users, not the front door. After the audio lands, soft-prompt "add to home screen / get the full app." - Flow: SMS/email link -> pixel-tracked page -> listen -> app prompt. One page (player + pixel together) or two (a quick tracked landing that fires an intent event, then the player) both work. START with the single player page; only split into two if we want a separate pre-audio "intent" event to optimize ads against. The link CAN route through a tracking page then into the app if a given flow calls for it, but the default sample flow stays web-player. - Twilio is the right automation tool (programmatic SMS firing on render-complete, cheap pay-as-you-go); the spend is small. The real cost of going SMS is consent + 10DLC registration, not the Twilio bill. Budget TIME there, especially for affiliate traffic. - Data capture: capture BOTH email + phone (phone = ~9x SMS response + delivery channel; email = cheap nurture + second Meta match key). Every required field costs completion rate, so this is an A/B question, not a default. MAIN OPEN DECISION (Jeff, to settle): (A) PHONE REQUIRED + EMAIL OPTIONAL, or (B) REQUIRE BOTH. Lean: if SMS is primary delivery, phone is the must-have; option B maximizes data + reach but at some completion-rate cost. Test both.
POST-AUDIO MONETIZATION LAYER (2026-06-17, Jeff + Cowork): - The post-audio moment is the highest-intent window (they just felt something true about themselves). Make the offer there. Existing asset pointed at this: whatsinstore.html post-audio upsell reel (section 8); the "marketing move pop-up" is that, tightened into a clear offer + button. - TWO coordinated surfaces, not redundant: (1) ON-PAGE post-audio pop-up = the peak-moment ask; (2) SMS sequence = re-engage non-converters over the next few days with a small set of different angles/landing pages. Every SMS pushes to a pixel-tracked landing page, so each one also feeds retargeting audiences (ad engine keeps warming). - UX: LET IT LAND. The pop-up appears one beat AFTER the audio ends, not on top of the afterglow (same "let recognitions breathe" craft value as the audios). - Offer set: keep small + test. Candidates: full personalized audio / subscription, deeper cosmic report, affiliate invite, bundle. - CONSENT COPY TREATMENT (Jeff's call): on the capture form, "we'll TEXT YOU THE AUDIO" in BIGGER text; the marketing-message consent in SMALLER, different-color text. Still clearly readable, just less of a vibe killer. COMPLIANCE NOTE: that styling is fine as long as the marketing disclosure stays legible and clear (not hidden/deceptive); delivering the audio is TRANSACTIONAL but pushing offers is MARKETING, so the opt-in must explicitly cover "we'll also text offers," not just the audio. Keep it clear-and-conspicuous to stay TCPA-safe (small ≠ buried).
All in CLAUDE OUTPUTS/Affirmology/film-assets/ (generators alongside, so anything is re-tweakable). The principle locked with Jeff: the browser is the COMPOSITOR/conductor, not the artist; structured charts I build procedurally (my strength), cinematic/organic footage comes from Higgsfield (Jeff, starting tomorrow). Guidance doc: Affirmology_FilmAssets_ShoppingList_v1.md. Process/diagnosis doc: Affirmology_CosmosFilm_EvolutionProcess_v1.md. The B2 cosmos film text-overlap was also fixed in Affirmology_Primer_B2_textfix.html (captions to lower third, sequential, no collisions; Claude Code to fold in).
Built and Jeff-approved this session:
- Zodiac: 12 gold constellation SVGs (zodiac/), elegant, drop-in.
- Human Design bodygraph v1 (bodygraph.svg): correct 9-center shapes/positions + channels, centers id'd. NEXT (requested, not yet built): bodygraph v2 with CURVED channels, gate numbers inside centers, and the Design/Personality side panels; plus a flashing multi-chart beat (different pretend definitions glow back-to-back with type+authority words: Manifesting Generator/Generator/Manifestor/Projector/Reflector, Sacral/Emotional/Splenic authority, etc).
- Gene Keys sequences (gk_seq/), shapes now CORRECT and locked (do not relitigate): ACTIVATION = zigzag (Life's Work top -> Evolution right -> Radiance left -> Purpose bottom). VENUS = zigzag chain Core->SQ->EQ->IQ->Attraction->Purpose (6 spheres). PEARL = tetrahedron (Brand/Pearl/Vocation/Culture). Each centered in the 64-gate wheel, color-coded (Activation emerald, Venus gold, Pearl pale). One-by-one light-up GIF exists (goldenpath/sequences_lightup.gif).
- Full Golden Path (goldenpath/golden_path_full.svg): all 11 spheres, three sequences color-coded, with the SQ->Vocation link Jeff requested. Correct as of end of session.
- Brain: brain_gold.png / brain_emerald.png (recolored from Jeff's brain2.png, transparent, glow). brain_alive.gif = breathing glow + firing synapses + absorption pulse (2D animation I make here; 3D rotation would be Higgsfield).
- Sacred geometry (sacred/): Flower of Life, Seed of Life, Metatron's Cube, Merkaba, Sri Yantra, Golden Spiral, Torus, Vesica Piscis, all gold line-art; plus sacred_swirl.gif (counter-rotating hypnotic mandala).
- Web feasibility demos (answer to "can we do quantumstretch / Codrops particle galaxies"): galaxy_demo.html (Three.js + GLSL animated galaxy, gold core to emerald arms, live sliders, manual orbit; FIXED the OrbitControls-404 bug) and scroll_demo.html (GSAP+Lenis preloader/smooth-scroll/pinned-reveal/counters in-brand). Both UNVERIFIED by Cowork (no browser/GPU in sandbox); Jeff reviews in browser. Verdict: yes, that whole class of site is our existing GSAP/Three stack.
- STILL QUEUED (procedural, no Jeff assets needed): astrology natal wheel with lines drawing in + rotation (pairs with the birth-flash beat: Earth + horizon flare -> ring -> chart); bodygraph v2 + flashing charts (above).
- TOMORROW: Jeff generates Higgsfield footage (cosmos nebula loop, Earth-with-sunrise, horizon flare per the shopping list); Cowork strips/recolors/composites it with these assets and can scroll-scrub it. A Higgsfield-style media MCP (generate_video/image/3d) also surfaced in this session's tool list.
Consolidated, lane-tagged plan to resume the demo overhaul the moment Claude Code finishes
the B2 cosmos loading film: CLAUDE OUTPUTS/Affirmology/Affirmology_DemoOverhaul_ExecutionPlan_v1.md.
Covers the five flow pieces (pre-form opening, loading film, audio player, post-audio display,
post-audio short video), the post-audio result.html bug notes (Safari scroll stall; thin
blueprint missing Rising + more Gene Keys + intro; download buttons still point at mocks;
consistency check), the email switch (Resend domain verified; still need RESEND_API_KEY +
FROM_EMAIL on the worker), the ordered checklist, and a NEW proposal Jeff asked about: an
AMBIENT (not kinetic) animation during listening, slow/low-contrast/optional, loosely
audio-reactive, the user's chart barely visible behind it, with a dim toggle and
prefers-reduced-motion. Jeff likes the idea; treat it as the sixth experience.
- COSMOS FILM TEXT FIX (2026-06-17, Cowork): the B2 primer had captions colliding (all pinned dead-center with overlapping time windows, plus chart-art labels in the same zone). Cowork applied a deterministic fix in Affirmology_Primer_B2_textfix.html (copy of B2, original untouched): captions moved to the lower third (top:71%) so they clear the centered chart art, the three system label+phrase pairs merged into single two-line beats, and every caption window made strictly sequential (verified zero time-overlaps). CLAUDE CODE: fold these BEATS + the .beat position change into the canonical B2 on the next pass. Aesthetic/art quality is a SEPARATE problem (needs real assets, not code) tracked in Affirmology_CosmosFilm_EvolutionProcess_v1.md.
The Studio engine now runs in the cloud, not just the laptop. Full render pipeline PROVEN end-to-end.
affirmology-studio-api on Render, LIVE at https://affirmology-studio-api.onrender.com (Docker from api/Dockerfile, blueprint render.yaml, autoDeploy on push to jeffparkerlove22/affirmology-studio main). Health: GET /api/health.github.com/jeffparkerlove22/affirmology-studio. The engine (affirmology-agent) is VENDORED into it CODE-ONLY (rsync + .gitignore; no .env/.venv/out/music/db/media; proven with git check-ignore). To update the engine in the cloud, re-vendor + push.affirmology-media. STUDIO_STORAGE=r2, R2_PUBLIC_BASE_URL=https://media.affirmology.ai. Rendered MP3 + PDF upload to R2 under <job_id>/.... R2 creds live in affirmology-agent/.env (gitignored) for the nightly upload job; same creds set as Render secrets.corpus.db (9.4MB) uploaded to R2 key corpus/corpus.db. On boot api/corpus_boot.ensure_corpus_db() pulls it to the persistent disk /data/corpus.db and sets AFFIRMOLOGY_CORPUS_DB. It RE-PULLS when the R2 object size differs from local (so a restart after a fresh re-upload loads the new corpus; no manual delete). GET /api/corpus-stats returns the live record count for verification. So cloud generation stays chart-grounded.Heavenly Circuit.mp3 uploaded to R2 key music/Heavenly Circuit.mp3; api/corpus_boot.ensure_music_bed() pulls it to /data on boot (STUDIO_MUSIC_BED=/data/Heavenly Circuit.mp3). Media is never committed to the repo.STUDIO_REQUIRE_AUTH=true. The raw onrender URL requires the bearer STUDIO_AUTH_TOKEN (a Render secret; NOT the laptop .studio_token). Proven: /api/compose and /api/audio return 401 without it; /api/health, /api/pdf-check, /api/corpus-stats are public. The Cloudflare worker injects the matching token so studio.affirmology.ai still works (Access at the edge + token to origin).pdf_url: None, audio still fine). Root cause via a /api/pdf-check self-test = ModuleNotFoundError: weasyprint - the agent pyproject never declared weasyprint (laptop-venv-only). Fix: added weasyprint>=60 to api/requirements.txt + native libs to the Dockerfile (libpangoft2-1.0-0, libfontconfig1, libglib2.0-0, libharfbuzz0b).pypdf>=4.0 - the post-render chart-integrity guard (scripts/chart_integrity.py) reads the PDF; once weasyprint produced PDFs the guard would have failed without pypdf. Everything else undeclared is corpus-build-only (bs4, trafilatura, readability, youtube_transcript_api, playwright, google-*, vertexai, tenacity, legacy PyPDF2) and intentionally NOT in the cloud image (render path proven not to need them). httpx is transitive via anthropic. elevenlabs is NOT imported at all (engine calls ElevenLabs over requests).status: done with both URLs means the chart-integrity guard ran on the real PDF and passed.affirmology-studio-api Cloudflare worker now routes studio.affirmology.ai to the Render cloud. Set worker secrets STUDIO_FUNNEL_URL=https://affirmology-studio-api.onrender.com and STUDIO_AUTH_TOKEN (exact match to Render), deployed via wrangler (version c564c027). Verified worker->Render via the workers.dev URL before closing it: /api/health data_dir=/data, /api/people 200, /api/corpus-stats 12,905. Then set workers_dev = false + redeploy to CLOSE the side door (workers.dev now 404). The laptop server + Tailscale funnel were LEFT RUNNING as fallback (nothing retired); to roll back, set STUDIO_FUNNEL_URL back to the funnel URL and redeploy. studio.affirmology.ai/api/health returns 302 to Cloudflare Access (email OTP) so the final pass-through can only be confirmed in a browser (after Access login, data_dir=/data = cloud).media.affirmology.ai - rendered MP3/PDF are in the bucket but public fetch returns 403; wire R2 public access / the custom domain so the returned media URLs resolve. (The app domain repoint above is done; this is just the media host.)Done now that studio.affirmology.ai runs on Render + R2 (section 19):
uvicorn api.main:app on 127.0.0.1:8765). The Tailscale Funnel that exposed it was already off (Tailscale is STOPPED; funnel status = no config). Tailscale itself is LEFT INSTALLED, so re-exposing is a one-liner if ever needed. NOT TOUCHED: the nightly corpus crawl (there is no live launchd job anyway, ~/Library/LaunchAgents has none loaded; the plist is a Mac-mini-install template). The DEMO server (uvicorn server.api:app on :8443) was LEFT RUNNING (out of scope; it is the locked demo, not the studio)./Users/jeffreyparker/CLAUDE/AFFIRMOLOGY/corpus (per Jeff: keep the research + db sorted under the AFFIRMOLOGY folder). Method: copy (ditto) -> verify -> remove. Verified byte-identical before deleting the SSD copy (same SHA-256 on corpus.db, same 6963 file count, PRAGMA integrity_check ok, 3866 docs / 12905 records). SSD copy then removed; studio-media on the SSD left intact. Contents moved: corpus.db, raw/ (581MB), extracted/ (57MB), logs/./Volumes/Affirmology/corpus -> the internal path) across both engine trees (affirmology-agent and the vendored affirmology-studio/affirmology-agent): the engine default in script_generator.py, the crawl script scripts/overnight_corpus.sh, the nightly launchd/com.affirmology.nightly.plist (data-dir + log paths), and the corpus module docstrings. Also set AFFIRMOLOGY_CORPUS_DB=/Users/jeffreyparker/CLAUDE/AFFIRMOLOGY/corpus/corpus.db in affirmology-agent/.env. VERIFIED: the status module opens the new DB, and the engine's own db.search_records() returns rows from it (gene_keys/human_design/western all return hits). Module imports + py_compile clean.affirmology-agent/scripts/classify_corpus.py writes the residue into a doc_quarantine table (idempotent; changes NO documents/records) and prints the corrected status; corpus/status.py now also prints a "Structurable status by tradition" block inline. Quarantined: 1,554 docs (1,474 failed extraction + 80 too short). CORRECTED structurable status (structured / structurable, where structurable = word_count>100 tier A/B):A 10-doc Haiku pilot on the "pending" docs (to confirm they yield records before structuring all of them) returned 0 records. Investigation found TWO things: (1) the lowest-id pending docs are full scanned books and archive.org search/index pages (not interpretation prose), and more importantly (2) MOST "pending" extracted text was BINARY GARBAGE. ROOT CAUSE: the scraper saved the raw HTTP body still COMPRESSED (Brotli/gzip/deflate) without honoring Content-Encoding, and extract_html just .decode("utf-8")'d it, so the "extracted text" was garbage with a bogus word_count (passing the >100 floor). The raw bytes were intact, so it is fully recoverable with NO network calls.
- FIX (permanent): added _maybe_decompress() to corpus/scraper.py (sniffs gzip/zlib/deflate/brotli, decompresses, leaves real HTML untouched); extract_html now decompresses before extracting. Mirrored into both engine trees, so future crawls are fixed too. (Brotli decompression needs the brotli package; the import is guarded so gzip/deflate still work without it. Declare brotli in the agent deps when convenient.)
- DB PATH MIGRATION: the corpus move had left document.raw_path (3,865) and extracted_path (2,391) pointing at the deleted SSD prefix; remapped all to the internal path (0 left on SSD).
- RECOVERY: new rerunnable scripts/recover_compressed.py (dry-run by default, --apply to write) decompresses + re-extracts every unstructured doc from its cached raw bytes and updates the extracted file + word_count when the result is real readable text. APPLIED: of 2,257 unstructured docs, 1,652 RECOVERED to readable text (numerology 492, vedic 384, western 372, human_design 263, gene_keys 141); 605 stayed unchanged (already-text or genuine index/placeholder pages); 0 raw files missing. DB backed up first to corpus/corpus.db.bak (reversible).
- RESULT (classifier re-run after recovery): failed-extraction residue 1,474 -> 177; real structurable docs 2,312 -> 3,514 (1,609 structured + 1,905 pending); total quarantined residue 352. The corpus is far healthier than the old framing assumed.
- CORRECTION to the prior-session claim that "the remaining backlog is non-structurable junk": that was largely WRONG. The bulk was compressed-but-recoverable real content; ~1,200 docs were salvaged. A small genuine residue remains (index/search/placeholder pages + a few un-decompressable files).
- PILOT PROOF that recovered docs structure: re-structuring a sample of recovered pages with Haiku yielded real records (Chaldean numerology 14, Cafe Astrology 11, gene keys 7, etc.). Total pilot API spend ~$0.67 (Haiku).
- NEXT (needs Jeff's go; this is the credit-spending step): run the full Haiku structure-only pass over the ~1,905 pending docs now that they are real text. Rough estimate ~$15-40 at Haiku rates depending on book chunking. Recommend tradition batches (numerology/western/vedic first, where recovery added the most) with --max-cost-usd caps and a small --limit re-pilot per tradition to confirm yield before each full batch.
Standing plan: Affirmology_CorpusAcquisition_Plan_v1.md (hand to Claude Code, runs unattended within budget). Jeff's call after reviewing Code's Western run: the corpus feels weak because effort went into re-structuring a scrape full of archive.org search?query= / index / junk pages (the "6 Western big books" were all search-result pages, 0 yield). The leverage is ACQUIRING real, legal full text and parsing THAT.
- PRIORITIES: Western (highest) > Gene Keys + Vedic (both important) > numerology SHELVED (lightly used; do not spend on it now).
- THE UNLOCK: fetch public-domain (Tier A) full-text books, not search pages. Western: Gutenberg (Ptolemy Tetrabiblos #70850, Sepharial #46963) + archive.org *_djvu.txt (Raphael, Alan Leo, William Lilly). Vedic: sacred-texts.com Jyotish + PD Parashara. Gene Keys: A/B only, TIER WALL on Rudd/Ra Uru Hu (Tier C, never scraped); use PD I Ching (Legge, not 1950 Wilhelm) + A/B community commentary.
- MODEL/COST: Gemini key now works, so re-open the structurer choice (old "HOLD on Haiku" was the Gemini billing block). Run a 10-doc bake-off Gemini Flash vs Haiku vs Nemotron; use the cheapest good model for the bulk. Jeff has Gemini + Nemotron + Haiku credit.
- BUDGET: Jeff adding ~$15-20 now, re-ups when proven useful; pilot-before-batch, hard --max-cost-usd caps, quarantine noise permanently, stop at ~$3 floor and report.
- PUSH after every significant piece (each tradition/big-book set overwrites R2); ONE Render restart at the end, not after every push.
- COORDINATION: Code stays in affirmology-agent corpus code; do NOT touch affirmology-studio or numerology.py/council.py/script_generator.py (Cowork editing in parallel). The engine items (numerology guard, Persephone gate) land AFTER the corpus run is done and pushed.
Per Affirmology_CorpusAcquisition_Plan_v1.md. Stopped re-grinding the old scrape; ACQUIRED real full text and parsed it. New corpus scripts (all in affirmology-agent/scripts/, corpus code only): acquire_books.py (Gutenberg + archive.org _djvu.txt, never /search), bakeoff.py, gemini_structure.py (concurrent, tag-validating), run_plan.py, coverage_report.py, classify_corpus.py, recover_compressed.py, structure_batch.py, pilot_v2_prompt.py.
- MODEL BAKE-OFF: Gemini Flash (gemini-2.5-flash) WON decisively: 33 records / 2 book chunks for $0.0011 vs Haiku 3 records / $0.042. Nemotron yielded 0. Gemini is the bulk model now (key works; old "HOLD on Haiku" is lifted). ~400x cheaper/record. Default Gemini, escalate only if a pilot underperforms.
- WESTERN: acquired 6 PD books (Ptolemy, Sepharial x2, Raphael, Alan Leo, William Lilly). KEY FINDING: record quality == SOURCE quality, because the structurer prompt preserves the source's voice (rule 2). Pre-1900 OCR books (Lilly 1647, Raphael 1828, Ptolemy) produce archaic + OCR-garbled records -> QUARANTINED (not deleted) into the new record_quarantine table (2583 + pilots = 3682 rows), their sources marked DEFERRED, docs reprocessable. Modern-era books (Alan Leo ~1910, Sepharial ~1920) produce clean evergreen records -> KEPT. Western book records added this run: Alan Leo 540, Sepharial Manual 479, Sepharial How-To 427 = ~1,446. Western total 4,297 -> 5,743 (depth 11.4).
- GENE KEYS + VEDIC: book acquisition hit UNRELIABLE archive scans - the "Legge Yi King" DLI scan (in.gov.ignca.20915) is mislabeled (Western astrology body), and "Brihat Jataka 1885" (wg1079) is a bound miscellany mixing Brihat Jataka with Western directions. All pre-1900 anyway. DEFERRED to v2 + source verification. Gene Keys stays 670, Vedic 391. Tier wall HELD: never scraped Rudd/Ra Uru Hu (Tier C); only public-domain texts attempted.
- COST: the whole acquisition run cost ~$0.30 (Gemini Flash). The fresh $20 is essentially untouched. Budget is no longer the constraint; source quality + correct sourcing are.
- CORPUS TOTAL: ~20,060 records. corpus.db pushed to R2 (15.8MB, 2026-06-18 17:12 UTC). NEEDS ONE Render restart of affirmology-studio-api to go live (re-pulls on boot when R2 size differs).
- v2 PROMPT DRAFTED + PILOTED (NOT yet used for reprocessing, awaiting Jeff's go): pilot_v2_prompt.py holds a v2 structurer prompt that EXTRACTS THE MEANING in clean modern neutral English instead of preserving archaic wording (unlocks the deep classics; safer on copyright). Piloted on William Lilly 1647: faithfully modernized garbled 1647 OCR into clean records (e.g. source "if the major part of the Significators be in Diurnal Signs, the Birth will be by day" -> "If the majority of chart significators are placed in diurnal signs, the birth will occur during the day"). Faithful, not fabricated. NEXT (on Jeff's go): adopt v2 and reprocess the quarantined classics (Lilly/Raphael/Ptolemy) + re-source verified I Ching (Legge) and Brihat Jataka for gene_keys/vedic.
structurer.py (extracts MEANING in clean modern neutral English, not source's archaic voice) + brand-safety rule (omit derogatory race/caste/gender wording, skip mundane nation astrology, keep individual chart interpretation). Piloted faithful (not fabricated) across Lilly/Raphael/Ptolemy before reprocessing.record_quarantine._parse_and_persist (keeps complete objects from a cut-off array).wg916, SBE Vol 16 1882; content-checked 1407 I Ching hits / 0 western). +1,009 records -> 1,679 (depth 20). Tier wall held (Legge PD; never Rudd/Ra Uru Hu).brihatjatakavar00iyergoog, doc 3875; 717 vedic hits). The earlier wg1079 was a bound miscellany (mixed Western) and in.gov.ignca.20915 ("Yi King") was a mislabeled Western scan - both DEFERRED. +1,335 records -> 1,726 (depth 38.4).affirmology-studio-api to go live.Proven cadence (verify source genuine + public-domain -> v2 modernize/de-bias -> pilot shown -> scale). Gemini credits depleted (separate Google billing), so all on Haiku.
- NUMEROLOGY (was shelved, un-shelved with verified PD classics): Westcott "Numbers: Their Occult Power & Mystic Virtues" (1890) + Sepharial "Kabala of Numbers" (1920), content-verified. Cheiro skipped (no clean PD scan). +514 records -> 1,138 (depth 18.7). Yields number symbolism (Number_1..9 + masters), the basis for life-path/expression retrieval.
- PART OF FORTUNE: already well-covered (~19 modern records, houses 1-12 + aspects); classical Ptolemy/Lilly extraction mostly deduped against the better modern set. Done.
- ASTEROIDS + POINTS (Chiron, Ceres, Pallas, Juno, Vesta, Black Moon Lilith): modern, not in PD classics, so synthesized from MULTI-SOURCE A/B web consensus in our OWN voice (no single-site verbatim), general + 12 signs + 12 houses per body. +51 new (the rest of the keys already existed). scripts/synth_points.py.
- GENE KEYS LAYER-B (navigation methodology, tier-walled): scripts/synth_genekeys_b.py. 19 methodology/navigation concept records (sequences/spheres/contemplation/three-frequency model, our words, NOT Rudd's Activation/Venus/Pearl names) + shadow/gift/siddhi for 61/64 keys, each DERIVED FROM THE PUBLIC-DOMAIN I CHING (King Wen) hexagram theme in our own words. TIER-WALL FIX: quarantined 180 pre-existing shadow/gift/siddhi records that came from a third-party blog reproducing RUDD'S NAMED SET verbatim (e.g. "Gift of Guidance" GK7, "Shadow of Inertia" GK9) into record_quarantine (reason genekeys_rudd_named_tierwall); replaced with our clean I-Ching-derived set (verified: GK7 gift = "strategic coordination" not "Guidance"). Kept shadow/gift/siddhi only as generic frequency labels per Jeff.
- FINAL CORPUS (2026-06-18): western 8,271 / human_design 7,952 / transits 4,764 / vedic 1,726 / gene_keys 1,701 / numerology 1,138 = ~25,552 records. corpus.db pushed to R2 (18.6MB, 2026-06-18). NEEDS ONE Render restart of affirmology-studio-api (Claude has NO Render API key; Jeff restarts manually) to go live; service re-pulls corpus on boot when R2 size differs.
The CLAUDE.md rule is now LIVE in practice: astrology routed through the agents, not the chat. Ran five oracle readings over the funnel and compiled them: CLAUDE OUTPUTS/Affirmology/Affirmology_WealthCodes_OracleReadings_v1.md (~43k chars): Jeff x Lakshmi, Jeff x Agastya, Sol x Lakshmi, Sol x Agastya, Together x Concordia. Quality is a clear step up: mechanism-level, multi-system synthesis, uses the new points (Black Moon Lilith, Chiron, Part of Fortune), PROGRESSIONS (e.g. Sol's Progressed Moon in Capricorn), Vimshottari dasha, and 2026 transits. Jeff = "Merchant-King" (8th-house capital + Gate 45); Sol = "identity not hustle" (NN + Lilith Taurus, 11th-house community); Agastya read past money-hardship via the Ardra/Rahu Moon and dasha. OPERATIONAL NOTES for the agents: (a) single/1-2-oracle calls work reliably; MULTI-oracle (6+) still hits the residual forced-synthesis BadRequestError (see Affirmology_HermesLoop_Bug_v1.md) - so run focused calls and compile. (b) /api/hermes is synchronous and slow (>45s); POST then poll GET /api/hermes/history (the reply persists even if the client times out). (c) heavy threads get flaky as history grows; a couple calls hung/stubbed before succeeding on retry. (d) minor accuracy wobble seen (Jeff reading briefly conflated Pearl 44.1 with Radiance 45.5) - exactly what the planned craft-critique QA pass should catch.
New sleep bed added: affirmology-agent/music/Quartz Pulse Tone.mp3 (Jeff uploaded; ~8.6 min, 192k). Use MP3 for beds (pipeline re-encodes to mp3; WAV master kept by Jeff). Category for the bed selector: Stillness/Delta (before-sleep). Rendered 2 before-bed wealth/abundance audios (theme: call in abundance, get Affirmology funded, comfort in path + timing). Method: compose before_bed via Studio on the Mac (chart-driven), grab the engine's voice-only intermediate (backend/*_voice.mp3), re-mix with Quartz in the sandbox (voice_offset 8, music 0.18, 9s fade). This is how to use a NEW bed before the Studio bed-selector ships. Delivered to CLAUDE OUTPUTS/Affirmology/KickoffWeek_Audio/: Jeff_BeforeBed_Wealth_Quartz_v1 (9:07), Sol_BeforeBed_Wealth_Quartz_v1 (7:02).
Built the reusable gold AFFIRMOLOGY title system for the movie-trailer bridge. Winning pipeline (locked): generate the gold title as a STILL (Nano Banana, perfect text) → animate with Higgsfield Kling 3.0 two-keyframe morphing (start_image + end_image) → key out the black (lumakey) for transparent overlays. Hand-coded/remotion text was abandoned (looked cheap). Full spec: CLAUDE OUTPUTS/Affirmology/Affirmology_TitleSystem_v1.md. - CANONICAL frame (the alignment lock): AFFIRMOLOGY_canonical_BLACK.png + _ALPHA.png (1280x720). Every title animation starts/ends on this so they line up pixel-perfect when stacked in CapCut. - Assets in Affirmology_VideoEditKit/grand_bridge/TITLE_SYSTEM/: INTRO_black_to_AFFIRMOLOGY (.mp4/_ALPHA.mov), OUTRO_AFFIRMOLOGY_to_black (.mp4/_ALPHA.mov), affirmology_NAMEMORPH_v4_snappy (.mp4/_ALPHA.mov = black→AFFIRMOLOGY→Affirmations+Astrology+AI→Affirm+ology+AI→Affirmology.ai→AFFIRMOLOGY). - Also in grand_bridge/: nebula entrance pieces (nebula_bloom, title reveal, lockup_living), soul-song + subconscious-OS transparent overlays, hero constellation light-up v3 (the painterly hero figure igniting). All on-disk for Jeff to assemble in CapCut. - Jeff drives final assembly in CapCut (the agreed workaround); chat generates premium assets + transparent overlays. Next options: more intros/outros anchored to canonical; rebuild nebula entrance off canonical for full alignment; push morph even faster.
CLAUDE OUTPUTS/Affirmology/Affirmology_InvestorVideo_MASTER_EditGuide_v1.md. The single map: story-spine clips 01-24, new scenes (rooftop guide, dog-walk, Monika arc), the title bridge (TITLE_SYSTEM is ONLY the gold-title bridge, not the whole film), all overlays, and the audio files (master_voice_track / VOICE_ONLY / music_bed in VideoEditKit/audio). Flags gaps: new VO (guide dialogue, Monika Sacred Audio, Atlas thesis), the 2 Seattle zero-proof company clips.affirmology_NAMEMORPH_INK_buildON_v2, affirmology_NAMEMORPH_SHARDS_buildON_v2 in TITLE_SYSTEM. All transparent _ALPHA.mov, anchored to canonical frame.CLAUDE OUTPUTS/Affirmology/Affirmology_OracleSheets_BrowserPromptPack_v1.md. 14 remaining oracles (Agastya, Prometheus, Athena, Pythagoras, Orpheus, Apollo, Hypnos, Chiron, Persephone, Echo, Eros, Concordia, Hestia, Gaia) as paste-and-go hero-bust prompts in the locked marble-and-gold Sophia look, runnable FREE in browser Nano Banana 2 (attach locked Sophia frame as reference). Run options: Jeff pastes, or chat drives Chrome. Then full turnaround sheets + Higgsfield Character Elements.FOUND in Higgsfield history (so we never lose it again). The v7 character VO uses the inworld_text_to_speech model with these voices:
- JOE = Ethan (en)
- MONIKA = Olivia (en)
- FRIEND/guide = Liam (en)
- In-app ORACLE = Serena (en)
- ATLAS (bridge thesis) = Arthur (ElevenLabs preset, voice_id 30fc8796-ceb6-4a66-b3a7-4a145ef7f346) - NOT inworld; locked this session.
- Jeff's personal wealth audios (separate) = Orion (ElevenLabs, ed69c516).
Rule note (Jeff 2026-06-24): the "all audio through our engine" hard rule is for PRODUCT Sacred Audio; the INVESTOR VIDEO VO is allowed via Higgsfield to match prior choices.
NEW VO rendered + saved to Affirmology_VideoEditKit/audio/new_vo/: joe_guide_kickoff (Ethan); friend1_partytrick / friend2_testimony_seattle / friend3_reframe (Liam); oracle_wealthblueprint (Serena); monika_SA1_hours / SA2_circle / SA3_ceiling / SA4_worth / SA5_becoming (Olivia); atlas_thesis (Arthur). m_ceiling stays as-is (already Olivia).
Personalization through-line: Affirmology_PersonalizationTagging_Review_v1.md + 6 new source-tag overlays in VideoEditKit/overlays/ (tag_joe_ and tag_stars_).
STILL OPEN: the 2 Seattle zero-proof company clips (factory cheers + laptop success) - need the blond-friend anchor image; prompts in Affirmology_NanoBanana_PromptPack_v1.