Skip to content

v0.3.0

Choose a tag to compare

@richardwillars richardwillars released this 05 Nov 13:07
7b64d64

0.3.0 (2026-11-05)

⚠ BREAKING CHANGES

  • refuse a TestPasskey's parts at check, and correct what the docs review found (D17n) (#588)
  • refuse reading a File's parts, a file no email sends, and FileContents where nothing takes it (A26) (#583)
  • refuse a File crossing to or from a provider, a queue or a prompt (A25) (#581)
  • erasure clears contact details with no mark: an unmarked Email, PhoneNumber, PersonName, PostalAddress, GivenName or FamilyName on a kept record must be optional or say erase: Erasure.retained (data.erase_field_required), and a shop's own number on a kept record is cleared
  • a connection or provider package that receives an Email with no erasure: needs an acceptance, SMTP recipients included (acceptance.missing, in jadpo build too)
  • an Email sent to a model needs contact in allowed: (semantic.ai_field_unmarked); a cache: immutable route can't give an Email (route.cache_invalid); an audited entity can't hold one yet (toolchain.not_built_yet)
  • system-run work must reach only what names Access.system: a schedule, subscriber or batch reaching a list with no grant, a people-only list or a field's own list is policy.system_grant_missing
  • a File in a route's output: or a failure's client: is toolchain.not_built_yet, and in an Input or a placeholder it is type.batch_input
  • a migration that removes data needs an acceptance (migration.drop_not_accepted), and so does a risky package upgrade
  • bytes is now a standard namespace, so it can't name a domain or a library, and ProblemDetails' type_ is now type

Features

  • check: a first record's public writes and what else nothing compares (#539) (5d5deb4)
  • check: an email address is personal data, and a public read of it is a notice (#547) (1a23ddb)
  • check: erase shared records for their last person, and reach files and sign-in (#506) (bce3064)
  • check: erasure clears phone numbers, names and postal addresses with no mark (#561) (94ab778)
  • check: keep an erased person's record field by field, and belong only by direct reference (#519) (bc9e570)
  • check: refuse system-run work reaching what no list grants (A22) (#566) (7acbfc4)
  • check: system-run work reaches only what names Access.system (A23) (#572) (3a87f3d)
  • cli: one error for a broken test database, and short reports with --full (#542) (30282ff)
  • close the small gaps the registry found (#537) (1eee0d9)
  • data: encrypted fields and keys held as data (#517) (ab07d33)
  • docs: landing pages and status lines (D17e) (#567) (6cc3cb4)
  • docs: one generated list of standard types (D17h) (#569) (32083a2)
  • flags: change, list and remove flags, test every value and answer GET /flags (#504) (b953448)
  • help: standard type pages that teach, and jadpo help <Type> (#530) (40e1066)
  • http: a GET can run an action the graph proves read-only (#531) (8ab34f2)
  • http: a route can send raw bytes and say its answer never changes (#534) (0ff8aed)
  • identity: confirm one request with a passkey (#515) (da4f54e)
  • migrate: removing data needs a person (#518) (29baa71)
  • monitoring: declare thresholds per domain, write their rules and accept loosening (#505) (0e1b34c)
  • package: a package names its publisher (#535) (7abfe5f)
  • package: jadpo package new, and the registry's bar refuses a proprietary licence (#540) (5228306)
  • package: serve the registry's verifier, with no network while checking (#523) (ed7572b)
  • package: show a release's facts and change record, and verify as the registry does (#521) (e00e61f)
  • packages: let your own company's git repositories in by a list a person accepts (#520) (e067231)
  • packages: risky package upgrades need a person (#524) (380b9d4)
  • package: the registry commands, checked against the public log (#532) (df31b11)
  • personal-data: ask a person why data stays at a connection that can't erase it (#525) (97f93be)
  • personal-data: list every connection and host personal data reaches (#516) (4c9000a)
  • rate-limits: a route's and an API's own rate_limit (#536) (6d87469)
  • refuse a File crossing to or from a provider, a queue or a prompt (A25) (#581) (48f6c96)
  • refuse a TestPasskey's parts at check, and correct what the docs review found (D17n) (#588) (f69db54)
  • refuse reading a File's parts, a file no email sends, and FileContents where nothing takes it (A26) (#583) (ffca51e)
  • registry: the registry protocol, its Merkle log and a local registry (#510) (be357e0)
  • review: write the approval report, decisions first (#511) (1ae0b74)
  • syntax: let a reserved word name a field or an enum variant (#533) (2181652)
  • the audit trail, with history, retention, erasure and AuditEntryRecorded (#503) (94dc6ec)

Bug Fixes

  • check: refuse a File in a route's answer or request (A24) (#573) (9e0217e)
  • docs: hold every bundle link to a page and send agents to split pages (#526) (d5654ca)
  • don't promise a clean file when a clean habit hides a reserved word (#529) (f98e8fe)
  • keep a null test's edit from joining a generic type's closing bracket (#585) (10b40e6)
  • postgres: read extension types with no named statement; record 8.2n's measurements (#546) (5b56135)
  • read a type's ? as nullable, a run of ; as one habit, and wait for a key's claim (#527) (44d2581)
  • say the public registry isn't live, and how a package gets into an app today (#587) (e241704)
  • say what a release ships in what a new agent reads first (#538) (07fd033)