Payload
{
"ref": "refs/heads/main",
"before": "32bcf87302e4f3accf8c3dc06899fc72c0f5f064",
"after": "1bb691c3d74957e911d0bd536c7268bc61686266",
"repository": {
"id": 1144186344,
"node_id": "R_kgDORDLl6A",
"name": "titan",
"full_name": "darkmatter/titan",
"private": true,
"owner": {
"name": "darkmatter",
"email": "hello@dm.sh",
"login": "darkmatter",
"id": 17834193,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjE3ODM0MTkz",
"avatar_url": "https://avatars.githubusercontent.com/u/17834193?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/darkmatter",
"html_url": "https://github.com/darkmatter",
"followers_url": "https://api.github.com/users/darkmatter/followers",
"following_url": "https://api.github.com/users/darkmatter/following{/other_user}",
"gists_url": "https://api.github.com/users/darkmatter/gists{/gist_id}",
"starred_url": "https://api.github.com/users/darkmatter/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/darkmatter/subscriptions",
"organizations_url": "https://api.github.com/users/darkmatter/orgs",
"repos_url": "https://api.github.com/users/darkmatter/repos",
"events_url": "https://api.github.com/users/darkmatter/events{/privacy}",
"received_events_url": "https://api.github.com/users/darkmatter/received_events",
"type": "Organization",
"user_view_type": "public",
"site_admin": false
},
"html_url": "https://github.com/darkmatter/titan",
"description": null,
"fork": false,
"url": "https://api.github.com/repos/darkmatter/titan",
"forks_url": "https://api.github.com/repos/darkmatter/titan/forks",
"keys_url": "https://api.github.com/repos/darkmatter/titan/keys{/key_id}",
"collaborators_url": "https://api.github.com/repos/darkmatter/titan/collaborators{/collaborator}",
"teams_url": "https://api.github.com/repos/darkmatter/titan/teams",
"hooks_url": "https://api.github.com/repos/darkmatter/titan/hooks",
"issue_events_url": "https://api.github.com/repos/darkmatter/titan/issues/events{/number}",
"events_url": "https://api.github.com/repos/darkmatter/titan/events",
"assignees_url": "https://api.github.com/repos/darkmatter/titan/assignees{/user}",
"branches_url": "https://api.github.com/repos/darkmatter/titan/branches{/branch}",
"tags_url": "https://api.github.com/repos/darkmatter/titan/tags",
"blobs_url": "https://api.github.com/repos/darkmatter/titan/git/blobs{/sha}",
"git_tags_url": "https://api.github.com/repos/darkmatter/titan/git/tags{/sha}",
"git_refs_url": "https://api.github.com/repos/darkmatter/titan/git/refs{/sha}",
"trees_url": "https://api.github.com/repos/darkmatter/titan/git/trees{/sha}",
"statuses_url": "https://api.github.com/repos/darkmatter/titan/statuses/{sha}",
"languages_url": "https://api.github.com/repos/darkmatter/titan/languages",
"stargazers_url": "https://api.github.com/repos/darkmatter/titan/stargazers",
"contributors_url": "https://api.github.com/repos/darkmatter/titan/contributors",
"subscribers_url": "https://api.github.com/repos/darkmatter/titan/subscribers",
"subscription_url": "https://api.github.com/repos/darkmatter/titan/subscription",
"commits_url": "https://api.github.com/repos/darkmatter/titan/commits{/sha}",
"git_commits_url": "https://api.github.com/repos/darkmatter/titan/git/commits{/sha}",
"comments_url": "https://api.github.com/repos/darkmatter/titan/comments{/number}",
"issue_comment_url": "https://api.github.com/repos/darkmatter/titan/issues/comments{/number}",
"contents_url": "https://api.github.com/repos/darkmatter/titan/contents/{+path}",
"compare_url": "https://api.github.com/repos/darkmatter/titan/compare/{base}...{head}",
"merges_url": "https://api.github.com/repos/darkmatter/titan/merges",
"archive_url": "https://api.github.com/repos/darkmatter/titan/{archive_format}{/ref}",
"downloads_url": "https://api.github.com/repos/darkmatter/titan/downloads",
"issues_url": "https://api.github.com/repos/darkmatter/titan/issues{/number}",
"pulls_url": "https://api.github.com/repos/darkmatter/titan/pulls{/number}",
"milestones_url": "https://api.github.com/repos/darkmatter/titan/milestones{/number}",
"notifications_url": "https://api.github.com/repos/darkmatter/titan/notifications{?since,all,participating}",
"labels_url": "https://api.github.com/repos/darkmatter/titan/labels{/name}",
"releases_url": "https://api.github.com/repos/darkmatter/titan/releases{/id}",
"deployments_url": "https://api.github.com/repos/darkmatter/titan/deployments",
"created_at": 1769601223,
"updated_at": "2026-05-12T22:09:35Z",
"pushed_at": 1780215897,
"git_url": "git://github.com/darkmatter/titan.git",
"ssh_url": "git@github.com:darkmatter/titan.git",
"clone_url": "https://github.com/darkmatter/titan.git",
"svn_url": "https://github.com/darkmatter/titan",
"homepage": "https://switchblade.app",
"size": 45197,
"stargazers_count": 0,
"watchers_count": 0,
"language": "TypeScript",
"has_issues": true,
"has_projects": true,
"has_downloads": true,
"has_wiki": true,
"has_pages": false,
"has_discussions": false,
"forks_count": 0,
"mirror_url": null,
"archived": false,
"disabled": false,
"open_issues_count": 46,
"license": null,
"allow_forking": false,
"is_template": false,
"web_commit_signoff_required": false,
"has_pull_requests": true,
"pull_request_creation_policy": "all",
"topics": [],
"visibility": "internal",
"forks": 0,
"open_issues": 46,
"watchers": 0,
"default_branch": "main",
"stargazers": 0,
"master_branch": "main",
"organization": "darkmatter",
"custom_properties": {}
},
"pusher": {
"name": "czxtm",
"email": "1325802+czxtm@users.noreply.github.com"
},
"forced": false,
"organization": {
"login": "darkmatter",
"id": 17834193,
"node_id": "MDEyOk9yZ2FuaXphdGlvbjE3ODM0MTkz",
"url": "https://api.github.com/orgs/darkmatter",
"repos_url": "https://api.github.com/orgs/darkmatter/repos",
"events_url": "https://api.github.com/orgs/darkmatter/events",
"hooks_url": "https://api.github.com/orgs/darkmatter/hooks",
"issues_url": "https://api.github.com/orgs/darkmatter/issues",
"members_url": "https://api.github.com/orgs/darkmatter/members{/member}",
"public_members_url": "https://api.github.com/orgs/darkmatter/public_members{/member}",
"avatar_url": "https://avatars.githubusercontent.com/u/17834193?v=4",
"description": ""
},
"enterprise": {
"id": 469843,
"slug": "darkmatter",
"name": "darkmatter",
"node_id": "E_kgDOAAcrUw",
"avatar_url": "https://avatars.githubusercontent.com/b/469843?v=4",
"description": "",
"website_url": "darkmatter.io",
"html_url": "https://github.com/enterprises/darkmatter",
"created_at": "2025-09-07T16:01:00Z",
"updated_at": "2026-05-09T15:34:55Z"
},
"sender": {
"login": "czxtm",
"id": 1325802,
"node_id": "MDQ6VXNlcjEzMjU4MDI=",
"avatar_url": "https://avatars.githubusercontent.com/u/1325802?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/czxtm",
"html_url": "https://github.com/czxtm",
"followers_url": "https://api.github.com/users/czxtm/followers",
"following_url": "https://api.github.com/users/czxtm/following{/other_user}",
"gists_url": "https://api.github.com/users/czxtm/gists{/gist_id}",
"starred_url": "https://api.github.com/users/czxtm/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/czxtm/subscriptions",
"organizations_url": "https://api.github.com/users/czxtm/orgs",
"repos_url": "https://api.github.com/users/czxtm/repos",
"events_url": "https://api.github.com/users/czxtm/events{/privacy}",
"received_events_url": "https://api.github.com/users/czxtm/received_events",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"installation": {
"id": 131074261,
"node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uMTMxMDc0MjYx"
},
"created": false,
"deleted": false,
"base_ref": null,
"compare": "https://github.com/darkmatter/titan/compare/32bcf87302e4...1bb691c3d749",
"commits": [
{
"id": "87462a4f8772acdabb107e77a323adea7bcc4bcb",
"tree_id": "e5f4f8442208859115e97cc5ce2ca4d9a6aaa7a1",
"distinct": false,
"message": "Deploy switchblade on Fly",
"timestamp": "2026-04-23T18:17:04-07:00",
"url": "https://github.com/darkmatter/titan/commit/87462a4f8772acdabb107e77a323adea7bcc4bcb",
"author": {
"name": "Farhan Khalaf",
"email": "249513614+fkb032@users.noreply.github.com",
"date": "2026-04-23T18:17:04-07:00",
"username": "fkb032"
},
"committer": {
"name": "Farhan Khalaf",
"email": "249513614+fkb032@users.noreply.github.com",
"date": "2026-04-23T18:17:04-07:00",
"username": "fkb032"
},
"added": [
".dockerignore",
"Dockerfile.fly",
"fly.toml"
],
"removed": [],
"modified": [
".beads/issues.jsonl",
"apps/server/src/index.ts",
"apps/web/vite.config.ts"
]
},
{
"id": "23f9e3024ffd8a6e78bb4540660facaa883c06a2",
"tree_id": "219fcd6ac3b9a902221be5f0a1b0b77175ab510c",
"distinct": false,
"message": "Fix Fly SPA fallback routing",
"timestamp": "2026-04-23T19:14:30-07:00",
"url": "https://github.com/darkmatter/titan/commit/23f9e3024ffd8a6e78bb4540660facaa883c06a2",
"author": {
"name": "Farhan Khalaf",
"email": "249513614+fkb032@users.noreply.github.com",
"date": "2026-04-23T19:14:30-07:00",
"username": "fkb032"
},
"committer": {
"name": "Farhan Khalaf",
"email": "249513614+fkb032@users.noreply.github.com",
"date": "2026-04-23T19:14:30-07:00",
"username": "fkb032"
},
"added": [
"apps/server/src/spa-fallback.test.ts",
"apps/server/src/spa-fallback.ts"
],
"removed": [],
"modified": [
".beads/issues.jsonl",
"apps/server/src/cors.test.ts",
"apps/server/src/cors.ts",
"apps/server/src/index.ts",
"fly.toml"
]
},
{
"id": "ba26c5b9da5398a4be8c653913e38b856fc77592",
"tree_id": "35a4699006b392629640ac6048285a40742101c8",
"distinct": false,
"message": "Protect Fly web app with basic auth",
"timestamp": "2026-04-23T19:32:15-07:00",
"url": "https://github.com/darkmatter/titan/commit/ba26c5b9da5398a4be8c653913e38b856fc77592",
"author": {
"name": "Farhan Khalaf",
"email": "249513614+fkb032@users.noreply.github.com",
"date": "2026-04-23T19:32:15-07:00",
"username": "fkb032"
},
"committer": {
"name": "Farhan Khalaf",
"email": "249513614+fkb032@users.noreply.github.com",
"date": "2026-04-23T19:32:15-07:00",
"username": "fkb032"
},
"added": [
"apps/server/src/basic-auth.test.ts",
"apps/server/src/basic-auth.ts"
],
"removed": [],
"modified": [
"apps/server/src/index.ts",
"fly.toml"
]
},
{
"id": "6dc9116d8b0379d2baa8ff37c1169c6e970d4504",
"tree_id": "0e37dc1f7afb6a97095c61098e15f14ff03852bf",
"distinct": false,
"message": "Rename Fly app to fkb-titan",
"timestamp": "2026-04-23T20:07:30-07:00",
"url": "https://github.com/darkmatter/titan/commit/6dc9116d8b0379d2baa8ff37c1169c6e970d4504",
"author": {
"name": "Farhan Khalaf",
"email": "249513614+fkb032@users.noreply.github.com",
"date": "2026-04-23T20:07:30-07:00",
"username": "fkb032"
},
"committer": {
"name": "Farhan Khalaf",
"email": "249513614+fkb032@users.noreply.github.com",
"date": "2026-04-23T20:07:30-07:00",
"username": "fkb032"
},
"added": [],
"removed": [],
"modified": [
"apps/server/src/cors.test.ts",
"apps/server/src/cors.ts",
"fly.toml"
]
},
{
"id": "95e372ca8d8ba052eecfaa7b0a07d21a10167f9f",
"tree_id": "f6fc59c894fa03ab7bf9d14275ad5a2dd098ec25",
"distinct": false,
"message": "Add extension fkb-titan QA provenance (#117)\n\n## Summary\n- Adds Fly QA extension host permissions and documented prod/Fly QA build variants.\n- Surfaces fee/rolling/snapshot/DB provenance across popup, inline panel, sidebar, compare, and pool detail surfaces.\n- Shares extension API fetch behavior through a no-auth helper and adds coverage for URL/error/auth invariants.\n- Adds extension CI build gates for prod and Fly QA builds.\n- Sanitizes degraded DB messages and avoids pinning degraded DB state in the in-memory pool cache.\n\n## Stack\n- Stacked on #116 (`fkb/titan-fly-deploy`). Retarget to `main` after #116 merges, or merge #116 first.\n\n## Verification\n- `bun run --cwd apps/extension test` passed (128 tests)\n- `bun run --cwd apps/extension compile` passed\n- `bun run --cwd apps/extension build:prod` passed\n- `bun run --cwd apps/extension build:qa:fly` passed\n- `bun run --cwd apps/server test` passed (81 tests)\n- `bun run --cwd apps/server build` passed\n- Targeted cleanup: `bun run --cwd apps/extension test inline-panel.test.ts provenance.test.ts background-fetch.test.ts` passed (19 tests)\n- QA bundle scan found no `Authorization`, `Basic`, or `dark:matter` strings in `.output/chrome-mv3`\n- Manifest includes `https://fkb-titan.fly.dev/*`\n- Fly QA deployed and verified: `https://fkb-titan.fly.dev/pool-intelligence/pool?...` returns `meta.dbStatus` / `meta.dbMessage`\n- Production deployed and verified: `https://api.iridium.sh/health` returns `OK`; the Base USDC/WETH pool response includes `meta.dbStatus=\"available\"`, `meta.dbMessage=null`, and the new meta keys\n- Uniswap create mock extension QA passed for ready Ethereum, unsupported-chain, and incomplete-url states\n- Live Revert smoke passed for sidebar/APR rendering on Revert top positions and discover routes\n\n## Known follow-up\n- `titan-33f`: fix the durable switchblade deploy build-working-directory mismatch. Local production deploy succeeded by using the same registry/SOPS/MicroVM target with build working directory `/opt/switchblade`; the current combined Alchemy path would fail after Cloudflare auth because the registry working directory is `/opt/switchblade/apps/server` while build steps include `cd apps/server`.\n- `bun run --cwd apps/server check-types` still fails on existing repo-wide strictness debt unrelated to this branch.",
"timestamp": "2026-05-31T01:15:22-07:00",
"url": "https://github.com/darkmatter/titan/commit/95e372ca8d8ba052eecfaa7b0a07d21a10167f9f",
"author": {
"name": "Farhan",
"email": "249513614+fkb032@users.noreply.github.com",
"date": "2026-05-31T02:15:22-06:00",
"username": "fkb032"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-05-31T01:15:22-07:00",
"username": "web-flow"
},
"added": [
"apps/extension/lib/background-fetch.test.ts",
"apps/extension/lib/background-fetch.ts",
"apps/extension/lib/provenance.test.ts",
"apps/extension/lib/provenance.ts"
],
"removed": [],
"modified": [
".github/workflows/ci.yml",
"apps/extension/README.md",
"apps/extension/entrypoints/background.ts",
"apps/extension/entrypoints/popup/App.tsx",
"apps/extension/lib/api.ts",
"apps/extension/lib/compare-panel.ts",
"apps/extension/lib/inline-panel.test.ts",
"apps/extension/lib/inline-panel.ts",
"apps/extension/lib/pool-detail-overlay.ts",
"apps/extension/lib/sidebar.ts",
"apps/extension/package.json",
"apps/extension/wxt.config.ts",
"apps/server/src/routes/pool-intelligence/index.ts"
]
},
{
"id": "8ce85e12a7b0293c7a6438145b442d8c299e78c2",
"tree_id": "8d0786661eaad97c770905a86db4084e87507f33",
"distinct": false,
"message": "Merge main into titan Fly deploy\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>",
"timestamp": "2026-05-31T08:24:06Z",
"url": "https://github.com/darkmatter/titan/commit/8ce85e12a7b0293c7a6438145b442d8c299e78c2",
"author": {
"name": "Cursor Agent",
"email": "cursoragent@cursor.com",
"date": "2026-05-31T08:24:06Z",
"username": "cursoragent"
},
"committer": {
"name": "Cursor Agent",
"email": "cursoragent@cursor.com",
"date": "2026-05-31T08:24:06Z",
"username": "cursoragent"
},
"added": [
".github/workflows/extension-apr-monitor-deploy.yml",
".github/workflows/extension-apr-monitor.yml",
".github/workflows/fly-deploy.yml",
"Justfile",
"apps/web/scripts/extension-apr-monitor-deploy-guard.ts",
"apps/web/src/workers/extension-apr-monitor-deploy-guard.test.ts",
"apps/web/src/workers/extension-apr-monitor-deploy-workflow.test.ts",
"apps/web/src/workers/extension-apr-monitor-scheduler-workflow.test.ts",
"apps/web/src/workers/extension-apr-monitor.test.ts",
"apps/web/workers/alerts.ts",
"apps/web/workers/d1-pg-adapter.ts",
"apps/web/workers/extension-apr-monitor.ts",
"apps/web/wrangler.alerts.toml",
"apps/web/wrangler.extension-apr-monitor.toml",
"docs/dune/extension-apr-validation-pricing-protocol-preflight-v1.sql",
"docs/dune/extension-apr-validation-prospective-discovery-v1.sql",
"docs/dune/extension-apr-validation-q1-operated-pool-universe-v1.sql",
"docs/dune/extension-apr-validation-uniswap-canary-candidates-v1.sql",
"docs/dune/extension-apr-validation-uniswap-daily-outcomes-v1.sql",
"docs/dune/extension-apr-validation-uniswap-daily-outcomes-v2.sql",
"docs/extension-validation/active-vs-naive-apr-validation-plan.md",
"docs/extension-validation/artifacts/extension-apr-monitor-2026-05-08-dual-cache-plan.json",
"docs/extension-validation/artifacts/extension-apr-monitor-2026-05-08-dual-cache-sla-cache-plan.json",
"docs/extension-validation/artifacts/extension-apr-monitor-2026-05-08-dual-cache-sla-cache-snapshot.json",
"docs/extension-validation/artifacts/extension-apr-monitor-2026-05-08-dual-cache-sla-cache-snapshot.md",
"docs/extension-validation/artifacts/extension-apr-monitor-2026-05-08-dual-cache-sla-fresh-plan.json",
"docs/extension-validation/artifacts/extension-apr-monitor-2026-05-08-dual-cache-sla-fresh-snapshot.json",
"docs/extension-validation/artifacts/extension-apr-monitor-2026-05-08-dual-cache-sla-fresh-snapshot.md",
"docs/extension-validation/artifacts/extension-apr-monitor-2026-05-08-dual-cache-snapshot.json",
"docs/extension-validation/artifacts/extension-apr-monitor-2026-05-08-dual-cache-snapshot.md",
"docs/extension-validation/artifacts/extension-apr-monitor-2026-05-08-dual-fresh-plan.json",
"docs/extension-validation/artifacts/extension-apr-monitor-2026-05-08-dual-fresh-snapshot.json",
"docs/extension-validation/artifacts/extension-apr-monitor-2026-05-08-dual-fresh-snapshot.md",
"docs/extension-validation/artifacts/extension-apr-monitor-plan-day1-live-calibration3-fresh.json",
"docs/extension-validation/artifacts/extension-apr-monitor-plan-day1-live-calibration3.json",
"docs/extension-validation/artifacts/extension-apr-monitor-plan-day1-live-fly-direct.json",
"docs/extension-validation/artifacts/extension-apr-monitor-plan-day1-live-uniswap8-cache.json",
"docs/extension-validation/artifacts/extension-apr-monitor-plan-day1-live-uniswap8-fresh.json",
"docs/extension-validation/artifacts/extension-apr-monitor-plan-day1-live.json",
"docs/extension-validation/artifacts/extension-apr-monitor-plan-seed.json",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-day1-live-calibration3-fresh.json",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-day1-live-calibration3-fresh.md",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-day1-live-calibration3.json",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-day1-live-calibration3.md",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-day1-live-fly-direct.json",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-day1-live-fly-direct.md",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-day1-live-uniswap8-cache.json",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-day1-live-uniswap8-cache.md",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-day1-live-uniswap8-fresh.json",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-day1-live-uniswap8-fresh.md",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-day1-live.json",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-day1-live.md",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-seed.json",
"docs/extension-validation/artifacts/extension-apr-monitor-snapshot-seed.md",
"docs/extension-validation/artifacts/extension-apr-operator-decision-capture-template.json",
"docs/extension-validation/artifacts/extension-apr-operator-decision-capture-template.md",
"docs/extension-validation/artifacts/pricing-protocol-preflight-dune-result.json",
"docs/extension-validation/artifacts/pricing-protocol-preflight-report.json",
"docs/extension-validation/artifacts/pricing-protocol-preflight-report.md",
"docs/extension-validation/artifacts/pricing-protocol-preflight-rows.json",
"docs/extension-validation/artifacts/prospective-discovery-cohort-v1-dune-result.json",
"docs/extension-validation/artifacts/prospective-discovery-cohort-v1-report.json",
"docs/extension-validation/artifacts/prospective-discovery-cohort-v1-report.md",
"docs/extension-validation/artifacts/q1-operated-pool-universe-reconciler-dune-result.json",
"docs/extension-validation/artifacts/q1-operated-pool-universe-reconciler-report.json",
"docs/extension-validation/artifacts/q1-operated-pool-universe-reconciler-report.md",
"docs/extension-validation/artifacts/q1-operated-pool-universe-reconciler-rows.json",
"docs/extension-validation/artifacts/uniswap-active-vs-naive-statistics-one-week.json",
"docs/extension-validation/artifacts/uniswap-active-vs-naive-statistics-one-week.md",
"docs/extension-validation/artifacts/uniswap-canary-candidates-dune-result.json",
"docs/extension-validation/artifacts/uniswap-canary-candidates-rows.json",
"docs/extension-validation/artifacts/uniswap-canary-replay-limit1.json",
"docs/extension-validation/artifacts/uniswap-canary-replay-limit1.md",
"docs/extension-validation/artifacts/uniswap-canary-replay.json",
"docs/extension-validation/artifacts/uniswap-canary-replay.md",
"docs/extension-validation/artifacts/uniswap-canary-selected-candidates.json",
"docs/extension-validation/artifacts/uniswap-canary-selected-candidates.md",
"docs/extension-validation/artifacts/uniswap-daily-outcomes-probe-dune-result.json",
"docs/extension-validation/artifacts/uniswap-daily-outcomes-probe.md",
"docs/extension-validation/artifacts/uniswap-daily-outcomes-v2-one-day-probe-dune-result.json",
"docs/extension-validation/artifacts/uniswap-daily-outcomes-v2-probe.md",
"docs/extension-validation/artifacts/uniswap-liquidity-enrichment-limit-8.json",
"docs/extension-validation/artifacts/uniswap-liquidity-enrichment-limit-8.md",
"docs/extension-validation/artifacts/uniswap-liquidity-enrichment-one-week.json",
"docs/extension-validation/artifacts/uniswap-liquidity-enrichment-one-week.md",
"docs/extension-validation/artifacts/uniswap-rpc-daily-one-day-canary.json",
"docs/extension-validation/artifacts/uniswap-rpc-daily-one-day-canary.md",
"docs/extension-validation/artifacts/uniswap-rpc-daily-one-week-canary.json",
"docs/extension-validation/artifacts/uniswap-rpc-daily-one-week-canary.md",
"docs/extension-validation/monitoring/dashboard.html",
"docs/iridium-final.png",
"docs/iridium-polished.png",
"docs/iridium-public-cache.png",
"docs/iridium-rebranded.png",
"docs/iridium-sh-live.png",
"ops/KEY_ROTATION.md",
"ops/secrets/common.sops.yaml",
"ops/secrets/runtime.sops.env",
"packages/cl-intelligence/src/bin/extension-apr-canary-replay.ts",
"packages/cl-intelligence/src/bin/extension-apr-liquidity-run.ts",
"packages/cl-intelligence/src/bin/extension-apr-monitor-automate.test.ts",
"packages/cl-intelligence/src/bin/extension-apr-monitor-automate.ts",
"packages/cl-intelligence/src/bin/extension-apr-monitor-outcome-readiness-run.ts",
"packages/cl-intelligence/src/bin/extension-apr-monitor-post.test.ts",
"packages/cl-intelligence/src/bin/extension-apr-monitor-post.ts",
"packages/cl-intelligence/src/bin/extension-apr-monitor-run.ts",
"packages/cl-intelligence/src/bin/extension-apr-operator-capture-template-run.ts",
"packages/cl-intelligence/src/bin/extension-apr-rpc-daily-run.ts",
"packages/cl-intelligence/src/bin/extension-apr-statistics-run.ts",
"packages/cl-intelligence/src/extension-apr-monitor-outcome-readiness.test.ts",
"packages/cl-intelligence/src/extension-apr-monitor-outcome-readiness.ts",
"packages/cl-intelligence/src/extension-apr-monitor-worker-poster.test.ts",
"packages/cl-intelligence/src/extension-apr-monitor-worker-poster.ts",
"packages/cl-intelligence/src/extension-apr-monitor.ts",
"packages/cl-intelligence/src/extension-apr-validation-canary.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-canary.ts",
"packages/cl-intelligence/src/extension-apr-validation-daily.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-daily.ts",
"packages/cl-intelligence/src/extension-apr-validation-liquidity.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-liquidity.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor-api-parity.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor-api-parity.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor-d1-store.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor-d1-store.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor-dashboard.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor-dashboard.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor-live.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor-live.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor-snapshot-id.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor-store.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor-store.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-monitor.ts",
"packages/cl-intelligence/src/extension-apr-validation-operator-capture.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-operator-capture.ts",
"packages/cl-intelligence/src/extension-apr-validation-preflight.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-preflight.ts",
"packages/cl-intelligence/src/extension-apr-validation-rpc-daily-live.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-rpc-daily-live.ts",
"packages/cl-intelligence/src/extension-apr-validation-rpc-daily-runner.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-rpc-daily-runner.ts",
"packages/cl-intelligence/src/extension-apr-validation-rpc-daily.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-rpc-daily.ts",
"packages/cl-intelligence/src/extension-apr-validation-statistics.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-statistics.ts",
"packages/cl-intelligence/src/extension-apr-validation-universe.test.ts",
"packages/cl-intelligence/src/extension-apr-validation-universe.ts",
"packages/db/src/migrations/0000_outstanding_james_howlett.sql",
"packages/db/src/migrations/meta/0000_snapshot.json",
"packages/db/src/migrations/meta/_journal.json",
"packages/infra/services.json",
"packages/infra/tsconfig.check.json"
],
"removed": [
".beads/issues.jsonl",
"iridium-final.png",
"iridium-polished.png",
"iridium-public-cache.png",
"iridium-rebranded.png",
"iridium-sh-live.png",
"openspec/changes/titan-feature-parity/.openspec.yaml",
"openspec/changes/titan-feature-parity/design.md",
"openspec/changes/titan-feature-parity/proposal.md",
"openspec/changes/titan-feature-parity/specs/extension-core/spec.md",
"openspec/changes/titan-feature-parity/specs/tauri-native/spec.md",
"openspec/changes/titan-feature-parity/specs/tui-core/spec.md",
"openspec/changes/titan-feature-parity/specs/wallet-connect/spec.md",
"openspec/changes/titan-feature-parity/specs/wallet-management/spec.md",
"openspec/changes/titan-feature-parity/tasks.md",
"openspec/config.yaml",
"packages/infra/src/index.ts",
"packages/infra/src/resources/ssh-bun-deploy.ts"
],
"modified": [
".dockerignore",
".github/workflows/ci.yml",
".gitignore",
"README.md",
"apps/extension/README.md",
"apps/extension/lib/api.ts",
"apps/web/.gitignore",
"apps/web/package.json",
"apps/web/vercel.json",
"flake.nix",
"fly.toml",
"package.json",
"packages/cl-intelligence/package.json",
"packages/cl-intelligence/src/index.ts",
"packages/infra/README.md",
"packages/infra/alchemy.run.ts",
"packages/infra/bun.lock",
"packages/infra/package.json",
"packages/infra/tsconfig.json"
]
},
{
"id": "29da12575a6be83a8def335c70901379429fcd2e",
"tree_id": "50db7ad27071724931ca3c6d36aa2b76f9d289fe",
"distinct": false,
"message": "Fail closed on incomplete Basic Auth config\n\nCo-authored-by: cooper <czxtm@users.noreply.github.com>",
"timestamp": "2026-05-31T08:24:18Z",
"url": "https://github.com/darkmatter/titan/commit/29da12575a6be83a8def335c70901379429fcd2e",
"author": {
"name": "Cursor Agent",
"email": "cursoragent@cursor.com",
"date": "2026-05-31T08:24:18Z",
"username": "cursoragent"
},
"committer": {
"name": "Cursor Agent",
"email": "cursoragent@cursor.com",
"date": "2026-05-31T08:24:18Z",
"username": "cursoragent"
},
"added": [],
"removed": [],
"modified": [
"apps/server/src/basic-auth.test.ts",
"apps/server/src/basic-auth.ts"
]
},
{
"id": "1bb691c3d74957e911d0bd536c7268bc61686266",
"tree_id": "50db7ad27071724931ca3c6d36aa2b76f9d289fe",
"distinct": true,
"message": "Deploy switchblade on Fly (#116)\n\n## Summary\n- add Fly config and Dockerfile for the `fkb-titan` Fly app\n- serve the web SPA from the Hono server when `TITAN_SERVE_WEB=1`\n- protect the Fly-hosted web surface with HTTP Basic Auth while leaving health/API/RPC routes reachable\n- restrict SPA fallback to real HTML navigation requests so authenticated missing assets and invalid server paths return 404 instead of `index.html`\n- keep `/api/pool-intelligence/*` on the Fly server and proxy legacy Vercel `/api/*` routes to `https://switchblade.app`\n- add a Fly `/health` machine check and allow `fkb-titan.fly.dev` in production CORS\n- add Beads follow-ups for the Neon compute quota error and pre-cutover proxy hardening\n\n## Verification\n- Created Fly app: `fkb-titan` in the `darkmatter` org\n- Deployed Fly release: `registry.fly.io/fkb-titan:deployment-01KPYQ2E66HGPYHT1NNBQP4TTB`\n- Scaled `fkb-titan` to one running machine, matching the previous validation footprint\n- `curl -H 'Accept: text/html' https://fkb-titan.fly.dev/` -> 401 with `WWW-Authenticate: Basic realm=\"Titan\", charset=\"UTF-8\"`\n- `curl -u dark:<password> -H 'Accept: text/html' https://fkb-titan.fly.dev/` -> 200 SPA HTML\n- `curl https://fkb-titan.fly.dev/health` -> 200 OK\n- `curl https://fkb-titan.fly.dev/pool-intelligence/pool?chainId=8453` -> expected 400 missing poolAddress from Fly API\n- `curl -H 'Accept: text/html' https://fkb-titan.fly.dev/rpc/positions` -> 404\n- `fly checks list -a fkb-titan` -> `servicecheck-00-http-3000` passing\n- `fly secrets list -a fkb-titan` -> required runtime secrets deployed; `BETTER_AUTH_URL` and `CORS_ORIGIN` point at `https://fkb-titan.fly.dev`\n- `bun run --cwd apps/server test` -> 4 files / 81 tests passing\n- Docker/Fly build ran `packages/shared`, `packages/cl-intelligence`, `apps/server`, and `apps/web` builds during `fly deploy`\n- `fly config validate -a fkb-titan`\n\n## Known follow-ups\n- Fly logs have shown Neon/Postgres compute quota errors from the cache worker. Tracked as `titan-wxb`.\n- Legacy `/api/*` proxy is temporary and should be hardened before DNS cutover or real traffic. Tracked as `titan-s4n`.\n- `apps/server check-types` still fails on existing repo type debt (`pg` declarations, pool-intelligence test `unknown` bodies, and strict-indexing issues already represented by `titan-16w`).\n- The old `switchblade` Fly app is still deployed and was not destroyed; retire it separately after `fkb-titan` is accepted.\n\n## Claude review\nInitial deployment plan was reviewed through `claude-review` before execution per Farhan request. Follow-up Claude review on the completed work flagged the SPA fallback as blocking; this branch now fixes that live on Fly and keeps the remaining proxy/DB concerns tracked as explicit follow-ups.",
"timestamp": "2026-05-31T01:24:57-07:00",
"url": "https://github.com/darkmatter/titan/commit/1bb691c3d74957e911d0bd536c7268bc61686266",
"author": {
"name": "cooper",
"email": "1325802+czxtm@users.noreply.github.com",
"date": "2026-05-31T01:24:57-07:00",
"username": "czxtm"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-05-31T01:24:57-07:00",
"username": "web-flow"
},
"added": [
"Dockerfile.fly",
"apps/extension/lib/background-fetch.test.ts",
"apps/extension/lib/background-fetch.ts",
"apps/extension/lib/provenance.test.ts",
"apps/extension/lib/provenance.ts",
"apps/server/src/basic-auth.test.ts",
"apps/server/src/basic-auth.ts",
"apps/server/src/spa-fallback.test.ts",
"apps/server/src/spa-fallback.ts"
],
"removed": [],
"modified": [
".dockerignore",
".github/workflows/ci.yml",
".gitignore",
"apps/extension/README.md",
"apps/extension/entrypoints/background.ts",
"apps/extension/entrypoints/popup/App.tsx",
"apps/extension/lib/api.ts",
"apps/extension/lib/compare-panel.ts",
"apps/extension/lib/inline-panel.test.ts",
"apps/extension/lib/inline-panel.ts",
"apps/extension/lib/pool-detail-overlay.ts",
"apps/extension/lib/sidebar.ts",
"apps/extension/package.json",
"apps/extension/wxt.config.ts",
"apps/server/src/cors.test.ts",
"apps/server/src/cors.ts",
"apps/server/src/index.ts",
"apps/server/src/routes/pool-intelligence/index.ts",
"apps/web/vite.config.ts",
"docs/extension-validation/active-vs-naive-apr-validation-plan.md",
"docs/extension-validation/artifacts/uniswap-active-vs-naive-statistics-one-week.md",
"docs/extension-validation/artifacts/uniswap-liquidity-enrichment-limit-8.md",
"docs/extension-validation/artifacts/uniswap-liquidity-enrichment-one-week.md",
"fly.toml"
]
}
],
"head_commit": {
"id": "1bb691c3d74957e911d0bd536c7268bc61686266",
"tree_id": "50db7ad27071724931ca3c6d36aa2b76f9d289fe",
"distinct": true,
"message": "Deploy switchblade on Fly (#116)\n\n## Summary\n- add Fly config and Dockerfile for the `fkb-titan` Fly app\n- serve the web SPA from the Hono server when `TITAN_SERVE_WEB=1`\n- protect the Fly-hosted web surface with HTTP Basic Auth while leaving health/API/RPC routes reachable\n- restrict SPA fallback to real HTML navigation requests so authenticated missing assets and invalid server paths return 404 instead of `index.html`\n- keep `/api/pool-intelligence/*` on the Fly server and proxy legacy Vercel `/api/*` routes to `https://switchblade.app`\n- add a Fly `/health` machine check and allow `fkb-titan.fly.dev` in production CORS\n- add Beads follow-ups for the Neon compute quota error and pre-cutover proxy hardening\n\n## Verification\n- Created Fly app: `fkb-titan` in the `darkmatter` org\n- Deployed Fly release: `registry.fly.io/fkb-titan:deployment-01KPYQ2E66HGPYHT1NNBQP4TTB`\n- Scaled `fkb-titan` to one running machine, matching the previous validation footprint\n- `curl -H 'Accept: text/html' https://fkb-titan.fly.dev/` -> 401 with `WWW-Authenticate: Basic realm=\"Titan\", charset=\"UTF-8\"`\n- `curl -u dark:<password> -H 'Accept: text/html' https://fkb-titan.fly.dev/` -> 200 SPA HTML\n- `curl https://fkb-titan.fly.dev/health` -> 200 OK\n- `curl https://fkb-titan.fly.dev/pool-intelligence/pool?chainId=8453` -> expected 400 missing poolAddress from Fly API\n- `curl -H 'Accept: text/html' https://fkb-titan.fly.dev/rpc/positions` -> 404\n- `fly checks list -a fkb-titan` -> `servicecheck-00-http-3000` passing\n- `fly secrets list -a fkb-titan` -> required runtime secrets deployed; `BETTER_AUTH_URL` and `CORS_ORIGIN` point at `https://fkb-titan.fly.dev`\n- `bun run --cwd apps/server test` -> 4 files / 81 tests passing\n- Docker/Fly build ran `packages/shared`, `packages/cl-intelligence`, `apps/server`, and `apps/web` builds during `fly deploy`\n- `fly config validate -a fkb-titan`\n\n## Known follow-ups\n- Fly logs have shown Neon/Postgres compute quota errors from the cache worker. Tracked as `titan-wxb`.\n- Legacy `/api/*` proxy is temporary and should be hardened before DNS cutover or real traffic. Tracked as `titan-s4n`.\n- `apps/server check-types` still fails on existing repo type debt (`pg` declarations, pool-intelligence test `unknown` bodies, and strict-indexing issues already represented by `titan-16w`).\n- The old `switchblade` Fly app is still deployed and was not destroyed; retire it separately after `fkb-titan` is accepted.\n\n## Claude review\nInitial deployment plan was reviewed through `claude-review` before execution per Farhan request. Follow-up Claude review on the completed work flagged the SPA fallback as blocking; this branch now fixes that live on Fly and keeps the remaining proxy/DB concerns tracked as explicit follow-ups.",
"timestamp": "2026-05-31T01:24:57-07:00",
"url": "https://github.com/darkmatter/titan/commit/1bb691c3d74957e911d0bd536c7268bc61686266",
"author": {
"name": "cooper",
"email": "1325802+czxtm@users.noreply.github.com",
"date": "2026-05-31T01:24:57-07:00",
"username": "czxtm"
},
"committer": {
"name": "GitHub",
"email": "noreply@github.com",
"date": "2026-05-31T01:24:57-07:00",
"username": "web-flow"
},
"added": [
"Dockerfile.fly",
"apps/extension/lib/background-fetch.test.ts",
"apps/extension/lib/background-fetch.ts",
"apps/extension/lib/provenance.test.ts",
"apps/extension/lib/provenance.ts",
"apps/server/src/basic-auth.test.ts",
"apps/server/src/basic-auth.ts",
"apps/server/src/spa-fallback.test.ts",
"apps/server/src/spa-fallback.ts"
],
"removed": [],
"modified": [
".dockerignore",
".github/workflows/ci.yml",
".gitignore",
"apps/extension/README.md",
"apps/extension/entrypoints/background.ts",
"apps/extension/entrypoints/popup/App.tsx",
"apps/extension/lib/api.ts",
"apps/extension/lib/compare-panel.ts",
"apps/extension/lib/inline-panel.test.ts",
"apps/extension/lib/inline-panel.ts",
"apps/extension/lib/pool-detail-overlay.ts",
"apps/extension/lib/sidebar.ts",
"apps/extension/package.json",
"apps/extension/wxt.config.ts",
"apps/server/src/cors.test.ts",
"apps/server/src/cors.ts",
"apps/server/src/index.ts",
"apps/server/src/routes/pool-intelligence/index.ts",
"apps/web/vite.config.ts",
"docs/extension-validation/active-vs-naive-apr-validation-plan.md",
"docs/extension-validation/artifacts/uniswap-active-vs-naive-statistics-one-week.md",
"docs/extension-validation/artifacts/uniswap-liquidity-enrichment-limit-8.md",
"docs/extension-validation/artifacts/uniswap-liquidity-enrichment-one-week.md",
"fly.toml"
]
}
}