+37
-13
docs/git-history.json
+37
-13
docs/git-history.json
···
1
1
[
2
2
{
3
-
"hash": "ba29fd68872913ba0a587aa7f29f97b3d373a732",
4
-
"short_hash": "ba29fd6",
3
+
"hash": "c35fb0d83202607facc203dfe10325e8672ea67e",
4
+
"short_hash": "c35fb0d",
5
+
"author": "Ariel M. Lighty",
6
+
"date": "2025-12-25T19:16:38-05:00",
7
+
"message": "add validation to prevent uploading empty results\n\nCheck if usernames array has items before attempting upload.\nShows clear error message instead of hanging.",
8
+
"files_changed": 1
9
+
},
10
+
{
11
+
"hash": "8cf10ff35152d0a02bc4de228a9e418916b3eef9",
12
+
"short_hash": "8cf10ff",
5
13
"author": "Ariel M. Lighty",
6
-
"date": "2025-12-25T13:22:32-05:00",
7
-
"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.",
8
-
"files_changed": 5
14
+
"date": "2025-12-25T19:15:51-05:00",
15
+
"message": "fix Twitter scraper to use UserCell selector\n\nChanged from [data-testid=\"UserName\"] (doesn't exist) to\n[data-testid=\"UserCell\"] (actual DOM element). Extract username\nfrom profile link href instead of span text.",
16
+
"files_changed": 1
17
+
},
18
+
{
19
+
"hash": "0718100fbf6342cb21e8877e32b6f590b0b8cc57",
20
+
"short_hash": "0718100",
21
+
"author": "Ariel M. Lighty",
22
+
"date": "2025-12-25T18:52:32-05:00",
23
+
"message": "fix critical messaging bug: onMessage was discarding return values\n\nThe onMessage wrapper in messaging.ts was only sending {success: true}\ninstead of the actual handler return value. This caused the popup to\nreceive undefined state even though the background worker was correctly\nstoring it.\n\nChanges:\n- messaging.ts: Changed onMessage to forward handler return values\n- background service-worker.ts: Added comprehensive logging\n- popup.ts: Added state change listener and detailed logging\n\nThis fixes the issue where popup showed 'Go to...' even when on the\nfollowing page.",
24
+
"files_changed": 3
25
+
},
26
+
{
27
+
"hash": "85db81991b845467cfa8650d9f42d6a1ecd93017",
28
+
"short_hash": "85db819",
29
+
"author": "Ariel M. Lighty",
30
+
"date": "2025-12-25T16:32:41-05:00",
31
+
"message": "add extension testing and debugging guide\n\nCreated comprehensive README.md with:\n- Build instructions\n- Chrome loading steps\n- Step-by-step testing guide\n- Console logging documentation\n- Common issues and solutions\n- Architecture overview\n- Future enhancements roadmap\n\nIncludes debugging tips for URL pattern detection issues.",
32
+
"files_changed": 1
9
33
},
10
34
{
11
35
"hash": "32cdee3aeac7ef986df47e0fff786b5f7471e55b",
···
16
40
"files_changed": 4
17
41
},
18
42
{
43
+
"hash": "ba29fd68872913ba0a587aa7f29f97b3d373a732",
44
+
"short_hash": "ba29fd6",
45
+
"author": "Ariel M. Lighty",
46
+
"date": "2025-12-25T13:22:32-05:00",
47
+
"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.",
48
+
"files_changed": 5
49
+
},
50
+
{
19
51
"hash": "c3e7afad396d130791d801a85cbfc9643bcd6309",
20
52
"short_hash": "c3e7afa",
21
53
"author": "Ariel M. Lighty",
···
30
62
"date": "2025-12-24T21:09:33-05:00",
31
63
"message": "remove .claude/ and dist/ from repository\n\nThese directories are already in .gitignore but were committed\nbefore the ignore rules were added. Removed from tracking while\nkeeping local files intact.",
32
64
"files_changed": 6
33
-
},
34
-
{
35
-
"hash": "a80fc6cec1518b6143981b37ccd2ea54415faeda",
36
-
"short_hash": "a80fc6c",
37
-
"author": "Ariel M. Lighty",
38
-
"date": "2025-12-24T19:42:51-05:00",
39
-
"message": "update CLAUDE.md: include decision graph in code commits\n\nAdded guidance to run deciduous sync before commits and stage graph\nupdates together with code changes. Decision graph is part of code\nhistory and should not be committed separately.",
40
-
"files_changed": 3
41
65
},
42
66
{
43
67
"hash": "f79a669dd6528340d453cb28e9fed2bd5232d46c",
+198
docs/graph-data.json
+198
docs/graph-data.json
···
2727
2727
"created_at": "2025-12-25T16:28:54.299966500-05:00",
2728
2728
"updated_at": "2025-12-25T16:28:54.299966500-05:00",
2729
2729
"metadata_json": "{\"branch\":\"master\",\"confidence\":90}"
2730
+
},
2731
+
{
2732
+
"id": 249,
2733
+
"change_id": "582e4e97-99df-4686-a9ef-762b851a62ec",
2734
+
"node_type": "action",
2735
+
"title": "Debugging extension state communication: content script detects page but popup shows idle state",
2736
+
"description": null,
2737
+
"status": "pending",
2738
+
"created_at": "2025-12-25T18:35:58.553577600-05:00",
2739
+
"updated_at": "2025-12-25T18:35:58.553577600-05:00",
2740
+
"metadata_json": "{\"branch\":\"master\",\"confidence\":85}"
2741
+
},
2742
+
{
2743
+
"id": 250,
2744
+
"change_id": "4655082d-fab8-4415-a088-c41552402127",
2745
+
"node_type": "outcome",
2746
+
"title": "Fixed critical messaging bug in extension: onMessage wrapper was discarding handler return values, only sending {success: true}. This prevented popup from receiving state updates from background worker. Now properly forwards actual data.",
2747
+
"description": null,
2748
+
"status": "pending",
2749
+
"created_at": "2025-12-25T18:52:37.132035600-05:00",
2750
+
"updated_at": "2025-12-25T18:52:37.132035600-05:00",
2751
+
"metadata_json": "{\"branch\":\"master\",\"commit\":\"0718100\",\"confidence\":95}"
2752
+
},
2753
+
{
2754
+
"id": 251,
2755
+
"change_id": "072f963c-3e06-445a-be4f-0a045e27c6c2",
2756
+
"node_type": "action",
2757
+
"title": "Adding dark mode support to extension popup UI",
2758
+
"description": null,
2759
+
"status": "pending",
2760
+
"created_at": "2025-12-25T18:56:20.061388800-05:00",
2761
+
"updated_at": "2025-12-25T18:56:20.061388800-05:00",
2762
+
"metadata_json": "{\"branch\":\"master\",\"confidence\":85}"
2763
+
},
2764
+
{
2765
+
"id": 252,
2766
+
"change_id": "b5cd9aed-c8cc-4d70-8790-b11a21d751fc",
2767
+
"node_type": "outcome",
2768
+
"title": "Added dark mode support to extension popup using CSS media queries for prefers-color-scheme. All UI elements now have dark variants matching web app's dark theme.",
2769
+
"description": null,
2770
+
"status": "pending",
2771
+
"created_at": "2025-12-25T19:00:24.260632-05:00",
2772
+
"updated_at": "2025-12-25T19:00:24.260632-05:00",
2773
+
"metadata_json": "{\"branch\":\"master\",\"commit\":\"0718100\",\"confidence\":90}"
2774
+
},
2775
+
{
2776
+
"id": 253,
2777
+
"change_id": "af40219a-2094-4e5f-8e96-4b5c9850669b",
2778
+
"node_type": "action",
2779
+
"title": "Testing extension scraping functionality end-to-end",
2780
+
"description": null,
2781
+
"status": "pending",
2782
+
"created_at": "2025-12-25T19:03:39.068139400-05:00",
2783
+
"updated_at": "2025-12-25T19:03:39.068139400-05:00",
2784
+
"metadata_json": "{\"branch\":\"master\",\"confidence\":85}"
2785
+
},
2786
+
{
2787
+
"id": 254,
2788
+
"change_id": "c765751c-c23b-4a27-bfc9-e118b799e1cc",
2789
+
"node_type": "observation",
2790
+
"title": "Twitter scraper found 0 users despite 3 visible on page",
2791
+
"description": null,
2792
+
"status": "pending",
2793
+
"created_at": "2025-12-25T19:16:57.382459700-05:00",
2794
+
"updated_at": "2025-12-25T19:16:57.382459700-05:00",
2795
+
"metadata_json": "{\"branch\":\"master\",\"confidence\":100}"
2796
+
},
2797
+
{
2798
+
"id": 255,
2799
+
"change_id": "9f99eb8c-d15b-41b0-af92-c36de5048fdd",
2800
+
"node_type": "action",
2801
+
"title": "Inspecting Twitter DOM to identify correct user element selector",
2802
+
"description": null,
2803
+
"status": "pending",
2804
+
"created_at": "2025-12-25T19:17:04.041798100-05:00",
2805
+
"updated_at": "2025-12-25T19:17:04.041798100-05:00",
2806
+
"metadata_json": "{\"branch\":\"master\",\"commit\":\"HEAD~1\",\"confidence\":95}"
2807
+
},
2808
+
{
2809
+
"id": 256,
2810
+
"change_id": "3f9c13ee-b216-4e00-ab04-9ad45712228a",
2811
+
"node_type": "outcome",
2812
+
"title": "Discovered [data-testid=\"UserCell\"] is correct selector, not UserName",
2813
+
"description": null,
2814
+
"status": "pending",
2815
+
"created_at": "2025-12-25T19:17:11.208998400-05:00",
2816
+
"updated_at": "2025-12-25T19:17:11.208998400-05:00",
2817
+
"metadata_json": "{\"branch\":\"master\",\"confidence\":100}"
2818
+
},
2819
+
{
2820
+
"id": 257,
2821
+
"change_id": "eccb2bb1-413e-4d9f-8eb8-eb753bd5b82b",
2822
+
"node_type": "outcome",
2823
+
"title": "Fixed scraper selector and added upload validation for 0 results",
2824
+
"description": null,
2825
+
"status": "pending",
2826
+
"created_at": "2025-12-25T19:17:27.907683600-05:00",
2827
+
"updated_at": "2025-12-25T19:17:27.907683600-05:00",
2828
+
"metadata_json": "{\"branch\":\"master\",\"commit\":\"c35fb0d\",\"confidence\":95,\"files\":[\"packages/extension/src/content/scrapers/twitter-scraper.ts\",\"packages/extension/src/popup/popup.ts\"]}"
2730
2829
}
2731
2830
],
2732
2831
"edges": [
···
5369
5468
"weight": 1.0,
5370
5469
"rationale": "Fixes complete and documented",
5371
5470
"created_at": "2025-12-25T16:28:55.599385300-05:00"
5471
+
},
5472
+
{
5473
+
"id": 241,
5474
+
"from_node_id": 247,
5475
+
"to_node_id": 249,
5476
+
"from_change_id": "c8276478-87e3-43b3-b763-e7964a776fad",
5477
+
"to_change_id": "582e4e97-99df-4686-a9ef-762b851a62ec",
5478
+
"edge_type": "leads_to",
5479
+
"weight": 1.0,
5480
+
"rationale": "Follow-up debugging after initial fixes",
5481
+
"created_at": "2025-12-25T18:36:00.949506600-05:00"
5482
+
},
5483
+
{
5484
+
"id": 242,
5485
+
"from_node_id": 249,
5486
+
"to_node_id": 250,
5487
+
"from_change_id": "582e4e97-99df-4686-a9ef-762b851a62ec",
5488
+
"to_change_id": "4655082d-fab8-4415-a088-c41552402127",
5489
+
"edge_type": "leads_to",
5490
+
"weight": 1.0,
5491
+
"rationale": "Root cause identified and fixed",
5492
+
"created_at": "2025-12-25T18:52:40.291421600-05:00"
5493
+
},
5494
+
{
5495
+
"id": 243,
5496
+
"from_node_id": 184,
5497
+
"to_node_id": 251,
5498
+
"from_change_id": "919c42ef-9fae-473f-b755-ee32d8999204",
5499
+
"to_change_id": "072f963c-3e06-445a-be4f-0a045e27c6c2",
5500
+
"edge_type": "leads_to",
5501
+
"weight": 1.0,
5502
+
"rationale": "UI polish for extension",
5503
+
"created_at": "2025-12-25T18:56:23.458768300-05:00"
5504
+
},
5505
+
{
5506
+
"id": 244,
5507
+
"from_node_id": 251,
5508
+
"to_node_id": 252,
5509
+
"from_change_id": "072f963c-3e06-445a-be4f-0a045e27c6c2",
5510
+
"to_change_id": "b5cd9aed-c8cc-4d70-8790-b11a21d751fc",
5511
+
"edge_type": "leads_to",
5512
+
"weight": 1.0,
5513
+
"rationale": "Dark mode implementation complete",
5514
+
"created_at": "2025-12-25T19:00:27.045687800-05:00"
5515
+
},
5516
+
{
5517
+
"id": 245,
5518
+
"from_node_id": 184,
5519
+
"to_node_id": 253,
5520
+
"from_change_id": "919c42ef-9fae-473f-b755-ee32d8999204",
5521
+
"to_change_id": "af40219a-2094-4e5f-8e96-4b5c9850669b",
5522
+
"edge_type": "leads_to",
5523
+
"weight": 1.0,
5524
+
"rationale": "Testing actual scraping after fixing detection",
5525
+
"created_at": "2025-12-25T19:03:41.610950300-05:00"
5526
+
},
5527
+
{
5528
+
"id": 246,
5529
+
"from_node_id": 184,
5530
+
"to_node_id": 254,
5531
+
"from_change_id": "919c42ef-9fae-473f-b755-ee32d8999204",
5532
+
"to_change_id": "c765751c-c23b-4a27-bfc9-e118b799e1cc",
5533
+
"edge_type": "leads_to",
5534
+
"weight": 1.0,
5535
+
"rationale": "Bug found during testing",
5536
+
"created_at": "2025-12-25T19:17:19.516534800-05:00"
5537
+
},
5538
+
{
5539
+
"id": 247,
5540
+
"from_node_id": 254,
5541
+
"to_node_id": 255,
5542
+
"from_change_id": "c765751c-c23b-4a27-bfc9-e118b799e1cc",
5543
+
"to_change_id": "9f99eb8c-d15b-41b0-af92-c36de5048fdd",
5544
+
"edge_type": "leads_to",
5545
+
"weight": 1.0,
5546
+
"rationale": "Needed to debug selector",
5547
+
"created_at": "2025-12-25T19:17:19.704435600-05:00"
5548
+
},
5549
+
{
5550
+
"id": 248,
5551
+
"from_node_id": 255,
5552
+
"to_node_id": 256,
5553
+
"from_change_id": "9f99eb8c-d15b-41b0-af92-c36de5048fdd",
5554
+
"to_change_id": "3f9c13ee-b216-4e00-ab04-9ad45712228a",
5555
+
"edge_type": "leads_to",
5556
+
"weight": 1.0,
5557
+
"rationale": "Found correct selector via browser inspection",
5558
+
"created_at": "2025-12-25T19:17:19.896961300-05:00"
5559
+
},
5560
+
{
5561
+
"id": 249,
5562
+
"from_node_id": 256,
5563
+
"to_node_id": 257,
5564
+
"from_change_id": "3f9c13ee-b216-4e00-ab04-9ad45712228a",
5565
+
"to_change_id": "eccb2bb1-413e-4d9f-8eb8-eb753bd5b82b",
5566
+
"edge_type": "leads_to",
5567
+
"weight": 1.0,
5568
+
"rationale": "Implemented fix based on discovery",
5569
+
"created_at": "2025-12-25T19:17:34.829447100-05:00"
5372
5570
}
5373
5571
]
5374
5572
}