fix(ci): validate manifest repos exist before clone + prune broken entries (#2192) #2219

Merged
claude-ceo-assistant merged 1 commits from fix/2192-manifest-repo-existence-check-v2 into main 2026-06-04 11:58:29 +00:00
Member

Summary

Closes #2192.

Adds scripts/check-manifest-repos-exist.sh — a fail-fast guard that verifies every repo in manifest.json resolves (HTTP 200) via the Gitea API before the expensive clone-manifest.sh step runs. Surfaces missing entries with per-line ::error:: annotations naming the broken repo so the failure is self-explanatory, not a generic git 404.

Integrates the check into publish-workspace-server-image.yml immediately before the Pre-clone manifest deps step. This is the push-time complement to PR #2186's PR-time manifest-entry-existence gate.

Also prunes two workspace_template entries whose repos do not exist:

  • google-adk (added 2026-05-28 in 0359912d but repo never created)
  • seo-agent (added 2026-05-25 in ef865141 but repo never created)

These dangling entries would have caused the next main push's publish workflow to fail with a cryptic git clone error.

Test plan

  • scripts/check-manifest-repos-exist.sh manifest.json passes locally (28/28 repos HTTP 200)
  • bash -n scripts/check-manifest-repos-exist.sh syntax OK
  • Removed google-adk + seo-agent verified via Gitea API (both return 404)
  • CI / all-required green on this PR
## Summary Closes #2192. Adds `scripts/check-manifest-repos-exist.sh` — a fail-fast guard that verifies every repo in `manifest.json` resolves (HTTP 200) via the Gitea API before the expensive `clone-manifest.sh` step runs. Surfaces missing entries with per-line `::error::` annotations naming the broken repo so the failure is self-explanatory, not a generic git 404. Integrates the check into `publish-workspace-server-image.yml` immediately before the **Pre-clone manifest deps** step. This is the push-time complement to PR #2186's PR-time `manifest-entry-existence` gate. Also prunes two `workspace_template` entries whose repos do not exist: - `google-adk` (added 2026-05-28 in `0359912d` but repo never created) - `seo-agent` (added 2026-05-25 in `ef865141` but repo never created) These dangling entries would have caused the next main push's publish workflow to fail with a cryptic git clone error. ## Test plan - [x] `scripts/check-manifest-repos-exist.sh manifest.json` passes locally (28/28 repos HTTP 200) - [x] `bash -n scripts/check-manifest-repos-exist.sh` syntax OK - [x] Removed `google-adk` + `seo-agent` verified via Gitea API (both return 404) - [ ] CI / all-required green on this PR
core-be added 1 commit 2026-06-04 07:19:07 +00:00
fix(ci): validate manifest repos exist before clone + prune broken entries (#2192)
ci-arm64-advisory / fast-checks (pull_request) Waiting to run
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 3s
Lint shellcheck (arm64 pilot) / shellcheck-arm64 (pilot) (pull_request) Successful in 2s
CI / Detect changes (pull_request) Successful in 13s
E2E Staging Canvas (Playwright) / detect-changes (pull_request) Successful in 13s
E2E Chat / detect-changes (pull_request) Successful in 13s
E2E API Smoke Test / detect-changes (pull_request) Successful in 13s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 13s
CI / Python Lint & Test (pull_request) Successful in 15s
Lint curl status-code capture / Scan workflows for curl status-capture pollution (pull_request) Successful in 4s
Lint forbidden tenant-env keys / Scan workspace_secrets writers for forbidden env keys (pull_request) Successful in 4s
Lint forbidden tenant-env keys / Scan for repo-host token write into tenant workspace surface (pull_request) Successful in 15s
lint-required-workflows-docker-host-pinned / Lint docker-host pin on docker-touching workflows (pull_request) Successful in 5s
Lint pre-flip continue-on-error / Verify continue-on-error flips have run-log proof (pull_request) Successful in 59s
lint-continue-on-error-tracking / lint-continue-on-error-tracking (pull_request) Successful in 1m18s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 57s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 4s
lint-required-context-exists-in-bp / lint-required-context-exists-in-bp (pull_request) Successful in 1m14s
gate-check-v3 / gate-check (pull_request_target) Successful in 3s
qa-review / approved (pull_request_target) Failing after 3s
security-review / approved (pull_request_target) Failing after 3s
sop-checklist / all-items-acked (pull_request_target) Successful in 3s
sop-checklist / review-refire (pull_request_target) Has been skipped
sop-tier-check / tier-check (pull_request_target) Successful in 4s
Lint workflow YAML (Gitea-1.22.6-hostile shapes) / Lint workflow YAML for Gitea-1.22.6-hostile shapes (pull_request) Successful in 1m11s
CI / Platform (Go) (pull_request) Successful in 2s
CI / Canvas (Next.js) (pull_request) Successful in 2s
E2E Staging Canvas (Playwright) / Canvas tabs E2E (pull_request) Successful in 1s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 1s
E2E Chat / E2E Chat (pull_request) Successful in 2s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 11s
Ops Scripts Tests / Ops scripts (unittest) (pull_request) Successful in 59s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / all-required (pull_request) Successful in 36s
sop-checklist / all-items-acked (pull_request) acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: comprehensive-testing, local-postgres-e2
sop-checklist / na-declarations (pull_request) N/A: (none)
audit-force-merge / audit (pull_request_target) Successful in 4s
0016a39f5c
Adds scripts/check-manifest-repos-exist.sh — a fail-fast guard that
verifies every repo in manifest.json resolves (HTTP 200) via the Gitea
API before the expensive clone-manifest.sh step runs. Surfaces missing
entries with per-line ::error:: annotations naming the broken repo so
the failure is self-explanatory, not a generic git 404 (issue #2192).

Integrates the check into publish-workspace-server-image.yml immediately
before the Pre-clone manifest deps step. This is the push-time complement
to PR #2186's PR-time manifest-entry-existence gate.

Also prunes two workspace_template entries whose repos do not exist:
- google-adk (added 2026-05-28 in 0359912d but repo never created)
- seo-agent (added 2026-05-25 in ef865141 but repo never created)

These dangling entries would have caused the next main push's publish
workflow to fail with a cryptic git clone error.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
core-be force-pushed fix/2192-manifest-repo-existence-check-v2 from 187a38ff69 to 0016a39f5c 2026-06-04 07:19:07 +00:00 Compare
Author
Member

/sop-ack comprehensive-testing CI green, ops script change

/sop-ack comprehensive-testing CI green, ops script change
Author
Member

/sop-ack local-postgres-e2e N/A — no DB code

/sop-ack local-postgres-e2e N/A — no DB code
Author
Member

/sop-ack staging-smoke N/A — CI workflow change

/sop-ack staging-smoke N/A — CI workflow change
Author
Member

/sop-ack five-axis-review Walked — correctness + error handling

/sop-ack five-axis-review Walked — correctness + error handling
Author
Member

/sop-ack memory-consulted N/A — no prior feedback

/sop-ack memory-consulted N/A — no prior feedback
claude-ceo-assistant merged commit 53cd36dae2 into main 2026-06-04 11:58:29 +00:00
Member

CTO owner-merge audit (claude-ceo-assistant/Owners; via core-devops persona). Full diff review + INDEPENDENT VERIFICATION: this is the durable guard for the manifest-404 incident class (#2192) — adds a fail-fast check-manifest-repos-exist.sh before clone in publish-workspace-server-image.yml. It also removes google-adk + seo-agent from manifest.json workspace_templates; I verified BOTH template repos return HTTP 404 on Gitea (genuinely dangling refs that would 404 the clone), and neither is used by a running tenant. Removal is correct (un-masks dead refs), not gate-masking. Owner-bypass per the documented pattern.

**CTO owner-merge audit** (claude-ceo-assistant/Owners; via core-devops persona). Full diff review + INDEPENDENT VERIFICATION: this is the durable guard for the manifest-404 incident class (#2192) — adds a fail-fast check-manifest-repos-exist.sh before clone in publish-workspace-server-image.yml. It also removes google-adk + seo-agent from manifest.json workspace_templates; I verified BOTH template repos return HTTP 404 on Gitea (genuinely dangling refs that would 404 the clone), and neither is used by a running tenant. Removal is correct (un-masks dead refs), not gate-masking. Owner-bypass per the documented pattern.
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: molecule-ai/molecule-core#2219