{"id":"0aa52e3e-94de-4ef3-bd57-5c84f4f02b76","entityType":"agent","slug":"clawhub-athola-nm-sanctum-stack-push","name":"stack-push","canonicalUrl":"https://www.xpersona.co/agent/clawhub-athola-nm-sanctum-stack-push","canonicalPath":"/agent/clawhub-athola-nm-sanctum-stack-push","generatedAt":"2026-10-12T00:01:22.437Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T19:48:22.175Z","emptyReason":null},"description":"Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice Skill: stack-push Owner: athola Summary: Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:20:58.628Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:41:00.328Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:57:50.191Z | user Release v1.9.16 v1.9.14 |","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17emme0e2m3cpf7k2jvp3a84984b8z9:nm-sanctum-stack-push","sourceUrl":"https://clawhub.ai/athola/nm-sanctum-stack-push","homepage":"https://clawhub.ai/athola/skills/nm-sanctum-stack-push","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/athola/nm-sanctum-stack-push","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/athola/skills/nm-sanctum-stack-push","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice S"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T19:48:22.175Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T19:48:22.175Z","emptyReason":null},"stars":null,"forks":null,"downloads":1001,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.9.19","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T19:48:22.108Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T19:48:22.175Z","lastCrawledAt":"2026-10-11T19:48:22.108Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T19:48:22.108Z","lastVerifiedAt":null,"highlights":[{"version":"1.9.19","createdAt":"2026-08-26T13:20:58.628Z","changelog":"Release v1.9.19","fileCount":3,"zipByteSize":3562},{"version":"1.9.17","createdAt":"2026-07-30T05:41:00.328Z","changelog":"Release v1.9.17","fileCount":3,"zipByteSize":3503},{"version":"1.9.16","createdAt":"2026-07-14T19:57:50.191Z","changelog":"Release v1.9.16","fileCount":3,"zipByteSize":3607},{"version":"1.9.14","createdAt":"2026-06-30T18:05:39.317Z","changelog":"Release v1.9.14","fileCount":3,"zipByteSize":3504},{"version":"1.9.13","createdAt":"2026-06-27T16:23:30.780Z","changelog":"Release v1.9.13","fileCount":3,"zipByteSize":3525},{"version":"1.9.12","createdAt":"2026-06-19T03:18:57.818Z","changelog":"Release v1.9.12","fileCount":3,"zipByteSize":3411},{"version":"1.0.0","createdAt":"2026-06-18T15:20:58.636Z","changelog":"- Initial release of stack-push skill, ported from claude-night-market/sanctum. - Automates pushing all branches in a stack and opening or updating one dependent PR per slice, each targeting its parent branch. - Guides users through branch listing, pushing, PR creation/update, and posting a stack summary. - Supports both git and jj CLI workflows. - Integrates with additional skills for stack creation and PR preparation. - Requires progress tracked via TodoWrite items for workflow visibility.","fileCount":3,"zipByteSize":3495}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17emme0e2m3cpf7k2jvp3a84984b8z9:nm-sanctum-stack-push","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-stack-push/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-stack-push/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-stack-push/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-stack-push/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-stack-push/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-stack-push/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-12T00:01:22.436Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-stack-push/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-stack-push/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-stack-push/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-sanctum-stack-push/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T19:48:22.175Z","emptyReason":null},"readme":"Skill: stack-push\n\nOwner: athola\n\nSummary: Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice\n\nTags: latest:1.9.19\n\nVersion history:\n\nv1.9.19 | 2026-08-26T13:20:58.628Z | user\n\nRelease v1.9.19\n\nv1.9.17 | 2026-07-30T05:41:00.328Z | user\n\nRelease v1.9.17\n\nv1.9.16 | 2026-07-14T19:57:50.191Z | user\n\nRelease v1.9.16\n\nv1.9.14 | 2026-06-30T18:05:39.317Z | user\n\nRelease v1.9.14\n\nv1.9.13 | 2026-06-27T16:23:30.780Z | user\n\nRelease v1.9.13\n\nv1.9.12 | 2026-06-19T03:18:57.818Z | user\n\nRelease v1.9.12\n\nv1.0.0 | 2026-06-18T15:20:58.636Z | auto\n\n- Initial release of stack-push skill, ported from claude-night-market/sanctum.\n- Automates pushing all branches in a stack and opening or updating one dependent PR per slice, each targeting its parent branch.\n- Guides users through branch listing, pushing, PR creation/update, and posting a stack summary.\n- Supports both git and jj CLI workflows.\n- Integrates with additional skills for stack creation and PR preparation.\n- Requires progress tracked via TodoWrite items for workflow visibility.\n\nArchive index:\n\nArchive v1.9.19: 3 files, 3562 bytes\n\nFiles: skill-card.md (2146b), SKILL.md (4719b), _meta.json (141b)\n\nFile v1.9.19:SKILL.md\n\n---\nname: stack-push\ndescription: |\n  Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice\nversion: 1.9.8\ntriggers:\n  - git\n  - stacked-diffs\n  - pr\n  - push\n  - github\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\u2699\\ufe0f\", \"requires\": {\"config\": [\"night-market.sanctum:stack-create\", \"night-market.sanctum:pr-prep\", \"night-market.sanctum:git-workspace-review\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Stack Push\n\nPush all branches in a stack and open (or update) one PR\nper slice, with each PR targeting its parent branch as base.\n\n## When to Use\n\nRun `stack-push` after `stack-create` has initialized the\nbranch topology and at least one commit exists on each\nslice branch.\nAlso run it after adding commits to any slice to update\nopen PRs.\n\n## Prerequisites\n\n- `stack-create` completed: branches exist with commits\n- `gh` CLI authenticated (`gh auth status`)\n- Each slice branch has at least one commit beyond its base\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items before starting:\n\n1. `stack-push:branches-listed`\n2. `stack-push:branches-pushed`\n3. `stack-push:prs-opened`\n4. `stack-push:stack-summary-posted`\n\n## Step 1: List Stack Branches (`branches-listed`)\n\nIdentify all branches in the stack.\nBy convention they share a `stack/<feature-name>/` prefix:\n\n```bash\nSTACK=stack/my-feature\nBASE=master\n\ngit branch --list \"${STACK}/*\" | sed 's/^[* ]*//'\n```\n\nVerify each branch has commits beyond the base:\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//'); do\n  count=$(git rev-list --count \\\n    \"$(git merge-base ${BASE} ${branch})..${branch}\")\n  echo \"${branch}: ${count} commit(s)\"\ndone\n```\n\nAny branch showing `0 commits` must have work added before\npushing.\n\n## Step 2: Push Branches (`branches-pushed`)\n\nPush every slice branch to the remote in stack order\n(base slice first):\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  git push --set-upstream origin \"${branch}\"\n  echo \"pushed: ${branch}\"\ndone\n```\n\n### jj Accelerator (if available)\n\n```bash\njj git push --all\n```\n\n## Step 3: Open or Update PRs (`prs-opened`)\n\nCreate one PR per slice, targeting its parent branch.\nFor the first slice the parent is `master`; for subsequent\nslices the parent is the previous slice's branch.\n\n```bash\nPREV_BASE=master\n\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n\n  # Check if a PR already exists for this branch\n  existing=$(gh pr list \\\n    --head \"${branch}\" \\\n    --json number \\\n    --jq '.[0].number' 2>/dev/null)\n\n  if [ -n \"${existing}\" ]; then\n    echo \"PR #${existing} already open for ${branch} -- skipping\"\n  else\n    gh pr create \\\n      --base \"${PREV_BASE}\" \\\n      --head \"${branch}\" \\\n      --title \"[$(echo ${branch} | sed 's|.*/||')] <title>\" \\\n      --body \"Part of stack \\`${STACK}\\`.\" \\\n      --draft\n    echo \"opened PR for ${branch} (base: ${PREV_BASE})\"\n  fi\n\n  PREV_BASE=\"${branch}\"\ndone\n```\n\nFill in the actual PR titles and bodies before removing\nthe `--draft` flag.\nRun `Skill(sanctum:pr-prep)` on each slice to generate\nquality-gated descriptions.\n\n## Step 4: Post Stack Summary (`stack-summary-posted`)\n\nAfter all PRs are open, post a summary comment on the\nfirst PR (the root of the stack) listing the full chain:\n\n```bash\nROOT_PR=$(gh pr list \\\n  --head \"${STACK}/$(git branch --list \\\n    \"${STACK}/*\" | sed 's/^[* ]*//' | sort | head -1 \\\n    | sed 's|.*/||')\" \\\n  --json number --jq '.[0].number')\n\n# Build the stack table\nBODY=\"## Stack\\n\\n| # | Branch | PR |\\n|---|--------|----|\\n\"\nN=1\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  pr_num=$(gh pr list --head \"${branch}\" \\\n    --json number --jq '.[0].number')\n  BODY=\"${BODY}| ${N} | \\`${branch}\\` | #${pr_num} |\\n\"\n  N=$((N+1))\ndone\n\ngh pr comment \"${ROOT_PR}\" --body \"$(printf \"${BODY}\")\"\n```\n\n## Notes\n\n- Always push in stack order so GitHub sees the parent\n  branch before the child PR is opened\n- Use `--draft` by default; promote slices to ready\n  individually as they pass review\n- After any `git rebase --update-refs` run, re-push with\n  `git push --force-with-lease` (never `--force`)\n- When a base PR merges, run `Skill(sanctum:stack-rebase)`\n  to cascade the rebase before updating the next PR's base\n\nFile v1.9.19:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-stack-push\",\n  \"version\": \"1.9.19\",\n  \"publishedAt\": 1787750458628\n}\n\nFile v1.9.19:skill-card.md\n\n## Description:\n\nPushes all branches in a stack and opens or updates one dependent PR per slice after stack-create publishes the stack or after commits are added to a slice.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[athola](https://clawhub.ai/user/athola)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to publish stacked Git branches, create or update dependent GitHub draft PRs, and post a stack summary after validating branch topology.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The workflow can push branches, create GitHub draft PRs, and post comments in a remote repository.\n\nMitigation: Review the branch prefix, base branch, PR titles, PR bodies, and stack summary before allowing commands to run.\n\nRisk: Running against the wrong repository, base branch, or stack prefix can publish unintended branches or PRs.\n\nMitigation: Confirm the repository, STACK value, BASE value, branch list, and GitHub CLI authentication status before executing generated commands.\n\nRisk: Updating a rebased stack may require a force push.\n\nMitigation: Use force-with-lease rather than force, as the artifact guidance states.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-sanctum-stack-push)\n- [Sanctum plugin homepage](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration]\n\n**Output Format:** [Markdown with inline bash command blocks and checklist-style progress tracking]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires an initialized stack, authenticated GitHub CLI access, and repository review before executing generated commands.]\n\n## Skill Version(s):\n\n1.9.19 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.9.17: 3 files, 3503 bytes\n\nFiles: skill-card.md (2003b), SKILL.md (4719b), _meta.json (141b)\n\nFile v1.9.17:SKILL.md\n\n---\nname: stack-push\ndescription: |\n  Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice\nversion: 1.9.8\ntriggers:\n  - git\n  - stacked-diffs\n  - pr\n  - push\n  - github\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\u2699\\ufe0f\", \"requires\": {\"config\": [\"night-market.sanctum:stack-create\", \"night-market.sanctum:pr-prep\", \"night-market.sanctum:git-workspace-review\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Stack Push\n\nPush all branches in a stack and open (or update) one PR\nper slice, with each PR targeting its parent branch as base.\n\n## When to Use\n\nRun `stack-push` after `stack-create` has initialized the\nbranch topology and at least one commit exists on each\nslice branch.\nAlso run it after adding commits to any slice to update\nopen PRs.\n\n## Prerequisites\n\n- `stack-create` completed: branches exist with commits\n- `gh` CLI authenticated (`gh auth status`)\n- Each slice branch has at least one commit beyond its base\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items before starting:\n\n1. `stack-push:branches-listed`\n2. `stack-push:branches-pushed`\n3. `stack-push:prs-opened`\n4. `stack-push:stack-summary-posted`\n\n## Step 1: List Stack Branches (`branches-listed`)\n\nIdentify all branches in the stack.\nBy convention they share a `stack/<feature-name>/` prefix:\n\n```bash\nSTACK=stack/my-feature\nBASE=master\n\ngit branch --list \"${STACK}/*\" | sed 's/^[* ]*//'\n```\n\nVerify each branch has commits beyond the base:\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//'); do\n  count=$(git rev-list --count \\\n    \"$(git merge-base ${BASE} ${branch})..${branch}\")\n  echo \"${branch}: ${count} commit(s)\"\ndone\n```\n\nAny branch showing `0 commits` must have work added before\npushing.\n\n## Step 2: Push Branches (`branches-pushed`)\n\nPush every slice branch to the remote in stack order\n(base slice first):\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  git push --set-upstream origin \"${branch}\"\n  echo \"pushed: ${branch}\"\ndone\n```\n\n### jj Accelerator (if available)\n\n```bash\njj git push --all\n```\n\n## Step 3: Open or Update PRs (`prs-opened`)\n\nCreate one PR per slice, targeting its parent branch.\nFor the first slice the parent is `master`; for subsequent\nslices the parent is the previous slice's branch.\n\n```bash\nPREV_BASE=master\n\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n\n  # Check if a PR already exists for this branch\n  existing=$(gh pr list \\\n    --head \"${branch}\" \\\n    --json number \\\n    --jq '.[0].number' 2>/dev/null)\n\n  if [ -n \"${existing}\" ]; then\n    echo \"PR #${existing} already open for ${branch} -- skipping\"\n  else\n    gh pr create \\\n      --base \"${PREV_BASE}\" \\\n      --head \"${branch}\" \\\n      --title \"[$(echo ${branch} | sed 's|.*/||')] <title>\" \\\n      --body \"Part of stack \\`${STACK}\\`.\" \\\n      --draft\n    echo \"opened PR for ${branch} (base: ${PREV_BASE})\"\n  fi\n\n  PREV_BASE=\"${branch}\"\ndone\n```\n\nFill in the actual PR titles and bodies before removing\nthe `--draft` flag.\nRun `Skill(sanctum:pr-prep)` on each slice to generate\nquality-gated descriptions.\n\n## Step 4: Post Stack Summary (`stack-summary-posted`)\n\nAfter all PRs are open, post a summary comment on the\nfirst PR (the root of the stack) listing the full chain:\n\n```bash\nROOT_PR=$(gh pr list \\\n  --head \"${STACK}/$(git branch --list \\\n    \"${STACK}/*\" | sed 's/^[* ]*//' | sort | head -1 \\\n    | sed 's|.*/||')\" \\\n  --json number --jq '.[0].number')\n\n# Build the stack table\nBODY=\"## Stack\\n\\n| # | Branch | PR |\\n|---|--------|----|\\n\"\nN=1\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  pr_num=$(gh pr list --head \"${branch}\" \\\n    --json number --jq '.[0].number')\n  BODY=\"${BODY}| ${N} | \\`${branch}\\` | #${pr_num} |\\n\"\n  N=$((N+1))\ndone\n\ngh pr comment \"${ROOT_PR}\" --body \"$(printf \"${BODY}\")\"\n```\n\n## Notes\n\n- Always push in stack order so GitHub sees the parent\n  branch before the child PR is opened\n- Use `--draft` by default; promote slices to ready\n  individually as they pass review\n- After any `git rebase --update-refs` run, re-push with\n  `git push --force-with-lease` (never `--force`)\n- When a base PR merges, run `Skill(sanctum:stack-rebase)`\n  to cascade the rebase before updating the next PR's base\n\nFile v1.9.17:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-stack-push\",\n  \"version\": \"1.9.17\",\n  \"publishedAt\": 1785390060328\n}\n\nFile v1.9.17:skill-card.md\n\n## Description: <br>\nPushes all branches in a stack and opens or updates one dependent PR per slice. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill after creating a stacked branch topology to push each slice branch, open or update dependent draft pull requests, and post a stack summary on GitHub. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The workflow can push branches, create draft pull requests, and add a GitHub PR comment using the active repository and authenticated account. <br>\nMitigation: Confirm the repository, remote, stack prefix, base branch, and GitHub authentication account before running the commands. <br>\nRisk: Republishing after rebases can overwrite remote branch history if the wrong push mode is used. <br>\nMitigation: Use git push --force-with-lease for rebased stack branches and avoid plain --force. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-sanctum-stack-push) <br>\n- [Night Market sanctum homepage](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Shell commands, Markdown, Configuration instructions] <br>\n**Output Format:** [Markdown with inline bash code blocks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires an existing Git branch stack, a GitHub remote, and an authenticated gh CLI session.] <br>\n\n## Skill Version(s): <br>\n1.9.17 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.16: 3 files, 3607 bytes\n\nFiles: skill-card.md (2332b), SKILL.md (4719b), _meta.json (141b)\n\nFile v1.9.16:SKILL.md\n\n---\nname: stack-push\ndescription: |\n  Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice\nversion: 1.9.8\ntriggers:\n  - git\n  - stacked-diffs\n  - pr\n  - push\n  - github\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\u2699\\ufe0f\", \"requires\": {\"config\": [\"night-market.sanctum:stack-create\", \"night-market.sanctum:pr-prep\", \"night-market.sanctum:git-workspace-review\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Stack Push\n\nPush all branches in a stack and open (or update) one PR\nper slice, with each PR targeting its parent branch as base.\n\n## When to Use\n\nRun `stack-push` after `stack-create` has initialized the\nbranch topology and at least one commit exists on each\nslice branch.\nAlso run it after adding commits to any slice to update\nopen PRs.\n\n## Prerequisites\n\n- `stack-create` completed: branches exist with commits\n- `gh` CLI authenticated (`gh auth status`)\n- Each slice branch has at least one commit beyond its base\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items before starting:\n\n1. `stack-push:branches-listed`\n2. `stack-push:branches-pushed`\n3. `stack-push:prs-opened`\n4. `stack-push:stack-summary-posted`\n\n## Step 1: List Stack Branches (`branches-listed`)\n\nIdentify all branches in the stack.\nBy convention they share a `stack/<feature-name>/` prefix:\n\n```bash\nSTACK=stack/my-feature\nBASE=master\n\ngit branch --list \"${STACK}/*\" | sed 's/^[* ]*//'\n```\n\nVerify each branch has commits beyond the base:\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//'); do\n  count=$(git rev-list --count \\\n    \"$(git merge-base ${BASE} ${branch})..${branch}\")\n  echo \"${branch}: ${count} commit(s)\"\ndone\n```\n\nAny branch showing `0 commits` must have work added before\npushing.\n\n## Step 2: Push Branches (`branches-pushed`)\n\nPush every slice branch to the remote in stack order\n(base slice first):\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  git push --set-upstream origin \"${branch}\"\n  echo \"pushed: ${branch}\"\ndone\n```\n\n### jj Accelerator (if available)\n\n```bash\njj git push --all\n```\n\n## Step 3: Open or Update PRs (`prs-opened`)\n\nCreate one PR per slice, targeting its parent branch.\nFor the first slice the parent is `master`; for subsequent\nslices the parent is the previous slice's branch.\n\n```bash\nPREV_BASE=master\n\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n\n  # Check if a PR already exists for this branch\n  existing=$(gh pr list \\\n    --head \"${branch}\" \\\n    --json number \\\n    --jq '.[0].number' 2>/dev/null)\n\n  if [ -n \"${existing}\" ]; then\n    echo \"PR #${existing} already open for ${branch} -- skipping\"\n  else\n    gh pr create \\\n      --base \"${PREV_BASE}\" \\\n      --head \"${branch}\" \\\n      --title \"[$(echo ${branch} | sed 's|.*/||')] <title>\" \\\n      --body \"Part of stack \\`${STACK}\\`.\" \\\n      --draft\n    echo \"opened PR for ${branch} (base: ${PREV_BASE})\"\n  fi\n\n  PREV_BASE=\"${branch}\"\ndone\n```\n\nFill in the actual PR titles and bodies before removing\nthe `--draft` flag.\nRun `Skill(sanctum:pr-prep)` on each slice to generate\nquality-gated descriptions.\n\n## Step 4: Post Stack Summary (`stack-summary-posted`)\n\nAfter all PRs are open, post a summary comment on the\nfirst PR (the root of the stack) listing the full chain:\n\n```bash\nROOT_PR=$(gh pr list \\\n  --head \"${STACK}/$(git branch --list \\\n    \"${STACK}/*\" | sed 's/^[* ]*//' | sort | head -1 \\\n    | sed 's|.*/||')\" \\\n  --json number --jq '.[0].number')\n\n# Build the stack table\nBODY=\"## Stack\\n\\n| # | Branch | PR |\\n|---|--------|----|\\n\"\nN=1\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  pr_num=$(gh pr list --head \"${branch}\" \\\n    --json number --jq '.[0].number')\n  BODY=\"${BODY}| ${N} | \\`${branch}\\` | #${pr_num} |\\n\"\n  N=$((N+1))\ndone\n\ngh pr comment \"${ROOT_PR}\" --body \"$(printf \"${BODY}\")\"\n```\n\n## Notes\n\n- Always push in stack order so GitHub sees the parent\n  branch before the child PR is opened\n- Use `--draft` by default; promote slices to ready\n  individually as they pass review\n- After any `git rebase --update-refs` run, re-push with\n  `git push --force-with-lease` (never `--force`)\n- When a base PR merges, run `Skill(sanctum:stack-rebase)`\n  to cascade the rebase before updating the next PR's base\n\nFile v1.9.16:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-stack-push\",\n  \"version\": \"1.9.16\",\n  \"publishedAt\": 1784059070191\n}\n\nFile v1.9.16:skill-card.md\n\n## Description: <br>\nPushes all branches in a stack and opens or updates one dependent GitHub pull request per slice. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers use this skill after creating a stacked branch topology to publish each slice, create draft dependent pull requests, and post a stack summary for reviewers. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The workflow can push branches or create pull requests against the wrong repository, remote, stack prefix, base branch, or GitHub account. <br>\nMitigation: Confirm the repository, origin remote, STACK value, BASE branch, and authenticated gh account before running push or pull request commands. <br>\nRisk: The optional jj git push --all accelerator may push more refs than the stack-specific loop. <br>\nMitigation: Prefer the stack-specific git push loop for routine use, or inspect refs carefully before using jj git push --all. <br>\nRisk: Generated pull request titles, bodies, and stack summary comments may be incomplete or misleading. <br>\nMitigation: Keep pull requests as drafts until titles, descriptions, branch ordering, and summary comments have been reviewed. <br>\n\n\n## Reference(s): <br>\n- [Sanctum plugin homepage](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum) <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-sanctum-stack-push) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, guidance] <br>\n**Output Format:** [Markdown guidance with inline bash command blocks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Includes Git, GitHub CLI, and optional jj command examples; the agent should review the repository, remote, stack prefix, base branch, and account before use.] <br>\n\n## Skill Version(s): <br>\n1.9.16 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.14: 3 files, 3504 bytes\n\nFiles: skill-card.md (2041b), SKILL.md (4719b), _meta.json (141b)\n\nFile v1.9.14:SKILL.md\n\n---\nname: stack-push\ndescription: |\n  Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice\nversion: 1.9.8\ntriggers:\n  - git\n  - stacked-diffs\n  - pr\n  - push\n  - github\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\u2699\\ufe0f\", \"requires\": {\"config\": [\"night-market.sanctum:stack-create\", \"night-market.sanctum:pr-prep\", \"night-market.sanctum:git-workspace-review\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Stack Push\n\nPush all branches in a stack and open (or update) one PR\nper slice, with each PR targeting its parent branch as base.\n\n## When to Use\n\nRun `stack-push` after `stack-create` has initialized the\nbranch topology and at least one commit exists on each\nslice branch.\nAlso run it after adding commits to any slice to update\nopen PRs.\n\n## Prerequisites\n\n- `stack-create` completed: branches exist with commits\n- `gh` CLI authenticated (`gh auth status`)\n- Each slice branch has at least one commit beyond its base\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items before starting:\n\n1. `stack-push:branches-listed`\n2. `stack-push:branches-pushed`\n3. `stack-push:prs-opened`\n4. `stack-push:stack-summary-posted`\n\n## Step 1: List Stack Branches (`branches-listed`)\n\nIdentify all branches in the stack.\nBy convention they share a `stack/<feature-name>/` prefix:\n\n```bash\nSTACK=stack/my-feature\nBASE=master\n\ngit branch --list \"${STACK}/*\" | sed 's/^[* ]*//'\n```\n\nVerify each branch has commits beyond the base:\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//'); do\n  count=$(git rev-list --count \\\n    \"$(git merge-base ${BASE} ${branch})..${branch}\")\n  echo \"${branch}: ${count} commit(s)\"\ndone\n```\n\nAny branch showing `0 commits` must have work added before\npushing.\n\n## Step 2: Push Branches (`branches-pushed`)\n\nPush every slice branch to the remote in stack order\n(base slice first):\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  git push --set-upstream origin \"${branch}\"\n  echo \"pushed: ${branch}\"\ndone\n```\n\n### jj Accelerator (if available)\n\n```bash\njj git push --all\n```\n\n## Step 3: Open or Update PRs (`prs-opened`)\n\nCreate one PR per slice, targeting its parent branch.\nFor the first slice the parent is `master`; for subsequent\nslices the parent is the previous slice's branch.\n\n```bash\nPREV_BASE=master\n\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n\n  # Check if a PR already exists for this branch\n  existing=$(gh pr list \\\n    --head \"${branch}\" \\\n    --json number \\\n    --jq '.[0].number' 2>/dev/null)\n\n  if [ -n \"${existing}\" ]; then\n    echo \"PR #${existing} already open for ${branch} -- skipping\"\n  else\n    gh pr create \\\n      --base \"${PREV_BASE}\" \\\n      --head \"${branch}\" \\\n      --title \"[$(echo ${branch} | sed 's|.*/||')] <title>\" \\\n      --body \"Part of stack \\`${STACK}\\`.\" \\\n      --draft\n    echo \"opened PR for ${branch} (base: ${PREV_BASE})\"\n  fi\n\n  PREV_BASE=\"${branch}\"\ndone\n```\n\nFill in the actual PR titles and bodies before removing\nthe `--draft` flag.\nRun `Skill(sanctum:pr-prep)` on each slice to generate\nquality-gated descriptions.\n\n## Step 4: Post Stack Summary (`stack-summary-posted`)\n\nAfter all PRs are open, post a summary comment on the\nfirst PR (the root of the stack) listing the full chain:\n\n```bash\nROOT_PR=$(gh pr list \\\n  --head \"${STACK}/$(git branch --list \\\n    \"${STACK}/*\" | sed 's/^[* ]*//' | sort | head -1 \\\n    | sed 's|.*/||')\" \\\n  --json number --jq '.[0].number')\n\n# Build the stack table\nBODY=\"## Stack\\n\\n| # | Branch | PR |\\n|---|--------|----|\\n\"\nN=1\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  pr_num=$(gh pr list --head \"${branch}\" \\\n    --json number --jq '.[0].number')\n  BODY=\"${BODY}| ${N} | \\`${branch}\\` | #${pr_num} |\\n\"\n  N=$((N+1))\ndone\n\ngh pr comment \"${ROOT_PR}\" --body \"$(printf \"${BODY}\")\"\n```\n\n## Notes\n\n- Always push in stack order so GitHub sees the parent\n  branch before the child PR is opened\n- Use `--draft` by default; promote slices to ready\n  individually as they pass review\n- After any `git rebase --update-refs` run, re-push with\n  `git push --force-with-lease` (never `--force`)\n- When a base PR merges, run `Skill(sanctum:stack-rebase)`\n  to cascade the rebase before updating the next PR's base\n\nFile v1.9.14:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-stack-push\",\n  \"version\": \"1.9.14\",\n  \"publishedAt\": 1782842739317\n}\n\nFile v1.9.14:skill-card.md\n\n## Description: <br>\nPushes all branches in a stacked-diff branch set and opens or updates one dependent GitHub pull request per slice. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill after creating or updating a stacked branch topology to push each slice and prepare draft GitHub pull requests against their parent branches. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The workflow can push branches, create draft pull requests, and post pull request comments in a GitHub repository. <br>\nMitigation: Confirm repository trust, GitHub authentication, and the STACK and BASE variables before running the commands. <br>\nRisk: Incorrect stack ordering or branch base selection can create misleading dependent pull requests. <br>\nMitigation: Review the listed branches and commit counts before pushing, and keep pull requests in draft until titles, bodies, and bases are checked. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-sanctum-stack-push) <br>\n- [Sanctum plugin homepage](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, shell commands, markdown] <br>\n**Output Format:** [Markdown with inline bash commands and checklist items] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Includes branch, pull request, and stack-summary command sequences that users review and adapt before execution.] <br>\n\n## Skill Version(s): <br>\n1.9.14 (source: server release) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.13: 3 files, 3525 bytes\n\nFiles: skill-card.md (2067b), SKILL.md (4719b), _meta.json (141b)\n\nFile v1.9.13:SKILL.md\n\n---\nname: stack-push\ndescription: |\n  Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice\nversion: 1.9.8\ntriggers:\n  - git\n  - stacked-diffs\n  - pr\n  - push\n  - github\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\u2699\\ufe0f\", \"requires\": {\"config\": [\"night-market.sanctum:stack-create\", \"night-market.sanctum:pr-prep\", \"night-market.sanctum:git-workspace-review\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Stack Push\n\nPush all branches in a stack and open (or update) one PR\nper slice, with each PR targeting its parent branch as base.\n\n## When to Use\n\nRun `stack-push` after `stack-create` has initialized the\nbranch topology and at least one commit exists on each\nslice branch.\nAlso run it after adding commits to any slice to update\nopen PRs.\n\n## Prerequisites\n\n- `stack-create` completed: branches exist with commits\n- `gh` CLI authenticated (`gh auth status`)\n- Each slice branch has at least one commit beyond its base\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items before starting:\n\n1. `stack-push:branches-listed`\n2. `stack-push:branches-pushed`\n3. `stack-push:prs-opened`\n4. `stack-push:stack-summary-posted`\n\n## Step 1: List Stack Branches (`branches-listed`)\n\nIdentify all branches in the stack.\nBy convention they share a `stack/<feature-name>/` prefix:\n\n```bash\nSTACK=stack/my-feature\nBASE=master\n\ngit branch --list \"${STACK}/*\" | sed 's/^[* ]*//'\n```\n\nVerify each branch has commits beyond the base:\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//'); do\n  count=$(git rev-list --count \\\n    \"$(git merge-base ${BASE} ${branch})..${branch}\")\n  echo \"${branch}: ${count} commit(s)\"\ndone\n```\n\nAny branch showing `0 commits` must have work added before\npushing.\n\n## Step 2: Push Branches (`branches-pushed`)\n\nPush every slice branch to the remote in stack order\n(base slice first):\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  git push --set-upstream origin \"${branch}\"\n  echo \"pushed: ${branch}\"\ndone\n```\n\n### jj Accelerator (if available)\n\n```bash\njj git push --all\n```\n\n## Step 3: Open or Update PRs (`prs-opened`)\n\nCreate one PR per slice, targeting its parent branch.\nFor the first slice the parent is `master`; for subsequent\nslices the parent is the previous slice's branch.\n\n```bash\nPREV_BASE=master\n\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n\n  # Check if a PR already exists for this branch\n  existing=$(gh pr list \\\n    --head \"${branch}\" \\\n    --json number \\\n    --jq '.[0].number' 2>/dev/null)\n\n  if [ -n \"${existing}\" ]; then\n    echo \"PR #${existing} already open for ${branch} -- skipping\"\n  else\n    gh pr create \\\n      --base \"${PREV_BASE}\" \\\n      --head \"${branch}\" \\\n      --title \"[$(echo ${branch} | sed 's|.*/||')] <title>\" \\\n      --body \"Part of stack \\`${STACK}\\`.\" \\\n      --draft\n    echo \"opened PR for ${branch} (base: ${PREV_BASE})\"\n  fi\n\n  PREV_BASE=\"${branch}\"\ndone\n```\n\nFill in the actual PR titles and bodies before removing\nthe `--draft` flag.\nRun `Skill(sanctum:pr-prep)` on each slice to generate\nquality-gated descriptions.\n\n## Step 4: Post Stack Summary (`stack-summary-posted`)\n\nAfter all PRs are open, post a summary comment on the\nfirst PR (the root of the stack) listing the full chain:\n\n```bash\nROOT_PR=$(gh pr list \\\n  --head \"${STACK}/$(git branch --list \\\n    \"${STACK}/*\" | sed 's/^[* ]*//' | sort | head -1 \\\n    | sed 's|.*/||')\" \\\n  --json number --jq '.[0].number')\n\n# Build the stack table\nBODY=\"## Stack\\n\\n| # | Branch | PR |\\n|---|--------|----|\\n\"\nN=1\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  pr_num=$(gh pr list --head \"${branch}\" \\\n    --json number --jq '.[0].number')\n  BODY=\"${BODY}| ${N} | \\`${branch}\\` | #${pr_num} |\\n\"\n  N=$((N+1))\ndone\n\ngh pr comment \"${ROOT_PR}\" --body \"$(printf \"${BODY}\")\"\n```\n\n## Notes\n\n- Always push in stack order so GitHub sees the parent\n  branch before the child PR is opened\n- Use `--draft` by default; promote slices to ready\n  individually as they pass review\n- After any `git rebase --update-refs` run, re-push with\n  `git push --force-with-lease` (never `--force`)\n- When a base PR merges, run `Skill(sanctum:stack-rebase)`\n  to cascade the rebase before updating the next PR's base\n\nFile v1.9.13:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-stack-push\",\n  \"version\": \"1.9.13\",\n  \"publishedAt\": 1782577410780\n}\n\nFile v1.9.13:skill-card.md\n\n## Description: <br>\nPushes all branches in a stack and opens or updates one dependent PR per slice. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and maintainers use this skill to publish stacked Git branches and create or update a dependent GitHub pull request for each slice. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can guide an agent to push branches, create draft pull requests, and post GitHub comments using the user's authenticated GitHub permissions. <br>\nMitigation: Use it only when those repository changes are intended, keep pull requests as drafts until reviewed, and inspect generated commands before execution. <br>\nRisk: Stack publication can affect public review state if the wrong branches, bases, titles, or summaries are used. <br>\nMitigation: Confirm the stack prefix, base branch, branch order, and pull request body content before publishing or updating the stack. <br>\n\n\n## Reference(s): <br>\n- [Nm Sanctum Stack Push on ClawHub](https://clawhub.ai/athola/skills/nm-sanctum-stack-push) <br>\n- [Sanctum plugin homepage](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Shell commands, Guidance, Markdown] <br>\n**Output Format:** [Markdown with inline bash code blocks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Guides branch pushes, draft pull request creation, and stack summary comments for GitHub workflows.] <br>\n\n## Skill Version(s): <br>\n1.9.13 (source: server release metadata; artifact frontmatter says 1.9.8) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.12: 3 files, 3411 bytes\n\nFiles: skill-card.md (1796b), SKILL.md (4719b), _meta.json (141b)\n\nFile v1.9.12:SKILL.md\n\n---\nname: stack-push\ndescription: |\n  Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice\nversion: 1.9.8\ntriggers:\n  - git\n  - stacked-diffs\n  - pr\n  - push\n  - github\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\u2699\\ufe0f\", \"requires\": {\"config\": [\"night-market.sanctum:stack-create\", \"night-market.sanctum:pr-prep\", \"night-market.sanctum:git-workspace-review\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Stack Push\n\nPush all branches in a stack and open (or update) one PR\nper slice, with each PR targeting its parent branch as base.\n\n## When to Use\n\nRun `stack-push` after `stack-create` has initialized the\nbranch topology and at least one commit exists on each\nslice branch.\nAlso run it after adding commits to any slice to update\nopen PRs.\n\n## Prerequisites\n\n- `stack-create` completed: branches exist with commits\n- `gh` CLI authenticated (`gh auth status`)\n- Each slice branch has at least one commit beyond its base\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items before starting:\n\n1. `stack-push:branches-listed`\n2. `stack-push:branches-pushed`\n3. `stack-push:prs-opened`\n4. `stack-push:stack-summary-posted`\n\n## Step 1: List Stack Branches (`branches-listed`)\n\nIdentify all branches in the stack.\nBy convention they share a `stack/<feature-name>/` prefix:\n\n```bash\nSTACK=stack/my-feature\nBASE=master\n\ngit branch --list \"${STACK}/*\" | sed 's/^[* ]*//'\n```\n\nVerify each branch has commits beyond the base:\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//'); do\n  count=$(git rev-list --count \\\n    \"$(git merge-base ${BASE} ${branch})..${branch}\")\n  echo \"${branch}: ${count} commit(s)\"\ndone\n```\n\nAny branch showing `0 commits` must have work added before\npushing.\n\n## Step 2: Push Branches (`branches-pushed`)\n\nPush every slice branch to the remote in stack order\n(base slice first):\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  git push --set-upstream origin \"${branch}\"\n  echo \"pushed: ${branch}\"\ndone\n```\n\n### jj Accelerator (if available)\n\n```bash\njj git push --all\n```\n\n## Step 3: Open or Update PRs (`prs-opened`)\n\nCreate one PR per slice, targeting its parent branch.\nFor the first slice the parent is `master`; for subsequent\nslices the parent is the previous slice's branch.\n\n```bash\nPREV_BASE=master\n\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n\n  # Check if a PR already exists for this branch\n  existing=$(gh pr list \\\n    --head \"${branch}\" \\\n    --json number \\\n    --jq '.[0].number' 2>/dev/null)\n\n  if [ -n \"${existing}\" ]; then\n    echo \"PR #${existing} already open for ${branch} -- skipping\"\n  else\n    gh pr create \\\n      --base \"${PREV_BASE}\" \\\n      --head \"${branch}\" \\\n      --title \"[$(echo ${branch} | sed 's|.*/||')] <title>\" \\\n      --body \"Part of stack \\`${STACK}\\`.\" \\\n      --draft\n    echo \"opened PR for ${branch} (base: ${PREV_BASE})\"\n  fi\n\n  PREV_BASE=\"${branch}\"\ndone\n```\n\nFill in the actual PR titles and bodies before removing\nthe `--draft` flag.\nRun `Skill(sanctum:pr-prep)` on each slice to generate\nquality-gated descriptions.\n\n## Step 4: Post Stack Summary (`stack-summary-posted`)\n\nAfter all PRs are open, post a summary comment on the\nfirst PR (the root of the stack) listing the full chain:\n\n```bash\nROOT_PR=$(gh pr list \\\n  --head \"${STACK}/$(git branch --list \\\n    \"${STACK}/*\" | sed 's/^[* ]*//' | sort | head -1 \\\n    | sed 's|.*/||')\" \\\n  --json number --jq '.[0].number')\n\n# Build the stack table\nBODY=\"## Stack\\n\\n| # | Branch | PR |\\n|---|--------|----|\\n\"\nN=1\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  pr_num=$(gh pr list --head \"${branch}\" \\\n    --json number --jq '.[0].number')\n  BODY=\"${BODY}| ${N} | \\`${branch}\\` | #${pr_num} |\\n\"\n  N=$((N+1))\ndone\n\ngh pr comment \"${ROOT_PR}\" --body \"$(printf \"${BODY}\")\"\n```\n\n## Notes\n\n- Always push in stack order so GitHub sees the parent\n  branch before the child PR is opened\n- Use `--draft` by default; promote slices to ready\n  individually as they pass review\n- After any `git rebase --update-refs` run, re-push with\n  `git push --force-with-lease` (never `--force`)\n- When a base PR merges, run `Skill(sanctum:stack-rebase)`\n  to cascade the rebase before updating the next PR's base\n\nFile v1.9.12:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-stack-push\",\n  \"version\": \"1.9.12\",\n  \"publishedAt\": 1781839137818\n}\n\nFile v1.9.12:skill-card.md\n\n## Description: <br>\nPushes all branches in a stack and opens or updates one dependent PR per slice after a stack is created or updated. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to publish stacked Git branches to GitHub by pushing slice branches, opening or updating dependent draft PRs, and posting a stack summary. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can push branches and create or comment on GitHub pull requests. <br>\nMitigation: Review the branch prefix and base branch, keep PRs as drafts until checked, and confirm any push, force-with-lease push, PR creation, or PR comment before execution. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/nm-sanctum-stack-push) <br>\n- [Sanctum plugin homepage](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Shell commands, Markdown, Guidance] <br>\n**Output Format:** [Markdown with inline bash code blocks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces Git and GitHub CLI command guidance for stack branch publishing and draft PR workflows.] <br>\n\n## Skill Version(s): <br>\n1.9.12 (source: server release evidence; artifact frontmatter reports 1.9.8) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.0: 3 files, 3495 bytes\n\nFiles: skill-card.md (2008b), SKILL.md (4719b), _meta.json (140b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: stack-push\ndescription: |\n  Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice\nversion: 1.9.8\ntriggers:\n  - git\n  - stacked-diffs\n  - pr\n  - push\n  - github\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\u2699\\ufe0f\", \"requires\": {\"config\": [\"night-market.sanctum:stack-create\", \"night-market.sanctum:pr-prep\", \"night-market.sanctum:git-workspace-review\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Stack Push\n\nPush all branches in a stack and open (or update) one PR\nper slice, with each PR targeting its parent branch as base.\n\n## When to Use\n\nRun `stack-push` after `stack-create` has initialized the\nbranch topology and at least one commit exists on each\nslice branch.\nAlso run it after adding commits to any slice to update\nopen PRs.\n\n## Prerequisites\n\n- `stack-create` completed: branches exist with commits\n- `gh` CLI authenticated (`gh auth status`)\n- Each slice branch has at least one commit beyond its base\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items before starting:\n\n1. `stack-push:branches-listed`\n2. `stack-push:branches-pushed`\n3. `stack-push:prs-opened`\n4. `stack-push:stack-summary-posted`\n\n## Step 1: List Stack Branches (`branches-listed`)\n\nIdentify all branches in the stack.\nBy convention they share a `stack/<feature-name>/` prefix:\n\n```bash\nSTACK=stack/my-feature\nBASE=master\n\ngit branch --list \"${STACK}/*\" | sed 's/^[* ]*//'\n```\n\nVerify each branch has commits beyond the base:\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//'); do\n  count=$(git rev-list --count \\\n    \"$(git merge-base ${BASE} ${branch})..${branch}\")\n  echo \"${branch}: ${count} commit(s)\"\ndone\n```\n\nAny branch showing `0 commits` must have work added before\npushing.\n\n## Step 2: Push Branches (`branches-pushed`)\n\nPush every slice branch to the remote in stack order\n(base slice first):\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  git push --set-upstream origin \"${branch}\"\n  echo \"pushed: ${branch}\"\ndone\n```\n\n### jj Accelerator (if available)\n\n```bash\njj git push --all\n```\n\n## Step 3: Open or Update PRs (`prs-opened`)\n\nCreate one PR per slice, targeting its parent branch.\nFor the first slice the parent is `master`; for subsequent\nslices the parent is the previous slice's branch.\n\n```bash\nPREV_BASE=master\n\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n\n  # Check if a PR already exists for this branch\n  existing=$(gh pr list \\\n    --head \"${branch}\" \\\n    --json number \\\n    --jq '.[0].number' 2>/dev/null)\n\n  if [ -n \"${existing}\" ]; then\n    echo \"PR #${existing} already open for ${branch} -- skipping\"\n  else\n    gh pr create \\\n      --base \"${PREV_BASE}\" \\\n      --head \"${branch}\" \\\n      --title \"[$(echo ${branch} | sed 's|.*/||')] <title>\" \\\n      --body \"Part of stack \\`${STACK}\\`.\" \\\n      --draft\n    echo \"opened PR for ${branch} (base: ${PREV_BASE})\"\n  fi\n\n  PREV_BASE=\"${branch}\"\ndone\n```\n\nFill in the actual PR titles and bodies before removing\nthe `--draft` flag.\nRun `Skill(sanctum:pr-prep)` on each slice to generate\nquality-gated descriptions.\n\n## Step 4: Post Stack Summary (`stack-summary-posted`)\n\nAfter all PRs are open, post a summary comment on the\nfirst PR (the root of the stack) listing the full chain:\n\n```bash\nROOT_PR=$(gh pr list \\\n  --head \"${STACK}/$(git branch --list \\\n    \"${STACK}/*\" | sed 's/^[* ]*//' | sort | head -1 \\\n    | sed 's|.*/||')\" \\\n  --json number --jq '.[0].number')\n\n# Build the stack table\nBODY=\"## Stack\\n\\n| # | Branch | PR |\\n|---|--------|----|\\n\"\nN=1\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  pr_num=$(gh pr list --head \"${branch}\" \\\n    --json number --jq '.[0].number')\n  BODY=\"${BODY}| ${N} | \\`${branch}\\` | #${pr_num} |\\n\"\n  N=$((N+1))\ndone\n\ngh pr comment \"${ROOT_PR}\" --body \"$(printf \"${BODY}\")\"\n```\n\n## Notes\n\n- Always push in stack order so GitHub sees the parent\n  branch before the child PR is opened\n- Use `--draft` by default; promote slices to ready\n  individually as they pass review\n- After any `git rebase --update-refs` run, re-push with\n  `git push --force-with-lease` (never `--force`)\n- When a base PR merges, run `Skill(sanctum:stack-rebase)`\n  to cascade the rebase before updating the next PR's base\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-stack-push\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1781796058636\n}\n\nFile v1.0.0:skill-card.md\n\n## Description: <br>\nPushes all branches in a stack and opens or updates one dependent PR per slice after stack-create or after adding commits to a slice. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to publish stacked git branches by pushing each slice, opening or updating dependent GitHub draft PRs, and posting a stack summary. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The workflow can push branches, create GitHub pull requests, and post PR comments in the authenticated repository. <br>\nMitigation: Review the branch list, GitHub authentication target, generated PR titles and bodies, and each command before allowing writes. <br>\nRisk: Updating a rebased stack can require force-pushing branch updates. <br>\nMitigation: Use force-with-lease only after confirming the intended base branch and stack order. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/nm-sanctum-stack-push) <br>\n- [Sanctum plugin homepage](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Shell commands, Markdown] <br>\n**Output Format:** [Markdown with inline bash code blocks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Produces git, jj, and GitHub CLI workflow guidance for branch pushes, draft PR creation, and stack summary comments.] <br>\n\n## Skill Version(s): <br>\n1.0.0 (source: ClawHub release metadata; artifact frontmatter reports 1.9.8) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: stack-push Owner: athola Summary: Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:20:58.628Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:41:00.328Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:57:50.191Z | user Release v1.9.16 v1.9.14 |","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"STACK=stack/my-feature\nBASE=master\n\ngit branch --list \"${STACK}/*\" | sed 's/^[* ]*//'"},{"language":"bash","snippet":"for branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//'); do\n  count=$(git rev-list --count \\\n    \"$(git merge-base ${BASE} ${branch})..${branch}\")\n  echo \"${branch}: ${count} commit(s)\"\ndone"},{"language":"bash","snippet":"for branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  git push --set-upstream origin \"${branch}\"\n  echo \"pushed: ${branch}\"\ndone"},{"language":"bash","snippet":"jj git push --all"},{"language":"bash","snippet":"PREV_BASE=master\n\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n\n  # Check if a PR already exists for this branch\n  existing=$(gh pr list \\\n    --head \"${branch}\" \\\n    --json number \\\n    --jq '.[0].number' 2>/dev/null)\n\n  if [ -n \"${existing}\" ]; then\n    echo \"PR #${existing} already open for ${branch} -- skipping\"\n  else\n    gh pr create \\\n      --base \"${PREV_BASE}\" \\\n      --head \"${branch}\" \\\n      --title \"[$(echo ${branch} | sed 's|.*/||')] <title>\" \\\n      --body \"Part of stack \\`${STACK}\\`.\" \\\n      --draft\n    echo \"opened PR for ${branch} (base: ${PREV_BASE})\"\n  fi\n\n  PREV_BASE=\"${branch}\"\ndone"},{"language":"bash","snippet":"ROOT_PR=$(gh pr list \\\n  --head \"${STACK}/$(git branch --list \\\n    \"${STACK}/*\" | sed 's/^[* ]*//' | sort | head -1 \\\n    | sed 's|.*/||')\" \\\n  --json number --jq '.[0].number')\n\n# Build the stack table\nBODY=\"## Stack\\n\\n| # | Branch | PR |\\n|---|--------|----|\\n\"\nN=1\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  pr_num=$(gh pr list --head \"${branch}\" \\\n    --json number --jq '.[0].number')\n  BODY=\"${BODY}| ${N} | \\`${branch}\\` | #${pr_num} |\\n\"\n  N=$((N+1))\ndone\n\ngh pr comment \"${ROOT_PR}\" --body \"$(printf \"${BODY}\")\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: stack-push\ndescription: |\n  Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice\nversion: 1.9.8\ntriggers:\n  - git\n  - stacked-diffs\n  - pr\n  - push\n  - github\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/sanctum\", \"emoji\": \"\\u2699\\ufe0f\", \"requires\": {\"config\": [\"night-market.sanctum:stack-create\", \"night-market.sanctum:pr-prep\", \"night-market.sanctum:git-workspace-review\"]}}}\nsource: claude-night-market\nsource_plugin: sanctum\n---\n\n> **Night Market Skill** — ported from [claude-night-market/sanctum](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Stack Push\n\nPush all branches in a stack and open (or update) one PR\nper slice, with each PR targeting its parent branch as base.\n\n## When to Use\n\nRun `stack-push` after `stack-create` has initialized the\nbranch topology and at least one commit exists on each\nslice branch.\nAlso run it after adding commits to any slice to update\nopen PRs.\n\n## Prerequisites\n\n- `stack-create` completed: branches exist with commits\n- `gh` CLI authenticated (`gh auth status`)\n- Each slice branch has at least one commit beyond its base\n\n## Required Progress Tracking\n\nCreate `TodoWrite` items before starting:\n\n1. `stack-push:branches-listed`\n2. `stack-push:branches-pushed`\n3. `stack-push:prs-opened`\n4. `stack-push:stack-summary-posted`\n\n## Step 1: List Stack Branches (`branches-listed`)\n\nIdentify all branches in the stack.\nBy convention they share a `stack/<feature-name>/` prefix:\n\n```bash\nSTACK=stack/my-feature\nBASE=master\n\ngit branch --list \"${STACK}/*\" | sed 's/^[* ]*//'\n```\n\nVerify each branch has commits beyond the base:\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//'); do\n  count=$(git rev-list --count \\\n    \"$(git merge-base ${BASE} ${branch})..${branch}\")\n  echo \"${branch}: ${count} commit(s)\"\ndone\n```\n\nAny branch showing `0 commits` must have work added before\npushing.\n\n## Step 2: Push Branches (`branches-pushed`)\n\nPush every slice branch to the remote in stack order\n(base slice first):\n\n```bash\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n  git push --set-upstream origin \"${branch}\"\n  echo \"pushed: ${branch}\"\ndone\n```\n\n### jj Accelerator (if available)\n\n```bash\njj git push --all\n```\n\n## Step 3: Open or Update PRs (`prs-opened`)\n\nCreate one PR per slice, targeting its parent branch.\nFor the first slice the parent is `master`; for subsequent\nslices the parent is the previous slice's branch.\n\n```bash\nPREV_BASE=master\n\nfor branch in $(git branch --list \"${STACK}/*\" \\\n    | sed 's/^[* ]*//' | sort); do\n\n  # Check if a PR already exists for this branch\n  existing=$(gh pr list \\\n    --head \"${branch}\" \\\n    --json number \\\n    --jq '.[0].number' 2>/dev/null)\n\n  if"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-sanctum-stack-push\",\n  \"version\": \"1.9.19\",\n  \"publishedAt\": 1787750458628\n}"},{"path":"skill-card.md","content":"## Description:\n\nPushes all branches in a stack and opens or updates one dependent PR per slice after stack-create publishes the stack or after commits are added to a slice.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[athola](https://clawhub.ai/user/athola)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to publish stacked Git branches, create or update dependent GitHub draft PRs, and post a stack summary after validating branch topology.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The workflow can push branches, create GitHub draft PRs, and post comments in a remote repository.\n\nMitigation: Review the branch prefix, base branch, PR titles, PR bodies, and stack summary before allowing commands to run.\n\nRisk: Running against the wrong repository, base branch, or stack prefix can publish unintended branches or PRs.\n\nMitigation: Confirm the repository, STACK value, BASE value, branch list, and GitHub CLI authentication status before executing generated commands.\n\nRisk: Updating a rebased stack may require a force push.\n\nMitigation: Use force-with-lease rather than force, as the artifact guidance states.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-sanctum-stack-push)\n- [Sanctum plugin homepage](https://github.com/athola/claude-night-market/tree/master/plugins/sanctum)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Markdown, Shell commands, Configuration]\n\n**Output Format:** [Markdown with inline bash command blocks and checklist-style progress tracking]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires an initialized stack, authenticated GitHub CLI access, and repository review before executing generated commands.]\n\n## Skill Version(s):\n\n1.9.19 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice Skill: stack-push Owner: athola Summary: Pushes all branches in a stack and opens or updates one dependent PR per slice. Use after stack-create to publish the stack or after adding commits to a slice Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:20:58.628Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:41:00.328Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:57:50.191Z | user Release v1.9.16 v1.9.14 |","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1134,"uniquenessScore":46,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T19:48:22.175Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T19:48:22.175Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-12T00:01:22.437Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}