Repository navigation
fix(chart): match preflight's image path and observability url refusals - #2362
Conversation
…bservability hosts everywhere Profile preflight refuses both since #2358. The chart (images.* and repositoryCredentials.image), prepare-bootstrap-volume, upgrade-production-images and Compute's gateway and Agent image check now refuse an uppercase repository path too, which Kubernetes cannot pull. Installation startup refuses any @ before the observability.url host. API and worker startup report OBSERVABILITY_URL_INVALID and the new RUNTIME_IMAGE_INVALID instead of STARTUP_FAILED.
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
…RL_INVALID Review follow-up: a URL with credentials or a non-HTTP scheme logged STARTUP_FAILED, so the configuration docs' claim that any @ before the host reports OBSERVABILITY_URL_INVALID was only true for an empty user info. Also reword the breaking-changes clause so it no longer reads as if the chart lets uppercase repository paths through.
|
Codex review: needs maintainer review before merge. What this changesThis PR aligns Helm, operator tools, and controller startup with existing image-path and observability URL refusals. Example: Installation YAML sets observability.url to http://@grafana.example.internal/d.
Review scores
ProductKind: Bug fix · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review Keep this PR open for maintainer triage: it closes verified validation gaps still present on current main, with no concrete introduced defect found. Priority: P2 Before mergeNone. FindingsNone. Tests
Agent review detailsHow this fits togetherInstallation profiles, Helm values, and operator flags supply images and URLs; packaging and controller composition validate them before database or Kubernetes operations. flowchart TD
A[Installation profile] --> B[Profile preflight]
B --> C[Helm values and Installation YAML]
C --> D[Helm validation]
C --> E[API and worker startup]
F[Operator image flags] --> G[Image tool validation]
E --> H[Kubernetes Compute validation]
Technical reviewBest possible solution: Use the existing validation boundaries consistently, preserving valid image hosts and tags and explicitly refusing rewritten observability URLs. Do we have a high-confidence way to reproduce the issue? Current-main source establishes both gaps, and the PR reports failing-before/passing-after cases; no target code was executed during this review. Is this the best way to solve the issue? The patch extends the existing owners and shared URL check without adding a competing configuration path or changing supported valid image spellings. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 1a0c30a23f33. Provenance checked
TestingProof path: in-process harness. SecurityNone. EvidenceWhat I checked:
Likely related people:
Review metrics
LabelsLabel changes:
Label justifications:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment Reviewed October 13, 2026, 4:53 PM ET / 20:53 UTC. |
Problem
#2358 made profile preflight refuse two spellings that other layers still accepted:
InvalidImageName), yet the chart's image rule (images.*,repositoryCredentials.image),prepare-bootstrap-volume,upgrade-production-imagesand Compute's gateway and Agent image check all accepted it.@before theobservability.urlhost (http://@host). URL parsing drops the empty user info, and Installation startup stored the host alone, while preflight refuses it.Change
images.*andrepositoryCredentials.imagefail with... repository path must be lowercase; Kubernetes refuses to pull an uppercase one, using fix(profiles): refuse an @ before url hosts and uppercase image repository paths #2358's rule (uppercase only in the registry host, the first component when a/follows it, and in the tag).prepare-bootstrap-volume --imageandupgrade-production-images --controller-image/--broker-image/--runtime-imagerefuse the same, with the same sentence.@before theobservability.urlhost (refuseWrittenUserinfo, asOCC_AUTH_BASE_URLdoes since fix(profiles): refuse an @ before url hosts and uppercase image repository paths #2358).OBSERVABILITY_URL_INVALIDfor everyobservability.urlrefusal (credentials and non-HTTP schemes used to logSTARTUP_FAILED) and a newRUNTIME_IMAGE_INVALIDfor a gateway or Agent image without a required digest or with an uppercase repository path (both wereSTARTUP_FAILED).production-startup.mdanddrivers/kubernetes-compute.mdare left alone: they sit at 2498 and 2493 words.Verification
profile-preflight-chart-parity.test.mjs: uppercase repository paths fail preflight, the chart (Helm 3.19.2) and Compute.kubernetes-compute.test.mjs: Compute refuses uppercase repository paths for both roles, with and without a digest, and accepts an uppercase registry host, tag and IPv6 bracket host.configuration-startup.test.mjs: Installation startup refuseshttp://@host,https://:@host,http:@host, a tab-split form and an@before an IPv4 host; API and worker reportOBSERVABILITY_URL_INVALID(also for a user name and ajavascript:URL) andRUNTIME_IMAGE_INVALIDbefore opening PostgreSQL.bootstrap-volume.test.mjs,production-image-upgrade.test.mjs: each image flag refuses an uppercase repository path.taskset -c 0,1): chart parity, Compute, startup and both image tools, each 20/20.tsc --build, ESLint and Prettier clean on touched files.Risks
RUNTIME_IMAGE_INVALIDis a new startup log code; operators that matchedSTARTUP_FAILEDfor those cases see the more specific code.