Skip to content

Releases

0.4.0

0.4.0 Pre-release
Pre-release

Choose a tag to compare

@recertia recertia released this 29 Oct 11:52

Pre-release, like 0.2.0 and 0.3.0. The package version and the API version (info.version
in the OpenAPI document) are now 0.4.0; through 0.3.0 both still said 0.1.0.

0.2.0 and 0.3.0 are omitted. Both were tagged and released without a section in this
file, and this release does not reconstruct them. The entries in this section cover every
change since 0.1.0, including changes that first shipped in 0.2.0 or 0.3.0, and are not
split by release.

Upgrade notes

  • Binding a run to a program step needs a current preview (#260). POST /v1/programs/{program_id}/steps/{step_id}/run with bind_run_id now returns 400 when the
    step has no preview, and 409 when the step's goal changed since its preview. Before, both
    binds returned 200. Clients that preview the step, or ask for the run envelope, before
    they bind are unaffected. To fix a rejected bind, preview the step again, then bind.
  • The other breaking changes in this release are listed under Changed (breaking) below:
    GET /v1/runs order and cursor (#136), SSE id: as a byte offset in follow mode (#137),
    the promotion API, CLI and library (REC-009), the negative-fixture API (REC-046), and the
    removed stub lock-identity helper (REC-056b1).
  • Supported versions: SECURITY.md now names 0.4.x as the supported line. Older release
    lines (0.1.x, 0.2.x and 0.3.x) get no fixes; upgrade to 0.4.0 to receive them.

Known limits

  • 0.4.0 wheels leave out three things the package reads from outside itself. Use a
    source checkout for these:
    • console/static, the web console. From a wheel install the /console routes return
      404.
    • policy/authoring-prior.json, the default authoring prior. From a wheel install a run
      that reaches the distill step ends with authoring_prior_missing.
    • The data that src/recertia/evals/heldout.py reads. That module is package code, but it
      assumes a source checkout: it looks for evals/ in the working directory and at the
      repository root.
  • Low risk: the API probes a directory outside the package. At startup the API checks
    with is_dir() for console/static at a path worked out from the installed package
    (src/recertia/api/routes/meta.py:28). For a wheel install that path is outside
    site-packages, and a wheel never creates it. If files were planted there, the API would
    serve them under /console without authentication. Anyone who can write there can
    already change the installed code.
  • Plan after 0.4.0: move the web console, the default authoring prior and the held-out
    eval data under src/recertia as package data. The wheel then ships them, and the tests
    that check the wheel's RECORD and the sdist cover them. No task id is assigned yet.
  • limit is not checked at the request boundary on some list and search routes.
    GET /v1/jobs, GET /v1/proposals and GET /v1/reviews clamp an out-of-range limit
    instead of rejecting it with 422, and POST /v1/skills/search does not range-check
    limit; a non-integer limit there returns 500. GET /v1/runs and the programs list
    already return 422.
  • Some error-body tests check fields, not the whole body. The tests for the root_busy
    responses on /v1/runs and /v1/programs assert the code, status and message, but not the
    exact error body, so a change that added a field (for example a server path) to that body
    would not fail them. The responses themselves carry no path.
  • The standalone worker does not end a failed run with a run event. When a run fails
    inside recertia worker, the worker marks the queue item failed, but it writes no terminal
    event and no run_failed event for the run. The failure is visible in the queue status
    and in the worker's own output.

Corrections

Earlier entries in this section are kept as written. Two known limits in the REC-058
root-lock entry under Fixed no longer hold:

  • "RootBusy is not yet the root_busy API/CLI error": RootBusy now maps to the
    root_busy error (503, retryable) (#212, #248, #254).
  • "The operations-schema exclusive lock is unbounded": the lock now waits with a bound
    (#212, #218). The other half of that item, about the faithfulness command's orchestrator,
    is not changed by this note.

Pull requests since 0.3.0

Every pull request merged into main since the 0.3.0 tag whose title names a REC task id.
The entries below describe them where they are user-visible.

  • #98 REC-020: commit-email check covers the pushed range (before..after) on push
  • #100 REC-011 (C1, part 1): record run resolution (decided|unresolved|invalid) + exit_code + reason
  • #101 REC-013: T2 planted-regression set (10 cases) + MANIFEST.sha256
  • #102 REC-022: operator-only held-out eval job (fail-closed, container-only) [draft]
  • #103 REC-022: weekly-ops least privilege, public eval roots only, no ${{ }} in any run: [draft]
  • #104 REC-024: redact non-allowlisted values in commit-email check output
  • #105 REC-025: check every address in a *-by trailer value
  • #106 REC-026: stop the embedded queue worker before the manual cap claim (test_resume_admits_quota flake)
  • #107 REC-028: m2 concurrency test asserts overlap/ordering, not wall clock
  • #108 REC-029: safe embedded worker start/stop, stop() reports timeout, no leaked test threads
  • #109 REC-028 nits: clear failure on lost concurrency, 5 s rendezvous, second rendezvous
  • #110 REC-027: harden commit-email check
  • #111 REC-030: spawn ledger appenders with deadline (defence in depth)
  • #112 REC-017: bounded probe harness, spawn context, pytest-timeout backstop, CI job timeouts
  • #113 REC-031: bounded worker teardown (F1–F4)
  • #114 REC-035: mypy ratchet covers tests/
  • #115 REC-036: session exit guard, CI job timeouts, trylast test (stacked on #113)
  • #116 REC-040: mypy ratchet follow-ups (S4, S5, N2, N4-N7) from PR #114 review
  • #117 REC-042: restore the network guard for the outermost session only (stacked on #115)
  • #118 REC-009 Gap A: decision-only promotion refusals, operator audit store, held-out manifest loader
  • #119 REC-044: fix-forward for REL-3 probe hang path (D1-D3, N1)
  • #120 REC-017: faulthandler watchdog + spawn for ledger concurrency (recut of #96)
  • #121 REC-046: stop leaking recertia-neg-* temp dirs from sensitivity proofs
  • #122 REC-048: pytest-timeout floor 2.4.0 (nightly lowest-deps ResolutionImpossible) [draft]
  • #124 REC-047: rel3 probes clean up their temp dirs
  • #127 REC-049: raise the pytest floor to 9.0 (faulthandler_exit_on_timeout) [r2, supersedes #126]
  • #128 REC-050: exit-code test uses public typer.Exit [r2, supersedes #125]
  • #129 REC-053: declare click>=8.2 in the dev extra; exit-code test asserts stderr, not stdout
  • #141 REC-051: nightly runs the full suite on both dependency arms (v2, supersedes #123) [draft]
  • #149 REC-052: harden probe temp-dir cleanup and close probe pipes/files (r2, restack on e25ecfa)
  • #151 [REC-056b1] REL-3 R4: delete stubbed lock-identity helper, update probe T3 (#132) (r2, restack on 87bbc1a)
  • #161 REC-056a: cap telemetry deques and pending OIDC logins per client (#131)
  • #164 [REC-056b2] Un-skip REL-3 R4 probes I, L, M, M2, T1, T2 as typed RootBusy per ADR-0022 (#139)
  • #167 REC-056a: follow-up to #161 (untrusted-XFF warning wording, XFF cap-order docs) [r2, restack on 17943bf]
  • #168 REC-058 r3: root lock for API handles, retryable RootBusy, off-mode re-check, real-Windows lock (carries #166)
  • #169 REC-058 follow-up to #168: typed RootBusy for the Windows off-mode wait; pin mid-run RootBusy and the 2 s back-off
  • #170 [REC-065] Per-tenant root locking so tenants on one root do not exclude each other
  • #176 [REC-069] REC-058 follow-up to #169 (restack of #171 onto 33a88a4, r4): pin the fd close and non-busy mapping on the blocking path; api.lock CHANGELOG
  • #177 [REC-071] #170 review follow-ups: one-deadline test, backup lock-file match, tenant export skip, docstrings, ADR-0022 wording
  • #178 [REC-070] manual mode names the real import procedure instead of the missing migrate apply
  • #179 REC-057: raise psycopg floor to >=3.2.1
  • #180 nightly: add extras floors, pin script, persist-credentials, and alert job (REC-057/062 remaining)
  • #182 REC-064: overwrite with bounded wait on migrate=off path
  • #186 [REC-073] real-Windows migrate=off tests expect the bounded wait added in #182
  • #187 [REC-070] manual-mode advice: reopen with auto only once no older-release process uses the root
  • #188 [REC-075] Pin the migrate=off bound with a POSIX test; steady real-Windows bounds; fix stale CHANGELOG
  • #189 [REC-076] Restore the nightly CHANGELOG entries; drop an agent name from a workflow comment
  • #190 [REC-077] Tighten two root-lock test asserts; harden the manual-mode docs tests
  • #191 [REC-072] Follow-up to #177: pin every runs-root .tenant.lock position, make tenant export --dry-run match --execute, fix the lock wording
  • #192 [REC-078] Remove agent and person names from workflow comments
  • #193 [REC-079] Remove old review labels, pin the lock poll interval, fix changelog wording
  • #195 [REC-081] Drop leftover review tags and work-order ids from comments and docstrings
  • #196 [REC-060] Include ADR-0020 to ADR-0022 in docs/architecture2.md
  • #197 [REC-082] Drop remaining internal review tags from comments and docstrings
  • #198 [REC-083] Fix a test header and drop remaining internal review labels
  • #199 [REC-084] Rename review-tagged test names
  • #200 [REC-085] Rename single-letter-tag test names
  • #201 [REC-086] Replace ruling-phrase wording
  • #202 [REC-087] Remove internal wording from comments, docs and test labels
  • #203 [REC-088] Remove leftover bug-number wording from comments
  • #205 [REC-089] Remove reviewer provenance and finding ids from ADR-0022
  • #213 REC-063/REC-066: T3 history check; root-lock or documented exception for direct stores
  • #214 [REC-059] Add RootBusy class, exit-code and retryable-flag tests
  • #218 [REC-067] Narrow the ops-schema lock exception mapping, reuse the lock-ti...
Read more

0.3.0

0.3.0 Pre-release
Pre-release

Choose a tag to compare

@recertia recertia released this 09 Oct 01:22
d2104a8

ADR-0020 Store Receipts, status Proposed, P0 only (StoreReceipt, close_receipt, schema). Does not flip recertia backup or tabletop. Accept only after a counted soak week compares tar vs. receipt restore. P1–P5 not started.

PR #53: docs only. Cite Recuris (Yu et al., arXiv:2608.24876, 25 Aug 2026) as closest published sibling, and absorb four score-9 papers into docs/references.md. Confirm; do not reshape T3. No new node, no remaining-work row.

0.2.0

0.2.0 Pre-release
Pre-release

Choose a tag to compare

@recertia recertia released this 13 Sep 21:30

0.2.0 is still a preview. Same 15-node graph. What landed is measurement and operator surface, not GA.

  • Soak CLI: recertia soak record / status (empty weeks recorded, not counted)
  • Variance-aware lift, eval-only faithfulness, applicability gate, specificity lint
  • ADR-0016 interval retirement, ADR-0017 version-write budget
  • ADR-0018 systems hop telemetry (recertia systems; idle offload default off)
  • Trajectory import + distill CLI/HTTP — candidate only, never auto-promote
  • MEA sidecar default off; computer-use goldens eval-firewalled
  • arXiv miner (jobs run mine --arxiv-*)
  • OpenRouter honesty: unknown slugs are not vendor-exact
  • Fixes: Windows rss_bytes, pgvector soak image, architecture2 / Recuris a10

0.1.0 Initial Release

0.1.0 Initial Release Pre-release
Pre-release

Choose a tag to compare

@recertia recertia released this 17 Aug 04:22
0a0e91c
Aug 14 a5e947a Initial public release of Recertia 0.1.0 (~510 files, ~86k lines) Aug 14 5cbe656 README: project overview and usage Aug 14 659ea85 README: clarity and completeness Aug 15 0a0e91c README: minor tweak (1 line)

What shipped in 0.1.0
This is the first public preview — engineering through M0–M9 is on main, but it's not production-ready yet (operator GA gates still open).

Core system

Contracts-as-code (contracts/) with generated JSON Schema (schema/)
Graph runtime with plural memory, golden-gated promotion, and control-arm lift measurement
CLI (recertia) and optional FastAPI console (Pilot / Tower / Ops)
Container execution backend (Docker/Podman), plus --local-exec for dev
Seed skills (skills/) and golden evals (evals/)
Infrastructure

CI/CD (GitHub Actions), broad test suite, policy defaults
Architecture ADRs, specifications, compiled docs/architecture2.md
PolyForm Noncommercial license, SECURITY.md, CONTRIBUTING.md, AGENTS.md

Full Changelog: https://github.com/recertia/recertia/commits/Initial