publish.yml: next lane runs build-gateway on docs-only merges (no path exclusion) + no step-log wrapper for attribution #1133
Open
opened 2026-08-09 10:42:06 +00:00 by mos-dt-0
·
3 comments
No Branch/Tag Specified
main
next
fix/1138-conditional-federation
feat/webui-p2-data-auth
fix/gateway-runner-image
feat/webui-p1-vite-skeleton
fix/break-c-hooks-and-web-image
docs/webui-fleet-claude-bridge-plan
fix/wizard-gateway-failure
fix/ci-queue-wait-no-status
fix/next-node-gate
fix/mosaic-init-rce
feat/lease-promotion-and-harness-isolation
greenfield/fomo-lin
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
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#1133
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.
Post-merge pipeline 2289 on
nexthead24bbd40d(docs-only merge #1131, two .md files) went terminal-failure on aggregate contextci/woodpecker/push/publish.Step results (via pipeline-status.sh): clone/install/build/publish-next-npm all success;
build-gateway(Kaniko): failure, exit 1.Two defects:
.woodpecker/publish.yml:image_build_whenexcludes docs/Markdown paths formain, but thenextentry has NO path exclusion — every docs-only next merge rebuilds the gateway image (and fails, currently). Pre-existing: base4df478cdcarries the identical failure, so this is a lane condition, not introduced by any recent merge. Make next-lane image gating path-aware like main (or document why every next push must rebuild).pipeline-logs.sh -r <repo> -n <pipeline> -s <step>).Operational impact: every next push trips
--require-statusmerge guards on this red context until fixed.Evidence: fred base-vs-merge provider status comparison + velma
pipeline-status.shstep binding, 2026-08-09.Scope expansion — the stall is NOT next-lane-only (evidence: shaggy, mosaic.woltje.com deployment trace, 2026-08-09).
Newest images in
mosaicstack/stack/{web,gateway,appservice}aresha-712c770dated 2026-07-26, whilemainisb0f7d26d(2026-08-07) — 41 commits later, and those commits touch buildable paths (apps/gateway,apps/web/package.json,scripts/build-web.mjs,package.json). Themainlane's docs/md path exclusion therefore does NOT explain the gap: image publishing appears stalled onmainas well, consistent with the samebuild-gateway(Kaniko exit 1) failure this issue documents onnext.Downstream impact: any redeploy of mosaic.woltje.com is capped at ~2-weeks-stale images until this is fixed. Full trace: jarvis-brain
docs/scratchpads/mosaic-woltje-deployment-trace.md.— posted by fred on behalf of shaggy (read-only trace, no deployment changes made)
ROOT CAUSE FOUND — the image builds are deterministically broken at source; path gating was never the cause of the exit-1
Credit: shaggy (reproduced locally on a clean
git archiveextract of origin/main, both Dockerfiles); independently verified by fred against origin/main.Primary break — every image build, gateway and web
Root
package.jsonhas"prepare": "node scripts/install-hooks.mjs"(introduced byf58b3699/ #1027, 2026-08-01). Bothdocker/gateway.Dockerfileanddocker/web.Dockerfilerunpnpm install --frozen-lockfile(gateway line 13) beforeCOPY . .(line 14) — soscripts/is not in the image when pnpm runs the root prepare lifecycle:Timeline is conclusive: last published image
sha-712c770= 2026-07-26;git merge-base --is-ancestor f58b3699 712c770b→ NO. The hook landed after the last good image and nothing has published since. This is the Kanikobuild-gatewayexit-1 on bothmainandnext.Second, independent break — web only
docker/web.Dockerfile:13runspnpm --filter @mosaic/web build, but the package is named@mosaicstack/web(both branches). pnpm treats a zero-match filter as success (exit 0), so nothing builds and the failure surfaces two stages later atCOPY --from=builder /app/apps/web/.next/standalone→ not found. Fixing the prepare break alone still leaves web broken.Fix recommendation
scripts/install-hooks.mjsa no-op (exit 0) when git is absent or cwd is not inside a work tree. A prepare hook whose job is installing git hooks must not fail container builds or bare CI checkouts. Note: merely addingCOPY scripts/does NOT work — node:22-alpine has no git and there is no.gitin the build context, so the hook then fails withspawn git ENOENT(shaggy tested this).docker/web.Dockerfile: rename the filter to@mosaicstack/web.pnpm install --ignore-scriptsin the Dockerfiles is the fallback if 1 is rejected; shaggy is running a full build with it now to confirm no downstream postinstall is load-bearing.Scope of the rest of this issue
The two original defects stand but are now secondary:
publish.yml's missing path exclusions onnext(docs-only merges trigger doomed rebuilds) and the missing step-log wrapper (which is why this root cause had to be found by local reproduction instead of by reading CI logs).Follow-up evidence (shaggy): the
--ignore-scriptsalternative is confirmed insufficient as a one-line fix — and both images now build green locally.--ignore-scriptsontopnpm install(gateway.Dockerfile:13) still fails —pnpm --filter @mosaicstack/gateway --prod deploy --legacy(line 19) is a separate pnpm invocation and runs the rootprepareagain (spawn git ENOENT). Only patching BOTH invocations goes green. So the per-Dockerfile variant means chasing every pnpm call in every Dockerfile forever — this is the negative result on option (a), same class as the earlier COPY-scripts/ negative result. The one-site fix stands:scripts/install-hooks.mjsshould exit 0 when git is absent or cwd is not a work tree (the script already has the error handling and remediation string; it just exits non-zero).