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

nordisk/dwarves

crates/dwarves-embed/proto/mimir_release.proto

// mimir_release.proto — the forge's 🚀 MÍMIR RELEASE plan (2026-10-15).
//
// The release order, each repo's dependencies, the convergence and what is
// affected since the last release — read from Mímir (nornir's `Mimir` dependency
// verbs: BuildOrder · DepsOf · ChangedSinceLastRelease · AffectedByChange) BY THE
// FORGE, on its jera queue. The UI never scans a checkout and never dials nornir:
// it asks here, and the forge answers AT ONCE — the kept plan, or the job it put
// on the queue (`queued` / `running`). The UI asks again (each a short call) until
// the plan is there.
//
// The SAME file is compiled by the forge (`crates/dwarves`, server + client) and by
// the UI's thin client (`crates/dwarves-embed`, client): a test keeps the copies
// byte-identical.
syntax = "proto3";
package dwarf.v1;

service MimirRelease {
  rpc Plan (MimirReleaseAsk) returns (MimirReleaseAnswer);
}

message MimirReleaseAsk {
  // The workspace whose release is planned (nornir's workspace name).
  string workspace = 1;
  // Compute it again even when a plan is kept (the kept one still comes back,
  // marked by its age, while the new one is on the queue).
  bool fresh = 2;
}

message MimirReleaseAnswer {
  // `done` (plan_json is the plan) · `queued` / `running` (job_id names the jera
  // job; plan_json may carry the last kept plan) · `failed` (note says why) ·
  // `refused` (the question cannot be asked: note says why).
  string state = 1;
  string job_id = 2;
  string note = 3;
  // The plan as JSON (see dwarves::mimir_release::assemble), or empty.
  string plan_json = 4;
  // How long the job has waited / run (queued / running), in ms.
  uint64 waited_ms = 5;
  // How old the plan in plan_json is, in ms.
  uint64 age_ms = 6;
}