mirror of
https://github.com/storytold/figcraft.git
synced 2026-10-24 10:27:00 -06:00
A behaviour suite for comments and version history written from the public documentation (`crates/engine/src/history_behaviour_tests.rs`, 15 tests, about 80 table rows plus stepwise checks), each row with a one-line derivation; where the documentation is silent the row says so and pins today's behaviour. 4 of the 15 tests failed on the old code. Fixes, all in shared engine code: - **Live sessions: comment threads made in the session couldn't be used.** Their ids come from the creator's id space (e.g. 4294967297) and every thread command (`comment.reply`, `edit`, `react`, `resolve`, `move`, `delete`, `markRead`, `open`, `link`) refused them as "out of range". Comment ids are now parsed as ids, not small indexes. - **Restoring a version lost newer comments.** Comments are a conversation about the file, kept apart from its design history: restoring now keeps the current comments; a comment on a layer the version doesn't have stays where it was (on the nearest surviving parent, or the canvas). - **Restoring now keeps the replaced design in the history** as an autosave first, unless a version of it was just saved or restored (so work isn't only in the session's undo history). The checkpoint marker is now "none yet" for a freshly opened file and compares contents when normalising copied the document. - **A titled autosave becomes a named version** (`version.rename` clears `auto`), so it is no longer dropped when autosaves make room. - **Merging a branch adds to the main file's history:** the main file as it was (an autosave, when it changed since its last version), then `Merged “<branch>”`. - `version.restore` refuses up front for a view-only live session (nothing goes into the history). Pinned where the documentation is silent: pins go to the innermost frame under them (not to a leaf layer); copies, duplicates and duplicated pages come without comments; replying reopens a resolved thread; only authors delete their messages (no accounts); stepping past the last thread stays on it; comments show on the canvas by default; versions stay with whoever saved them in a live session. `crates/engine/src/collab_live_tests.rs`: the test `Room` is `pub(crate)` so the suite can run a live session. `crates/engine/src/cmd/props.rs`: one line reformatted by `cargo fmt` (it was unformatted on the base, which failed the fmt check). `crates/render/src/effects_behaviour_tests.rs`: the paint suite expected an offset drop shadow to grow the export on every side, but the later export suite made exports grow only where the shadow falls (40 x 50 for a shadow 10 down); the base failed the gate on it, so the expectation now says "grows" (wider or taller). No new commands. Docs: collaboration-parity, target-app-parity (area 16 85%/60% -> 85%/62%, 2-5 h -> 2-4 h; full parity ~306-595 h -> ~306-594 h; percentages unchanged at this rounding), ROADMAP (also corrects the stale area 16 row, 80%/58%/4-8 h), gaps (gap 4's landed list), mcp.md.