Release 1.17.1 (build 33): Cloud device-testing fixes on core 2.60.4 - #41
Merged
Merged
Conversation
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
marked this pull request as ready for review
October 2, 2026 22:36
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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):
Welcome.mdpulled into the vault root made an emptyWelcome.m/(to.slice(0, to.lastIndexOf('/'))with no slash). Since 1.7.data-cloud-sync-*hooks); the FAB lifts by--zn-cloud-footer-height. Review opens Settings on the Cloud page (data-settings-target).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
Welcome.mdat the vault root and sync. Before: the phone grows an emptyWelcome.mfolder. After: onlyWelcome.md.![[…]]and a player instead of a link.