mirror of
https://github.com/penpot/penpot.git
synced 2026-10-29 14:00:37 +00:00
Depth gate: the compare reads the op log and applies the depth gate before it derives the branch, the same order merge and update from main use, so a log too deep to replay refuses before the derive runs. The refusal names the materialise and the delete, the two remedies the gates do not refuse, in the hint and in the notification copy. Resolutions: the conflict answers of merge-file-branch and update-branch-from-main carry the main revision the conflicts were computed against, and the client sends it as expected-main-revn when resolutions are applied before the dialog's diff fetch returns. Libraries: absorbing skips branch files, so unpublishing or deleting a shared library writes no payload on a branch and the branch keeps its own link; a soft-deleted library resolves nothing there until the branch's next update from main brings main's absorbed copies. The absorbed write passes the file's features to update-file!, which the hand-built params dropped, so the pointer-map fragments the absorption regenerates are persisted and no payload references a fragment no write produced. Queries: the project file count, the team file count, the list of files that use a library, and the socket-REPL team duplication skip branch files. Snapshots: the branch refusal lives in check-restorable!, which the restore command calls before its backup snapshot and the two socket-REPL restore helpers reach through restore!. Migration 0155: the base_branch_revn backfill repositions only the rows whose branch file carries a data payload, so a re-run changes nothing on the branches the op-log model creates. Tests: the branch merge tests run in JavaScript, which the common test runner lists; new backend tests pin the gates, the absorption skip, the query filters, the restore refusals, the migration re-run, and the conflict answers' revision; a new frontend test pins the token the senders carry with resolutions. AI-assisted-by: mixed models Signed-off-by: Álvaro Tejero Cantero <alvorithm@teje.ro>