Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
290 commits
Select commit Hold shift + click to select a range
d0fa9e5
test(26): snapshot last_error key + isolate web-import test from cach…
thezoid Jun 27, 2026
3476b29
docs(26-03): summary + roadmap progress (3/3 plans)
thezoid Jun 27, 2026
1964423
fix(sounds): replace copyrighted FF14 alerts with original public-dom…
thezoid Jun 27, 2026
21bf17c
docs(26): add code review report
thezoid Jun 27, 2026
7c06891
fix(26): log filter is filter-then-limit so /api/logs returns up to n…
thezoid Jun 27, 2026
8d227e7
docs(26): phase verification (passed 10/10)
thezoid Jun 27, 2026
e1908e1
docs(27): smart discuss context
thezoid Jun 27, 2026
905f8d8
docs(27): phase research
thezoid Jun 27, 2026
4e12b97
docs(27): add validation strategy
thezoid Jun 27, 2026
6cff3c0
docs(27): pattern map
thezoid Jun 27, 2026
eafece6
docs(27): create SSE infrastructure phase plan (3 plans, 2 waves)
thezoid Jun 27, 2026
a455096
test(27-01): add RED SSE isolation spike tests/test_sse.py
thezoid Jun 27, 2026
57c45fd
test(27-01): add RED tail_log_lines cursor tests tests/test_log_reade…
thezoid Jun 27, 2026
3dbcc97
docs(27-01): complete Wave 0 RED spike plan — SUMMARY, STATE, ROADMAP…
thezoid Jun 27, 2026
af2c249
feat(27-02): add tail_log_lines cursor to web/log_reader.py
thezoid Jun 27, 2026
734fd35
feat(27-02): create web/sse_hub.py with SseHub and _poll_loop
thezoid Jun 27, 2026
9f7c846
docs(27-02): complete bridge-core plan — SUMMARY, STATE, ROADMAP
thezoid Jun 27, 2026
0d9562e
feat(27-03): create GET /api/events SSE route in web/routes/sse.py
thezoid Jun 27, 2026
2e62d94
feat(27-03): wire lifespan, SseHub, sse router; fix poll_interval + t…
thezoid Jun 27, 2026
d324949
docs(27-03): complete SSE route+lifespan plan — SUMMARY, STATE, ROADMAP
thezoid Jun 27, 2026
0116043
refactor(27): remove test-harness detection from production sse.py; d…
thezoid Jun 27, 2026
ebab5a1
docs(27): add code review report
thezoid Jun 27, 2026
42066e5
fix(27): resolve log dir via core.paths.log_dir() so /api/logs + SSE …
thezoid Jun 27, 2026
b5178bf
docs(27): phase verification (4/4 automated; 3 live-env UAT items def…
thezoid Jun 27, 2026
995c9fa
docs(28): smart discuss context
thezoid Jun 27, 2026
fa4d163
docs(28): UI design contract
thezoid Jun 27, 2026
3bf3c05
docs(28): research frontend observability surfaces phase
thezoid Jun 27, 2026
06e6cc3
docs(28): add validation strategy
thezoid Jun 27, 2026
1e1fa75
docs(28): pattern map
thezoid Jun 27, 2026
8be7c94
docs(28): create frontend observability surfaces plan (4 plans, 4 waves)
thezoid Jun 27, 2026
cfca436
test(28-01): add heartbeat_age_secs RED tests to test_health.py
thezoid Jun 27, 2026
c0987b3
test(28-01): create static-scaffold RED tests for observability UI se…
thezoid Jun 27, 2026
5a423a4
docs(28-01): complete Wave 0 RED scaffold plan summary and state updates
thezoid Jun 27, 2026
0e0d044
feat(28-02): add heartbeat_age_secs to get_snapshot()
thezoid Jun 27, 2026
1d3cc97
feat(28-02): add Phase 28 observability CSS classes to components.css
thezoid Jun 27, 2026
f271521
docs(28-02): complete plan 28-02 summary, state, and roadmap update
thezoid Jun 27, 2026
4e03dd5
feat(28-03): add section-health, section-buys, section-log-viewer sca…
thezoid Jun 27, 2026
73d70b5
feat(28-03): implement renderHealthCards + renderUptime wired into po…
thezoid Jun 27, 2026
0ff3c71
docs(28-03): complete plan 28-03 summary, state, and roadmap update
thezoid Jun 27, 2026
137be25
feat(28-04): implement loadConfirmedBuys() and loadPriceChart() with …
thezoid Jun 27, 2026
d701353
feat(28-04): implement log viewer render, extend pollLogs() with filt…
thezoid Jun 27, 2026
b279599
docs(28-04): complete plan 28-04 summary, state, and roadmap update
thezoid Jun 27, 2026
549dac5
docs(28): add code review report
thezoid Jun 27, 2026
ddfe6af
fix(28): destroy uPlot instances on re-render (CR-01), strip '=' from…
thezoid Jun 27, 2026
368090e
docs(28): phase verification (9/9 automated; 5 JS-visual UAT items de…
thezoid Jun 27, 2026
5bec5a5
docs(29): smart discuss context
thezoid Jun 28, 2026
0f08673
docs(29): phase research
thezoid Jun 28, 2026
5d5f21e
docs(29): add validation strategy
thezoid Jun 28, 2026
c9f7a91
docs(29): create SSE client wiring phase plan (3 plans, 3 waves)
thezoid Jun 28, 2026
40302ca
test(29-01): add Wave 0 RED scaffold for SSE client wiring (W29-A1..A11)
thezoid Jun 28, 2026
63b01ed
docs(29-01): complete Wave 0 RED scaffold plan -- SUMMARY, STATE, ROA…
thezoid Jun 28, 2026
c0804df
feat(29-02): extract renderStatus, add no-dup guard, add sse-indicato…
thezoid Jun 28, 2026
c3056dc
docs(29-02): complete plan 02 summary and state update
thezoid Jun 28, 2026
084bc5e
feat(29-03): replace setInterval polls with feature-detected EventSou…
thezoid Jun 28, 2026
c84d6e2
docs(29-03): complete SSE client wiring plan — SUMMARY, STATE, ROADMA…
thezoid Jun 28, 2026
73b0c8f
docs(29): add code review report
thezoid Jun 28, 2026
14e1ff2
fix(29): try/catch SSE handler JSON.parse (CR-01); reset _lastLogLine…
thezoid Jun 28, 2026
8d5d2ad
docs(29): phase verification (9/9 automated; 5 live UAT items deferred)
thezoid Jun 28, 2026
06def93
docs(phase-28): flip Nyquist validation to compliant (0 gaps)
thezoid Jun 28, 2026
a65232b
docs(phase-29): flip Nyquist validation to compliant (0 gaps)
thezoid Jun 28, 2026
3c36fc1
docs(roadmap): insert phase 29.1 — v4.1 tech-debt cleanup
thezoid Jun 28, 2026
32710de
docs(29.1): smart discuss context
thezoid Jun 29, 2026
b7035a0
docs(phase-29.1): research + validation strategy
thezoid Jun 30, 2026
6f23178
docs(29.1): create phase plan (4 plans, 4 waves)
thezoid Jun 30, 2026
1a4d0ad
test(29.1-01): add 5 RED tech-debt assertions (W29.1-A1..A5)
thezoid Jun 30, 2026
c27671f
fix(29.1-02): relocate uPlot loader to <head> for cold-load safety (O…
thezoid Jun 30, 2026
a0a0f0d
fix(29.1-03): one-shot log-dedup guard, stop suppressing repeated lin…
thezoid Jun 30, 2026
63b47a2
fix(29.1-04): SSE idle watchdog + REST fallback for stalled streams (…
thezoid Jun 30, 2026
a538863
docs(29.1): plan summaries + tracking (all 4 waves complete)
thezoid Jun 30, 2026
d5f6869
fix(29.1): unconditional live indicator on status event + stronger wa…
thezoid Jun 30, 2026
e2c2568
docs(29.1): add code review report
thezoid Jun 30, 2026
4b62cb1
test(29.1): verification human_needed (9/9 auto green); persist 3 liv…
thezoid Jun 30, 2026
7e4c5f8
docs(phase-29.1): complete phase execution
thezoid Jun 30, 2026
34e1b0a
docs(roadmap): mark phase 29.1 complete + reconcile v4.1 progress (20…
thezoid Jun 30, 2026
a23dd3b
docs(audit): refresh v4.1 milestone audit post-29.1
thezoid Jun 30, 2026
63b71fb
chore: archive v4.1 milestone files
thezoid Jun 30, 2026
bb87bd4
chore: remove REQUIREMENTS.md for v4.1 milestone
thezoid Jun 30, 2026
2621f33
chore: archive v4.1 phase directories to milestones/v4.1-phases/
thezoid Jun 30, 2026
ff9563a
docs: start milestone v4.2 Release Readiness
thezoid Jul 2, 2026
c97335a
docs: define milestone v4.2 requirements (20 reqs, 6 categories)
thezoid Jul 2, 2026
52baa3c
docs: create milestone v4.2 roadmap (6 phases, 100% coverage)
thezoid Jul 2, 2026
6a2a257
docs(30): add phase research and validation strategy
thezoid Jul 2, 2026
6e14999
docs(30): add phase context, discussion log, pattern map
thezoid Jul 2, 2026
7f4740b
docs(30): create phase plan (6 plans, 3 waves)
thezoid Jul 2, 2026
ea9f414
test(30-01): add failing tests for place-order marker column + accessors
thezoid Jul 2, 2026
3942c5a
feat(30-01): add place-order marker column + accessors (BF-02)
thezoid Jul 2, 2026
3d5e3e7
test(30-01): add failing tests for _PossiblyPlaced guard + possibly_p…
thezoid Jul 2, 2026
cbe013c
feat(30-01): add _PossiblyPlaced retry-abort guard + possibly_placed …
thezoid Jul 2, 2026
81c0c88
test(30-01): add failing tests for D-15 login-failure short-circuit +…
thezoid Jul 2, 2026
e2ad0f9
feat(30-01): add D-15 login-failure short-circuit + login_failed aler…
thezoid Jul 2, 2026
1741af4
docs(30-01): add plan summary for place-order guard + login-failure s…
thezoid Jul 2, 2026
70741f7
docs(30-01): update STATE.md and ROADMAP.md after plan 30-01 completion
thezoid Jul 2, 2026
e7115ca
feat(30-02): wire Amazon WAF branch to solve_amazon_waf solver
thezoid Jul 2, 2026
258d6d0
test(30-02): rewrite WAF tests to assert solve-success and fallback p…
thezoid Jul 2, 2026
a5c5952
docs(30-02): add plan summary for Amazon WAF auto-solve wiring
thezoid Jul 2, 2026
f25f199
docs(30-02): update STATE.md and ROADMAP.md after plan 30-02 completion
thezoid Jul 2, 2026
a085eef
feat(30-03): change login() ABC to bool + add _verify_login_generic
thezoid Jul 2, 2026
6c0e24c
feat(30-03): make relaunch() honor a failed re-login
thezoid Jul 2, 2026
8218460
docs(30-03): complete BF-03 ABC foundation plan
thezoid Jul 2, 2026
6495e31
test(30-04): add failing test for Amazon place-order marker ordering
thezoid Jul 2, 2026
790e798
feat(30-04): write durable place-order marker before Amazon click
thezoid Jul 2, 2026
378f973
test(30-04): add failing test for BestBuy place-order marker ordering
thezoid Jul 2, 2026
cb37a20
feat(30-04): write durable place-order marker before BestBuy click
thezoid Jul 2, 2026
89a9c6c
docs(30-04): complete Amazon+BestBuy place-order marker write plan
thezoid Jul 2, 2026
f48fc6b
docs(30-04): complete Amazon+BestBuy place-order marker write plan
thezoid Jul 2, 2026
20a934b
test(30-06): add failing tests for walmart/target/gamestop login()->b…
thezoid Jul 2, 2026
6904f89
feat(30-06): walmart/target/gamestop login()->bool + auto_buy abort-o…
thezoid Jul 2, 2026
0c0df61
test(30-06): add failing tests for newegg/squareenix login()->bool + …
thezoid Jul 2, 2026
3681f9b
feat(30-06): newegg/squareenix login()->bool + auto_buy abort-on-logi…
thezoid Jul 2, 2026
84daf8c
docs(30-06): complete community plugin login verification plan
thezoid Jul 2, 2026
1b26185
docs(30-06): update STATE/ROADMAP for community plugin login verifica…
thezoid Jul 2, 2026
c2ddeed
feat(30-05): Amazon login() -> bool + verification + auto_buy abort
thezoid Jul 2, 2026
5c07b75
feat(30-05): BestBuy login() -> bool + verification + auto_buy abort
thezoid Jul 2, 2026
aec99ca
docs(30-05): complete Amazon + BestBuy login verification plan
thezoid Jul 2, 2026
9aedb68
docs(30-05): update STATE/ROADMAP/REQUIREMENTS for Amazon+BestBuy log…
thezoid Jul 2, 2026
5ba0849
docs(30): add phase 30 breakfix-hardening verification report
thezoid Jul 2, 2026
861fc79
fix(30): add clear_place_order_marker_sync recovery accessor (LOW-03)
thezoid Jul 2, 2026
dbe1345
fix(30): drop redundant asyncio.TimeoutError from exception tuples (L…
thezoid Jul 2, 2026
ba16879
fix(30): move place-order marker write into place_order_guarded (CR-01)
thezoid Jul 2, 2026
22ec887
fix(30): fire possibly_placed alert once per latch, not every poll cy…
thezoid Jul 2, 2026
fa078ab
docs(30): mark CR-01/MED-02/LOW-03/LOW-01 resolved in 30-REVIEW.md
thezoid Jul 2, 2026
dbd9335
docs(30): mark phase 30 breakfix-hardening complete in ROADMAP/STATE/…
thezoid Jul 2, 2026
2571935
docs(31): smart discuss context (infra phase, autonomous)
thezoid Jul 2, 2026
a764683
docs(31): phase research (secret scan, CodeQL, dependabot remediation)
thezoid Jul 2, 2026
a9aefd8
docs(31): add validation strategy (Nyquist)
thezoid Jul 2, 2026
e5207e9
docs(31): create phase plan (3 plans, 1 wave)
thezoid Jul 2, 2026
99f81ac
test(31-01): suppress captcha fixture false positive, add secret-guar…
thezoid Jul 2, 2026
549250d
feat(31-01): add gitleaks CI secret-scan workflow
thezoid Jul 2, 2026
7e0741f
docs(31-01): complete secret-scan audit plan
thezoid Jul 2, 2026
39ccd8e
fix(31-02): bump CodeQL workflow to supported action versions
thezoid Jul 2, 2026
73a6fb2
fix(31-02): bump ci.yml off Node20-based actions
thezoid Jul 2, 2026
5065280
docs(31-02): complete CodeQL workflow fix plan
thezoid Jul 2, 2026
cbf682b
feat(31-03): add .github/dependabot.yml (pip + github-actions)
thezoid Jul 2, 2026
b142cfa
fix(31-03): bump cryptography, pydantic-settings, jinja2 to patched v…
thezoid Jul 2, 2026
bada2bf
docs(31-03): complete dependabot config + vuln remediation plan
thezoid Jul 2, 2026
8f69d1d
fix(31): least-privilege permissions on gitleaks workflow; create dep…
thezoid Jul 2, 2026
23324c5
docs(31): add verification (human_needed: CI debt) + code review (0 c…
thezoid Jul 2, 2026
cd2714a
docs(31): mark phase 31 CI-security complete (RH-01/04/05; CI-verify …
thezoid Jul 2, 2026
344556e
docs(32): smart discuss context (release automation + community readi…
thezoid Jul 2, 2026
450b1bc
docs(32): phase research (release-please v5, README gaps, security co…
thezoid Jul 2, 2026
d6d440c
docs(32): add validation strategy (Nyquist)
thezoid Jul 2, 2026
0dd67b3
docs(32): create phase plan (3 plans, 1 wave)
thezoid Jul 2, 2026
3a380bf
chore(32-01): reconcile pyproject version to 2.0.0
thezoid Jul 2, 2026
082a25a
feat(32-01): add release-please config + manifest seeded at 2.0.0
thezoid Jul 2, 2026
43fe044
feat(32-01): add release-please GitHub Actions workflow
thezoid Jul 2, 2026
c8ce6cf
docs(32-01): complete release automation seed plan
thezoid Jul 2, 2026
8f74300
docs(32-02): fix README badges, prereqs, install, and clone URL
thezoid Jul 2, 2026
f69f340
docs(32-02): document 7-platform ecosystem and fix credential guidance
thezoid Jul 2, 2026
dd5d236
docs(32-02): complete README rewrite plan
thezoid Jul 2, 2026
fb464d0
docs(32-03): route SECURITY.md vulnerability reports to GitHub PVR
thezoid Jul 2, 2026
aef6139
docs(32-03): route CODE_OF_CONDUCT.md reports to GitHub PVR
thezoid Jul 2, 2026
04c908f
docs(32-03): complete RH-07 security contact plan
thezoid Jul 2, 2026
a32da57
docs(32): add phase verification report (human_needed)
thezoid Jul 2, 2026
cc87086
docs(32): fix README prereqs, contributing link, and versioning note
thezoid Jul 2, 2026
cab992a
docs(32): stop routing CoC reports through the vulnerability form
thezoid Jul 2, 2026
d155f86
docs(32): document Actions allowlist and GITHUB_TOKEN caveats
thezoid Jul 2, 2026
9395d38
docs(32): document Actions allowlist requirement in gitleaks workflow
thezoid Jul 2, 2026
c695510
docs(32): mark 32-REVIEW.md findings resolved
thezoid Jul 2, 2026
a984a9d
docs(32): mark phase 32 release-automation complete (RH-02/03/06/07; …
thezoid Jul 2, 2026
195dc16
docs(33): smart discuss context (config refactor: canonical delay fie…
thezoid Jul 2, 2026
1ffa50d
docs(33): phase research (dead delay fields finding, shim mapping, ex…
thezoid Jul 2, 2026
1aa75e6
docs(33): add validation strategy (Nyquist)
thezoid Jul 2, 2026
219d9c2
docs(33): create phase plan (2 plans, 2 waves; fixture-import + grep-…
thezoid Jul 2, 2026
95e3100
test(33-01): add failing tests for canonical delay-field shim and Ama…
thezoid Jul 2, 2026
48c28ce
feat(33-01): add legacy-delay back-compat shim, rename 5 community mo…
thezoid Jul 2, 2026
a19649d
feat(33-01): _get_plugin_sleep reads canonical delay_seconds/delay_ji…
thezoid Jul 2, 2026
851b4b7
docs(33-01): complete config-refactor CFG-01 plan
thezoid Jul 2, 2026
1624ef6
test(33-02): add failing fixture-plugin test for CFG-02 per-platform …
thezoid Jul 2, 2026
8622dda
feat(33-02): add extra=allow passthrough + get_platform_config helper…
thezoid Jul 2, 2026
6ffb958
docs(33-02): complete generic per-platform config plan
thezoid Jul 2, 2026
34bb14e
fix(33): name legacy delay fields in inverted-range shim error (WR-01…
thezoid Jul 2, 2026
006b5e7
fix(33): fail loudly on get_platform_config model_cls mismatch (WR-02)
thezoid Jul 2, 2026
736eb65
docs(33): mark WR-01/WR-02/WR-03/IN-02 resolved in code review report
thezoid Jul 2, 2026
72c1f24
docs(33): mark phase 33 config-refactor complete (CFG-01/02; Amazon j…
thezoid Jul 2, 2026
8bba906
docs(34): smart discuss context (plugin log filter + outcome analytics)
thezoid Jul 2, 2026
5f727b3
docs(34): phase research (contextvars plugin tag, analytics schema, c…
thezoid Jul 3, 2026
d6a16dc
docs(34): add validation strategy (Nyquist)
thezoid Jul 3, 2026
61efdf2
docs(34): create phase plan (3 plans, 2 waves)
thezoid Jul 3, 2026
066faf4
test(34-01): add failing tests for [plugin] log tag injection
thezoid Jul 3, 2026
448fbdc
feat(34-01): inject [plugin] tag into writeLog via ContextVar
thezoid Jul 3, 2026
91a87af
feat(34-01): tag supervise() tasks with platform_key for log lines
thezoid Jul 3, 2026
226ec21
docs(34-01): complete [plugin] log tag ContextVar plan
thezoid Jul 3, 2026
45e51a7
test(34-03): add failing fixture tests for compute_analytics
thezoid Jul 3, 2026
c66fc6a
feat(34-03): add pure compute_analytics + read-only order rows accessor
thezoid Jul 3, 2026
9bf6652
feat(34-03): add BotService.get_analytics seam + GET /api/analytics
thezoid Jul 3, 2026
71abe90
feat(34-03): add analytics dashboard view (stat cards + per-plugin ta…
thezoid Jul 3, 2026
e316d78
docs(34-03): complete outcome analytics plan
thezoid Jul 3, 2026
6c93c87
test(34-02): add failing tests for /api/logs plugin filter
thezoid Jul 3, 2026
039f242
feat(34-02): add plugin filter to read_logs_filtered and /api/logs
thezoid Jul 3, 2026
8543b57
feat(34-02): add plugin dropdown to dashboard log viewer, wire to plu…
thezoid Jul 3, 2026
f169537
docs(34-02): complete /api/logs plugin filter plan
thezoid Jul 3, 2026
f9b0250
test(34): add failing test for WR-01 write-queue plugin tagging
thezoid Jul 3, 2026
a762307
fix(34): tag write-queue log lines with the owning plugin (WR-01)
thezoid Jul 3, 2026
700b99e
fix(34): expose the real logger tag from list_plugins, DRY get_analyt…
thezoid Jul 3, 2026
ac104f0
fix(34): anchor the plugin log filter to the tag position, not free s…
thezoid Jul 3, 2026
ddcd002
fix(34): refresh the analytics cards on a periodic timer (IN-02)
thezoid Jul 3, 2026
e93c4fd
fix(34): import the CONFIRMED- sentinel prefix instead of redefining …
thezoid Jul 3, 2026
db93e5d
docs(34): mark all code-review findings resolved (WR-01, WR-02, WR-03…
thezoid Jul 3, 2026
8cf141f
docs(34): mark phase 34 feature-completion complete (FC-01/02; dashbo…
thezoid Jul 3, 2026
0ba96e7
docs(35): smart discuss context (audit fixes + doc-hygiene cleanup)
thezoid Jul 3, 2026
7e255db
docs(35): phase research (AF sites, cli lockstep risk, DH-02 scope co…
thezoid Jul 3, 2026
90d046c
docs(35): add validation strategy (Nyquist)
thezoid Jul 3, 2026
90d3ae2
docs(35): create phase plan (3 plans, 1 wave)
thezoid Jul 3, 2026
b9454d7
test(35-01): add failing tests for POST /items/remove (AF-01)
thezoid Jul 3, 2026
8f704ff
feat(35-01): add zero-JS POST /items/remove route (AF-01)
thezoid Jul 3, 2026
9794a10
feat(35-01): wire SSR remove button to HTML form POST (AF-01)
thezoid Jul 3, 2026
5e94f68
chore(35-01): delete dead escHtml() helper (AF-03)
thezoid Jul 3, 2026
e2542df
docs(35-01): complete AF-01/AF-03 audit fixes plan
thezoid Jul 3, 2026
585484c
fix(35-02): scrub raw last_heartbeat from get_snapshot, lockstep CLI …
thezoid Jul 3, 2026
2143edc
test(35-02): prove both AF-02 surfaces clean of raw last_heartbeat
thezoid Jul 3, 2026
0f167bc
docs(35-02): complete AF-02 last_heartbeat leak fix plan
thezoid Jul 3, 2026
0b81b04
docs(35-03): reconcile v4.0/v4.1 VALIDATION.md frontmatter (DH-01, DH…
thezoid Jul 3, 2026
66bf260
docs(35-03): add requirements: frontmatter to Phase 27/28/29 SUMMARY …
thezoid Jul 3, 2026
3010644
docs(35-03): complete DH-01/02/03 frontmatter reconciliation plan
thezoid Jul 3, 2026
b013966
test(35): add failing regression for CR-01 non-str link crash
thezoid Jul 3, 2026
0c933b0
fix(35): coerce non-str link form field to empty (CR-01)
thezoid Jul 3, 2026
bd46f4c
fix(35): add minimal .inline-remove-form CSS rule (IN-02)
thezoid Jul 3, 2026
2c6a1dd
docs(35): mark CR-01 + IN-02 resolved, IN-01 acknowledged in review
thezoid Jul 3, 2026
b70ac4a
docs(35): mark phase 35 audit-fixes-doc-hygiene complete (AF+DH; all …
thezoid Jul 3, 2026
5af6e0b
docs: v4.2 milestone audit (20/20 reqs, tech_debt: deferred UAT + ope…
thezoid Jul 3, 2026
3a52cc1
chore: archive v4.2 milestone
thezoid Jul 3, 2026
32d1bbd
docs: refresh handoff for v4.2 milestone-complete checkpoint (superse…
thezoid Jul 3, 2026
d485710
docs: plant SEED-003 — remote plugin manager + third-party disclaimer
thezoid Aug 1, 2026
0cebc9e
feat(cli): auto-select next free port when the dashboard port is busy
thezoid Aug 1, 2026
e2f2695
Merge branch 'master' into chore/v4.0-milestone-close
thezoid Aug 1, 2026
70f31c5
docs: record 2026-08-01 live UAT results across 11 phase artifacts
thezoid Aug 1, 2026
f883f13
docs: record 2026-08-01 UAT audit session in STATE.md
thezoid Aug 1, 2026
f00ef89
docs: start milestone v5.0 Real Release and Plugin Ecosystem
thezoid Aug 2, 2026
7ffb8c5
docs: research milestone v5.0 workstream H (plugin ecosystem)
thezoid Aug 2, 2026
4e4edae
docs: define milestone v5.0 requirements (84 across 10 workstreams)
thezoid Aug 2, 2026
1463fb6
docs: create milestone v5.0 roadmap (15 phases, 36-50)
thezoid Aug 2, 2026
bb8eace
docs(36): smart discuss context
thezoid Aug 2, 2026
9529dd1
docs(36): research phase domain
thezoid Aug 2, 2026
2317476
docs(36): add validation strategy
thezoid Aug 2, 2026
28280ec
docs(36): create phase 36 mainline reconciliation plans
thezoid Aug 2, 2026
0e648de
docs(36): close plan-checker findings on phase 36 plans
thezoid Aug 2, 2026
969b322
docs(36): open phase 36 merge audit log
thezoid Aug 2, 2026
d04c5ca
docs(36-01): record PR #12 merge in phase 36 audit log
thezoid Aug 2, 2026
c321509
docs(36-01): record PR #8 superseded close in phase 36 audit log
thezoid Aug 2, 2026
c618989
docs(36-01): summarize rollback tag, PR #12 merge, PR #8 close
thezoid Aug 2, 2026
c07fd3b
docs(36-01): complete rollback-point and PR-disposition plan
thezoid Aug 2, 2026
1745f08
docs(36-01): flag MAIN-03 commit-count drift from 8 to 18 for plan 36-02
thezoid Aug 2, 2026
c208af7
docs(36): commit pending GSD harness state from the 2026-08-01 UAT se…
thezoid Aug 2, 2026
a6bf2b6
chore(36): absorb remote-only merge commits from PR #11 head
thezoid Aug 2, 2026
7875a01
docs(36): record MAIN-03 commit disposition and absorb PR #11 head di…
thezoid Aug 2, 2026
635c1d3
chore(36): merge master into v4.0 close branch
thezoid Aug 2, 2026
10a0da1
docs(36): record merged-tree local suite result
thezoid Aug 2, 2026
c544dc0
docs(36-02): summarize PR #11 local conflict resolution
thezoid Aug 2, 2026
232d195
docs(36-02): advance state to plan 03 and record plan 02 metrics
thezoid Aug 2, 2026
d1c4cf2
docs(36-02): record post-commit self-check result
thezoid Aug 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,28 @@ updates:
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 5
day: "monday"
open-pull-requests-limit: 10
labels:
- "dependencies"
- "python"
groups:
minor-and-patch:
update-types:
- "minor"
- "patch"

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
open-pull-requests-limit: 5
labels:
- "dependencies"
- "github-actions"
groups:
minor-and-patch:
update-types:
- "minor"
- "patch"
- "patch"
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ jobs:
PYTHON_KEYRING_BACKEND: keyring.backends.null.Keyring

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "3.13"
- name: Install
Expand Down
16 changes: 9 additions & 7 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,21 @@ jobs:
strategy:
fail-fast: false
matrix:
language: [ 'python' ]
include:
- language: python
build-mode: none

steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v6

- name: Initialize CodeQL
uses: github/codeql-action/init@v1
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}

- name: Autobuild
uses: github/codeql-action/autobuild@v1
build-mode: ${{ matrix.build-mode }}

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{matrix.language}}"
30 changes: 30 additions & 0 deletions .github/workflows/gitleaks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# NOTE: requires gitleaks/gitleaks-action to be allowlisted under
# Settings -> Actions -> General -> Actions permissions (repo currently
# restricts to selected/GitHub-owned actions only, or "Allow all actions").
# Otherwise the run ends in startup_failure with zero jobs.
name: gitleaks

on:
push:
branches: [master, dev]
pull_request:
branches: [master, dev]
workflow_dispatch:

permissions:
contents: read

jobs:
scan:
name: gitleaks
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: gitleaks/gitleaks-action@v3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
28 changes: 28 additions & 0 deletions .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# NOTE: requires googleapis/release-please-action to be allowlisted under
# Settings -> Actions -> General -> Actions permissions (repo currently
# restricts to selected/GitHub-owned actions only, or "Allow all actions").
# Otherwise the run ends in startup_failure with zero jobs.
#
# Operator note: this workflow authenticates with the default
# secrets.GITHUB_TOKEN. GitHub suppresses pull_request-triggered checks
# (CI/CodeQL) on PRs opened by the default GITHUB_TOKEN, so if branch
# protection on master later requires those checks to pass, the
# release-please PR will need a fine-grained PAT / GitHub App token
# instead of GITHUB_TOKEN to trigger them normally.
name: release-please

on:
push:
branches: [master]

permissions:
contents: write
pull-requests: write

jobs:
release-please:
runs-on: ubuntu-latest
steps:
- uses: googleapis/release-please-action@v5
with:
token: ${{ secrets.GITHUB_TOKEN }}
152 changes: 111 additions & 41 deletions .planning/.continue-here.md
Original file line number Diff line number Diff line change
@@ -1,79 +1,149 @@
---
context: research
milestone: v3.0 Resilience + Ecosystem
workflow: new-milestone
stage: research-synthesis-incomplete
context: default
phase: none (milestone v4.2 complete + archived; post-milestone UAT audit session)
task: none
total_tasks: 0
status: paused
last_updated: 2026-06-07T08:13:27.961Z
last_updated: 2026-08-01T23:44:34.447Z
---

# BLOCKING CONSTRAINTS — Read Before Anything Else

> Discovered through failure this session. Acknowledge before proceeding.

- [ ] CONSTRAINT: `.planning/research/SUMMARY.md` is STALE v1 content (Selenium→nodriver, Phase 1). The v3.0 synthesizer errored before writing it. Do NOT read SUMMARY.md as v3.0 research. Mitigation: regenerate it via `gsd-research-synthesizer` from the 4 fresh v3.0 files BEFORE defining requirements.

**Do not proceed until the box is checked.**

## Critical Anti-Patterns

| Pattern | Description | Severity | Prevention Mechanism |
|---------|-------------|----------|----------------------|
| Stale-SUMMARY consumption | SUMMARY.md on disk is the v1 summary, not v3.0. Reading it would ground v3.0 requirements in the wrong milestone. | blocking | First resume action = re-spawn synthesizer to overwrite SUMMARY.md; verify its first lines reference v3.0 / proxy-CAPTCHA-price before using it. |
| `gsd-sdk query audit-uat` false all-clear | It scans `.planning/phases/`, which is EMPTY once milestones are archived. It reported `total_items: 0` while **80** real outstanding items sat in `.planning/milestones/*-phases/`. Following its "All Clear / stop here" branch would have closed 79 live items on a tooling blind spot. | blocking | Never trust the SDK's UAT all-clear after an archive. Glob `.planning/**/*UAT*.md` and `.planning/**/*VERIFICATION*.md` directly and check the archive dirs yourself. |
| `rtk pytest` wrong interpreter | On this machine `rtk pytest` / bare `pytest` resolve to a stray Python 3.14 with a corrupted `nodriver` package → ~24 false collection errors | advisory | Always run `.venv\Scripts\python.exe -m pytest -q` (project venv, Python 3.13). `httpx` is now declared in `requirements.txt`, so the manual install is no longer needed. |
| STATE.md schema drift breaks SDK verbs | STATE.md uses a custom prose schema; `gsd-sdk state.record-session` / `advance-plan` / `roadmap.update-plan-progress` silently no-op or error on it | advisory | Hand-edit STATE.md to match the existing convention when an SDK state verb fails. |
| Module-scope test imports break under `sys.modules` purge | `tests/test_cli_no_fastapi.py:17-19` deletes `core.cli.web` from `sys.modules` to force its lazy-import guard. Any test file that imports from that module at module scope binds a DEAD module object: tests pass in isolation and FAIL in a full-suite run. Cost a real debug cycle. | advisory | In tests touching `core.cli.web` (or any purged module), resolve the module INSIDE each test body and monkeypatch the module object, not a dotted string path. See `tests/test_cli_web_port.py`. |
| Uncommitted work in the session scratchpad | The scratchpad directory (`%TEMP%\claude\...\scratchpad`) was wiped mid-session by something outside the session, destroying two git worktrees and their uncommitted edits. | advisory | Never place a git worktree or any uncommitted work under the scratchpad. Use a durable path such as `E:\repos\ShopPyBot-wt-<name>`. |
| Auto-mode classifier blocks remote mutations | `gh pr merge`, `gh api -X PUT .../branches/master/protection`, and `Write` outside the project dir are all DENIED even with explicit in-chat user approval. | advisory | Do not retry in a different shell to route around it. Hand the operator the exact command to run with the `!` prefix. Also: `gh pr comment --body-file -` (stdin) fails through rtk with "Body cannot be blank" — write the body to a file and pass its path. |

<current_state>
Mid `/gsd:new-milestone` for **v3.0 Resilience + Ecosystem**. Milestone is started: PROJECT.md has the Current Milestone v3.0 section, STATE.md switched to v3.0 (status=planning), both committed (e159f24). `.planning/phases/` is empty (cleared). `.planning/REQUIREMENTS.md` does NOT exist yet (removed at v2.0 close; new-milestone recreates it).
Milestone **v4.2 is COMPLETE and archived**; there is no in-progress GSD phase work. This
session was a post-milestone cross-phase UAT audit that turned up three real defects.

Research-first was chosen. The 4 research agents (Stack/Features/Architecture/Pitfalls) finished and wrote solid v3.0 files. The synthesizer (SUMMARY.md) errored + was stopped — so SUMMARY.md is still the old v1 file.
Working tree is CLEAN. Four commits are local-only on `chore/v4.0-milestone-close`
(`d485710`, `0cebc9e`, `70f31c5`, `f883f13`) and have not been pushed.

`master` has moved: PR #13 merged as `4123059`. **CI is green for the first time in the
project's history** — 755 passed / 2 skipped, identical on `ubuntu-latest` and
`windows-latest`. Branch protection now requires contexts that actually exist.

PR #12 is rebased, all four checks green, `MERGEABLE` / `CLEAN`, awaiting an operator merge.
</current_state>

<completed_work>

- v3.0 scope gathered: all four areas, FULL (anti-detection hardening, plugin ecosystem, price monitoring, stability/polish)
- PROJECT.md updated (Current Milestone v3.0 + Active reqs) — committed e159f24
- STATE.md switched to v3.0 — committed e159f24
- Research: STACK.md, FEATURES.md, ARCHITECTURE.md, PITFALLS.md written (committed in this WIP)
- Cross-phase UAT audit: 80 outstanding items across 66 files, found in the archive dirs
- Claude-in-Chrome handoff doc authored, delivered, and executed
- Live browser UAT sweep: **13 PASS / 1 FAIL / 5 BLOCKED / 2 PARTIAL**
- SEED-003 planted (`d485710`): remote plugin manager, third-party disclaimer, extensibility
- Port auto-select for `shoppybot web` + 18 tests (`0cebc9e`)
- UAT verdicts recorded into 11 phase artifacts (`70f31c5`), +246/-40, frontmatter validated
- STATE.md session record (`f883f13`)
- **PR #13 MERGED** (`4123059`): CI compile fix + dependency install + `httpx`
- **PR #12 open and green**: `_register_signals` main-thread guard + 4 regression tests
- Operator closed: A1 PVR, A2 Actions allowlist, A4 CodeQL, A6 wiki, A7 sign-off, branch protection
- `31-HV-1` (gitleaks) and `31-HV-2` (CodeQL) flipped to PASS — first greens ever for both
</completed_work>

<remaining_work>

1. **Synthesize v3.0 SUMMARY.md** — re-spawn `gsd-research-synthesizer` (sonnet) over the 4 files; overwrite the stale SUMMARY.
2. **Define requirements** (new-milestone.md step 9) — scope each area via AskUserQuestion multiselect; write `.planning/REQUIREMENTS.md` with new REQ-IDs (continue ANTI-04+; new categories e.g. PRICE-/ECO-/STAB-); commit.
3. **Create roadmap** (step 10) — spawn `gsd-roadmapper`, **start phase numbering at 12**. Research build order: 12 anti-detect infra → 13 price (parallelizable) → 14 ecosystem/metadata → 15 BotService+front-ends → 16 stability. Approve, commit.
4. **Link pending todos** (step 10.5), then done banner.
1. Merge PR #12 (operator; classifier blocks agent merges)
2. Push the 4 local commits on `chore/v4.0-milestone-close`
3. Decide on PR #11 (264 commits)
4. Unpause Dependabot, then re-check `31-HV-3` (7 alerts, #6-#12)
5. Re-test `27-HV-2`, `28-HV-1`, `28-HV-2` running-half once PR #12 lands
6. `10-HV-3` / `MC-4`: needs a `--host 0.0.0.0` restart
7. `29-HV-5`: needs a DevTools source breakpoint
8. `MC-1` / `MC-2`: Windows TTY checks, the only two items with zero prerequisites
9. Repair 12 drifted UAT docs — three produce FALSE PASSES as written
10. Fix the `docs/PLUGIN_REGISTRY.md` example row (`hard` vs the inherited `medium`)
</remaining_work>

<decisions_made>

- v3.0 = all four areas, FULL (major release).
- Research-first.
- Only ONE new dep across the milestone: `2captcha-python 2.0.7` (AsyncTwoCaptcha, MIT). Proxy/fingerprint/price/wiki = zero new deps.
- Walmart/Target use behavioral bot managers (HUMAN/Akamai), NOT CAPTCHA-solvable — keep manual-pause for those.
- `core/browser_factory.py` = shared hook for proxy/fingerprint/CAPTCHA; ABC `setup()` default calls it; per-plugin migration, zero forced rewrites of the 7 plugins.
- New secrets via CredentialStore SECRET_KEYS (TWOCAPTCHA_API_KEY, CAPSOLVER_API_KEY, PROXY_USERNAME, PROXY_PASSWORD); CAPTCHA opt-in default false (like SMS gate); price-drop dedup uses SEPARATE DB columns from stock dedup.
- Wiki Plugin Registry published **headers-only**: `last-verified` means confirmed against a
live retail site, no plugin ever has been (`19-UAT-1`), so any date would be fabricated
- **PVR is the sole security-report channel**; no maintainer email published (`32-HV-1`)
- `_register_signals` fixed with a **main-thread guard**, not a widened `except`: signal
disposition is process-level and main-thread-only on both platforms, and the threaded path
already has `BotService.stop()` for cooperative cancellation
- Branch protection requires `test (ubuntu-latest)`, `test (windows-latest)`, `CodeQL`.
Kept the stable `CodeQL` aggregate over `Analyze (python)`, which PR #11 renames to
`Analyze (python, none)` via `build-mode` — requiring the old name would permanently block
- `httpx==0.28.1` added to `requirements.txt` rather than a new extra
</decisions_made>

<blockers>
- v3.0 SUMMARY.md not generated (synthesizer errored). Workaround: regenerate first thing on resume.
- **Agent cannot merge PRs or write branch protection** — operator runs them with `!`
- **`31-HV-3` will not drain** — two causes: remediating bumps live on
`chore/v4.0-milestone-close` (needs PR #11), and Dependabot is repo-level PAUSED
- **PR #11 `mergeStateStatus` reads UNKNOWN** — re-query after PR #12 lands
</blockers>

## Required Reading (in order)
1. `.planning/HANDOFF.json` — structured state mirror of this file.
2. `.planning/research/STACK.md`, `FEATURES.md`, `ARCHITECTURE.md`, `PITFALLS.md` — the real v3.0 research (NOT SUMMARY.md until regenerated).
3. `$HOME/.claude/get-shit-done/workflows/new-milestone.md` — resume at step 9.

## Critical Anti-Patterns (do NOT repeat these)
- Stale-SUMMARY consumption → regenerate SUMMARY.md before reading it (see blocking table above).
1. `.planning/STATE.md` → "UAT Audit Session — 2026-08-01" — full verdict table, the three
defects, operator actions closed, outstanding items, and the documentation-drift list
2. `.planning/HANDOFF.json` — machine-readable state for `/gsd:resume-work`
3. `.planning/seeds/SEED-003-*.md` — will surface at the next `/gsd:new-milestone`
4. Phase artifacts under `.planning/milestones/*/` — each now carries real verdicts with
evidence instead of `[pending]`

## The three defects (context for anyone resuming)

None were caught by any test or milestone review. All three were invisible for the same
reason: nothing exercised them.

1. **Dashboard Start Bot never worked.** `core/orchestrator.py:_register_signals` calls
`signal.signal()` off the main thread; `BotService.start()` runs `async_main` in a daemon
thread, so it raised `ValueError` at `async_main`'s fifth statement and the bot loop died
before plugin setup — while `POST /api/bot/start` still returned 200 and the UI showed
nothing. The CLI path masked it by running on the main thread. Fixed in PR #12.
2. **CI never compiled.** `${{ runner.temp }}` in job-level `env:`, where the `runner`
context does not exist. 81 runs, 81 failures, zero jobs scheduled, no logs — it reads like
a flaky runner, not a syntax error. Introduced by `0e0e43f`, the only commit that ever
touched the file. Fixed in PR #13.
3. **CI never installed dependencies.** The install step ran only `pip install -e .[web]`,
but `pyproject` declares just `platformdirs`; pytest and every runtime dep live in
`requirements.txt`, which CI never installed. Fixed in PR #13.

**Consequence worth carrying forward:** v2.0 through v4.2 were all archived under a
definition of done that included "CI-green." That was never true, and the suite had only
ever run on one Windows machine. It does pass identically on Linux, so no code defect
follows — but the claim was unearned, and the same audit trail should not be trusted for
other "verified" assertions without a spot check.

## Infrastructure State
- Branch master, ahead of origin by e159f24 + this WIP commit. Not pushed.
- Bash tool is bash (use /dev/null, not $null). Commit via `gsd-sdk query commit`. No Claude co-author trailer (user CLAUDE.md).
- Test baseline (v2.0): 354 passed, 2 skipped — run pytest from repo root.

- **Dashboard server** may still be running in the background on `http://127.0.0.1:8001`
(started via `shoppybot web`, auto-incremented off 8000). Kill it when done.
- **Port 8000** belongs to an unrelated project (`E:\repos\MMFManager` uvicorn backend). Do
not evict it; `shoppybot web` now auto-increments.
- **Seeded test data** is in the real runtime DB at `C:\Users\brand\AppData\Local\shoppybot\`:
items "Seed Amazon Item" / "Seed BestBuy Item", one confirmed order
`112-3456789-0000001`, 24 Amazon price points, and ~612 seeded log lines in today's log.
**This is fixture data, not real activity.** Clear it before any production use.
- **Worktree** at `E:\repos\ShopPyBot-wt-sig` (branch `fix/signal-handler-main-thread`).
`git worktree remove` it once PR #12 merges. `E:\repos\ShopPyBot-wt-cifix` can go now —
PR #13 is merged.

<context>
Everything is healthy except the one synthesizer error. The research is strong and converges on a clean 12→16 build order. Resume is mechanical: regenerate SUMMARY → requirements scoping (per-area multiselect) → roadmapper (start phase 12) → approve/commit.
The session started as a routine "check UAT status" and the tool said there was nothing to
do. That was wrong, and chasing why produced everything else. The pattern worth repeating:
when an automated all-clear disagrees with a documented backlog, verify the tool's scope
before believing it.

Three of the defects found were only reachable by actually running things — the dashboard in
a real browser, the workflow on a real runner. Static review and a green local test suite had
been consistent with all three being fine for months.
</context>

<next_action>
Start with: re-spawn `gsd-research-synthesizer` (model sonnet) to overwrite `.planning/research/SUMMARY.md` from STACK/FEATURES/ARCHITECTURE/PITFALLS, verify its content is v3.0 (mentions proxy/CAPTCHA/price), then continue new-milestone.md step 9 (Define Requirements).
Ask the operator to run:
! gh pr merge 12 --repo thezoid/ShopPyBot --squash --delete-branch

Then offer to push the 4 local commits on `chore/v4.0-milestone-close`, and pull PR #11's
merge-readiness now that branch protection requires satisfiable contexts.
</next_action>
Loading