Skip to content

feat(tenants): prepare verified source upgrades - #5364

Merged
devantler merged 7 commits into
mainfrom
codex/canonical-source-upgrade-5361-01a174a5
Oct 26, 2026
Merged

devantler merged 7 commits into
mainfrom
codex/canonical-source-upgrade-5361-01a174a5

Conversation

@devantler

Copy link
Copy Markdown
Contributor

🤖 Generated by the Agentic Engineer

Why

The portal's staging registration cannot safely replace its already verified website package. Treating the replacement as already applied would hide whether deployment succeeded.

What

Adds a reviewed upgrade path and proposes the verified replacement while keeping the application disabled. The existing verified version remains recorded until the replacement is actually accepted.

Part of #5361

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

Signed published head 76af10d implements the bounded #5361 staging increment. The missing preparation operation was RED before implementation. A later real constructor-change race was also RED: preparation incorrectly accepted a constructor changed during observation. Final declaration, constructor, admission and complete-discovery checks now reject it. The real preparation/discovery/regeneration test passes positive upgrades from bootstrap and observed bindings, preserves the prior observation until replacement verification, and exercises 23 explicit refusal cases. Existing canonical admission, raw/rendered attribution, output-race, publication-binding and both legacy publisher-family regressions remain green. ShellCheck and actionlint pass; the workflow's path selection and native invocation include the new regression.

The actual evidence-only publication verifier and read-only production source observation generated the proposed v2.0.0 files. The final invocation used data exported from actual Platform main ac76568; it independently verified source 2eca5f823676adde374556848cf8bf86eb139804, manifest sha256:2f43bf60c87e373ab99f9fc08f187287d9526b3f1b3212b6234e2ae80b9c5e82 and the already approved publisher 467f07582436a26b62cf4aa756423512f85ba0c0, then reobserved the unchanged existing generation-1 source. Only generated admission/Tenant files were copied into this checkout. The old applied digest remains sha256:fa22e5796a39872feb8c75b5d56e2c6d68ff289230e2c5762f0bbfa0b30d6744; the new digest is proposed, not applied. No cluster or private-value write occurred.

Both KSail provider validations exit zero and explicitly cover the changed business-site Tenant. Their output includes skipped Helm rendering for an unavailable credential helper and offline namespace-policy warnings; those are retained limitations, not claims of full Helm/runtime coverage. The candidate keeps webApp, source.reconcileApplication, externalDns and sops false. Fresh complete hosted CI, substantive exact-head review, normal protected merge and actual Flux source/signature acceptance remain required. This PR does not activate the portal.

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

Exact-head repair evaluation: 6433a5f.

The initial CI failure is preserved as failure. The unchanged validators were reproduced locally with their exact supported kubectl 1.36.2 and Trivy 0.74.0. Their independently observed deltas contain only the business-site Tenant: one authorization fingerprint and one instance-content fingerprint. The Tenant diff changes only the immutable source digest; its publisher, constructor and all application/DNS/SOPS capability switches remain unchanged and disabled.

The repair records those two intended fingerprints. No finding count, severity, graph fingerprint, authorization rule, threshold or scanner behavior changed. The complete authorization package passes, including all seven source-removal/capability/publisher/artifact refusal controls; the actual production authorization CLI passes. The unchanged Trivy scan passes over 17 templates from two graphs and three committed instances. The pinned KRO/API-server compiler fixture passes, including source-only activation and all invalid-source/transition controls.

This is still a reviewed proposal. No cluster resource was changed, and no new source application, customer login, worker or payment flow is claimed active. Fresh CI and substantive current-head review remain required before promotion.

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 27 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
Commits

Reviewing files that changed from the base of the PR and between 4bc9bb9 and 26adf24.

Files ignored due to path filters: 1
  • scripts/rgd-template-static-scan-baseline.tsv is excluded by !**/*.tsv
Files selected for processing: 14
  • .github/workflows/ci.yaml
  • docs/TENANTS.md
  • docs/adr/canonical-only-source-bootstrap.md
  • k8s/providers/hetzner/apps/business-site/tenant.yaml
  • scripts/bootstrap-tenant-source.sh
  • scripts/canonical-tenant-source-bindings.json
  • scripts/canonical-tenant-source.lib.sh
  • scripts/generate-publish-workflow-approved-revisions.sh
  • scripts/tests/test-canonical-bootstrap-output.sh
  • scripts/tests/test-canonical-constructor-attribution.sh
  • scripts/tests/test-canonical-generator-output.sh
  • scripts/tests/test-canonical-source-upgrade.sh
  • scripts/validate-eks-ci-role-policy/approved-surface.txt
  • scripts/validate-eks-ci-role-policy/canonical_source_workflow_test.go
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

cr:no-gate@6433a5f. The single ordered CodeRabbit request was explicitly refused: authenticated reply 6411972979 and summary #5364 (comment). The summary's 08:50:47Z event states a 16-minute recovery, ending 09:06:47Z; the primary was reread while that window remained active. Scope is this public repository/head and its included OSS allowance. This is not a code finding or green review. The no-gate guard admits progression; no paid review, credit reset or duplicate request is used.

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

@codex review for correctness and security of source-only upgrades, including all fourteen changed files and the two fingerprint records

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-26T13:46:44.583643Z 26adf24 Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6433a5f7e8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/canonical-tenant-source.lib.sh Resolved
@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Review rate limited.


Your included review limit is currently reached under our Fair Usage Limits Policy. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 48 minutes.

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

@codex review

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

For cb35f74, CodeRabbit's authenticated response reports the included review limit, with a 48-minute recovery from its 10:40:11 UTC event: #5364 (comment) . The edited summary binds this exact head and independently states the same active limit. No usage-based billing or credits were used.

The complete current-head read contains no substantive CodeRabbit review; review-no-gate-guard returns ADMIT. Recorded progression: cr:no-gate@cb35f74. The ordered Codex request is #5364 (comment) . An acknowledgement is not a verdict; promotion remains held for a substantive current-head result and the other gates.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. More of your lovely PRs please.

Reviewed commit: cb35f74996

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

Readiness at GitHub-verified signed head cb35f74: all six exact-head workflows and all 39 native check runs are successful or skipped; the complete comment/review/inline/thread read has no unresolved finding. Codex's clean receipt is #5364 (comment) and its updated summary reports no findings at this same head. CodeRabbit's explicit current included-review limit is recorded separately, not treated as green. Configured native code_quality remains UNVERIFIED because its head analysis is unreadable; no COMPLETE result or waiver is claimed.

I exercised the current preparation command against a fresh data export of actual current Platform main, real read-only production source observations and the unchanged authenticated publication verifier. It generated a new v2.0.0 proposal, independently binding business-site source 2eca5f823676adde374556848cf8bf86eb139804, manifest digest sha256:2f43bf60c87e373ab99f9fc08f187287d9526b3f1b3212b6234e2ae80b9c5e82 and the approved publisher 467f07582436a26b62cf4aa756423512f85ba0c0. The command reobserved the existing source before producing its new private output. webApp, source.reconcileApplication, externalDns and sops remain false. No cluster mutation occurred.

The real preparation/generation regression families pass against the integrated base, including all eight independently demonstrated unsafe replacement-policy/observation cases. Readable required gates pass, the PR is conflict-free/CLEAN and the worktree holder is this invocation. The only subsequently merged base change is an aggregate-action pin; the protected merge queue will validate the combined tree. Promotion-triggered checks must settle before queue entry. Issue #5361 stays open until the actual replacement source is verified/applied; this proposal does not activate the portal.

@devantler
devantler marked this pull request as ready for review October 26, 2026 10:49
@devantler
devantler added this pull request to the merge queue Oct 26, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Oct 26, 2026
@devantler
devantler marked this pull request as draft October 26, 2026 12:29
@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

The merge queue removed this PR at 12:12 UTC after newer main revisions introduced a conflict in the source-binding registry. The preceding queue build passed; this was not a failed test or a reason to bypass protection.

Signed head 630c99bf1cf9088f3074206f16bfacafe7fec617 integrates actual main 27d15497fc0d2466ef7c4ed6e6586cb1935d12a5. I regenerated the proposal with the actual reviewed command, fresh read-only live source observations and the unchanged immutable publication verifier. The only proposal change is that its prior binding now reflects main's observed binding state. The proposed digest, constructor identity and disabled application settings remain unchanged. All seven affected regression families pass locally.

The PR is draft again while fresh CI and substantive current-head review run. Old review green does not apply to this changed head. No production reconciliation, application activation, forced merge or queue override occurred.

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

The fresh pre-review read found a conflict with subsequently merged main #5366, which moved the existing publication-generator regressions into their own required job. No review request was spent on the conflicting head.

Signed head 26adf24728ad91bc6112be19ca2ae1cbc5d4f2f4 integrates main 4bc9bb9ac4aadbfd5d2ffb4855d334be55b7e907 and keeps the new source-upgrade regression in that required publication-generator job. Its path and command also join the existing independent CI registration and mutation controls: registration was RED when the native command was absent, then GREEN after restoring it in the new owner. The affected Go package passes with race detection, policy-partition controls pass, and actionlint passes. The seven source regression families' earlier passes remain evidence for their unchanged implementation, not newly relabeled executions at this head.

The proposed source binding, signed-publication tuple, constructor and disabled application settings did not change. The PR remains draft for fresh hosted CI and substantive exact-head review; neither earlier green applies to the changed head. No merge-queue override or production mutation occurred.

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Review rate limited.


Your included review limit is currently reached under our Fair Usage Limits Policy. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 27 minutes.

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

CodeRabbit explicitly refused the requested review because its included quota is exhausted (authenticated reply 6417287072). The fresh no-gate guard reports ADMIT for this exact head: no substantive CodeRabbit review was delivered. Proceeding to the next included lane; no paid review or quota reset is requested.

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. What shall we delve into next?

Reviewed commit: 26adf24728

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@devantler

Copy link
Copy Markdown
Contributor Author

🤖 Generated by the Agentic Engineer

Ready at signed head 26adf24728ad91bc6112be19ca2ae1cbc5d4f2f4. All seven exact-head workflows and all 50 native contexts are successful or skipped, including CI 40328182623. The complete review/comment/inline/thread read has zero unresolved threads or unaddressed body findings. Codex's substantive clean review 6417580534 binds this head; CodeRabbit's explicit included-quota refusal is not a review and does not supply the verdict.

I exercised the real operator command at this head against freshly fetched main 2684b3bec18b01f044d9bc5c8ab4986b309f8587, authenticated signed publication evidence and fresh read-only Source observations. It generated the intended immutable replacement, preserved the actual prior observation, and produced a Tenant identical to this PR's candidate. The newly merged main changes do not alter the proposed source transition. Both runtime and application reconciliation, external DNS and secret decryption remain disabled. No cluster resource was changed by this evaluation.

The independent CI registration control was RED without the new regression command and GREEN when registered in the required generator partition; race tests, the partition controls and actionlint pass. The existing PR body passes the current template contract. Fresh process/claim checks show only this session. GitHub reports MERGEABLE/CLEAN. Configured native code_quality remains UNVERIFIED/UNKNOWN; it is neither declared complete nor waived. A normal protected, exact-head queue operation remains required, followed by actual source-acceptance verification; proposal generation is not deployment or portal activation.

@devantler
devantler marked this pull request as ready for review October 26, 2026 13:51
@devantler
devantler added this pull request to the merge queue Oct 26, 2026
Merged via the queue into main with commit 4718a63 Oct 26, 2026
51 checks passed
@devantler
devantler deleted the codex/canonical-source-upgrade-5361-01a174a5 branch October 26, 2026 14:21
@github-project-automation github-project-automation Bot moved this from 🫴 Ready to ✅ Done in 🌊 Project Board Oct 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: ✅ Done

Development

Successfully merging this pull request may close these issues.

1 participant