9 Commits

Author SHA1 Message Date
Oleks ae74db435a Add versioned --json sizing block and on-demand CI window to --provision (oleks/nix-estimator#25)
--json now emits a stable sizing:{version:1,arch,nodes,cores,ram_gb,est_makespan_min}
block reusing provision.arch_for_system + estimate.peak_ram_gb_per_node. render_ephemeral_builders
now derives requirements.maxDuration + parking + policy from est_makespan_min for class ci.
2026-07-12 20:41:50 +03:00
Oleks 24ad63f600 style: auto-format from pre-push hooks 2026-07-08 22:15:25 +03:00
Oleks 3e6effd437 cli: wire fetch stats, --assume-cache, --default-min, calibrate (#20/#21/#22/#23)
- #20 relabel work T1 line (1 node, serial)
- #21 surface fixed-output fetches + CPU-bound peak; json fetch fields
- #22 --assume-cache upstream-substitutable filter (works with --cold)
- #23 --default-min knob + calibrate subcommand
2026-07-08 22:14:33 +03:00
Oleks a967c2aec3 provision: size ramGb from modeled peak per-node RAM (#19)
The --provision renderer defaulted ramGb to 2 GiB/core. Since #15 the
scheduler tracks per-derivation RAM, so compute the peak concurrent RAM on
the busiest node of the recommended shape (peak_ram_gb_per_node) and feed it
into each EphemeralBuilder's requirements.ramGb. Explicit --node-ram-gb still
overrides; a nothing-to-build closure falls back to the per-core default.
2026-07-08 20:51:25 +03:00
Oleks 9553d3263d provision: reconcile EphemeralBuilder renderer with real CRD (#14)
Emit N documents (one per node; no replica field) using the real
arbitrage.oleks.space/v1alpha1 schema: top-level class + requirements
{arch,cores,ramGb}, namespace builder-arbitrage, class label. Rename
public API to render_ephemeral_builders; wire --node-ram-gb into ramGb.
2026-07-08 19:59:24 +03:00
Oleks 837b885b87 style: auto-format from pre-push hooks 2026-07-08 17:46:08 +03:00
Oleks 5f1a75fb12 tests+docs: cover new CLI surfaces; document flags + mine subcommand (#12-#16)
- test_cli.py: --max-jobs/--node-ram-gb accepted and affect output, --timeline
  renders + carries JSON assignments, --provision emits YAML (stdout) with
  report on stderr, mine subcommand writes JSON (stubbed runner), plain
  estimate back-compat.
- README: usage for --max-jobs/--node-ram-gb/--timeline/--provision + a mining
  section; refreshed Status/roadmap and layout.
2026-07-08 17:41:46 +03:00
Oleks b8fe19e3f2 style: auto-format from pre-push hooks 2026-07-08 16:30:48 +03:00
Oleks 52fc3e1ecf estimate: normalize node/core grids to ascending, unique (#11)
_recommend assumes sorted, deduped grids (core_grid[-1] = biggest, knee
sweeps run low->high). The CLI parsed --nodes/--cores in raw order, so
e.g. --cores 32,8,16 yielded nonsense. Sort+dedupe in cli.py and reject
non-positive/non-integer values; also normalize defensively inside
estimate() so the function is correct for any caller. Add estimate/cli
tests.
2026-07-08 16:25:23 +03:00