From b6a5bd102cdc3210146fea9591dbb5b7fcca52ba Mon Sep 17 00:00:00 2001 From: garrytan Date: Sat, 31 Oct 2026 16:48:38 +0000 Subject: [PATCH] fix: restore bin/gstack-ship-receipt after the main merge The merge commit b10e2db wrote a truncated copy of the file. This is the three-way merge of both sides with the refused() union: main's codes plus RECEIPT_CARRY_SCOPED_REVIEW. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --- bin/gstack-ship-receipt | 725 ++++++++++++++++------------------------ 1 file changed, 280 insertions(+), 445 deletions(-) diff --git a/bin/gstack-ship-receipt b/bin/gstack-ship-receipt index ff9e1b391..093b50196 100755 --- a/bin/gstack-ship-receipt +++ b/bin/gstack-ship-receipt @@ -473,480 +473,315 @@ function productSpec(repoRoot: string, rules: ProductRules, from: string, to: st const oldVersion = versionAt(from); const newVersion = versionAt(to); const changed = changedRaw.split('\n').filter(Boolean).map(p => ({ path: p, class: classifyCarryPath(p, rules.extra, matchesAny(rules.metadata, p) && !matchesAny(rules.extra.outputs, p) ? { before: blobAt(from, p), after: blobAt(to, p), oldVersion, newVersion, templates: rules.templates } : undefined) })); - const excludeGlobs = (globs: readonly string[]) => globs.map(g => `:(exclude,glob)${g}`) const refused = (code: 'QUEUE_RECEIPT_MISSING' | 'QUEUE_RECEIPT_CONDITIONAL' | 'RECEIPT_CARRY_REFUSED' | 'RECEIPT_CARRY_PRODUCT_CHANGED' | 'RECEIPT_CARRY_SCOPED_REVIEW' | 'RECEIPT_CARRY_TREE_MISMATCH' | 'RECEIPT_GIT_TOO_OLD' | 'RECEIPT_CARRY_PREGATE_STALE', message: string) => { -un --no-env-file --config=/dev/null -/** - * gstack-ship-receipt — the handoff record, identifiers first (plan C5). - * - * gstack-ship-receipt write [--pr ] [--head ] [--base ] [--version ] [--gated-tree ] - * [--predecessor ] [--gate ] [--ci ] [--spend-usd ] - * [--session-kind ] [--artifacts-consumed /] [--run ] [--thread ] - * [--receipt ] [--policy