From ec00421a4b6c864729d3c67a4b36f6801a5e915e Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 16 Aug 2026 04:43:24 +0000 Subject: [PATCH] fix(www): align public copy with the repository State the facts that are true of this tree: compiled language, MIT, Rust, LLVM, xo, Echo 2026, and prerelease tags. Drop the disabled Discord link, keep install platforms to the current release assets, and lock those checks in the site tests. Co-authored-by: Christoffer Hallas --- www/SITE.md | 44 ++++++++++++++++++++++-------- www/scripts/verify-docs-pages.mjs | 45 ++++++++++++++++++++++++++++++- www/scripts/verify-prose.mjs | 4 ++- www/src/app.tsx | 3 +++ www/src/docs/site.ts | 11 ++++++++ www/src/router.tsx | 6 ++--- 6 files changed, 96 insertions(+), 17 deletions(-) diff --git a/www/SITE.md b/www/SITE.md index acae8611..b9a8cde4 100644 --- a/www/SITE.md +++ b/www/SITE.md @@ -124,9 +124,29 @@ xo build emits a native executable from that same pipeline. an ordinary expression. `xo` checks a program and emits a native binary from the same LLVM pipeline. +**Status:** Echo 2026 is the public edition. A Rust toolchain ships as +prerelease tags on GitHub. The repository is MIT licensed. + Keep product claims factual. Do not invent APIs, partner logos, or unearned maturity. +## Public facts + +Public chrome (homepage, footer, install) states what this repository is: + +- Compiled language +- MIT license +- Implemented in Rust +- LLVM pipeline +- CLI is `xo` +- Current edition is Echo 2026 +- GitHub releases are prerelease tags + +Do not call the language production-ready. Do not imply a crates.io package. +Name a host OS only when that platform has an asset on the current release +(v0.0.1-alpha.9 ships `linux-x86_64` and `macos-arm64`). Do not list Discord +while there is no live invite. Public project mail stays on `@modoterra.xyz`. + ## Pillars 1. **Leaders** — `$` `~` `?` `*` `^` (and the rest of the glyph set) mark statement roles @@ -157,19 +177,21 @@ add a second rail or nested train. ## Homepage sections The home page is a language-docs front door. Copy and links live in -`src/docs/site.ts` (`homePage`, `primaryNav`, `docsHubCatalog`). +`src/docs/site.ts` (`homePage`, `primaryNav`, `docsHubCatalog`, `footerLinkGroups`). 1. Language definition (`Echo is a compiled language`) plus the lead -2. Representative sample that shows statement leaders and binds -3. First-class links: Documents (`/docs`), Packages (`/docs/std`), Spec (`/e26`) -4. Footer +2. Status line: Echo 2026, Rust, prerelease tags, MIT +3. Representative sample that shows statement leaders and binds +4. First-class links: Documents (`/docs`), Packages (`/docs/std`), Spec (`/e26`) +5. Footer (compiled language, `xo`, LLVM, Echo 2026, prerelease, MIT) Each of those links, plus Install, First program, Book, Try, Privacy, Terms, and Security, is a real page (`path/index.html`) with that page title and body. A destination without a document is removed from the catalog or footer. -Homepage trust stays factual. Rust, LLVM, the public edition, and the -machine-checked suite are implementation facts. +Homepage trust stays factual. Rust, LLVM, the public edition, MIT, prerelease +tags, and the machine-checked suite are implementation facts. The footer lists +GitHub. It does not list Discord. ## Security @@ -222,11 +244,11 @@ Compile and native run stay on `xo` (LLVM). Learn, Community, and About. Copy lives in `src/docs/site.ts` (`footerLinkGroups`). -| Group | Links | -| --------- | --------------------------------------------------------------------------------------------------- | -| Learn | Install, Try Echo, First program, Documents, Book, Echo 2026 | -| Community | GitHub. Omit Discord until a public invite URL exists. | -| About | Modoterra (`https://modoterra.xyz`), Privacy (`/privacy`), Terms (`/terms`), Security (`/security`) | +| Group | Links | +| --------- | ---------------------------------------------------------------------------------------------------------------- | +| Learn | Install, Try Echo, First program, Documents, Book, Echo 2026 | +| Community | GitHub. Omit Discord until a public invite URL exists. | +| About | Modoterra (`https://modoterra.xyz`), Privacy (`/privacy`), Terms (`/terms`), Security (`/security`), MIT License | Public project mail on the site is `@modoterra.xyz` only (`hello@`, `security@`, `oss@`). Do not publish `@modoterra.com`. diff --git a/www/scripts/verify-docs-pages.mjs b/www/scripts/verify-docs-pages.mjs index a28e5a1a..f632ffbc 100644 --- a/www/scripts/verify-docs-pages.mjs +++ b/www/scripts/verify-docs-pages.mjs @@ -1,8 +1,10 @@ /** * Verifies the shipped docs-first site model: * - homepage definition, leader-bearing sample, docs/std/spec links + * - public facts: compiled language, MIT, Rust, LLVM, xo, Echo 2026, prerelease + * - no production-ready, crates.io, Windows, or Discord claims * - primary nav labels and paths - * - footer About links Privacy and Terms; Discord stays hidden + * - footer About links Privacy, Terms, and MIT; Discord stays hidden * - legal pages use @modoterra.xyz mail only * - Documents hub catalog groups * - security mailbox, SECURITY.md, and footer /security pointer @@ -35,6 +37,7 @@ try { const { docsHubCatalog, + footerBlurb, footerLinkGroups, homePage, installCta, @@ -66,6 +69,35 @@ try { fail("homePage.sample must show $ and ~ statement leaders"); } + const publicChrome = [homePage.definition, homePage.lead, homePage.status, footerBlurb].join( + "\n", + ); + const requiredFacts = [ + "compiled language", + "MIT", + "Rust", + "LLVM", + "xo", + "Echo 2026", + "prerelease", + ]; + for (const needle of requiredFacts) { + if (!new RegExp(needle, "i").test(publicChrome)) { + fail(`public chrome must mention ${needle}`); + } + } + for (const banned of [ + "production-ready", + "production ready", + "crates.io", + "Windows", + "Discord", + ]) { + if (publicChrome.toLowerCase().includes(banned.toLowerCase())) { + fail(`public chrome must not mention ${banned}`); + } + } + const homeTargets = new Set(homePage.links.map((link) => link.to)); for (const required of ["/docs", "/docs/std", "/e26"]) { if (!homeTargets.has(required)) { @@ -103,6 +135,9 @@ try { if (footerByLabel.get("Modoterra") !== "https://modoterra.xyz") { fail("footer About must keep the Modoterra company link"); } + if (footerByLabel.get("MIT License") !== "https://github.com/modoterra/echo/blob/main/LICENSE") { + fail("footer About must link the MIT License"); + } if (footerByLabel.has("Discord") || footerLinks.some((link) => /discord/i.test(link.label))) { fail("footer must hide Discord until there is a public invite"); } @@ -298,8 +333,16 @@ try { if (snapshot.includes("modoterra.github.io")) { fail("static homepage must not point at modoterra.github.io"); } + const siteMd = readFileSync(path.join(root, "SITE.md"), "utf8"); + for (const needle of ["Public facts", "prerelease tags", "MIT license", "v0.0.1-alpha.9"]) { + if (!siteMd.includes(needle)) { + fail(`SITE.md missing public-fact marker: ${needle}`); + } + } + for (const needle of [ homePage.definition, + homePage.status, homePage.sample.trim().split("\n")[0], "/docs", "/docs/std", diff --git a/www/scripts/verify-prose.mjs b/www/scripts/verify-prose.mjs index 2e57acf9..7e2221df 100644 --- a/www/scripts/verify-prose.mjs +++ b/www/scripts/verify-prose.mjs @@ -128,7 +128,7 @@ try { const { docsPages, docsPageByPath } = content; const { stdModules } = ref; - const { homePage, docsHubCatalog, legalPages, tryPage } = site; + const { homePage, docsHubCatalog, footerBlurb, legalPages, tryPage } = site; const install = await server.ssrLoadModule("/src/docs/install-content.ts"); const { installPage, inlineText } = install; @@ -152,6 +152,8 @@ try { prose.push({ where: "home definition", text: homePage.definition }); prose.push({ where: "home lead", text: homePage.lead }); + prose.push({ where: "home status", text: homePage.status }); + prose.push({ where: "footer blurb", text: footerBlurb }); prose.push({ where: "try lead", text: tryPage.lead }); prose.push({ where: "install lead", text: inlineText(installPage.lead) }); for (const section of installPage.sections) { diff --git a/www/src/app.tsx b/www/src/app.tsx index ef89da78..6d0b7e91 100644 --- a/www/src/app.tsx +++ b/www/src/app.tsx @@ -14,6 +14,9 @@ export function HomePage() {

{homePage.lead}

+

+ {homePage.status} +

Documents diff --git a/www/src/docs/site.ts b/www/src/docs/site.ts index 23e86419..8bebc3c2 100644 --- a/www/src/docs/site.ts +++ b/www/src/docs/site.ts @@ -36,6 +36,7 @@ export type DocsCatalogGroup = { export type HomePageContent = { definition: string; lead: string; + status: string; sampleCaption: string; sample: string; links: SiteLink[]; @@ -113,10 +114,17 @@ export const footerLinkGroups: FooterLinkGroup[] = [ { label: "Privacy", href: "/privacy" }, { label: "Terms", href: "/terms" }, { label: "Security", href: securityContact.path }, + { + label: "MIT License", + href: "https://github.com/modoterra/echo/blob/main/LICENSE", + }, ], }, ]; +export const footerBlurb = + "Echo is a compiled language. xo checks a program and emits a native binary from the same LLVM pipeline. Echo 2026 is the current edition, published as prerelease tags and licensed under MIT."; + export const tryPage = { title: "Try Echo", lead: "This page checks with the shared compiler frontend. A playground run then executes the checked program and captures io.print. Filesystem, net, process, and tasks stay unavailable here. Install xo to compile through LLVM.", @@ -291,6 +299,8 @@ export function primaryNavItemIsActive(to: string, pathname: string): boolean { export const homePage: HomePageContent = { definition: "Echo is a compiled language.", lead: "Statement leaders mark control and binding. The rest of each line is an ordinary expression. xo checks a program and emits a native binary from the same LLVM pipeline.", + status: + "Echo 2026 is the public edition. A Rust toolchain ships as prerelease tags on GitHub. The repository is MIT licensed.", sampleCaption: "sum.echo", sample: `/ std/io @@ -526,6 +536,7 @@ export function renderStaticHomeAndHub(): string { `
`, `

${escapeHtml(homePage.definition)}

`, `

${escapeHtml(homePage.lead)}

`, + `

${escapeHtml(homePage.status)}

`, `
${escapeHtml(homePage.sample)}
`, ``, catalog, diff --git a/www/src/router.tsx b/www/src/router.tsx index 87b47524..9c8be008 100644 --- a/www/src/router.tsx +++ b/www/src/router.tsx @@ -41,6 +41,7 @@ import { type DocsTextPart, } from "./docs/content"; import { + footerBlurb, footerLinkGroups, installCta, primaryNav, @@ -325,10 +326,7 @@ function SiteFooter() {

Echo

-

- A compiled language with statement leaders. The xo CLI checks programs and emits native - binaries. -

+

{footerBlurb}

© 2026 Modoterra Corporation