Repository navigation
Releases: fernandezvara/backd
Release list
v0.8.1
Changelog
- bf0cacd: Admin UI e2e: the storage page test doesn't expect an owner for admin-made documents (@fernandezvara)
- 8638153: Admin UI: prepare a change to a schema or to rules as a file to download (@fernandezvara)
- eaa8cde: Config check: validate a change against the realm's whole configuration, without applying it (@fernandezvara)
- c0ab9bf: Declared image versions: versions: under a file field, and their state in documents (@fernandezvara)
- f5bd0a2: Design: image versions (@fernandezvara)
- 6c96a68: Direct uploads above 5 GiB: presigned multipart uploads (@fernandezvara)
- 161e6de: Enable multipart direct uploads on Cloudflare R2 (@fernandezvara)
- 9baefda: Image engine: a pure-Go package that makes resized copies of images safely (@fernandezvara)
- 08a4982: Image versions: workers make the declared versions after each upload (@fernandezvara)
- 0d254c0: Lint with golangci-lint in CI and fix what it found (@fernandezvara)
- 94c50b8: Merge pull request #183 from fernandezvara/116-config-changes (@fernandezvara)
- b59f199: Merge pull request #185 from fernandezvara/config-check (@fernandezvara)
- 96109b9: Merge pull request #186 from fernandezvara/160-storage-quotas (@fernandezvara)
- 739d01c: Merge pull request #194 from fernandezvara/159-image-versions-design (@fernandezvara)
- 264072c: Merge pull request #195 from fernandezvara/187-image-engine (@fernandezvara)
- 6a3c747: Merge pull request #197 from fernandezvara/188-declared-versions (@fernandezvara)
- 601d286: Merge pull request #198 from fernandezvara/189-image-generation (@fernandezvara)
- 860cd91: Merge pull request #200 from fernandezvara/190-version-downloads (@fernandezvara)
- 83a5ede: Merge pull request #201 from fernandezvara/191-versions-from-functions (@fernandezvara)
- e6f0fc7: Merge pull request #202 from fernandezvara/192-regenerate-versions (@fernandezvara)
- c81bff1: Merge pull request #203 from fernandezvara/193-strip-metadata (@fernandezvara)
- 1f697fc: Merge pull request #205 from fernandezvara/204-golangci-lint (@fernandezvara)
- 0aacf7a: Merge pull request #206 from fernandezvara/199-ux (@fernandezvara)
- b5af84c: Merge pull request #208 from fernandezvara/207-config (@fernandezvara)
- b4be6b1: Merge pull request #210 from fernandezvara/209-kli (@fernandezvara)
- 5b06aaa: Merge pull request #212 from fernandezvara/166-multipart (@fernandezvara)
- 27239f9: Merge pull request #213 from fernandezvara/release-v0.8.1 (@fernandezvara)
- 6296803: Merge rules.yaml into collection.yaml: rules are its
rules:section (@fernandezvara) - b832c3e: Regenerate image versions after a declaration changes (@fernandezvara)
- b91e547: Release prep for v0.8.1: versions, upgrade notes (@fernandezvara)
- f872319: Remove the metadata of JPEG and PNG originals by default (@fernandezvara)
- d3bb3f6: Rename the regeneration command to
backd files regenerate(@fernandezvara) - 92f18f0: Serve image versions: ?version= downloads, links, JS helpers; Shelf uses a declared thumbnail (@fernandezvara)
- 17ab599: Storage quotas: storage.quota per realm and per user, shown in the admin UI (@fernandezvara)
- daaa6c8: Use github.com/fernandezvara/kli v0.3.0 (@fernandezvara)
- 68e83b6: Versions from functions: remake, generate with other parameters, or delete a version (@fernandezvara)
- 5b17401: backd without a command prints the help, grouped by audience (@fernandezvara)
Container images: docker pull ghcr.io/fernandezvara/backd:v0.8.1 and ghcr.io/fernandezvara/backd-executor:v0.8.1 (linux/amd64 and linux/arm64), signed with cosign (keyless) and published with their SBOM and provenance.
Verify downloads against checksums.txt; each archive has an SPDX SBOM (*.sbom.json).
v0.8.0
Changelog
- 9f359f0: Admin API: cancel a job and re-run a finished one (@fernandezvara)
- a9deb44: Admin API: pause and resume a function's schedule (@fernandezvara)
- 22dc8b4: Admin API: start, follow and read schema checks (@fernandezvara)
- 8cc0846: Admin UI: Spanish translation, language switch and browser detection (@fernandezvara)
- c014aed: Admin UI: cancel and re-run on the Jobs page (@fernandezvara)
- f9112b2: Admin UI: pause and resume a schedule on the Functions page (@fernandezvara)
- d3dbeb8: Admin UI: refresh the steps already open when the jobs are reloaded (@fernandezvara)
- 259e9f2: Admin UI: schema checks in the data browser (@fernandezvara)
- 31d6f31: Admin UI: show a function's on_complete on the Functions page (@fernandezvara)
- f80d227: Admin UI: show a schedule's time zone on the Functions page (@fernandezvara)
- 75e745a: Admin UI: show overlap: skip on the Functions page (@fernandezvara)
- 57231e0: Admin UI: the files of a document's file fields in the data browser (@fernandezvara)
- a367a77: Admin UI: the steps of a job and of a call (@fernandezvara)
- 39ef641: CLI: backd data check and backd data checks (@fernandezvara)
- 64daea3: CLI: backd functions cancel and rerun (@fernandezvara)
- 3a68b6d: CLI: backd functions schedules, pause and resume (@fernandezvara)
- 47ea01d: CLI: backd storage check; a startup warning for storage keys that are not set (@fernandezvara)
- aa70010: CLI: show the steps of jobs and calls (@fernandezvara)
- 37f2837: Design: file storage in S3-compatible object storage (@fernandezvara)
- 947ba4a: Docs and JS client: connecting a realm's storage (@fernandezvara)
- 3b78176: Docs: cancelling and re-running a job (@fernandezvara)
- eb16bd8: Docs: finding documents that no longer match their schema (@fernandezvara)
- 9ca72f8: Docs: on_complete, the notification of a job's end (@fernandezvara)
- 44c9828: Docs: pausing a schedule (@fernandezvara)
- 027608b: Docs: reporting progress from a long job; an executor test for steps (@fernandezvara)
- 2bf97ac: Docs: skipping a scheduled run while the previous one is going (@fernandezvara)
- 8e9ab30: Docs: the admin UI's languages, and how to translate it (@fernandezvara)
- 27484e2: Docs: time zones for schedules (@fernandezvara)
- 7a9f2ea: File fields are server-owned: a write can't set them and a PUT keeps them (@fernandezvara)
- 99abbbd: File fields: files: in collection.yaml, with their schema injected (@fernandezvara)
- ebf5b5b: File journal and deletion queue: system collections, stores and tests (@fernandezvara)
- 459ea44: Files in functions: files(id, field) with put, get, delete and link (@fernandezvara)
- 96dea38: Files in the JavaScript client: uploadFile, prepareUpload, fileUrl, downloadFile (@fernandezvara)
- e77f776: Files: OpenAPI for the file routes and contract tests (@fernandezvara)
- 30b8598: Files: a worker keeps storage tidy; tests for uploads, rules, versions and removal (@fernandezvara)
- 3d2c5de: Files: direct uploads to the bucket, verified by backd (@fernandezvara)
- 0992a1f: Files: erasure, reconcile and usage totals (@fernandezvara)
- 08a6ec2: Files: guide pages for file fields, uploads and downloads, and rules for files (@fernandezvara)
- ed60d9a: Files: pending uploads, to create documents with their files (@fernandezvara)
- 1ac4942: Files: security review fixes and the Security of files page (@fernandezvara)
- 263e75c: Files: tests for downloads, ranges, links and abandoned uploads (@fernandezvara)
- 522b422: Files: upload, download, delete and clear, with links for apps (@fernandezvara)
- 8987ee1: Fix CI: bundles stale after an npm build, and the sample rules test knows file fields (@fernandezvara)
- 1729649: Format files_test.go (@fernandezvara)
- 8f9fed5: Functions runner: ctx.step() and ctx.progress() (@fernandezvara)
- d94a966: JS client: admin.dataChecks.start(), list(), get() and wait() (@fernandezvara)
- 3ddfe5e: JS client: admin.jobs.cancel() and admin.jobs.rerun() (@fernandezvara)
- 74ae14c: JS client: admin.schedules.list(), pause() and resume() (@fernandezvara)
- dd8fa6b: JS client: job.steps, wait({ onProgress }) and admin.jobs.get() (@fernandezvara)
- abbc038: Jobs: cancel a queued or running function job, and re-run a finished one (@fernandezvara)
- 9417d15: Jobs: on_complete queues a notification when a job ends (@fernandezvara)
- 4232474: Jobs: store and show the steps of an attempt (@fernandezvara)
- 966f7f3: Merge pull request #134 from fernandezvara/115-admin-ui-spanish (@fernandezvara)
- a65435e: Merge pull request #135 from fernandezvara/18-cancel-rerun-job (@fernandezvara)
- ab11394: Merge pull request #136 from fernandezvara/21-skip-overlapping-runs (@fernandezvara)
- b891050: Merge pull request #137 from fernandezvara/22-schedule-time-zones (@fernandezvara)
- 9e8ae9b: Merge pull request #138 from fernandezvara/20-pause-schedule (@fernandezvara)
- 1506470: Merge pull request #162 from fernandezvara/19-notify-job-complete (@fernandezvara)
- 19017c0: Merge pull request #163 from fernandezvara/23-job-progress (@fernandezvara)
- 9c80154: Merge pull request #164 from fernandezvara/26-schema-check (@fernandezvara)
- 6fa81fe: Merge pull request #167 from fernandezvara/147-file-storage-design (@fernandezvara)
- f5d1f37: Merge pull request #168 from fernandezvara/148-storage-per-realm (@fernandezvara)
- 1f7e1ae: Merge pull request #169 from fernandezvara/149-file-fields (@fernandezvara)
- 18670d8: Merge pull request #170 from fernandezvara/150-pending-uploads (@fernandezvara)
- 406f34f: Merge pull request #171 from fernandezvara/151-direct-uploads (@fernandezvara)
- 9d3474d: Merge pull request #172 from fernandezvara/152-erasure-reconcile (@fernandezvara)
- 9cbb836: Merge pull request #173 from fernandezvara/153-functions-files (@fernandezvara)
- 8d94998: Merge pull request #174 from fernandezvara/154-js-files (@fernandezvara)
- ab8c6cd: Merge pull request #175 from fernandezvara/155-files-security (@fernandezvara)
- b239785: Merge pull request #176 from fernandezvara/165-shelf-files (@fernandezvara)
- e5495a5: Merge pull request #177 from fernandezvara/114-admin-ui-files (@fernandezvara)
- 17ee10e: Merge pull request #179 from fernandezvara/178-shelf-login (@fernandezvara)
- 3b8d323: Merge pull request #180 from fernandezvara/example-storage-keys (@fernandezvara)
- c500992: Merge pull request #182 from fernandezvara/release-v0.8.0 (@fernandezvara)
- 0637bb0: MinIO in the local and test stacks, and the storage: example in the realm template (@fernandezvara)
- c6cc16d: Production reference: MinIO for a realm's files on its own network, with a test (@fernandezvara)
- ec58e20: Reads survive an unavailable file storage: documents come without links (@fernandezvara)
- ebda6c5: Release prep for v0.8.0: versions, upgrade notes (@fernandezvara)
- 7625ee4: Scheduled functions: overlap: skip (@fernandezvara)
- b94ce4a: Scheduled functions: timezone in function.yaml (@fernandezvara)
- b6708f5: Schema checks: a worker scans the collections and reports the drift (@fernandezvara)
- 3795db6: Schema checks: the model, the lock and the report store (@fernandezvara)
- c11a112: Shelf: a hidden required field no longer blocks sign-in (@fernandezvara)
- 8a4413a: Storage check: l...
v0.7.0
Changelog
- a2517e0: Admin API: a user search is at most 254 characters (@fernandezvara)
- f354911: Admin API: the configuration view, user search and a user's sessions (@fernandezvara)
- 333ef57: Admin UI: API keys, secrets and the audit trail (@fernandezvara)
- e76f14b: Admin UI: Playwright end-to-end tests with axe, CSP and origin guards (@fernandezvara)
- 454948d: Admin UI: built into the image and the release, CI, and the example stack (@fernandezvara)
- 6d4b734: Admin UI: functions, invocation history, logs, jobs and manual invoke (@fernandezvara)
- d7232f5: Admin UI: screenshots made by the Playwright suite (@fernandezvara)
- f06dd72: Admin UI: serve embedded assets at /_ui/ with a strict CSP (@fernandezvara)
- ef6770b: Admin UI: sign-in redirects stay in the realm; a memory-only session ends with the page (@fernandezvara)
- 248a4ec: Admin UI: the CSP requires Trusted Types for scripts (@fernandezvara)
- 424b343: Admin UI: the Vue application with sign-in, session and idle timeout (@fernandezvara)
- 25bdbc1: Admin UI: the data browser and schema forms (@fernandezvara)
- dc7e379: Admin UI: the read-only configuration view (@fernandezvara)
- 4dae687: Admin UI: the schema form and the query builder (@fernandezvara)
- 7cb39af: Admin UI: use vue-i18n 11 everywhere (@fernandezvara)
- 9610396: Admin UI: users, roles, sessions and invitations (@fernandezvara)
- 6f445ac: Admin data route: documents past the rules, with audited writes (@fernandezvara)
- 296d563: BACKD_ADMIN_API switches the admin API off per instance; the production reference splits public and internal (@fernandezvara)
- fabed95: Build(deps): bump the actions group with 4 updates (@dependabot[bot])
- 92079e3: Build(deps-dev): bump @types/node in /clients/js in the js group (@dependabot[bot])
- 5926ab6: Dependabot: watch the admin UI's npm dependencies (@fernandezvara)
- 5347128: Design: admin UI (@fernandezvara)
- 93eef4c: Design: admin UI names the JavaScript client backd-js (@fernandezvara)
- 38d7d26: Docs: the Admin UI guide (@fernandezvara)
- ef4d32a: Docs: the Admin UI guide covers functions (@fernandezvara)
- 184249b: Docs: the Admin UI guide covers keys, secrets and audit (@fernandezvara)
- a90d9e6: Docs: the Admin UI guide covers the configuration view (@fernandezvara)
- e4e3522: Docs: the Admin UI guide covers the data browser (@fernandezvara)
- bc237fa: Docs: the Admin UI guide covers users and invitations (@fernandezvara)
- cb2fac4: Docs: the admin UI's security review as prose, without the findings table (@fernandezvara)
- 2f276df: Docs: the admin UI's security review, hardening checklist entry and screenshots (@fernandezvara)
- 18dad0e: JS client: admin.data(database, collection) for the admin data route (@fernandezvara)
- 0e5aa85: JS client: the jobs listing filters by origin and shows origin and email kind (@fernandezvara)
- 3409ebf: JS client: whoami, config, user search and user sessions for the admin UI (@fernandezvara)
- 9d1ca6a: Merge pull request #101 from fernandezvara/release-v0.6.0 (@fernandezvara)
- dc6550e: Merge pull request #118 from fernandezvara/design-admin-ui (@fernandezvara)
- 8919600: Merge pull request #119 from fernandezvara/admin-ui-server (@fernandezvara)
- 370f731: Merge pull request #120 from fernandezvara/107-admin-ui-foundation (@fernandezvara)
- d07c016: Merge pull request #121 from fernandezvara/108-admin-ui-users (@fernandezvara)
- d4607ae: Merge pull request #122 from fernandezvara/109-admin-ui-keys-secrets-audit (@fernandezvara)
- e863769: Merge pull request #123 from fernandezvara/110-admin-ui-functions (@fernandezvara)
- d480b9b: Merge pull request #124 from fernandezvara/111-admin-ui-data (@fernandezvara)
- 080df4d: Merge pull request #125 from fernandezvara/112-admin-ui-data-browser (@fernandezvara)
- da71b58: Merge pull request #126 from fernandezvara/113-admin-ui-security-review (@fernandezvara)
- 67e5bfc: Merge pull request #128 from fernandezvara/dependabot/npm_and_yarn/clients/js/js-155033dc32 (@fernandezvara)
- bf65acc: Merge pull request #129 from fernandezvara/dependabot/github_actions/actions-ca5533c2d9 (@fernandezvara)
- 0eb2db6: Merge pull request #131 from fernandezvara/fix-signup-timing-test (@fernandezvara)
- f23eed5: Merge pull request #132 from fernandezvara/release-v0.7.0-prep (@fernandezvara)
- 625b9ea: Merge pull request #133 from fernandezvara/fix-release-admin-ui-tarball (@fernandezvara)
- e24bec5: Read-only admin level: admin: read, admin.read_access and whoami (@fernandezvara)
- 6af9b29: Release prep for v0.6.0: versions, upgrade notes (@fernandezvara)
- 07e079f: Release prep for v0.7.0: versions, upgrade notes (@fernandezvara)
- 805a0b0: Release: pack the admin UI outside the checkout (@fernandezvara)
- 2ffc24b: Test sign-up's timing property by counting hashes, not by timing it (@fernandezvara)
- f88678e: backd-js 0.5.0 (@fernandezvara)
- cd548bd: backd-js 0.6.0 (@fernandezvara)
- 0f1e6cf: design decided (@fernandezvara)
- e12105f: whoami lists the configuration among the areas a read-only administrator reads (@fernandezvara)
Container images: docker pull ghcr.io/fernandezvara/backd:v0.7.0 and ghcr.io/fernandezvara/backd-executor:v0.7.0 (linux/amd64 and linux/arm64), signed with cosign (keyless) and published with their SBOM and provenance.
Verify downloads against checksums.txt; each archive has an SPDX SBOM (*.sbom.json).
v0.6.0
Changelog
- 4fd5b2a: Admin rights: realm.yaml roles take admin: true or a list of areas (@fernandezvara)
- 97e7a64: Admin rights: the /_admin endpoints check the area, and nobody grants more than they hold (@fernandezvara)
- 0280690: Docs: Prefer: respond-async (calling functions, jobs, JavaScript client, CORS) (@fernandezvara)
- f05ecf2: Docs: admin rights per role (areas, the escalation rules, audit, checklist) (@fernandezvara)
- 4862c5f: Docs: login_throttle (realm settings, brute-force protection, template comments) (@fernandezvara)
- 82346fa: Docs: soft delete (collection.yaml, documents, querying, rules, erasure, JS client, template) (@fernandezvara)
- 4ffb944: JavaScript client: deleted on list and get, restore, purge (@fernandezvara)
- 7a8eb9c: Merge pull request #100 from fernandezvara/47-sync-async-per-call (@fernandezvara)
- ef7594b: Merge pull request #97 from fernandezvara/50-admin-capabilities (@fernandezvara)
- 8cd930b: Merge pull request #98 from fernandezvara/30-login-throttle (@fernandezvara)
- 408c52a: Merge pull request #99 from fernandezvara/39-soft-delete (@fernandezvara)
- cabe1f9: Merge remote-tracking branch 'origin/main' into 30-login-throttle (@fernandezvara)
- bae07fa: Prefer: respond-async runs a sync function as a job (@fernandezvara)
- 154f65e: Soft delete over HTTP: DELETE marks, deleted=only|include, restore, purge (@fernandezvara)
- bafbe64: Soft delete: MongoDB builds the TTL index and flags the pre-soft-delete unique index (@fernandezvara)
- e6a99cd: Soft delete: collection.yaml soft_delete, restore and purge rules, unique indexes with the deletion marker (@fernandezvara)
- 66e1a73: Test harness declares the ops role of the JS integration realm (@fernandezvara)
- 168e0f3: bootstrap: keep the 'isn't an admin role' wording (@fernandezvara)
- 64400b1: login_throttle: a realm tunes its login throttling (@fernandezvara)
- 553e6b3: rules test: restore and purge assertions, and the deleted marks in fixtures (@fernandezvara)
- 75186e5: shelf tour: wait for the digest mail instead of reading the mailbox once (@fernandezvara)
Container images: docker pull ghcr.io/fernandezvara/backd:v0.6.0 and ghcr.io/fernandezvara/backd-executor:v0.6.0 (linux/amd64 and linux/arm64), signed with cosign (keyless) and published with their SBOM and provenance.
Verify downloads against checksums.txt; each archive has an SPDX SBOM (*.sbom.json).
v0.5.0
Changelog
- 84e42ff: API key scopes in the command line, the JavaScript client and the docs (@fernandezvara)
- 1356f9e: API key scopes: grants, enforcement on every route, admin API (@fernandezvara)
- 7452ba7: Added tests for datetime field type (@fernandezvara)
- d9049c6: Admin user list: one page from the database, with a cursor (@fernandezvara)
- ba12461: CI replays the tutorial against a stack built from the checkout (@fernandezvara)
- fe1bf79: Cursors: the position condition, its encoding and the MongoDB paging (@fernandezvara)
- 4d7ffac: Dates stored as BSON Dates through the whole API (@fernandezvara)
- 534db38: Design: tutorial — the Shelf team asset library (@fernandezvara)
- f253429: Docs: dates stored as BSON Dates; rule fixtures with date fields (@fernandezvara)
- 37f4b15: Docs: the landing page and examples show v0.4.0 (@fernandezvara)
- 3a6bdf9: Idempotency-Key on document creates and batches (@fernandezvara)
- 43a6384: JavaScript client: after and next_cursor; iterate follows the cursor (@fernandezvara)
- 9cdbbc2: List: after and next_cursor (@fernandezvara)
- c38ee22: Login throttle: serialize the password checks of an account across instances (@fernandezvara)
- 8349f7e: Merge pull request #84 from fernandezvara/docs-landing-v0.4.0 (@fernandezvara)
- b705bb0: Merge pull request #85 from fernandezvara/31-cursor-pagination (@fernandezvara)
- a717c82: Merge pull request #86 from fernandezvara/29-52-28-hardening (@fernandezvara)
- b0ed905: Merge pull request #87 from fernandezvara/25-32-compose-names-rules-test (@fernandezvara)
- 1c1d3bb: Merge pull request #88 from fernandezvara/27-api-key-scopes (@fernandezvara)
- c7e8441: Merge pull request #89 from fernandezvara/35-cookie-token-mode (@fernandezvara)
- 38a8881: Merge pull request #90 from fernandezvara/42-bson-dates (@fernandezvara)
- 0bbee05: Merge pull request #92 from fernandezvara/40-idempotency-creates (@fernandezvara)
- 7b7dfbd: Merge pull request #93 from fernandezvara/91-tutorial (@fernandezvara)
- b5a6eef: Merge pull request #94 from fernandezvara/fix-ci-shelf-tests (@fernandezvara)
- 46ebd5d: Merge pull request #96 from fernandezvara/release-v0.5.0 (@fernandezvara)
- be31888: Pages: allow publishing the docs by hand between releases (@fernandezvara)
- c50c548: Queries compare date-stored fields as dates (@fernandezvara)
- 5817561: Release prep for v0.5.0: versions, upgrade notes, template CI tests the rules (@fernandezvara)
- c4678b8: Schema: x-backd-store: date stores a date-time field as a BSON Date (@fernandezvara)
- 2f04c57: Session cookies in the JavaScript client and the docs (@fernandezvara)
- a466db5: Session cookies: an HttpOnly cookie instead of a token for browser apps (@fernandezvara)
- cef7a8c: Shelf app: real view switching — nav was outside Alpine scope (@fernandezvara)
- 046a4f3: Shelf app: say who published an asset when published_by is there (@fernandezvara)
- c164e23: Shelf ch10: email — templates, hosted pages, a delivery function (@fernandezvara)
- 6921d62: Shelf ch11: the import webhook — the internet calls you (@fernandezvara)
- 9e7e467: Shelf ch12: running it — audit feed, API keys, the checklist (@fernandezvara)
- 5d33c66: Shelf ch1: the realm, assets and shares collections, the starter stack and a live gallery (@fernandezvara)
- a61ecf1: Shelf ch2: members — auth on, demo roles, sessions, account page (@fernandezvara)
- 396744e: Shelf ch3: rules and conflict-free edits (@fernandezvara)
- 68e4418: Shelf ch4: invitations close the door (@fernandezvara)
- 4f1b228: Shelf ch5: functions — publish, share, share-open (@fernandezvara)
- 0263675: Shelf ch6: preview — the network allowlist (@fernandezvara)
- e95b93e: Shelf ch7: an optional step showing a schema change (@fernandezvara)
- 365d8c7: Shelf ch7: notify — an internal function and the call graph (@fernandezvara)
- 61fbcab: Shelf ch8: digest — an async job with retry (@fernandezvara)
- 35c760e: Shelf ch9: schedules — digest daily, cleanup nightly (@fernandezvara)
- 71172d9: Shelf docs: chapters 3 and 4 match a real run (@fernandezvara)
- 6c5e86c: Shelf docs: close the gaps found reviewing the tutorial end to end (@fernandezvara)
- d491b2c: Shelf docs: fix chapter links, legacy callouts; link check skips downloads (@fernandezvara)
- 7cda606: Shelf docs: overview (stack, conventions, troubleshooting), chapter gaps, a summary and where next (@fernandezvara)
- 6623453: Shelf docs: per-chapter realm.yaml, and the first accounts in chapter 2 (@fernandezvara)
- 06f8a14: Shelf docs: watch the clock, secret_missing, name the API key (@fernandezvara)
- 4726294: Shelf: curators read every draft; a Review view; import records the event first (@fernandezvara)
- fa774ea: Shelf: functions-build image, API key client name, tour and chapters 5-12 match a real run (@fernandezvara)
- c2b88f3: Shelf: static app snapshot (PicoCSS + vendored Alpine) (@fernandezvara)
- ded2247: Shelf: the gallery works in a realm with auth disabled; chapter 1 matches a real run (@fernandezvara)
- 30ac87b: Shelf: tour.js + make shelf-tour — the tutorial's regression test (@fernandezvara)
- 732e3e8: Shelf: wire the tutorial into the docs and examples index (@fernandezvara)
- b46c448: Shorter sessions for users who hold an admin role (@fernandezvara)
- e44f7d9: Test harness knows the shelf's curator role and 16+ character strings (@fernandezvara)
- 4db3256: Test stacks have their own compose project names; the JS integration run tears down (@fernandezvara)
- f211ba6: TestWatch waits for Watch to return before the temp dir is removed (@fernandezvara)
- 9a6ef8d: Tutorial: fetch-the-files shortcode, functions-testing download, chapter load test (@fernandezvara)
- b75c1c9: backd rules test: tests for access rules, without a database (@fernandezvara)
- 5ab0ade: backd-js 0.3.0 (@fernandezvara)
- 0a07ae2: backd-js 0.4.0 (@fernandezvara)
- e455651: shelf-tour-ci: remove the root-owned .build folders from a container (@fernandezvara)
- 9a50c29: storage.Match: evaluate a filter in memory with MongoDB's semantics (@fernandezvara)
Container images: docker pull ghcr.io/fernandezvara/backd:v0.5.0 and ghcr.io/fernandezvara/backd-executor:v0.5.0 (linux/amd64 and linux/arm64), signed with cosign (keyless) and published with their SBOM and provenance.
Verify downloads against checksums.txt; each archive has an SPDX SBOM (*.sbom.json).
v0.4.0
Changelog
- 3a52a6d: Attack script for the account flows, run by CI with the others (@fernandezvara)
- b723914: CI: run the example attack scripts against the local stack (@fernandezvara)
- 520b75b: CI: test the JavaScript client on Node 22 and 26 (@fernandezvara)
- 13a789d: Check the JavaScript client as npm users get it, and publish it on js- tags (@fernandezvara)
- 1194a6d: Custom emails from functions: ctx.email.send, any recipient, bounded by caps (@fernandezvara)
- c7fe50b: Deactivate by default, erase on request: tombstone and policy job (@fernandezvara)
- 1903687: Design documents for the account lifecycle, email delivery and internal functions (@fernandezvara)
- bd2a43d: Design: Prometheus metrics (@fernandezvara)
- 8f6e162: Design: custom emails from functions have no recipient limit (@fernandezvara)
- 47a218d: Design: erasure by deactivation, tombstone and optional policies (@fernandezvara)
- 07121bf: Design: the purge of unverified accounts stays a hard delete (@fernandezvara)
- 8390bfc: Docs: email addresses do change, in guarded ways (@fernandezvara)
- 26ccf94: Docs: list the erasure page in the authentication overview (@fernandezvara)
- 2d0db45: Docs: mount the blog example so the example-file shortcode can quote it (@fernandezvara)
- 23eb4a4: Docs: the workshop tour page and Try it links in the cookbook (@fernandezvara)
- dd02d7f: Email change and emailed invitations (@fernandezvara)
- efc46d5: Email development: Mailbox app, workshop email through email-capture, fakeEmail (@fernandezvara)
- 2de8b30: Email development: dev_only functions, BACKD_DEV_ANY_ADDR, email-capture template (@fernandezvara)
- 0aeaaaf: Email languages: user locale, sign-up mapping, PATCH /_auth/me (@fernandezvara)
- 6f2b82b: Email verification: sign-up sends it, the link verifies, optional gate (@fernandezvara)
- 4ff1d47: Email: email jobs, delivery function contract, hashed tokens, limits (@fernandezvara)
- bec5c78: Email: email section in realm.yaml, templates, BACKD_URL (@fernandezvara)
- 9df4725: Erasure building blocks: policy indexes, the eraser and the owned report (@fernandezvara)
- a17a959: Executor image: apply Alpine security updates; scan it in CI too (@fernandezvara)
- ccd9d4a: Expenses examples require a verified email; the JS client handles a pending sign-up (@fernandezvara)
- ac2ddbd: Fix a flaky metrics test: check the labels, not the sample values (@fernandezvara)
- 68ca689: Grafana dashboards: API, MongoDB, accounts, functions and processes (@fernandezvara)
- d9f85fd: Grafana in the local stack, with the dashboards provisioned (@fernandezvara)
- 78fa888: Hosted pages for email links: GET shows, POST acts, one error page (@fernandezvara)
- cdf8132: Internal functions: ctx.call between functions of a database (@fernandezvara)
- 40d06ba: Internal functions: internal and calls in function.yaml, no HTTP route (@fernandezvara)
- 880f96b: Internal functions: run any function by hand through the admin API (@fernandezvara)
- 0e668e4: Internal functions: workshop example, ctx.call fakes for tests, docs (@fernandezvara)
- 759d695: JavaScript client: the account email flows; examples use them (@fernandezvara)
- 1f9e369: Merge pull request #63 from fernandezvara/design-documents (@fernandezvara)
- a0a5688: Merge pull request #64 from fernandezvara/internal-functions (@fernandezvara)
- 3b35c84: Merge pull request #65 from fernandezvara/55-retries-async-functions (@fernandezvara)
- da96b7d: Merge pull request #66 from fernandezvara/9-send-email-by-function (@fernandezvara)
- b507424: Merge pull request #67 from fernandezvara/57-dev-mailbox (@fernandezvara)
- 3e1119a: Merge pull request #68 from fernandezvara/56-email-languages (@fernandezvara)
- b976ff2: Merge pull request #69 from fernandezvara/58-hosted-pages-for-account-emails (@fernandezvara)
- e6b7ee6: Merge pull request #70 from fernandezvara/11-email-varification (@fernandezvara)
- c552cd2: Merge pull request #71 from fernandezvara/12-password-reset (@fernandezvara)
- 14482cf: Merge pull request #72 from fernandezvara/13-generic-signup-answer (@fernandezvara)
- 0e175a7: Merge pull request #73 from fernandezvara/60-61-email-change-and-invitations (@fernandezvara)
- 1762a9a: Merge pull request #74 from fernandezvara/15-59-client-flows-and-custom-emails (@fernandezvara)
- 1ffd306: Merge pull request #75 from fernandezvara/design-erasure (@fernandezvara)
- d13ebce: Merge pull request #76 from fernandezvara/14-erasure (@fernandezvara)
- 9bf12ab: Merge pull request #77 from fernandezvara/10-postmark-delivery-function (@fernandezvara)
- 8449528: Merge pull request #78 from fernandezvara/17-24-security-review-and-attack-scripts (@fernandezvara)
- 1186a24: Merge pull request #80 from fernandezvara/16-prometheus-metrics (@fernandezvara)
- b0bf24b: Merge pull request #81 from fernandezvara/79-grafana-dashboards (@fernandezvara)
- 2d492e1: Merge pull request #82 from fernandezvara/34-publish-js-client (@fernandezvara)
- 8ceb904: Merge pull request #83 from fernandezvara/release-v0.4.0 (@fernandezvara)
- 3ca7838: Metrics review: cap concurrent scrapes, index for the erase count (@fernandezvara)
- b12d231: Metrics: MongoDB command latency and mongodb_up (@fernandezvara)
- 5c42a20: Metrics: a private /metrics listener and the request metrics (@fernandezvara)
- 17a9543: Metrics: jobs (cached), email and erase outcomes, executor and egress (@fernandezvara)
- 8c38d12: Metrics: sessions, limits, function calls and refusals (@fernandezvara)
- b364233: Mongo tests: use clocks in the future so the TTL monitor can't delete their records (@fernandezvara)
- 38c427e: Optional collection.yaml: what an erase does to a collection (@fernandezvara)
- 6659bb1: Password reset by email: request, hosted form, JSON redeem (@fernandezvara)
- bc591ec: Postmark delivery function (example) and its cookbook recipe (@fernandezvara)
- ec5c2d4: Production edge: the account flows share the strict rate limit (@fernandezvara)
- 9923f48: Prometheus in the production reference and the local stack (@fernandezvara)
- c3d0529: Refuse .invalid email addresses (@fernandezvara)
- ee5f7be: Refuse addresses that would split or break a message header (@fernandezvara)
- cd5e47c: Release prep for v0.4.0: versions, upgrade notes, GoReleaser ignores js- tags (@fernandezvara)
- e3b3e4a: Remove the email files generated into the blog example by mistake (@fernandezvara)
- 2d0fa40: Rename the client to backd-js and make it publishable (@fernandezvara)
- c74ffd1: Retries for async functions: retry in function.yaml, backoff, next attempt (@fernandezvara)
- 8ff15ad: SECURITY.md: the email flows, hosted pages and JS client are in scope (@fernandezvara)
- 2c497eb: Sign-up gives the same answer for registered addresses when it issues no session (@fernandezvara)
- f31e3bf: Workshop app groundwork: demo accounts in the workshop realm, admin secrets and invocations in the JS client (@fernandezvara)
- 28f249d: Workshop tour: a Node script that walks it and checks each step (make workshop-tour) (@fernandezvara)
- 1b56732: Workshop tour: an email verification step (@fernandezvara)
- bb6f527: Workshop tour: app shell with demo accounts and the call inspector (@fernandezvara)
- e3c46a7: Workshop tour: operator panel (secrets, jobs, history, run by hand) and an email panel; admin users read any job (@fernandezvara)
- 65930c2: Workshop tour: panels for order_total, refund, the w...
v0.3.0
Changelog
- 55743a9: Bump the actions group with 9 updates (dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>)
- 921bba1: CI: production reference fix (Antonio Fdez. antoniofernandezvara@gmail.com)
- 7fc0be9: Merge pull request #4 from fernandezvara/dependabot/github_actions/actions-6b04200407 (Antonio Fdez. antoniofernandezvara@gmail.com)
- 5177658: Publish mongodb port to localhost on example (Antonio Fdez. antoniofernandezvara@gmail.com)
- 7282a8d: Publish the documentation site to GitHub Pages on version tags (Antonio Fdez. antoniofernandezvara@gmail.com)
- c82e4a9: Update the JavaScript client's TypeScript to 7 and @types/node to 26 (Antonio Fdez. antoniofernandezvara@gmail.com)
- 3739e91: Updates to readme, references tests (Antonio Fdez. antoniofernandezvara@gmail.com)
- f6d2e2b: v0.3.0 - first public version (Antonio Fdez. antoniofernandezvara@gmail.com)
Container images: docker pull ghcr.io/fernandezvara/backd:v0.3.0 and ghcr.io/fernandezvara/backd-executor:v0.3.0 (linux/amd64 and linux/arm64), signed with cosign (keyless) and published with their SBOM and provenance.
Verify downloads against checksums.txt; each archive has an SPDX SBOM (*.sbom.json).