diff --git a/docs/release-control/v6/internal/subsystems/deployment-installability.md b/docs/release-control/v6/internal/subsystems/deployment-installability.md index d26a1d7bdc..c93b445949 100644 --- a/docs/release-control/v6/internal/subsystems/deployment-installability.md +++ b/docs/release-control/v6/internal/subsystems/deployment-installability.md @@ -6385,6 +6385,14 @@ portable control runs the actual emitted helper and real verifier through that adapter, and rejects altered deadlines, retries or TLS options without online fallback. This preserves the hosted manual-recovery consumer, not native acceptance. +Configuration-backup publication verification also uses the existing serial +per-control runner. All twelve current methods are required, all discovered +future methods run, and each retains the thirty-second execution bound. A +single cumulative suite budget must not cut off the final safety control. +The Python controls' own ten-second shell bounds and every backup assertion +remain unchanged; no host-contention diagnosis or production deadline change +follows from a cumulative harness timeout. + `TestManualUpdateChannelAdmission` generates and executes the actual helper against local transport fixtures and genuinely signed installer/sidecar bytes. It checks final arguments and the actual installer channel-selection functions, diff --git a/scripts/installtests/root_install_sh_test.go b/scripts/installtests/root_install_sh_test.go index 6d7fb8e94e..b2530ed6d1 100644 --- a/scripts/installtests/root_install_sh_test.go +++ b/scripts/installtests/root_install_sh_test.go @@ -2751,14 +2751,22 @@ fi } func TestRootInstallScriptConfigBackupPublicationPreservesPriorSnapshots(t *testing.T) { - ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - cmd := exec.CommandContext(ctx, "python3", repoFile("scripts", "tests", "test_server_config_backups.py"), "-v") - cmd.Env = append(os.Environ(), "PULSE_INSTALLER_UNDER_TEST="+repoFile("install.sh")) - out, err := cmd.CombinedOutput() - if err != nil { - t.Fatalf("configuration backup publication controls: %v\n%s", err, out) - } + // A cumulative suite budget is not an individual backup-control deadline. + // Keep all discovered controls serial and retain the existing per-control bound. + runPythonFixtureControls(t, repoFile("scripts", "tests", "test_server_config_backups.py"), "ConfigBackupPublication", []string{ + "test_two_successful_same_second_copies_are_separate_complete_snapshots", + "test_failed_partial_copy_does_not_mutate_or_delete_a_previous_snapshot", + "test_allocation_failure_stops_before_copy_or_rotation", + "test_headroom_failure_creates_no_stage_and_preserves_prior_snapshot", + "test_failed_publication_does_not_rotate_or_publish_a_snapshot", + "test_exit_zero_skipped_publication_preserves_file_directory_and_link", + "test_current_snapshot_survives_rotation_even_after_clock_moves_backwards", + "test_incomplete_copy_is_not_another_invocations_rotation_candidate", + "test_discard_removes_only_this_invocations_new_snapshot", + "test_missing_config_clears_stale_ownership_without_deleting_prior_snapshot", + "test_read_only_config_parent_uses_the_existing_hardened_unit_fallback", + "test_every_update_entry_stops_on_failed_backup_even_in_an_or_list", + }, 30*time.Second, "PULSE_INSTALLER_UNDER_TEST="+repoFile("install.sh")) } // Run the emitted helper and real SSH verifier. Curl exits are modelled, so