Archilyzer · Source

archilyzer

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

commit b1ee6ccebd6ad9e83ea5deb7e32d3c80664b55d9
parent ad7f7bbebdfefd43b098c19754ee178525a974b7
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Thu,  1 Oct 2026 01:39:10 -0400

Merge main (7fa7dc21) into deck/posts — the join before posts land

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

Diffstat:
Mplans/STATE.md | 18++++++++----------
Mplans/release-16.md | 27+++++++++++++++++++++++++++
2 files changed, 35 insertions(+), 10 deletions(-)

diff --git a/plans/STATE.md b/plans/STATE.md @@ -10,16 +10,14 @@ merge), and the report-video on-screen deck from the parallel session (`plans/on Records: [`release-16.md`](release-16.md), [`release-13.md`](release-13.md) (its Rollout is now written), [`release-14.md`](release-14.md), [`release-15.md`](release-15.md). The operator's runbook is `~/reports/release-15/RUNBOOK.html` (its banner carries the current two lines). -- **Live (2026-10-01):** the editor on `:3001` serves `main`'s build of 23:31 (`3Wc3BdFQWKuLx9PbNZvmB`, - 16 fs threads); umtool is rebuilt (`LRRG_c7H8GRM6ZpHbqvt0`, `test:scripts` 269) but its restart is - the operator's; the index and stats are current (23:30–23:42, every drive answering; `realcandaceo` - held by its own interrupted media move — the operator's Resume); the homepage in production is - from `9a259787` and Jeralyzer from the same tree (both pre-release-16); the hub and the other - five sites are at their earlier deploys. -- **Owed (the operator's; the session's permission layer refuses production deploys and the - `0.0.0.0` bind):** umtool's restart; `r15-deploy-all.sh` — homepage (built for `271db070`, - preview checked), hub and six sites (each rebuilt by the script; every one proved on a preview - tonight). Then the build-only Build all through the rebuilt build image, when the machine is idle. +- **Live (2026-10-01, 01:31) — everything:** the editor on `:3001` (`3Wc3BdFQWKuLx9PbNZvmB`), umtool on + `:3050` (`LRRG_c7H8GRM6ZpHbqvt0`, the deck), the index and stats, the homepage from `2cf43a69` + (mirror `6b34c2aa`, 2,029 commits; 20/20), the hub (6 sites) and the six sites (Search in, the + `@Archilyzer` link, the Use-with-AI link to the homepage doc, the sixth chart colour) — the + operator ran `r15-umtool-restart.sh` and `r15-deploy-all.sh` at 00:26–01:31. `realcandaceo` is + still held by its own interrupted media move (the operator's Resume). +- **Owed:** the build-only Build all through the rebuilt build image, when the machine is idle; + slice FK (release 16, in flight) ends with a capped editor build and one restart. - **Settings changed by hand through `writeSettings` (2026-09-30):** the X social link is `x.com/Archilyzer`; `storage.health.budgetMs` 20000 and `probeTimeoutMs` 10000 (the 3 s default held six Platter channels while renders churned the disk — the operator's ruling was to tune, not to diff --git a/plans/release-16.md b/plans/release-16.md @@ -23,6 +23,7 @@ slice's prompt carries its ruling, and this record carries what was built. Rules |---|---|---|---| | CK | `r16/search-in` | A "Search in" row — Transcripts, Posts, Live chat — on the export and hub search, Transcripts and Posts on by default | `common/components/{FiltersPanel,SearchSessionContext,SearchResults,SearchBar,exportFilterStorage}.tsx/.ts`, `common/lib/searchQuery.ts` and `common/lib/search/*` as its prompt names, `export/e2e/search-in.spec.ts` (new) and the specs its prompt names, `export/e2e/helpers.ts`; records: `plans/FACTS.md` | | DX | `r16/research-setup` | The research-only setup (source → `pnpm install` → `claude mcp add archilyzer` → `/ask`) in one place, the homepage's AI and MCP doc; the sites' and the hub's Use-with-AI page removed and its links pointed at the doc; `README.md` §1/§4 and `mcp/README.md` their own copies (as amended) | `homepage/content/docs/ai-and-mcp.md`, `export/app/use-with-ai/` (removed), the Use with AI links (`export/app/components/{Header,MobileMenu,Footer}.tsx`, `export/app/(workspace)/ask/page.tsx`), `common/lib/{project,corpus}.ts` + `common/bin/compose-site.ts` (what named the page), `mcp/README.md`, `README.md` §1/§4 (wording only), `homepage/e2e/docs.spec.ts`, `export/e2e{,-hub}/use-with-ai-link.spec.ts` and the specs that visited the page | +| FK | `r16/forms-keep-input` | Every editor form keeps what was typed when its action fails: actions return the submitted values with the error, the shared field helpers seed from them | new `editor/app/lib/formState.ts` + test; `editor/app/components/forms/Field.tsx` and the local `Field`s in `SiteForm.tsx`, `ChannelForm.tsx`; every action that returns `{ok:false,error}`/`{error}` (sites, settings, operations/settingsActions, scheduler, storage, homepageActions, cutReleaseAction, channels, videoActions); the 15 forms the ruling lists; e2e `forms-keep-input.spec.ts` (new) + the existing `sites-crud`, `settings`, `channels` specs; records: `plans/FACTS.md` | ## Slice CK — the ruling (2026-09-30) @@ -63,6 +64,28 @@ slice's prompt carries its ruling, and this record carries what was built. Rules the repo's READMEs this release). - No code path other than the removed page and its links changes. +## Slice FK — the ruling (2026-10-01) + +- **A form that fails keeps what was typed.** React resets a `<form>` when its action's transition + commits, success or failure; an uncontrolled field (`defaultValue`, `defaultChecked`) is wiped and a + controlled one survives. Every save action that can fail returns the submitted values beside the + error — `{ ok: false, error, values }` (the `channels` flavour `{ error, values }`), `values` being + the raw form entries captured once at the action's top — and every field helper seeds + `defaultValue`/`defaultChecked` from `values` when present, else from the initial value. A checkbox + absent from `values` is unchecked when `values` is present (an unticked box sends nothing). +- One shared type and one helper (`editor/app/lib/formState.ts`); the three `Field` helpers take the + live state; the structured widgets that already survive (`SocialLinksField`, `WorkersField`, + `DigestAppsField`, `DurationField`, `SiteMembershipsSection`, `LocationForm`, `EditorTagsClient`) are + the model and are not changed. +- The forms, in order of the operator's pain: `SiteForm` (create and edit), `SettingsForm`, + `ChannelForm` (create and edit), then `AttributionSettingsForm`, `DiarizationSettingsForm`, + `DigestSettingsForm`, `LaneSettingsForm`, `SchedulerSettingsForm`, `HealthTimingForm`, + `HomepageConfigForm`, `CutReleaseForm`, `RenameChannelForm`, `DeleteChannelForm`, + `DeleteVideoDirSection`, `SavedVideosControls`' checkbox. All of them this slice. +- A success path is unchanged: a form that redirects or re-renders fresh after `{ ok: true }` keeps + doing so. +- Labels and test ids are contracts; nothing on disk changes shape. + ## Record ### Slice CK, as shipped — a search reads what the visitor ticked (2026-09-30) @@ -552,8 +575,12 @@ Both slices are export- and homepage-side; the editor and umtool are not rebuilt (ruled: Posts on by default); untick Posts → none; tick Live chat on a video with chat → the hits wear "live chat"; untick all three → Search disabled with the row named. 5. Records: this section, `STATE.md`, memory. +6. Slice FK (2026-10-01) is editor-only: a capped editor build and one restart after its merge. Done 2026-09-30 evening by the session up to production: homepage built (`main 1064d04c` → mirror `19f7ea3b`, audit clean), preview checked 20/20; the hub and six sites built, previewed and checked. The production deploys are the operator's (`~/reports/release-15/RUNBOOK.html`, banner). +**Deployed 2026-10-01 00:26–01:31** (the operator): the homepage (mirror `6b34c2aa`, 20/20 after the +CDN's five minutes), the hub, the six sites (every post-deploy check OK); release 13's W1/W2/W3 and +the on-screen deck went out with it; umtool restarted.