Archilyzer · Source

archilyzer

Archilyzer
git clone https://archilyzer.pages.dev/source/archilyzer.git
Log | Files | Refs | README | LICENSE

commit 88164c4d0cac5f5c5ce92db2db07884e5ce57307
parent 945b20ccd5a1c32e3bd71d4a33dd698b85b6421e
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Sat, 26 Sep 2026 17:22:45 -0400

plans: deploy the homepage from the editor (/sites → Homepage: build-homepage / deploy-homepage / build-deploy-homepage jobs + pnpm ops verbs, the hub's pattern) — there is no UI path today; archilyzer.pages.dev redeployed in the meantime from main 945b20cc via r10-home.sh (deploy 857e0092, 17:19), the runbook's step-5 homepage half done early

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

Diffstat:
Mplans/STATE.md | 10+++++++---
Aplans/homepage-deploy-from-ui.md | 118+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 125 insertions(+), 3 deletions(-)

diff --git a/plans/STATE.md b/plans/STATE.md @@ -107,14 +107,18 @@ report-to-video scripts on disk are `main`'s, above). Live sites: - https://archilyzer-hub.pages.dev — C1 + C1b + C2 (archilyzer theme, "Official Instances" with the homepage's figures, scope chips, per-archive state, "N of M archives answered", archive named on every card, bare Ko-fi footer link), deploy `6ef7f472` (20:50); -- https://archilyzer.pages.dev — the refresh with the copy rulings and the hub link ON (C3), - deploy `e09900af` (20:51); +- https://archilyzer.pages.dev — **release 10's build** (the brand, in Signal) from `main` + `555bc454`, deploy `857e0092` (2026-09-26 17:19). It was deployed early, on the operator's word, by + the runbook's own `r10-home.sh`, so **the homepage half of the runbook's step 5 is done**. Its + `/changelog` shows export's `[Unreleased]` until the re-cut and a redeploy. There is no UI deploy + yet: [`homepage-deploy-from-ui.md`](homepage-deploy-from-ui.md); - https://jeralyzer.pages.dev — **the brand, in Signal**, deploy `35593886` (2026-09-26 11:06, above); - the other four official sites at release 8's slices Z + E (17:45 / 18:10 deploys); they carry no Ko-fi. **The release 10 candidates of 2026-09-25 evening are all done** (L1 and L2 above). Next after -release 10's rollout: Phase 4 slice 3 (`plans/one-core.md`), the LM chat-only tier config, the +release 10's rollout: the homepage deploy from `/sites` ([`homepage-deploy-from-ui.md`](homepage-deploy-from-ui.md), +one small slice), Phase 4 slice 3 (`plans/one-core.md`), the LM chat-only tier config, the `Dockerfile.build` image refresh, and the new lows above. **The 2026-09-25 evening plan is complete** (steps A–C: release 9 F + C1 live on :3001; C1b, C2, C3 diff --git a/plans/homepage-deploy-from-ui.md b/plans/homepage-deploy-from-ui.md @@ -0,0 +1,118 @@ +# Deploy the homepage from the editor + +Written 2026-09-26 (evening) by the slice N implementer, on the operator's ask. Rules: +`plans/tools/implementer-rules.md` (one Opus implementer in a worktree, one read-only Opus review, +the parent merges). Small: one slice, editor + ops only; nothing in `homepage/` or `export/` +changes. + +## The operator's ask (verbatim, 2026-09-26) + +"Is there a way to redeploy archilyzer.pages.dev from the UI? If not, work adding one into the plan +and deploy it yourself in the meantime" + +**There is not.** +- `/sites` → Hub (`editor/app/sites/page.tsx:183-201`) builds and deploys the HUB + (`HubBuildButtons.tsx`, `sites/lib/hubActions.ts`: job kinds `build-hub`, `deploy-hub`, + `build-deploy-hub`). +- For the homepage, the same section only says, in prose, that the `homepage` package "deploys to + its own project, `archilyzer`, with `archilyzer deploy homepage`". That is a CLI, with no job, no + `/jobs` row and no `pnpm ops` verb. + +**Done in the meantime.** +- 2026-09-26 17:18–17:19, from the primary checkout at `main` `555bc454`, with the release-10 + runbook's own `~/reports/release-10/scripts/r10-home.sh`. Its guards: FINAL `4afa08d8` is an + ancestor of HEAD; `data-accent=` is present in `homepage/out/index.html`. +- `archilyzer build homepage` took 47 s. `archilyzer deploy homepage` took 38 s: 135 files + uploaded, 41 already there, production branch `main`, deployment + `https://857e0092.archilyzer.pages.dev`. +- `https://archilyzer.pages.dev/` answers 200 with `data-accent="signal"`, and `/icons/icon.svg` + carries the Found-line mark (`#151b20 #3f4c56 #e7edf1`). +- The primary checkout's `git status` stayed clean. +- **This is the homepage half of the release-10 runbook's step 5, done early.** Its logs are in + `~/reports/release-10/tmp/r10-home-{build,deploy}.log`. +- **The homepage's `/changelog` renders `export/CHANGELOG.md` as it stands**, so L1's three hub + bullets are public there under `[Unreleased]` until the operator's re-cut and a redeploy. + +## Verified anchors (primary checkout, `main` `555bc454`) + +- `common/publish/build.ts:938-1021`: + - `composeHomepage` runs `pnpm run compose` in `homepage/`. + - `buildHomepage` runs compose, then `pnpm exec next build`. `pnpm exec`, so `prebuild` (which + runs `build:index`, a WRITER) does not run; the index is read as it stands. + - `homepageDeployArgs` and `deployHomepage` take `previewBranch?`. They throw when + `homepage/out/index.html` is missing, and otherwise deploy to the constant + `HOMEPAGE_PAGES_PROJECT` with `--branch main` for production. +- `common/bin/archilyzer.ts:117-125` (`build homepage`), `:160-172` (`deploy homepage [--preview]`). +- The hub pattern to mirror: + - `editor/app/sites/lib/hubActions.ts`: `runManagedFunction`; build on queue `build`; deploy and + build-deploy on queue `deploy`; refusals before any job; build-deploy is one job and one log. + - `editor/app/sites/components/HubBuildButtons.tsx`: one lane at a time, "Deploy after build" + unticked. + - `editor/app/api/ops/{build-hub,deploy-hub}/route.ts` + `_lib.ts`. + - `scripts/archilyzer-ops.mjs:104-107` (the verb list) and `:302` (the help text), with their + tests in `scripts/archilyzer-ops.test.mjs`. + - `editor/e2e/ops-api.spec.ts:1094-` (deploy-hub refusals). + - `editor/app/sites/page.tsx:30-45` (`BUILD_KINDS`: the Pool lists only its own kinds, and each + section has its own console). + +## Decisions + +1. **Three job kinds, as for the hub:** + - `build-homepage` on queue `build`. It writes `homepage/out`, not `export/out`, so it cannot + race a site build for `export/`, but `next build` is heavy and the build queue serialises + heavy builds. + - `deploy-homepage` and `build-deploy-homepage` on queue `deploy`. + - Bodies: `buildHomepage` and `deployHomepage` unchanged. The build-deploy runs `buildHomepage`, + and deploys only on exit 0 (the runbook's rule: a failed build never reaches the deploy, + because `homepage/out` still holds the previous build). +2. **Refusals before any job:** + - a bad preview name (`previewBranchProblem`); + - for a deploy-only, no build (`homepage/out/index.html` missing). + - The job re-checks both. No project check: the project is the constant `archilyzer`. +3. **The surface: a "Homepage" section on `/sites`**, after Hub. Its prose moves there from the Hub + paragraph. + - Buttons "Build homepage" (with "Deploy after build", unticked) and "Deploy homepage", in a + `JobLane` exactly like `HubBuildButtons`. + - A preview-branch field, as the hub's ops verb has. + - One line naming what a deploy ships: `homepage/out` built <mtime>, to `archilyzer` + (production), and the live URL (`PROJECT_URL`). + - A note that the homepage reads the index as it stands, so run Build index first when the + numbers should move. +4. **Ops:** + - `pnpm ops build-homepage [--json '{"deploy":true}']` and `pnpm ops deploy-homepage + [--preview <branch>]`; + - routes `/api/ops/build-homepage` and `/api/ops/deploy-homepage`, mirroring the hub's + (`previewUrl` from `previewAliasUrl(HOMEPAGE_PAGES_PROJECT, branch)`). +5. **No brand check in the job.** The runbook's `data-accent=` grep is a release-10 rollout guard, + not a property of every future build. + +## Implementation + +1. `editor/app/sites/lib/homepageDeployActions.ts`: `buildHomepageAction`, `deployHomepageAction`, + `buildAndDeployHomepageAction` (decisions 1–2). A pure `builtHomepageProblem(outDir)` goes in + `common/lib/builtExport.ts` beside `builtHubProblem`, with a unit test. +2. `editor/app/sites/components/HomepageBuildButtons.tsx` and the `/sites` section (decision 3). + The hub paragraph loses its homepage sentence. +3. The two ops routes and the two verbs; `archilyzer-ops.test.mjs` for the verb list and the help + text. +4. e2e: + - `ops-api.spec.ts` + deploy-homepage refuses a missing build and a bad preview name. + - `sites` spec(s): the section renders, and the Build homepage lane starts a `build-homepage` + job. Check how the hub buttons' spec avoids a real `next build` / wrangler before choosing: + the fake-binary env the editor suite uses, or a refusal-only assertion. + - Never run a real deploy from e2e (see the release 7 lessons: e2e can start a real deploy). +5. Docs: the `/sites` prose; README/AGENTS only if they name `archilyzer deploy homepage` as the + only way (grep). +6. Record + `[Unreleased]` bullet. + +## Gates + +tsc; common; editor unit; `test:scripts`; mcp unchanged; `pnpm --filter editor exec next build`; +e2e `ops-api.spec.ts` + the sites spec(s) touched + every spec that greps `deploy-hub|build-hub`. +Numbers tool: none. + +## Rollout + +The live :3001 editor must be restarted to show the section, which fits the next editor restart. +After it: Build homepage with Deploy after build unticked, then Deploy homepage, and the job's log +ends with the Pages URL.