feat(website): add /enterprise-msa page for the Enterprise Customer Agreement#13483
Conversation
…greement Publishes the Comfy Enterprise Customer Agreement (MSA) as a browsable web page at /enterprise-msa so prospects can review the template before signing an Order Form. Uses the same LegalContentSection template that serves /affiliates/terms. - New enterprise-msa page (English only, mirrors the /affiliates/terms pattern) with 12 numbered sections + Exhibit A / Order Form. - enterprise-msa i18n block driving section IDs, titles, and content. - Route registered as locale-invariant so localized variants are not served without legal review of the translation, consistent with the existing termsOfService / affiliateTerms convention. - Footer 'Enterprise MSA' link in the Company column next to Terms of Service and Privacy Policy — discoverable from the /cloud/enterprise page and site-wide. - Tests guard section IDs, page-chrome keys, and the locale-invariant route.
🌐 Website E2ETip All tests passed.
🔗 Website PreviewWebsite Preview: https://comfy-website-preview-pr-13483.vercel.app This commit: https://website-frontend-d228eos6i-comfyui.vercel.app Last updated: 2026-07-08T17:03:38Z for 📸 Screenshot UpdateTip All screenshots are already up to date. |
|
Note on the "cc @michael-poganski" line in the PR body — that handle is a placeholder I could not resolve from the sandbox (I do not have a mapping from Slack ID |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughAdds an Enterprise MSA legal page with an English-only route and page, footer navigation, translation content, and tests that verify the route and required translation keys. ChangesEnterprise MSA page
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Suggested labels: Suggested reviewers: Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 inconclusive)
✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 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 |
|
Thanks — noting this is the CodeRabbit "review in progress" placeholder (Run ID Not opting into the Finishing Touches offers:
|
|
Thanks for the approval — noting CodeRabbit found no actionable comments in this pass, so no code changes. Also verified the Vercel preview at https://comfy-website-preview-pr-13483.vercel.app/enterprise-msa serves an identical build to the one I ran locally: title |
|
Thanks @imick-io for the approval. Both reviews on this PR (this one and CodeRabbit's second pass on For the record, the branch was fast-forwarded to include the |
|
|
||
| it('exposes the enterprise MSA at the canonical /enterprise-msa path regardless of locale', () => { | ||
| // Legal-reviewed English-only document; localized routes would serve an | ||
| // unreviewed translation. See LOCALE_INVARIANT_ROUTE_KEYS in | ||
| // src/config/routes.ts. | ||
| expect(getRoutes('en').enterpriseMsa).toBe('/enterprise-msa') | ||
| expect(getRoutes('zh-CN').enterpriseMsa).toBe('/enterprise-msa') | ||
| }) | ||
|
|
||
| it('exposes the footer link so the MSA is discoverable site-wide', () => { | ||
| expect(hasKey('footer.enterpriseMsa')).toBe(true) | ||
| }) | ||
| }) |
There was a problem hiding this comment.
These tests doesn't seem necessary imo but I am ok to keep them if we really wanna protect against these changes
There was a problem hiding this comment.
Fair, thanks for the honesty. Trimmed the suite in 86476cd from 6 tests to 3, dropping the noise and keeping only the ones that guard real invariants.
Dropped:
exposes the twelve canonical sections in numeric order— hardcoded the section list, so adding/renumbering a section would fail the test purely to signal intent. That's a change-detector, andapps/websiteAGENTS.md explicitly says not to write those.numbered section titles follow the "N. Section Name" pattern— same category, plus it needed a12-exhibit-aspecial case, which was code smell.exposes the footer link so the MSA is discoverable site-wide— a missing key throws at Astro build time (unliket(), which returns the raw key), so the assertion added no coverage beyond what CI already gives us.
Kept (each catches a silent runtime bug that nothing else does):
- Every derived section has a
titleandblock.0— if a maintainer editstranslations.tsand dropsenterprise-msa.5-term-termination.title, the TOC renders the raw key string ("enterprise-msa.5-term-termination.title") as body text.t()returns the key when it's missing. - Page-chrome keys the
.astrofile references — same failure mode;enterprise-msa.page.partiesis referenced byenterprise-msa.astro, and removing it puts literalenterprise-msa.page.partiesinto the hero. No build-time or lint check catches this. - Canonical
/enterprise-msapath regardless of locale — this is the liability guardrail. RemovingenterpriseMsafromLOCALE_INVARIANT_ROUTE_KEYSwould start serving/zh-CN/enterprise-msawith an unreviewed translation of legal-reviewed copy. Same test that exists foraffiliateTermsandtermsOfService.
Net diff: +17 −50, 3 tests passing, still consistent with the sibling legalSections.test.ts pattern.
Address review feedback from @huang47 that the MSA i18n test suite felt too noisy. Drops three tests that were either change-detectors or duplicates of build-time / runtime failure modes: - Removed 'exposes the twelve canonical sections in numeric order': hardcoded the section list; adding or renumbering a section would fail the test only to signal intent, matching the 'do not write change detector tests' rule in apps/website AGENTS.md. - Removed 'numbered section titles follow the N. Section Name pattern': same category, plus needed a special case for Exhibit A. - Removed 'exposes the footer link so the MSA is discoverable site-wide': a missing key throws at Astro build time, so the assertion adds no coverage beyond what CI already gives us. Kept the three tests that guard real invariants: - Every derived section has a title and at least one block (missing title/block renders the raw key on the page). - Page-chrome keys the .astro file references exist (missing page.parties renders 'enterprise-msa.page.parties' as body text). - Canonical /enterprise-msa path regardless of locale (removing the entry from LOCALE_INVARIANT_ROUTE_KEYS would silently start serving /zh-CN/enterprise-msa with an unreviewed translation of legal text).
86476cd
1666dfb to
86476cd
Compare
|
Note for @huang47 — my review-hook fired again on your original inline comment ( |
PR Created by the Glary-Bot Agent
Publishes the Comfy Enterprise Customer Agreement (MSA) as a browsable web page at
/enterprise-msaso prospects can review the template before signing an Order Form. Requested in the#website-and-docsthread to make it easier for companies to view ahead of time and easier to share.Uses the same
LegalContentSectiontemplate that already serves/affiliates/terms, so the visual language matches the existing legal pages and layout choices (sticky TOC, active-section tracking, mobile collapsible TOC) are picked up for free.Changes
apps/website/src/pages/enterprise-msa.astro— mirrors the/affiliates/termspattern, English-only, with a preamble paragraph identifying the parties above the TOC.enterprise-msai18n block intranslations.ts— drives 12 numbered sections (Definitions → Miscellaneous) plusExhibit A. Order Form, verbatim from the executed template dated May 22, 2026.enterpriseMsa: '/enterprise-msa'added tobaseRoutesand toLOCALE_INVARIANT_ROUTE_KEYS, so localized variants are not served without a legal review of the translation. Consistent with the existingtermsOfService/affiliateTermsconvention documented inconfig/routes.ts.Enterprise MSAlink added to theCompanycolumn ofSiteFooter.vue, betweenTerms of ServiceandPrivacy Policy. This makes the MSA reachable from the/cloud/enterprisepage (and site-wide) with no changes to the enterprise page itself.enterpriseMsaSections.test.tsguards section IDs, numeric title pattern, page-chrome keys, and the locale-invariant route so a future refactor ofLOCALE_INVARIANT_ROUTE_KEYScannot silently start serving an unreviewed translation.Verification
pnpm test:unit— 162/162 pass (17 files, 7 new tests)pnpm typecheck— 0 errors, 0 warnings on changed files (pre-existing hints untouched)pnpm build— 498 pages built,/enterprise-msa/index.html(80 KB) contains all 12 sections + Exhibit Aoxlint+oxfmtclean on all changed filespnpm previewat 1440×900 desktop and 390×844 mobile (responsive layout inherits fromLegalContentSection, verified visually) — desktop screenshots attachedNotes for review
.docxtemplate shared in Slack. If Legal wants edits, they can happen inline in theenterprise-msa.*i18n block — no template restructuring needed.May 22, 2026(matches the template file nameGP 5.22.26); updateenterprise-msa.effective-datewhen Legal ships a new template.noindex— the MSA is a customer-facing document that should be discoverable via search, matching the user's stated goal of "easier for companies to view ahead of time."cc @michael-poganski — requested by James in the Slack thread for approval to ship.
Screenshots