Archilyzer · Source

archilyzer

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

commit 5eed01ccdaf06b16c535f308bdff6979281261e0
parent 813208b9081e77f7ddf8e783fd81f9e59cd92299
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Mon, 28 Sep 2026 02:12:38 -0400

plans: O4 review fixes recorded — both queues held in the homepage and hub refusal tests and the Build homepage test, deployHomepage ships homepageOutDir; ops-api + sites-homepage 26/26 on 813208b9

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

Diffstat:
Mplans/homepage-deploy-from-ui.md | 14++++++++------
Mplans/release-11.md | 35+++++++++++++++++++++++++++++------
2 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/plans/homepage-deploy-from-ui.md b/plans/homepage-deploy-from-ui.md @@ -131,15 +131,17 @@ build corrected here: where the hub's are, in the action's `kind` and in `/sites`' `BUILD_KINDS` comment. - **`homepageOutDir(paths)` is exported from `common/publish/build.ts`.** The editor needs `homepage/out` for `builtHomepageProblem` and for "built <when>", and `homepageDir` was private. - `buildHomepage` and `deployHomepage` are unchanged, so the job's own refusal keeps its sentence - ("… — run archilyzer build homepage first"). The refusal before the job says "… — build the - homepage first". + After review, `deployHomepage` takes its directory from `homepageOutDir` too, with no behaviour + change. Otherwise `buildHomepage` and `deployHomepage` are unchanged, so the job's own refusal + keeps its sentence ("… — run archilyzer build homepage first"). The refusal before the job says + "… — build the homepage first". - **`JobLane` needed a fix to be testable at all.** Under `next dev`, Strict Mode's mount → cleanup → mount dropped every update of a lane's one launch, so it sat on "Starting…" while its job ran. Production mounts once and never showed it; no spec had clicked a lane button before. - **How the e2e avoids a real `next build` and wrangler.** There is no fake wrangler, and the hub's - buttons have no spec. The Build homepage spec holds the `build` queue with `/api/test/stuck-job`, - so its job only queues, and cancels it from the lane before it starts. The deploy-homepage - refusals run with the `deploy` queue held the same way. The missing-build refusal is asked only + buttons have no spec. The Build homepage spec holds the `build` and `deploy` queues with + `/api/test/stuck-job`, so its job only queues, and it cancels the job from the lane before it + starts. The deploy-homepage refusals run with both queues held the same way (after review; each + test held only one queue at first). The missing-build refusal is asked only when the checkout has no `homepage/out/index.html`, and asked as a preview. diff --git a/plans/release-11.md b/plans/release-11.md @@ -93,14 +93,17 @@ job's `tmp/overnight`. checkout's own directory (the primary's holds the live homepage's build), and the hub's buttons have no spec to copy. So: - **No spec clicks Deploy homepage.** None ticks Deploy after build and then clicks Build. -- **Build homepage is clicked only with the `build` queue held** by `/api/test/stuck-job`, which is - never released in the spec. The `build-homepage` job only queues, and the spec cancels it from its - lane. Its `start()` never runs: no log file, no child, nothing written under `homepage/`. +- **Build homepage is clicked only with the `build` and `deploy` queues both held** by + `/api/test/stuck-job`, which is never released in the spec. The `build-homepage` job only + queues, and so would a `build-deploy-homepage` if the click regressed into one. The spec cancels + it from its lane. Its `start()` never runs: no log file, no child, nothing written under + `homepage/`. - **If that spec fails before its Cancel,** the next `resetData` cancels live jobs newest first (`registry.list()` sorts by `queuedAt` descending). The queued build is removed before the holder's slot is freed, so nothing is ever promoted. -- **The deploy-homepage refusals run with the `deploy` queue held the same way.** A deploy a refusal - failed to stop would only queue, and the spec's job-list check would fail. +- **The deploy-homepage refusals run with both queues held the same way** (`holdBuildAndDeployQueues` + in `ops-api.spec`). A build or deploy that a refusal failed to stop would only queue, and the + spec's job-list check would fail. - **The missing-build refusal is asked only when the checkout has no `homepage/out/index.html`,** as `deploy-hub`'s is (`211d4666`), and it is asked as a preview. - **Checked after every run:** the worktree has no `homepage/out`, and `homepage/public` holds only @@ -116,7 +119,10 @@ no spec to copy. So: | `d52d017d` | `sites:` `JobLane` survives Strict Mode | | `d9218cb7` | `sites:` the group stamps `data-hydrated`; the specs wait for it | | `40b6a0d7` | `changelog:` `[Unreleased]` above `[0.9.4]` in `editor/CHANGELOG.md` | -| _this_ | `plans:` this record; the plan's "As shipped" note | +| `ff8b9382` | `plans:` this record; the plan's "As shipped" note | +| `72175134` | `e2e:` review fix — the homepage refusal test, the Build homepage test and the hub's refusal test hold both the `build` and the `deploy` queue | +| `275c0fa6` | `common:` review fix — `deployHomepage` ships `homepageOutDir(paths)` (no behaviour change) | +| _this_ | `plans:` the review fixes in this record and the plan's note | **Gates** (logs `o4-*.log`): - **tsc** clean before every code commit (the last run on `d9218cb7`'s tree). @@ -132,6 +138,9 @@ no spec to copy. So: - `sites-homepage` ×3 with the old `JobLane`: **6 passed, 3 failed**. - The same ×3 on `d9218cb7`: **9 passed** (27 s). - The final list on `d9218cb7` (the same seven specs): **64 passed** (1.8 min). + - After the review fixes, on `275c0fa6`: `ops-api` + `sites-homepage` **26 passed** (40.5 s). + tsc was clean, common 2,041/2,041 and `build.test.ts` 10/10. The worktree still has no + `homepage/out`. - No spec here greps `deploy-hub|build-hub|HubBuild` except `ops-api`, which is in the list. - **Numbers tool:** none. @@ -148,6 +157,20 @@ no spec to copy. So: - **The `JobLane` fix:** the Build homepage test fails 3 of 3 with the old lane and passes 3 of 3 with the fix. +**Review fixes** (review: SHIP AFTER FIXES, `o4-review.md`): +- **Should-fix 1, one queue held where a regression could reach the other.** The deploy-homepage + refusal test held only `deploy`. A regressed "preview needs deploy" guard would have run a real + `build-homepage` there: in the primary checkout, compose writes fixture numbers into + `homepage/public`, then `next build` runs. The Build homepage test held only `build`, so a click + turned into build-and-deploy would have reached `deploy`. Both tests now hold both queues. So does + the hub's `deploy-hub` / `build-hub` refusal test (the review's low 4). That test **predates this + slice** (release 7) and held nothing. In `ops-api.spec` the holds sit in one helper, + `holdBuildAndDeployQueues`, and `before` is taken after them. +- **Low 2:** `deployHomepage` now takes its directory from `homepageOutDir(paths)`. This is a pure + refactor, and what it ships is exactly the directory the editor judged "built". +- **Low 3** (the "built <when>" line does not refresh after an in-page build) is left as recorded + below. + **Found and left** - **A job cancelled while still queued keeps `"status":"queued"` in its `.meta.json`.** The `onCancel` path never rewrites the sidecar. The registry says cancelled, and the boot pass settles