Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
288 commits
Select commit Hold shift + click to select a range
bdeb375
docs(phase-02.1): validate Nyquist coverage - 12 task groups mapped, …
alexandermayes Sep 15, 2026
5f0c721
docs(phase-02.1): add security threat verification - 45 threats close…
alexandermayes Sep 15, 2026
1e4dab3
docs(02.1): mark verification passed after human UAT (2/2) and verify…
alexandermayes Sep 15, 2026
adf4ca8
docs(02.1): complete phase 02.1 - transition to Phase 3, evolve PROJE…
alexandermayes Sep 15, 2026
c4e25b5
docs(03): capture phase context
alexandermayes Sep 15, 2026
45d87a6
docs(state): record phase 3 context session
alexandermayes Sep 15, 2026
0d56457
docs(03): research phase domain (Share Loop)
alexandermayes Sep 15, 2026
66660b4
docs(phase-3): add validation strategy
alexandermayes Sep 15, 2026
bda3b8e
docs(03): create phase plan
alexandermayes Sep 16, 2026
9effcbe
docs(03): create phase plan
alexandermayes Sep 16, 2026
823f4d4
feat(03-01): end-to-end awards card via view=awards on /og and genera…
alexandermayes Sep 16, 2026
cad9227
test(03-01): add failing test for share-link builders and parseShareRef
alexandermayes Sep 16, 2026
93ac202
feat(03-01): implement normalized share-link builders and parseShareRef
alexandermayes Sep 16, 2026
a70268f
docs(03-01): complete end-to-end awards tracer + share-link contract …
alexandermayes Sep 16, 2026
cf0092e
feat(03-02): fill award pool to fifteen conditionally-triggered rules
alexandermayes Sep 16, 2026
05b11c7
test(03-02): lock pool-wide invariants for the fifteen-rule award pool
alexandermayes Sep 16, 2026
2e51fe4
docs(03-02): complete award pool + pool-invariants plan
alexandermayes Sep 16, 2026
ec8221a
docs(03-02): complete fill-the-award-pool-to-fifteen-rules plan
alexandermayes Sep 16, 2026
647bb16
feat(03-03): add Kill/Wipe, fight length, vs-top-N and proof line rec…
alexandermayes Sep 16, 2026
8e0b853
feat(03-03): Share my parse becomes the primary action on the player …
alexandermayes Sep 16, 2026
7502190
docs(03-03): complete player-permalink-receipts-and-share-my-parse plan
alexandermayes Sep 16, 2026
8279c6b
docs(03-03): update state and roadmap after player-permalink-receipts…
alexandermayes Sep 16, 2026
900373a
feat(03-04): Raid tab awards panel with the real inline OG preview
alexandermayes Sep 16, 2026
44c937b
feat(03-04): normalize header Share, retire bottom bar, feed the panel
alexandermayes Sep 16, 2026
6c1d3c4
feat(03-04): landing rules and the inbound attribution funnel
alexandermayes Sep 16, 2026
8752937
docs(03-04): complete awards-panel-share-normalization-and-landing-at…
alexandermayes Sep 16, 2026
13a8466
docs(03-05): protected-elements checklist naming every share-loop sur…
alexandermayes Sep 16, 2026
29fa61e
feat(03-05): scripts/protected-elements.mjs — the machine check for t…
alexandermayes Sep 16, 2026
d658762
docs(03-05): wire protected-elements and the share-rate query into OP…
alexandermayes Sep 16, 2026
2c87af3
docs(03-05): add plan summary
alexandermayes Sep 16, 2026
41109cf
docs(03-05): complete protected-elements-checklist plan
alexandermayes Sep 16, 2026
4409a0a
fix(03-06): scope eslint to application code so the OPS-01 local gate…
alexandermayes Sep 16, 2026
840b05f
docs(03-06): open Part 5 with the Phase 3 preview-half local gate evi…
alexandermayes Sep 16, 2026
de3b001
docs(03-06): record preview deploy evidence and developer-review back…
alexandermayes Sep 16, 2026
84e67ae
docs(03-06): add plan summary
alexandermayes Sep 16, 2026
adaea2f
docs(03-06): complete preview-deploy-and-developer-review plan
alexandermayes Sep 16, 2026
f7c17f6
docs(03-07): record production deploy, post-deploy contracts, and PEN…
alexandermayes Sep 16, 2026
441bfd1
docs(03-07): record counted item-7 and share-rate evidence — Part 5 l…
alexandermayes Sep 16, 2026
f66faa3
docs(03-07): complete production-deploy-and-honest-close-out plan
alexandermayes Sep 16, 2026
a580ddd
docs(03-07): complete production-deploy-and-honest-close-out plan
alexandermayes Sep 16, 2026
2571983
docs(03): add phase verification report — gaps_found (OPS-01 gate open)
alexandermayes Sep 16, 2026
55973e6
docs(03): add code review report
alexandermayes Sep 16, 2026
3df9f26
docs(03): plan OPS-01 gap closure — 03-08 through 03-10
alexandermayes Sep 16, 2026
48118e6
docs(03): record gap-closure planning complete — 10 plans, ready to e…
alexandermayes Sep 16, 2026
4382152
docs(03-08): record homepage Search Console row end-to-end (row 4)
alexandermayes Sep 18, 2026
19609aa
docs(03-08): record analyze-route Search Console rows and developer b…
alexandermayes Sep 18, 2026
8bc5b21
docs(03-08): complete OPS-01 gap closure — Search Console and backsto…
alexandermayes Sep 18, 2026
45dd1a3
docs(03-08): complete OPS-01 gap closure plan — Search Console and ba…
alexandermayes Sep 18, 2026
7a06fd6
docs(03-09): record re-measured item-7 result and RESEARCH A3 closure
alexandermayes Sep 18, 2026
eaa4287
docs(03-09): complete item-7 re-measure and RESEARCH A3 closure plan
alexandermayes Sep 18, 2026
a62db4b
docs(03-09): append self-check results to plan summary
alexandermayes Sep 18, 2026
633437c
docs(03-09): complete item-7 re-measure plan
alexandermayes Sep 18, 2026
f737a64
docs(03-10): append Part 5 close-out and Phase 3 SIGNED sign-off
alexandermayes Sep 19, 2026
1d43ef7
docs(03-10): carry Phase 3 sign-off into REQUIREMENTS and WINDOWS led…
alexandermayes Sep 19, 2026
24fb985
docs(03-10): complete OPS-01 Phase 3 gate close-out plan
alexandermayes Sep 19, 2026
60709f3
test(03): persist re-verification report and human verification items…
alexandermayes Sep 19, 2026
fc21ae2
test(03): complete UAT - 3 passed, 0 issues
alexandermayes Sep 19, 2026
1287841
docs(03): add security threat verification - 50 threats closed, 0 open
alexandermayes Sep 19, 2026
c3f5660
docs(03): complete Phase 3 transition — verification passed, PROJECT/…
alexandermayes Sep 19, 2026
b495b17
docs(research): add WoW Forever support deep-dive and ParseForge rank…
alexandermayes Sep 19, 2026
f09a77f
docs(roadmap): fold R0 contract scope into Phase 4, add Phase 8 WoW F…
alexandermayes Sep 19, 2026
ca1c2f5
docs(04): capture phase context
alexandermayes Sep 19, 2026
aaaf7c0
docs(state): record phase 4 context session
alexandermayes Sep 19, 2026
bedfa15
docs(04): research phase domain
alexandermayes Sep 19, 2026
1b52030
docs(phase-4): add validation strategy
alexandermayes Sep 19, 2026
1b6663f
docs(04): create phase plan
alexandermayes Sep 19, 2026
d5448df
docs(04): preserve the Phase 3 share funnel in the ad placement plan
alexandermayes Sep 19, 2026
da5b0b5
docs(04): create phase plan
alexandermayes Sep 19, 2026
91f40f0
feat(04-02): record rankings-report and rankings-ratelimit fixtures (…
alexandermayes Sep 20, 2026
4ff614b
test(04-02): add failing shape assertions for boss-leaderboard/charac…
alexandermayes Sep 20, 2026
4dbb6fe
feat(04-02): record boss-leaderboard, character and zone-bracket fixt…
alexandermayes Sep 20, 2026
4454b03
feat(04-02): record guild fixture with explicit public-guild choice a…
alexandermayes Sep 20, 2026
0832091
fix(04-02): add _provenance to rankings-report.json and rankings-rate…
alexandermayes Sep 20, 2026
6202519
docs(04-02): complete WCL rankings fixtures plan
alexandermayes Sep 20, 2026
8168c45
test(04-04): add failing tests for rankings parse-lens (RED)
alexandermayes Sep 20, 2026
3239b43
feat(04-04): rankings blob types and pure parse-lens engine (GREEN)
alexandermayes Sep 20, 2026
9323d6d
test(04-04): add failing tests for WCL rate-budget gate (RED)
alexandermayes Sep 20, 2026
1439f37
feat(04-04): WCL rate-budget gate on the existing Redis cache (GREEN)
alexandermayes Sep 20, 2026
e4896a3
docs(04-04): complete rankings blob types + parse lens + budget gate …
alexandermayes Sep 20, 2026
9031c2e
docs(04-01): capture WCL Terms and API docs; defer approval request (…
alexandermayes Sep 21, 2026
1dd03d6
docs(04-01): capture pre-ad CWV baseline into OPS-01 Part 6 (D-09)
alexandermayes Sep 21, 2026
09eee20
docs(04-01): write rollback trigger, runbook and escalation clocks in…
alexandermayes Sep 21, 2026
6391045
docs(04-01): complete WCL ToS capture + pre-ad CWV baseline plan
alexandermayes Sep 21, 2026
10b9ff1
test(04-03): add failing test for the ad gate, slot table and consent…
alexandermayes Sep 21, 2026
3792944
feat(04-03): wire one reserved, consent-gated AdSense slot end-to-end
alexandermayes Sep 21, 2026
4442711
feat(04-03): add report-only CSP entries for Google ad hosts and /ads…
alexandermayes Sep 21, 2026
15e1c8f
feat(04-03): teach protected-elements to enforce the ad slot whitelist
alexandermayes Sep 21, 2026
5727f96
docs(04-03): complete phase tracer — reserved consent-gated ad slot plan
alexandermayes Sep 21, 2026
ec90b2e
feat(04-05): expand the tracer to the full D-02 ad placement map
alexandermayes Sep 21, 2026
c706f87
feat(04-05): rewrite /privacy for the present-tense advertising discl…
alexandermayes Sep 21, 2026
c2169ab
feat(04-05): wire the four AdSense unit ids and record account config…
alexandermayes Sep 21, 2026
a7e0e31
docs(04-05): complete full D-02 ad placement map, /privacy disclosure…
alexandermayes Sep 21, 2026
3a5be52
docs(04-05): complete full D-02 ad placement, /privacy disclosure and…
alexandermayes Sep 21, 2026
96d46b6
docs(04-06): capture the full local gate + PostHog grep evidence for …
alexandermayes Sep 21, 2026
b375188
docs(04-06): preview deploy, netlog proof both directions, and a real…
alexandermayes Sep 21, 2026
23dcd09
docs(04-06): automated half of the Task 3 developer review, plus two …
alexandermayes Sep 21, 2026
249058e
fix(04-06): render ad boxes at declared breakpoint sizes and hide unf…
alexandermayes Sep 21, 2026
349c2e9
fix(04-06): allowlist AdSense traffic-quality hosts in the report-onl…
alexandermayes Sep 21, 2026
8b6e366
docs(04-06): re-verify corrected ad boxes on the second preview
alexandermayes Sep 21, 2026
1ee59ba
docs(04-06): log the blocked preview re-verification to WINDOWS #14
alexandermayes Sep 21, 2026
cfb6d05
fix(04-06): hide reserved ad wrapper until a confirmed filled frame; …
alexandermayes Sep 22, 2026
2900e05
docs(04-06): diagnose and re-fix the white unfilled ad frame (third p…
alexandermayes Sep 22, 2026
cd623c6
fix(04-06): match the occluding ad cover to the page's noise-textured…
alexandermayes Sep 22, 2026
470fb46
docs(04-06): numeric grain-match verification and fourth preview
alexandermayes Sep 22, 2026
0fa6c75
docs(04-06): complete preview verification plan (4-round defect fix l…
alexandermayes Sep 22, 2026
1ea1a05
docs(04-06): complete plan tracking
alexandermayes Sep 22, 2026
cc931c0
docs(04-07): record RPGLogs correspondence state and the developer's …
alexandermayes Sep 22, 2026
0b9a8cc
docs(04-07): record production deploy and post-deploy route-contract …
alexandermayes Sep 22, 2026
b7b5f4f
docs(04-07): record post-deploy OPS-01 evidence, sign-off row, and Ph…
alexandermayes Sep 22, 2026
6bc6b4e
docs(04-07): complete post-deploy OPS-01 evidence plan
alexandermayes Sep 22, 2026
0541a1e
test(04): persist human verification items as UAT
alexandermayes Sep 22, 2026
1836bed
fix(04): stop AdSlot re-pushing an already-loaded AdSense unit on cli…
alexandermayes Sep 22, 2026
39e0597
docs(04): record AdSlot hotfix in OPS-01 ship gate Part 6
alexandermayes Sep 22, 2026
b9d0fb3
fix(04): stop AdSlot latching a provisional TCF timeout as a permanen…
alexandermayes Sep 22, 2026
9911eae
docs(04): correct hotfix #1 severity framing, record hotfix #2 in OPS…
alexandermayes Sep 22, 2026
6e57745
docs(04): record hotfix deploy to production
alexandermayes Sep 22, 2026
d7321f6
docs(05): capture phase context
alexandermayes Sep 23, 2026
0aa7387
docs(state): record phase 5 context session
alexandermayes Sep 23, 2026
ef7cbe1
docs(05): UI design contract
alexandermayes Sep 23, 2026
4dcaa57
docs(05): UI-SPEC checker sign-off (7/7 dimensions passed)
alexandermayes Sep 23, 2026
167e90b
docs(05): research phase domain (Discord webhook, footer cross-promo)
alexandermayes Sep 23, 2026
f6c353c
docs(phase-05): add validation strategy
alexandermayes Sep 23, 2026
d846c35
docs(05): create phase plan — 4 plans, 3 waves (tracer-first Discord …
alexandermayes Sep 23, 2026
c479d76
docs(05): create phase plan
alexandermayes Sep 23, 2026
4b39df2
docs(state): begin phase 05 execution
alexandermayes Sep 24, 2026
14778bf
chore(config): disable worktree isolation — branch is 162 commits beh…
alexandermayes Sep 24, 2026
4c010d9
docs(05-01): record the dedicated ParseForge Discord server
alexandermayes Sep 24, 2026
fc99f62
test(05-01): add failing tests for the Discord auto-post tracer
alexandermayes Sep 24, 2026
7655a8c
feat(05-01): implement the Discord auto-post tracer end-to-end
alexandermayes Sep 24, 2026
34a25c0
docs(05-01): record real-preview tracer evidence, close out plan
alexandermayes Sep 24, 2026
981fda9
docs(05-01): complete tracer plan — update state/roadmap tracking
alexandermayes Sep 24, 2026
76ba460
test(05-02): add failing tests for the cross-promo link contract
alexandermayes Sep 25, 2026
b6fe7a0
feat(05-02): add the cross-promo link contract (lib/cross-promo.ts)
alexandermayes Sep 25, 2026
6852713
feat(05-02): mount a site-wide Footer with instrumented cross-promo l…
alexandermayes Sep 25, 2026
45b66e1
fix(05-02): drop unused import in cross-promo.test.ts
alexandermayes Sep 25, 2026
39b4bac
docs(05-02): resolve the two-Discord-links collision on the homepage
alexandermayes Sep 25, 2026
fd08ea3
docs(05-02): complete site-wide cross-promo footer plan
alexandermayes Sep 25, 2026
bc35038
docs(05-03): write the Discord seed kit for day-one content
alexandermayes Sep 25, 2026
2e59245
docs(05-03): complete LootList+ cross-promo and Discord seed kit plan
alexandermayes Sep 25, 2026
74c3768
docs(05-03): remediate sister-repo branch contamination (WINDOWS #22)
alexandermayes Sep 25, 2026
77a2182
docs(05-04): pre-deploy gate — run Part 1 top to bottom, open Part 7
alexandermayes Sep 25, 2026
52bad34
docs(05-04): record ParseForge production deploy (Task 2, half-complete)
alexandermayes Sep 25, 2026
bd9a728
docs(05-04): remediate second LootList+ branch contamination (WINDOWS…
alexandermayes Sep 25, 2026
259b037
docs(05-04): record LootList+ merge + live deploy (WINDOWS #25 fixed)
alexandermayes Sep 25, 2026
5113ef6
docs(05-04): post-deploy evidence — footer live, auto-post proven, SE…
alexandermayes Sep 25, 2026
f692829
docs(05-04): complete ship gate plan — mark COMM-01, COMM-02, SHARE-0…
alexandermayes Sep 25, 2026
0270007
test(05): complete UAT - 15 passed, 0 issues
alexandermayes Sep 26, 2026
f92e670
docs(05): add code review report
alexandermayes Sep 26, 2026
17900e6
test(05): persist human verification items as UAT
alexandermayes Sep 26, 2026
49ae84c
test(05): complete UAT - 16 passed, 1 issues
alexandermayes Sep 27, 2026
e8d13b5
docs(05): add root causes from diagnosis
alexandermayes Sep 27, 2026
62d6428
docs(05): create gap closure plans 05-05..05-08 for G-05-16
alexandermayes Sep 27, 2026
8ebbed4
docs(05): record developer decisions for G-05-16
alexandermayes Sep 27, 2026
29d62d3
test(05-05): add failing test for analyze-only Discord announce trigger
alexandermayes Sep 28, 2026
6979f2f
feat(05-05): move the Discord announce trigger off getReportMeta onto…
alexandermayes Sep 28, 2026
38e63fd
test(05-05): lock the announce trigger's single call site and the inv…
alexandermayes Sep 28, 2026
d6c37e4
docs(05-05): complete analyze-only Discord announce trigger plan
alexandermayes Sep 28, 2026
bd0ec97
docs(05-06): record G-05-16 decisions, open WINDOWS row, reconcile DI…
alexandermayes Sep 28, 2026
d80c37f
docs(05-06): rewrite Discord seed kit into a new-member setup checklist
alexandermayes Sep 28, 2026
1da2d77
docs(05-06): complete Discord decision record + new-member setup chec…
alexandermayes Sep 28, 2026
d4ee373
feat(05-07): record the Discord new-member refresh and switch to the …
alexandermayes Sep 28, 2026
b50b76c
docs(05-07): complete Discord new-member refresh recording plan
alexandermayes Sep 28, 2026
35226c8
docs(05-07): complete Discord new-member refresh plan
alexandermayes Sep 28, 2026
ca11326
docs(05): rewrite Discord server copy in ParseForge's voice
alexandermayes Sep 28, 2026
1d47830
docs(05): record #log-review, #changelog and Bug Hunter role
alexandermayes Sep 28, 2026
b4b8be0
docs(05): record 2026-09-28 decisions D-11 (crawler filter + purge), …
alexandermayes Sep 28, 2026
0ef0e42
docs(05): plan 05-09 crawler filter, amend 05-08 (trigger proof + pur…
alexandermayes Sep 28, 2026
85a9aae
test(05-09): add failing test for crawler filter on Discord announce …
alexandermayes Sep 28, 2026
7eaea81
feat(05-09): gate Discord announce trigger on a pure crawler classifier
alexandermayes Sep 28, 2026
0395af2
test(05-09): add failing tests for the full crawler label table
alexandermayes Sep 28, 2026
135b888
feat(05-09): classify every crawler label and document the gate
alexandermayes Sep 28, 2026
0490b69
docs(05-09): complete crawler filter for Discord announce trigger plan
alexandermayes Sep 28, 2026
fd8e9ba
docs(05-08): pre-deploy gate, baseline and G-05-16 addendum for the c…
alexandermayes Sep 28, 2026
6a1e31e
docs(05-08): record production deploy go-ahead and deploy record
alexandermayes Sep 28, 2026
883ab6a
feat(05-08): prove the crawler filter on production (D-11 (a))
alexandermayes Sep 28, 2026
5f60854
docs(05-08): record deferred #announcements purge and blocked #change…
alexandermayes Sep 28, 2026
c809587
docs(05-08): complete G-05-16 gap closure deploy plan (purge deferred)
alexandermayes Sep 28, 2026
ccb3a73
test(05-10): add failing test for role-picker signed tap
alexandermayes Sep 28, 2026
99b5ecc
feat(05-10): implement role-picker interactions endpoint
alexandermayes Sep 28, 2026
f7fa0ae
test(05-10): add failing tests for the hardened interaction branches
alexandermayes Sep 28, 2026
8165d97
feat(05-10): harden every interaction branch, rate-limit per member, …
alexandermayes Sep 28, 2026
abfa16e
docs(05-10): record Task 3-4 deploy, endpoint switch, retirement and …
alexandermayes Sep 28, 2026
fdfb298
docs(05-10): complete Discord role picker deploy record plan
alexandermayes Sep 28, 2026
09ba1da
docs(05-10): correct #changelog status to posted
alexandermayes Sep 28, 2026
c07fdfc
docs(05): add code review report
alexandermayes Sep 28, 2026
5113744
test(05): persist gap-closure human verification items as UAT (tests …
alexandermayes Sep 28, 2026
ee5280c
docs(05): record phase 05 position after gap-closure verification (hu…
alexandermayes Sep 28, 2026
c0a0f36
docs(05.1): capture phase context
alexandermayes Sep 28, 2026
51a8db7
docs(state): insert phase 05.1 and record context session
alexandermayes Sep 28, 2026
4b17f5d
docs(05.1): research Discord bot LootList+ parity
alexandermayes Sep 28, 2026
297cb98
docs(phase-05.1): add validation strategy
alexandermayes Sep 28, 2026
f349d20
docs(05.1): create phase plan — 10 plans, 9 waves (feedback-loop trac…
alexandermayes Sep 29, 2026
f4579c8
test(05.1-02): add failing test for authenticated bot rate-limit lane
alexandermayes Sep 29, 2026
b9986d4
feat(05.1-02): add authenticated bot rate-limit lane, wire /api/analyze
alexandermayes Sep 29, 2026
423edc6
test(05.1-02): prove the bot rate-limit lane fails closed and never l…
alexandermayes Sep 29, 2026
761510e
feat(05.1-02): wire raid-overview and report routes to the bot rate-l…
alexandermayes Sep 29, 2026
e21ed6b
docs(05.1-02): complete authenticated bot rate-limit lane plan
alexandermayes Sep 29, 2026
d8cfffc
feat(05.1-01): end-to-end feedback tracer — forum post to GitHub issu…
alexandermayes Sep 29, 2026
622816b
test(05.1-01): harden the feedback tracer — name-free sanitising, cla…
alexandermayes Sep 29, 2026
3a29d8f
docs(05.1-01): complete ParseForge Discord bot feedback tracer plan
alexandermayes Sep 29, 2026
4d7a566
docs(05.1-01): record Task 1 package-gate transcript and verbatim app…
alexandermayes Sep 29, 2026
391ff7f
feat(05.1-03): Railway deploy config, bot preflight/bot-channels/thre…
alexandermayes Sep 29, 2026
f24f8e3
docs(05.1-03): record the private #ops and feedback forum ids
alexandermayes Sep 29, 2026
0300356
fix(05.1-03): preflight reports the limited Message Content flag as on
alexandermayes Sep 30, 2026
baf4ce1
docs(05.1-03): record the production feedback-loop tracer proof
alexandermayes Oct 1, 2026
ccf1681
docs(05.1-03): complete ParseForge Discord bot production tracer plan
alexandermayes Oct 1, 2026
f3ef498
feat(05.1-04): Zev's reaction intake, Claude titles, duplicate hints,…
alexandermayes Oct 1, 2026
e6ceaa6
feat(05.1-04): closure lifecycle — resolution note, reopen, private #…
alexandermayes Oct 1, 2026
7d94724
feat(05.1-04): daily #ops digest and the duplicate-proof forum backfill
alexandermayes Oct 1, 2026
b517e26
docs(05.1-04): complete ParseForge Discord bot — LootList+ parity (fe…
alexandermayes Oct 1, 2026
a588088
docs(05.1-04): update STATE/ROADMAP after the feedback-half plan
alexandermayes Oct 1, 2026
7375e62
feat(05.1-05): gateway-native role picker answers #welcome's buttons
alexandermayes Oct 1, 2026
4f6fe0f
test(05.1-05): root drift gate for the generated bot role table
alexandermayes Oct 1, 2026
a859cc7
docs(05.1-05): complete ParseForge Discord bot role-picker plan
alexandermayes Oct 1, 2026
39b8c6a
docs(05.1-05): update STATE/ROADMAP after the role-picker plan
alexandermayes Oct 1, 2026
f2c9026
test(05.1-06): add failing tracer test for /analyze spend guard + bot…
alexandermayes Oct 1, 2026
be08d45
feat(05.1-06): /analyze back as a metered reply in the bot's authenti…
alexandermayes Oct 1, 2026
43864b4
test(05.1-06): add limits/api unit tests + failing /raid and link-rep…
alexandermayes Oct 1, 2026
c4de58a
feat(05.1-06): /raid + fight-link replies back behind the spend guard
alexandermayes Oct 1, 2026
9fef58e
docs(05.1-06): add plan summary for the bot spend guard + authenticat…
alexandermayes Oct 1, 2026
34fd616
docs(05.1-06): update STATE/ROADMAP after the spend-guard plan
alexandermayes Oct 1, 2026
24df4a7
feat(05.1-07): /help answers product questions, redirects or hands of…
alexandermayes Oct 1, 2026
b375be0
feat(05.1-07): seed the /help knowledge base from ParseForge's own co…
alexandermayes Oct 1, 2026
0ff18ea
feat(05.1-07): grow the /help KB through Zev-reviewed drafts in #ops
alexandermayes Oct 1, 2026
17dc60e
docs(05.1-07): complete /help plan
alexandermayes Oct 1, 2026
5cb2ba3
feat(05.1-08): forum-opening/archive tooling, D-16 limits, pre-deploy…
alexandermayes Oct 1, 2026
a1f48ad
docs(05.1-08): record the go-live decision
alexandermayes Oct 2, 2026
d9d8ec6
feat(05.1-08): go live — open #feedback forum, archive the old channel
alexandermayes Oct 2, 2026
912efb6
docs(05.1-08): complete go-live deploy plan
alexandermayes Oct 2, 2026
8fa641b
feat(05.1-09): --clear flag, pre-cutover gate, and the written relay
alexandermayes Oct 2, 2026
a09b840
docs(05.1-09): record cutover go-ahead decision (deploy 3)
alexandermayes Oct 2, 2026
07af436
docs(05.1-09): record Task 3 step a — key added, deploy blocked
alexandermayes Oct 2, 2026
a16f48c
docs(05.1-09): record Task 3 step a completion and step b — endpoint …
alexandermayes Oct 2, 2026
b58b5e2
docs(todo): capture Discord reorganize + make-it-more-fun idea for af…
alexandermayes Oct 2, 2026
9c524e9
feat(05.1-09): cut over — picker tap passed, key re-issued, commands on
alexandermayes Oct 3, 2026
bfc591a
docs(05.1-09): complete the cutover relay plan
alexandermayes Oct 3, 2026
eb3ebc3
feat(05.1-10): remove the interactions route, its library, tests and …
alexandermayes Oct 12, 2026
6a55873
docs(05.1-10): record the retire-route decision for deploy 4
alexandermayes Oct 13, 2026
3409bdc
docs(05.1-10): record the deploy 4 harness block and that nothing ran
alexandermayes Oct 13, 2026
31f23bc
docs(05.1-10): record deploy 4 and its post-deploy probes
alexandermayes Oct 13, 2026
66d6772
docs(05.1-10): record the secret removal, probes, measurement and Pha…
alexandermayes Oct 14, 2026
2f4b260
docs(05.1-10): complete the interactions route retirement plan
alexandermayes Oct 14, 2026
7e7c874
docs(05.1): add phase verification report
alexandermayes Oct 14, 2026
81688f1
docs(05.1): add code review report
alexandermayes Oct 14, 2026
0503421
fix(quick-261013-vma): /raid scores the last kill, not the first pull…
alexandermayes Oct 14, 2026
5062883
fix(quick-261013-vma): /analyze scores the last kill, not the first p…
alexandermayes Oct 14, 2026
a718885
docs(quick-261013-vma): fix CR-01 — bot /analyze and /raid score the …
alexandermayes Oct 14, 2026
8cc9733
test(05.1): fill nyquist gaps and mark the phase validated
alexandermayes Oct 14, 2026
cd0e27a
docs(05.1): add security audit — blocked on 2 high threats
alexandermayes Oct 14, 2026
655055b
docs(05.1): add gap-closure plan 05.1-11 for review warnings and secu…
alexandermayes Oct 14, 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
12 changes: 12 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,15 @@ NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
# Google AdSense publisher ID — builds the Google Privacy & Messaging CMP script URL.
# Public identifier (appears in every visitor's script URL), not a secret.
NEXT_PUBLIC_GOOGLE_CMP_PUB_ID=pub-XXXXXXXXXXXXXXXX

# ParseForge Discord's #announcements incoming webhook URL. A server-only
# secret (no NEXT_PUBLIC_ prefix — never bundled to the client). Leaving this
# blank disables the auto-post feature entirely; no code change needed.
DISCORD_ANNOUNCEMENTS_WEBHOOK_URL=

# D-16: server-only shared secret (at least 32 characters, no NEXT_PUBLIC_
# prefix) that the ParseForge Discord bot on Railway sends in the
# x-parseforge-bot-key header so its calls to /api/analyze, /api/raid-overview
# and /api/report/{code} are limited per Discord member instead of by its one
# shared Railway IP. Leaving it blank keeps every request on the per-IP limits.
BOT_INTERNAL_API_KEY=
22 changes: 17 additions & 5 deletions .planning/PROJECT.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,13 @@ A player pastes a Warcraft Logs URL and instantly gets **accurate**, actionable
- ✓ Healer-relevant analysis: effective HPS / overheal % / uptime from one shared helper on both the player card and the raid Healer Breakdown, plus healer-only suggestion rules thresholded against top healers (ACC-04) — Phase 2
- ✓ Game data as generated truth: `npm run regen-game-data` wago.tools pipeline, three era modules with Classic/TBC-first collision precedence, `lib/cla-constants.ts` a thin re-export, `docs/GAME-DATA-AUDIT.md` as the standing review artifact (ACC-01) — Phase 2
- ✓ Regression net: recorded WCL fixtures drive tests for `cla-engine`, `raid-overview-engine`, `wcl-client`, timeline and healer engines (14 files / 135 tests); a red suite now blocks a deploy in the OPS-01 gate (ACC-02) — Phase 2
- ✓ Phase 2 shipped to production (`dpl_5bwk1fJJNuZXkoC5poPGFZQpGy6c`) after a preview sweep; PR #15 open for review — Phase 2
- ✓ Phase 2 shipped to production (`dpl_5bwk1fJJNuZXkoC5poPGFZQpGy6c`) after a preview sweep; PR #15 merged 2026-09-14 — Phase 2
- ✓ Phase 2 code-review findings (CR-01, WR-01..03) fixed and live (PR #16, 2026-09-14); Phase 2.1 review fixes (CR-01, WR-01..04 incl. `consent_resolved` dedupe) live in `dpl_CDCu1FVfPZcd8dHr4RpLcrHWJcJ5` — Phase 2 / 2.1
- ✓ PostHog capture restored for every non-EEA/UK visitor: server-side geo opt-in via `/api/geo` (`x-vercel-ip-country`, fail-closed to the consent region), no `__tcfapi` dependency; EEA/UK/CH TCF gate byte-for-byte unchanged and confirmed in a real browser (reject / accept / CMP re-confirm, WR-03 dedupe live); every event carries `consent_gate_path` (MONY-01 preserved, OPS-01 re-verified) — Phase 2.1
- ✓ OPS-01 gate hardened: mandatory post-deploy live-traffic check (item 7: HogQL thresholds, zero-events-is-a-FAIL, bounded netlog proof); Phase 1/2 records carry dated append-only addenda; Phase 2.1 signed 2026-09-15 on counted evidence (25 `$pageview` / 3 countries / 25:23 vs Vercel) — Phase 2.1
- ✓ Share loop v2: fight-level roast/award cards (15-rule `computeAwards` pool held to the D-01 tone bar), per-player permalinks whose OG image shows that player's parse, normalized share CTAs reachable on desktop and at phone width, and a `ref=` landing funnel instrumented in PostHog (`share_action` / `share_landing` carrying `consent_gate_path`) — Phase 3
- ✓ `docs/PROTECTED-ELEMENTS.md` checklist + `npm run protected-elements` machine check (6 protected DOM attributes, 4 route/canonical checks, exit 0/1/2 discipline) so Phases 4 and 7 cannot silently regress the share CTA or OG pipeline — Phase 3
- ✓ OPS-01 Phase 3 gate signed (`docs/OPS-01-SHIP-GATE.md` Part 5, 2026-09-19, `sign-now-conditional`): GSC no-regression on `/` and `/analyze/*` with no separately indexed `?view=`/`?ref=` permutation, item-7 live-traffic thresholds re-measured PASS on a full hour; ASVS L1 security review `03-SECURITY.md` 50/50 threats closed — Phase 3

### Active

Expand All @@ -50,7 +56,7 @@ A player pastes a Warcraft Logs URL and instantly gets **accurate**, actionable
- [ ] Indexing plumbing: structured data fixes (FAQPage not detected on `/tbc-audit`), sitemap health, recrawl nudges, internal links

**Viral loop:**
- [ ] Raise share rate from ~2.8% of analyses — share UX, shared-page landing experience
- [ ] Raise share rate from ~2.8% of analyses — share UX and landing funnel shipped in Phase 3; first post-ship reading 0/19 on ~7.5h exposure; confirmatory 7-day re-read due on/after 2026-09-23T09:15Z (WINDOWS #11), then iterate

**Design & UX:**
- [ ] Site-wide design overhaul (via impeccable workflow) — current UI is "super messy"; reference top ~3 closest-matching styles from https://styles.refero.design/; full redesign allowed but must stay recognizably ParseForge (colors/identity preserved)
Expand All @@ -61,7 +67,6 @@ A player pastes a Warcraft Logs URL and instantly gets **accurate**, actionable

**Product quality:**
- [ ] Expand tool capabilities beyond the Phase 2 accuracy work (per-player share image bakes in the healer percentile basis — a `costly` decision to revisit in Phase 3)
- [ ] Close the Phase 2 code-review findings: CR-01 healer suggestions fire when `hasHealing` is false (wrong recommendation, live), WR-01 timeline "player not in fight" check is report-scoped not fight-scoped, WR-02 StrictMode double-fires `timeline_filter_used`, WR-03 stale precedence comment in `game-data.test.ts` (`.planning/phases/02-accuracy-analysis-depth/02-REVIEW.md`)

**Ecosystem & community:**
- [ ] Connect LootList+ ↔ ParseForge (cross-promotion between the two sites)
Expand Down Expand Up @@ -89,7 +94,8 @@ A player pastes a Warcraft Logs URL and instantly gets **accurate**, actionable
- Site-wide CTR is structurally misleading (navigational impressions dominate) — never treat it as a health metric; segment first
- Title template appends " | ParseForge" (13 chars) — child page titles must stay under ~47 chars; always render pages to verify, don't eyeball metadata
- **Next keyword candidate**: `wow log analyzer` (392 impr/28d, pos 3.5, tool intent) — segment before building
- **Known concerns** (from CONCERNS.md): CSP still report-only. *(Resolved Phase 1: PostHog EU consent flow now gated by the Google CMP. Resolved Phase 2: core engines now under a fixture-driven regression net.)* Deferred from Phases 1 and 2: formal ASVS security review — gsd security tooling not installed in this profile; per-plan STRIDE registers exist
- **Known concerns** (from CONCERNS.md): CSP still report-only. *(Resolved Phase 1: PostHog EU consent flow now gated by the Google CMP. Resolved Phase 2: core engines now under a fixture-driven regression net. Resolved Phase 2.1: the Phase 1 CMP gate had silently dropped ~99.9 % of PostHog capture for non-EEA visitors from 2026-09-06 to 2026-09-14 — fixed by server-side geo opt-in; `02.1-DIAGNOSIS.md`.)* Deferred from Phases 1 and 2: formal ASVS security review — gsd security tooling not installed in this profile; per-plan STRIDE registers exist. Phase 2.1's own `02.1-SECURITY.md` was closed at ASVS L1 grep-depth (45 threats, 0 open)
- **Operational carry-forward from Phase 2.1**: the `dpl_CDCu1FVfPZcd8dHr4RpLcrHWJcJ5` redeploy's own OPS-01 item-7 row is unsigned (low-traffic window) — re-measure a busier UTC hour at the Phase 3 gate; a PostHog-vs-Vercel capture gap for BR/SG (likely ad blockers) is a `WINDOWS.md` candidate; `NEXT_PUBLIC_GOOGLE_CMP_PUB_ID` is Production-only, so the TCF path is observable only on prod
- **Manual follow-ups after Phase 2**: paste `https://parseforge.gg/privacy` into AdSense → Privacy & messaging → message site settings (still open); PostHog event definitions (`timeline_viewed`, `timeline_error`, `timeline_filter_used`, `analysis_complete`, `theme_changed`, `consent_resolved`) — confirmed by the developer at the Phase 2 UAT, but the PostHog MCP connection returns `INVALID_API_KEY` and its active project is LootList+ App, so re-wire it before the Phase 3 gate; GSC shows `/` and `/analyze/*` as "Crawled – currently not indexed" with pre-deploy crawl dates — request recrawl of the Phase 2 build and watch `/` specifically; `origin/main` is at `55d2010` (pre-Phase-2) and Phase 2 lives on PR #15 (`growth/phase-2-accuracy-depth`) — merge or push to restore parallel worktree execution; two game-data ids (96264, 96294) flagged for human review in `.planning/WINDOWS.md`
- **Feedback source today**: owner's personal Discord (uncomfortable) — motivates the community requirement

Expand Down Expand Up @@ -123,6 +129,12 @@ A player pastes a Warcraft Logs URL and instantly gets **accurate**, actionable
| One healer-metrics helper feeds both the player card and the raid overview | D-08: two surfaces must never disagree; parity is asserted by test and was confirmed live in production | ✓ Good (Phase 2) |
| Preview-first deploy plus push + PR before shipping Phase 2 | Regenerated game-data names had the least automated coverage; PR #15 makes the regen diff reviewable (D-12) | ✓ Good (Phase 2) — prod `dpl_5bwk1fJJNuZXkoC5poPGFZQpGy6c` |
| Defer the formal ASVS security review for Phase 2 (same as Phase 1) | `gsd-secure-phase` still not installed in this profile; per-plan STRIDE registers exist | — Pending (install tooling, run `/gsd-secure-phase 02`) |
| Server-side geo opt-in for non-consent-region visitors, decided from `x-vercel-ip-country`, fail-closed to the TCF path | `cookieless_mode: "on_reject"` + `__tcfapi`-dependent opt-in dropped all PENDING-consent capture for fresh visitors; a boolean `/api/geo` keeps PII out of the request path and leaves EEA/UK semantics untouched | ✓ Good (Phase 2.1) — capture restored; TCF path confirmed in-browser at UAT |
| OPS-01 gate can never pass on pre-deploy data: mandatory counted live-traffic check, zero events = FAIL, append-only corrections to past records | Phases 1 and 2 were both signed on event-definition presence while ingestion was ~0; the gate must measure visitors, not code | ✓ Good (Phase 2.1) — Phase 2.1 signed on counted evidence; 02.1-07 redeploy row honestly left unsigned |
| Record "not performed" rather than infer a pass from unit tests or code review for the EEA/UK behaviour | An LLM cannot obtain an EEA egress; honesty about unobserved behaviour beats a manufactured pass | ✓ Good (Phase 2.1) — closed by a developer-run VPN session at UAT, 2026-09-15 |
| Sign the Phase 3 OPS-01 gate with two dated re-deferrals (share-rate re-read, real Discord unfurl) rather than hold Phase 4 for the 7-day window | Every countable row was counted; holding would have blocked on a calendar date, not on evidence; the `sign-now-conditional` obligation keeps the re-read binding | ✓ Phase 3 — unfurl and first-hand tone verdict passed in UAT 2026-09-19; re-read due ≥2026-09-23 |
| Run the ASVS L1 security review orchestrator-side when the `gsd-secure-phase` skill wrapper is missing (as Phase 2.1 did) | The gate blocks advancement; the workflow and template exist in gsd-core, only the skill is absent | ✓ Phase 3 — `03-SECURITY.md` 50/50 closed, 0 open |
| RPGLogs API Terms and API-docs pages captured with provenance (2026-09-21); approval address identified as `advertising@archon.gg` (§2a Commercial Usage); developer deferred sending the commercial-use approval request on 2026-09-21 | Both canonical pages 403 automated readers — developer captured both in-browser; the client display name still needs to be read from the WCL client-management page before the email can be sent | — Pending (04-01) — the production ad deploy (04-07) stays gated on the reply per D-12; build/preview work (04-03..04-06) proceeds because it earns no money and is therefore not commercial use under Terms §2a until ads go live |

## Evolution

Expand All @@ -142,4 +154,4 @@ This document evolves at phase transitions and milestone boundaries.
4. Update Context with current state

---
*Last updated: 2026-09-08 after Phase 2*
*Last updated: 2026-09-19 after Phase 3*
Loading
Loading