Repository navigation
Disclose Jam in the privacy policy and fix public copy (T14: SC-01, SE-03, SE-04, SE-05, AX-03) - #209
Conversation
…E-03, SE-04, SE-05, AX-03) - Privacy policy (EN, ES, HU): new section 8, "Bug Reports with Jam", describing what C1 ships: Jam loads for every visitor after the first interaction or 8 s, what its frame receives, what a recording contains, that the signed-in account ID is attached, the processor, retention, and how to object. Data Sharing now names Jam, PostHog and Sentry. Date moves to October 23, 2026. - Guides: drop the internal "Can Google index private app pages?" FAQ. - Prep-mode counts come from the tool lists in tool-links.tsx (8 modes, 3 utilities) in the landing FAQ and pricing cards, the landing JSON-LD, the guides and llms.txt. The guide copy takes the Pro price from one constant, and the dead "Student plans" base entry for the pricing page is gone. - check-site fails the build on a skipped heading level. - Organization JSON-LD logo points at /icon-1024.png. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Data Sharing names Exa for web research. - A recording can include anything exchanged with our servers, not only what happened while recording. - ES/HU quote Jam's "Start Recording" button label; ES word order. - The generator matches any key string and fails when it reads fewer keys than the list has entries; a one-item list names that item. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ℹ️ Recent review info
📝 Walkthrough
Note 🎁 Summarized by CodeRabbit Free
Comment |
|
Ready to merge from the code side, waiting on Adam's legal read.
Not merging until Adam has read the privacy-policy text in EN, ES and HU. The ES and HU translations are unreviewed. Adam also has three open decisions, listed in the description: the Jam user id, the consent banner and the Jam sanitizers. |
…rivacy # Conflicts: # docs/testing.md
|
Synced with main. The new head is How I got there. The PR branch already had a merge of main up to #211 ( Conflicts. There was one, in Everything else merged cleanly:
T11 left the catalogs at Guide pages. I re-ran Jam wording. It's unchanged from the approved PR: the user id is sent, there's no consent banner and no scrubbing change. Full
Built output.
Not used. The verify ladder doesn't need the local Supabase stack, so I didn't take the lock. No migrations or Edge Functions. |
Batch T14 from the 22 Oct 2026 QA report: the Jam disclosure in the privacy policy, plus public-site copy, guide structure and the JSON-LD logo.
Important
Adam: please read the privacy policy diff in all three languages before merging. The Spanish and Hungarian legal text is my translation and nobody else has reviewed it. Three decisions are still yours (see "Open decisions").
Issues
SC-01 (High), privacy-policy part: disclose Jam
privacyPage.s8/p8). The old sections 8 to 10 become 9 to 11 andPrivacyPage.tsxrenders 11. "Last updated" moves to October 23, 2026 in all three languages.src/jam-loader.ts,src/lib/jam-metadata.ts,AuthProvider.tsx,index.html):load;e2e/voice-rounds.spec.tsasserts are unchanged.jam-metadata.ts,jam-loader.ts, the CSP and consent are untouched.What I observed on prod (Playwright, signed out, 15 s per page; this is evidence for the PR only, not wording for the policy):
/,/privacyand/toolsbut not on the static guide pages.monitoring.jam.dev/logs).SE-03 (Low): internal SEO note in the guide FAQ
FAQSinscripts/generate_seo_content.pyand regenerated. No filler question replaces it.grep -rl "index private" publicnow returns nothing.SE-04 (Low): pricing page price and the empty "Student plans" item
/debatelab-pricingon prod shows "$5/month + tax" and has no "Student plans" item (curl of prod; the item came from a dead basePAGESentry thatseo_guides.pyoverrides).PRO_PRICE(fromsite.json), used through a{pro_price}token inseo_guides.pyandseo_answers.py. The rendered text is the same "$5/month + tax" the app uses.SE-05 (Low): "11 prep modes" vs 8 in the app
tool-links.tsx:PREP_MODE_COUNT= Prepare + Practice = 8, andUTILITY_COUNT= 3.faq.a6: "It has {{modes}} prep modes". Rendered by bothFAQ.tsxand the landing FAQPage JSON-LD inentry.tsx.trialFeature2/proFeature2: "All {{modes}} prep modes and {{utilities}} utilities".featureList: built from the same three lists.tool-links.tsxand fails if it can't read every entry. Names come fromen.jsonfeatures.*. FeedsfeatureList, thellms.txtkey facts and the{mode_count}/{mode_names}/{utility_names}tokens in the pricing and the two "vs" guides.features.subtitle("Eleven debate tools…"). Nothing renders it.AX-03 (Low): heading levels skip on guide pages
heading-orderandpage-has-heading-onepass with no violations on prod and on this branch's build for/,/privacy,/debatelab-pricing,/policy-debate,/debate-fallacies,/how-to-flow-in-debate,/ai-debate-practiceand/best-ai-debate-tools. The QA builds came before the#short-answerH2 that now sits between the H1 and the highlight H3s.scripts/check-site.mjsnow fails the build when a page's first heading isn't an H1 or a heading skips a level. All 48 built pages pass, and an injected H1→H3 onpolicy-debatefails as it should.JSON-LD logo
logois nowhttps://debate.pi-stack.org/icon-1024.png:src/prerender/entry.tsx(T2 has merged, so this isn't waiting on it);curl https://debate.pi-stack.org/icon-1024.pngreturns 200 image/png, 279,465 bytes.Generated files
public/*/index.html(all 36 guides) andpublic/llms.txtwere regenerated withpython3 scripts/generate_seo_content.py, not edited by hand.featureListorder on the software pages).FAQS_DATE(2026-10-23). The pricing, vs-WinDebate and vs-DebateClub guides setmodified2026-10-23 because their copy changed. Every other guide keeps its date.docs/operations.mdanddocs/testing.mddescribe the new tokens,FAQS_DATEand the heading check.Open decisions (Adam)
jam-loader.tsconfigures no sanitizers or blur selectors. A recording's network log can include what the app exchanged, including request headers. Configuring sanitizers in Jam is worth considering. I left it out of the policy rather than promise it.Verification
Full
npm run verify, run locally because Actions minutes are out. This is a local pass, not CI. Atd8adc643(rebased on mainb0b2ae79), it exited 0:docs:check, lint (eslint, knip, repo rules) and typecheck: pass
npm test: 77 files, 564 tests passedtest:collaboration: 5 files, 30 tests passedtest:edge: 457 passed, 0 failedbuild: prerender, sitemap (45 URLs),
check-site: 48 HTML files, sitemap and llms.txt resolve; no problems, build boundariestest:sw: upgradeActivated, firstVisitedRouteOffline, unvisitedRouteShowsRecovery, intentPrefetchedRouteOffline and offlineLogo all truee2e smoke (desktop Chromium): 43 passed, 0 flaky
The first verify run, before the round-1 fixes, also exited 0, but two smoke specs were flaky and passed on retry:
crossfire.spec.ts(grounded debrief) andfirst-run.spec.ts(tour tooltip). Neither touches anything this PR changes.View-source checks on the build:
/: "It has 8 prep modes" in both the FAQ and the FAQPage JSON-LD, "All 8 prep modes and 3 utilities", logoicon-1024.png, no literal{{./privacy: 11 sections,dateModified2026-10-23./debatelab-pricing,/policy-debate: checked.I took screenshots of
/privacysection 8 in EN, ES and HU from the local build and shared them in the T3 thread. GitHub has no CLI upload for them.Not done:
agentic/pages.e2e.tscovers/privacyin ES/HU and may comment on the English "Start Recording" label, which is quoted as Jam's button name).No migrations. No Edge Functions to deploy.
Review rounds
🤖 Generated with Claude Code
Summary by CodeRabbit