+27
-19
docs/git-history.json
+27
-19
docs/git-history.json
···
1
1
[
2
2
{
3
+
"hash": "aacbbaa27797781098dacdfd0194c93cd71d7bd2",
4
+
"short_hash": "aacbbaa",
5
+
"author": "Ariel M. Lighty",
6
+
"date": "2025-12-26T21:46:06-05:00",
7
+
"message": "fix: use TIMESTAMPTZ for all timestamp columns\n\nChanged all TIMESTAMP columns to TIMESTAMPTZ (timestamp with timezone) to\nproperly handle timezone-aware timestamps across all tables:\n- oauth_states (created_at, expires_at)\n- oauth_sessions (created_at, expires_at)\n- user_sessions (created_at, expires_at)\n- user_uploads (created_at, last_checked)\n- source_accounts (last_checked, match_found_at, created_at)\n- user_source_follows (created_at)\n- atproto_matches (found_at, last_verified, last_follow_check)\n- user_match_status (notified_at, viewed_at, followed_at, dismissed_at)\n- notification_queue (created_at, sent_at)\n\nThis fixes the 5-hour timezone offset issue where timestamps were stored\nwithout timezone info, causing display errors across different timezones.",
8
+
"files_changed": 1
9
+
},
10
+
{
11
+
"hash": "c5adc15091cc520735b7d5c3d1ef1a9f4ff38a2f",
12
+
"short_hash": "c5adc15",
13
+
"author": "Ariel M. Lighty",
14
+
"date": "2025-12-26T21:28:48-05:00",
15
+
"message": "docs: update decision graph after loading screen fix",
16
+
"files_changed": 2
17
+
},
18
+
{
3
19
"hash": "46626f4a18eaaaaf42368361130bb1ddc7bd9677",
4
20
"short_hash": "46626f4",
5
21
"author": "Ariel M. Lighty",
···
16
32
"files_changed": 4
17
33
},
18
34
{
19
-
"hash": "212660a996d6b0f1db59f9532d2b3968c7113f10",
20
-
"short_hash": "212660a",
35
+
"hash": "0afa0ffafd9b05f12d7d52c50082a54f237e09d8",
36
+
"short_hash": "0afa0ff",
21
37
"author": "Ariel M. Lighty",
22
-
"date": "2025-12-26T20:58:45-05:00",
23
-
"message": "fix: pass final search results to onComplete callback\n\nFixes issue where results were displayed but not saved to database until\npage refresh. Root cause: onComplete callback accessed stale searchResults\nfrom closure instead of updated state.\n\nChanges:\n- useSearch.searchAllUsers: onComplete now receives SearchResult[] param\n- useSearch: uses setSearchResults updater to get current state\n- App.tsx: updated all 3 searchAllUsers calls to use finalResults\n- Removed setTimeout workarounds\n\nResult: Extension and file upload flows now save immediately after search.",
24
-
"files_changed": 4
25
-
},
26
-
{
27
-
"hash": "6ced3f0b015af1c9126559a393996576402cfd03",
28
-
"short_hash": "6ced3f0",
29
-
"author": "Ariel M. Lighty",
30
-
"date": "2025-12-26T14:12:46-05:00",
31
-
"message": "fix extension flow: create user_source_follows, auto-search, time display\n\nBackend (extension-import.ts):\n- Now creates user_source_follows entries linking upload to source accounts\n- Without these, get-upload-details returned empty (queries FROM user_source_follows)\n- Uses bulkCreate return value (Map<username, id>) to create links\n\nFrontend (App.tsx):\n- handleLoadUpload now detects if upload has no matches yet\n- Sets isSearching: true for new uploads\n- Automatically triggers searchAllUsers for new uploads\n- Saves results after search completes\n- Changed platform from hardcoded \"tiktok\" to \"twitter\"\n\nFrontend (HistoryTab.tsx):\n- Fixed time display: removed \"Uploaded\" prefix\n- Now shows \"about 5 hours ago\" instead of \"Uploaded in about 5 hours\"\n- formatRelativeTime with addSuffix already provides complete sentence\n\nResolves:\n- Empty results on page load\n- No automatic searching\n- History navigation not working (will work after search)\n- Grammatically incorrect time display",
32
-
"files_changed": 5
38
+
"date": "2025-12-26T20:20:50-05:00",
39
+
"message": "fix: sourceUser should be object {username, date} not string\n\nWas setting sourceUser to result.sourceUser.username (string)\nShould be result.sourceUser (SourceUser object)\n\nThis caused:\n- useSearch to call batch.map(r => r.sourceUser.username) on strings\n- .username on string returns undefined\n- batch-search-actors received null values\n- ValidationError: expected string, received null\n\nAlso caused localeCompare error when sorting undefined values.",
40
+
"files_changed": 3
33
41
},
34
42
{
35
43
"hash": "6ced3f0b015af1c9126559a393996576402cfd03",
···
104
112
"files_changed": 3
105
113
},
106
114
{
107
-
"hash": "32cdee3aeac7ef986df47e0fff786b5f7471e55b",
108
-
"short_hash": "32cdee3",
115
+
"hash": "ba29fd68872913ba0a587aa7f29f97b3d373a732",
116
+
"short_hash": "ba29fd6",
109
117
"author": "Ariel M. Lighty",
110
118
"date": "2025-12-25T13:22:32-05:00",
111
119
"message": "configure Netlify dev for monorepo with --filter flag\n\nFixed Netlify CLI monorepo detection issue by using --filter flag:\n- Updated root package.json scripts to use 'npx netlify-cli dev --filter @atlast/web'\n- Updated netlify.toml [dev] section to use npm with --prefix for framework command\n- Added monorepo development instructions to CLAUDE.md\n- Documented Windows Git Bash compatibility issue with netlify command\n\nSolution: Use 'npx netlify-cli dev --filter @atlast/web' to bypass monorepo\nproject selection prompt and specify which workspace package to run.\n\nDev server now runs successfully at http://localhost:8888 with all backend\nfunctions loaded.",
112
-
"files_changed": 4
120
+
"files_changed": 5
113
121
},
114
122
{
115
-
"hash": "ba29fd68872913ba0a587aa7f29f97b3d373a732",
116
-
"short_hash": "ba29fd6",
123
+
"hash": "32cdee3aeac7ef986df47e0fff786b5f7471e55b",
124
+
"short_hash": "32cdee3",
117
125
"author": "Ariel M. Lighty",
118
126
"date": "2025-12-25T13:22:32-05:00",
119
127
"message": "configure Netlify dev for monorepo with --filter flag\n\nFixed Netlify CLI monorepo detection issue by using --filter flag:\n- Updated root package.json scripts to use 'npx netlify-cli dev --filter @atlast/web'\n- Updated netlify.toml [dev] section to use npm with --prefix for framework command\n- Added monorepo development instructions to CLAUDE.md\n- Documented Windows Git Bash compatibility issue with netlify command\n\nSolution: Use 'npx netlify-cli dev --filter @atlast/web' to bypass monorepo\nproject selection prompt and specify which workspace package to run.\n\nDev server now runs successfully at http://localhost:8888 with all backend\nfunctions loaded.",
120
-
"files_changed": 5
128
+
"files_changed": 4
121
129
},
122
130
{
123
131
"hash": "c3e7afad396d130791d801a85cbfc9643bcd6309",
+22
docs/graph-data.json
+22
docs/graph-data.json
···
3574
3574
"created_at": "2025-12-26T21:20:42.635515100-05:00",
3575
3575
"updated_at": "2025-12-26T21:20:42.635515100-05:00",
3576
3576
"metadata_json": "{\"branch\":\"master\",\"commit\":\"46626f4\",\"confidence\":95}"
3577
+
},
3578
+
{
3579
+
"id": 326,
3580
+
"change_id": "af76ea64-b0b1-4577-b521-4ec21cc555e1",
3581
+
"node_type": "outcome",
3582
+
"title": "Fixed timezone issue - all timestamp columns now use TIMESTAMPTZ",
3583
+
"description": null,
3584
+
"status": "pending",
3585
+
"created_at": "2025-12-26T21:46:14.340967100-05:00",
3586
+
"updated_at": "2025-12-26T21:46:14.340967100-05:00",
3587
+
"metadata_json": "{\"branch\":\"master\",\"commit\":\"aacbbaa\",\"confidence\":95}"
3577
3588
}
3578
3589
],
3579
3590
"edges": [
···
7052
7063
"weight": 1.0,
7053
7064
"rationale": "User reported results showing 'none' before search completes - needed to keep user on loading screen",
7054
7065
"created_at": "2025-12-26T21:20:53.976836200-05:00"
7066
+
},
7067
+
{
7068
+
"id": 317,
7069
+
"from_node_id": 325,
7070
+
"to_node_id": 326,
7071
+
"from_change_id": "e44f45f8-bac9-4a49-ac68-ac9d7d113226",
7072
+
"to_change_id": "af76ea64-b0b1-4577-b521-4ec21cc555e1",
7073
+
"edge_type": "leads_to",
7074
+
"weight": 1.0,
7075
+
"rationale": "User reported upload times showing 5 hours ahead - timezone offset issue",
7076
+
"created_at": "2025-12-26T21:46:24.801578500-05:00"
7055
7077
}
7056
7078
]
7057
7079
}