Skip to content

Release 0.1.5 - #50

Merged
sawradip merged 18 commits into
prodfrom
main
Nov 2, 2026
Merged

sawradip merged 18 commits into
prodfrom
main

Conversation

@sawradip

@sawradip sawradip commented Nov 2, 2026

Copy link
Copy Markdown
Contributor

Merges main into prod, which runs the release workflow: checks, assembles the packages, publishes 0.1.5 of @chalk-format/{core,reader,pdf,library-server} to npm and tags v0.1.5. The library server (Coolify chalk-library) redeploys from prod.

Carries #43 (move objects across pages), #48 (question provenance) and the bump in #49.

🤖 Generated with Claude Code

sawradip and others added 18 commits November 1, 2026 21:29
Authors want to move a placed video, 3D model, lab (or anything else) to
another page. edit.move takes it off one page and puts it on the other in
a single edit, so it is one undo step and a patch save sends both pages.
The object keeps its id (a host that tracks objects by id keeps tracking
it); an id the target page already uses is refused, and freeIdOn gives
the object a new one first. move.ts holds where it lands: placeAt for a
drag, relocate (same place relative to the page, inside it) for Move to
page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…to page

A drag that carries the selected object past its page's edge moves it
onto the page under the pointer (above or below in the continuous view,
the facing page in a spread); near the edge of the view the view scrolls,
so mouse and finger reach pages not in view. The drag is shared by every
page's surface and the pointer capture goes with the object. Dropped on
another page it is kept wholly on that page.

For far pages the sidebar has Move to page (a page picker with previous
and next buttons, in English and Bengali), and Alt+Page Up / Page Down
does the same from the keyboard. The selection follows the object, and
author-mode pages no longer select text under a drag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…uch input

The e2e drags the 3D model onto the next page with the mouse (the view
auto-scrolls), undoes and redoes, uses Move to page and Alt+Page Up/Down,
moves a video, checks the saved .chalk and the patch save (two pages, no
media), carries the model with a real finger on a phone, and reads the
Bengali strings. Docs list the script and describe the feature.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ver to a twin id

Codex review round 1: the selection was found again by id on the nearest
page, so with the same id on two pages a move (or its undo) could select
the other page's object, and after a move that renamed the id the undo
lost the selection. The reader now records each move of this session
(from, to) and follows the selection along them, from either end, until
it finds the object; with no recorded path it is gone, as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…with a tool change

Codex review round 2: after the selection followed an object, the stale
selection stayed in state, so a later undo bringing another object with
the same id back to that place selected the wrong one; the followed
place now replaces it. And a drag cut short by switching tools (the
surfaces unmount and miss pointerup) stayed live: it now ends when the
tool or mode changes, and on a mouse move with no button down.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… one path

Codex review round 3: after moves A to B to C and two undos the
selection stayed on B, because follow took the newer B to C move, hit a
dead end and never tried B to A. It now searches outward over every
recorded move (nearest first, newer first among equals).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…moved

Codex review round 4: following page/id places could land on another
object that later took a place the moved one passed through. Each
recorded move now keeps what the object was (sigOf: everything but its
id and place), and a place reached through a move counts only when it
holds that same object.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oved with

Codex review round 5: the search could cross from one object's moves to
another's at a page both passed through (same id), and select the other.
It now walks only the moves with the signature of the newest move that
touches the selection.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gainst its own move

Codex review round 6: filtering the moves by the newest move's signature
dropped the earlier moves of the same object when it was changed between
them (moved, resized, moved), so undoing everything stranded the
selection. Each move now goes on a line (the line of the move that ended
where it starts); follow walks that line and checks each place it
reaches against the signature of the move that leads there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…reached first

Codex review round 7: after A to B, a resize, B to A and three undos, the
newer move's end (A, big) failed and marked A seen, so the older move
(A, small) never checked it. A place is now checked against every move
that leads to it; only the expansion is done once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex review round 8: in the single-page layout an undone move left the
selection on a page that was not drawn, so its keys (Delete, arrows) had
no surface. When the selection follows its object to another page the
view now reveals it there, in every layout. The e2e checks undo and redo
of a Move to page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s unmounted

Codex review round 9: auto-scroll can take the page holding the pointer
capture out of the drawn range; it unmounts with its handlers, and a
release in the gutter then never ended the drag. The drag now also
listens for pointerup and pointercancel on the window, once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…on was set in (spec 1.7 §2.1)

An optional array of {kind, code, name, year}: kind board_exam | institution_exam (open), code 2-8 of A-Z0-9, name a string
or one per language, year an integer or null. checkQuestion reports the same paper listed twice. The spec says source may be
left out by a publisher that must not name the book it took a question from.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n, year range, at most 100 entries

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
spec 1.7: question manifests say where a question appeared (provenance)
feat(reader): move an object to another page (drag across pages, Move to page, Alt+Page Up/Down)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sawradip
sawradip merged commit 53bd67a into prod Nov 2, 2026
2 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant