2026-07-30 - 2026-10-30

Overview

108 Active Pull Requests
123 Active Issues
Excluding merges, 2 authors have pushed 12 commits to main and 132 commits to all branches. On main, 30 files have changed and there have been 3525 additions and 295 deletions.

3 Releases published by 1 user

Published v1.0.0-rc3 2026-10-26 19:46:45 +01:00

Published v1.0.0-rc2 2026-10-18 21:51:03 +02:00

Published v1.0.0-rc1 2026-10-14 09:07:22 +02:00

107 Pull requests merged by 1 user

Merged #232 README: the close() sentence split in two (closes #231) 2026-10-26 19:32:04 +01:00

Merged #230 README: four sentences fixed for the documents gate (closes #229) 2026-10-26 18:59:29 +01:00

Merged #228 README.md rewritten sentence by sentence (closes #219) 2026-10-26 17:48:26 +01:00

Merged #227 quak helper fix-missing-thumbnails --file on an empty cache stops fetching collections once it finds every file (closes #223) 2026-10-26 11:25:11 +01:00

Merged #226 quak get and get-thumb on an empty cache stop fetching collections once they find the file (closes #222) 2026-10-26 10:18:29 +01:00

Merged #225 quak files COLLECTION fetches that collection's files alone (closes #217) 2026-10-26 09:04:40 +01:00

Merged #220 A file's JSON holds keywords in place of its CLIP embedding (closes #218) 2026-10-22 23:32:25 +02:00

Merged #134 next → main: Photo save path, download and EXIF; version from git; example script 2026-10-22 18:55:49 +02:00

Merged #216 -v raises the log level per repeat; -q prints only fatal errors 2026-10-18 21:47:00 +02:00

Merged #215 quak files takes the collection ID as an optional argument 2026-10-18 20:17:11 +02:00

Merged #213 Names quak builds from server data fit in 255 bytes 2026-10-18 20:01:35 +02:00

Merged #214 quak collections reads the collection list alone 2026-10-18 19:01:35 +02:00

Merged #208 ML data that does not decrypt is recorded with its reason (closes #198) 2026-10-16 07:23:17 +02:00

Merged #209 --verify keeps a mismatched original until a matching copy replaces it (closes #199) 2026-10-16 06:56:19 +02:00

Merged #204 An album whose folder cannot be made no longer stops the backup (closes #197) 2026-10-16 05:23:28 +02:00

Merged #207 The binary make install builds retries a refused or unresolvable connection (closes #206) 2026-10-16 04:56:21 +02:00

Merged #203 A network failure is printed and recorded with its reason (closes #196) 2026-10-16 03:23:17 +02:00

Merged #202 README says that make install needs nix (closes #200) 2026-10-16 01:40:20 +02:00

Merged #192 quak backup works on up to the content pool's limit of originals at once (closes #182) 2026-10-14 09:07:00 +02:00

Merged #195 TODO.md's Next Step names the open issues, not a closed one (closes #194) 2026-10-14 08:07:49 +02:00

Merged #193 A backup whose lock is lost stops with one line, not a stack trace (closes #184) 2026-10-14 07:37:27 +02:00

Merged #188 One album or file quak cannot decrypt no longer stops a refresh or a backup (closes #181) 2026-10-14 07:08:58 +02:00

Merged #190 quak backup no longer refreshes its library on a timer (closes #183) 2026-10-14 04:10:15 +02:00

Merged #191 Test quak backup end to end against a fake Ente server (closes #186) 2026-10-14 03:38:39 +02:00

Merged #189 An ID on the command line is decimal digits only (closes #185) 2026-10-14 03:06:35 +02:00

Merged #180 README: running quak backup from cron, and its exit codes (closes #170) 2026-10-07 00:47:38 +02:00

Merged #179 quak backup --verify re-hashes stored originals and downloads again any that do not match (closes #168) 2026-10-06 22:47:27 +02:00

Merged #178 quak backup refuses to run while another backup of the same directory runs, exit 2 (closes #169) 2026-10-06 20:30:53 +02:00

Merged #177 quak backup writes each original's EXIF, XMP and dimensions into its JSON (closes #167) 2026-10-06 16:47:32 +02:00

Merged #173 An expired session exits 3 with one line saying to run quak login (closes #164) 2026-10-06 14:01:50 +02:00

Merged #174 quak backup retries failed requests for longer (closes #165) 2026-10-06 12:47:41 +02:00

Merged #176 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 10:30:30 +02:00

Merged #175 quak backup writes the account and album records backup-metadata writes 2026-10-06 07:13:26 +02:00

Merged #172 quak backup writes each file's ML data into its JSON (closes #163) 2026-10-06 05:13:28 +02:00

Merged #161 Download-albums example test no longer depends on the disk's free space (closes #160) 2026-10-03 15:30:54 +02:00

Merged #157 docker build . stamps the git tag or short commit, not dev (closes #154) 2026-10-02 06:12:57 +02:00

Merged #159 exif() returns every EXIF tag in the file (closes #156) 2026-10-02 05:30:05 +02:00

Merged #158 Thumbnail test on main: re-encode a small image so it cannot time out (closes #153) 2026-10-02 04:22:27 +02:00

Merged #152 Remove the content cache's handling of an earlier version's live-photo ZIP (closes #151) 2026-10-02 04:14:30 +02:00

Merged #155 Thumbnail test: re-encode a small image so it cannot time out (closes #153) 2026-10-02 03:49:24 +02:00

Merged #150 Example script: download every album's photos and metadata (closes #144) 2026-10-02 00:33:01 +02:00

Merged #149 Photo: one async method per EXIF field (closes #148) 2026-10-02 00:09:24 +02:00

Merged #146 Save path ./photos/YYYY/YYYY-MM/YYYY-MM-DD/YYYY-MM-DD.fileID.ext; download() from the cache first (closes #143) 2026-10-01 23:20:58 +02:00

Merged #147 exif(): read HEIF/HEIC originals with exifreader (closes #145) 2026-10-01 22:34:09 +02:00

Merged #142 Photo: save path, is-local, content bytes, metadata and EXIF getters (closes #141) 2026-10-01 17:58:24 +02:00

Merged #138 TODO.md workflow: branch from and merge into next (closes #137) 2026-09-29 05:54:36 +02:00

Merged #136 README development workflow: branch from and merge into next (closes #135) 2026-09-29 05:38:37 +02:00

Merged #133 Bring README and TODO.md in line with next after the milestone merge (closes #132) 2026-09-29 05:22:58 +02:00

Merged #31 next → main: pre-1.0 milestone 2026-09-29 03:12:32 +02:00

Merged #131 Test the live-photo writer's fsyncs (closes #130) 2026-09-28 18:45:48 +02:00

Merged #128 Store live photos as their image and their video (closes #107) 2026-09-28 18:06:01 +02:00

Merged #129 Sync next2 into next: hardening, backup and CLI fixes 2026-09-24 12:21:38 +02:00

Merged #127 Mark the package private and declare engines and exports (closes #6) 2026-09-23 14:17:53 +02:00

Merged #126 Bring README and TODO.md in line with the tree on next2 2026-09-23 10:08:03 +02:00

Merged #125 Test quak login and backup-metadata --exif 2026-09-23 09:27:41 +02:00

Merged #124 Write each backed-up original once and skip the precache (closes #106) 2026-09-23 08:48:03 +02:00

Merged #123 Refresh before backup-metadata and the thumbnail helpers answer (closes #100) 2026-09-23 08:11:37 +02:00

Merged #122 Make backup wait for the server refresh and fail when it fails 2026-09-23 08:07:44 +02:00

Merged #121 Print CLI errors as one line instead of a stack trace 2026-09-23 07:33:26 +02:00

Merged #120 Keep another process's downloads when opening a library (closes #105) 2026-09-23 07:25:29 +02:00

Merged #112 Make lint and test phases of the Dockerfile (closes #96) 2026-09-23 07:18:46 +02:00

Merged #119 Skip thumbnail repairs the server always refuses (closes #109) 2026-09-23 07:03:33 +02:00

Merged #118 Test the live-photo hash check error paths (closes #117) 2026-09-23 06:56:15 +02:00

Merged #116 quak logout ends the session on the server (closes #108) 2026-09-23 06:51:12 +02:00

Merged #115 Give backup album folders distinct names and remove stale entries 2026-09-23 06:36:13 +02:00

Merged #98 Check downloaded originals against their recorded content hash (closes #68) 2026-09-23 06:16:57 +02:00

Merged #113 Start empty when the cache directory holds another account's cache (closes #104) 2026-09-23 05:56:14 +02:00

Merged #114 backup-metadata: keep going when an ML data request fails (closes #101) 2026-09-23 05:49:38 +02:00

Merged #95 Single-source the version from package.json 2026-09-23 05:07:47 +02:00

Merged #94 Test that close() waits for the originals precache (closes #93) 2026-09-23 04:54:46 +02:00

Merged #92 Fix two intermittently failing library tests (closes #90) 2026-09-23 04:38:00 +02:00

Merged #91 Pin three untested guards: download timer, URL fragment, short APP1 2026-09-23 03:44:45 +02:00

Merged #88 Make the download deadline an idle deadline and cancel failed bodies (closes #24) 2026-09-23 03:14:42 +02:00

Merged #87 Build every ApiClient request URL in one place (closes #18) 2026-09-23 02:57:42 +02:00

Merged #86 Move CLI commands into testable functions and test them 2026-09-23 02:47:47 +02:00

Merged #85 Harden the backup tree's atomic copy (closes #22) 2026-09-23 02:44:47 +02:00

Merged #83 Harden the retry classifier and pin per-attempt deadlines 2026-09-23 02:38:02 +02:00

Merged #84 Harden the JPEG EXIF scan against malformed input 2026-09-23 02:28:15 +02:00

Merged #82 Keep make test from collecting tests in nested checkouts 2026-09-23 02:18:32 +02:00

Merged #81 Drop the deprecated @types/libsodium-wrappers-sumo stub (closes #27) 2026-09-23 02:15:08 +02:00

Merged #79 Validate session snapshots and wipe keys on logout (closes #10) 2026-09-23 02:08:02 +02:00

Merged #78 Sanitize file names taken from server metadata (closes #9) 2026-09-23 02:04:32 +02:00

Merged #77 Rewrite the README API reference for the shipped library surface 2026-09-23 00:27:31 +02:00

Merged #74 Port the quak CLI to the library API (closes #52) 2026-09-23 00:00:55 +02:00

Merged #76 Add fresh read variants that await a server round-trip (closes #75) 2026-09-22 23:29:15 +02:00

Merged #73 Precache all thumbnails and pinned originals from Library.open (closes #48) 2026-09-22 21:21:34 +02:00

Merged #72 Content-similarity search surface over the CLIP index (closes #50) 2026-09-22 20:45:59 +02:00

Merged #70 Rebuild backup on the library API with a durable failure ledger 2026-09-22 20:21:50 +02:00

Merged #71 Bound the originals cache with adaptive LRU eviction (closes #47) 2026-09-22 20:13:22 +02:00

Merged #66 On-disk content and thumbnail cache with per-photo fetch and prefetch 2026-09-22 18:38:23 +02:00

Merged #69 Revert ML search (#50): it breaks make build (tsc) and reddened next 2026-09-22 18:21:55 +02:00

Merged #67 Content-similarity search surface over the CLIP index 2026-09-22 18:14:14 +02:00

Merged #65 Fetch, store, and index per-file ML data and CLIP embeddings (closes #49) 2026-09-22 17:54:42 +02:00

Merged #64 In-process read surface: albums, photos, and timeline grouping 2026-09-22 17:21:48 +02:00

Merged #63 Three bounded request pools for metadata, content, and thumbnails (closes #45) 2026-09-22 15:31:21 +02:00

Merged #62 Plain-record library snapshot and change subscription 2026-09-22 15:22:52 +02:00

Merged #61 Accumulate streamDecrypt reads linearly, not quadratically (closes #21) 2026-09-22 15:13:09 +02:00

Merged #60 Library.open with a transparent background refresh loop 2026-09-22 14:52:02 +02:00

Merged #59 Stream decrypted downloads to disk with bounded memory (closes #40) 2026-09-22 13:54:21 +02:00

Merged #58 On-disk JSON metadata store for the local cache (closes #41) 2026-09-22 12:52:51 +02:00

Merged #57 Resumable, deletion-aware collection and file enumeration (closes #38) 2026-09-22 12:37:11 +02:00

Merged #56 feat(download): durable atomic writer and per-chunk progress hook (closes #39) 2026-09-22 12:01:06 +02:00

Merged #55 Carry file size, thumbnail size, and deletion flag through decryptFile 2026-09-22 12:01:04 +02:00

Merged #28 Make the image build multi-stage and cache-proof (closes #4) 2026-08-09 16:53:05 +02:00

Merged #26 Compile bin/ alongside src/ so the package can be built (closes #3) 2026-08-09 12:21:47 +02:00

Merged #23 Retry transient network failures with exponential backoff (closes #2) 2026-08-09 08:03:10 +02:00

Merged #20 Verify secretstream TAG_FINAL and write downloads atomically (closes #1) 2026-08-09 04:59:44 +02:00

1 Pull request proposed by 1 user

Proposed #221 next into main 2026-10-22 23:35:24 +02:00

122 Issues closed from 2 users

Closed #231 README: one sentence fails the second documents gate 2026-10-26 19:32:04 +01:00

Closed #229 README: five sentences fail the documents gate 2026-10-26 18:59:30 +01:00

Closed #219 Rewrite README.md and the other prose documents sentence by sentence, on Fable 2026-10-26 17:48:26 +01:00

Closed #223 quak helper fix-missing-thumbnails --file fetches every collection to find the files named 2026-10-26 11:25:11 +01:00

Closed #222 quak get and quak get-thumb fetch every collection to find one file 2026-10-26 10:18:29 +01:00

Closed #217 pulls all collection data when listing files for a single collection 2026-10-26 09:04:41 +01:00

Closed #218 clip ml metadata embeddings are useless 2026-10-22 23:32:25 +02:00

Closed #201 1.0: v1.0.0-rc2 is a release candidate 2026-10-22 19:03:08 +02:00

Closed #212 -v/--verbose raises the log level per repeat; -q/--quiet prints only fatal errors 2026-10-18 21:47:06 +02:00

Closed #211 Mandatory arguments are positional; quak files with no argument lists every file 2026-10-18 20:17:49 +02:00

Closed #205 Names quak builds from server data can be over 255 bytes: backup-metadata album folders, quak get defaults, long extensions in a save path 2026-10-18 20:01:35 +02:00

Closed #210 quak collections hangs with no output on a live account 2026-10-18 19:01:36 +02:00

Closed #198 ML data that does not decrypt is treated as absent, and the reason is lost 2026-10-16 07:23:17 +02:00

Closed #199 --verify removes a mismatched original before its replacement has been downloaded 2026-10-16 06:56:19 +02:00

Closed #197 An album whose folder cannot be made stops the run before the other albums and before failures.json is saved 2026-10-16 05:23:28 +02:00

Closed #206 The binary make install builds does not retry a connection that fails, or record it as transient 2026-10-16 04:56:21 +02:00

Closed #196 A network failure is logged and recorded as fetch failed, with the reason dropped 2026-10-16 03:23:17 +02:00

Closed #200 README: make install needs nix, which the cron section does not say 2026-10-16 01:40:20 +02:00

Closed #182 quak backup downloads one original at a time 2026-10-14 09:07:00 +02:00

Closed #194 TODO.md says the cache design waits on sneak's review; that issue is closed 2026-10-14 08:07:50 +02:00

Closed #184 A backup whose lock is lost dies with a stack trace 2026-10-14 07:37:28 +02:00

Closed #181 One file or album quak cannot decrypt stops every refresh, so quak backup stores nothing 2026-10-14 07:08:59 +02:00

Closed #183 quak backup asks the server for changes every 3 seconds for its whole run 2026-10-14 04:10:16 +02:00

Closed #186 Test quak backup end to end against a fake of the Ente HTTP API 2026-10-14 03:38:39 +02:00

Closed #185 ID arguments accept 0x10, 1e3, 1.5 and an empty string, and --file drops IDs it cannot read 2026-10-14 03:06:36 +02:00

Closed #162 One cron-safe command that mirrors the whole account, ML data and metadata included 2026-10-07 01:09:03 +02:00

Closed #170 README: running quak backup from cron, and its exit codes 2026-10-07 00:47:38 +02:00

Closed #168 quak backup --verify re-hashes stored originals and downloads again any that do not match 2026-10-06 22:47:28 +02:00

Closed #169 quak backup refuses to run while another backup of the same directory runs, exit 2 2026-10-06 20:30:54 +02:00

Closed #167 quak backup writes each original's EXIF, XMP and dimensions into its JSON file 2026-10-06 16:47:32 +02:00

Closed #164 An expired session fails with one line saying to run quak login, exit 3 2026-10-06 14:01:50 +02:00

Closed #165 quak backup retries for longer, with the budget set in the library 2026-10-06 12:47:41 +02:00

Closed #171 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 10:30:35 +02:00

Closed #166 quak backup writes the account and album records backup-metadata writes 2026-10-06 07:13:56 +02:00

Closed #163 quak backup writes each file's ML data into its JSON file 2026-10-06 05:13:28 +02:00

Closed #160 Make next green: the download-albums example test fails on a disk with under 50 GiB free 2026-10-03 15:30:54 +02:00

Closed #36 Design for review: a cache layer (SQLite metadata + on-disk content/thumbnail store) and a crash-safe backup on it 2026-10-03 14:30:31 +02:00

Closed #154 docker build . stamps dev, not the git tag or short commit 2026-10-02 06:12:57 +02:00

Closed #148 Photo: one async accessor per EXIF field, each calling exif() 2026-10-02 05:30:06 +02:00

Closed #156 exif() returns every EXIF tag in the file, not only the thirteen 2026-10-02 05:30:05 +02:00

Closed #153 Make main and next green: a thumbnail test times out on the first test pass 2026-10-02 04:22:28 +02:00

Closed #151 Remove the content cache's handling of an earlier version's live-photo ZIP 2026-10-02 04:14:30 +02:00

Closed #144 Example script: download every album's photos and metadata to the filesystem 2026-10-02 00:33:01 +02:00

Closed #143 Default save path ./photos/YYYY/YYYY-MM/YYYY-MM-DD/YYYY-MM-DD.photoid.ext; downloads to it come from the cache when cached 2026-10-01 23:20:58 +02:00

Closed #145 exif(): read HEIF/HEIC originals, not only JPEG 2026-10-01 22:34:10 +02:00

Closed #140 Document high-level API usage; assess fluent album/photo chain against current API shape 2026-10-01 21:06:26 +02:00

Closed #141 Photo: save path, is-local, content bytes, and common metadata and EXIF getters 2026-10-01 17:58:24 +02:00

Closed #139 Run every build, test and lint step in the Dockerfiles at nice -n 19 2026-09-29 13:12:08 +02:00

Closed #137 TODO.md workflow: branch from and merge into next, not main 2026-09-29 05:54:37 +02:00

Closed #135 README development workflow: branch from and merge into next, not main 2026-09-29 05:38:37 +02:00

Closed #132 Bring README.md and TODO.md in line with next after the milestone merge 2026-09-29 05:22:58 +02:00

Closed #12 Add tests for the CLI (bin/quak.ts) 2026-09-29 03:12:33 +02:00

Closed #29 make check runs prettier --check . twice 2026-09-29 03:12:33 +02:00

Closed #30 Run all linting in Docker via Dockerfile.lint + script/lint 2026-09-29 03:12:33 +02:00

Closed #33 lint-once.test.ts misses the path CI actually runs, and its lockfile assertion checks the wrong branch 2026-09-29 03:12:33 +02:00

Closed #80 Retry classifier hardening and per-attempt deadline tests (from issue 24, items 3-9) 2026-09-29 03:12:33 +02:00

Closed #111 Bring README and TODO.md in line with the tree on next2 2026-09-29 03:12:33 +02:00

Closed #130 Test that the live-photo writer syncs its files before and after the rename 2026-09-28 18:45:49 +02:00

Closed #107 Live photos are saved as a ZIP under the image's extension 2026-09-28 18:06:01 +02:00

Closed #6 Package metadata for release: engines, exports, prepublishOnly 2026-09-23 14:17:53 +02:00

Closed #16 Decision needed: does quak publish to npm? 2026-09-23 13:50:31 +02:00

Closed #97 Review toward 1.0: identify and file all next steps 2026-09-23 10:08:10 +02:00

Closed #110 Test quak login and backup-metadata --exif 2026-09-23 09:27:41 +02:00

Closed #106 quak backup writes every original twice and precaches the whole account 2026-09-23 08:48:03 +02:00

Closed #100 backup-metadata and the thumbnail helpers answer from the cache without refreshing 2026-09-23 08:11:37 +02:00

Closed #99 backup does not wait for the server refresh and ignores its failure 2026-09-23 08:07:44 +02:00

Closed #102 CLI prints a raw stack trace instead of an error message 2026-09-23 07:33:26 +02:00

Closed #105 Opening a library deletes another process's download in progress 2026-09-23 07:25:29 +02:00

Closed #96 Re-vendor the lint and test setup from the canonical template (lint and test as Dockerfile phases) 2026-09-23 07:18:46 +02:00

Closed #109 fix-missing-thumbnails retries files the server will always refuse 2026-09-23 07:03:33 +02:00

Closed #117 Test the live-photo hash check against an unreadable ZIP and a missing image or video entry 2026-09-23 06:56:16 +02:00

Closed #108 quak logout leaves the session valid on the server 2026-09-23 06:51:12 +02:00

Closed #103 Backup album folders drop files with the same title and never remove old entries 2026-09-23 06:36:13 +02:00

Closed #68 Wire content-integrity hash comparison once the hash construction is confirmed 2026-09-23 06:16:58 +02:00

Closed #104 A cache directory reused by a second account mixes the two accounts' data 2026-09-23 05:56:15 +02:00

Closed #101 backup-metadata stops the whole dump when one ML data request fails 2026-09-23 05:49:38 +02:00

Closed #32 Rename LINT_EPOCH to CHECK_EPOCH in Dockerfile.lint (blocked on a policy ruling) 2026-09-23 05:28:05 +02:00

Closed #5 Single-source the version string 2026-09-23 05:07:47 +02:00

Closed #93 Test that close() waits for the originals precache sweep 2026-09-23 04:54:46 +02:00

Closed #90 Fix two intermittently failing library tests 2026-09-23 04:38:01 +02:00

Closed #89 Pin three guards reviewers found untested (download timer, URL fragment, short APP1 segment) 2026-09-23 03:44:46 +02:00

Closed #24 Retry/timeout follow-ups: idle deadline, reader cancellation, and classifier hardening 2026-09-23 03:14:42 +02:00

Closed #18 Unify URL construction in ApiClient 2026-09-23 02:57:42 +02:00

Closed #22 Atomic download writes: durability, orphan reaping, and untested failure paths 2026-09-23 02:44:48 +02:00

Closed #11 Harden the JPEG EXIF scanner against malformed input 2026-09-23 02:28:15 +02:00

Closed #19 Prune stale remote branches 2026-09-23 02:18:48 +02:00

Closed #25 make test silently runs the suite N+1 times when a git worktree exists inside the checkout 2026-09-23 02:18:32 +02:00

Closed #27 Drop the deprecated @types/libsodium-wrappers-sumo stub dependency 2026-09-23 02:15:08 +02:00

Closed #10 Client session handling: stop reaching into private state, validate snapshots, clear keys on logout 2026-09-23 02:08:02 +02:00

Closed #9 Sanitize server-controlled filenames used as output paths 2026-09-23 02:04:32 +02:00

Closed #15 Tag v1.0.0 2026-09-23 01:36:26 +02:00

Closed #7 listFiles can loop forever when the server stops advancing 2026-09-23 00:30:14 +02:00

Closed #13 Rewrite the README API reference to match the implementation 2026-09-23 00:27:35 +02:00

Closed #53 Rewrite the README API reference for the new library surface 2026-09-23 00:27:31 +02:00

Closed #17 fixMissingThumbnails assumes every file is a JPEG 2026-09-23 00:00:59 +02:00

Closed #52 Port the quak CLI to the new library API 2026-09-23 00:00:55 +02:00

Closed #75 Fresh read variants that await a server round-trip before resolving 2026-09-22 23:29:15 +02:00

Closed #54 Owner decision: quak (priority repo) is starved of worker capacity 2026-09-22 22:11:39 +02:00

Closed #48 Precache thumbnails for the whole account and originals for favorites and the latest week 2026-09-22 21:21:34 +02:00

Closed #50 Content-similarity search surface over the CLIP index 2026-09-22 20:45:59 +02:00

Closed #8 runBackup must not crash on symlink failure, and must repair partial originals 2026-09-22 20:21:54 +02:00

Closed #51 Rewrite the backup command on the library API with a durable failure ledger 2026-09-22 20:21:50 +02:00

Closed #47 Originals cache size limit with least-recently-used eviction 2026-09-22 20:13:22 +02:00

Closed #46 On-disk content and thumbnail cache, with per-photo fetch and thumbnail prefetch 2026-09-22 18:38:28 +02:00

Closed #49 Fetch and store machine-learning (magic) data and build the CLIP index 2026-09-22 17:54:42 +02:00

Closed #44 In-process read surface: albums, photos, and timeline grouping 2026-09-22 17:21:53 +02:00

Closed #45 Three bounded request pools for metadata, content, and thumbnails 2026-09-22 15:31:21 +02:00

Closed #43 Plain-record snapshot and change subscription for the library 2026-09-22 15:22:57 +02:00

Closed #42 Library.open with a background refresh loop and staleness window 2026-09-22 14:53:29 +02:00

Closed #21 streamDecrypt buffers quadratically: recopies the whole accumulated buffer on every network read 2026-09-22 13:54:21 +02:00

Closed #40 Stream decrypted downloads to disk instead of buffering whole files in memory 2026-09-22 13:54:21 +02:00

Closed #41 On-disk JSON metadata store for the local cache 2026-09-22 12:52:51 +02:00

Closed #38 Resumable, deletion-aware collection and file enumeration on Client 2026-09-22 12:37:11 +02:00

Closed #39 Download module: shared atomic writer with fsync, and per-chunk progress 2026-09-22 12:01:06 +02:00

Closed #37 Carry file size, thumbnail size, and deletion flag through file decryption 2026-09-22 12:01:04 +02:00

Closed #34 lint-once: sh -c indirection is not followed by the invocation walk 2026-09-05 11:32:54 +02:00

Closed #35 lint-once: run: >- block scalars are caught only by a test whose name does not say so 2026-09-05 11:32:54 +02:00

Closed #4 Make make docker green and policy-conformant 2026-08-09 16:53:05 +02:00

Closed #14 Decision needed: account credentials committed in test/integration/live-login.ts 2026-08-09 16:10:14 +02:00

Closed #3 Fix the TypeScript build: make build fails with TS6059 on main 2026-08-09 12:21:47 +02:00

Closed #2 Retry policy: no retry on 4xx, exponential backoff on 5xx and network errors 2026-08-09 08:03:10 +02:00

Closed #1 Downloads: verify secretstream TAG_FINAL and write output atomically 2026-08-09 04:59:44 +02:00

123 Issues created by 1 user

Opened #1 Downloads: verify secretstream TAG_FINAL and write output atomically 2026-08-09 03:42:25 +02:00

Opened #2 Retry policy: no retry on 4xx, exponential backoff on 5xx and network errors 2026-08-09 03:43:12 +02:00

Opened #3 Fix the TypeScript build: make build fails with TS6059 on main 2026-08-09 03:43:28 +02:00

Opened #4 Make make docker green and policy-conformant 2026-08-09 03:43:44 +02:00

Opened #5 Single-source the version string 2026-08-09 03:43:56 +02:00

Opened #6 Package metadata for release: engines, exports, prepublishOnly 2026-08-09 03:44:08 +02:00

Opened #7 listFiles can loop forever when the server stops advancing 2026-08-09 03:44:20 +02:00

Opened #8 runBackup must not crash on symlink failure, and must repair partial originals 2026-08-09 03:44:34 +02:00

Opened #9 Sanitize server-controlled filenames used as output paths 2026-08-09 03:44:48 +02:00

Opened #10 Client session handling: stop reaching into private state, validate snapshots, clear keys on logout 2026-08-09 03:45:01 +02:00

Opened #11 Harden the JPEG EXIF scanner against malformed input 2026-08-09 03:45:13 +02:00

Opened #12 Add tests for the CLI (bin/quak.ts) 2026-08-09 03:45:27 +02:00

Opened #13 Rewrite the README API reference to match the implementation 2026-08-09 03:45:42 +02:00

Opened #14 Decision needed: account credentials committed in test/integration/live-login.ts 2026-08-09 03:45:59 +02:00

Opened #15 Tag v1.0.0 2026-08-09 03:46:09 +02:00

Opened #16 Decision needed: does quak publish to npm? 2026-08-09 03:46:20 +02:00

Opened #17 fixMissingThumbnails assumes every file is a JPEG 2026-08-09 03:46:29 +02:00

Opened #18 Unify URL construction in ApiClient 2026-08-09 03:46:39 +02:00

Opened #19 Prune stale remote branches 2026-08-09 03:46:48 +02:00

Opened #21 streamDecrypt buffers quadratically: recopies the whole accumulated buffer on every network read 2026-08-09 04:00:24 +02:00

Opened #22 Atomic download writes: durability, orphan reaping, and untested failure paths 2026-08-09 05:00:52 +02:00

Opened #24 Retry/timeout follow-ups: idle deadline, reader cancellation, and classifier hardening 2026-08-09 07:38:34 +02:00

Opened #25 make test silently runs the suite N+1 times when a git worktree exists inside the checkout 2026-08-09 08:04:44 +02:00

Opened #27 Drop the deprecated @types/libsodium-wrappers-sumo stub dependency 2026-08-09 12:08:54 +02:00

Opened #29 make check runs prettier --check . twice 2026-08-09 16:53:53 +02:00

Opened #30 Run all linting in Docker via Dockerfile.lint + script/lint 2026-08-10 13:15:52 +02:00

Opened #32 Rename LINT_EPOCH to CHECK_EPOCH in Dockerfile.lint (blocked on a policy ruling) 2026-08-10 15:01:43 +02:00

Opened #33 lint-once.test.ts misses the path CI actually runs, and its lockfile assertion checks the wrong branch 2026-08-10 15:20:43 +02:00

Opened #34 lint-once: sh -c indirection is not followed by the invocation walk 2026-09-04 14:12:21 +02:00

Opened #35 lint-once: run: >- block scalars are caught only by a test whose name does not say so 2026-09-04 14:12:22 +02:00

Opened #36 Design for review: a cache layer (SQLite metadata + on-disk content/thumbnail store) and a crash-safe backup on it 2026-09-10 13:17:05 +02:00

Opened #37 Carry file size, thumbnail size, and deletion flag through file decryption 2026-09-22 09:10:56 +02:00

Opened #38 Resumable, deletion-aware collection and file enumeration on Client 2026-09-22 09:10:57 +02:00

Opened #39 Download module: shared atomic writer with fsync, and per-chunk progress 2026-09-22 09:10:58 +02:00

Opened #40 Stream decrypted downloads to disk instead of buffering whole files in memory 2026-09-22 09:10:59 +02:00

Opened #41 On-disk JSON metadata store for the local cache 2026-09-22 09:11:00 +02:00

Opened #42 Library.open with a background refresh loop and staleness window 2026-09-22 09:11:02 +02:00

Opened #43 Plain-record snapshot and change subscription for the library 2026-09-22 09:11:03 +02:00

Opened #44 In-process read surface: albums, photos, and timeline grouping 2026-09-22 09:11:04 +02:00

Opened #45 Three bounded request pools for metadata, content, and thumbnails 2026-09-22 09:11:05 +02:00

Opened #46 On-disk content and thumbnail cache, with per-photo fetch and thumbnail prefetch 2026-09-22 09:11:06 +02:00

Opened #47 Originals cache size limit with least-recently-used eviction 2026-09-22 09:11:07 +02:00

Opened #48 Precache thumbnails for the whole account and originals for favorites and the latest week 2026-09-22 09:11:08 +02:00

Opened #49 Fetch and store machine-learning (magic) data and build the CLIP index 2026-09-22 09:11:10 +02:00

Opened #50 Content-similarity search surface over the CLIP index 2026-09-22 09:11:11 +02:00

Opened #51 Rewrite the backup command on the library API with a durable failure ledger 2026-09-22 09:11:12 +02:00

Opened #52 Port the quak CLI to the new library API 2026-09-22 09:11:13 +02:00

Opened #53 Rewrite the README API reference for the new library surface 2026-09-22 09:11:14 +02:00

Opened #54 Owner decision: quak (priority repo) is starved of worker capacity 2026-09-22 09:51:50 +02:00

Opened #68 Wire content-integrity hash comparison once the hash construction is confirmed 2026-09-22 18:05:32 +02:00

Opened #75 Fresh read variants that await a server round-trip before resolving 2026-09-22 22:55:49 +02:00

Opened #80 Retry classifier hardening and per-attempt deadline tests (from issue 24, items 3-9) 2026-09-23 01:55:01 +02:00

Opened #89 Pin three guards reviewers found untested (download timer, URL fragment, short APP1 segment) 2026-09-23 03:14:57 +02:00

Opened #90 Fix two intermittently failing library tests 2026-09-23 03:14:57 +02:00

Opened #93 Test that close() waits for the originals precache sweep 2026-09-23 04:24:17 +02:00

Opened #96 Re-vendor the lint and test setup from the canonical template (lint and test as Dockerfile phases) 2026-09-23 05:28:05 +02:00

Opened #97 Review toward 1.0: identify and file all next steps 2026-09-23 05:28:22 +02:00

Opened #99 backup does not wait for the server refresh and ignores its failure 2026-09-23 05:34:57 +02:00

Opened #100 backup-metadata and the thumbnail helpers answer from the cache without refreshing 2026-09-23 05:34:58 +02:00

Opened #101 backup-metadata stops the whole dump when one ML data request fails 2026-09-23 05:34:58 +02:00

Opened #102 CLI prints a raw stack trace instead of an error message 2026-09-23 05:34:58 +02:00

Opened #103 Backup album folders drop files with the same title and never remove old entries 2026-09-23 05:34:58 +02:00

Opened #104 A cache directory reused by a second account mixes the two accounts' data 2026-09-23 05:34:58 +02:00

Opened #105 Opening a library deletes another process's download in progress 2026-09-23 05:34:58 +02:00

Opened #106 quak backup writes every original twice and precaches the whole account 2026-09-23 05:34:58 +02:00

Opened #107 Live photos are saved as a ZIP under the image's extension 2026-09-23 05:34:58 +02:00

Opened #108 quak logout leaves the session valid on the server 2026-09-23 05:34:58 +02:00

Opened #109 fix-missing-thumbnails retries files the server will always refuse 2026-09-23 05:34:58 +02:00

Opened #110 Test quak login and backup-metadata --exif 2026-09-23 05:34:58 +02:00

Opened #111 Bring README and TODO.md in line with the tree on next2 2026-09-23 05:34:58 +02:00

Opened #117 Test the live-photo hash check against an unreadable ZIP and a missing image or video entry 2026-09-23 06:17:09 +02:00

Opened #130 Test that the live-photo writer syncs its files before and after the rename 2026-09-28 18:06:41 +02:00

Opened #132 Bring README.md and TODO.md in line with next after the milestone merge 2026-09-29 03:14:12 +02:00

Opened #135 README development workflow: branch from and merge into next, not main 2026-09-29 05:25:19 +02:00

Opened #137 TODO.md workflow: branch from and merge into next, not main 2026-09-29 05:40:28 +02:00

Opened #139 Run every build, test and lint step in the Dockerfiles at nice -n 19 2026-09-29 13:02:20 +02:00

Opened #140 Document high-level API usage; assess fluent album/photo chain against current API shape 2026-10-01 16:00:26 +02:00

Opened #141 Photo: save path, is-local, content bytes, and common metadata and EXIF getters 2026-10-01 16:44:08 +02:00

Opened #143 Default save path ./photos/YYYY/YYYY-MM/YYYY-MM-DD/YYYY-MM-DD.photoid.ext; downloads to it come from the cache when cached 2026-10-01 19:52:06 +02:00

Opened #144 Example script: download every album's photos and metadata to the filesystem 2026-10-01 19:52:12 +02:00

Opened #145 exif(): read HEIF/HEIC originals, not only JPEG 2026-10-01 20:06:01 +02:00

Opened #148 Photo: one async accessor per EXIF field, each calling exif() 2026-10-01 21:05:33 +02:00

Opened #151 Remove the content cache's handling of an earlier version's live-photo ZIP 2026-10-02 00:33:25 +02:00

Opened #153 Make main and next green: a thumbnail test times out on the first test pass 2026-10-02 01:50:35 +02:00

Opened #154 docker build . stamps dev, not the git tag or short commit 2026-10-02 02:21:48 +02:00

Opened #156 exif() returns every EXIF tag in the file, not only the thirteen 2026-10-02 03:01:55 +02:00

Opened #160 Make next green: the download-albums example test fails on a disk with under 50 GiB free 2026-10-03 14:29:09 +02:00

Opened #162 One cron-safe command that mirrors the whole account, ML data and metadata included 2026-10-06 01:10:29 +02:00

Opened #163 quak backup writes each file's ML data into its JSON file 2026-10-06 01:16:50 +02:00

Opened #164 An expired session fails with one line saying to run quak login, exit 3 2026-10-06 01:16:51 +02:00

Opened #165 quak backup retries for longer, with the budget set in the library 2026-10-06 01:16:51 +02:00

Opened #166 quak backup writes the account and album records backup-metadata writes 2026-10-06 01:17:17 +02:00

Opened #167 quak backup writes each original's EXIF, XMP and dimensions into its JSON file 2026-10-06 01:17:22 +02:00

Opened #168 quak backup --verify re-hashes stored originals and downloads again any that do not match 2026-10-06 01:17:27 +02:00

Opened #169 quak backup refuses to run while another backup of the same directory runs, exit 2 2026-10-06 01:17:28 +02:00

Opened #170 README: running quak backup from cron, and its exit codes 2026-10-06 01:17:37 +02:00

Opened #171 Re-vendor the canonical files from sneak/prompts at dd4027b 2026-10-06 01:30:09 +02:00

Opened #181 One file or album quak cannot decrypt stops every refresh, so quak backup stores nothing 2026-10-14 01:31:46 +02:00

Opened #182 quak backup downloads one original at a time 2026-10-14 01:31:46 +02:00

Opened #183 quak backup asks the server for changes every 3 seconds for its whole run 2026-10-14 01:31:47 +02:00

Opened #184 A backup whose lock is lost dies with a stack trace 2026-10-14 01:31:47 +02:00

Opened #185 ID arguments accept 0x10, 1e3, 1.5 and an empty string, and --file drops IDs it cannot read 2026-10-14 01:31:48 +02:00

Opened #186 Test quak backup end to end against a fake of the Ente HTTP API 2026-10-14 01:31:48 +02:00

Opened #187 Check quak against a live Ente account 2026-10-14 01:31:49 +02:00

Opened #194 TODO.md says the cache design waits on sneak's review; that issue is closed 2026-10-14 07:38:05 +02:00

Opened #196 A network failure is logged and recorded as fetch failed, with the reason dropped 2026-10-14 09:29:21 +02:00

Opened #197 An album whose folder cannot be made stops the run before the other albums and before failures.json is saved 2026-10-14 09:29:21 +02:00

Opened #198 ML data that does not decrypt is treated as absent, and the reason is lost 2026-10-14 09:29:22 +02:00

Opened #199 --verify removes a mismatched original before its replacement has been downloaded 2026-10-14 09:29:22 +02:00

Opened #200 README: make install needs nix, which the cron section does not say 2026-10-14 09:29:22 +02:00

Opened #201 1.0: v1.0.0-rc2 is a release candidate 2026-10-14 09:32:15 +02:00

Opened #205 Names quak builds from server data can be over 255 bytes: backup-metadata album folders, quak get defaults, long extensions in a save path 2026-10-16 02:06:43 +02:00

Opened #206 The binary make install builds does not retry a connection that fails, or record it as transient 2026-10-16 02:23:29 +02:00

Opened #210 quak collections hangs with no output on a live account 2026-10-16 14:09:46 +02:00

Opened #211 Mandatory arguments are positional; quak files with no argument lists every file 2026-10-16 14:09:46 +02:00

Opened #212 -v/--verbose raises the log level per repeat; -q/--quiet prints only fatal errors 2026-10-16 14:09:47 +02:00

Opened #217 pulls all collection data when listing files for a single collection 2026-10-22 19:01:38 +02:00

Opened #218 clip ml metadata embeddings are useless 2026-10-22 19:20:35 +02:00

Opened #219 Rewrite README.md and the other prose documents sentence by sentence, on Fable 2026-10-22 20:16:29 +02:00

Opened #222 quak get and quak get-thumb fetch every collection to find one file 2026-10-26 00:15:46 +01:00

Opened #223 quak helper fix-missing-thumbnails --file fetches every collection to find the files named 2026-10-26 00:15:54 +01:00

Opened #229 README: five sentences fail the documents gate 2026-10-26 18:10:13 +01:00

Opened #231 README: one sentence fails the second documents gate 2026-10-26 19:17:01 +01:00