Conversation
The pin hard-lock refused `max_proof_deadline_s_ceiling > 7200` (`max_proof_deadline_s_ceiling 14400 must be 1..=7200`), which crash-looped proof-challenge on a host whose pin asked for 14400 and blocked staging Gate1 from setting the topic `eval_executor.max_proof_deadline_s >= 14400` the measured Harbor first-5 pack needs. Raise the crate lock to four hours (14400) and move every test / fixture / committed-pin assertion that hardcoded 7200 as the *ceiling* with it. The tighten-only rules are unchanged: a pin may still only lower the ceiling, a topic may only lower the offer deadline, and the live offer may be shorter than both. Boundary probes now use 14401 as "over the ceiling". Docs, the committed `config/proof-pin.toml` default ceiling, and the deploy env example follow. No Harbor seal logic, topic document, holdout, or RLM install path is touched. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
|
@greptileai review B1 staging unlock: 7200 → 14400 in Tighten-only semantics are unchanged: a pin may still only lower the ceiling, a topic may only lower the offer deadline, and the live offer may be shorter than both. Only the outer bound moved. Draft / Merge HOLD — do not merge, do not squash, no auto-merge. |
|
Correction to the line above (the constant name was eaten by shell interpolation): B1 staging unlock: |
Greptile SummaryThis change permits longer Proof runs, but synchronous submission still stops waiting after the former two-hour window. A valid long-running submission can report failure to the caller even when scoring completes and the result is stored later. Do not merge until the gateway and default client submission waits are aligned with the supported run duration. The requested Draft / Merge HOLD remains in effect. Confidence Score: 4/5Not safe to merge: a supported long-running Proof submission can return a timeout despite completing successfully afterward. One reproduced reliability failure remains in the synchronous submission path: the accepted execution duration exceeds the unchanged gateway and default-client wait budgets. Files Needing Attention:
What T-Rex did
|
| pub const MAX_PROOF_DEADLINE_S_CEILING: u64 = 7_200; | ||
| /// topic may declare (four hours). A pin may only tighten it below this | ||
| /// lock, and the live offer may be shorter still. | ||
| pub const MAX_PROOF_DEADLINE_S_CEILING: u64 = 14_400; |
There was a problem hiding this comment.
This change permits Proof deadlines up to 14,400 seconds, but synchronous submission still has a 7,200-second gateway deadline and the default client uses the same limit. A valid proof that finishes after two hours returns a gateway or client timeout instead of the expected 201 Created, even though its detached scoring work can finish and persist afterward. Raise those submission budgets to cover the supported deadline range, including any transport margin, or change the submission contract to acknowledge work before scoring completes.
Knowledge Base Used: Proof tasks, challenge service, and scoring
Artifacts
- Executed the executor deadline-plan test in a worktree at the parent of PR proof: raise MAX_PROOF_DEADLINE_S_CEILING to 14400 (B1 staging) #300, where the proof deadline ceiling was 7,200 seconds; it passed, establishing the prior ceiling.
- Executed the authored paused-time gateway contract test against the PR state; it reports HTTP 504 Gateway Timeout with `upstream deadline` while a 7,201-second detached score persists, confirming the mismatch.
- The authored Rust test invokes the real gateway detached Proof timeout function and verifies its 504 response and post-timeout score persistence.
- The authored shell command temporarily installs the narrow test with Tokio test time enabled, runs it, and restores repository files afterward.
- Executed the current executor plan boundary test, which includes acceptance of a 14,400-second override, confirming the changed admission side.
Why
Staging Gate1 (Arch B1) needs a topic whose signed
eval_executor.max_proof_deadline_sis ≥ 14400 s for the measured Harborfirst-5 pack. The live tip binary refuses it and crash-loops
proof-challenge:The lock is
crates/proof-task/src/executor.rs→pub const MAX_PROOF_DEADLINE_S_CEILING: u64 = 7_200;, also read by pinvalidation (
ProofPin::validate_executor) and by the topiceval_executordeadline check (TopicEvalExecutor::validate).What changed
MAX_PROOF_DEADLINE_S_CEILING7200 → 14400 (four hours), with itsdoc comment updated.
config/proof-pin.tomldefault ceiling →14400.7200as the cratelock maximum moved with it. Boundary probes that meant "just over the
ceiling" now use
14401(and14400where they meant "exactly at theceiling"):
crates/proof-task/src/executor.rs(constant + lock test)crates/proof-task/src/pin.rs(TOML round-trip fixture; thetighten-never-loosen test now asserts the crate lock itself is legal,
then still asserts
lock + 1and0are refused)crates/proof-task/tests/committed_pin.rscrates/proof-executor/src/lib.rs,crates/proof-executor/src/plan.rscrates/proof-http/src/lib.rs(public/v1/status+/v1/proof/executor)crates/proof-harvest/src/lib.rs(override-refusal message)xtask/src/proof_executor_offer.rs(ceremony helper refusal)docs/PROOF.md,docs/COMPLETENESS.md,docs/external-miner/proof.md,docs/runbooks/proof-submit-e2e.md,deploy/env/proof-challenge.env.example.Not changed: the topic / offer deadlines themselves (
7200stays theexample offer deadline and the live offer's own value), the
tbenchminer doc's live topic row,ctx's 7200 s submit wait,PROOF_PROXY_DEADLINE_SECS, and the Lium retry-hint clamp — those areper-request budgets, not the pin lock. Gate5/6 behavior is untouched: no
Harbor seal logic, no metal, no topic documents, holdouts, or RLM install
path.
Semantics preserved
Tighten-only is unchanged. A pin may still only lower the ceiling, a
topic may only lower the offer's deadline, and the live offer may be
shorter than both. Only the outer bound moved.
Verification
cargo test -p proof-task -p proof-executor— pass.cargo test --workspace --no-fail-fast— only 4 failures, allpre-existing and environment-caused: this sandbox runs as uid 0, so
chmod 000on a fixture directory does not deny reads(
CAP_DAC_OVERRIDE). Each passes when run as an unprivileged user(
setpriv --reuid=65534):seed_pf_allocator_refuses_boot_when_a_topic_dir_cannot_be_read,artefact::tests::max_zip_numeric_id_fails_closed_when_a_topic_dir_cannot_be_read,agent_tests::deadline_cut_still_persists_work_tree,agent_tests::paid_run_fails_closed_when_work_tree_cannot_be_synced.None are touched by this change.
cargo fmt --all -- --check— clean.cargo clippy --workspace --all-targets -- -D warnings— clean.xtask loc-cap/consensus-lint/spec-check/design-check/external-docs-check— all OK.Merge status
DRAFT. Do not merge, do not squash, do not enable auto-merge — Mathis
Merge HOLD until Owner staging A→Z 6/6.
Gates
@greptileai reviewif silent)