Skip to content

feat(growth): founder install digest with one-click approve links - #1102

Merged
blove merged 18 commits into
mainfrom
blove/founder-install-digest
Sep 17, 2026
Merged

blove merged 18 commits into
mainfrom
blove/founder-install-digest

Conversation

@blove

@blove blove commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Daily digest job in the lifecycle tick, behind GROWTH_INSTALL_DIGEST_ENABLED (default off): lists identified, non-CI installers with a work-email domain who are not a contact in any state and were never reported; sent to the founder through the existing internal notification sender. Never emails the installer, never creates a contact.
  • Each line carries a 7-day signed founder_approve_install link. /api/growth/approve-install (mirrors the stop route) creates and approves the contact through the founder reauthorization path, so campaign enrollment uses the existing contact.reauthorized branch with no enrollment SQL changes.
  • New table growth_install_digest_reports (migration 0008) is the digest's idempotency ledger, written in the same transaction that completes the job; the notify-style at-most-once claim prevents double sends.
  • Also: pacificCalendarDate helper, founder_approve_install token purpose, internal-notification claim accepts the job kind.
  • Spec: docs/superpowers/specs/2026-09-16-install-boot-observation-and-founder-digest-design.md. Plan: docs/superpowers/plans/2026-09-16-install-boot-observation-and-founder-digest.md (Tasks 5 to 15).

Test plan

  • growth unit + operator CLI suites, lint, build
  • lifecycle suite (digest handler, dispatcher enqueue, template, config switch), lint, build
  • website approve-install route spec (happy, double click, bad signature, wrong purpose, expired, uniform failure shape, XSS escaping), lint, nx build website
  • Not executed: the growth integration specs need a disposable TEST_DATABASE_URL, which was unavailable. Written and typechecked but not run: install-digest.integration.spec.ts (candidate exclusions incl. personal/CI/active/deleted/stopped contacts, reported identities, grouping, package bound, enqueue idempotency, empty-candidate rollback), contacts.integration.spec.ts › approveContactFromInstallDigest, and the migrations.integration.spec.ts ledger/table list. Run npx nx run growth:test-integration under Node 22 with TEST_DATABASE_URL before the production cutover.
  • After merge: apply migration 0008 to production, set GROWTH_INSTALL_DIGEST_ENABLED=true on the lifecycle project, verify the first digest (plan Task 16).

🤖 Generated with Claude Code

blove and others added 18 commits September 16, 2026 22:26
…digest

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…er install digest

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…er reauthorization

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ion; deterministic empty-candidate test

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…uthorization extras; spec names the real approval path

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…y behind a switch

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…origin; report and complete atomically

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
… for approve-install

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…entity, keeps the report ledger on job deletion

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@blove
blove enabled auto-merge (squash) September 17, 2026 06:12
@vercel

vercel Bot commented Sep 17, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
threadplane Ready Ready Preview Sep 17, 2026 6:15am UTC

Request Review

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated approval: this PR received an intelligent (AI) code review. See the review comments on this PR.

@github-actions

github-actions Bot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

Claude finished @blove's task in 0s —— View job


I'll analyze this and get back to you.

@blove
blove merged commit 5a2e0a0 into main Sep 17, 2026
33 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant