Skip to content

v0.1.0

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 21 Aug 16:02
· 7 commits to main since this release
a28dd76

What's Changed

  • chore: flag pre-release status in the npm description by @allens in #82
  • docs: settle the local-config / remote-structure redesign (ADR-0024..0026) by @allens in #83
  • chore: reword npm description "eternal" -> "tool-independent" by @allens in #84
  • refactor(env): drop the per-bucket env layer (ADR-0025) by @allens in #85
  • Set name is the whole identity: collision-claim + --inherit (ADR-0024, ADR-0026 setup-half) by @allens in #86
  • Fold resolveRemoteSet into resolveSet — finish the ADR-0026 redesign by @allens in #87
  • chore: trim low-value historical commentary from code comments by @allens in #88
  • compare is local-only; setup --inherit syncs manifests (ADR-0027) by @allens in #89
  • docs(readme): lead with everyday recovery; fix post-redesign drift by @allens in #90
  • Make per-session worktrees the default for any write (CLAUDE.md #13) by @allens in #91
  • chore: correct convention #15 — GraphQL botIds requests Copilot review by @allens in #92
  • refactor: a resolved BackupSet carries its own on-disk paths by @allens in #93
  • chore: narrow git-push deny rule so it stops blocking '+' branch names by @allens in #95
  • Handoff: load user env at the entry point; a loadSet door for set env by @allens in #97
  • refactor: load user env at entry; loadSet door for set env by @allens in #98
  • docs(proposals): snapshot-pipeline architecture deepening candidates by @allens in #99
  • Collapse the snapshot-writing pipeline into one deep module by @allens in #103
  • Build(deps): Bump actions/checkout from 6 to 7 in the actions group by @dependabot[bot] in #100
  • Build(deps): Bump the aws-sdk group with 3 updates by @dependabot[bot] in #101
  • Build(deps-dev): Bump the dev-dependencies group with 2 updates by @dependabot[bot] in #102
  • docs(adr): the walk is eager, not streamed (ADR-0029) by @allens in #104
  • feat(hooks): auto-request Copilot review on gh pr create by @allens in #105
  • chore: adopt the .claude/worktrees convention + exclude it from tooling by @allens in #106
  • docs(proposals): capture the architecture deepening candidates by @allens in #107
  • Adopt NN/g error-message guidelines (ADR-0030) + conform messages by @allens in #108
  • docs(claude): run bare git in cwd — git -C defeats the allowlist by @allens in #110
  • fix(format): correct byte formatting + reconnect upload progress; settle display-formatting design by @allens in #109
  • fix: knock out all four bugs from proposals/bugs.md by @allens in #111
  • feat: actionable error for expired AWS credentials + error-handling cleanup by @allens in #112
  • chore: remove parked SIGINT handler, sharpen temp-file cleanup note by @allens in #113
  • feat: s3cab aws command to configure the AWS profile by @allens in #114
  • chore: allow gh api and git worktree without prompting by @allens in #115
  • feat: actionable guidance when s3cab aws shows no profile set by @allens in #116
  • docs: cloud-onboarding (bucket command) design + ADR-0032 by @allens in #117
  • chore: allow read-only git (status/diff/log) without prompting by @allens in #118
  • feat: bucket command — generative cloud onboarding by @allens in #119
  • docs: rationalize bucket/aws/setup commands (ADR-0035) by @allens in #120
  • chore: persist the permission-prompt fix to shared source by @allens in #121
  • Rationalize CLI commands: bucket→aws, aws→profile, setup folds into sets (ADR-0035) by @allens in #122
  • docs: ADR-0036 — setup/list command shape, drop sets by @allens in #123
  • Reshape sets→setup + list (ADR-0036) by @allens in #124
  • feat: cli-design skill (distilled clig.dev) + ADR-0030 adopts Nielsen heuristic #9 by @allens in #126
  • docs: trim CLAUDE.md — merge consent rules, distill, renumber (16→11) by @allens in #125
  • Extract fileProps primitive; make prop path-only by @allens in #127
  • docs(proposals): record the 2026-06-29 deepening follow-up by @allens in #128
  • docs: give every ADR a uniform Status line by @allens in #129
  • feat: standardize user-facing wording on "directory"; complete no-sets hint by @allens in #133
  • Build(deps): Bump the aws-sdk group with 3 updates by @dependabot[bot] in #130
  • Build(deps-dev): Bump the dev-dependencies group with 3 updates by @dependabot[bot] in #131
  • Build(deps): Bump @smithy/shared-ini-file-loader from 4.6.2 to 4.6.4 by @dependabot[bot] in #132
  • docs: ADR-0037 — categorize AWS auth errors by code, not HTTP status by @allens in #134
  • feat: friendly messages for request-time AWS auth rejections (ADR-0037) by @allens in #135
  • chore: replace Copilot-review hook with a gh --reviewer @copilot convention by @allens in #136
  • chore: delete completed auth-error-categorization proposal by @allens in #137
  • feat: usage errors show synopsis + arg description, not the full help block (ADR-0038) by @allens in #138
  • docs: request Copilot review once at PR-create, not on push by @allens in #139
  • feat: auth & onboarding UX — self-explanatory credential/setup failures by @allens in #140
  • chore: sweep stale code comments and the dead zstd-bench default by @allens in #141
  • chore: point code comments at docs/design/ (specs rename follow-up) by @allens in #142
  • docs: dedupe env.mjs header against the auth design doc by @allens in #143
  • clig.dev review: examples-first help, help routing, pre-network notice, restore/hashes shape by @allens in #144
  • Rename profile to auth; fold the auth topic into its help (ADR-0041) by @allens in #145
  • Gate progress animation and help styling on a TTY (shared style.mjs gate) by @allens in #147
  • New sets start with a starter exclude.txt (real defaults + help discovery) by @allens in #146
  • feat: one stderr-progress module (route every consumer through the TTY gate) by @allens in #148
  • style: require braces on all control blocks (curly: all) by @allens in #149
  • feat: implement verify (bucket-operand backup completeness check) by @allens in #150
  • feat: add delete and cleanup (slice 5 admin pair) by @allens in #151
  • verify: per-path problems + move orphan reporting to cleanup by @allens in #152
  • feat: human-first output mechanism + --json (slice 1) by @allens in #153
  • feat: human-readable compare/snapshot + structured CompareResult (slice 2) by @allens in #154
  • feat: human-readable query renderers (slice 3) by @allens in #155
  • feat: human-readable action confirmations (slice 4) by @allens in #156
  • feat: human-first output close-out — required render, --json docs (slice 5) by @allens in #157
  • feat: change-detection simplification — drop the objects cache (slice 1) by @allens in #158
  • feat: unify upload command surface; backup = snapshot + upload (ADR-0044) by @allens in #159
  • test: co-locate integration tests as *.integration.test.mjs (ADR-0046) by @allens in #160
  • Build(deps-dev): Bump @types/node from 26.0.1 to 26.1.0 in the dev-dependencies group by @dependabot[bot] in #161
  • Build(deps): Bump @smithy/shared-ini-file-loader from 4.6.4 to 4.6.6 by @dependabot[bot] in #162
  • refactor: extract pure planCleanup, mirroring verifySet by @allens in #164
  • Build(deps): Bump the aws-sdk group with 3 updates by @dependabot[bot] in #163
  • ci: skip s3-integration on Dependabot PRs by @allens in #165
  • feat: create env files owner-only (0600) and ~/.s3cab dirs 0700 by @allens in #166
  • refactor: architecture-review bundle — planUpload, diff tests, seedStarterExclude, emptyBucket by @allens in #167
  • refactor: architecture bundle — thread previous snapshot, downloadToFile, snapshot-name authority by @allens in #168
  • feat: snapshot concurrency lock via atomic wx on the temp file by @allens in #169
  • fix: surface S3 download errors, and tidy the s3.mjs read/write surface by @allens in #171
  • refactor(test): flatten platform-label nested ternary to a lookup table by @allens in #172
  • docs: prune & distill CLAUDE.md working conventions (11→9) by @allens in #173
  • test: split unit/integration by directory; hard-fail gate; per-platform release round-trip by @allens in #174
  • Report where the AWS profile came from; isolate integration harness from ~/.s3cab/env by @allens in #175
  • Skip a snapshot that vanished mid-scan in referencedObjects by @allens in #176
  • fix: show file path, not object hash, in upload progress by @allens in #177
  • feat: align upload-progress byte columns so paths left-align by @allens in #178
  • feat: default-exclude .git with disclosure; native separators in the starter by @allens in #179
  • Retire setup update mode; edit directories in dirs.txt by @allens in #180
  • Split setup --inherit into a standalone reattach command by @allens in #181
  • Fail a backup when a member directory is missing by @allens in #182
  • Per-set credentials: drop the user env layer, one mode per set (ADR-0055) by @allens in #183
  • feat: CloudFormation template for AWS onboarding; retire --sso (Phase A-1) by @allens in #184
  • docs: Roles Anywhere signer validated — preserve spike + design doc by @allens in #189
  • Build(deps): Bump actions/setup-node from 6 to 7 in the actions group by @dependabot[bot] in #185
  • Build(deps): Bump the aws-sdk group with 3 updates by @dependabot[bot] in #186
  • Build(deps-dev): Bump the dev-dependencies group with 4 updates by @dependabot[bot] in #187
  • Build(deps): Bump @smithy/shared-ini-file-loader from 4.6.6 to 4.6.8 by @dependabot[bot] in #188
  • Roles Anywhere setup (Phase A-2): cert gen, RA CloudFormation, ARN capture by @allens in #190
  • Roles Anywhere Phase B: the native SigV4-X509 credential signer by @allens in #191
  • refactor(roles-anywhere): extract pure arnsFromOutputs + single-source the ARN contract by @allens in #192
  • fix(s3): teach authNotice the Roles Anywhere mode by @allens in #193
  • fix(provider): route both RA-marker reads through canonical isRolesAnywhereMode by @allens in #194
  • refactor(onboarding): move the --save confirmation into a pure awsSaveConfirmation by @allens in #195
  • aws: write the CloudFormation template to a file; fix Windows-broken deploy command by @allens in #196
  • refactor(aws): quarantine CloudFormation to an aws-only module (ADR-0059) by @allens in #197
  • refactor(aws): one parameterized bucket-name validator by @allens in #198
  • fix(aws): honor --profile in aws --save --from-stack by @allens in #199
  • fix(sets): route dirs.txt readers through parseLines so # comments aren't walked by @allens in #201
  • fix(help): correct compare --help output; add missing examples by @allens in #200
  • refactor(backup): take the fresh name + baseline from snapshot()'s diff by @allens in #202
  • perf(walk): fail at the first duplicate file, not after the whole walk by @allens in #204
  • refactor(s3): drop objectExists's metadata heuristic; inline into putFile by @allens in #203
  • fix(s3): stop stamping objects with metadata — it broke non-ASCII backups by @allens in #205
  • fix(help): point provider's footer at guide/auth.md, not a README anchor by @allens in #206
  • fix(help): print s3cab.plantegral.com URLs, never github.com links by @allens in #207
  • feat(provider): one read of a set's provider config (readProviderConfig) by @allens in #208
  • refactor(snapshot-file): own the filename grammar's construct direction (snapshotFileName + remoteSnapshotUri) by @allens in #209
  • test(s3): close the upload skip-semantics coverage gaps by @allens in #210
  • refactor: E-bundle finish — getOrInsertComputed in remote scan, fail-fast upload validation by @allens in #211
  • refactor: JSDoc @import tags for every imported type, enforced by a lint rule by @allens in #212
  • fix(upload): abort backup when a file changes mid-snapshot-upload by @allens in #213
  • perf(s3): multipart uploads at 16 MiB parts × 32 concurrent by @allens in #214
  • Bulk operands positional, addressing via --set (ADR-0062) by @allens in #215
  • Show a flag's short form in missing-argument errors (ADR-0038) by @allens in #216
  • The orphan check for delete (docs/design/snapshot-deletion.md) by @allens in #217
  • Rename delete to forget, and name the file-side consequence unrestorable by @allens in #218
  • fix(upload): trust a --since baseline only if it still exists remotely by @allens in #220
  • fix(restore): skip a missing object instead of aborting the whole run by @allens in #219
  • feat: path-scoped delete with repository deletion record (ADR-0064) by @allens in #221
  • refactor: extract long command help bodies into command-details.mjs by @allens in #222
  • feat: convert cleanup/forget to the destructive-command pattern (ADR-0064) by @allens in #223
  • feat(aws): suffix-scheme resource names + resource tagging by @allens in #224
  • fix(aws): drop unsupported Tags from ManagedPolicy in CFN template by @allens in #225
  • fix(s3): request + connection timeouts so a dropped connection fails instead of hanging by @allens in #226
  • feat(upload): add --dir to seed a folder's objects before the first backup by @allens in #227
  • feat(aws): upload to Glacier Instant Retrieval, the cheapest instant tier (ADR-0066) by @allens in #228
  • Build(deps): Bump the aws-sdk group with 4 updates by @dependabot[bot] in #229
  • Build(deps-dev): Bump the dev-dependencies group across 1 directory with 4 updates by @dependabot[bot] in #235
  • Build(deps): Bump @smithy/signature-v4 from 5.6.7 to 5.6.11 by @dependabot[bot] in #234
  • Build(deps): Bump @smithy/shared-ini-file-loader from 4.6.8 to 4.6.15 by @dependabot[bot] in #236
  • feat(format): pad whole scaled byte sizes to one decimal (3MB → 3.0MB) by @allens in #237
  • fix(s3): use socketTimeout, not requestTimeout — the hang fix never worked by @allens in #239
  • Build(deps-dev): Bump brace-expansion from 5.0.6 to 5.0.8 by @dependabot[bot] in #240
  • Capture fused snapshot+upload pipeline design (proposal + spike) by @allens in #238
  • feat(snapshot): park hashes on a graceful interrupt so a restart doesn't re-hash by @allens in #241
  • fix(s3): survive a dropped network — explain it, then ride it out by @allens in #242
  • feat(output): say when a backup is waiting out a dropped network by @allens in #243
  • docs: record why the retry window is 120s and not configurable by @allens in #244
  • Fuse snapshot generation and upload into one streaming pass by @allens in #245
  • Tidy the backup preamble: fewer lines, shortened paths, live progress by @allens in #246
  • Route putText through putObjectParams; give PreconditionFailed its predicate twin by @allens in #247
  • Give every hash-then-PUT path the confirmation guard (one PUT loop) by @allens in #248
  • fix(snapshot): resolve a snapshot name to its file, not to anything that exists by @allens in #249
  • Build the settled snapshot-format decisions (ADR-0071/0072/0073) by @allens in #250
  • Name the bucket on the existing-object scan line by @allens in #251
  • Name the bucket's unreadable snapshots (ADR-0074) by @allens in #252
  • Diagnose an expired sign-in instead of the pick-one credential menu by @allens in #253
  • One count, one plural, one aligned-total table by @allens in #254
  • Progress output: one line per pass, driven by a clock by @allens in #255
  • Survive a background credential refresh that fails by @allens in #256
  • Lifecycle windows as constants, asserted on the template by @allens in #257
  • Drop surplus exports, fold the duplicated lifecycle test by @allens in #258
  • Stop the walk losing files silently, and show progress in bytes by @allens in #259
  • Retire the env-loaded tripwire that guards a caller which cannot exist by @allens in #263
  • docs: split CLAUDE.md into project scope and user-only conventions (517 → 251) by @allens in #264
  • Doc-rot sweep: four live claims naming symbols that no longer exist by @allens in #265
  • refactor(skills): extract the sweep's stage-1 queries into scripts/sweep.mjs by @allens in #266
  • Build(deps): Bump the aws-sdk group across 1 directory with 4 updates by @dependabot[bot] in #260
  • Build(deps): Bump @smithy/shared-ini-file-loader from 4.6.15 to 4.6.16 by @dependabot[bot] in #261
  • build(deps): group @smithy/* with the AWS SDK in Dependabot by @allens in #268
  • Build(deps-dev): Bump globals from 17.8.0 to 17.9.0 in the dev-dependencies group by @dependabot[bot] in #270
  • Retire the planned-stub convention; share countOf; drop the empty-file special case by @allens in #267
  • sweep.mjs: a docs mode for names the live docs no longer define by @allens in #269
  • Drop listSnapshotNames' latest option; the return type is always string[] by @allens in #271
  • ci: a weekly fresh-deps canary, and auto-merge for Dependabot's npm updates by @allens in #272
  • The over-engineering skill owns its own script by @allens in #273
  • ci: drop Dependabot auto-merge, and gate releases on npm audit by @allens in #274
  • A pre-commit hook for the fast half of CI's lint job by @allens in #275
  • Fix a dev-scoped advisory, and stop the lockfile leaking a private registry by @allens in #276
  • Give the counted pass an owner, so the walk's line stops freezing by @allens in #277
  • ci: make ci gate fail closed by @allens in #278
  • fix(cli): report an unknown help topic as a failure, not a silent success by @allens in #279
  • refactor(lib): let referenced.mjs answer its own size questions by @allens in #280
  • test(lib): make the drift-test flake say when the drift never happened by @allens in #281
  • fix(auth): make a refused request say who it refused by @allens in #282
  • List what a snapshot skipped, and say what it was by @allens in #283
  • Stop saying pre-0072 snapshots are still read by @allens in #284
  • Say what a finished backup actually did by @allens in #285
  • Say what a file that was unreadable last time really is by @allens in #290
  • Stop calling a folder we can't resolve missing by @allens in #289
  • Fail a dropped snapshot download instead of stalling the parser by @allens in #291
  • Show what the exclude patterns are dropping by @allens in #288
  • Leave cloud placeholders online instead of downloading them by @allens in #292
  • Fail CI when two ADRs claim the same number by @allens in #293
  • Build(deps): Bump the aws-sdk group with 4 updates by @dependabot[bot] in #286
  • Build(deps-dev): Bump the dev-dependencies group with 2 updates by @dependabot[bot] in #287
  • Add the format-spec clean-room audit and its restorer by @allens in #294
  • docs: stop advertising MinIO as a supported provider by @allens in #295
  • Test-bucket naming convention + conformance provisioning by @allens in #296
  • Model-based test suite with restore as the invariant by @allens in #297
  • Crash-injection and multi-machine concurrency tier (real kills, real S3) by @allens in #298
  • Snapshot #END trailer makes truncation loud (ADR-0082) by @allens in #299
  • putFile verifies the streamed digest, closing the mid-transfer window (ADR-0083) by @allens in #300
  • backup exits 1 when files couldn't be read by @allens in #301
  • Trust a remote snapshot only when byte-identical to the local file (ADR-0084) by @allens in #302
  • restore detects folded-name collisions by the filesystem's own equivalence (ADR-0086) by @allens in #304
  • Serialize the real-bucket CI job so runs stop sharing the bucket by @allens in #306
  • Move the repo to auto permission mode by @allens in #307
  • Build(deps): Bump the aws-sdk group with 6 updates by @dependabot[bot] in #308
  • Build(deps-dev): Bump the dev-dependencies group with 2 updates by @dependabot[bot] in #309
  • Fix the uploadDir drift flake, and the restore --output bug behind it by @allens in #310
  • Tell the truth when a minute-resolution name is already taken by @allens in #311
  • Group the compare renderer's counts; delete the snapshotName alias by @allens in #312
  • Count and pluralise in English, and hold restore's progress line still by @allens in #313
  • Fix seven dead cross-links, and check them from now on by @allens in #314
  • Finish the countOf sweep #313 started by @allens in #316
  • Make the docs show what the code actually prints by @allens in #315
  • Say the outcome once, on stdout, in forget and delete by @allens in #317
  • Fix three printed remedies that no longer match the tool by @allens in #318
  • Fix the release round trip, broken by ADR-0062 since July by @allens in #319
  • Skip the release ship gate off main, instead of failing the matrix by @allens in #320
  • chore: release 0.1.0 by @allens in #321

Full Changelog: v0.1.0-alpha.1...v0.1.0