Repository navigation
feat: add sync-main-to-edge workflow + .gitupstream - #559
Conversation
Calls the reusable workflow at nsheaps/github-actions/.github/workflows/sync-main-to-edge.yaml@main on every push to main, syncing main into the */edge branches listed in .gitupstream. Depends on nsheaps/github-actions#24 landing first. Refs nsheaps/.ai-agent-alex#685. Co-Authored-By: Agent Alex Picard <alex-nsheaps[bot]@users.noreply.github.com>
There was a problem hiding this comment.
👍 Already merged — recap + one open follow-up
✅ PR merged at 20:55:10Z; dep nsheaps/github-actions#24 merged 75s earlier at 20:53:55Z — merge ordering OK
✅ Reusable workflow now on main of nsheaps/github-actions (verified via contents API)
✅ test_mode boolean coercion safe across triggers (verified previously)
✅ .gitupstream schema matches reusable workflow's yq parser
⚠️ Still on @main ref — repo convention is SHA-pin; tracking as a follow-up
🖱️ Click to expand for full details
✅ Reusable workflow now on
main of nsheaps/github-actions (verified via contents API)✅
test_mode boolean coercion safe across triggers (verified previously)✅
.gitupstream schema matches reusable workflow's yq parser@main ref — repo convention is SHA-pin; tracking as a follow-upState at review time
This PR is already merged (by @nsheaps at 2026-05-28T20:55:10Z). This is a post-merge follow-up review consolidating what was flagged previously.
What resolved itself
- Merge ordering (thread): nsheaps/github-actions#24 landed first (20:53:55Z vs 20:55:10Z), so the first push-to-
mainafter merge had the reusable workflow available. Thread resolved. - Open question #1 (pre-seed
alex/edge): confirmed safe — reusable workflow skips missing targets. test_modecoercion: verified acrosspush,workflow_dispatchdefault, andworkflow_dispatchtrue paths.
What's still open (non-blocking, follow-up only)
- SHA-pin (thread):
uses: nsheaps/github-actions/.github/workflows/sync-main-to-edge.yaml@mainwas merged as-is. Every othernsheaps/github-actionsreference in this repo is SHA-pinned per.claude/rules/ci-cd/conventions.md. Because this file is sync-files–managed from nsheaps/.github, the pin needs to land in the upstream template (nsheaps/.github#63) — otherwise any direct edit here would revert on the next sync.
Scoring rationale
- Quality 95%: same as prior review — clean, minimal, well-commented. -5 for the unresolved
@maindeviation from repo convention (still present in merged code). - Security 85%: unchanged —
@mainfor acontents: writereusable workflow is the only risk; same-org so blast radius is low. - Simplicity 100%: two small files, no abstractions beyond what's needed.
- Confidence 98%: +3 over prior review now that both the dep workflow file and this PR are on
mainand verifiable.
Recommended follow-ups (non-blocking):
- SHA-pin the reusable workflow ref. Best done by updating the template in nsheaps/.github#63 so the next sync-files run propagates a pinned
@<sha> # sync-main-to-edge@mainform into all consumer repos. Direct edits here will be overwritten. - Optional: explicitly set
config_path: .gitupstreamin the caller for future-proofing if the schema location ever moves (currently defaulting is fine).
Footnotes
-
Workflow Run: https://github.com/nsheaps/ai-mktpl/actions/runs/26601481970/attempts/1 ↩
-
Dependency PR (now merged): nsheaps/github-actions#24 ↩
-
Distribution PR (sync-files template): nsheaps/.github#63 ↩
-
Repo CI/CD conventions: .claude/rules/ci-cd/conventions.md ↩
Summary
Adds the edge-sync consumer workflow +
.gitupstreamconfig to this repo. The workflow delegates to the reusable workflow in nsheaps/github-actions#24; the config lists which*/edgebranches to keep in sync withmain..github/workflows/sync-main-to-edge.yaml— fires on push-to-main(andworkflow_dispatch).gitupstream— YAML config listing edge targetsThe workflow file is also distributed by nsheaps/.github#63 via sync-files; we're seeding it here so the repo works standalone and sync-files will pick up from there idempotently.
Depends on
Test plan
maintriggers the workflow and syncs configured edge branches (no-op when targets already up-to-date or missing)Open Questions
.gitupstreamcurrently hassync: []as a placeholder. Should I instead pre-seed withalex/edgeeven though the branch doesn't exist? The reusable workflow skips missing targets, so either works.uses:points at@main(the reusable). Want a SHA-pin instead for reproducibility?Refs nsheaps/.ai-agent-alex#685.
🤖 Generated with Claude Code
Decisions (Q1/Q2/Q3 follow-up 2026-05-28)
Nate answered the original Open Questions (Discord msg):
uses: ...@mainfor the reusable..gitupstream): Seed each agent repo with<agent>/edgetarget + create the branch. Done in this PR set;alex/edge,jack/edge,henry/edgenow exist on their respective repos.push: branches:[main],schedule: '0 6 * * *'(nightly UTC),workflow_dispatch:.Full follow-up: https://github.com/nsheaps/.ai-agent-alex/blob/main/docs/journal/2026/05/28/edge-sync-q2q3-followup.md