Home / Input Output / cardano-parts
May 11, 11-12 PM (0)
May 11, 12-1 PM (0)
May 11, 1-2 PM (0)
May 11, 2-3 PM (0)
May 11, 3-4 PM (0)
May 11, 4-5 PM (0)
May 11, 5-6 PM (0)
May 11, 6-7 PM (0)
May 11, 7-8 PM (0)
May 11, 8-9 PM (0)
May 11, 9-10 PM (0)
May 11, 10-11 PM (0)
May 11, 11-12 AM (0)
May 12, 12-1 AM (0)
May 12, 1-2 AM (0)
May 12, 2-3 AM (0)
May 12, 3-4 AM (0)
May 12, 4-5 AM (0)
May 12, 5-6 AM (0)
May 12, 6-7 AM (0)
May 12, 7-8 AM (0)
May 12, 8-9 AM (0)
May 12, 9-10 AM (0)
May 12, 10-11 AM (0)
May 12, 11-12 PM (0)
May 12, 12-1 PM (0)
May 12, 1-2 PM (0)
May 12, 2-3 PM (0)
May 12, 3-4 PM (0)
May 12, 4-5 PM (0)
May 12, 5-6 PM (0)
May 12, 6-7 PM (0)
May 12, 7-8 PM (0)
May 12, 8-9 PM (0)
May 12, 9-10 PM (0)
May 12, 10-11 PM (0)
May 12, 11-12 AM (0)
May 13, 12-1 AM (0)
May 13, 1-2 AM (0)
May 13, 2-3 AM (0)
May 13, 3-4 AM (0)
May 13, 4-5 AM (0)
May 13, 5-6 AM (0)
May 13, 6-7 AM (0)
May 13, 7-8 AM (0)
May 13, 8-9 AM (0)
May 13, 9-10 AM (0)
May 13, 10-11 AM (0)
May 13, 11-12 PM (0)
May 13, 12-1 PM (0)
May 13, 1-2 PM (0)
May 13, 2-3 PM (3)
May 13, 3-4 PM (0)
May 13, 4-5 PM (0)
May 13, 5-6 PM (0)
May 13, 6-7 PM (0)
May 13, 7-8 PM (0)
May 13, 8-9 PM (0)
May 13, 9-10 PM (0)
May 13, 10-11 PM (0)
May 13, 11-12 AM (0)
May 14, 12-1 AM (0)
May 14, 1-2 AM (0)
May 14, 2-3 AM (1)
May 14, 3-4 AM (0)
May 14, 4-5 AM (0)
May 14, 5-6 AM (0)
May 14, 6-7 AM (0)
May 14, 7-8 AM (0)
May 14, 8-9 AM (0)
May 14, 9-10 AM (0)
May 14, 10-11 AM (0)
May 14, 11-12 PM (0)
May 14, 12-1 PM (0)
May 14, 1-2 PM (0)
May 14, 2-3 PM (0)
May 14, 3-4 PM (0)
May 14, 4-5 PM (1)
May 14, 5-6 PM (2)
May 14, 6-7 PM (0)
May 14, 7-8 PM (0)
May 14, 8-9 PM (0)
May 14, 9-10 PM (3)
May 14, 10-11 PM (1)
May 14, 11-12 AM (1)
May 15, 12-1 AM (1)
May 15, 1-2 AM (0)
May 15, 2-3 AM (0)
May 15, 3-4 AM (0)
May 15, 4-5 AM (0)
May 15, 5-6 AM (0)
May 15, 6-7 AM (0)
May 15, 7-8 AM (0)
May 15, 8-9 AM (0)
May 15, 9-10 AM (0)
May 15, 10-11 AM (0)
May 15, 11-12 PM (0)
May 15, 12-1 PM (0)
May 15, 1-2 PM (0)
May 15, 2-3 PM (0)
May 15, 3-4 PM (0)
May 15, 4-5 PM (1)
May 15, 5-6 PM (0)
May 15, 6-7 PM (0)
May 15, 7-8 PM (0)
May 15, 8-9 PM (0)
May 15, 9-10 PM (3)
May 15, 10-11 PM (2)
May 15, 11-12 AM (0)
May 16, 12-1 AM (0)
May 16, 1-2 AM (0)
May 16, 2-3 AM (0)
May 16, 3-4 AM (0)
May 16, 4-5 AM (0)
May 16, 5-6 AM (0)
May 16, 6-7 AM (0)
May 16, 7-8 AM (0)
May 16, 8-9 AM (0)
May 16, 9-10 AM (0)
May 16, 10-11 AM (0)
May 16, 11-12 PM (0)
May 16, 12-1 PM (0)
May 16, 1-2 PM (0)
May 16, 2-3 PM (0)
May 16, 3-4 PM (0)
May 16, 4-5 PM (0)
May 16, 5-6 PM (0)
May 16, 6-7 PM (0)
May 16, 7-8 PM (0)
May 16, 8-9 PM (0)
May 16, 9-10 PM (0)
May 16, 10-11 PM (0)
May 16, 11-12 AM (0)
May 17, 12-1 AM (0)
May 17, 1-2 AM (0)
May 17, 2-3 AM (0)
May 17, 3-4 AM (0)
May 17, 4-5 AM (0)
May 17, 5-6 AM (0)
May 17, 6-7 AM (0)
May 17, 7-8 AM (0)
May 17, 8-9 AM (0)
May 17, 9-10 AM (0)
May 17, 10-11 AM (0)
May 17, 11-12 PM (0)
May 17, 12-1 PM (0)
May 17, 1-2 PM (0)
May 17, 2-3 PM (0)
May 17, 3-4 PM (0)
May 17, 4-5 PM (0)
May 17, 5-6 PM (0)
May 17, 6-7 PM (0)
May 17, 7-8 PM (0)
May 17, 8-9 PM (0)
May 17, 9-10 PM (0)
May 17, 10-11 PM (0)
May 17, 11-12 AM (0)
May 18, 12-1 AM (0)
May 18, 1-2 AM (0)
May 18, 2-3 AM (0)
May 18, 3-4 AM (0)
May 18, 4-5 AM (0)
May 18, 5-6 AM (0)
May 18, 6-7 AM (0)
May 18, 7-8 AM (0)
May 18, 8-9 AM (0)
May 18, 9-10 AM (0)
May 18, 10-11 AM (0)
May 18, 11-12 PM (0)
19 commits this week May 11, 2026 - May 18, 2026
pre-push: restrict hook to lint and treefmt checks
The dynamic discovery via builtins.attrNames config.checks bakes all
check names into the script at eval time.  When downstream repos
consume the pre-push package from cardano-parts' output, the baked
names include perSystem-only checks (e.g. cardano-committee-monitor-
fixture) that don't exist in the consumer's flake, causing the hook
to fail.

Hardcode the two checks the hook should always run — lint and treefmt —
so the fixture check remains a CI/flake-check concern only.
opentofu: bake strongdm/sdm into the wrapper
Adds the StrongDM Terraform provider (https://github.com/strongdm/terraform-provider-sdm) to the opentofu.withPlugins list so consumer flakes that use cardano-parts' ops dev shell can declare `sdm_resource` / `sdm_role` / etc. without the runtime hitting registry.opentofu.org on every `tofu init`.

Same pattern as the existing entries (loafoe/ssh, grafana/grafana, etc.) — the provider gets vendored into libexec/terraform-providers at build time, so it works in network-restricted runner environments (self-hosted runners, sandboxed nix shells, etc.).

Concrete use case: shieldedtech/midnight-performance#123 ports the StrongDM resource pattern from shielded-iac-modules/app/midnight into perfnet's terranix-driven tofu config. CI fails on the self-hosted beast runner because the wrapped opentofu only has aws/null/local/tls/etc. and the registry is unreachable for new providers.
tmpl: add committee-monitor alerts and README section
Adds the centrally-rendered alert rules that consume the cardano_cc_*
series published by profile-cardano-committee-monitor, plus a README
section covering enablement, prerequisites, threshold tuning, and the
collector-cadence/staleness coupling.

Alert rules (auto-discovered via parseDir on grafana/alerts):
  - cardano_cc_term_expiring (warning, 30d default)
  - cardano_cc_term_expiring_urgent (page, 7d default)
  - cardano_cc_hot_key_unauthorized / _resigned (page)
  - cardano_cc_member_expired (page)
  - cardano_cc_member_unrecognized (page)
  - cardano_cc_to_be_expired_next_epoch (page, authoritative ledger signal)
  - cardano_cc_no_members (page)
  - cardano_cc_metrics_stale (page, 5400s, paired with hourly cadence)
  - cardano_cc_collector_absent (page)

warnDays / pageDays are constants in the alert file (per-environment
tuning via duplicated rules with environment=~"..." selectors). The
file is part of the project template, so downstream repos own it after
template init.
nixosModule committee-monitor: add constitutional-committee state metrics collector
New profile profile-cardano-committee-monitor publishes per-member
constitutional-committee state to a prometheus textfile-collector .prom
file on an hourly systemd timer. The alloy node-exporter picks the file
up via the textfileCollectorDirectory wiring added in the previous
commit.

Metrics (all carry environment=<env>):
  - cardano_cc_member_epochs_until_expiration  (per cold_credential)
  - cardano_cc_member_seconds_until_expiration (per cold_credential)
  - cardano_cc_member_hot_cred_status          (info-gauge with status label)
  - cardano_cc_member_state                    (info-gauge with state label)
  - cardano_cc_member_next_epoch_change        (info-gauge with change label)
  - cardano_cc_current_epoch
  - cardano_cc_member_count
  - cardano_cc_seconds_per_epoch

The collector script lives in flakeModules/lib/ as a callPackage-able
writeShellApplication so the production unit and the fixture check share
the exact same text; the check swaps cardano-cli for a JSON-fixture shim
and diffs the output against a golden .prom file.

Module asserts on services.alloy.textfileCollectorDirectory != null and
services.cardano-node.shareNodeSocket = true. The cardano-node socket is
read via a SupplementaryGroups=[cardano-node node-textfile] hardened
DynamicUser=true oneshot; output is atomically published via mv on the
same filesystem. Cadence is hourly + RandomizedDelaySec=600s; the
matching staleness threshold lives in the alerts file added in the next
commit.

Wires in via flake-parts auto-discovery (recursiveImports); no
flake.nix or flakeModules/lib.nix changes needed.
nixosModule alloy: add textfile-collector and extra keep-regex options
Adds two opt-in options consumed by sibling profiles that publish metrics via prometheus textfile collector.

services.alloy.textfileCollectorDirectory (nullOr str, default null):
  - When non-null: enables the node-exporter "textfile" collector,
    emits the textfile { directory = ... } HCL block, creates a
    node-textfile group, and tmpfiles-rules the directory mode 2775
    (setgid so multiple publishers can share it).
  - When null: behaviour is identical to before.

services.alloy.extraPrometheusRelabelNodeKeepRegex (listOf str, default []):
  - Additional alternation arms appended to prometheusRelabelNodeKeepRegex.
    Lets sibling profiles whitelist their textfile metric series without
    a recursive mkForce on the base option.

Also extends the base prometheusRelabelNodeKeepRegex default with
node_textfile_(mtime_seconds|scrape_error) so textfile-collector
self-metrics are scrapeable (un-breaks NodeTextFileCollectorScrapeError
in templates/.../alerts/node-exporter.nix-import and enables a future
metrics-stale alert keyed on node_textfile_mtime_seconds).