diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8a39baf..2b48ea6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,9 +1,10 @@ name: ci -# The org profile README is the company homepage (yellowpine.com redirects here), so its -# invariants are tested: assets resolve, brand SVGs are real vectors, and — because the -# tests fetch without credentials — every linked repo is publicly visible and every -# product link is live. The weekly cron catches links that die between pushes. +# The org profile README is the org's front page on GitHub (the company homepage itself is +# yellowpine.com, built from yellow-pine/yellow-pine.github.io, not from here). The README's +# invariants are what this workflow tests: assets resolve, brand SVGs are real vectors, and — +# because the tests fetch without credentials — every linked repo is publicly visible and +# every product link is live. The weekly cron catches links that die between pushes. on: push: branches: [main] diff --git a/README.md b/README.md index 4662eed..b2ffc80 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,30 @@ -# .github — the Yellow Pine homepage +# .github — the Yellow Pine org profile -Organization-wide GitHub configuration for **Yellow Pine**. Because yellowpine.com -redirects to [github.com/yellow-pine](https://github.com/yellow-pine), the org profile -rendered from this repository **is** the company homepage. +Organization-wide GitHub configuration for **Yellow Pine**. The company homepage is +[yellowpine.com](https://yellowpine.com). The org profile rendered from this repository is +what every visitor to [github.com/yellow-pine](https://github.com/yellow-pine) lands on, so +it is held to the publish rule below and to the invariants in [`tests/`](tests/) — but it is +not the homepage itself. ## Contents -- [`profile/README.md`](profile/README.md) — the public org profile / homepage. +- [`profile/README.md`](profile/README.md) — the public org profile. - [`brand/`](brand/) — the canonical public brand library: hand-cleaned SVG masters (logo, dark variant, tile icon, bare mark), palette, and usage rules. The full Brandmark export archive and raster generators live in the private `yellow-pine/brand-assets` repo. -- [`tests/`](tests/) — homepage invariants, run by [CI](.github/workflows/ci.yml) on every +- [`tests/`](tests/) — profile invariants, run by [CI](.github/workflows/ci.yml) on every push and weekly: every referenced asset exists, brand SVGs are real vectors, every linked repo is publicly visible **without auth** (nothing private can leak onto the - homepage), and every product link is live. + profile), and every product link is live. ## The publish rule -A project appears on the homepage only if it is a public repo, or a private repo with a -live public website. The tests enforce the mechanical half of this: they fetch every -`github.com/yellow-pine/*` link anonymously and fail on anything not public. +A project is publishable — on the profile, on yellowpine.com, anywhere Yellow Pine speaks +publicly — only if it is a public repo, or a private repo with a live public website. The +rule is company-wide; what is scoped is the enforcement. The tests here cover the mechanical +half **for the profile**: they fetch every `github.com/yellow-pine/*` link anonymously and +fail on anything not public. The website repo inherits the rule and enforces it the same way +against its own page. ```sh npm test # run the invariants locally diff --git a/brand/design/build-boards.mjs b/brand/design/build-boards.mjs index 8dda3e2..42abe7f 100644 --- a/brand/design/build-boards.mjs +++ b/brand/design/build-boards.mjs @@ -304,7 +304,7 @@ ${FOOT}`);

Terminal

➜ ~/code gh repo view yellow-pine/.github
-
The Yellow Pine homepage — org profile, public brand library, and org-wide config.
+
The Yellow Pine org profile, public brand library, and org-wide config.
➜ ~/code git push # built with 💛 by a tiny human team and a fleet of agents
diff --git a/brand/design/canvas/Applications.dc.html b/brand/design/canvas/Applications.dc.html index 2c541ee..2a32722 100644 --- a/brand/design/canvas/Applications.dc.html +++ b/brand/design/canvas/Applications.dc.html @@ -39,7 +39,7 @@

Browser tabs

Terminal

➜ ~/code gh repo view yellow-pine/.github
-
The Yellow Pine homepage — org profile, public brand library, and org-wide config.
+
The Yellow Pine org profile, public brand library, and org-wide config.
➜ ~/code git push # built with 💛 by a tiny human team and a fleet of agents
diff --git a/package.json b/package.json index 88239ae..0a2be8e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@yellow-pine/dot-github", "private": true, - "description": "Org-wide GitHub configuration + the public Yellow Pine profile (the company homepage).", + "description": "Org-wide GitHub configuration + the public Yellow Pine profile and brand library.", "type": "module", "scripts": { "test": "node --test tests/profile.test.mjs tests/design.test.mjs", diff --git a/tests/profile.test.mjs b/tests/profile.test.mjs index 94b5ff4..9be1754 100644 --- a/tests/profile.test.mjs +++ b/tests/profile.test.mjs @@ -1,13 +1,13 @@ -// Invariants for the Yellow Pine org homepage (profile/README.md) and the brand library. +// Invariants for the Yellow Pine org profile (profile/README.md) and the brand library. // -// yellowpine.com redirects to github.com/yellow-pine, so profile/README.md IS the company -// homepage — these tests are the gate that keeps it publishable: +// The company homepage is yellowpine.com. profile/README.md is what every visitor to +// github.com/yellow-pine lands on — these tests are the gate that keeps it publishable: // // 1. Every relative asset a README references must exist in the repo. // 2. Every github.com/yellow-pine/* link must be reachable WITHOUT auth — the publish // rule expressed without naming any repo: a link to a private repo 404s for the // anonymous public and fails here. -// 3. Every external product link must be live (a dead product link on the homepage is +// 3. Every external product link must be live (a dead product link on the profile is // worse than no link). // 4. brand/ must hold real vector SVGs (light + dark logo, icon) — no raster embeds. // @@ -84,7 +84,7 @@ const skipNetwork = process.env.SKIP_NETWORK === '1'; test('profile/README.md exists and is substantial', () => { assert.ok(existsSync(join(repoRoot, PROFILE)), 'profile/README.md missing'); - assert.ok(read(PROFILE).length > 500, 'profile/README.md is too thin to be the homepage'); + assert.ok(read(PROFILE).length > 500, 'profile/README.md is too thin to be the org profile'); }); test('every local asset referenced by a README exists', () => { @@ -119,11 +119,11 @@ test('brand SVGs are real vectors', () => { } }); -// --- the homepage's links must hold up for the anonymous public -------------------- +// --- the profile's links must hold up for the anonymous public --------------------- test('every yellow-pine GitHub link is publicly reachable without auth', { skip: skipNetwork }, async () => { const orgLinks = externalLinks().filter((u) => u.startsWith('https://github.com/yellow-pine')); - assert.ok(orgLinks.length >= 1, 'homepage should link at least one yellow-pine repo'); + assert.ok(orgLinks.length >= 1, 'the profile should link at least one yellow-pine repo'); for (const url of orgLinks) { const status = await fetchStatus(url); assert.equal(status, 200, `${url} is not publicly visible without auth (HTTP ${status})`);