+32
-16
docs/git-history.json
+32
-16
docs/git-history.json
···
1
1
[
2
2
{
3
-
"hash": "0afa0ffafd9b05f12d7d52c50082a54f237e09d8",
4
-
"short_hash": "0afa0ff",
3
+
"hash": "46626f4a18eaaaaf42368361130bb1ddc7bd9677",
4
+
"short_hash": "46626f4",
5
5
"author": "Ariel M. Lighty",
6
-
"date": "2025-12-26T20:20:50-05:00",
7
-
"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.",
8
-
"files_changed": 3
6
+
"date": "2025-12-26T21:20:34-05:00",
7
+
"message": "fix: show loading screen during extension upload search\n\nPreviously when loading an upload from extension that hadn't been searched yet,\nthe app would immediately navigate to the results page showing 'none' for all\nmatches, then update them as the search progressed.\n\nNow it behaves like the file upload flow:\n- Shows loading screen during search\n- Navigates to results only after search completes and results are saved\n- If upload already has matches, navigates to results immediately",
8
+
"files_changed": 1
9
+
},
10
+
{
11
+
"hash": "212660a996d6b0f1db59f9532d2b3968c7113f10",
12
+
"short_hash": "212660a",
13
+
"author": "Ariel M. Lighty",
14
+
"date": "2025-12-26T20:58:45-05:00",
15
+
"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.",
16
+
"files_changed": 4
17
+
},
18
+
{
19
+
"hash": "212660a996d6b0f1db59f9532d2b3968c7113f10",
20
+
"short_hash": "212660a",
21
+
"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
9
25
},
10
26
{
11
27
"hash": "6ced3f0b015af1c9126559a393996576402cfd03",
···
16
32
"files_changed": 5
17
33
},
18
34
{
19
-
"hash": "581ed00fec3c0c5f472c6ff92e00bf4ed5b27e9a",
20
-
"short_hash": "581ed00",
35
+
"hash": "6ced3f0b015af1c9126559a393996576402cfd03",
36
+
"short_hash": "6ced3f0",
21
37
"author": "Ariel M. Lighty",
22
-
"date": "2025-12-26T13:47:37-05:00",
23
-
"message": "fix extension import: use bulkCreate and handle uploadId param\n\nBackend fixes:\n- Use SourceAccountRepository.bulkCreate() instead of non-existent upsertSourceAccount()\n- Change redirectUrl from /results?uploadId= to /?uploadId=\n- More efficient bulk insert instead of loop\n\nFrontend fixes:\n- Add useEffect to load results when uploadId param present\n- Calls loadUploadResults(uploadId) automatically on page load\n- Cleans up URL param after loading\n\nResolves:\n- \"sourceAccountRepo.upsertSourceAccount is not a function\" error\n- \"No routes matched location /results?uploadId=...\" routing error",
24
-
"files_changed": 4
38
+
"date": "2025-12-26T14:12:46-05:00",
39
+
"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",
40
+
"files_changed": 5
25
41
},
26
42
{
27
43
"hash": "581ed00fec3c0c5f472c6ff92e00bf4ed5b27e9a",
···
88
104
"files_changed": 3
89
105
},
90
106
{
91
-
"hash": "ba29fd68872913ba0a587aa7f29f97b3d373a732",
92
-
"short_hash": "ba29fd6",
107
+
"hash": "32cdee3aeac7ef986df47e0fff786b5f7471e55b",
108
+
"short_hash": "32cdee3",
93
109
"author": "Ariel M. Lighty",
94
110
"date": "2025-12-25T13:22:32-05:00",
95
111
"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.",
96
-
"files_changed": 5
112
+
"files_changed": 4
97
113
},
98
114
{
99
-
"hash": "32cdee3aeac7ef986df47e0fff786b5f7471e55b",
100
-
"short_hash": "32cdee3",
115
+
"hash": "ba29fd68872913ba0a587aa7f29f97b3d373a732",
116
+
"short_hash": "ba29fd6",
101
117
"author": "Ariel M. Lighty",
102
118
"date": "2025-12-25T13:22:32-05:00",
103
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.",
104
-
"files_changed": 4
120
+
"files_changed": 5
105
121
},
106
122
{
107
123
"hash": "c3e7afad396d130791d801a85cbfc9643bcd6309",
+44
docs/graph-data.json
+44
docs/graph-data.json
···
3552
3552
"created_at": "2025-12-26T20:55:36.922743800-05:00",
3553
3553
"updated_at": "2025-12-26T20:55:36.922743800-05:00",
3554
3554
"metadata_json": "{\"branch\":\"master\",\"confidence\":95}"
3555
+
},
3556
+
{
3557
+
"id": 324,
3558
+
"change_id": "c941c916-0fcb-44d6-9786-dfd53447cebe",
3559
+
"node_type": "outcome",
3560
+
"title": "Committed stale closure fix - results now save immediately after search completes",
3561
+
"description": null,
3562
+
"status": "pending",
3563
+
"created_at": "2025-12-26T20:58:48.266958800-05:00",
3564
+
"updated_at": "2025-12-26T20:58:48.266958800-05:00",
3565
+
"metadata_json": "{\"branch\":\"master\",\"commit\":\"212660a\",\"confidence\":95}"
3566
+
},
3567
+
{
3568
+
"id": 325,
3569
+
"change_id": "e44f45f8-bac9-4a49-ac68-ac9d7d113226",
3570
+
"node_type": "outcome",
3571
+
"title": "Loading screen now shows during extension upload search",
3572
+
"description": null,
3573
+
"status": "pending",
3574
+
"created_at": "2025-12-26T21:20:42.635515100-05:00",
3575
+
"updated_at": "2025-12-26T21:20:42.635515100-05:00",
3576
+
"metadata_json": "{\"branch\":\"master\",\"commit\":\"46626f4\",\"confidence\":95}"
3555
3577
}
3556
3578
],
3557
3579
"edges": [
···
7008
7030
"weight": 1.0,
7009
7031
"rationale": "Implementation complete",
7010
7032
"created_at": "2025-12-26T20:55:40.014892600-05:00"
7033
+
},
7034
+
{
7035
+
"id": 315,
7036
+
"from_node_id": 323,
7037
+
"to_node_id": 324,
7038
+
"from_change_id": "88fc65bc-c2da-4df7-b79e-ba80d93e5b77",
7039
+
"to_change_id": "c941c916-0fcb-44d6-9786-dfd53447cebe",
7040
+
"edge_type": "leads_to",
7041
+
"weight": 1.0,
7042
+
"rationale": "Committed to repository",
7043
+
"created_at": "2025-12-26T20:58:50.561027500-05:00"
7044
+
},
7045
+
{
7046
+
"id": 316,
7047
+
"from_node_id": 324,
7048
+
"to_node_id": 325,
7049
+
"from_change_id": "c941c916-0fcb-44d6-9786-dfd53447cebe",
7050
+
"to_change_id": "e44f45f8-bac9-4a49-ac68-ac9d7d113226",
7051
+
"edge_type": "leads_to",
7052
+
"weight": 1.0,
7053
+
"rationale": "User reported results showing 'none' before search completes - needed to keep user on loading screen",
7054
+
"created_at": "2025-12-26T21:20:53.976836200-05:00"
7011
7055
}
7012
7056
]
7013
7057
}