Files
impactflow_discovery/openbrain-readme-update-2026-05-27.md
T
Joel Salmon b8f176bb31 Initial commit: ImpactFlow Discovery + Google OAuth auth layer
Discovery service (pre-existing): FastAPI + async SQLAlchemy + Alembic +
SQLite + Anthropic, with a five-prompt static UI that produces an Enneagram
+ Ikigai profile.

Auth implementation (this change set) follows
Impact_Flow_Auth_Plan_OAuth.html, adapted to the discovery_conversation /
discovery_profile schema:

- app/auth.py: Google OAuth registration, JWT issue/decode, dual-auth
  dependency (Bearer JWT or X-API-Key), refresh-token hashing, domain
  allow-list, synthetic api-key-admin user
- app/tracking.py: ActivityTrackingMiddleware + log_activity helper;
  tags machine-to-machine calls source=mcp
- app/routers/auth.py: /api/auth/{login,callback,refresh,logout},
  /api/me, /api/me/{stats,sessions,sessions/{id}}
- app/routers/activity.py: /api/activity, /api/activity/summary,
  /api/admin/activity, plus prune_old_activity (90-day retention)
- app/routers/discovery.py: every route now user-scoped via the auth
  dependency; /discovery/profile/{user_id} -> /discovery/profile/me
- alembic/versions/002_add_auth.py: users, refresh_tokens, activity_log
- tests/test_auth.py: 8 tests covering 401 paths, X-API-Key admin
  resolution, JWT round-trip, admin gating, domain allow-list
- README.md: Authentication section, expanded env-var table, updated
  data-model and API-reference tables
- .env.example: new GOOGLE_*, JWT_*, IMPACTFLOW_API_KEY, CORS_*,
  ALLOWED_EMAIL_DOMAINS placeholders
- .gitignore: also exclude data/*.log

Tests: 19/19 pass (11 pre-existing + 8 new). smoke_test.py exercises the
full discovery flow under X-API-Key plus 401 paths, OAuth login redirect,
activity logging, and /api/me/stats.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 10:59:41 -05:00

2.0 KiB

title, type, topics, people
title type topics people
ImpactFlow Discovery README refreshed to match current code (2026-05-27) observation
impactflow-discovery
documentation
alembic
migration-bootstrap
jsalmon

Refreshed README.md for impactflow-discovery so it matches the code as of 2026-05-27. Repo state, routes, schemas, env vars, and dependency pins were already accurate; the doc had drifted in four specific places.

What changed

  1. Important files table — added rows for app/migration_bootstrap.py, tests/test_migration_bootstrap.py, tests/test_static_discovery.py, and tests/fixtures/{gut,head,heart}_type_responses.json.
  2. App Startup section — replaced the one-line "Docker startup also runs Alembic migrations" with the actual three-step container CMD: python -m app.migration_bootstrap && alembic upgrade head && uvicorn ..., plus a note that the Dockerfile also runs alembic upgrade head at build time as a sanity check against a throwaway in-image DB.
  3. Frontend Behavior — discovery.html — documented the createUserId() helper and its crypto.getRandomValues() fallback so the flow keeps working in insecure (non-HTTPS) contexts like LAN/Tailscale.
  4. No content removed; every existing claim still checks out against code.

Why this matters

app/migration_bootstrap.py is the load-bearing piece for anyone whose local data/discovery.db predates Alembic — it stamps the existing schema as revision 001 so the next alembic upgrade head doesn't crash trying to recreate tables that already exist. That behavior was previously invisible to new readers of the repo.

Files touched

  • C:\SyncData\impactflow-discovery\README.md

Verification

  • Every backtick-quoted file path in the README maps to a real file on disk.
  • Every /discovery/* route in the README matches a handler in app/routers/discovery.py.
  • createUserId() and getRandomValues both confirmed present in app/static/discovery.html.