Stabilize packaged release build graph
This commit is contained in:
parent
e9465c1120
commit
fe6bf006d3
5 changed files with 138 additions and 47 deletions
|
|
@ -480,44 +480,29 @@ fn build_required_release_siblings(
|
|||
target_dir.join(target).join("release").join(file_name),
|
||||
);
|
||||
}
|
||||
let mut command = std::process::Command::new(cargo);
|
||||
command
|
||||
.arg("build")
|
||||
.arg("--release")
|
||||
.arg("--manifest-path")
|
||||
.arg(&manifest)
|
||||
.arg("--target-dir")
|
||||
.arg(&target_dir)
|
||||
.arg("--target")
|
||||
.arg(target)
|
||||
.arg("--locked")
|
||||
.arg("--bins");
|
||||
let mut command = release_build_command(cargo, &manifest, &target_dir, target, &required)?;
|
||||
let status = command
|
||||
.status()
|
||||
.context("failed to start Epiphany release bundle build")?;
|
||||
if !status.success() {
|
||||
bail!("Epiphany release bundle build failed");
|
||||
}
|
||||
let coordinator_status = std::process::Command::new(cargo)
|
||||
.arg("build")
|
||||
.arg("--release")
|
||||
.arg("--manifest-path")
|
||||
.arg(&manifest)
|
||||
.arg("--target-dir")
|
||||
.arg(&target_dir)
|
||||
.arg("--target")
|
||||
.arg(target)
|
||||
.arg("--locked")
|
||||
.arg("--features")
|
||||
.arg("coordinator-runtime")
|
||||
.arg("--bin")
|
||||
.arg("epiphany-mvp-coordinator")
|
||||
.status()
|
||||
.context("failed to start feature-gated coordinator release build")?;
|
||||
if !coordinator_status.success() {
|
||||
bail!("feature-gated coordinator release build failed");
|
||||
}
|
||||
let state_steward_status = std::process::Command::new(cargo)
|
||||
Ok(BuiltReleaseSiblings {
|
||||
binaries: outputs,
|
||||
_graph_lock: graph_lock,
|
||||
})
|
||||
}
|
||||
|
||||
fn release_build_command(
|
||||
cargo: &std::ffi::OsStr,
|
||||
manifest: &Path,
|
||||
target_dir: &Path,
|
||||
target: &str,
|
||||
required: &[(&'static str, String)],
|
||||
) -> Result<std::process::Command> {
|
||||
let mut command = std::process::Command::new(cargo);
|
||||
command
|
||||
.env("CARGO_INCREMENTAL", "0")
|
||||
.arg("build")
|
||||
.arg("--release")
|
||||
.arg("--manifest-path")
|
||||
|
|
@ -528,18 +513,19 @@ fn build_required_release_siblings(
|
|||
.arg(target)
|
||||
.arg("--locked")
|
||||
.arg("--package")
|
||||
.arg("epiphany-release-bundle")
|
||||
.arg("--package")
|
||||
.arg("epiphany-core")
|
||||
.arg("--bin")
|
||||
.arg("epiphany-state")
|
||||
.status()
|
||||
.context("failed to start state-steward release build")?;
|
||||
if !state_steward_status.success() {
|
||||
bail!("state-steward release build failed");
|
||||
.arg("--features")
|
||||
.arg("epiphany-release-bundle/coordinator-runtime");
|
||||
for (_, file_name) in required {
|
||||
let binary_name = Path::new(file_name)
|
||||
.file_stem()
|
||||
.and_then(std::ffi::OsStr::to_str)
|
||||
.with_context(|| format!("packaged binary name is invalid: {file_name}"))?;
|
||||
command.arg("--bin").arg(binary_name);
|
||||
}
|
||||
Ok(BuiltReleaseSiblings {
|
||||
binaries: outputs,
|
||||
_graph_lock: graph_lock,
|
||||
})
|
||||
Ok(command)
|
||||
}
|
||||
|
||||
fn verify_release_bundle_lock(repo: &Path, cargo: &std::ffi::OsStr) -> Result<()> {
|
||||
|
|
@ -1144,6 +1130,57 @@ mod tests {
|
|||
.unwrap_or_else(|error| panic!("release bundle lockfile is not frozen: {error:#}"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn packaged_release_uses_one_deterministic_cargo_graph() {
|
||||
let required = required_packaged_release_binaries("x86_64-unknown-linux-gnu");
|
||||
let command = release_build_command(
|
||||
std::ffi::OsStr::new("cargo"),
|
||||
Path::new("Cargo.toml"),
|
||||
Path::new("target"),
|
||||
"x86_64-unknown-linux-gnu",
|
||||
&required,
|
||||
)
|
||||
.expect("release build command");
|
||||
let args = command
|
||||
.get_args()
|
||||
.map(|arg| arg.to_string_lossy().into_owned())
|
||||
.collect::<Vec<_>>();
|
||||
let envs = command
|
||||
.get_envs()
|
||||
.map(|(key, value)| {
|
||||
(
|
||||
key.to_string_lossy().into_owned(),
|
||||
value.map(|value| value.to_string_lossy().into_owned()),
|
||||
)
|
||||
})
|
||||
.collect::<BTreeMap<_, _>>();
|
||||
|
||||
assert_eq!(envs.get("CARGO_INCREMENTAL"), Some(&Some("0".to_string())));
|
||||
assert_eq!(args.iter().filter(|arg| *arg == "--bin").count(), 23);
|
||||
assert_eq!(args.iter().filter(|arg| *arg == "--package").count(), 2);
|
||||
assert!(
|
||||
args.windows(2)
|
||||
.any(|pair| pair == ["--package", "epiphany-release-bundle"])
|
||||
);
|
||||
assert!(
|
||||
args.windows(2)
|
||||
.any(|pair| pair == ["--package", "epiphany-core"])
|
||||
);
|
||||
assert!(
|
||||
args.windows(2)
|
||||
.any(|pair| pair == ["--features", "epiphany-release-bundle/coordinator-runtime"])
|
||||
);
|
||||
assert!(
|
||||
args.windows(2)
|
||||
.any(|pair| pair == ["--bin", "epiphany-mvp-coordinator"])
|
||||
);
|
||||
assert!(
|
||||
args.windows(2)
|
||||
.any(|pair| pair == ["--bin", "epiphany-state"])
|
||||
);
|
||||
assert!(!args.iter().any(|arg| arg == "--bins"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn resident_cognition_roles_keep_their_owning_manifests() {
|
||||
let root_manifest = fs::read_to_string(
|
||||
|
|
|
|||
|
|
@ -1923,3 +1923,25 @@ vendored Starlark's older `hashbrown` integration; Rust rejected the missing
|
|||
release-target check traversing Starlark through Codex login and
|
||||
`epiphany-openai-auth-spine` completed successfully in 3m16s. This is lockfile
|
||||
compatibility authority, not a source patch or relaxed gate.
|
||||
|
||||
### Single deterministic packaged build authority
|
||||
|
||||
The original packaged-release path invoked Cargo three times against one target
|
||||
directory: the broad root binary graph, the coordinator feature graph, and the
|
||||
core-owned state steward. Cargo correctly rebuilt when each command changed the
|
||||
selected feature set, so the cache oscillated instead of warming. Exact source
|
||||
`e9465c11` took 24m22s cold (17m03s root plus 6m38s state) and 28m30s on an
|
||||
identical cached rerun (21m04s root, 34.62s coordinator, 6m42s state).
|
||||
|
||||
The two runs also yielded different valid authenticated releases. Twenty-one of
|
||||
23 binaries were byte-identical; only the two `epiphany-openai-runtime`
|
||||
binaries differed, including different ELF build IDs and code bytes. Release
|
||||
incremental codegen is therefore not an admissible input to witnessed output.
|
||||
|
||||
`build_required_release_siblings` now has one process owner. It selects
|
||||
`epiphany-release-bundle` and `epiphany-core`, selects
|
||||
`epiphany-release-bundle/coordinator-runtime` once, names all 23 required
|
||||
binaries explicitly, and sets `CARGO_INCREMENTAL=0`. Follow-up coordinator and
|
||||
state-steward Cargo commands are forbidden writers and have been deleted. All
|
||||
19 focused packaged-release tests pass. Exact Linux packaging plus a
|
||||
byte-identical warm rerun remain the verification boundary.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,37 @@
|
|||
# Fresh workspace handoff
|
||||
|
||||
## Deterministic single release graph — 2026-08-09
|
||||
|
||||
Exact pushed source `e9465c11208d648440999903770cbde245c1da3b`
|
||||
produced authenticated release
|
||||
`sha256-5f90294fb037ff777ca99f345e0f4b1e082b176c35bd6e16a60b46d5a687c0cb`
|
||||
with witness
|
||||
`sha256-403a4dd4705772d8d588f3abedb336436b9f1b4ebc037b86efbc5995f5d6a291`.
|
||||
Native inspection accepted the exact source and all 23 required binaries. The
|
||||
packaged `epiphany-state` hash is
|
||||
`8e5e0edd3af59a9f8710d4b6b3a7fbe8243f1002acd6e1d4c415e8053d0cd7c2`.
|
||||
|
||||
The cold package took 24m22s: 17m03s for the root graph and 6m38s for the
|
||||
separate state-steward graph. The identical cached rerun was worse at 28m30s:
|
||||
21m04s for the root graph, 34.62s for the coordinator graph, and 6m42s for the
|
||||
state-steward graph. It also produced a different authenticated release,
|
||||
`sha256-4700e984410e0c8e735d1fcecec282235ed5d096d20b6dbbdb206a83636228fa`,
|
||||
with witness
|
||||
`sha256-f71519f7a27a9588715daf9f11d33031b2680659aa405c29807a39efcfcce373`.
|
||||
Twenty-one binaries were byte-identical; only `epiphany-model-runtime` and
|
||||
`epiphany-persona-service`, both from `epiphany-openai-runtime`, changed. The
|
||||
old packager was oscillating one target cache through three feature graphs,
|
||||
and incremental release codegen made the authenticated output nondeterministic.
|
||||
|
||||
The source cut now uses one Cargo command for both first-party packages, the
|
||||
coordinator feature, and all 23 explicit binaries, with `CARGO_INCREMENTAL=0`.
|
||||
The separate coordinator and state-steward build authorities are deleted. All
|
||||
19 focused packaged-release tests pass. The cold Windows harness took 3m38s;
|
||||
the final source rerun compiled in 47.87s and executed in 0.83s. Commit and push
|
||||
this cut, then require an exact Linux package and an identical warm rerun with
|
||||
both materially improved time and exact release/witness equality before
|
||||
publication.
|
||||
|
||||
## Unified Cargo authority and shipped state steward — 2026-08-09
|
||||
|
||||
The first exact `6808f3f5` package attempt failed before release construction:
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -35,10 +35,10 @@ invariants:
|
|||
- Evidence and git retain history; this map retains only state that changes future decisions.
|
||||
|
||||
current_status:
|
||||
summary: Epiphany is a supervised engineering alpha on Starfire, not deployment-ready. The persistent c005 Linux body proves heartbeat, Self coordination, governed Eyes-to-Modeling cognition, causal routing, native Imagination, dedicated Mind adoption, and typed Hands relinquishment without external consequence. Self causally demotes pre-relinquishment CRRC history while preserving raw operator sight. One root Cargo workspace and lock now own all first-party dependency resolution; the core-owned state steward joins the witnessed release as a required 23rd binary. Yggdrasil remains the small public crossing body and is not a release forge. Exact 23-binary packaging, resident crash/restart, long-duration plateau, log ownership, and stable Starfire firewall ownership remain open.
|
||||
latest_phase: Seven child Cargo locks and three dead child patch declarations were deleted; vendor workspaces remain explicitly excluded. The policy regression reruns warm in 4.47s, core-owned epiphany-state built in 23.20s, and all 18 release-contract tests pass. The first exact 6808f3f5 package failed before release construction because fresh lock resolution selected allocative 0.3.6, incompatible with vendored Starlark's hashbrown integration. Root lock authority now retains the previously proven allocative 0.3.4, allocative_derive 0.3.3, and ctor 0.1.26. A locked release-target check through Starlark, Codex login, and epiphany-openai-auth-spine passes in 3m16s. No failed release or witness exists.
|
||||
summary: Epiphany is a supervised engineering alpha on Starfire, not deployment-ready. The persistent c005 Linux body proves heartbeat, Self coordination, governed Eyes-to-Modeling cognition, causal routing, native Imagination, dedicated Mind adoption, and typed Hands relinquishment without external consequence. Self causally demotes pre-relinquishment CRRC history while preserving raw operator sight. One root Cargo workspace and lock own all first-party dependency resolution, and an authenticated exact-source release now contains all 23 required binaries including the core-owned state steward. Deterministic warm packaging, resident crash/restart, long-duration plateau, log ownership, and stable Starfire firewall ownership remain open. Yggdrasil is the small public crossing body, never the release forge.
|
||||
latest_phase: Exact pushed source e9465c11208d648440999903770cbde245c1da3b produced authenticated release sha256-5f90294fb037ff777ca99f345e0f4b1e082b176c35bd6e16a60b46d5a687c0 with witness sha256-403a4dd4705772d8d588f3abedb336436b9f1b4ebc037b86efbc5995f5d6a291 and 23 inspected binaries. Its nominally warm identical rerun was slower and produced a different valid release: the old three-command packager oscillated Cargo feature graphs, while release incremental codegen changed the two epiphany-openai-runtime binaries. Source now assigns all 23 binaries across both first-party packages to one Cargo command with coordinator-runtime selected once and CARGO_INCREMENTAL=0. All 19 focused packaged-release tests pass; corrected exact Linux packaging and byte-identical warm proof remain open.
|
||||
operational_state:
|
||||
local_worktree: unified_lock_compatibility_repair_proven_pending_commit
|
||||
local_worktree: single_release_graph_and_deterministic_codegen_proven_pending_commit
|
||||
operator_wireguard: restored
|
||||
yggdrasil: canonical_small_public_crossing_body
|
||||
starfire: temporary_epiphany_cognition_body
|
||||
|
|
@ -68,8 +68,8 @@ current_status:
|
|||
starfire_linux_modeling_peak: 109887488_bytes_resident_body_plus_modeling_circuit
|
||||
yggdrasil_epiphany_service_contract: repaired_in_gamecult_ops_812b427_not_installed
|
||||
resident_physiology: c005_swarm_with_217dd_and_bd96305e_worker_helpers_running
|
||||
unresolved_authority: The repaired unified lock has not yet been packaged from a clean commit, so the required 23-binary release and identical warm witness remain unproven. The Docker contract still depends on explicit target and Cargo-home bindings, though the native release packager owns them correctly. Repository Body observation still performs two authenticated full-tree Git index/manifest passes; exact 217dd packaged observer evidence improved the same unchanged Body boundary to 94.521 seconds. Execute-mode workers require a persistent process body. Keyed storage has not earned live migration. One Discord consequence remains blocked by the absent Yggdrasil credential. Resident stdout/stderr logs remain an unbounded supervisor-owned surface.
|
||||
next_action: Commit and push the proven lock compatibility repair, advance the clean Linux package source, package all 23 required binaries once, and rerun identically warm. Publish only after exact witness validation. Then resume resident crash/restart, retention, and endurance work from awaitFrontierProposal without recreating relinquished route 817bf422.
|
||||
unresolved_authority: The e9465c11 release proves exact-source 23-binary inventory and witness inspection, but its identical cached rerun falsified deterministic warm packaging. The single-command, non-incremental authority cut is source- and test-proven but not yet exact-package-proven. The Docker contract still depends on explicit target and Cargo-home bindings, though the native release packager owns them correctly. Repository Body observation still performs two authenticated full-tree Git index/manifest passes; exact 217dd packaged observer evidence improved the same unchanged Body boundary to 94.521 seconds. Execute-mode workers require a persistent process body. Keyed storage has not earned live migration. One Discord consequence remains blocked by the absent Yggdrasil credential. Resident stdout/stderr logs remain an unbounded supervisor-owned surface.
|
||||
next_action: Commit and push the deterministic single-graph packaging cut, package its exact source, then rerun identically warm and require both materially improved warm time and exact release/witness equality before publication. Resume resident crash/restart, retention, and endurance work from awaitFrontierProposal without recreating relinquished route 817bf422 only after that proof.
|
||||
|
||||
active_subgoals:
|
||||
- Prove Persona, Self, Eyes, Modeling, Imagination, Hands, Soul, Mind, Continuity, and nervous-system behavior individually.
|
||||
|
|
|
|||
Reference in a new issue