War on Disease roadmap and treaty#64
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughThis PR recenters documentation and the web frontend on the War on Disease / 1% Treaty campaign: strategic docs (README, ROADMAP, AGENTS, TODO) are rewritten for campaign-first priorities; the web app gains a plaintiffs visual route and plaintiffs-page content; the treaty landing page no longer shows the vote-counter; several UI components and local site-default logic were adjusted. ChangesWar on Disease Campaign Documentation Reorientation
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
This PR updates the repository’s documentation to reflect “campaign mode” prioritization for the War on Disease / 1% Treaty effort, and aligns multiple planning/instruction docs around that focus.
Changes:
- Adds an explicit campaign-first strategic frame and prioritization guidance across TODO/roadmap/agent instruction docs.
- Updates README “Current Product Focus” and “What You Can Do Today” to put the treaty-vote funnel ahead of other product loops.
- Normalizes wording across docs around War on Disease as the default public surface, with Optimitron positioned as the supporting OS/proof layer.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| TODO.md | Adds a “Strategic Frame” section describing campaign mode priorities and review defaults. |
| README.md | Reorients product focus toward War on Disease and updates the “What You Can Do Today” table to lead with treaty actions. |
| docs/ROADMAP.md | Reframes the roadmap around campaign conversion/referral/org/plaintiff/leader-pressure priorities and parks non-campaign work. |
| CLAUDE.md | Updates agent-facing description and priority order to align with campaign mode; fixes a spelling issue in the intro. |
| AGENTS.md | Adds “Mission Focus” section defining campaign-mode default priorities and review guidance. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Visual review
Start with the browser gallery for a quick before/after pass over every captured route. Use the visual diff link for changed-only review when Argos is available. The downloadable artifact is the fallback copy of |
Code reviewNo issues found. Checked for bugs and CLAUDE.md compliance. |
|
test |
Code review — CLAUDE.md conflicting directivesCLAUDE.md line 9 (new "Default priority order during campaign mode:" block) — conflicting top-level directives for agents This new campaign-mode priority list makes treaty vote conversion priority #1 with no mention of the Earth Optimization Prize. However, the Treasury table further down in
(referring to the Earth Optimization Prize at An agent reading
Reference: CLAUDE.md Treasury section Suggested fix: Either (a) remove the "most important feature; every other page should funnel toward it" claim from the Treasury table (since this PR's campaign framing supersedes it), or (b) add a note in the Treasury table scoping that claim to "during Phase 1 / pre-campaign mode" so both statements can coexist. |
|
Addressed the valid Claude priority conflict in 8cb5667 by scoping the Prize language under campaign mode and making treaty-vote conversion the precedence rule. |
Adds the case-page-aligned damages headline ($10.6M NPV, $25.2M lifetime cohort) above the registration form on /plaintiffs. Visitors landing from the case-page CTA see what they are owed before being asked to register; a registered family member adds another full claim, which is the strongest recruitment hook the math supports. Numbers come from canonical parameters (CORPORATE_DAMAGES_FORWARD_SETTLEMENT_VALUE_PER_CAPITA and LOST_PROSPERITY_LIFETIME_DAMAGES_PER_CAPITA) so any future reframe of the manual's damages model flows here automatically — no hardcoded values in the JSX. Treaty-styled, semantic tokens only (bg-background, border-foreground, text-muted-foreground). No BrutalCard / ArcadeTag / brutal-* / hardcoded hex — the file was already clean; this surface keeps it clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Atomic visual migration via three shared primitives + the CSS-variable layer that all consumers funnel through. Zero per-page edits; ~340 consuming surfaces update simultaneously. globals.css: --brutal-pink, --brutal-cyan, --brutal-yellow (and their foregrounds) redirected to var(--foreground) / var(--background) in both light and dark mode. Because the existing @theme inline block already remaps every Tailwind default color scale (pink/rose/fuchsia/ purple/violet/indigo → brutal-pink; blue/cyan/teal/sky → brutal-cyan; amber/orange → brutal-yellow) to those CSS vars, every component using bg-brutal-* OR raw bg-pink-*/bg-cyan-*/bg-yellow-*/etc. now renders treaty-style. --brutal-red and --brutal-green stay vibrant — they encode status semantics (error/harm vs verified/success) and changing them would lose information. BrutalCard: hard 8px offset shadows removed (shadowSize prop kept as no-op so consumers don't need updates), border-4 border-primary → border-2 border-foreground, hover translate animation → quiet transition-colors hover:bg-muted. ArcadeTag: dropped the Press Start 2P pixel font + text-brutal-pink. Renders as a quiet small-caps muted-foreground line. Component + ARCADE_LABELS dictionary kept so consumers don't need updates. SectionContainer: thick novelty borders (border-t-4 border-primary / border-b-4) replaced with thin treaty rules (border-t / border-b border-foreground). Per the strategy convo: visual fun moves out, voice fun stays — the Wishonia copy still does the personality work; the visual is now treaty-document austere. Aligns the recruitment surface with the seriousness of the ask (international treaty, class-action plaintiff registration). brutal-red/brutal-green semantic status colors preserved for charts, harm chips, and verified-success markers. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Per Copilot review on PR #64: the README claimed referendum voting at /agencies/dcongress/referendums has "World ID gating," implying World ID is required to cast a vote. It isn't — the /api/referendums/[slug]/ vote route has zero World ID checks. Anyone signed in can cast a vote; World ID is optional and marks the vote as verified-personhood, used for sybil-resistant tallies and for VOTE token attribution on the referral mechanic. Reworded the bullet to reflect that. Other World ID mentions (sybil resistance, VOTE token earning, referral verification) are accurate and unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
packages/web/src/app/plaintiffs/page.tsx (1)
183-233: ⚡ Quick winConsider moving
RepresentedPersonConversionFormabove the "Demanded recovery" section.The new section (lines 184–230) places monetary parameter values between the header and the primary conversion action. Per the coding guideline, the primary action should come before counters/explanation:
"Put the one primary action of a page before browsing, explanation, counters, filters, dashboards, FAQs, or legal framing"
Moving
RepresentedPersonConversionFormimmediately after the<header>block and keeping the demanded-recovery figures below it preserves the motivational context while satisfying the action-first layout.♻️ Suggested reorder
</header> + <RepresentedPersonConversionForm referendumSlug={referendumSlug} /> + <section aria-label="Demanded recovery per registered plaintiff" className="border-y-2 border-foreground bg-background py-8" > ... </section> - <RepresentedPersonConversionForm referendumSlug={referendumSlug} />As per coding guidelines:
packages/web/src/app/**/*.{ts,tsx}— "Put the one primary action of a page before browsing, explanation, counters, filters, dashboards, FAQs, or legal framing."🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/web/src/app/plaintiffs/page.tsx` around lines 183 - 233, Move the primary action RepresentedPersonConversionForm to appear immediately after the page <header> (i.e., before the section with aria-label "Demanded recovery per registered plaintiff") so the conversion form is the first interactive element; specifically cut the <RepresentedPersonConversionForm referendumSlug={referendumSlug} /> JSX and paste it above the <section aria-label="Demanded recovery per registered plaintiff"> block, keeping existing props and imports unchanged and leaving the ParameterValue blocks and the humanityVGovernment link (ROUTES.humanityVGovernment / humanityVGovernmentLink) below as explanatory/counter content.packages/web/src/components/site/OnePercentTreatyLandingPage.tsx (1)
6-10: ⚡ Quick winRemove the unused
dataprop from OnePercentTreatyLandingPage to eliminate unnecessary server-side fetching.The parent
page.tsx(line 67–82) fetchesReferendumSiteHomeDataviagetReferendumSiteHomeData()— a server call that includes paginated signers, program tasks, treaty markdown, and session data — only to pass it to this component, where it is ignored (_data). The prop is unused and the fetch is wasted.Remove
datafrom thePropsinterface and the function signature, then delete thegetReferendumSiteHomeData()call andsignersPageparameter handling inpage.tsx.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/web/src/components/site/OnePercentTreatyLandingPage.tsx` around lines 6 - 10, Remove the unused data prop from OnePercentTreatyLandingPage by deleting data from the Props interface and removing the parameter from the OnePercentTreatyLandingPage function signature (currently declared as { data: _data }: Props); then update the parent page to stop fetching ReferendumSiteHomeData and remove the getReferendumSiteHomeData() call and any signersPage parameter handling that exists solely to pass that data (remove signersPage prop/argument and any related wiring). Ensure all references to Props, OnePercentTreatyLandingPage, getReferendumSiteHomeData, and signersPage are updated/removed so the component no longer relies on fetched ReferendumSiteHomeData.packages/web/src/components/ui/arcade-tag.tsx (1)
12-12: ⚡ Quick winUse
cn()instead of a bare template literal for class merging.Template literal concatenation doesn't de-duplicate conflicting Tailwind utilities. If a caller passes
text-sm mb-4, the resulting string will contain bothtext-xs text-smand both margins — Tailwind resolves by CSS order, not DOM order, so the consumer override may silently lose.cn()(clsx + tailwind-merge) is the idiomatic fix.♻️ Proposed fix
+import { cn } from "@/lib/utils"; export function ArcadeTag({ children, className = "mb-2" }: ArcadeTagProps) { return ( - <p className={`text-xs font-black uppercase text-muted-foreground ${className}`}> + <p className={cn("text-xs font-black uppercase text-muted-foreground", className)}> {children} </p> ); }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/web/src/components/ui/arcade-tag.tsx` at line 12, Replace the template literal class concatenation on the paragraph element with the cn() utility to merge and dedupe Tailwind classes: import and use cn(...) instead of `\`text-xs font-black uppercase text-muted-foreground ${className}\`` (target the component that renders the <p> using the className prop, e.g., ArcadeTag) so callers' classes are merged via clsx + tailwind-merge rather than simple string concat.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@README.md`:
- Line 305: Update the stale route text that currently reads "/referendum" to
the canonical route "/agencies/dcongress/referendums" so it matches the other
tables; locate and replace the string "/referendum" in the README (the sentence
beginning "**Referendum infrastructure**") with
"/agencies/dcongress/referendums" to ensure consistency with the "What You Can
Do Today" and "The Web App" tables.
- Line 146: The README uses h4 (####) headings directly under an h2, which
violates MD001; either promote each flagged heading to h3 (change "#### Treaty
Campaign", "#### Optimized Governance Agencies", "#### Earth's Governments",
"#### Analysis", "#### You", "#### Futures", and "#### Meta" to "### ...") or
insert an appropriate h3 parent before those sections—apply the same change
consistently to all listed headings so the document hierarchy is correct.
---
Nitpick comments:
In `@packages/web/src/app/plaintiffs/page.tsx`:
- Around line 183-233: Move the primary action RepresentedPersonConversionForm
to appear immediately after the page <header> (i.e., before the section with
aria-label "Demanded recovery per registered plaintiff") so the conversion form
is the first interactive element; specifically cut the
<RepresentedPersonConversionForm referendumSlug={referendumSlug} /> JSX and
paste it above the <section aria-label="Demanded recovery per registered
plaintiff"> block, keeping existing props and imports unchanged and leaving the
ParameterValue blocks and the humanityVGovernment link
(ROUTES.humanityVGovernment / humanityVGovernmentLink) below as
explanatory/counter content.
In `@packages/web/src/components/site/OnePercentTreatyLandingPage.tsx`:
- Around line 6-10: Remove the unused data prop from OnePercentTreatyLandingPage
by deleting data from the Props interface and removing the parameter from the
OnePercentTreatyLandingPage function signature (currently declared as { data:
_data }: Props); then update the parent page to stop fetching
ReferendumSiteHomeData and remove the getReferendumSiteHomeData() call and any
signersPage parameter handling that exists solely to pass that data (remove
signersPage prop/argument and any related wiring). Ensure all references to
Props, OnePercentTreatyLandingPage, getReferendumSiteHomeData, and signersPage
are updated/removed so the component no longer relies on fetched
ReferendumSiteHomeData.
In `@packages/web/src/components/ui/arcade-tag.tsx`:
- Line 12: Replace the template literal class concatenation on the paragraph
element with the cn() utility to merge and dedupe Tailwind classes: import and
use cn(...) instead of `\`text-xs font-black uppercase text-muted-foreground
${className}\`` (target the component that renders the <p> using the className
prop, e.g., ArcadeTag) so callers' classes are merged via clsx + tailwind-merge
rather than simple string concat.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: af9ca556-0f0e-4f7e-965f-86d33a69aba3
📒 Files selected for processing (13)
AGENTS.mdCLAUDE.mdREADME.mdpackages/web/AGENTS.mdpackages/web/e2e/visual-regression.spec.tspackages/web/src/app/plaintiffs/page.tsxpackages/web/src/components/site/OnePercentTreatyLandingPage.test.tspackages/web/src/components/site/OnePercentTreatyLandingPage.tsxpackages/web/src/components/ui/arcade-tag.tsxpackages/web/src/components/ui/brutal-card.tsxpackages/web/src/components/ui/section-container.tsxpackages/web/src/lib/__tests__/site.test.tspackages/web/src/lib/site.ts
✅ Files skipped from review due to trivial changes (2)
- packages/web/AGENTS.md
- AGENTS.md
🚧 Files skipped from review as they are similar to previous changes (1)
- CLAUDE.md
Summary
TODO.md,AGENTS.md,CLAUDE.md,README.md, anddocs/ROADMAP.mdaround campaign-first prioritization./plaintiffsusing canonical parameter values, then add/plaintiffsto visual review coverage.BrutalCard,ArcadeTag, andSectionContainertoward the black-and-white treaty style without globally remapping the legacy brutal color tokens.Validation
git diff --checkpnpm --filter @optimitron/web run typecheck:fastpnpm check; it timed out after 5 minutes with no useful output before the later web-focused check was run.b23da4ceand fresh CI is running for the latest pushed head.UI
/plaintiffschanged and is now included in the PR visual review gallery.BrutalCard,ArcadeTag, andSectionContainer.Summary by CodeRabbit
New Features
Style
Documentation