Skip to content

fix: recover partial platform applies with valid service options and unique buckets - #128

Merged
lweberru merged 5 commits into
mainfrom
fix/platform-partial-apply-recovery
Oct 21, 2026
Merged

lweberru merged 5 commits into
mainfrom
fix/platform-partial-apply-recovery

Conversation

@lweberru

@lweberru lweberru commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

A partially completed platform Apply can fail because globally shared bucket names collide and nullable Observability retention settings acquire unsupported defaults. Correct the native defaults and preserve the existing checkpoint when preparing a corrected source version.

  • Default management and workload bucket names to the complete owning project UUID plus purpose, within 63 characters. Preserve resource addresses; keep legacy as an explicit compatibility choice for existing buckets. Document replacement/migration review before changing existing names.
  • Keep omitted/null central retention fields at service defaults. Share fresh live plan capabilities, reviewed static fallback and numeric bounds across editor validation, preparation and Assistant proposal checks. Preserve unsupported saved values for explicit correction; never silently switch service plans. Native validation remains independently usable.
  • Pin the platform Runner to native snapshot 9e7fb46c329aca32e878ce1f0ea3b944ea240354, included in this PR's history. Permit a corrected preparation from a failed Bootstrap Apply only after explicit owner reconciliation of the exact current checkpoint with supported source provenance. Preserve tenant/configuration/state identity, ciphertext, version and backend; reject locks, migrations, separate recovery and active runs. Require a fresh Plan and approval.
  • Clarify that Firewall credentials authenticate existing appliances rather than change their passwords. Update both documentation languages, generated input contracts and Assistant knowledge.

Validation completed locally: 31 native root tests, 9 workload module tests, 16 Application-root tests, 13 template export contracts; Go adapter tests and generated inventory checks; full app check (994 passed, 71 gated skips); 63 platform database tests; 51 identity/Assistant database tests; 6 desktop/mobile catalogue browser tests. The local Runner contract passed with the verified packaged Firewall image, disk-budget checks, native mocked plans and localhost bootstrap-provider checks (3 targeted package tests passed, 128 unrelated/gated skips). No customer Plan/Apply or cloud infrastructure mutation was performed.

Source-bound live Assistant qualification passed with Qwen/Qwen3-VL-235B-A22B-Instruct-FP8 for both model roles: 118/118 suite cases across two repetitions, and 13/13 continuous-dialogue steps through local acceptance, roundtrip and export. These synthetic tests authorize no execution. Final knowledge SHA-256: 436435106841a476ec0c7cf7a948f0f94e9ac99566ebfdb98838980fe45f3738; suite: a186d02cfe1f3c0aa0b82d058006dbb1029b2e4b07020e0e934db478354f19b9; journey: 5e496069d1c38fa2a6806244e4d8d74fa24ecfe1d72a68d23251b2de1e895ebf. Normal qualified release gates are unchanged.

The first CI browser run passed 308 cases and exposed four stale assertions for the old S3-only recovery error. The follow-up commit aligns those assertions with the newly supported reviewed Bootstrap checkpoint path; all four passed locally. All final CI checks passed on 75f28a1f544244128606c2b3365aeaca142cbf96, including the complete 312-case desktop/mobile browser suite: Validate Configurator, native validation. Independent review and explicit deployment authorization remain required.

Fixes #127

lweberru and others added 4 commits October 21, 2026 09:22
Use complete owning project UUIDs by default and retain explicit legacy compatibility. Preserve nullable service retention and reject incompatible plan settings before provisioning.

Related to #127.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Cover the API Metrics-Endpoint spelling in retention validation before provisioning.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ply checkpoints

Bind the platform runner to project-qualified bucket names and nullable service retention. Share live and reviewed fallback validation across the editor, preparation and Assistant, and permit source correction only from an explicitly reconciled supported checkpoint.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep the preparation error assertion aligned with the supported reconciled Bootstrap recovery path. Preserve all refusal and no-mutation assertions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@lweberru
lweberru marked this pull request as ready for review October 21, 2026 10:27
@lweberru
lweberru merged commit 63b20c9 into main Oct 21, 2026
13 checks passed
@lweberru
lweberru deleted the fix/platform-partial-apply-recovery branch October 21, 2026 10:46
lweberru added a commit that referenced this pull request Oct 21, 2026
The Dev release after #128 stopped before deployment because
`TestCompleteRootVariableInventory` still expected 29 inputs although
the reviewed `bucket_naming` addition makes 30. Update that coverage
check and explicitly verify the new input's type, validated optional
status and `project-id` default.

Run the Go tests with `-count=1` in PR and release validation so the
coverage of external Accelerator source files is checked freshly. The
[previous green PR
check](https://github.com/stackitcloud/stackit-landing-zone/actions/runs/39583692799/job/119167246911)
explicitly reported `(cached)` instead of rerunning this assertion.
Increase only the Dev deployment job's aggregate timeout from 30 to 45
minutes: the earlier deployment exhausted the overall deadline while its
Runner verification was still running. Individual step deadlines,
required checks, qualification rules and environment protections remain
intact. Document both details in English and German.

Validation: uncached Go adapter tests; all three catalogue/inventory
freshness checks; 34 release/image/configuration guards in each of
`qualified` and `dev-skip-assistant-qualification`; source-bound
Assistant catalogue freshness; actionlint for both changed workflows;
clean diff check. No native infrastructure inputs or Assistant facts
changed.

Release evidence: the [qualified
attempt](https://github.com/stackitcloud/stackit-landing-zone/actions/runs/39594257286)
failed solely on one Model Serving timeout (117/118 cases passed;
continuous journey 13/13). Its failure is retained. The [explicit Dev
exception
attempt](https://github.com/stackitcloud/stackit-landing-zone/actions/runs/39596819043)
then exposed the stale 29-input coverage assertion. Both stopped before
deployment. After review and merge, the already requested Dev release
can resume through the explicit exception with the Assistant enabled and
`runner_pool_size=1`; no customer Apply is part of this work.

Final CI passed on `4beb8c39b2034731f74f03c37e3a07d02ada61be`: [Validate
Configurator](https://github.com/stackitcloud/stackit-landing-zone/actions/runs/39597852990).
Unchanged native formatting/lint/validation suites are scope-skipped;
all applicable checks succeeded. Ready for independent review.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: globally unique Object Storage bucket names must be the default

1 participant