Skip to content

Release 1.32.0 (build 48): core 2.76.0 - #75

Merged
adibhanna merged 8 commits into
mainfrom
release/1.32.0
Oct 23, 2026
Merged

adibhanna merged 8 commits into
mainfrom
release/1.32.0

Conversation

@adibhanna

Copy link
Copy Markdown
Contributor

Core core-2.76.0-core.h076cc71aa1ce0bbe from ZenNotes/zennotes 61628218 (the v2.76.0 release commit): Choose a date… in the task menu a long-press opens (ZenNotes/zennotes#991), No due date for undated tasks in the list and on the board (ZenNotes/zennotes#990), the Tasks list ordered by priority (ZenNotes/zennotes#989), and Cloud conflicts that settle without deleting a kept note. Merges fix/cloud-conflict-room (d725816: the other device's version takes its place, moving a file in its way to the next free name; now through core's cloudSyncFreePath) and fix/safe-area-insets (9c9c85b: sheets, palettes and Settings stay clear of the home indicator and, in landscape, the sensor housing). Then 1.32.0, build 48, which replaces 1.31.0 (build 47) while that is still Waiting for Review. npm run upstream (boundaries and typecheck), 287 tests and sync pass.

Keeping the other device's version of a conflict publishes that file where
the other device put it, and any file already there on this phone stopped
the choice with "<path> already exists.", even one unrelated to the
conflict. Dave's phone (2026-10-23) had trashed an Untitled.md of its own
into the slot his computer's trashed Untitled.md went to, so keeping his
phone's version was the only way out.

That file now moves to the next free name beside it, "Untitled 2.md" and
on, the way a second note moved into the folder is named, and moves back if
publishing fails. Anything but a plain file still refuses. The name helper
is core's cloudSyncFreePath, copied until the shell adopts a core that
exports it (2.76.0); that core also settles the conflicts a stuck sync
queued against files they only passed.
…icator and the notch

The iPhone port of the Android shell's system bar fix (Dave, Discord,
2026-10-23: Review sync changes drew its last line under the Android
navigation bar). Both shells carry the same mobile.css dialog-sheet and
app-shell rules, and the iPhone had the same geometry problems; only the
insets differ.

This shell has always drawn edge to edge (viewport-fit=cover, contentInset
never), so env(safe-area-inset-*) carries the real values and the CSS owns
every inset: the Dynamic Island at the top, the home indicator at the
bottom, and in landscape the sensor housing on one side with a matching
inset on the other. Three things were wrong:

- Dialog sheets kept the home indicator's height as padding inside their
  86dvh cap. Core sizes some dialog bodies in vh for the desktop (Review
  sync changes has a 72vh scroller under its header); once the body fills
  up, header + body + inset overrun the cap, and overflow:hidden clips at
  the padding edge, so the body painted into the strip under the
  indicator: 8 px on a 17 Pro in portrait, 36 px in landscape, where the
  end of the body sat off the bottom of the screen.
- Settings' footer note sat under the home indicator, and the search
  palette's results ran to the screen bottom, so a long list could never
  scroll its last rows clear of it.
- Nothing honored the side insets. In landscape the editor's lines, the
  back button, the More and Create sheets, dialog sheets, the drawer, the
  search palette, Outline and Settings all ran under the sensor housing.

Dialog sheets now lay block panels out as a column whose vh-capped scroller
shrinks to fit, scroll instead of clipping, and pad the side insets;
panels core already lays out as flex or grid keep their layout. Palettes
and Settings pad all four insets and move their corner buttons in; the
app shell, shell sheets and onboarding pad the sides; the drawer widens by
the left inset; side panels are inset, and the toast host clears both
sides. Selectors and values match the Android change one for one, so the
two shells stay in step. No native, Capacitor config or app-core change;
in landscape a dialog's tinted footer strip now stops at the safe area.

Reproduced on a scratch iPhone 17 Pro simulator (iOS 26.5) with a stand-in
for Review sync changes built from core 2.75.0's Modal, Header and Body
classes, loading and loaded. After the fix a probe finds no button, input
or text in any inset, portrait and both landscape rotations; the Trash
confirm and Rename keep their stacking and Settings keeps its grid. The
two new layout contracts fail on the old CSS; 285 tests, typecheck and
build pass. Cause, measurements and how to test locally are in
docs/safe-area-insets-validation-2026-10-23.md.
…by priority

Core core-2.76.0-core.h076cc71aa1ce0bbe, built by CI from ZenNotes/zennotes
61628218 (the v2.76.0 release commit); core:adopt checked SHA-256,
SHA-512, packed versions and clean-source provenance.

Core 2.76.0 adds Choose a date… to the task menu a long-press opens, with
the month calendar a tap on a day sets (ZenNotes/zennotes#991), gives an
undated task its own No due date group and Status board column instead of
Today (ZenNotes/zennotes#990), and an Order menu that puts high priority
first in the Tasks list (ZenNotes/zennotes#989). Its Cloud coordinator
settles a conflict that met this device's file once Cloud has moved that
note on, so the other device's version can no longer delete a note this
device kept (Dave, Discord), and it names a note's folder the same way in
note search, the buffer switcher and the [[ picker.

This shell's staged resolve now asks core's cloudSyncFreePath for the next
free name instead of the copy it carried until this core. No new bridge
method or long-press entry; the bridge contract adds tasksListOrder to the
portable preferences and otherwise changed only its version.

npm run upstream (boundaries and typecheck), 287 tests and sync pass.
Core 2.76.0 puts an Order row (Note order / Priority, ZenNotes/zennotes#989)
between the Tasks list's toolbar and the list. On a phone the row grew to
split the screen with the list: a third of the screen of empty space with
the select floating in the middle, found on the simulator while preparing
this release.

The shell thumb-sizes every select row with `div:has(> select) { flex: 1 }`,
written when the only selects were the Kanban and database Board Group by
rows, which share a toolbar line, where flex: 1 fills the line. The Order
row is stacked in the Tasks view's column instead, so flex: 1 grew it
vertically. A select row that is a direct child of a flex column now keeps
its own height (`flex: none`); rows on a toolbar line are unchanged
(measured: Kanban's Group by row still fills its line at 44 px).

Measured in the release web build at 375x812: the Order row is 53 px and the
list starts right under it (before: 311 px). A layout contract test pins
both rules.
Core 2.76.0's task menu has Choose a date… (ZenNotes/zennotes#991), so a
long-press on any task now leads to the month calendar that typing @Date
opens in a note. Under the grid it said "Arrows move. PageUp/PageDown change
the month, with Shift the year. Enter picks the day.", keyboard help a
phone has no keys for; this shell already hides the other key-hint strips
on touch for that reason.

The help text goes on phones; the Today button beside it keeps its place on
the right. Tablets keep both, as they keep the other hints. Seen and checked
on the iPhone simulator with this release's build; a layout contract test
pins the rule.
@adibhanna
adibhanna merged commit 7caa474 into main Oct 23, 2026
1 check 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