mod report#

module report#

Operator-facing reports from a solved stack lock: ordered build list and baseline-vs-solved markdown stack diff.

Functions

fn classify_stack_diff(baseline: &StackLock, solved: &StackLock) -> Vec<PackageChange>#

Classify every logical package (by name) between baseline and solved locks.

Result is sorted by package name for stable markdown.

fn format_build_list(lock: &StackLock, dep_map: &HashMap<String, Vec<String>>) -> String#

Format a plain-text build list: one easyconfig path per line, deps first.

fn format_stack_diff_markdown(baseline: &StackLock, solved: &StackLock) -> String#

Human-reviewable markdown comparing baseline lock to solved lock.

Pasteable into a pull request: per-package status, versions, and easyconfig paths on each side that exists.

fn ordered_build_paths(lock: &StackLock, dep_map: &HashMap<String, Vec<String>>) -> Vec<String>#

Return co-selected easyconfig paths in dependency order (deps before apps).

Edges come from dep_map (package name → co-stack dependency names). Only dependencies that are also co-selected participate. Tie-break is stable by package name so the order is deterministic.

fn ordered_packages<'a>(lock: &'a StackLock, dep_map: &HashMap<String, Vec<String>>) -> Vec<&'a LockPackage>#

Packages in install order (same topology as ordered_build_paths).

Enums

enum PackageChangeKind#

Classification of one logical package between baseline and solved locks.

Unchanged#
Added#
Removed#
VersionBumped#

Implementations

impl PackageChangeKind#

Functions

fn as_str(self) -> &'static str#

Structs and Unions

struct PackageChange#

One logical package’s baseline-vs-solved change for human review.

name: String#
kind: PackageChangeKind#
baseline_version: Option<String>#
solved_version: Option<String>#
baseline_easyconfig_path: Option<String>#
solved_easyconfig_path: Option<String>#