Releases: martinus/woswoar
Release list
v0.12.0
What's Changed
- docs: the four reasons a mutation survives, and a tool that points at the line by @martinus in #249
- test: the seeder was spawned with the developer's own environment by @martinus in #252
- test: a claim quoted from docs/security.md was not checked against it by @martinus in #253
- test: a sandbox that carries nothing satisfies every isolation test by @martinus in #254
- feat: the fleet table says it in doctor's marks, with a key under it by @martinus in #259
- docs: a rule for the loop an issue number is shorthand for by @martinus in #260
- fix: the bytecode check is about sandbox_env, not about who ran the suite (#258) by @martinus in #261
- feat: the session scope's prompt says how far back the shell goes (#257) by @martinus in #264
- feat: one project, several directories, one dir scope (#255) by @martinus in #265
- feat: woswoar forget, and a digest so it stays forgotten (#256) by @martinus in #262
- fix: export checks the watermark is on a line boundary (#263) by @martinus in #266
- tools: watch a detached job, and say plainly when it dies by @martinus in #267
- fix: the confirmation pass takes a baseline (#268) by @martinus in #269
- tools: a job that stops without ending is now an event too by @martinus in #273
- mutants: sign and divisor, the two operators #272 measured us missing by @martinus in #276
- reached: read what the report says about its own worth (#270) by @martinus in #278
- mutate: a sweep's batch says which file it is voiding (#271) by @martinus in #279
- mutate: a completion marker, because --json is not one (#275) by @martinus in #280
- test: the importer's unknown sentinels are negative, and now say so (#277) by @martinus in #281
- release: 0.12.0 by @martinus in #282
- fix: a zsh re-import no longer drops out-of-order records (#289) by @martinus in #295
- fix: republish accepts when a key rotates, not only when a host does (#290) by @martinus in #296
- fix: a malformed watermark no longer bricks every command (#291) by @martinus in #297
- fix: doctor no longer tracebacks when it races the background sync (#293) by @martinus in #299
- fix: the hook path is no longer read as a regex replacement (#292) by @martinus in #298
- fix: a SAVEHIST trim no longer moves the import watermark past records (#294) by @martinus in #300
- fix: drop the one bad watermark, not the whole map (#285) by @martinus in #301
- fix: re-enrolling after a revoke updates the owner line (#283) by @martinus in #302
- fix: init reports the peers it accepted, not itself (#287) by @martinus in #303
- test: three reds that were the environment, not the code (#288) by @martinus in #305
- fix: a hung git is a message, not a traceback (#286) by @martinus in #304
- docs: two working agreements this session paid for by @martinus in #306
- tools: the sweep records its own pid, so the watcher stops guessing by @martinus in #307
- fix: a lost anchor starts over rather than skipping records by @martinus in #308
- test: property tests for the record and chunk formats, and one fix by @martinus in #309
- test: property tests for the two paths that remove and publish records by @martinus in #311
- test: metamorphic property tests for the credential filter by @martinus in #313
- test: property tests for the parse cache format by @martinus in #315
- test: property tests for the day accumulator in merge by @martinus in #316
- fix: a credential flag is recognised before a shell metacharacter (#312) by @martinus in #317
- fix: a damaged number in the cache rebuilds it rather than raising (#314) by @martinus in #318
- fix: a watermark is not trusted once its file has been rewritten (#310) by @martinus in #319
- Backport tupferl's mutation-harness improvements by @martinus in #321
- The mutation sandbox stops copying .hypothesis and sweeps by @martinus in #323
- fix: a path prefix no longer sinks a recent command below an old one by @martinus in #324
- ci: the release job installs the suite's own dependency by @martinus in #325
Full Changelog: v0.11.0...v0.12.0
v0.11.0
What's Changed
- search: the host scope's prompt names the machine by @martinus in #193
- shell: read the EXIT trap without forking (#190) by @martinus in #194
- docs: install does create an rc file when there is none (#191) by @martinus in #195
- zsh: take down a stale ghost suggestion on recall (#192) by @martinus in #196
- docs: write down the package's shape, and pin the import graph by @martinus in #198
- docs: a tracking issue carries
trackingand no priority by @martinus in #204 - arch: split the history-repo layout out of store.py by @martinus in #205
- arch: doctor reports values, not printed lines (#199, doctor half) by @martinus in #206
- arch: sync reports notices, not printed paragraphs (#199) by @martinus in #207
- arch: sync outcomes are declared kinds, not seventeen fields (#199) by @martinus in #208
- arch: the installer and the wizard leave main.py (#202) by @martinus in #209
- tools: close the three ways a measurement lied this session by @martinus in #210
- tools: mutate runs in sandboxes, and therefore in parallel by @martinus in #212
- arch: manifest.py and gitrepo.py leave sync.py (#201) by @martinus in #215
- fix: doctor checks where the rc line points, and the suite stops writing to the real home by @martinus in #216
- fix: Ctrl-T does nothing when no row is current, instead of a broken reload by @martinus in #218
- test: a command the hook declines must not leave a log file either by @martinus in #219
- fix: "caught" means a test noticed, not that the run exited non-zero by @martinus in #220
- feat: mutants generated from the diff, not written by hand by @martinus in #223
- test: guard the three claims the whole-package mutation run found unguarded by @martinus in #226
- tools: coverage-crossed survivor analysis, and the rest of #224 by @martinus in #227
- perf(ci): shard the sync suite so macOS stops being the critical path by @martinus in #228
- fix: drop-kwarg stops asking a question nothing can answer by @martinus in #230
- test: a subTest that runs out of memory is not a test noticing by @martinus in #231
- fix: mutate bounds the process tree, not one process at a time (#232) by @martinus in #233
- test: two tables are both the verdict, which one table cannot say by @martinus in #236
- fix: the test sandbox is built, not filtered (#217) by @martinus in #237
- fix: a lane is its group and its descendants, not one of the two (#234) by @martinus in #238
- test: main()'s generated branch, which nothing drove (#235) by @martinus in #240
- fix: a module that will not import is not a test that failed (#221) by @martinus in #241
- test: a round trip on a machine that is not UTF-8 (#229) by @martinus in #242
- fix: a spawned child inherits the sandbox, not a list of names (#239) by @martinus in #243
- arch: the chunk codec leaves sync.py (#214) by @martinus in #244
- fix: a sweep cannot reach a real woswoar store (#245) by @martinus in #246
- feat: woswoar fleet -- who has accepted whom (#197) by @martinus in #247
- release: 0.11.0 by @martinus in #248
Full Changelog: v0.10.0...v0.11.0
v0.10.0
zsh, and with it macOS. woswoar recorded from bash on Linux; it now records
from bash 5+ or zsh 5+, on Linux or macOS, into one history per machine
whichever shell you are standing in.
Upgrading
pipx upgrade woswoar and you are done. The hooks that are installed bring
themselves up to date on the next background sync, as they already did.
Important
If you want zsh recording, run woswoar install once. The background
refresh updates the hooks that are there and deliberately creates none — a
version that created would plant a woswoar.zsh on a bash-only machine from a
command nobody ran. install writes to every shell whose rc file already
exists, and never creates one.
On macOS, the system python3 is 3.9 and woswoar needs 3.10+ — brew install python@3.12 (or uv) first, then brew install age fzf. See
Installing.
What is new
| zsh recording | a second hook, not a port: zsh hands preexec the command line, so the history 1 capture disappears — and the history rules bash gives for free (HIST_IGNORE_SPACE, dups, HISTORY_IGNORE) are reimplemented, with the four that are not mirrored written down |
install handles both shells |
every shell whose rc file already exists, never creating one; doctor reports a version, a hook and an rc file per shell |
| macOS | a macos-latest CI job, brew install advice, and a .DS_Store audit — Finder's file no longer reaches the history repo, where two machines' copies would have collided on a rebase |
| Faster shells | mkdir runs once a day rather than twice per terminal: zsh 9.2 ms → 3.2 ms, bash 7.3 ms → 5.3 ms |
Ctrl-O says where you are |
the picker prompt reads woswoar (dir ~/src/woswoar) rather than woswoar (dir) |
One property is weaker on macOS and stated rather than assumed: the hook's
fork-freedom is verified by CI on Linux only — there is no strace, and
dtruss needs SIP disabled. The hook file is the same on both platforms.
What's Changed
- docs: install with 'pipx install woswoar' by @martinus in #174
- docs: CONTRIBUTING, SECURITY, and issue templates by @martinus in #176
- docs: say what each Ctrl-R step costs, not just the running total by @martinus in #179
- docs: a README that sells woswoar in one screen by @martinus in #178
- docs: a recorded demo, generated from a checked-in tape by @martinus in #180
- sync: record which layout the history repo is by @martinus in #181
- shell: a zsh hook by @martinus in #182
- install: shell detection, so install/doctor/setup handle bash and zsh by @martinus in #184
- macos: platform audit and a CI job by @martinus in #185
- shell: stop forking mkdir twice in every interactive shell by @martinus in #186
- search: the dir scope's prompt names the directory by @martinus in #188
- release: 0.10.0 by @martinus in #187
- release: install zsh in the release workflow, and stop the test needing it by @martinus in #189
Full Changelog: v0.9.0...v0.10.0
v0.9.0
What's Changed
- tests: a pty harness, so Ctrl-R landing on the prompt is actually asserted by @martinus in #166
- search: a dir scope -- commands from this directory and below by @martinus in #168
- search: a preview pane for the three recorded fields nobody can see by @martinus in #170
- docs: write the systemd units into the README, delete the stale plan by @martinus in #171
- release: publish to PyPI over Trusted Publishing by @martinus in #172
- tests: the detached sync stand-in writes outside the sandbox by @martinus in #173
- release: 0.9.0 by @martinus in #175
Full Changelog: v0.8.2...v0.9.0
v0.8.2
What's Changed
- search: two-unit ages in the picker (3h42m, 6mo12d) by @martinus in #149
- release: 0.8.2 by @martinus in #150
Full Changelog: v0.8.1...v0.8.2
v0.8.1
What's Changed
- release: attest build provenance for every artefact by @martinus in #147
- release: 0.8.1 by @martinus in #148
Full Changelog: v0.8.0...v0.8.1
v0.8.0
What's Changed
- Let users verify that nothing readable leaves their machine by @martinus in #145
- release: 0.8.0 by @martinus in #146
Full Changelog: v0.7.2...v0.8.0
v0.7.2
What's Changed
- search: mark only known failures, and only the age column by @martinus in #141
- search: say that ^name filters to one machine by @martinus in #142
- search: ctrl-t unfolds the timeline around a command by @martinus in #143
- release: 0.7.2 by @martinus in #144
Full Changelog: v0.7.1...v0.7.2