Skip to content

Release 1.17.1 (build 33): Cloud device-testing fixes on core 2.60.4 - #41

Merged
adibhanna merged 6 commits into
mainfrom
release/1.17.1
Oct 2, 2026
Merged

adibhanna merged 6 commits into
mainfrom
release/1.17.1

Conversation

@adibhanna

@adibhanna adibhanna commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Hotfix for the problems found in the 2026-10-02 Cloud device testing on a real iPhone (dev 1.17.0 builds against production Cloud). Adopts core 2.60.4 (core-2.60.4-core.hae0e49f9e5397fc2, published pre-release from ZenNotes/zennotes c507caa3) and bumps to Version 1.17.1 (build 33).

Shell fixes (each tested against the pinned core 2.60.3: typecheck clean, 180/180 tests, boundary verified):

  1. fix(cloud): pulling a root-level note no longer creates a stray folder. Welcome.md pulled into the vault root made an empty Welcome.m/ (to.slice(0, to.lastIndexOf('/')) with no slash). Since 1.7.
  2. fix(cloud): the Cloud row comes back on iPhone while Cloud needs you. The hidden status bar returns as a 44px row in attention/error phases or while a decision waits (core's data-cloud-sync-* hooks); the FAB lifts by --zn-cloud-footer-height. Review opens Settings on the Cloud page (data-settings-target).
  3. fix(vaults): choosing a new Files folder asks before it replaces the current one. One bookmark means a pick silently dropped the previous folder vault; every path to the picker now asks first, and the Vaults sheet says "One Files folder at a time".
  4. fix(media): attached videos, audio and PDFs embed in the note instead of linking.

Also on this branch: adopt core 2.60.4 (conflict banner and notification, named limits, deleted-vault notice, type-to-confirm delete, Edit-mode players, the inline "Not synced to Cloud" notice, device bookkeeping kept out of Documents vaults, backup browser paging), the shell wires the new optional listCloudBackupItemsPage, and the version bump.

How to test locally

  1. Build and install on a device, sign in to Cloud, link a vault.
  2. On the desktop, create Welcome.md at the vault root and sync. Before: the phone grows an empty Welcome.m folder. After: only Welcome.md.
  3. With a Files folder vault set, More → Vaults → New Vault… → Choose Folder…. After: "Replace your Files folder vault?" appears before the Files picker; Cancel keeps everything.
  4. Attach a short video to a note. After: ![[…]] and a player instead of a link.

A note pulled from Cloud into the vault root (Welcome.md) left an empty
folder beside it named after the file minus its last character
("Welcome.m"). The rename step that moves a pulled file into place makes
the destination's parent folder first, and took the parent as
`to.slice(0, to.lastIndexOf('/'))`: with no slash in the path that is
`slice(0, -1)`, the whole name but one letter, and mkdir made it. Present
since Cloud sync came to the iPhone (277ed50, 1.7); found in device
testing on 2026-10-02.

A path without a slash now has no parent to make. The integration test
pulls Welcome.md and notes/Welcome.md and checks that only `notes` is
created. Folders an older build already made stay; they are empty and can
be deleted.
The iPhone shell hides the desktop status bar, and with it the only sign
that sync had paused a note ("1 file needs review · Review now"). In
device testing on 2026-10-02 a conflict paused a note with nothing on
the phone to say so; the way in was Settings → Cloud.

The bar returns as one 44px row while Cloud is in an attention or error
phase, or while a decision waits. It keys on the core's
data-cloud-sync-phase and data-cloud-sync-review hooks (core 2.60.4), not
its Tailwind tone classes, and on the waiting decision as well as the
phase, because every run passes through ready and syncing and a rule on
the phase alone would blink the row and bounce the FAB. The FAB and its
menu lift by --zn-cloud-footer-height, the same geometry as the Android
shell's Cloud row. While the keyboard is up the format toolbar owns that
strip, so the row stays out.

Review on that row asks Settings for its Cloud page. The phone's paged
Settings opened on the section list anyway, so people found Cloud a second
time; it now starts on the requested page when the dialog carries
data-settings-target. Both changes are inert on an older core.
…current one

The iPhone keeps one Files folder vault at a time (folder-picker.ts holds
a single security-scoped bookmark), so picking another folder replaced the
current one without a word, and a vault the person had been using vanished
from the Vaults sheet. In device testing on 2026-10-02 a Documents vault
dropped out of the list this way.

Every way into the picker now asks first when a folder vault is set:
"Replace your Files folder vault?", naming the folder that will leave the
list and saying its notes stay in Files. The New Vault sheet asks in place
(the form stays mounted underneath, so Cancel keeps the typed name and the
keyboard cannot rise over the Files picker) and passes its yes through to
the one pick it covers; Open Vault… in the palette and Settings' Change…
ask with the core's confirm dialog. Cancel leaves the bookmark and the
storage tier untouched. The Vaults sheet also states the rule under
Folders: "One Files folder at a time".

This does not lift the limit (Android keeps a list of folders; porting
that is a separate change).
A video attached on the phone landed in the note as a Markdown link, so
the note showed its file name instead of something to play; only images
were embedded. Attaching or importing an image, PDF, audio or video file
now writes an embed (`![[path]]`), which the note renders as a picture,
a document or a player; any other file still gets a link. Remote vaults
build their links through the same rule. Matches the desktop and server
changes in core 2.60.4 and znserver.
…ups page

Pins core-2.60.4-core.hae0e49f9e5397fc2, built by CI from ZenNotes/zennotes
c507caa3 (archives, provenance and the public boundary verified by
core:adopt). From the 2026-10-02 Cloud device testing:

- device bookkeeping (zennotes-cloud-sync) stays out of a synced Documents
  vault, which re-uploaded it on every run;
- a note waiting on a sync conflict says so across its top with Review,
  one notification announces each new conflict, and the status row
  carries the data-cloud-sync-* hooks this shell's Cloud row keys on;
- limits name themselves ("1 file too large for Cloud", the file named),
  a 10 GB plan reads 10 GB, a deleted Cloud vault says so on the other
  devices, and deleting one asks for its name;
- audio and video play in Edit mode, with "Not synced to Cloud" under a
  file over the 10 MB limit;
- the backup browser pages and searches the whole backup.

The shell wires the new optional listCloudBackupItemsPage to
CloudSyncHostService.listBackupItemsPage, so Browse notes reaches past
the first 50 files here too. The lockfile keeps main's order with only
the root pins and the three @ZenNotes entries changed; npm ci leaves it
as is. typecheck clean, 180/180 tests.
@adibhanna adibhanna changed the title Release 1.17.1: Cloud device-testing fixes Release 1.17.1 (build 33): Cloud device-testing fixes on core 2.60.4 Oct 2, 2026
@adibhanna
adibhanna marked this pull request as ready for review October 2, 2026 22:36
@adibhanna
adibhanna merged commit 4b1372f into main Oct 2, 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