force-include errors during editable installs (uv pip install -e)
when src/authsome/ui/web doesn't exist on a fresh checkout, breaking
lint and test CI jobs. artifacts bypasses .gitignore for matched files
but silently skips missing paths, so editable installs succeed without
requiring build-ui.sh to have run first.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Hatchling respects .gitignore by default, so the generated
src/authsome/ui/web/* assets were excluded from the wheel even though
build-ui.sh populates them before uv build runs in CI.
- Add force-include for the wheel target (sdist already had this) with
the correct installed path (authsome/ui/web, not src/authsome/ui/web)
- Remove .gitkeep — build-ui.sh's mkdir -p creates the directory;
no placeholder needed
- Drop the .gitignore exception for .gitkeep
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Delete the server-rendered dashboard pages, remove the static asset mount, and route the Next dashboard provider login form through the browser-session auth path.
Implement ADR 005 by routing audit events through OpenTelemetry with a server-owned SQLite exporter and query endpoint. Implement ADR 006 by persisting principal roles, assigning first principal admin, and enforcing admin-only routes at the FastAPI dependency layer.
Entire-Checkpoint: df60966364f1
Enables authenticated access to sites like X/Twitter and LinkedIn that
use browser session cookies rather than OAuth or API keys.
Core logic lives entirely in auth/ — BrowserFlow.run_login() reads
Chrome's on-disk SQLite cookie database via browser-cookie3 (macOS
Keychain / Linux GNOME Keyring / Windows DPAPI), opens the site in the
user's default browser if no valid session exists, then polls until the
required auth cookies appear. No separate Chrome profile, no Playwright.
- auth/browser_cookies.py: read_chrome_cookies(), cookies_are_valid(),
normalize_jsessionid() with lazy browser-cookie3 import
- auth/flows/browser.py: BrowserFlow (begin/resume/refresh) + static
run_login() for CLI use
- auth/models/: AuthType.BROWSER, FlowType.BROWSER, BrowserConfig,
ExtractRule, ConnectionRecord.credentials field
- server/: register flow, header rendering, export branch, BrowserAction
schema, _session_response wiring (~35 lines total)
- cli/main.py: 8-line elif block calling BrowserFlow.run_login()
- Bundled providers: x-browser, linkedin-browser
- 30 new tests in tests/auth/
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Entire-Checkpoint: 3753e27e5941
- Revert version to 0.3.1 and drop anthropic from dev deps
- Point run-evals to evals/evals.json (root) instead of skills/authsome/evals/
- Untrack .claude/commands/authsome.md (generated at eval time) and gitignore it
- Untrack docs/superpowers/ planning artifacts and gitignore the directory
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove evals/run_evals.py (replaced by inline orchestration in
run-evals.md), bump version to 0.3.2, update lockfile, and add
authsome skill command file.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Switch grading from anthropic SDK to `claude -p` subprocess to avoid
a hard dependency. Truncate transcript to last 4000 chars to stay within
CLI arg limits. Grade partial transcripts even when rate limit is hit
(emit WARNING instead of skipping).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>