Crosswake.ReleaseStatus (crosswake v0.2.3)

View Source

Reads Crosswake's release graph and reports local package-family release readiness.

This is intentionally repository-local by default. Pass live?: true to add best-effort public registry probes for Hex, Maven Central, and the iOS SwiftPM mirror.

Summary

Functions

Exit-code contract for mix crosswake.release.status and the release workflow scanner (script/check_release_workflow_integrity.exs).

Runs a live probe up to attempts times, returning the first REAL answer.

Functions

aggregate_status(checks)

build(opts \\ [])

@spec build(keyword()) :: map()

exit_code(arg1)

@spec exit_code(atom() | map()) :: 0 | 1 | 3

Exit-code contract for mix crosswake.release.status and the release workflow scanner (script/check_release_workflow_integrity.exs).

CodeMeaning
0clean — every check ran and passed (:ok or :warning)
1ran and found a defect (:error)
3could not verify — one or more checks could not run (:unverifiable)

2 is deliberately reserved to its existing meanings elsewhere in this repo (defect-found in script/verify_generated_ios_shell.sh, usage error in script/check_required_checks_registered.sh, shells-behind in lib/mix/tasks/crosswake.shell.status.ex) and is never returned here. :warning maps to 0.

probe_with_retry(fun, attempts \\ 3, sleep_ms \\ 200)

@spec probe_with_retry((-> map()), pos_integer(), non_neg_integer()) :: map()

Runs a live probe up to attempts times, returning the first REAL answer.

A real answer is anything other than :unavailable — :ok and :missing are both definite results from the registry, so the first one short-circuits immediately. Only when every attempt fails to get an answer is the result classified :unavailable.

This is what makes the release.live_registry_presence / release.live_registry_unverifiable split honest: an :unavailable that survived three attempts is a real unknown, not a single network hiccup misreported as a missing release.

It lives on the REAL probes (git_ref_live_probe/2, http_live_probe/2), not between build/1 and the http_probe:/git_ref_probe: injection seam — a fixture-driven test must not retry its own fakes three times.

render(status)

@spec render(map()) :: String.t()