Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/bootstrap.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
matrix:
runner: [ubuntu-24.04, ubuntu-24.04-arm]
runs-on: ${{ matrix.runner }}
timeout-minutes: 45
timeout-minutes: 180
steps:
- name: Check out the exact event revision
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
Expand Down
41 changes: 41 additions & 0 deletions TEMPLATE-VERIFICATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,47 @@ added without the other two.
construction therefore cannot exempt the very gate in which a deferral could
otherwise be hidden.

## Capacity for the complete acceptance boundary

The capacity scenario retains both native runners and the complete `just vv`
command within one finite job deadline. The matrix application's current gate
invokes eight complete application generations: ordinary build (one), ordinary
verification (build plus independent replay, two), native product release
(verification plus build, three), and two independent clean-root builds.
The unchanged SDK implementation at
[`c86c7156f7a36c0a164298c3a93dfe5d264d7a64`](https://github.com/UOR-Foundation/PrismPM/tree/c86c7156f7a36c0a164298c3a93dfe5d264d7a64)
owns those build and replay calls: `verification::run` builds before its
independent `application_build::generate_owned` replay, and
`Controller::product_build` calls verification and then construction.

Two complete 158-vector source-maintenance builds took 628.662812710 and
650.163141852 seconds. Those are observations, not runtime guarantees or
installed-SDK acceptance. A subsequent optimized source build took
510.658195992 seconds, illustrating that timings vary. Eight generations at
the larger observed duration would consume about 87 minutes before source
proofs, the native corpus, browser oracles, authority scans and planted defects.
The bootstrap therefore admits 180 minutes on each existing native runner.
The policy regression uses the observed workload as a capacity scenario and
also requires a finite deadline no greater than 180 minutes, both native
platforms, the complete command and failure propagation. The template's empty
product register and all universal acceptance gates remain intact.

Before the deadline change, the actual named Rust regression failed with
`complete acceptance generations alone exceed the job budget`. The changed
policy is validated through the same test and the complete native template
suite. This is a reviewed policy-input revision; immutable SDK rendering and
the downstream complete `just vv` remain separate required gates.

The 23 workspace Rust tests (including all 15 native bootstrap tests), both
invoked Node cases, workspace/all-target Clippy with warnings denied,
formatting, model comparison and all-features/all-target checks passed through
the existing immutable amd64 SDK
`sha256:46cf404780a7f05fe2bc667690320198fbed1ffadf4bb1899fd0472c6171e44d`.
Restoring the old 45-minute value then failed the actual named regression;
restoring the exact 180-minute workflow bytes passed again. These component
checks do not claim complete hosted acceptance on either architecture or an
installed new SDK qualification.

## Platform-indexed SDK bootstrap

The `/2` SDK lock renderer delegates index and inventory validation to the
Expand Down
27 changes: 27 additions & 0 deletions xtask/src/bootstrap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -603,6 +603,33 @@ mod tests {
workflow_history_is_complete, PROJECT_CONTENT_PATHS, UNIVERSAL_POLICY_PATHS,
};

#[test]
fn bootstrap_retains_bounded_complete_acceptance_capacity() {
let source = include_str!("../../.github/workflows/bootstrap.yml");
let deadlines = source
.lines()
.filter_map(|line| line.trim().strip_prefix("timeout-minutes:"))
.collect::<Vec<_>>();
assert_eq!(deadlines.len(), 1, "one explicit native-job deadline");
let deadline = deadlines[0]
.trim()
.parse::<u64>()
.expect("a finite whole-minute deadline");
// Eight normal generations at the observed rounded-up 651 seconds
// already consume 87 minutes before proofs, oracles and mutations.
let observed_generation_seconds = 8 * 651;
assert!(
deadline * 60 > observed_generation_seconds,
"complete acceptance generations alone exceed the job budget"
);
assert!(deadline <= 180, "the job deadline remains bounded");
assert!(source.contains("runner: [ubuntu-24.04, ubuntu-24.04-arm]"));
assert!(source.contains("fail-fast: false"));
assert_eq!(source.matches("exec just vv").count(), 1);
assert!(!source.contains("continue-on-error:"));
assert!(!source.lines().any(|line| line.trim().starts_with("if:")));
}

#[test]
fn dependency_updates_preserve_sdk_ownership_and_ordinary_maintenance() {
let source = include_str!("../../.github/dependabot.yml");
Expand Down
Loading