koh3

Version control designed for the solo developer.

V

206 saves · 11,556 lines · updated 15 minutes ago

f319f052973b add phase 0 ground: V skeleton, vendored sqlite bindings, library checks 2026-09-23 19:42 · deepseek/deepseek-flash · koh 3 implementation76be2198e257 add local core: .koh schema, tree walk and restore, one-line history, and the everyday commands 2026-09-23 19:53 · deepseek/deepseek-flash · koh 3 implementation525088cda79c make ignore rules directory-aware and pin snapshot behaviour with tests 2026-09-23 19:54 · deepseek/deepseek-flash · koh 3 implementation942d08c78d27 add phase 2: history view, flag, pluck, peek, doctor and local strip 2026-09-23 20:04 · deepseek/deepseek-flash · koh 3 implementationa15db60fd5c1 add phase 3 sync: remote interface, folder and s3 backends, offer, steal and combine 2026-09-23 20:18 · deepseek/deepseek-flash · koh 3 implementationbcdc186ee437 add remote strip propagation, incoming strip events, and koh man 2026-09-23 20:19 · deepseek/deepseek-flash · koh 3 implementation884f56f0f0d2 add phase 5 migrate with the koh2 hand-over and migration tests 2026-09-23 20:24 · deepseek/deepseek-flash · koh 3 implementation1f6a834a1455 fix log filters on a terminal, keep json pure when offering, and steady the migration fixture 2026-09-23 20:26 · deepseek/deepseek-flash · koh 3 implementation499786717d76 finish the man page for the sync and migration commands and cover migration end to end 2026-09-23 20:28 · deepseek/deepseek-flash · koh 3 implementationa5966a744383 record the full codebase review findings in continuity so the next session starts from them 2026-09-23 20:47 · claude-opus-5-5 · koh 3 full reviewb09a48226a5b queue the review findings as an ordered fix plan in continuity 2026-09-23 20:50 · claude-opus-5-5 · koh 3 review fixes8aa3154c04f0 make status and steal see executable-bit changes the way save does (3.0.1) 2026-09-23 20:54 · claude-opus-5-5 · koh 3 review fixes4149f626ab4a refuse undo, load, pluck and view load on unsaved changes and re-plan after the prompt (3.0.2) 2026-09-23 21:14 · claude-opus-5-5 · koh 3 review fixes00a1b4528f25 keep incoming event IDs so a strip is applied once, not on every steal (3.0.3) 2026-09-23 21:16 · claude-opus-5-5 · koh 3 review fixes19c02504e67a leave the line alone when steal finds this machine only ahead of the remote (3.0.4) 2026-09-23 21:19 · claude-opus-5-5 · koh 3 review fixes259ca814c682 import cloned saves parent-first so a combined repo can be stolen fresh (3.0.5) 2026-09-23 21:21 · claude-opus-5-5 · koh 3 review fixes69c3ac67d7c8 make an interrupted remote strip finish on re-run, give each strip its own event, and keep strip logic in sync (3.0.6) 2026-09-23 21:38 · claude-opus-5-5 · koh 3 review fixes1af9dc58a448 encode S3 keys once so repos with spaces sign correctly (3.0.7) 2026-09-23 21:40 · claude-opus-5-5 · koh 3 review fixes2036620528a4 mark the replayed-away originals in the history view and refresh it after actions (3.0.8) 2026-09-23 21:43 · claude-opus-5-5 · koh 3 review fixes552274baeb26 ask steal's clash questions before the write lock and refuse a steal that would overwrite unsaved files (3.0.9) 2026-09-23 21:55 · claude-opus-5-5 · koh 3 review fixes7d49e0453acd page koh man to the terminal instead of into a captured string (3.0.10) 2026-09-23 21:59 · claude-opus-5-5 · koh 3 review fixesc3643bd4833e bind a clone to the repo it was stolen from so a rename cannot fork it (3.0.11) 2026-09-23 22:01 · claude-opus-5-5 · koh 3 review fixes3e72c29a7ba3 keep diff --session and load --checkpoint on the line (3.0.12) 2026-09-23 22:03 · claude-opus-5-5 · koh 3 review fixes351a8a04769d keep the folder remote's temp and lock files out of its listings (3.0.13) 2026-09-23 22:06 · claude-opus-5-5 · koh 3 review fixesf7de384191a7 let the remote connection test recover from a leftover probe (3.0.14) 2026-09-23 22:07 · claude-opus-5-5 · koh 3 review fixes2c62be3a9131 warn instead of failing when LOG.md cannot be written after a committed change (3.0.15) 2026-09-23 22:10 · claude-opus-5-5 · koh 3 review fixesa63030364948 create the S3 credentials file private from the start and hide the typed secret (3.0.16, codex review pending) 2026-09-23 22:27 · claude-opus-5-5 · koh 3 review fixese787dbe6181a refuse to restore a file into a folder of ignored files instead of dropping it inside (3.0.17, codex review pending) 2026-09-23 22:28 · claude-opus-5-5 · koh 3 review fixes340f37f875a6 sweep only day-old peek folders in doctor (3.0.18, codex review pending) 2026-09-23 22:29 · claude-opus-5-5 · koh 3 review fixesab6e63d2bc60 never overwrite an ignored file on disk during a restore (3.0.19, codex review pending) 2026-09-23 22:30 · claude-opus-5-5 · koh 3 review fixesad580dbcce93 warn about incoming flagged saves on steal as the document asks (3.0.20, codex review pending) 2026-09-23 22:30 · claude-opus-5-5 · koh 3 review fixes65f2423754f1 print the one notice line when handing a Koh 2 repo to koh2 (3.0.21, codex review pending) 2026-09-23 22:31 · claude-opus-5-5 · koh 3 review fixesf053194e7074 remove dead sync and history code, move doctor SQL into storage, drop forwarding colour wrappers (3.0.22, codex review pending) 2026-09-23 22:32 · claude-opus-5-5 · koh 3 review fixes9323833c98e8 bump VERSION to 3.0.22, missed in the dead-code cleanup save 2026-09-23 22:32 · claude-opus-5-5 · koh 3 review fixes71d55a793226 draw going-back previews from hashes instead of diff(1) per file (3.0.23, codex review pending) 2026-09-23 22:34 · claude-opus-5-5 · koh 3 review fixesb3e8bdf8a104 leave files that already match alone during a restore (3.0.24, codex review pending) 2026-09-23 22:35 · claude-opus-5-5 · koh 3 review fixesb4580cd02192 compute the history view's detail diff once per save, not per key (3.0.25, codex review pending) 2026-09-23 22:35 · claude-opus-5-5 · koh 3 review fixes4fdcae077240 record the fix-queue outcome, pending codex reviews and the coverage campaign in continuity 2026-09-23 22:36 · claude-opus-5-5 · koh 3 review fixes84f2455205b5 match strip paths exactly, not with case-blind LIKE wildcards (3.0.26, codex review pending) 2026-09-23 22:41 · claude-opus-5-5 · koh 3 reliability campaign55fa35690dab leave files the remote changed out of combine's replay, so an undone local edit no longer blocks every steal (3.0.27, codex review pending) 2026-09-23 22:42 · claude-opus-5-5 · koh 3 reliability campaign5222a7c6691a keep saves made after a strip out of its reach when they arrive, so a clone no longer loses a file saved again after stripping (3.0.28, codex review pending) 2026-09-23 22:43 · claude-opus-5-5 · koh 3 reliability campaign7b2e6110eed5 keep files written in the last 3 seconds out of the file cache, so a coarse-clock rewrite cannot hide behind a stale hash (3.0.29, codex review pending) 2026-09-23 22:44 · claude-opus-5-5 · koh 3 reliability campaign1d049f5cd490 refuse to restore through a symlinked folder, so undo, load, pluck and steal never overwrite files outside the repo (3.0.30, codex review pending) 2026-09-23 22:47 · claude-opus-5-5 · koh 3 reliability campaign453157da5325 recognise a restore that stopped half-way and point every building command at revert, so a half-written tree is never saved or offered (3.0.31, codex review pending) 2026-09-24 03:35 · claude-opus-5-5 · koh 3 reliability campaignff9e6b8d886f put the terminal back when the hidden S3 key read fails, closing 3.0.16's codex review (3.0.32) 2026-09-24 03:41 · claude-opus-5-5 · koh 3 reliability campaigneee40896e5eb never snapshot a nested repo's .koh or .git, so the outer repo cannot roll an inner repo's history back (3.0.33) 2026-09-24 03:47 · claude-opus-5-5 · koh 3 reliability campaign88ecb8e00ef9 sweep only peek folders more than a day old, closing 3.0.18's codex review (3.0.34) 2026-09-24 03:50 · claude-opus-5-5 · koh 3 reliability campaigne6da6d4397fc report a clone's flagged saves with their reasons in text and JSON, closing 3.0.20's codex review; drop the flagged_ids helper this orphaned (3.0.35) 2026-09-24 03:52 · claude-opus-5-5 · koh 3 reliability campaign889212052e9d pin the replay count and the kept originals in the undone-edit combine test, closing 3.0.27's codex review (3.0.36) 2026-09-24 03:54 · claude-opus-5-5 · koh 3 reliability campaign702789575895 record the offered head in state as offer's step 3 asks, closing 3.0.22's codex review (3.0.37) 2026-09-24 03:58 · claude-opus-5-5 · koh 3 reliability campaigna34d063b3d6f judge racy cache rows by the newer of mtime and ctime, closing 3.0.29's codex review (3.0.38) 2026-09-24 04:00 · claude-opus-5-5 · koh 3 reliability campaignf14336a4a1c3 mark a restore before its save is recorded and name it when status cannot walk, closing 3.0.31's codex review (3.0.39) 2026-09-24 04:43 · claude-opus-5-5 · koh 3 reliability campaigncc776360f741 name the previous head after a combine so an agent can load the pre-combine tree back, and correct the man page's steal refusal (3.0.40, codex review pending) 2026-09-24 04:47 · claude-opus-5-5 · koh 3 reliability campaign1a8e4215f494 offer only the objects each save adds over its parent, so an auto-offer costs one write per changed file, not per file (3.0.41, codex review pending) 2026-09-24 04:48 · claude-opus-5-5 · koh 3 reliability campaign4d41f88e04ed let status run while another koh command writes, and say so plainly when a write has to wait too long (3.0.42, codex review pending) 2026-09-24 04:51 · claude-opus-5-5 · koh 3 reliability campaignba25a6819e6f say how to finish a restore the moment it stops part way, not to retry it (3.0.43, codex review pending) 2026-09-24 15:08 · claude-opus-5-5 · koh 3 reliability campaign15b6b8d6c6d5 let migrate accept a clean Koh 2 tree holding files Koh 2 never saved or saved under a later folder rule, so real repos migrate (3.0.44) 2026-09-24 15:21 · claude-opus-5-5 · koh 3 reliability campaign6c588d6233e4 refuse a folder remote that is not there instead of creating a stand-in at an unmounted disk's path (3.0.45) 2026-09-24 15:23 · claude-opus-5-5 · koh 3 reliability campaigne18607779731 read the tree again under the lock when head moved during a save, so a save can never undo a steal or undo that landed meanwhile (3.0.46) 2026-09-24 15:34 · claude-opus-5-5 · koh 3 reliability campaigncb84f9ea35c4 send S3 ETags back exactly as the server gave them, so offers keep landing on a server that follows RFC 7232 (3.0.47) 2026-09-24 16:09 · claude-opus-5-5 · koh 3 reliability campaignfcd909830822 report usage errors as JSON on stderr when --json is given, as the document asks (3.0.48) 2026-09-24 16:11 · claude-opus-5-5 · koh 3 reliability campaign2752ddfbc874 name the checkpoint that holds what revert discarded, recording both in one transaction (3.0.49) 2026-09-24 19:30 · claude-opus-5-5 · koh 3 reliability campaignbd73a0660022 record the reliability campaign's fixes, decisions for June and measured limits in continuity 2026-09-24 19:32 · claude-opus-5-5 · koh 3 reliability campaign5b8c8b06278b rename the sql parameter in the SQLite C declarations — sql is a keyword on newer V (3.0.50) 2026-09-24 19:34 · claude-opus-5-5 · pin V81f91e956b53 rename a test variable that shadowed the events module (3.0.51) 2026-09-24 19:35 · claude-opus-5-5 · pin V01a3746fce34 unwrap history.head with a test helper instead of ! on an option (3.0.52) 2026-09-24 19:35 · claude-opus-5-5 · pin Ve22f7a5c103c record in continuity why pinning V stopped: steal.v fails to build on V b9a2d87 2026-09-24 19:38 · claude-opus-5-5 · pin Vb31bea007973 write the pin V handoff steps into continuity before the usage limit 2026-09-24 19:47 · claude-opus-5-5 · pin V9396ba8479a4 fix steal's none check so newer V accepts it (3.0.53) 2026-09-24 19:55 · deepseek/deepseek-flash · pin V56ab9cab6ad2 make Koh 3 build and pass on V b9a2d87: json2 for the removed json module, src/exchange for the module that shadowed V's sync, the pin written down and guarded (3.0.54) 2026-09-24 20:10 · deepseek/deepseek-flash · pin V89802377db7a reformat nine files for vfmt at V b9a2d87 (3.0.55) 2026-09-24 20:12 · deepseek/deepseek-flash · pin Vc1e412b7aed8 record the V pin, both blockers and the green runs in continuity 2026-09-24 20:13 · deepseek/deepseek-flash · pin V336a06b3d11f record the pin guard's discrimination and this repo's missing remote in continuity 2026-09-24 20:24 · deepseek/deepseek-flash · pin Va1b805301c6f fix the binary reporting 3.0.52: bring VERSION back in step with v.mod and test that they match (3.0.56) 2026-09-25 14:24 · claude-opus-5-5 · linux build2369295a09d8 rename commit.v to save.v and its commit_* functions to save_worktree, save_walk and save_tree, dropping git vocabulary (3.0.57) 2026-09-25 14:34 · claude-opus-5-5 · linux build3d7e4a55ae63 record the NixOS build steps in AGENTS.md and the Linux results and settled document decisions in continuity 2026-09-25 14:41 · claude-opus-5-5 · linux build6287b5567dc3 record the live Scaleway S3 test results and the resolved query-encoding question in continuity 2026-09-26 01:40 · claude-opus-5-5 · live s3 test45ca7519f2cd let koh remote replace or repair the setting on a terminal, refuse credentials others can read, and document the hand-written config files (3.0.58) 2026-09-26 02:02 · claude-opus-5-5 · remote setup7ca392923d38 use the real tagline, version control designed for the solo developer, in koh's usage and man page (3.0.59) 2026-09-26 02:03 · claude-opus-5-5 · koh voicebea6866dbe3e name the clashing files when steal refuses without a terminal, and leave no half-made folder when a clone meets a damaged remote object (3.0.60) 2026-09-26 02:41 · claude-opus-5-5 · live remote scenariose6ac76b8f99a add the Koh 3 zsh plugin, a prompt segment and completion built on status --json, which now reports saves, size_bytes and head_flagged (3.0.61) 2026-09-26 02:43 · claude-opus-5-5 · koh voiceef399328b6ef rewrite the README around what Koh is for: version control designed for the solo developer 2026-09-26 02:43 · claude-opus-5-5 · koh voice81b27aa9028d give each remote connection check its own probe key, so two machines setting up at once no longer report a broken remote (3.0.62) 2026-09-26 02:48 · claude-opus-5-5 · live remote scenarios24cf4587461b version this repo with Koh 3 itself: AGENTS.md now points the discipline at the installed koh3 2026-09-26 03:08 · claude-opus-5-5 · migrate to koh 3c62238469b55 send S3 requests over HTTP/1.1, because V's HTTP/2 client fails any upload that takes over five minutes and a big object on a slow uplink could never be offered (3.0.63) 2026-09-26 03:21 · claude-opus-5-5 · live remote scenarios55e1a2cc5c00 record the live remote results on Mac and Linux, the Koh 3 migration of this repo and the open questions in continuity 2026-09-26 03:48 · claude-opus-5-5 · live remote scenariosa98160f0b963 keep saves made within one second newest first in the all list, breaking the tie by write order instead of by hash (3.0.64) 2026-09-26 13:07 · claude-opus-5-5 · history view752b815dd4f5 rebuild the history view on Koh 2's layout: evenly spaced entries that never wrap, HEAD marked and every other save a dot, the selected ID gold and the rest greyed, search only after /, q quits while searching, and flag or load only after the strict confirm (3.0.65) 2026-09-26 13:09 · claude-opus-5-5 · history view7feada19c118 record the history view rebuild and what is still unconfirmed in continuity 2026-09-26 13:10 · claude-opus-5-5 · history viewebe6c3ba542a make q a letter while searching, so a search can start with q, and leave Esc as the way out (3.0.66) 2026-09-26 13:15 · claude-opus-5-5 · history view501b0f6898df show unselected entries as Koh 2 does, with only the mark and ID greyed, and sit the entries 15% tighter than Koh 2's spread (3.0.67) 2026-09-26 13:29 · claude-opus-5-5 · history view4806e6424ec3 spread seven entries evenly over the whole screen instead of leaving an empty band, about 15% tighter than Koh 2's six (3.0.68) 2026-09-26 13:31 · claude-opus-5-5 · history viewd93d3d534fe8 let Esc always step back and leave the view from the list, dropping a kept filter first, and stop unknown escape sequences counting as Esc (3.0.69) 2026-09-26 13:35 · claude-opus-5-5 · history view6554688b6256 colour koh man and page it in-process like Koh 2: blue ◆ headings, amber commands and flags, Tab jumps between sections (3.0.70) 2026-09-26 13:45 · claude-opus-5-5 · koh man8001f6686656 rewrite the manual short and plain-spoken, correct its stale claims, and make koh man <command> return the whole entry with examples (3.0.71) 2026-09-26 14:04 · claude-opus-5-5 · koh manc543b1f61ba2 open the manual in the Koh website's voice and drop every mention of git (3.0.72) 2026-09-26 14:07 · claude-opus-5-5 · koh manfc918ffae554 write <repo>/format on the first offer and refuse a remote that speaks another layout on offer, steal and clone (3.0.73) 2026-09-27 09:51 · deepseek/deepseek-flash · koh 3 phases 6-8546abb43431b close the format write race by reading back the value the winner wrote, and check the format before the name clash so a remote this koh cannot read says so (3.0.74) 2026-09-27 09:56 · deepseek/deepseek-flash · koh 3 phases 6-80c0e6474868d keep checkpoints out of the saves tab, so the two history lists never overlap (3.0.75) 2026-09-27 09:57 · deepseek/deepseek-flash · koh 3 phases 6-86d6918095a35 shorten the help screen to commands and plain words, flags moved to koh man (3.0.76) 2026-09-27 10:00 · deepseek/deepseek-flash · koh 3 phases 6-80961967f3e9d keep checkpoints out of koh saves when piped or asked for json, so the list agrees with the view (3.0.77) 2026-09-27 10:04 · deepseek/deepseek-flash · koh 3 phases 6-8662cda477689 colour the help screen's version line as one light line, closing the review of the shorter screen (3.0.78) 2026-09-27 10:06 · deepseek/deepseek-flash · koh 3 phases 6-8ba2f1a3bcb27 add the build module and koh build: parse koh.build, read each project's own version in the spec's order with gradle last, run the build environment per platform and report every output path (3.0.79) 2026-09-27 10:13 · deepseek/deepseek-flash · koh 3 phases 6-8818acd921e18 close the phase 7a review: read only a quoted literal as a version, refuse an empty artifact, take stray build children with it, and prove koh builds itself in a test (3.0.80) 2026-09-27 10:19 · deepseek/deepseek-flash · koh 3 phases 6-8819e88eff38d signal the build's process group by id, since koh's own guard skips an exited command, and hold it with a test that leaves a child behind (3.0.81) 2026-09-27 10:24 · deepseek/deepseek-flash · koh 3 phases 6-8e042d2bfc1ff publish releases: build every platform before uploading, write the files, the record and releases/latest, and rename kepr.build in migrate (3.0.82) 2026-09-27 10:26 · deepseek/deepseek-flash · koh 3 phases 6-81278e421b5fc close the release review: refuse two platforms sharing an output, a platform named twice, stray offer arguments and --notes with an empty value, and check both build files before migrate moves anything (3.0.83) 2026-09-27 10:30 · deepseek/deepseek-flash · koh 3 phases 6-8b760c74f453b check release output paths before any build runs, and pin the duplicate platform, the missing --notes value and the unchanged migration in tests (3.0.84) 2026-09-27 10:37 · deepseek/deepseek-flash · koh 3 phases 6-8fe3253a128c9 add koh update: read a release document from Kepr, install only a newer version, verify its Blake3, sign it ad-hoc and rename it over the running binary (3.0.85) 2026-09-27 10:45 · deepseek/deepseek-flash · koh 3 phases 6-8416aa9fce19d wrap the help screen's also line once it passes 80 columns, now that build and update are on it (3.0.86) 2026-09-27 13:43 · deepseek/deepseek-flash · koh 3 phases 6-805916a2b7e91 read a file:// download in koh update, which is what a Kepr with a folder bucket hands out (3.0.87) 2026-09-27 14:05 · deepseek/deepseek-flash · koh 3 phases 6-8bbf4bfcaed9a record the campaign in AGENTS.md and continuity: the new modules, the ceiling June raised to 10,500, and the traps the phases taught (3.0.88) 2026-09-27 14:10 · deepseek/deepseek-flash · koh 3 phases 6-8e86a58245a22 close the update review: a no at the question refuses, the download is checked against its declared size, the swap is a real rename, a document with no version is refused and --json without --yes is a usage error (3.0.89) 2026-09-27 14:16 · deepseek/deepseek-flash · koh 3 phases 6-8a4086cd3f7da replace the saves and checkpoints aliases with koh view, which opens on saves and lists it on the help screen (3.0.90) 2026-09-27 14:26 · deepseek/deepseek-flash · koh 3 phases 6-881c95eea13a7 record koh view and the campaign's final counts in continuity (3.0.91) 2026-09-27 14:30 · deepseek/deepseek-flash · koh 3 phases 6-8ea43d4f3e936 remove the log command: view prints the whole line, checkpoints included (3.0.92) 2026-09-27 14:47 · deepseek/deepseek-flash · koh3 help and history4259fb5dff46 close the log removal's review findings: completion, stale names, three sharper tests (3.0.93) 2026-09-27 14:52 · deepseek/deepseek-flash · koh3 help and history4d8f6c23e57c give every command on the help screen its own paragraph (3.0.94) 2026-09-27 14:57 · deepseek/deepseek-flash · koh3 help and history8288d349f168 set up S3 by signing in to a Kepr with koh remote <host> (3.0.95) 2026-09-27 15:23 · deepseek/deepseek-flash · koh3 help and history1af82597b777 close the review of the Kepr remote form: validation, no shell, no redirects (3.0.96) 2026-09-27 15:42 · deepseek/deepseek-flash · koh3 help and history2b1e04f61099 steal public repos from a Kepr over HTTPS, read-only, with a per-repo source (3.0.97) 2026-09-27 16:01 · deepseek/deepseek-flash · koh3 help and history3a0d4b911f90 close the public steal review: a sourced repo is never auto-offered, and a failed clone leaves nothing (3.0.98) 2026-09-27 16:12 · deepseek/deepseek-flash · koh3 help and history982557ae0ed0 revert: 3a0d4b911f90 2026-09-28 03:222c06162b58e1 note 8e's discarded attempt, its recoverable checkpoint and the plan it works from (3.0.99) 2026-09-28 03:23 · deepseek/deepseek-flash · koh3 help and historyd7ed022ef3cd revert: 2c06162b58e1 2026-09-28 03:28128ef9e650ad record the second discarded 8e attempt and where it is recoverable (3.0.100) 2026-09-28 03:30 · deepseek/deepseek-flash · koh3 help and history1cace06dc178 wip: add the first green guided steal slice and record the remaining 8e work (3.0.101) 2026-09-28 03:46 · gpt-5 · guided stealc0fab999e938 walk through steal on a terminal: unsaved work, overview, collisions, summary and undo (3.0.102) 2026-09-28 04:24 · gpt-5 · guided stealaece2a878d50 ask or refuse on a clash when offer upgrades a stolen repo, as steal does, instead of quietly taking theirs (3.0.103) 2026-09-28 04:47 · claude-opus-5-5 · fix a2 review findings934062214af8 refuse plain http for a Kepr host that is not this machine, since the connect reply carries the bucket's secret key (3.0.104) 2026-09-28 04:52 · claude-opus-5-5 · fix a2 review findings29a1ceda1bfd drop the forwarding kepr_host wrapper, the nil backend, the unused ask hook and the duplicated strip filter from steal and offer (3.0.105) 2026-09-28 04:55 · claude-opus-5-5 · fix a2 review findings7ec030db3e06 match the guided steal screens to the addendum: the repo named, relative times, rows cut to the terminal, the kept and taken files listed, and d and ? under test (3.0.106) 2026-09-28 05:09 · claude-opus-5-5 · fix a2 review findingsd247213bdd9d refuse a steal address whose repo is not a name Kepr serves, before it reaches a URL or a folder (3.0.107) 2026-09-28 05:15 · claude-opus-5-5 · fix a2 review findings2d6d872724e3 record the 11,000 ceiling, the https rule, offer's clash stop and the approved strip timing in AGENTS.md, the manual and continuity (3.0.108) 2026-09-28 05:18 · claude-opus-5-5 · fix a2 review findingsccb80e87aea2 make a strip ban its path: every save loses it whenever made, no walk picks it up again, and strip adds it to .kohignore (3.0.109) 2026-09-28 05:48 · claude-opus-5-5 · strip removes a path for good9c78d9c43299 add a Strict Koh Discipline section to the manual (3.0.110) 2026-09-28 05:53 · claude-opus-5-5 · strip removes a path for good89b933c49b04 release Koh 3.1.0: strips ban their path from all of history, recorded in continuity (3.1.0) 2026-09-28 05:57 · claude-opus-5-5 · strip removes a path for goodc9861f20776d write the handoff: the three open codex findings, the tripwire and the discipline for the next session (3.1.0) 2026-09-28 11:53 · claude-opus-5-5 · strip removes a path for good1ca868c479bf apply every strip held here, not only those in the fetch, to saves arriving later and to the clash preview (3.1.1) 2026-09-28 12:13 · claude-opus-5-5 · strips reach every arriving savec99a73d26672 rename commit, push, pull, merge, clone and stage out of the source, tests and docs: transactions begin and end, strips are sent, a repo is stolen (3.1.2) 2026-09-28 12:20 · claude-opus-5-5 · remove git terminology from source6281c4a6e2c2 record the fixed strip and tie findings, the git terminology sweep and the open offer/strip race in continuity (3.1.2) 2026-09-28 12:22 · claude-opus-5-5 · remove git terminology from sourcef03dc4f4c998 raise the line ceiling to 11,500 and the tripwire to 11,300, June's call, in AGENTS.md and the master spec (3.1.2) 2026-09-28 12:24 · claude-opus-5-5 · offer strip race66eb40a24894 close the offer/strip race: offer checks for strips again after uploading and, before head moves, takes back the records and stripped objects it put (3.1.3) 2026-09-28 12:30 · claude-opus-5-5 · offer strip race2bc5d60cf723 record the closed offer/strip race, the 11,500 ceiling and what stays open in continuity (3.1.3) 2026-09-28 12:31 · claude-opus-5-5 · offer strip racec5d37aafc8b8 name the saves that came in flagged during a stolen repo's upgrade in koh offer --json, as steal does (3.1.4) 2026-09-28 12:40 · claude-opus-5-5 · finalize the queueabb551b2f221 ban a stripped path as itself: its * and ? are escaped in .kohignore and the walk's ban, and a backslash makes a rule's next character literal (3.1.5) 2026-09-28 12:45 · claude-opus-5-5 · finalize the queue73d1388db304 record the emptied queue, the flagged offer JSON, literal strip bans and the Kepr sweep in continuity (3.1.5) 2026-09-28 12:47 · claude-opus-5-5 · finalize the queue1985e2a8fd8d correct the spec section named in the handoff: the flags display is §10 (3.1.5) 2026-09-28 12:48 · claude-opus-5-5 · finalize the queue87658431342d skip and report unsafe paths on save and arrival with one shared rule (3.2.0) 2026-09-28 14:48 · gpt-5 · harden shared path handling427d85ab1fec refuse restore paths outside the repo and keep sibling folders out of pruning (3.2.1) 2026-09-28 15:02 · gpt-5 · harden shared path handlingeff0d4dd1105 remove the generated CLI test binary from the saved tree (3.2.1) 2026-09-28 15:03 · gpt-5 · harden shared path handlinga8e3208a9603 wip: report unsafe doctor paths and thread flagged build-offer JSON; A3.4 incomplete (3.2.2) 2026-09-28 15:05 · gpt-5 · harden shared path handlingd5d9ef7e460f report unsafe paths in doctor, drop them in migrate by the shared rule, and keep flagged names in offer --builds --json (3.2.2) 2026-09-28 15:21 · claude-opus-5-5 · harden shared path handlingacb7f0f501ad report the unsafe paths a whole-repo steal drops, as a steal into an existing repo does (3.2.3) 2026-09-28 15:34 · claude-opus-5-5 · harden shared path handlingf916e638e588 record Kepr's 512 MiB object cap and 8 MiB recount skip in the spec, and the finished A3 in continuity (3.2.3) 2026-09-28 15:37 · claude-opus-5-5 · harden shared path handlingc626bc7e3f0b read unpaired surrogate escapes as bytes so one bad name never refuses a whole record, escape only the bytes outside valid UTF-8, and ignore strips with illegal paths, as Kepr does (3.2.4) 2026-09-28 16:56 · claude-opus-5-5 · harden shared path handling75b94560088e install Koh 3 as koh with Koh 2 renamed koh2, and find Koh 2 for the migrate tests as koh2 first, never Koh 3 (3.2.5) 2026-09-28 17:05 · claude-opus-5-5 · harden shared path handlinga4eddf199042 record the koh/koh2 cutover and the closed malformed-name and illegal-strip findings in continuity (3.2.5) 2026-09-28 17:06 · claude-opus-5-5 · harden shared path handling6eabcf809156 show where things stand in koh status — the save you are on, its age and the save count — and say so in help: status is where things stand, diff is what changed (3.2.6) 2026-09-28 17:19 · claude-opus-5-5 · status wording301e80efe291 credit Asha Software, asha.software, at the foot of the help screen (3.2.7) 2026-09-28 17:22 · claude-opus-5-5 · status wording061b8e07f23b record the status wording, the help attribution and the zsh setup in continuity (3.2.7) 2026-09-28 17:24 · claude-opus-5-5 · status wording0112cda41049 credit Asha Software, asha.software, in the man page's authors as on the help screen (3.2.8) 2026-09-28 18:07 · claude-opus-5-5 · status wording8d1444aebca9 install by replacing the binary, never rewriting it in place, which macOS punishes by killing a running koh (3.2.8) 2026-09-28 18:09 · claude-opus-5-5 · status wordingac15999ac9b4 in a Koh 2 repo, refuse the commands Koh 2 reads differently or lacks, pointing at koh migrate, and keep remote and update Koh 3's (3.2.9) 2026-09-28 18:20 · claude-opus-5-5 · clear feedback67dcb773afe1 count saves, objects, events and checkpoints in words that agree with the number, and say plainly when the update server answers with something that is not a release (3.2.10) 2026-09-28 18:27 · claude-opus-5-5 · clear feedbackf0d2d40f26a8 show what long actions are doing on the terminal: doctor names its check, build each platform, update its download, and offer, steal and a remote strip count what they move (3.2.11) 2026-09-28 18:41 · claude-opus-5-5 · clear feedbackdc0dd30a22dc migrate shows what it found and what it will do, asks first (--yes skips), counts saves as it imports and checks them, and reports each object once (3.2.12) 2026-09-28 18:51 · claude-opus-5-5 · clear feedback67b039b810e5 record the feedback pass, the install trap and the tripwire margin in continuity (3.2.12) 2026-09-28 18:52 · claude-opus-5-5 · clear feedbackdfe5c9f72825 count the files a walk reads and a save stores on the terminal, so the first save of a large tree is never silent, and raise the line ceiling to 12,000 with the tripwire at 11,800, June's call (3.2.13) 2026-09-28 19:42 · claude-opus-5-5 · clear feedbackb723e06ba9fe name the save and status counters in the spec's feedback rule, and record the new ceiling in continuity (3.2.13) 2026-09-28 19:42 · claude-opus-5-5 · clear feedback8da913d7e452 migrate past file versions Koh 2 lost: name them before asking, take them back from a backup with --with, or bring those saves over without them, flagged; a failed migrate removes its own draft (3.2.14) 2026-09-28 20:12 · claude-opus-5-5 · clear feedback5ef1c461d861 record the lost-version recourse, the vegeta finding and the safe survey in continuity (3.2.14) 2026-09-28 20:13 · claude-opus-5-5 · clear feedback2213f5046815 say plainly why a Koh 3 command is refused in a Koh 2 repo: it needs a Koh 3 repo, and this one is still Koh 2 (3.2.15) 2026-09-29 02:07 · claude-opus-5-5 · clear feedback4d519567736f one comment style everywhere, a discard helper in settings, and lined-out struct literals (3.2.16) 2026-09-29 02:32 · claude-sonnet-5-5 · comment and tidy pass17c48991c43c split the print half out of cmd_steal and cmd_status, and note the key table in term (3.2.17) 2026-09-29 02:36 · claude-sonnet-5-5 · comment and tidy pass4fedb4de22e5 explain the sync, strip, save and restore code (3.2.18) 2026-09-29 02:40 · claude-sonnet-5-5 · comment and tidy pass1f6a60e93364 explain storage, events, commands and the history view (3.2.19) 2026-09-29 02:45 · claude-sonnet-5-5 · comment and tidy pass064fb290d6cf reword two comments away from git terms, and record the A4 pass in continuity (3.2.20) 2026-09-29 02:48 · claude-sonnet-5-5 · comment and tidy passbae6f36f4351 read an empty --name= as an empty value instead of taking the next word (3.2.21) 2026-09-29 13:27 · claude-sonnet-5-5 · comment and tidy pass16c0fc007c1f correct three overclaiming comments and drop three that restated their code, after Codex review (3.2.22) 2026-09-29 13:32 · claude-sonnet-5-5 · comment and tidy passc8506f27a079 record 3.2.22 green on Debian 13 arm64 in Apple container, with the vc bootstrap and root traps 2026-09-29 15:27 · claude-opus-5-5 · linux container teste2124037124f say 1 save, not 1 saves, in steal's fetched, brought-in and up-to-date lines (3.2.23) 2026-09-29 15:37 · claude-opus-5-5 · fix steal save-count plurals135d14574f3d say 1 save, not 1 saves, in migrate's count-mismatch error; reword a continuity note off git terms (3.2.24) 2026-09-29 16:55 · claude-opus-5-5 · fix steal save-count plurals74b41b2f570f list only folders with a head in steal --list, so Kepr's own .kepr folder in the remote is never named as a repo (3.2.25) 2026-09-29 19:43 · claude-opus-5-5 · steal list repos onlya2fe38a6bf08 record June's 3000-line Kepr CSS allowance 2026-09-29 20:58 · gpt-6-sol · allow readable island styles4ed280970bda record approved Kepr admin and server headroom 2026-09-29 21:33 · gpt-6-sol · operator control headroomf82016c7dba3 specify Kepr's console-edited, tested S3 settings rewriting kepr.toml 2026-09-29 22:12 · claude-opus-5-5 · editable bucket settingsd789d3f1ff1b record June's allocation of the last 200 Kepr reserve lines to server 2026-09-29 22:21 · claude-opus-5-5 · server budget headroom61544c35740c specify Kepr's selected-repo workspace and shown languages 2026-09-29 22:22 · claude-opus-5-5 · repo workspace4852e02881b7 specify Kepr issue triage, follow-up hiding and the new-issues switch 2026-09-29 22:26 · claude-opus-5-5 · issue triage0a83e3f47ed1 specify Kepr's in-app operator notifications 2026-09-29 22:31 · claude-opus-5-5 · operator notificationsa5894ce97c4b record June's 10,500-line Kepr ceiling with admin 1,600 and server 1,500 2026-09-29 22:36 · claude-opus-5-5 · ceiling for email and backups6a7ad407014a specify Kepr's SMTP email notifications and delivery queue 2026-09-29 22:37 · claude-opus-5-5 · email delivery24cc5e20c2b7 say email kinds switch on only once SMTP is saved, and what retry now resets 2026-09-29 22:41 · claude-opus-5-5 · email delivery39013e0246f3 specify Kepr's backup workspace 2026-09-29 22:42 · claude-opus-5-5 · backup workspacea71c8c80a31b record Kepr's 2026-09-30 admin decisions: no card order or install lines, build and tarball deletion, bucket tarballs, hidden paths, S3 from a folder instance, localhost origin 2026-09-30 13:58 · claude-opus-5-5 · kepr admin repo settings5ef6324e5841 specify Kepr's retryable build deletion order and tarball keys that cover hidden paths 2026-09-30 15:44 · claude-opus-5-5 · kepr admin repo settingsea9d92012295 raise Kepr's ceiling to 12,600 and record the no-config-file, backup-bucket and deletion decisions 2026-09-30 16:05 · claude-opus-5-5 · kepr operator consolea1bce807dcd3 specify Kepr's first-run setup, Account section, backup bucket and two-way bucket source 2026-09-30 16:17 · claude-opus-5-5 · kepr operator consolee52f5fdad820 specify one-file build deletion, download analytics, the storage view, reporter blocking, bulk issue actions and workspace tabs 2026-09-30 23:13 · claude-opus-5-5 · operator consolef5cf9f314308 specify the phone navbar's menu button 2026-10-01 13:45 · claude-opus-5-5 · mobile nav menu8f8891090423 lowercase a repo's name at first offer so a folder's case never changes its Kepr URL (v3.2.26) 2026-10-01 18:05 · claude-opus-5-5 · lowercase repo names07644b31b3f3 record that Kepr's sync lands long histories in batches in §30 2026-10-01 18:12 · claude-opus-5-5 · lowercase repo namesefc04c210036 record Kepr's names ignored in every repo in §30 2026-10-01 18:27 · claude-opus-5-5 · lowercase repo names09a580e89d38 note in §30 that a save larger than a batch has its objects stored ahead 2026-10-01 18:31 · claude-opus-5-5 · lowercase repo names5fbf4e34075a record in §30 that Kepr accepts migrated six-character save IDs 2026-10-01 19:39 · claude-opus-5-5 · lowercase repo names
99 files
HEAD
5fbf4e34075arecord in §30 that Kepr accepts migrated six-character save IDs· 15 minutes ago09a580e89d38note in §30 that a save larger than a batch has its objects stored ahead· 1 hour agoefc04c210036record Kepr's names ignored in every repo in §30· 1 hour ago07644b31b3f3record that Kepr's sync lands long histories in batches in §30· 1 hour ago8f8891090423lowercase a repo's name at first offer so a folder's case never changes its Kepr URL (v3.2.26)· 1 hour agof5cf9f314308specify the phone navbar's menu button· 6 hours agoe52f5fdad820specify one-file build deletion, download analytics, the storage view, reporter blocking, bulk issue actions and workspace tabs· 20 hours agoa1bce807dcd3specify Kepr's first-run setup, Account section, backup bucket and two-way bucket source· 1 day agoea9d92012295raise Kepr's ceiling to 12,600 and record the no-config-file, backup-bucket and deletion decisions· 1 day ago5ef6324e5841specify Kepr's retryable build deletion order and tarball keys that cover hidden paths· 1 day agoa71c8c80a31brecord Kepr's 2026-09-30 admin decisions: no card order or install lines, build and tarball deletion, bucket tarballs, hidden paths, S3 from a folder instance, localhost origin· 1 day ago39013e0246f3specify Kepr's backup workspace· 1 day ago24cc5e20c2b7say email kinds switch on only once SMTP is saved, and what retry now resets· 1 day ago6a7ad407014aspecify Kepr's SMTP email notifications and delivery queue· 1 day agoa5894ce97c4brecord June's 10,500-line Kepr ceiling with admin 1,600 and server 1,500· 1 day ago0a83e3f47ed1specify Kepr's in-app operator notifications· 1 day ago4852e02881b7specify Kepr issue triage, follow-up hiding and the new-issues switch· 1 day ago61544c35740cspecify Kepr's selected-repo workspace and shown languages· 1 day agod789d3f1ff1brecord June's allocation of the last 200 Kepr reserve lines to server· 1 day agof82016c7dba3specify Kepr's console-edited, tested S3 settings rewriting kepr.toml· 1 day ago4ed280970bdarecord approved Kepr admin and server headroom· 1 day agoa2fe38a6bf08record June's 3000-line Kepr CSS allowance· 1 day ago74b41b2f570flist only folders with a head in steal --list, so Kepr's own .kepr folder in the remote is never named as a repo (3.2.25)· 2 days ago135d14574f3dsay 1 save, not 1 saves, in migrate's count-mismatch error; reword a continuity note off git terms (3.2.24)· 2 days agoe2124037124fsay 1 save, not 1 saves, in steal's fetched, brought-in and up-to-date lines (3.2.23)· 2 days agoc8506f27a079record 3.2.22 green on Debian 13 arm64 in Apple container, with the vc bootstrap and root traps· 2 days ago16c0fc007c1fcorrect three overclaiming comments and drop three that restated their code, after Codex review (3.2.22)· 2 days agobae6f36f4351read an empty --name= as an empty value instead of taking the next word (3.2.21)· 2 days ago064fb290d6cfreword two comments away from git terms, and record the A4 pass in continuity (3.2.20)· 2 days ago1f6a60e93364explain storage, events, commands and the history view (3.2.19)· 2 days ago4fedb4de22e5explain the sync, strip, save and restore code (3.2.18)· 2 days ago17c48991c43csplit the print half out of cmd_steal and cmd_status, and note the key table in term (3.2.17)· 2 days ago4d519567736fone comment style everywhere, a discard helper in settings, and lined-out struct literals (3.2.16)· 2 days ago2213f5046815say plainly why a Koh 3 command is refused in a Koh 2 repo: it needs a Koh 3 repo, and this one is still Koh 2 (3.2.15)· 2 days ago5ef1c461d861record the lost-version recourse, the vegeta finding and the safe survey in continuity (3.2.14)· 2 days ago8da913d7e452migrate past file versions Koh 2 lost: name them before asking, take them back from a backup with --with, or bring those saves over without them, flagged; a failed migrate removes its own draft (3.2.14)· 2 days agob723e06ba9fename the save and status counters in the spec's feedback rule, and record the new ceiling in continuity (3.2.13)· 3 days agodfe5c9f72825count the files a walk reads and a save stores on the terminal, so the first save of a large tree is never silent, and raise the line ceiling to 12,000 with the tripwire at 11,800, June's call (3.2.13)· 3 days ago67b039b810e5record the feedback pass, the install trap and the tripwire margin in continuity (3.2.12)· 3 days agodc0dd30a22dcmigrate shows what it found and what it will do, asks first (--yes skips), counts saves as it imports and checks them, and reports each object once (3.2.12)· 3 days agof0d2d40f26a8show what long actions are doing on the terminal: doctor names its check, build each platform, update its download, and offer, steal and a remote strip count what they move (3.2.11)· 3 days ago67dcb773afe1count saves, objects, events and checkpoints in words that agree with the number, and say plainly when the update server answers with something that is not a release (3.2.10)· 3 days agoac15999ac9b4in a Koh 2 repo, refuse the commands Koh 2 reads differently or lacks, pointing at koh migrate, and keep remote and update Koh 3's (3.2.9)· 3 days ago8d1444aebca9install by replacing the binary, never rewriting it in place, which macOS punishes by killing a running koh (3.2.8)· 3 days ago0112cda41049credit Asha Software, asha.software, in the man page's authors as on the help screen (3.2.8)· 3 days ago061b8e07f23brecord the status wording, the help attribution and the zsh setup in continuity (3.2.7)· 3 days ago301e80efe291credit Asha Software, asha.software, at the foot of the help screen (3.2.7)· 3 days ago6eabcf809156show where things stand in koh status — the save you are on, its age and the save count — and say so in help: status is where things stand, diff is what changed (3.2.6)· 3 days agoa4eddf199042record the koh/koh2 cutover and the closed malformed-name and illegal-strip findings in continuity (3.2.5)· 3 days ago75b94560088einstall Koh 3 as koh with Koh 2 renamed koh2, and find Koh 2 for the migrate tests as koh2 first, never Koh 3 (3.2.5)· 3 days agoc626bc7e3f0bread unpaired surrogate escapes as bytes so one bad name never refuses a whole record, escape only the bytes outside valid UTF-8, and ignore strips with illegal paths, as Kepr does (3.2.4)· 3 days agof916e638e588record Kepr's 512 MiB object cap and 8 MiB recount skip in the spec, and the finished A3 in continuity (3.2.3)· 3 days agoacb7f0f501adreport the unsafe paths a whole-repo steal drops, as a steal into an existing repo does (3.2.3)· 3 days agod5d9ef7e460freport unsafe paths in doctor, drop them in migrate by the shared rule, and keep flagged names in offer --builds --json (3.2.2)· 3 days agoa8e3208a9603wip: report unsafe doctor paths and thread flagged build-offer JSON; A3.4 incomplete (3.2.2)· 3 days agoeff0d4dd1105remove the generated CLI test binary from the saved tree (3.2.1)· 3 days ago427d85ab1fecrefuse restore paths outside the repo and keep sibling folders out of pruning (3.2.1)· 3 days ago87658431342dskip and report unsafe paths on save and arrival with one shared rule (3.2.0)· 3 days ago1985e2a8fd8dcorrect the spec section named in the handoff: the flags display is §10 (3.1.5)· 3 days ago73d1388db304record the emptied queue, the flagged offer JSON, literal strip bans and the Kepr sweep in continuity (3.1.5)· 3 days agoabb551b2f221ban a stripped path as itself: its * and ? are escaped in .kohignore and the walk's ban, and a backslash makes a rule's next character literal (3.1.5)· 3 days agoc5d37aafc8b8name the saves that came in flagged during a stolen repo's upgrade in koh offer --json, as steal does (3.1.4)· 3 days ago2bc5d60cf723record the closed offer/strip race, the 11,500 ceiling and what stays open in continuity (3.1.3)· 3 days ago66eb40a24894close the offer/strip race: offer checks for strips again after uploading and, before head moves, takes back the records and stripped objects it put (3.1.3)· 3 days agof03dc4f4c998raise the line ceiling to 11,500 and the tripwire to 11,300, June's call, in AGENTS.md and the master spec (3.1.2)· 3 days ago6281c4a6e2c2record the fixed strip and tie findings, the git terminology sweep and the open offer/strip race in continuity (3.1.2)· 3 days agoc99a73d26672rename commit, push, pull, merge, clone and stage out of the source, tests and docs: transactions begin and end, strips are sent, a repo is stolen (3.1.2)· 3 days ago1ca868c479bfapply every strip held here, not only those in the fetch, to saves arriving later and to the clash preview (3.1.1)· 3 days agoc9861f20776dwrite the handoff: the three open codex findings, the tripwire and the discipline for the next session (3.1.0)· 3 days ago89b933c49b04release Koh 3.1.0: strips ban their path from all of history, recorded in continuity (3.1.0)· 3 days ago9c78d9c43299add a Strict Koh Discipline section to the manual (3.0.110)· 3 days agoccb80e87aea2make a strip ban its path: every save loses it whenever made, no walk picks it up again, and strip adds it to .kohignore (3.0.109)· 3 days ago2d6d872724e3record the 11,000 ceiling, the https rule, offer's clash stop and the approved strip timing in AGENTS.md, the manual and continuity (3.0.108)· 3 days agod247213bdd9drefuse a steal address whose repo is not a name Kepr serves, before it reaches a URL or a folder (3.0.107)· 3 days ago7ec030db3e06match the guided steal screens to the addendum: the repo named, relative times, rows cut to the terminal, the kept and taken files listed, and d and ? under test (3.0.106)· 3 days ago29a1ceda1bfddrop the forwarding kepr_host wrapper, the nil backend, the unused ask hook and the duplicated strip filter from steal and offer (3.0.105)· 3 days ago934062214af8refuse plain http for a Kepr host that is not this machine, since the connect reply carries the bucket's secret key (3.0.104)· 3 days agoaece2a878d50ask or refuse on a clash when offer upgrades a stolen repo, as steal does, instead of quietly taking theirs (3.0.103)· 3 days agoc0fab999e938walk through steal on a terminal: unsaved work, overview, collisions, summary and undo (3.0.102)· 3 days ago1cace06dc178wip: add the first green guided steal slice and record the remaining 8e work (3.0.101)· 3 days ago128ef9e650adrecord the second discarded 8e attempt and where it is recoverable (3.0.100)· 3 days agod7ed022ef3cdrevert: 2c06162b58e1· 3 days ago2c06162b58e1note 8e's discarded attempt, its recoverable checkpoint and the plan it works from (3.0.99)· 3 days ago982557ae0ed0revert: 3a0d4b911f90· 3 days ago3a0d4b911f90close the public steal review: a sourced repo is never auto-offered, and a failed clone leaves nothing (3.0.98)· 4 days ago2b1e04f61099steal public repos from a Kepr over HTTPS, read-only, with a per-repo source (3.0.97)· 4 days ago1af82597b777close the review of the Kepr remote form: validation, no shell, no redirects (3.0.96)· 4 days ago8288d349f168set up S3 by signing in to a Kepr with koh remote <host> (3.0.95)· 4 days ago4d8f6c23e57cgive every command on the help screen its own paragraph (3.0.94)· 4 days ago4259fb5dff46close the log removal's review findings: completion, stale names, three sharper tests (3.0.93)· 4 days agoea43d4f3e936remove the log command: view prints the whole line, checkpoints included (3.0.92)· 4 days ago81c95eea13a7record koh view and the campaign's final counts in continuity (3.0.91)· 4 days agoa4086cd3f7dareplace the saves and checkpoints aliases with koh view, which opens on saves and lists it on the help screen (3.0.90)· 4 days agoe86a58245a22close the update review: a no at the question refuses, the download is checked against its declared size, the swap is a real rename, a document with no version is refused and --json without --yes is a usage error (3.0.89)· 4 days agobbf4bfcaed9arecord the campaign in AGENTS.md and continuity: the new modules, the ceiling June raised to 10,500, and the traps the phases taught (3.0.88)· 4 days ago05916a2b7e91read a file:// download in koh update, which is what a Kepr with a folder bucket hands out (3.0.87)· 4 days ago416aa9fce19dwrap the help screen's also line once it passes 80 columns, now that build and update are on it (3.0.86)· 4 days agofe3253a128c9add koh update: read a release document from Kepr, install only a newer version, verify its Blake3, sign it ad-hoc and rename it over the running binary (3.0.85)· 4 days agob760c74f453bcheck release output paths before any build runs, and pin the duplicate platform, the missing --notes value and the unchanged migration in tests (3.0.84)· 4 days ago1278e421b5fcclose the release review: refuse two platforms sharing an output, a platform named twice, stray offer arguments and --notes with an empty value, and check both build files before migrate moves anything (3.0.83)· 4 days agoe042d2bfc1ffpublish releases: build every platform before uploading, write the files, the record and releases/latest, and rename kepr.build in migrate (3.0.82)· 4 days ago819e88eff38dsignal the build's process group by id, since koh's own guard skips an exited command, and hold it with a test that leaves a child behind (3.0.81)· 4 days ago818acd921e18close the phase 7a review: read only a quoted literal as a version, refuse an empty artifact, take stray build children with it, and prove koh builds itself in a test (3.0.80)· 4 days agoba2f1a3bcb27add the build module and koh build: parse koh.build, read each project's own version in the spec's order with gradle last, run the build environment per platform and report every output path (3.0.79)· 4 days ago662cda477689colour the help screen's version line as one light line, closing the review of the shorter screen (3.0.78)· 4 days ago0961967f3e9dkeep checkpoints out of koh saves when piped or asked for json, so the list agrees with the view (3.0.77)· 4 days ago6d6918095a35shorten the help screen to commands and plain words, flags moved to koh man (3.0.76)· 4 days ago0c0e6474868dkeep checkpoints out of the saves tab, so the two history lists never overlap (3.0.75)· 4 days ago546abb43431bclose the format write race by reading back the value the winner wrote, and check the format before the name clash so a remote this koh cannot read says so (3.0.74)· 4 days agofc918ffae554write <repo>/format on the first offer and refuse a remote that speaks another layout on offer, steal and clone (3.0.73)· 4 days agoc543b1f61ba2open the manual in the Koh website's voice and drop every mention of git (3.0.72)· 5 days ago8001f6686656rewrite the manual short and plain-spoken, correct its stale claims, and make koh man <command> return the whole entry with examples (3.0.71)· 5 days ago6554688b6256colour koh man and page it in-process like Koh 2: blue ◆ headings, amber commands and flags, Tab jumps between sections (3.0.70)· 5 days agod93d3d534fe8let Esc always step back and leave the view from the list, dropping a kept filter first, and stop unknown escape sequences counting as Esc (3.0.69)· 5 days ago4806e6424ec3spread seven entries evenly over the whole screen instead of leaving an empty band, about 15% tighter than Koh 2's six (3.0.68)· 5 days ago501b0f6898dfshow unselected entries as Koh 2 does, with only the mark and ID greyed, and sit the entries 15% tighter than Koh 2's spread (3.0.67)· 5 days agoebe6c3ba542amake q a letter while searching, so a search can start with q, and leave Esc as the way out (3.0.66)· 5 days ago7feada19c118record the history view rebuild and what is still unconfirmed in continuity· 5 days ago752b815dd4f5rebuild the history view on Koh 2's layout: evenly spaced entries that never wrap, HEAD marked and every other save a dot, the selected ID gold and the rest greyed, search only after /, q quits while searching, and flag or load only after the strict confirm (3.0.65)· 5 days agoa98160f0b963keep saves made within one second newest first in the all list, breaking the tie by write order instead of by hash (3.0.64)· 5 days ago55e1a2cc5c00record the live remote results on Mac and Linux, the Koh 3 migration of this repo and the open questions in continuity· 5 days agoc62238469b55send S3 requests over HTTP/1.1, because V's HTTP/2 client fails any upload that takes over five minutes and a big object on a slow uplink could never be offered (3.0.63)· 5 days ago24cf4587461bversion this repo with Koh 3 itself: AGENTS.md now points the discipline at the installed koh3· 5 days ago81b27aa9028dgive each remote connection check its own probe key, so two machines setting up at once no longer report a broken remote (3.0.62)· 5 days agoef399328b6efrewrite the README around what Koh is for: version control designed for the solo developer· 5 days agoe6ac76b8f99aadd the Koh 3 zsh plugin, a prompt segment and completion built on status --json, which now reports saves, size_bytes and head_flagged (3.0.61)· 5 days agobea6866dbe3ename the clashing files when steal refuses without a terminal, and leave no half-made folder when a clone meets a damaged remote object (3.0.60)· 5 days ago7ca392923d38use the real tagline, version control designed for the solo developer, in koh's usage and man page (3.0.59)· 5 days ago45ca7519f2cdlet koh remote replace or repair the setting on a terminal, refuse credentials others can read, and document the hand-written config files (3.0.58)· 5 days ago6287b5567dc3record the live Scaleway S3 test results and the resolved query-encoding question in continuity· 5 days ago3d7e4a55ae63record the NixOS build steps in AGENTS.md and the Linux results and settled document decisions in continuity· 6 days ago2369295a09d8rename commit.v to save.v and its commit_* functions to save_worktree, save_walk and save_tree, dropping git vocabulary (3.0.57)· 6 days agoa1b805301c6ffix the binary reporting 3.0.52: bring VERSION back in step with v.mod and test that they match (3.0.56)· 6 days ago336a06b3d11frecord the pin guard's discrimination and this repo's missing remote in continuity· 6 days agoc1e412b7aed8record the V pin, both blockers and the green runs in continuity· 6 days ago89802377db7areformat nine files for vfmt at V b9a2d87 (3.0.55)· 6 days ago56ab9cab6ad2make Koh 3 build and pass on V b9a2d87: json2 for the removed json module, src/exchange for the module that shadowed V's sync, the pin written down and guarded (3.0.54)· 6 days ago9396ba8479a4fix steal's none check so newer V accepts it (3.0.53)· 6 days agob31bea007973write the pin V handoff steps into continuity before the usage limit· 1 week agoe22f7a5c103crecord in continuity why pinning V stopped: steal.v fails to build on V b9a2d87· 1 week ago01a3746fce34unwrap history.head with a test helper instead of ! on an option (3.0.52)· 1 week ago81f91e956b53rename a test variable that shadowed the events module (3.0.51)· 1 week ago5b8c8b06278brename the sql parameter in the SQLite C declarations — sql is a keyword on newer V (3.0.50)· 1 week agobd73a0660022record the reliability campaign's fixes, decisions for June and measured limits in continuity· 1 week ago2752ddfbc874name the checkpoint that holds what revert discarded, recording both in one transaction (3.0.49)· 1 week agofcd909830822report usage errors as JSON on stderr when --json is given, as the document asks (3.0.48)· 1 week agocb84f9ea35c4send S3 ETags back exactly as the server gave them, so offers keep landing on a server that follows RFC 7232 (3.0.47)· 1 week agoe18607779731read the tree again under the lock when head moved during a save, so a save can never undo a steal or undo that landed meanwhile (3.0.46)· 1 week ago6c588d6233e4refuse a folder remote that is not there instead of creating a stand-in at an unmounted disk's path (3.0.45)· 1 week ago15b6b8d6c6d5let migrate accept a clean Koh 2 tree holding files Koh 2 never saved or saved under a later folder rule, so real repos migrate (3.0.44)· 1 week agoba25a6819e6fsay how to finish a restore the moment it stops part way, not to retry it (3.0.43, codex review pending)· 1 week ago4d41f88e04edlet status run while another koh command writes, and say so plainly when a write has to wait too long (3.0.42, codex review pending)· 1 week ago1a8e4215f494offer only the objects each save adds over its parent, so an auto-offer costs one write per changed file, not per file (3.0.41, codex review pending)· 1 week agocc776360f741name the previous head after a combine so an agent can load the pre-combine tree back, and correct the man page's steal refusal (3.0.40, codex review pending)· 1 week agof14336a4a1c3mark a restore before its save is recorded and name it when status cannot walk, closing 3.0.31's codex review (3.0.39)· 1 week agoa34d063b3d6fjudge racy cache rows by the newer of mtime and ctime, closing 3.0.29's codex review (3.0.38)· 1 week ago702789575895record the offered head in state as offer's step 3 asks, closing 3.0.22's codex review (3.0.37)· 1 week ago889212052e9dpin the replay count and the kept originals in the undone-edit combine test, closing 3.0.27's codex review (3.0.36)· 1 week agoe6da6d4397fcreport a clone's flagged saves with their reasons in text and JSON, closing 3.0.20's codex review; drop the flagged_ids helper this orphaned (3.0.35)· 1 week ago88ecb8e00ef9sweep only peek folders more than a day old, closing 3.0.18's codex review (3.0.34)· 1 week agoeee40896e5ebnever snapshot a nested repo's .koh or .git, so the outer repo cannot roll an inner repo's history back (3.0.33)· 1 week agoff9e6b8d886fput the terminal back when the hidden S3 key read fails, closing 3.0.16's codex review (3.0.32)· 1 week ago453157da5325recognise a restore that stopped half-way and point every building command at revert, so a half-written tree is never saved or offered (3.0.31, codex review pending)· 1 week ago1d049f5cd490refuse to restore through a symlinked folder, so undo, load, pluck and steal never overwrite files outside the repo (3.0.30, codex review pending)· 1 week ago7b2e6110eed5keep files written in the last 3 seconds out of the file cache, so a coarse-clock rewrite cannot hide behind a stale hash (3.0.29, codex review pending)· 1 week ago5222a7c6691akeep saves made after a strip out of its reach when they arrive, so a clone no longer loses a file saved again after stripping (3.0.28, codex review pending)· 1 week ago55fa35690dableave files the remote changed out of combine's replay, so an undone local edit no longer blocks every steal (3.0.27, codex review pending)· 1 week ago84f2455205b5match strip paths exactly, not with case-blind LIKE wildcards (3.0.26, codex review pending)· 1 week ago4fdcae077240record the fix-queue outcome, pending codex reviews and the coverage campaign in continuity· 1 week agob4580cd02192compute the history view's detail diff once per save, not per key (3.0.25, codex review pending)· 1 week agob3e8bdf8a104leave files that already match alone during a restore (3.0.24, codex review pending)· 1 week ago71d55a793226draw going-back previews from hashes instead of diff(1) per file (3.0.23, codex review pending)· 1 week ago9323833c98e8bump VERSION to 3.0.22, missed in the dead-code cleanup save· 1 week agof053194e7074remove dead sync and history code, move doctor SQL into storage, drop forwarding colour wrappers (3.0.22, codex review pending)· 1 week ago65f2423754f1print the one notice line when handing a Koh 2 repo to koh2 (3.0.21, codex review pending)· 1 week agoad580dbcce93warn about incoming flagged saves on steal as the document asks (3.0.20, codex review pending)· 1 week agoab6e63d2bc60never overwrite an ignored file on disk during a restore (3.0.19, codex review pending)· 1 week ago340f37f875a6sweep only day-old peek folders in doctor (3.0.18, codex review pending)· 1 week agoe787dbe6181arefuse to restore a file into a folder of ignored files instead of dropping it inside (3.0.17, codex review pending)· 1 week agoa63030364948create the S3 credentials file private from the start and hide the typed secret (3.0.16, codex review pending)· 1 week ago2c62be3a9131warn instead of failing when LOG.md cannot be written after a committed change (3.0.15)· 1 week agof7de384191a7let the remote connection test recover from a leftover probe (3.0.14)· 1 week ago351a8a04769dkeep the folder remote's temp and lock files out of its listings (3.0.13)· 1 week ago3e72c29a7ba3keep diff --session and load --checkpoint on the line (3.0.12)· 1 week agoc3643bd4833ebind a clone to the repo it was stolen from so a rename cannot fork it (3.0.11)· 1 week ago7d49e0453acdpage koh man to the terminal instead of into a captured string (3.0.10)· 1 week ago552274baeb26ask steal's clash questions before the write lock and refuse a steal that would overwrite unsaved files (3.0.9)· 1 week ago2036620528a4mark the replayed-away originals in the history view and refresh it after actions (3.0.8)· 1 week ago1af9dc58a448encode S3 keys once so repos with spaces sign correctly (3.0.7)· 1 week ago69c3ac67d7c8make an interrupted remote strip finish on re-run, give each strip its own event, and keep strip logic in sync (3.0.6)· 1 week ago259ca814c682import cloned saves parent-first so a combined repo can be stolen fresh (3.0.5)· 1 week ago19c02504e67aleave the line alone when steal finds this machine only ahead of the remote (3.0.4)· 1 week ago00a1b4528f25keep incoming event IDs so a strip is applied once, not on every steal (3.0.3)· 1 week ago4149f626ab4arefuse undo, load, pluck and view load on unsaved changes and re-plan after the prompt (3.0.2)· 1 week ago8aa3154c04f0make status and steal see executable-bit changes the way save does (3.0.1)· 1 week agob09a48226a5bqueue the review findings as an ordered fix plan in continuity· 1 week agoa5966a744383record the full codebase review findings in continuity so the next session starts from them· 1 week ago499786717d76finish the man page for the sync and migration commands and cover migration end to end· 1 week ago1f6a834a1455fix log filters on a terminal, keep json pure when offering, and steady the migration fixture· 1 week ago884f56f0f0d2add phase 5 migrate with the koh2 hand-over and migration tests· 1 week agobcdc186ee437add remote strip propagation, incoming strip events, and koh man· 1 week agoa15db60fd5c1add phase 3 sync: remote interface, folder and s3 backends, offer, steal and combine· 1 week ago942d08c78d27add phase 2: history view, flag, pluck, peek, doctor and local strip· 1 week ago525088cda79cmake ignore rules directory-aware and pin snapshot behaviour with tests· 1 week ago76be2198e257add local core: .koh schema, tree walk and restore, one-line history, and the everyday commands· 1 week agof319f052973badd phase 0 ground: V skeleton, vendored sqlite bindings, library checks· 1 week ago
.agent/79.3 KB · 1 day ago
docs/144.4 KB · 15 minutes ago
shell/6.5 KB · 2 days ago
src/484.6 KB · 1 hour ago
apply/6.7 KB · 1 week ago
build/27.2 KB · 4 days ago
cli/115.8 KB · 2 days ago
args_test.v445 B · 2 days ago args.vCommand line parsing.2.6 KB · 2 days ago cli.vCommand line entry: dispatch table, usage text and exit codes.2.9 KB · 3 days ago cmd_back_test.v3.2 KB · 6 days ago cmd_back.vGoing back: koh undo, koh revert and koh load.9.7 KB · 2 days ago cmd_build.vkoh build — build with koh.build, and upload nothing.2.6 KB · 3 days ago cmd_diff.vkoh diff — unified diff of the working tree against a save, of one save against another, or across a session.3.3 KB · 6 days ago cmd_doctor_test.v752 B · 3 days ago cmd_doctor.vkoh doctor — integrity check and cleanup.3.6 KB · 3 days ago cmd_flag.vkoh flag — mark a save unsafe, clear the mark, or list what is marked.2.4 KB · 6 days ago cmd_init.vkoh init — write the .koh file and a default ignore list.964 B · 6 days ago cmd_man.vkoh man — the manual, built into the binary.3.4 KB · 5 days ago cmd_migrate.vkoh migrate — one-time conversion from Koh 2.4.3 KB · 2 days ago cmd_offer.vkoh offer — send the local saves to this machine's remote, and, with --builds, publish a release built from them.6.9 KB · 2 days ago cmd_peek.vkoh peek — put a save's tree in a temporary folder and print where.1.7 KB · 6 days ago cmd_pluck.vkoh pluck — put one save's change onto the current tree.5.1 KB · 2 days ago cmd_remote.vkoh remote — the machine's remote, set up once and used by every repo.12.2 KB · 2 days ago cmd_save.vkoh save and koh checkpoint.2.9 KB · 2 days ago cmd_status.vkoh status — where things stand: the save you are on, and what the working tree has that it does not.4.3 KB · 2 days ago cmd_steal_test.v386 B · 3 days ago cmd_steal.vkoh steal — bring another machine's saves in.18.2 KB · 2 days ago cmd_strip.vkoh strip — remove a path from history, permanently.5.0 KB · 2 days ago cmd_update.vkoh update — put a newer published koh in place of this one (§12).2.8 KB · 2 days ago cmd_view.vkoh view — the history, browsed or printed.7.1 KB · 4 days ago handover.vThe cut-over hand-off.2.9 KB · 2 days ago output.vOutput for the command line: the ✦ / ✗ habit, and the --json shapes agents read.1.6 KB · 2 days ago progress.vThe line a long action draws while it works (§4, "never leave the person wondering"): one line on stderr, redrawn in place and cleared when the step ends, and only when stderr is a terminal, so pipes, logs and --json never see it.2.5 KB · 3 days ago prompt.vThe strict confirm prompt, carried over from Koh 2 unchanged.1.0 KB · 3 days ago repo.vOpening the repo a command acts on, and the tree lookups commands share.949 B · 1 week ago
events/8.2 KB · 2 days ago
exchange/96.0 KB · 1 hour ago
fmt/3.5 KB · 2 days ago
history/25.7 KB · 2 days ago
machine/8.2 KB · 2 days ago
migrate/30.7 KB · 2 days ago
release/13.6 KB · 4 days ago
remote/36.1 KB · 2 days ago
snapshot/38.2 KB · 2 days ago
storage/22.9 KB · 2 days ago
update/10.5 KB · 3 days ago
view/40.9 KB · 2 days ago
koh3.vProgram entry: hands the command line to the CLI and exits with its code.155 B · 2 days ago
tests/73.9 KB · 2 days ago
vendor/9.4 MB · 1 week ago
AGENTS.mdKoh 3 is a clean rewrite of Koh in V: one SQLite file (.koh) per repo, one line of history where nothing is erased, optional sync to S3 or a local folder.9.1 KB · 3 days ago README.mdVersion control designed for the solo developer.3.7 KB · 3 days ago v.mod123 B · 1 hour ago VERSION7 B · 1 hour ago
5fbf4e34075arecord in §30 that Kepr accepts migrated six-character save IDs15 minutes ago09a580e89d38note in §30 that a save larger than a batch has its objects stored ahead1 hour agoefc04c210036record Kepr's names ignored in every repo in §301 hour ago07644b31b3f3record that Kepr's sync lands long histories in batches in §301 hour ago8f8891090423lowercase a repo's name at first offer so a folder's case never changes its Kepr URL (v3.2.26)1 hour agof5cf9f314308specify the phone navbar's menu button6 hours agoe52f5fdad820specify one-file build deletion, download analytics, the storage view, reporter blocking, bulk issue actions and workspace tabs20 hours agoa1bce807dcd3specify Kepr's first-run setup, Account section, backup bucket and two-way bucket source1 day agoea9d92012295raise Kepr's ceiling to 12,600 and record the no-config-file, backup-bucket and deletion decisions1 day ago5ef6324e5841specify Kepr's retryable build deletion order and tarball keys that cover hidden paths1 day agoa71c8c80a31brecord Kepr's 2026-09-30 admin decisions: no card order or install lines, build and tarball deletion, bucket tarballs, hidden paths, S3 from a folder instance, localhost origin1 day ago39013e0246f3specify Kepr's backup workspace1 day ago24cc5e20c2b7say email kinds switch on only once SMTP is saved, and what retry now resets1 day ago6a7ad407014aspecify Kepr's SMTP email notifications and delivery queue1 day agoa5894ce97c4brecord June's 10,500-line Kepr ceiling with admin 1,600 and server 1,5001 day ago0a83e3f47ed1specify Kepr's in-app operator notifications1 day ago4852e02881b7specify Kepr issue triage, follow-up hiding and the new-issues switch1 day ago61544c35740cspecify Kepr's selected-repo workspace and shown languages1 day agod789d3f1ff1brecord June's allocation of the last 200 Kepr reserve lines to server1 day agof82016c7dba3specify Kepr's console-edited, tested S3 settings rewriting kepr.toml1 day ago4ed280970bdarecord approved Kepr admin and server headroom1 day agoa2fe38a6bf08record June's 3000-line Kepr CSS allowance1 day ago74b41b2f570flist only folders with a head in steal --list, so Kepr's own .kepr folder in the remote is never named as a repo (3.2.25)2 days ago135d14574f3dsay 1 save, not 1 saves, in migrate's count-mismatch error; reword a continuity note off git terms (3.2.24)2 days agoe2124037124fsay 1 save, not 1 saves, in steal's fetched, brought-in and up-to-date lines (3.2.23)2 days agoc8506f27a079record 3.2.22 green on Debian 13 arm64 in Apple container, with the vc bootstrap and root traps2 days ago16c0fc007c1fcorrect three overclaiming comments and drop three that restated their code, after Codex review (3.2.22)2 days agobae6f36f4351read an empty --name= as an empty value instead of taking the next word (3.2.21)2 days ago064fb290d6cfreword two comments away from git terms, and record the A4 pass in continuity (3.2.20)2 days ago1f6a60e93364explain storage, events, commands and the history view (3.2.19)2 days ago4fedb4de22e5explain the sync, strip, save and restore code (3.2.18)2 days ago17c48991c43csplit the print half out of cmd_steal and cmd_status, and note the key table in term (3.2.17)2 days ago4d519567736fone comment style everywhere, a discard helper in settings, and lined-out struct literals (3.2.16)2 days ago2213f5046815say plainly why a Koh 3 command is refused in a Koh 2 repo: it needs a Koh 3 repo, and this one is still Koh 2 (3.2.15)2 days ago5ef1c461d861record the lost-version recourse, the vegeta finding and the safe survey in continuity (3.2.14)2 days ago8da913d7e452migrate past file versions Koh 2 lost: name them before asking, take them back from a backup with --with, or bring those saves over without them, flagged; a failed migrate removes its own draft (3.2.14)2 days agob723e06ba9fename the save and status counters in the spec's feedback rule, and record the new ceiling in continuity (3.2.13)3 days agodfe5c9f72825count the files a walk reads and a save stores on the terminal, so the first save of a large tree is never silent, and raise the line ceiling to 12,000 with the tripwire at 11,800, June's call (3.2.13)3 days ago67b039b810e5record the feedback pass, the install trap and the tripwire margin in continuity (3.2.12)3 days agodc0dd30a22dcmigrate shows what it found and what it will do, asks first (--yes skips), counts saves as it imports and checks them, and reports each object once (3.2.12)3 days agof0d2d40f26a8show what long actions are doing on the terminal: doctor names its check, build each platform, update its download, and offer, steal and a remote strip count what they move (3.2.11)3 days ago67dcb773afe1count saves, objects, events and checkpoints in words that agree with the number, and say plainly when the update server answers with something that is not a release (3.2.10)3 days agoac15999ac9b4in a Koh 2 repo, refuse the commands Koh 2 reads differently or lacks, pointing at koh migrate, and keep remote and update Koh 3's (3.2.9)3 days ago8d1444aebca9install by replacing the binary, never rewriting it in place, which macOS punishes by killing a running koh (3.2.8)3 days ago0112cda41049credit Asha Software, asha.software, in the man page's authors as on the help screen (3.2.8)3 days ago061b8e07f23brecord the status wording, the help attribution and the zsh setup in continuity (3.2.7)3 days ago301e80efe291credit Asha Software, asha.software, at the foot of the help screen (3.2.7)3 days ago6eabcf809156show where things stand in koh status — the save you are on, its age and the save count — and say so in help: status is where things stand, diff is what changed (3.2.6)3 days agoa4eddf199042record the koh/koh2 cutover and the closed malformed-name and illegal-strip findings in continuity (3.2.5)3 days ago75b94560088einstall Koh 3 as koh with Koh 2 renamed koh2, and find Koh 2 for the migrate tests as koh2 first, never Koh 3 (3.2.5)3 days ago

older →

details

Koh

Version control designed for the solo developer.

Most version control is built for teams, with branches to keep people out of each other's way, pull requests to argue in, and merge tools for when two people edited the same line. On your own you need none of that. You need to save your work, see what changed, go back when something breaks, and pick up on your laptop where you left off on your desktop.

That's all Koh does.

koh init
koh save "sketch the parser"
koh status
koh view
koh undo            # step back one save, without losing it
koh offer           # send your saves to your bucket
koh steal           # on the other machine: bring them in

How it thinks

Nothing is erased. Your history is one straight line, and every command adds to it. Undo, revert and load don't rewind anything. They record a new save that puts the files back, so the save you stepped away from is still there tomorrow. The only exception is strip, for the day a secret gets saved, and it makes you type the path twice before it does anything.

Everything lives in one file. A repo's whole history is .koh, a single SQLite file at the root, and there's nothing else to maintain. Copy that file and you've copied the whole history.

Your machines, not a server. Point Koh at an S3 bucket or a folder on a disk once per machine with koh remote, and every save is offered to it automatically. If you worked on both machines without syncing, koh steal combines them file by file. A file changed on only one side just comes along. A file changed on both sides is shown to you, and you pick which version to keep. Your version isn't thrown away either way: the save it came from stays in history.

Safe to hand to an agent. Every command has --json, never waits for input when nothing is typing, and exits 0, 1 or 2. Saves record which agent made them and in which session, so koh undo --session can take back an agent's whole run in one step. A person has to be at the keyboard to strip.

Small on purpose. Koh 3 has 17 commands, down from Koh 2's 45, and a hard ceiling of 10,000 lines of V. A feature that doesn't fit gets cut, so one person can still read all of it.

Setting up sync

koh remote          # asks: a folder, or an S3 bucket?

It tests the remote before saving anything. Scripts can skip the questions:

KOH_ACCESS_KEY=... KOH_SECRET_KEY=... \
  koh remote s3 https://s3.fr-par.scw.cloud my-bucket fr-par
koh remote folder /Volumes/usb/koh

Or write the two files yourself. koh man remote shows the format.

~/.config/koh/remote        kind, endpoint, bucket, region (or path)
~/.config/koh/credentials   access_key, secret_key, mode 600

In your prompt

shell/koh3.plugin.zsh puts the repo in your zsh prompt and adds tab completion:

kiln · v2.1.0 · 6 saves · 4.2 MB !
→

! means unsaved changes, and ⚑ means the save you're on has been flagged. Source it from ~/.zshrc. The comments at the top cover Starship, Powerlevel10k and using your own prompt.

Status

Koh 3 is a rewrite of Koh 2 in V, for macOS and Linux. While it's being built the binary is called koh3. At the cut-over it becomes koh, Koh 2 becomes koh2, and koh migrate converts a Koh 2 repo in place. The specification is /Users/june/Downloads/Koh 3 — God Document.md.

Building

v -o build/koh3 src/koh3.v            # or -prod for a release build
v test src/ && v test tests/
v fmt -verify src/ tests/

Koh is pinned to V master at b9a2d87, because V master can break it. SQLite 3.49.1 is vendored and compiled in, so there are no other dependencies. AGENTS.md has the install steps for the pinned V, the Linux notes and the layout.