Releases
v0.2.0
Compare
Sorry, something went wrong.
No results found
Changelog
171ac28 Merge pull request #9 from hodyhq/plan3-prb
3535461 fix(build): pin a patched Go toolchain, fix rebrand-stale electron build glob
855c1d3 ci: green the pipeline (title scope, npm audit, x/crypto, racy fleet jobs test, rebrand title)
2e3e700 fix(jobs): an all-skipped sweep is skipped, not failed
bf8cf3d fix(test): assert the activated field, not the whole status document
a547579 fix(install): app.sh verifies the release signature like fleet.sh
207c3de fix(fleet): PR #9 review findings (round 2)
d290ea0 fix(fleet): PR #9 review findings
92a98a5 fix(fleet): whole-branch CodeRabbit findings
7665069 fix(fleet): lock the state dir before any DB work; guard the last seal
1438fa0 fix(fleet): survive a passphrase rotation; enforce the locks the code claims
d329ef1 merge: origin/master into plan3-prb
bd9be62 fix(fleet): job cadences are writable, and a non-hosted kit cannot be "regenerated"
3679e4a merge: plan3-hosted into plan3-prb
2092653 Merge pull request #8 from hodyhq/plan3-hosted
7932662 merge: plan3-t31 into plan3-prb
7f270e7 build: warphold-ui v0.2.0 (offsite health, screenshot pipeline)
988e12a merge: plan3-crfix (whole-branch CodeRabbit findings) into plan3-hosted
e439ed6 merge: plan3-t29 into plan3-prb
aec2731 fix(fleet): read every X-Forwarded-For header line, fix test false-confidence
23bb02d fix(fleet): make DeleteAgent atomic, SetAgentBundle report ErrNotFound
4d27be3 merge: plan3-t15fix (B2 mirrors without conditional writes; PUT /targets/{id}/mirror) into plan3-hosted
111f82e fix(fleet): 501 needs the NotImplemented code; target lookup errors are not 404
a736475 merge: plan3-t27 into plan3-prb
4ac875a merge: plan3-t26 into plan3-prb
9d4536d merge: plan3-t24 into plan3-prb
7001274 feat(fleet): attach or replace a mirror on an existing target
34f0c6d merge: plan3-t20 into plan3-prb
edf2265 merge: plan3-groups (update/delete groups) into plan3-hosted
14e8eba merge: plan3-t9 follow-up (cloud-direct rollback tests) into plan3-hosted
1a6badd feat(fleet): let a mirror-only target sit on a provider without conditional writes
e9a2217 fix(gateway): tell a 501 conditional-write refusal apart from a bucket that lies
590f9fc merge: plan3-installers into plan3-prb
142caaf fleet/jobs: repository stats and the weekly digest email
61e58f3 fix(fleet): group repoint check is atomic
6485a41 feat(fleet): update and delete groups
a6fd85b fix(api): dedupe origin check duplicated by the plan3-t30 merge
359cea3 test(enroll): cloud-direct provisioning failure rolls back the device key
fd111cf merge: fold plan3-t9 (stock-Kopia e2e matrix, cloud-direct enrollment) into plan3-hosted
55d36b4 merge: plan3-t30 (SMTP settings + test send) into plan3-t31
3a86bbb feat(enroll): provision a device onto a cloud-direct target
08edaa8 test(gateway): drive the append-only rules through the stock S3 client
5ecd1d8 test(jobs): pin the documented cadences and the seconds convention
2064eaf feat(jobs): register the runners, the jobs API and fleet jobs run
65ec36d merge: fold plan3-t14 (offsite health API) into plan3-hosted
2070c1b feat(jobs): reap revoked devices past their retention window
158c442 fix(seal): fail fast, not hang, when the pending-key refusal regresses
44d89c8 feat(jobs): fleet-side maintenance job
f2002c1 feat(jobs): fleet-side test-restore job
ed48ef9 feat(jobs): fleet-side verify job
fafe325 agent: verify handle comment matches verify.go
955b80c merge: fold plan3-t12-fold (cloud-direct targets served through the gateway) into plan3-hosted
bacb310 fix(fleet): fail loudly on unreadable offsite state instead of rendering green
4564006 merge: fold plan3-t13 (jobs scheduler + mirror, round 1) into plan3-hosted
0198149 feat(fleet): serve cloud-direct targets through the gateway
54a0f88 fix(agent): pin the index during verify; pin health behaviour in tests
dc59123 fix(seal): never delete a pending key without proof it is dead
a5d10fb fix(seal): refuse an offline rotation while the state dir is locked
1bd6d22 fix(jobs): requeue stale claims every tick, record cancellation, bound Stop, prefix mirror-open errors
93b33c8 merge: fold plan3-t12 (Object Lock verification, B2 lock read) into plan3-hosted
a0d8da6 fix(kit): drop unreachable --disable-tls hosted command, print a TLS note instead
5cb03f8 merge: plan3-hosted (t11 + t5 round 2) into plan3-t8
9f37e29 ci: restore a hosted-target snapshot with a pinned upstream kopia binary
3e94a03 feat(fleet): offsite mirror state in targets, device detail and overview
27eb117 merge: fold plan3-t5 (S3 handler, round 2) into plan3-hosted
4011538 agent: execute the verify command and report it
95a0e1c fix(gateway): trusted-proxy client IP, exposed limiter config, allowlist and log residue
b77814d fix(fleet): distinguish 'cannot verify' from 'unlocked' for B2; complete fold patch; tests
3d3bfd8 fleet: sealing-passphrase rotation with a dry run
6fc5d92 feat(fleet): mirror job (disk → S3-compatible bucket, never deletes)
0f78a4d fleet/kit: Referrer-Policy, SameSite assertion, revoked-device note
ff14b88 fix(fleet): reap scheduling, enroll cleanup, age-gated temp sweep
7717c2b fix(fleet): recover panics in activation callbacks; print the enrollment token on its own line
2816c6b feat(fleet): jobs table accessors and scheduler skeleton
0806bb5 Merge pull request #7 from hodyhq/plan3-docs
fcfecd5 fleet/kit: printable recovery kit with a read-only key, and its acknowledgement
75e645e fleet: verify Object Lock and conditional writes on mirror and cloud-direct buckets; real cloud arm
f9c1f77 fix(scripts): non-interactive activation actually runs (no env on a shell function); test the branch
869f616 fix(app): scope-gated config tolerance, refuse --system for the app, honor persist policy
ce4d102 scripts: TLS-only release fetches; fish PATH hint
09ace69 scripts: app.sh installs the standalone engine
1108457 feat(app): standalone app engine service (warphold app run/install/status/uninstall)
99ce1a1 fix(cli): CodeRabbit round — command_fleet_repo.go, per-row setup defaults, hosted-root check
4a5aa99 docs(spec): record the seventh upstream touch (server Options.DisableMaintenance)
56fddf5 fix(fleet/mail): settings never unseal the SMTP password on read; redaction tests
7d46beb feat(cli): SetupDefaults — first hosted target, template and group at activation
9a623fd fix(cli): absolute --data-dir, reload serves the host repo, reload in requireHost
0a6c1cb feat(fleet): revocation disables gateway keys and invalidates the cache
5014181 fix(gateway): validate credential prefix, 409 on existing key, MD5 assertion, host check, pre-auth limit
576501c feat(fleet): hosted provisioning — per-device repo, gateway keys, sealed bundle
6691164 feat(cli): fleet activate --public-url; setup creates the host's own repository
dfb4428 Merge branch 'plan3-hosted' into plan3-t5
943a5ca fix(gateway): cloud-direct — require region, refuse plaintext, probe under the fleet root, Close
05e28d0 fleet/mail: SMTP settings with SMTP2GO defaults and a test send
3fc261b Merge branch 'plan3-hosted' into plan3-t8
7395e19 fix(release): import the signing key, scope permissions, packaging decisions
66e4a7d fix(fleet): logout checks origin before the CSRF token (no token oracle)
cd2e244 fix(fleet): public_url — default-port normalization, probe logging, origin-first CSRF, login hardening
62aa50c feat(fleet): public_url setting and consumers; CSRF origin check
a4cf27f feat(fleet): mount the device S3 gateway on the Fleet server
07c9970 feat(gateway): append-only S3 subset for devices
7303a33 docs(spec): packages never provision the server; bindir rule; no packaging-family detection
324c4fe fix(gateway): cloud-direct — conditional put (If-None-Match: *), capability probe, disk spool
8fe9584 Merge branch 'plan3-hosted' into plan3-t5
29d6dd2 fix(gateway): local backend hardening (symlinks, UTF-8, bounded list, size cap, ctx, ETag)
65aa992 feat(gateway): object store interface and local backend
d847736 docs(spec): cloud-direct = S3-compatible endpoints with conditional put + probe (Task 11 review)
3d0e53c release: WarpHold deb/rpm packaging metadata and signed checksums
a513b5d Merge branch 'plan3-hosted' into plan3-t5
b5c09e2 fix(gateway): SigV4 — no region wildcard, real GetBucketLocation shape, reject unsigned x-amz-* headers
d76a454 feat(gateway): SigV4 verification
17e7f6d fleet/gateway: cloud-direct write-through backend
f711884 feat(fleet): public_url setting and consumers; CSRF origin check
ea9ab75 docs(spec): gateway mounts at the bucket path /warphold/ (minio-go rejects path endpoints); MD5, unsigned x-amz headers, replay decisions
82cd7cd scripts: one-command app install
e2d0744 scripts: one-command Fleet server install, with a container test and shellcheck
26fcf88 feat(fleet): hosted target kind (local storage; cloud-direct stubbed)
d548206 Merge branch 'plan3-t3' into plan3-t5
b21e949 Merge branch 'plan3-t2' into plan3-t5
93d0d31 feat(gateway): SigV4 verification
4f090ab feat(store): device keys, jobs table, additive migration
3eb16d0 feat(gateway): object store interface and local backend
0d30620 test(fleet): fixed mid-day clock in the overview test (midnight UTC flake)
ac81d4e feat(store): device keys, jobs table, additive migration
38730f5 docs(spec): fold in the Task 1 spike result (allowlist, maintenance owner, S3 profile, no versioning)
4bf16b5 spike: record which blobs Kopia deletes or overwrites against an S3 store
1c93195 Merge pull request #6 from hodyhq/ui-v0.1.1
c705fdd chore(ui): bump warphold-ui to v0.1.1 (responsive layout)
7c8cb2d Merge pull request #5 from hodyhq/fix-spa-public
d552171 fix(ui-serve): cache header only on existing assets; assert the CSRF match in the test
83e5c45 test(cli): --no-ui also disables the public SPA bundle
57be3c1 fix(ui-serve): serve the SPA bundle without Kopia UI auth
2a81d17 Merge pull request #3 from hodyhq/plan2-ui-server
4625892 Merge pull request #4 from hodyhq/plan2-tray
8129848 test(fleet): ReportsBetween excludes future-dated reports; pinned clock
6257237 fix(agent): Desktop Entry escaping, refuse hostile binary paths in unit/autostart, fixed notification text
31d2ca4 test(fleet): future-dated report gets its own skewed-clock agent
291ec62 fix(fleet): bound the overview window above (skewed agent clocks); pin the test clock
3515f80 fix(agent): tray notifies on an initially failing agent; bounded D-Bus notify call
7d62a7e feat(agent): GET /local/info on the engine
a0e6080 fix(agent): tray render diffing, initial menu, last-good accuracy
efd6264 feat(cli): agent tray command
1e5e500 feat(agent): systray + D-Bus notifications
f8e27ec feat(agent): tray menu model, icons, autostart
0420c32 test(fleet): generic device name in the overview fixture
4879ee6 fix(ui-serve): SPA deep links for /fleet and /agent
69b028e fix(fleet): atomic multi-key settings write; cap agent-supplied report stderr at 8 KiB
b388012 feat: serve the WarpHold UI (import swap); agent engine serves the agent page
b5682be fix(fleet): enroll.sh EXIT trap + prompt tests
a26e32c feat(fleet): enroll.sh prompts for the token when none is supplied
3fed46c feat(fleet): settings endpoint (fleet_name, poll_interval)
b0d5c5c perf(fleet): index reports(finished_at) for the overview window query
83088cd feat(fleet): GET /api/v1/fleet/overview
a4fb922 feat(fleet): snake_case JSON tags on store.Report
11f2e41 Merge pull request #2 from hodyhq/plan2-basics
42eef5a fix: enrollment token via environment variable
af5936f fix: address CodeRabbit round 1 on PR #2
f61e3df fix: same-origin guard for local cookie auth; admin email normalization, self-delete guard, expiry test; README proxy note
16b87cb feat(agent): engine info file, local session handoff, snapshot ids in reports, agent status
72d6581 feat(fleet): server-side sessions, CSRF double-submit, admin management
12ed578 feat(fleet): serve the agent binary at /dl/
ebd0704 Merge pull request #1 from hodyhq/plan1-m0-m3
c0b263c fix: never cache an empty dummy password hash
a27aab8 fix: final CodeRabbit CLI round — generic admin errors, constant-time login, batch health lookup, token error mapping
a8c0e12 fix: address CodeRabbit round 2 on PR #1
3d92a44 fix: quote ExecStart binary path in the agent unit
11518c5 fix: CodeRabbit CLI round 4 — warphold symlink targets; document public enroll.sh
1b2437b fix: CodeRabbit CLI round 3; static enroll.sh takes --token only
2b592c7 brand: add WarpHold logo mark assets (ember speed-lines + chevron from the approved mockup)
c491947 fix: CodeRabbit CLI round 2 (branch review)
9ba3144 fix: CodeRabbit CLI round 1; warphold release binary name
9f65076 fix: address CodeRabbit review of PR #1
62d1bf9 fix: final review — restart-safe report ids, refuse key overwrite, snapshot-only health, atomic token consume, token-only activation, seam test, docs
6b1a236 fix(agent): parse real snapshot task descriptions; stop engine before revoke exit
d90c09d feat(agent): systemd install with linger and no-restart on revoke
2415133 feat(agent): run loop with policy apply, command execution, task reporting
d4b2e71 fix(agent): release repo on headless start failure; drop redundant policy write
be5ebb5 fix(fleet): scope command acknowledgement to the reporting agent
77cae09 feat(agent): headless Kopia engine and local API driver
cfe459d feat(fleet): agent poll/report endpoints, ETag policy docs, health computation
a8e4247 feat(agent): poll/report client
367b245 feat(agent): enroll command and on-disk state
1c9b41e fix(fleet): validate enroll.sh inputs; log skipped key cleanup on revoke
ffd2cc4 fix(fleet): revoke both B2 keys when provisioning fails after key creation
ba47c60 feat(fleet): enrollment endpoint, agent admin endpoints, enroll.sh
c136f32 feat(fleet): provision per-agent repos with scoped B2 keys, Fleet as maintenance owner
ad0788a fix(fleet): activation lock, setup-token gate, error mapping, once-only hook registration
af0b7f7 feat(fleet): enrollment tokens (1h default, 30d max, multi-use)
807b113 feat(fleet): B2 native API client for key provisioning and Object Lock check
c14df6b feat(fleet): admin CRUD for targets, templates, groups
4acf564 feat(fleet): activation, admin login, server mount hook, fleet activate command
7d4da0c fix(fleet): seal edge-case tests and key dir mode
7c598a8 feat(fleet): admin password hashing, sessions, login limiter
f9ce0a6 feat(fleet): argon2id + secretbox sealing
a73796e feat(fleet): SQLite state store
9a61a59 build: warphold app name
74b1589 build: produce the warphold binary
41e2bc4 feat(ui): upgraded htmlui to the latest version (#5599)
d1836fd build(deps-dev): bump browserslist (#5601)
3668d0e build(deps): bump github/codeql-action/upload-sarif (#5597)
554605a build(deps): bump docker/setup-buildx-action in the docker group (#5598)
f837e01 build(deps): bump the telemetry-dependencies group across 1 directory with 4 updates (#5593)
92fc5f4 build(deps): bump google.golang.org/grpc (#5592)
a460265 build(deps): bump github.com/klauspost/reedsolomon from 1.14.1 to 1.14.2 (#5578)
cb58a19 build(deps): bump the common-golang-dependencies group with 3 updates (#5577)
d9d21fe fix(repository): increment attempt to correctly log index write retries (#5575)
4ebb2be build(deps): upgrade Go to 1.25.14 (#5576)
5f9fe81 build(deps): bump github/codeql-action/upload-sarif (#5570)
f215988 build(deps-dev): bump the kopia-ui-npm-dependencies group (#5567)
80a31c5 build(deps): bump github.com/stretchr/testify from 1.11.1 to 1.12.0 (#5569)
318aac1 build(deps): bump the common-golang-dependencies group with 7 updates (#5568)
e73a5a0 fix(infra): use a string value in dependabot.yml entry (#5566)
b0138a6 fix(server): limit allowed body size in server requests (#5561)
b6bd722 chore(deps): move Go mod updates to Mondays (#5562)
b0b839f build(desp): upgrade Go to 1.25.13 (#5559)
a058e94 build(deps): bump the telemetry-dependencies group with 4 updates (#5555)
534f560 build(deps): bump github.com/klauspost/compress from 1.19.1 to 1.19.2 (#5556)
37fce72 build(deps): bump google.golang.org/api (#5554)
d241345 build(deps-dev): upgrade checklocks to release-20260105.0 (#5557)
dfe3fde build(deps-dev): bump js-yaml from 4.3.0 to 4.3.1 in /app (#5553)
b361d0f chore(ci): cleanup copilot instructions - 2 (#5548)
2067b71 chore(general): cleanup copilot instructions (#5547)
71a8608 build(deps): bump the common-golang-dependencies group with 2 updates (#5545)
0888691 build(deps-dev): bump undici from 7.28.0 to 7.29.0 in /app (#5542)
c7b56aa build(deps-dev): bump brace-expansion from 1.1.13 to 1.1.18 in /app (#5539)
a0c0e5e feat(ui): upgraded htmlui to the latest version (#5541)
4039b3d build(deps): bump fast-uri from 3.1.4 to 3.1.5 in /app (#5543)
be5c2dc build(deps-dev): bump the kopia-ui-npm-dependencies group (#5533)
9ed1412 build(deps): bump ossf/scorecard-action from 2.4.3 to 2.4.4 (#5536)
a2835b9 build(deps): bump the docker group with 2 updates (#5535)
8614394 build(deps): bump the github-actions group with 4 updates (#5534)
133fc64 build(deps-dev): bump postcss (#5531)
444d41a Log number of processed snapshots (#5530)
89c7ba0 fix(repository): release resources on error (#5528)
67934f1 feat(server): make GetCapacity available over gRPC (#5315)
fbbaf02 build(deps): bump github.com/hanwen/go-fuse/v2 from 2.10.1 to 2.11.0 (#5524)
1a2eb55 refactor(testing): mapStorage.limit uint64 (#5526)
02af5d2 build(deps-dev): bump tar from 7.5.19 to 7.5.22 in /app (#5519)
3a6895a build(deps): bump the telemetry-dependencies group with 2 updates (#5523)
a00303e build(deps): bump github.com/klauspost/compress from 1.19.0 to 1.19.1 (#5525)
35a460c build(deps): bump the common-golang-dependencies group with 2 updates (#5522)
d7ba213 refactor(general): use structured logging for faults (#5504)
40f45b0 refactor(general): use structured logging in API client (#5506)
c21ae5c build(deps): bump the common-golang-dependencies group across 1 directory with 3 updates (#5511)
56602b4 build(deps): bump github.com/pkg/sftp from 1.13.10 to 1.13.11 (#5513)
95b84f5 feat(ui): upgraded htmlui to the latest version (#5514)
b8fd290 chore(ci): pin fast-uri and js-yaml to resolve npm audit failures (#5515)
0c15687 refactor(general): use structured logging in diff (#5505)
674a5ab refactor(general): use structured logging in list cache (#5501)
8127245 refactor(general): use structured logging in cachefs (#5495)
d32f0b4 build(deps): bump github.com/prometheus/common (#5497)
6c78785 build(deps): bump github.com/studio-b12/gowebdav from 0.12.0 to 0.13.0 (#5494)
3e1a378 build(deps): bump the common-golang-dependencies group with 8 updates (#5493)
7d70c3f refactor(testing): use tb in subtest (#5489)
4a6e9c3 refactor(repository): harden single-epoch compaction selection (#5488)
3877e37 refactor(cli): cleanup auto-maintenance run*Action helpers (#5482)
6c65de1 fix(cli): only run automatic maintenance after data-modifying operations (#5473)
82be73e build(deps): upgrade Go to 1.25.12 (#5479)
c1e63ce build(deps): bump github.com/klauspost/compress from 1.18.6 to 1.19.0 (#5478)
772b59b build(deps): bump the common-golang-dependencies group with 3 updates (#5477)
116ec24 chore(general): remove unused deprecated field (#5476)
62c72d1 chore(general): address nits (#5475)
a896f1d build(deps): fix dependabot config (#5472)
fe5a334 feat(ui): upgraded htmlui to the latest version (#5471)
1042778 build(deps): bump the kopia-ui-npm-dependencies group (#5467)
c0d0244 build(deps): bump github/codeql-action/upload-sarif (#5469)
25e1756 build(deps): bump the github-actions group with 2 updates (#5468)
aaad1f3 build(deps): bump the common-golang-dependencies group with 3 updates (#5458)
b048b22 refactor(general): cleanup iomem hints (#5439)
ab6de12 chore(ci): add per platform make lint-- targets (#5452)
d886957 feat(snapshots): reduce kernel page-cache pressure during snapshots (#5437)
ecb9d8e fix(repository): filter logs with log during log cleanup (#5449)
753c8b8 build(deps): bump the common-golang-dependencies group with 3 updates (#5444)
95cc2db build(deps): bump github.com/prometheus/common (#5445)
f9f6e49 feat(repository) support AWS web identity inline and file tokens (#5440)
93b5d82 refactor(testing): reduce spurious failures in TestPickWeighted (#5446)
ecaeb43 build(deps-dev): upgrade undici to ^7.28.0 (#5442)
39781aa feat(ui): upgraded htmlui to the latest version (#5441)
bf3e5a9 chore(ci): more secure npm install flags (#5434)
542fa2c refactor(testing): fix waiting for background routine in test (#5435)
1e55e2d refactor(testing): wait for routine to exit before test cleanup (#5432)
2c1d847 refactor(testing): minor cleanups in epoch manager tests (#5431)
18ae818 refactor(testing): wait for background work in test (#5430)
a76587d build(deps): bump github.com/tg123/go-htpasswd from 1.2.4 to 1.2.5 (#5429)
7541302 build(deps): bump the common-golang-dependencies group with 6 updates (#5427)
4beb489 build(deps): bump github.com/klauspost/reedsolomon from 1.14.0 to 1.14.1 (#5428)
acaf649 feat(ui): upgraded htmlui to the latest version (#5425)
7d50727 build(deps): bump the kopia-ui-npm-dependencies group across 1 directory with 5 updates (#5426)
9392595 build(deps-dev): bump form-data from 4.0.5 to 4.0.6 in /app (#5421)
You can’t perform that action at this time.