prover loop: no records-indexing poll until the node's exec follower holds a record (ledger N7, PC 1 on 0.3.18)

The 0.3.18 clock-sample gate stopped one caller; the prover's first igneum_getAssignedShards after the node reads synced killed PC 1's 0.3.17 node the same way (rpc.rs:808, records[1..=0] on an empty vector) because its follower loads after the sync flag. The loop now waits on igneum_getExecStatus's executedTipHash, the same gate.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
igneum-labs 2026-10-07 09:34:17 +00:00
parent 0d05308e8d
commit 927895a69d
2 changed files with 11 additions and 1 deletions

View file

@ -478,6 +478,16 @@ fn loop_forever(shared: Arc<Shared>, bin_dir: PathBuf) {
});
continue;
}
// ledger N7 (7 October 2026, PC 1 on 0.3.18): a node before the exec RPC fix dies on igneum_getAssignedShards
// and igneum_getProofRecords when its exec follower holds no record (rpc.rs slices records[1..=0]), and the
// node reads synced seconds before a slow follower has one; nothing below asks until the follower reports a tip
if !crate::update::exec_has_record(shared.runtime.evm_port()) {
set(&shared, |p| {
p.status = "waiting".into();
p.message = "waiting for the node's execution layer".into();
});
continue;
}
// 1. the keys and the work list
let labels = labels(&shared);
let mut keys: Vec<(String, String)> = Vec::new();

View file

@ -42,7 +42,7 @@ fn days_from_civil(y: i64, m: i64, d: i64) -> i64 {
/// True once the node's exec follower holds a record (igneum_getExecStatus's executedTipHash is set). Any error or an
/// unreachable node reads false: the block sample waits rather than asks.
fn exec_has_record(evm_port: u16) -> bool {
pub fn exec_has_record(evm_port: u16) -> bool {
let body = "{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"igneum_getExecStatus\",\"params\":[]}";
let out = crate::detect::run_timeout(
Command::new(crate::platform::tool("curl")).args(["-s", "--max-time", "5", "-X", "POST", &format!("http://127.0.0.1:{evm_port}"), "-H", "Content-Type: application/json", "-d", body]),