/** * ship-release — /ship Step 12 (version), Steps 15-16 (release commit, verification) * and Step 17 (push) as gstack-ship-release's three commands. They chain * gstack-ship-policy, gstack-version-bump, gstack-next-version, gstack-decision-log, * gstack-wtree, gstack-docs-candidate compare, gstack-evidence, gstack-pregate (the * stamped-tree rerun and the sealed guard) and git, print a compact result, and stop * with STOP: wherever the prose assigns the decision to the agent: the bump level, a * rebump, an incomplete queue, a sibling's claim, feature-commit grouping, a changed * reviewed tree, stale docs, failing or zero-run tests, the pre-push offer and pushes * that fail. */ import * as fs from 'node:fs'; import * as path from 'node:path'; import { mergeChangelogs, normalizeChangelog } from './changelog-check'; import { versionAtRef } from './restamp'; import { classifyPath } from './review-depth'; import { matchesAny } from './ship-policy'; import { baseHolds, boundedPaths, comparePath, contextPacket, gateEditedPaths, isTestCode, PACKET_SECTION_CAP, readScopedReview, touchedPaths, type BoundedKind, type PatchSides } from './ship-patch'; import { heldBy } from './ship-receipt'; import { locate, readRecord } from './approval-record'; import { mechanicalPaths, writeMechanicalRecord } from './ship-mechanical'; import { uidSidecars } from './ship-sidecar'; import type { MechanicalConstant } from './ship-policy-mechanical'; import { reviewFreshness } from './review-evidence'; import { isCriticalFinding, isOpenByAction } from './headless-artifacts'; import { fingerprintPath, normalizePath } from './review-scope'; import { forbidSpecs } from './review-fetch'; import { readRuledNotes, ruledNoteText } from './ruled-notes'; import { parseReviewLoopException, type ReviewLoopException } from './ship-receipt-depth'; import { parseReceiptDocs, type ReceiptDocs } from './ship-receipt-docs'; import { resolveStateRoot } from './state-root'; import { bumpVersion, cmpVersion, fmtVersion, parseVersion, versionWidth, type Bump } from './version-source'; import { waitForRun } from './ci-carry'; import { MIN_POLL_MS } from './gh-poll'; import { lanesOnlyHeadPolicy } from './pregate/head-policy'; import { finishPlan } from './plan-record'; import { PREPUSH_CHECK_IDS } from './pregate/index'; import { checkBranch, loadPlainTitlePolicy, type PlainFinding } from './plain-title'; import { buildRunCheck } from './pregate/run-check'; import { bin, carryLane, carryNoneLines, evidenceExempt, firstLine, flagReader, fragmentPath, gh, git, hostedOrigin, laneLine, lanes, mappedLanes, recordCiTimeout, releasePaths, Report, runLanes, sh, shipPolicy, shipRunMarker, short, stampedFiles } from './ship-bin-common'; export const RELEASE_HELP = `gstack-ship-release — /ship Steps 12 and 15-17 (ship/SKILL.md) version --base [--bump micro|patch|minor|major] [--version ] [--keep-current] [--accept-incomplete] [--why ] [--answer ] Step 12: classify, pick the queue-aware version, write it with --regen-digest --changelog, log the decision; --keep-current (or --version ) keeps VERSION; under bump ask a session no person answers needs --answer before a bump is written finish --base --reviewed-tree [--reviewed-base ] --docs-post [--lane