Archilyzer · Source

archilyzer

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

commit c8a24bddc8c7b018a9fad00c3d118eeba60bcecb
parent 9c89be52267a2b43ed4f7849299b5c76479ebd9f
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Thu,  1 Oct 2026 12:26:14 -0400

Merge main (0512803e, plans only: slice XL's ruling) into r16/move-holds-writers

plans/release-16.md: the slices table keeps both rows — RM's as shipped and XL's.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

Diffstat:
Mplans/release-16.md | 25+++++++++++++++++++++++++
1 file changed, 25 insertions(+), 0 deletions(-)

diff --git a/plans/release-16.md b/plans/release-16.md @@ -25,6 +25,7 @@ slice's prompt carries its ruling, and this record carries what was built. Rules | 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`. As shipped, also `editor/app/components/forms/Controlled.tsx` (new) and one tag swap each in `DurationField`, `SocialLinksField`, `SiteMembershipsSection`, `WorkersField` ("Slice FK, as shipped") | | RM | `r16/move-holds-writers` | A media move holds the channel's writers and mirrors its copy, so a transcription or download during the move cannot fail it | `common/controller/relocateChannelMedia.ts` (+ the saved-video mover if it shares the code) + tests; the lane runners' per-channel skip (`common/controller/autoRunner.ts`, the backfill/digest/normalize/clip-fetch entry points, `common/lib/channelMediaHold.ts`); `common/jobs/jobKinds.ts` (`needsMedia`); the channel page's Storage panel and the rack's reason text; `editor/e2e/relocate*.spec.ts`; records: `plans/FACTS.md`. As shipped, also `common/controller/{channelWriters,relocateDir}.ts` (+ tests), `common/jobs/streamCommand.ts`, `common/views/channelRow.ts`, `editor/app/channels/lib/{mediaBusy,relocationJob}.ts`, `editor/app/storage/lib/{storeBusy,savedVideosJob}.ts`, `editor/app/api/test/stuck-job/route.ts`; the relocate spec is `editor/e2e/channel-storage.spec.ts` ("Slice RM, as shipped") | +| XL | `r16/x-login` | Connecting an X account works: the Connect window is the operator's own browser without automation signals, and the fetchers can use the operator's browser login directly (`cookiesFromBrowser`) with no window at all | `common/social/{xSessionBroker,xGalleryDlFetcher,fetchers,playwrightRuntime}.ts` + tests; `common/lib/settingsSchema.ts` (one key) + `SETTINGS.md`; `editor/app/settings/{xSessionActions.ts,components/XSessionSection.tsx}`; `editor/e2e/settings*.spec.ts`; records: `plans/FACTS.md`, `ENVIRONMENT.md` if an env var is added | ## Slice CK — the ruling (2026-09-30) @@ -113,6 +114,29 @@ slice's prompt carries its ruling, and this record carries what was built. Rules reconcile cannot settle (a changed file that keeps changing) refuses once more and names it. - The on-disk marker's shape does not change; nothing else about where media lives changes. +## Slice XL — the ruling (2026-10-01) + +- **Why it failed:** the Connect window is Playwright's bundled Chromium launched with its automation + signals on (`--enable-automation`, `navigator.webdriver`, the "controlled by automated test + software" bar). Google refuses such a browser ("this browser or app may not be secure"), and X's + own login form stalls in it. The operator saw both on 2026-10-01. +- **The Connect window is the operator's own browser:** the system Chromium/Chrome when one is + installed (found on `PATH` or a configured path), else the bundled one — in both cases launched + without the automation signals (`ignoreDefaultArgs` for `--enable-automation`, + `--disable-blink-features=AutomationControlled`, no infobar), in the broker's persistent profile + as today. The section says plainly that Google's sign-in may still refuse an embedded browser and + that the X password login is the reliable path there. +- **The fetchers can use the operator's browser login directly, with no window:** when + `cookiesFromBrowser` is set (it is: `firefox`), the X fetchers pass `--cookies-from-browser` to + gallery-dl (it supports it) and read the same cookies for the other X paths, fresh on every run — + the operator stays logged in to X in their everyday browser and nothing expires. One setting + chooses the source — `social.x.cookieSource: "browser" | "profile"` — defaulting to `browser` + when `cookiesFromBrowser` is set and no profile is connected, else `profile`. The section shows + which source is in use and whether an X login is visible in it (an `auth_token` cookie for + `x.com`, read from the browser's cookie store read-only), with a "Check" button. +- Nothing is automated against X's login; no credentials are stored; the cookie jar's format and + path do not change. + ## Record ### Slice CK, as shipped — a search reads what the visitor ticked (2026-09-30) @@ -942,6 +966,7 @@ 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. +8. Slice XL (2026-10-01) is editor-side: with RM's build and restart. 7. Slice RM (2026-10-01) is editor-side: a capped editor build and one restart after its merge. 6. Slice FK (2026-10-01) is editor-only: a capped editor build and one restart after its merge — done 03:15–03:16 (`GUkqnqHzYNMPWIF-rBS6W`), smoke green.