Threadline 1.x stability policy

Copy Markdown View Source

What can change in a 1.x upgrade?

Threadline's 1.x Elixir API follows Hex semantic versioning. A deprecated public function remains a functioning, fully specced delegate throughout 1.x; removal will happen no earlier than 2.0. Read each deprecation notice and the CHANGELOG.md before upgrading.

The database contract is additive across 1.x: Threadline may add tables, columns, and indexes, but does not remove or rename them. Generated capture trigger-function names and the transaction-local threadline.actor_ref setting remain stable. A 1.x minor may require trigger regeneration only for a security- or correctness-critical fix; the release notes will call out that requirement. See the upgrade path, lib/threadline/capture/primary_key_sql.ex, and test/threadline/capture/trigger_pk_shapes_test.exs for the migration and key-shape evidence.

The documented threadline_operator_surface/2 router macro, its documented options, and its documented mount routes are public integration contracts. Rendered HTML, CSS, and LiveView internals are not public API. See the operator-surface contract and its test/threadline/operator_surface/router_test.exs coverage.

For the 0.12.x line, security and correctness fixes are backported for six months after the 0.12.0 release. After that window, upgrade to a supported line for those fixes.

Typespec changes

Public option @type names are stable and option lists are additive. A spec change that does not change runtime behavior may ship in a minor or patch release, with a CHANGELOG.md note. If a narrower type can cause Dialyzer warnings for existing callers, the release notes will call that out. This policy keeps caller-facing option types dependable while allowing compatible additions and runtime-neutral improvements within 1.x.

Operator implementation boundary

The macro, its documented options, and the documented routes are the supported mount surface. HTML structure, CSS selectors, and LiveView implementation details may change within 1.x. Hosts should integrate through the macro and follow the operator guide, not depend on rendered markup.

Next steps