main is red: container image publishing fails registry auth (dormant behind a path filter, revealed by #1094) #1095
Open
opened 2026-08-07 05:50:13 +00:00 by Mos
·
2 comments
No Branch/Tag Specified
main
greenfield/fomo-lin
feat/lease-promotion-and-harness-isolation
fix/1099-pipefail-wake
fix/1099-pipefail-tests
fix/1099-pipefail-sweep
fix/framework-shell-portability
fix/1043-pane-git-identity
fix/1081-issue-close-silent-comment-failure
fix/1090-enrollment-wallclock-tolerance
feat/1082-tea-stale-token-diagnostic
fix/detect-platform-silent-128-outside-repo
feat/1050-install-state-machine-red-fixture
fix/pr-merge-message-field
feat/1051-mosaic-brain-installer
feat/1045-mosaic-cred
remediation/state
fix/1056-upgrade-rollback-control-race
fix/1019-ci-queue-timeout-harness
next
feat/rm-02-gate-registry
fix/rm-01-reproducible-checkout
remediation/mission-setup
fix/hygiene-inert-format-gate
fix/1019-queue-guard-stdin
feat/mos-ste-writing-standard
fix/1007-suite-hermeticity
fix/991-comment-url-scheme-normalise
feat/push-guard-null-case-verification
mos-comms-live
docs/heartbeat-framework-layering-ms-lead
feat/869-c4-version-coupling
feat/869-c2-install-ordering-guard
feat/869-c5-doctor-activation-check
feat/per-agent-gitea-identity
fix/875-belongs-case-insensitive-slug
fix/ci-queue-wait-404-branch-absent
feat/869-c1-activation-probe
feat/869-c3-broker-supervisor
fix/865-tea-cli-comment-invocation
feat/glpi-skills
fix/860-deflake-mutator-lease-gate
fix/850-detect-platform-port-normalization
fix/856-worktree-deps-preflight
fix/835-pr-review-approve-reject-comment-flag
fix/848-truthful-evidence
fix/812-pr-review-comment
fix/849-recovery-runtime-fixture-race
docs/758-ledger-m5-001-sync
feat/834-tc-server-side-doc
feat/833-constrained-recovery-command
feat/827-gate0-probe
governance/gate0-probe3-amendment
fix/795-codex-pr-diff
fix/795-ci-base-jq
fix/795-ci-base-git
feat/791-pr3-fleet-regen
feat/791-pr2-snapshot-restore
fix/807-glpi-206
fix/808-agent-send-false-sender
feat/791-upgrade-config-protection
feat/790-mosaic-yolo-claudex-pr2
feat/790-mosaic-yolo-claudex
feat/758-v1-v2-migrator
fix/766-exact-fleet-comms
test/758-reconciler-lifecycle-gates
docs/771-kbn101-db-role-split
test/758-example-profile-dispositions
feat/758-shared-role-resolution
feat/mos-logical-identity-fencing
feat/769-kbn100-unified-schema
docs/753-kbn010-threat-gate
feat/758-roster-v2-compiler
feat/756-official-discord-plugin
docs/758-fleet-config-management
fix/mos-option2-qualification-format
docs/issue-758-m0
docs/mos-option2-qualification
mos-comms
feat/tess-interaction-agent
fix/tess-docs-format
draft/mosaic-platform-prd
fix/installer-provider-gate-and-local-gateway-redis
release/mosaic-cli-0.0.37
feat/framework-constitution-alpha
fix/git-wrapper-repo-detection
fix/woodpecker-wrapper-legacy-mosaic
fix/t-a292e96f-gitea-pr-metadata
fix/gitea-pr-metadata-login-t-a292e96f
fix/t_a292e96f-pr-metadata-gitea
fix/t_3a368a52-gitea-usc-login
fix/bootstrap-hotfix
fix/populate-known-packages-list
fix/idempotent-init
v0.0.39-alpha
mosaic-v0.0.31
fed-v0.2.0-m2
fed-v0.1.0-m1
mosaic-v0.0.29
mosaic-v0.0.28
mosaic-v0.0.27
mosaic-v0.0.26
mosaic-v0.0.25
mosaic-v0.0.24
v0.2.0
v0.1.0
v0.0.8
v0.0.7
v0.0.6
v0.0.5
v0.0.4
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mosaicstack/stack#1095
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
main's container image publishing is broken, and has been dormant behind a path filterAll three container builds fail on
mainwith a registry authentication error. This was revealed, not caused, by merging #1094.The failure
Pipeline 2265 (
main@42ac19af),publishworkflow:All three, identically:
This is not a code failure. The build never gets past the registry auth check.
Why nobody has seen it
.woodpecker/publish.yml:16gates container builds on a path exclude list:Recent
maintraffic has been framework-only. Verified:build-*steps80a45b1e8ff7aac042ac19af#1094touchedapps/gateway/**, which is outside the exclude list. It is the firstmainpush in some time to reach this path.Two credential sets, one broken
The npm-registry path authenticates fine. The container-registry path does not. That is consistent with
gitea_username/gitea_passwordbeing unset, expired, or lackingwrite:package— but I have not inspected the secrets and am not going to.Impact
mainis red onpush/publishright now.mainpush touchingapps/**,src/**,docker/**or anything else outside the exclude list will fail the same way.mainfor however long this has been broken. I have not established how long — only that it did not run on the two prior pushes I checked.What this needs
An owner for the container-registry credential (
gitea_username/gitea_password). This is an access problem, not a code problem, and it is outside what I can fix or verify without handling secrets that are not mine.Not affected
#1085 touches
.woodpecker/ci.ymlandpackages/mosaic/framework/tools/git/**— both excluded. Merging it will not trigger container builds and will not compound this.Method note
This is the same shape as the USC deploy brake: a failure sitting dormant behind a filter, invisible until something crossed the filter. The sequencing step that reads
mainafter each merge is what surfaced it — a hash-and-review gate would have reported the merge clean.⚠
mainis green again. That is masking, not a fix. Do not close this on a greenmain.Predicted before the merge that caused it, and confirmed after.
What happened
#1085merged tomainataa0a7b5f. Its paths —.woodpecker/ci.ymlandpackages/mosaic/framework/tools/git/**— are both onpublish.yml's exclude list, so the container builds did not run.The failing steps were not fixed, retried, or skipped-with-a-reason. They were never scheduled.
Why this matters more than the failure itself
A reader checking
mainright now seespush/publish = successand would reasonably conclude the container registry works. It does not. The nextmainpush touching anything outsidepackages/mosaic/**,docs/**,**/*.md,.woodpecker/**will fail exactly as pipeline 2265 did.This is the same shape as the dormancy that hid it in the first place: the green is a property of what was scheduled, not of what works.
The test that actually discriminates
Do not use
main's status. Use either:mainpush (or manual run) touching a non-excluded path, and checkbuild-gateway; orgitea_username/gitea_passwordcan authenticate to the container registry with push scope.Both answer the question.
mainbeing green answers a different one.Unchanged
Still needs a credential owner. Still outside what I can fix or verify without handling secrets that are not mine. I have not inspected them and have not established how long this has been broken.
This is no longer dormant — it fired on
maintoday, and here is the log#1105merged as3a1203b2f83d. Its merged-mainrun (pipeline 2275) failed all three image builds:Cause confirmed from the step log, not inferred:
kaniko writes the registry credential and then cannot authenticate to push. That is this issue's defect,
reproducing.
Why it has looked quiet — and why that was never evidence
This issue records the defect as "dormant behind a path filter." That reading is now confirmed and the
mechanism is precise:
publish.ymlexcludespackages/mosaic/**,docs/**,**/*.mdand.woodpecker/**, so any merge touching only those paths never runs the image builds at all.Recent merges did exactly that:
#1100→df4c591apackages/mosaic/**,docs/**#1105→3a1203b2f83dtools/*.sh,scripts/*Before merging
#1105I stated in advance that its run would exercise the container path and that a redthere would be this issue surfacing rather than a defect in that PR. That is why the result is usable: it
was declared non-evidence about
#1105before it existed. The 4-vs-7 step count is the measureddiscriminator — "this run exercises the path" is checkable, not asserted.
What this changes
mainis red onci/woodpecker/push/publishright now at3a1203b2f83d.is fixed. That is now most merges —
tools/,scripts/,apps/,packages/other thanmosaic.ciworkflow is a separate context and was still running when this was written; it is unaffected bythe registry credential.
enable_status_check=falseon this repo, so a redpublishdoes not block anything at the provider.It blocks nothing mechanically and it publishes no images.
What this does not change
I am not attributing this to
#1105, and nobody else should.#1105is a shell-hardening change thattouches no build input, no Dockerfile and no registry configuration. Its own PR-branch CI was terminal-green
(pipeline 2274, 9/9), and the merged-tree
ciworkflow is independent ofpublish.Registry credentials are an operator concern and I am not touching them.