← ClaudeAtlas

bridge-promotelisted

Promote CORE changes from your user branch to upstream (Scope-Routing per scope: core → OSS upstream, org → your org overlay, user → local). Analyzes commits, categorizes by CORE/USER/ORG path+frontmatter rules, runs mandatory content-safety checks per repo (leak scanner + blocklist, refuses on PII/customer hits), and creates fork-based PRs to upstream repos — no upstream push access needed. For file-level community contributions with adaptation, use the bridge-contribute skill (/contribute) instead. Trigger: "/bridge-promote", "promote", "cherry-pick", "push to upstream", "promote to upstream", "promote commits".
bks-lab/open-bridge · ★ 8 · AI & Automation · score 74
Install: claude install-skill bks-lab/open-bridge
# Bridge Promote — Scope Routing Routes commits from `user/*` to the right upstream based on `scope:` frontmatter (or path inference). See CLAUDE.md § Tier Model. | Commit scope | Goes to | How | |---|---|---| | `scope: core` (or unset, on CORE-allowlist path) | the upstream with **`scope: core`** (e.g. `bks-lab/open-bridge:main`) plus any org/personal overlay that also carries it | Cherry-pick to local `development`, then PR to the OSS upstream | | `scope: org` | the upstream with **`scope: org`** only (your org overlay, e.g. `<your-org>/<your-bridge>:development`) | Cherry-pick + PR to that repo | | `scope: personal` | the upstream with **`scope: personal`** only (your personal overlay) | Cherry-pick + PR to that repo | | `scope: user` / `private` | **stays local** on `user/{name}` | No-op | **Destination selection is by SCOPE, never by `role:` alone.** For a commit/file of scope `S`, the destination is the `bridge-config.yaml.upstreams[]` entry whose **`scope:` field == `S`** — `core`→the `scope: core` upstream, `org`→the `scope: org` upstream, `personal`→the `scope: personal` upstream. Two upstreams may now share `role: org-overlay` (an org overlay **and** a personal overlay), so `role` no longer identifies a unique destination. **FAIL-CLOSED guard (mandatory).** Before routing, count the upstreams with `role: org-overlay`. If that count is `> 1` **and** the routing would still pick any destination by `role` (rather than by a matching `scope:` field), **ABORT** — do n