Archilyzer · Source

archilyzer

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

commit 48c16d4245e3df56b8303f99de960d160bcffc27
parent f0c57c7ebe835996454e4fa80b205cd02bdf14dc
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Thu,  1 Oct 2026 13:46:30 -0400

plans: room for posts R1 as built — the move by perspective, 24 px cards, the gates

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

Diffstat:
Mplans/deck-posts.md | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 56 insertions(+), 0 deletions(-)

diff --git a/plans/deck-posts.md b/plans/deck-posts.md @@ -149,3 +149,59 @@ Rulings, on top of the above: Core additions (`deck.mjs`): `shiftedFootage`, `postHolds`, `footageMoves` (the schedule's `moves`: `[{segment, at, segmentAt, seconds, from, to}]`, present only when there are moves), `posts.hold` and `posts.shift` settings and validation; `resolveDeck` fills `posts.shift` from its default. + +### R1, as built + +Branch `deck/room-r1` from 69cb37d7. + +| Commit | What | +|---|---| +| 8d86edc6 | The hold and the move joined on the carrying clip's input (`segmentJoins`, `joinInputChain`, `moveFilter`, `xfadeGraph`, `hardCutFilterArgs`, `cutOffsets`); every length under the deck is the schedule's; the hard-cut record names its joins; verify-build's freeze check; `deck-room.test.mjs` | +| f5067b04 | The cards: slide in from past the frame's edge, an accent flare that settles, an accent rail, a platform pill; text 24 px | +| 4fb19848 | README, quirks, the `[Unreleased]` entry | + +Where it differs from, or adds to, the rulings above: + +- **The move is one `perspective` filter** (`sense=destination`, `eval=frame`): the input frame's + corners are eased by smoothstep so the footage box goes from `from` to `to`. It resamples at + 1/256 px; `scale` + `overlay` and `zoompan` round to whole pixels. Before the move it is the + identity, copied bit for bit. It has no `t` and `in` counts from 1, so the clock is `(in-1)/fps`. + It fills the uncovered band by clamping to the input's edge, so `fillborders` pins the outer + 2 px to `palette.bg` first. Measured on c06: the box glides 172→22 px over 18 frames with no + stepping. +- **A hold shows `hold − transition` of still frame** under a crossfade, because the dissolve + out starts inside it (2.0 s at the defaults). +- **Text is 24 px, not more.** At 25 px the ferret cut's c06 stack (3 posts) measured 918 px + against an 838 px column, and the oldest would have slid out before the hold. 24 px with + tighter padding measures 829. +- **verify-build's freeze check** compares luma outside the deck and the posts column, because + the deck's progress fuse keeps moving during a hold. It allows a mean difference of 1.5; + ferret measured 0.01–1.02. + +Gates on 4fb19848: + +- Workspace tsc clean. `test:scripts` 318 pass, 2 skipped. Capped umtool `next build` with the + corpus linked exit 0 (58 s, under load from a concurrent encode), link removed, and the + server bundle carries `const postsCues = (` (2 files). +- Byte-identical: `--only c07 --skip-fetch` without `render.chrome` gives md5 + `6a92235fa12ca181bb81993129c9ee9d`. A deck manifest without posts gives a `schedule.json` + byte-equal to the base's, and the base and the branch give the same overlay chain, + `applyChromeArgs` and `previewFromSegmentsArgs` (`segmentJoins` returns null). +- Ferret, scratch copy, `--chrome-only` (crossfade): + - 360.2 s, holds on c03, c06, c12 and c17; + - posts and moves at the predicted seconds; + - verify-build ok, with all four freezes found; + - 17 chapters at the schedule's starts; + - QR 7/7 posts and 17/17 deck. +- Transition-0 copy through the concat-filter prerail: 368.2 s, verify-build ok, QR 7/7 posts. + The `.segments` record names each join. +- `--chrome-preview 126 14` gives 14.000 s (420 frames) from the segments: the dissolve in, + the move, the stack and the hold. + +Left for R2 (umtool): + +- `umtool/lib/report/export.mjs`'s fallback, used when there is no `chapters.ffmeta`, still sums + `segmentOffsets` without the holds. A build always writes the ffmeta, so it is reached only + for a cut that was never fully built. +- The preview's posts geometry is now the frame's edge (`postsGeometry`). The preview does not + show the footage move or the hold; both happen in ffmpeg, at the join.