[Unreleased]
[0.5.0] - 2026-05-08
Threadline 0.5.0 is the integration-breadth release: the package now ships a narrower and more honest support matrix, a first-party Sigra/Phoenix reference path, canonical admin and support-read-only operator-surface mount recipes, an explicit threadline_web extraction-readiness scorecard with a documented stay-in-tree decision, and a repaired shared authorization/scope contract that keeps auth and scoping host-owned across timeline, actor, transaction, and export flows.
Added
- Upgrade-path guide at
guides/upgrade-path.md(Phase 68) — canonical lifecycle policy for the optional Phoenix/LiveView/HTML/PubSub surface. It distinguishescapture-onlyfromsurface-mounted, documents the supported compatibility matrix from declared deps + current lock resolution + CI coverage, and locks the surface-only deprecation/removal overlap policy in one place. - Integration breadth guide at
guides/integration-contracts.md(Phase 69) — canonical host-integration contract for actor extraction, additive audit context, optional dependency posture, operator-surface composition, and fallback CLI workflows. - Support-matrix closeout (Phase 69) — the project now names only the three proven lanes
capture-only,phoenix-surface, andsigra-reference, and the compile-without-optional / example / doc-contract proof chain is locked to those claims. - Sigra/Phoenix reference refresh (Phase 70) — the first-party Sigra integration path and example app were refreshed to the current supported lines while keeping Sigra a soft dependency.
- Canonical access-tier runbooks (Phases 71 and 73) — docs, example code, and tests now prove one shared host-owned
authorize_fncontract, one host-ownedscope_query_fnseam, and a real support-read-onlyexports: false/scoped-query story across the operator surface. - Packaging Boundary Scorecard (Phase 72) —
guides/upgrade-path.mdnow records the explicitthreadline_webextraction-readiness rubric and the current answer: stay in-tree for now. - Coverage dashboard at
/audit/coverage(Phase 66) — polled three-bucket coverage view with a surface-header pill on every operator-surface LV.?schema=NAMEURL param for multi-schema adopters; manual Refresh affordance with cancel-and-reschedule timer semantics; on-poll-error UX that keeps the last-good snapshot and ALWAYS reschedules. mix threadline.health.coverageparity Mix task with--jsonand--schema=NAMEflags. Viewer-only — always exits 0; the CI gate remainsmix threadline.verify_coverage.- Policy redaction drift viewer at
/audit/policy/redaction(Phase 67) — read-only configured-vs-deployed redaction reconciliation with the three operator-safe statesConfig matches deployed,Drift detected, andCould not introspect. The surface never shows sample values; it exposes only column names and placeholder metadata, and drift/introspection failures instruct operators to rerunmix threadline.gen.triggersand apply the migration. mix threadline.policy.showparity Mix task with--json(Phase 67). Default output prints one summary line plus an alignedTABLE / STATUS / CONFIG / DEPLOYED / HINTtable;--jsonemits the same stable state taxonomy asconfig_matches_deployed,drift_detected, andcould_not_introspect. Viewer-only — drift does not exit non-zero by itself.Threadline.Health.trigger_coverage/1:schemaopt (default"public"). Both inner SQL queries are now parameterized; thepg_trigger/pg_classquery gains apg_namespacejoin so cross-schema results no longer leak into the covered set. Programmatic callers are responsible for sanitizing:schema; surfaces that take untrusted input validate at the edge.Three-bucket return shape on
Threadline.Health.trigger_coverage/1—[{:covered | :uncovered | :expected_uncovered, name}]. The third bucket is hardcoded to["schema_migrations"]plusconfig :threadline, :health, expected_uncovered_tables: [...], with:audit_anywayremoving entries. Existing pattern-match callsites (Continuity.assert_capture_ready!/2,TimelineLivedatalist) remain unchanged — the third tuple variant is purely additive.Threadline.Health.Policy.validate!/1— pure-stdlib config validator mirroringThreadline.Capture.RedactionPolicy.validate!/1. Validate at boot to fail loud on bad config.[:threadline, :health, :checked]event metadata gainsexpected_uncoveredmeasurement key (additive). Old subscribers reading onlycovered/uncoveredkeep working unchanged.[:threadline, :health, :checked, :error]sibling event for polled coverage check failures.mix threadline.verify_coverage --schema=NAMEadditive flag with the same edge validation contract as the new Mix task. Default behavior unchanged.
Changed
- Release metadata — install snippets now target
{:threadline, "~> 0.5"}, ExDoc names the operator surfaceOptional In-Tree, and the release/audit artifacts record v1.19 as the integration-breadth closeout milestone. - Operator-surface auth/scoping contract — the example app no longer relies on a socket-only auth bypass, and timeline, actor, transaction, and export flows all consume the same host-owned scope seam.
Threadline.Verify.CoveragePolicy.violations/2treats{:expected_uncovered, _}as covered-equivalent for tables not in the adopter's:expected_tables. Existing semantics preserved for tables IN:expected_tables.
[0.4.0] - 2026-05-06
Threadline 0.4.0 is the operator-surface foundation release: an opt-in web UI ships behind optional Phoenix/LiveView/HTML/PubSub deps so capture-only adopters keep zero new transitive bloat, the timeline / export query and Mix-task surface gains a :correlation_id filter that walks audit_actions.correlation_id via the action linkage, and exports learn an opt-in action-metadata pair (JSON action object, CSV include_action_metadata: true) so incident-response tooling can correlate rows back to the action that produced them — all without changing the default column order or breaking pre-0.4 callers.
Added
- Operator Surface — introduces an opt-in web UI via
Threadline.OperatorSurface.Router.phoenix,phoenix_live_view,phoenix_html, andphoenix_pubsubare now declared asoptional: truedependencies, meaning zero bloat for capture-only adopters. Hosts that want the UI must add these dependencies to theirmix.exsand use thethreadline_operator_surfacemount macro in their router. examples/threadline_phoenix—audit_transaction_idonPOST /api/postsandGET /api/audit_transactions/:id/changesreturning ordered changes withchange_diffmaps per row (composition demo; add auth in production).guides/domain-reference.mddocuments the pattern under COMP-EXAMPLE-INCIDENT-JSON.:correlation_idtimeline / export filter — optional keyword onThreadline.Query.timeline/2,timeline_query/1,export_changes_query/1, and export entrypoints. Values are trimmed; empty after trim,nil, non-binary, or longer than 256 UTF-8 bytes raiseArgumentError. When set, onlyaudit_changeswhose transaction has a matchingaudit_actions.correlation_id(viaaction_id) are returned (inner join; omit the key for previous behavior). SeeThreadline.Querymoduledoc for full rules.- Export JSON
actionobject — each change may include"action": {"id", "correlation_id"}when the transaction is linked to anaudit_actionsrow. - Export CSV
include_action_metadata: true— opt-in trailing columnscorrelation_idandaction_id; default CSV column order is unchanged. guides/adoption-pilot-backlog.md— matrix aligned to the production checklist for host pilots, plus distribution preflight and prioritized issue rows.- Telemetry (operator reference) —
[:threadline, …]event table inguides/domain-reference.md, linked fromguides/production-checklist.mdobservability section.
Changed
- README — Documentation list includes the adoption pilot backlog; ExDoc extras include the new guide.
[0.3.0] - 2026-05-05
Threadline 0.3.0 is the drop-in production adoption release for Phoenix SaaS teams: the release packages the first-hour SaaS onboarding path, Sigra-ready actor capture, operator incident guidance, and published capture baselines into one taggable Hex surface.
Added
- SaaS onboarding route —
guides/getting-started-saas.mdships as the first-hour Phoenix SaaS path and is now promoted from the package front door. - Sigra integration route —
guides/integrations/sigra.mdships as the best-supported auth bridge for Sigra-backed Phoenix hosts and is surfaced separately in ExDoc navigation. - Published capture baselines — the cold-single-table benchmark now anchors the release story with
insertat4.87 KIPS /205.13 µs,updateat4.30 KIPS /232.49 µs, anddeleteat7.61 KIPS /131.39 µs. - Release-surface contract —
test/threadline/release_artifact_contract_test.exslocks package files, ExDoc extras/module grouping, guide presence on disk, and release-only README / maintainer literals.
Changed
- README install and routing — the install snippet now targets
{:threadline, "~> 0.3"}and sends new adopters first to the SaaS quickstart and Sigra guide, with performance and incident docs one step deeper. - ExDoc information architecture —
guides/integrations/sigra.mdnow matches anIntegrationsextras group before the broader reference bucket, andThreadline.Integrations.Sigranow appears under a new pluralIntegrationsmodule group while Plug / Job / Health / Continuity / Telemetry remain under the singularIntegrationgroup. - Release pre-flight —
mix verify.releasenow validates the exact taggable tree through release metadata checks, pure file-read release contracts,MIX_ENV=dev mix docs, andmix hex.build. - Maintainer publish runbook —
CONTRIBUTING.mdnow documents themix verify.releasepre-flight and themainCI wait before taggingv0.3.0.
Deprecated
- No runtime API is deprecated in 0.3.0. Older install snippets using
{:threadline, "~> 0.2"}should be treated as stale documentation, not a supported release target.
Breaking
- No breaking runtime, dependency, config, or schema changes are introduced in 0.3.0.
Upgrade from 0.2.x
- Dependencies: no runtime dependency changes are required to adopt 0.3.0.
- Config changes: none.
- Migration steps: none beyond bumping the dependency and re-running your normal dependency fetch/docs sync flow.
- Sigra adapter: use
Threadline.Integrations.Sigra.actor_ref_from_conn/1as theThreadline.Plugactor_fnwhen your host already authenticates requests with Sigra.
[0.2.0] - 2026-04-23
Added
- Production checklist —
guides/production-checklist.mdfor first-week production review (capture, redaction, retention, export, observability, brownfield). Threadline.Query.timeline_repo!/2— resolves:repofrom filters or opts with clearArgumentErrormessages for timeline and export callers.- ExDoc —
guides/production-checklist.mdin extras;Threadline.RetentionandThreadline.Retention.Policylisted under Core API module groups.
Changed
- Timeline filter errors —
validate_timeline_filters!/1messages now point at allowed keys andThreadline.Export. - Validation order —
timeline/2and export entrypoints validate filter keys before resolving:repo, so unknown keys surface before a missing-repo error.
Release notes (capabilities since 0.1.0)
This minor release documents and packages capabilities shipped across the v1.1–v1.3 planning cycles that were not fully reflected in the 0.1.0 changelog entry:
- Before-values — optional
changed_fromon UPDATE when triggers are generated with--store-changed-from;Threadline.history/3loads the column when present. - Verify coverage & doc contracts —
mix threadline.verify_coverage, CIverify.threadline/verify.doc_contract, README fixture contracts. - Brownfield continuity —
Threadline.Continuity,mix threadline.continuity,guides/brownfield-continuity.md. - Redaction at capture —
config :threadline, :trigger_capture, per-tableexclude/mask, codegen validation. - Retention —
Threadline.Retention.Policy,Threadline.Retention.purge/1,mix threadline.retention.purge. - Export —
Threadline.Export,Threadline.export_csv/2,Threadline.export_json/2,mix threadline.export, shared timeline filter validation.
[0.1.0] - 2026-04-23
Added
Threadlinecore API plusThreadline.Semantics.ActorRefandThreadline.Semantics.AuditContextfor attributing writes to actors in audit context.Threadline.Plugfor resolvingActorReffromPlug.Conn, plus integration modulesThreadline.Job,Threadline.Health, andThreadline.Telemetry.Threadline.Semantics.AuditActionandThreadline.Captureschemas (AuditTransaction,AuditChange) for PostgreSQL trigger-backed row-change capture.- Mix tasks
Mix.Tasks.Threadline.InstallandMix.Tasks.Threadline.Gen.Triggersto generate migrations and table-specific audit triggers.