Skip to content

[4/4] feat(runtime): validate releases and finalize lifecycle safeguards - #124

Open
MarcStdt wants to merge 7 commits into
codex/runtime-accepted-release-updatesfrom
codex/runtime-release-descriptor-read
Open

MarcStdt wants to merge 7 commits into
codex/runtime-accepted-release-updatesfrom
codex/runtime-release-descriptor-read

Conversation

@MarcStdt

@MarcStdt MarcStdt commented Sep 27, 2026 •

Copy link
Copy Markdown
Contributor

Scope of this layer

Reproducible authored-release hashes using SOURCE_DATE_EPOCH and deterministic layer order; bounded semantic validator and packaging; final runtime safeguards and failure regressions.

Cleanup removes a dead digest resolver, a constant update/restart parameter and ignored worker-option plumbing. Running workloads still restart when required; backup restoration preserves release manifests. The legacy worker flag remains accepted as a hidden no-op for compatibility.

Native stack #126

  1. [1/4] feat(registry): preserve release manifest #122 — preserve release manifest
  2. [2/4] fix(runtime): make backups restore-safe #123 — restore-safe backups
  3. [3/4] feat(runtime): apply accepted release digests #125 — exact accepted release updates
  4. [4/4] feat(runtime): validate releases and finalize lifecycle safeguards #124 — release validation, safeguards and cleanup

The first layer targets master and later layers target their predecessor. Review the whole stack before landing: final fixes and cleanup live in the top layer. No force-push or history rewrite was used.

Fresh verification — 2026-10-22

Full go test ./... passed, alongside focused CLI/runtime/Docker/Kubernetes/registry package tests and formatting/diff checks. This is not a new live Docker/Kubernetes end-to-end acceptance run. Earlier acceptance evidence in the monorepo audit remains historical.

General baseline ownership/queue/crash-recovery repairs remain out of scope. Matching Core/engine/runtime contracts must ship together.

Companions: monorepo stack, Scrolls publisher. No merge or production release was performed.

Typed restore dependency follow-up

Commit 4f62e1f replaces the anonymous runtime capability assertion with an unexported one-method restoreArtifactPuller interface accepted directly by pullWorkerRestore. The restore fake now implements only that method. Manifest preservation, staged replacement, rollback, shared registry interfaces, generated mocks and public CLI behavior are unchanged.

New regression verifies that a pull failing after staged writes propagates its error, preserves the original runtime files and removes staging leftovers. Focused restore/rollback/manifest tests, uncached CLI and registry package tests, full go test ./..., gofmt and diff checks pass locally. No merge or deployment.

Installed release reporting during pull

Commit 28df7a9 removes the separate pre-pull digest resolution. Create/update/restore workers report the descriptor and Scroll YAML actually installed on the volume, so restore reports the preserved release rather than the backup artifact digest.

Normal installed-release queries and accepted-update checks use persisted worker results without launching an inspect worker. SQLite and ConfigMap records carry an internal confirmation marker: legacy records receive one successful inspection; pending/interrupted materializations fail closed instead of advertising stale identity. Local directory Scrolls without descriptors remain supported, but cannot report an OCI release identity.

Verification: full go test ./..., focused race tests, worker restore/rollback/descriptor regressions, persistence migration/round-trip tests, and formatting/diff checks passed locally. No new live Docker/Kubernetes end-to-end run. Deploy matching daemon and rebuilt worker image together; the running local image was not changed. No merge or deployment.

Honor SOURCE_DATE_EPOCH and sort discovered root layers. Identical

publisher retries otherwise conflict on creation times or map order.

Preserve immutable-tag checks; verify repeated pushes and live retries.
Reuse runtime validation through a bounded stdin protocol for Core.

Do not read config, expand host variables, execute commands, or echo

untrusted input. Reject invalid procedures, mounts and release metadata.
Build/install the read-only helper with the existing CLI workflow.

Record runtime parity tests and the pinned Core image smoke result.
@MarcStdt MarcStdt changed the title feat(runtime): apply accepted Scroll releases feat(runtime): unify Scroll release lifecycle Sep 28, 2026
@MarcStdt
MarcStdt changed the base branch from codex/scroll-runtime-backup-orchestration to master September 28, 2026 01:43
Preserve protected files during staged updates and keep failed maintenance stopped. Exclude the previously deferred general runtime repairs.

Recover the reviewed September 29 local state from session history into a durable workspace. Full Go suite and focused race tests pass.
@MarcStdt
MarcStdt changed the base branch from master to codex/runtime-accepted-release-updates October 4, 2026 16:21
@MarcStdt
MarcStdt marked this pull request as ready for review October 4, 2026 16:21
@MarcStdt
MarcStdt added this pull request to stack #126 October 4, 2026 16:21
@druid-infra

Copy link
Copy Markdown
Contributor
Error: This repo is not allowlisted for Atlantis.

@MarcStdt MarcStdt changed the title feat(runtime): unify Scroll release lifecycle [4/4] feat(runtime): validate releases and finalize lifecycle safeguards Oct 4, 2026
Require the restore capability at compile time instead of asserting it at runtime. Keep manifest preservation and staged replacement unchanged; cover pull failures before replacement.
Read the installed descriptor after materialization, including restore.
Persist confirmation state in SQLite and ConfigMaps so normal release
queries need no inspection worker. Legacy records inspect once; incomplete
materializations fail closed instead of returning stale identity.
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.

2 participants