Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/edda

crates/step-board/Cargo.toml

[package]
name = "step-board"
version = "0.2.0"
edition = "2021"
description = "The ONE app-agnostic PRODUCER registry behind a step bar: a process-wide `Board` of `StepRun`s that a producer publishes its transitions into (`begin`/`enter`/`complete_through`/`set_count`/`note`/`fail`/`finish`) and a pane reads back as a `facett_jobview::StepMeter`. `enter()` returns `Result<(), OrderFault>` and REFUSES a step that overtakes an unfinished predecessor — the check that matters when a run has more than one owner (dwarves' populate drives clone and warehouse-build from different threads), and that the forward-fill it replaces actively hid. NOT app-specific — korp's region cuts and dwarves' populate are only the reference producers; the board never names a phase. Built ON facett-jobview's `StepCell`/`StepPhase`/`StepMeter` rather than beside them, so a step's measured count rides along and there is exactly one spelling of Pending/Active/Done/Failed in the constellation."
license = "MIT OR Apache-2.0"
repository = "https://git.gunnar.rs/nordisk/edda"
keywords = ["progress", "steps", "producer", "job", "board"]
categories = ["development-tools"]
exclude = ["/.nornir/"]
# ── HELD 2026-08-04: cannot be published yet, and the reason is on the registry ──
# `StepCell` / `StepMeter` / `StepPhase` and `JobEntry::with_steps` do NOT exist in any
# PUBLISHED `facett-jobview`; the newest on crates.io is 0.1.13 and they land in 0.1.14.
# The path dep hides that completely — this workspace resolves the local facett checkout,
# which has them, so every green build here is green against code no consumer can get.
# MEASURED by the Gate-B /sparring rehearsal, which resolves from a registry:
#   error[E0432]: unresolved imports `facett_jobview::StepCell`, `…::StepMeter`, `…::StepPhase`
#   error[E0599]: no method named `with_steps` found for struct `JobEntry`
# LIFT THIS the moment facett 0.1.14 is live, and bump the `facett-jobview` requirement
# below to "0.1.14" in the same edit — a bare "0.1" would still let a consumer resolve
# 0.1.13 and reproduce exactly these two errors.
# publish = true (2026-08-23). The condition this note set is MET and then some:
# "LIFT THIS the moment facett 0.1.14 is live" — facett-jobview is at 0.1.17 on
# crates.io, and StepCell/StepMeter/StepPhase/with_steps are all in it.
# The requirement below is raised in the SAME edit, exactly as the note demands: a
# bare "0.1" would still let a consumer resolve 0.1.13 and reproduce the two errors
# quoted above.
publish = true

[dependencies]
# **The step VOCABULARY, not a copy of it.** `StepCell`/`StepPhase`/`StepMeter` are
# settled and shared; a registry that kept its own four-state enum and its own per-step
# struct would be a second spelling converted at the boundary — the twin LAW 5 forbids,
# and the exact place a bar starts disagreeing with the words beside it.
#
# THE COST, STATED: this is the first edda→facett edge, and it is not free. facett-jobview
# is an egui widget crate, so it drags `egui` + `facett-core` (and facett-core's `epaint`
# /`emath` chain) into anything that links this board — including producers that never
# paint. It also inverts the usual direction: facett consumes edda leaves
# (facett-core → nornir-testmatrix), and this is edda consuming facett back. No CRATE
# cycle results (`step-board` is downstream of `nornir-testmatrix`, not upstream), but the
# release cascade must now publish facett-jobview BEFORE this crate.
#
# The alternative was re-declaring the vocabulary here to keep edda dep-light, which is
# the one thing this crate exists to prevent.
facett-jobview = { version = "0.2", path = "../../../facett/facett-jobview" }
serde_json = "1"

[dev-dependencies]
# The tests assert the WIDGET vocabulary the board writes into (ProgressMeter,
# StepPhase) — the same crate the board depends on, named again so the test
# target may `use` it directly.
facett-jobview = { version = "0.2", path = "../../../facett/facett-jobview" }