diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cd51b8094..2f6ca52d57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,20 @@ > completion state and remaining P0 gates. No version bump or release claim is > made here while that status holds. +## [1.64.11.0] - 2026-07-24 + +**Shipping to the App Store is not landing a PR.** +**The branch gate no longer blocks store releases.** + +A release run on an Xcode project aborted at "you're on the base branch, ship from a feature branch" — without ever reaching the Apple journey. That gate belongs to repository landing (commit, review, PR, merge), which is a different release path than store distribution. The ship dispatcher now loads the Apple adapter FIRST for Apple targets, before any specialist preflight, and the adapter states it outright: an App Store or TestFlight ask proceeds from whatever branch you are on. A solo developer with a clean tree on main is the normal case, not an error. + +### Itemized changes + +### Changed + +- Ship dispatcher step 10: Apple targets read `references/APPLE-RELEASE.md` before any specialist preflight or repository gate; store distribution explicitly does not route through the branch/PR ceremony. +- `references/APPLE-RELEASE.md` (ship tree): store distribution declared its own release path — branch/PR ceremony applies only to repository-landing asks; never abort an App Store release over branch topology. + ## [1.64.10.0] - 2026-07-24 **Marketing screenshots never required an API key.** diff --git a/VERSION b/VERSION index 30fcb9824e..7d091d051d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.64.10.0 +1.64.11.0 diff --git a/evals/parity/transcripts/policy-units.json b/evals/parity/transcripts/policy-units.json index 489814fc58..1a82a79326 100644 --- a/evals/parity/transcripts/policy-units.json +++ b/evals/parity/transcripts/policy-units.json @@ -235,7 +235,7 @@ "prompt_sha256": "a01bb977de84e53d8ce3dfa427bcc93d73c6e449cd4e9c1ff63b436fd41fb0d1", "semantic_attempt_sha256": "ce5c64c62c3ff9b60949f34717dffbc908f62ce30f8a4a48ec182eba4363a206" }, - "policy_sha256": "b1c39db2c170ab19722a36bc5e79fea1278d919d3360e16c98355ba13c6f8de0", + "policy_sha256": "a95b0d10de018117bf779a2b691054e6e0d8d9177dd4cae8dca056dd6b311402", "policy_present": true, "prompt_is_not_authority_input": true, "verdict": "PASS" diff --git a/package.json b/package.json index f6d20117d5..e5288ba26d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gstack", - "version": "1.64.10.0", + "version": "1.64.11.0", "description": "GStack 2 \u2014 six portable Agent Skills with an optional host-neutral runtime.", "license": "MIT", "type": "module", diff --git a/scripts/gstack2/generate-skill-tree.ts b/scripts/gstack2/generate-skill-tree.ts index e2329ed343..69978cf890 100644 --- a/scripts/gstack2/generate-skill-tree.ts +++ b/scripts/gstack2/generate-skill-tree.ts @@ -202,7 +202,7 @@ function rootSkill(dispatcher: DispatcherDefinition): string { const supplemental = dispatcher.name === 'qa' ? '\n9. When `system-functional` is active, read `references/SYSTEM-FUNCTIONAL.md` completely and execute it alongside the selected preserved specialists.\n' : dispatcher.name === 'ship' - ? '\n9. Before push, PR creation/update, merge, deploy, rollback, release publication, or external notification, read `references/EXTERNAL-EFFECTS.md` and execute the action through its durable state wrapper.\n10. When the release target is an Apple platform app (an `.xcodeproj`, `.xcworkspace`, or app-product Swift package is present), read `references/APPLE-RELEASE.md` before release preparation and follow its App Store journey end to end.\n' + ? '\n9. Before push, PR creation/update, merge, deploy, rollback, release publication, or external notification, read `references/EXTERNAL-EFFECTS.md` and execute the action through its durable state wrapper.\n10. When the release target is an Apple platform app (an `.xcodeproj`, `.xcworkspace`, or app-product Swift package is present), read `references/APPLE-RELEASE.md` FIRST — before any specialist preflight or repository gate — and follow its App Store journey end to end. An App Store or TestFlight ask is store distribution, not repository landing: the specialist branch/PR ceremony does not gate it, and a clean tree on the base branch is a valid state to archive and upload from.\n' : dispatcher.name === 'plan' ? '\n9. Classify the Scale header line from the Build scale section before any questioning begins. Every planning specialist applies its proportional-planning judgment port to that scale.\n' : ''; @@ -638,7 +638,7 @@ function appleReleaseContract(): string { return `${GENERATED} # Apple App Store release -Applies when the ship target is an Apple platform app: the repository contains an \`.xcodeproj\` or \`.xcworkspace\`, or a Swift package with an app product. This adapter extends the preserved ship judgment to the App Store journey end to end; it replaces no gate, and every upload or submission remains an external effect executed through \`references/EXTERNAL-EFFECTS.md\`. +Applies when the ship target is an Apple platform app: the repository contains an \`.xcodeproj\` or \`.xcworkspace\`, or a Swift package with an app product. Read this BEFORE any specialist preflight. This adapter extends the preserved ship judgment to the App Store journey end to end, and every upload or submission remains an external effect executed through \`references/EXTERNAL-EFFECTS.md\` — but store distribution is its own release path, not repository landing: the preserved specialist's branch/PR ceremony (feature-branch gate, commit-review-PR pipeline, merge queue) applies only when the user asked to land repository changes. A user shipping to the App Store or TestFlight proceeds through this adapter from whatever branch they are on; a clean working tree on the base branch is a normal and valid state to archive and upload from. Never abort an App Store release over branch topology. One tool runs the entire release: machine-level fastlane — \`produce\` (app record and bundle ID), \`cert\` and \`sigh\` (signing), \`gym\` (archive and signed export), \`pilot\` (TestFlight), \`deliver\` (metadata, screenshots, Submit for Review), \`frameit\` (device frames). Install it when missing (\`brew install fastlane\`) with a one-line announcement, not a question — the release authorization covers machine-tool installs. Never install additional App Store CLI tools, and never mention API keys, \`.p8\` files, sessions, or any credential format to the user; they paid US$99 and want to ship, and the release itself adds no new dependency to the user's project. diff --git a/skills/ship/SKILL.md b/skills/ship/SKILL.md index 8a2bf962d6..04f9f78e02 100644 --- a/skills/ship/SKILL.md +++ b/skills/ship/SKILL.md @@ -34,7 +34,7 @@ Web context: 8. At exit, report completed artifacts, evidence, unresolved decisions, skipped modules with reasons, and any blocked gate. 9. Before push, PR creation/update, merge, deploy, rollback, release publication, or external notification, read `references/EXTERNAL-EFFECTS.md` and execute the action through its durable state wrapper. -10. When the release target is an Apple platform app (an `.xcodeproj`, `.xcworkspace`, or app-product Swift package is present), read `references/APPLE-RELEASE.md` before release preparation and follow its App Store journey end to end. +10. When the release target is an Apple platform app (an `.xcodeproj`, `.xcworkspace`, or app-product Swift package is present), read `references/APPLE-RELEASE.md` FIRST — before any specialist preflight or repository gate — and follow its App Store journey end to end. An App Store or TestFlight ask is store distribution, not repository landing: the specialist branch/PR ceremony does not gate it, and a clean tree on the base branch is a valid state to archive and upload from. ## Top-level modes diff --git a/skills/ship/references/APPLE-RELEASE.md b/skills/ship/references/APPLE-RELEASE.md index f78f38388a..1d4e7eb937 100644 --- a/skills/ship/references/APPLE-RELEASE.md +++ b/skills/ship/references/APPLE-RELEASE.md @@ -1,7 +1,7 @@ # Apple App Store release -Applies when the ship target is an Apple platform app: the repository contains an `.xcodeproj` or `.xcworkspace`, or a Swift package with an app product. This adapter extends the preserved ship judgment to the App Store journey end to end; it replaces no gate, and every upload or submission remains an external effect executed through `references/EXTERNAL-EFFECTS.md`. +Applies when the ship target is an Apple platform app: the repository contains an `.xcodeproj` or `.xcworkspace`, or a Swift package with an app product. Read this BEFORE any specialist preflight. This adapter extends the preserved ship judgment to the App Store journey end to end, and every upload or submission remains an external effect executed through `references/EXTERNAL-EFFECTS.md` — but store distribution is its own release path, not repository landing: the preserved specialist's branch/PR ceremony (feature-branch gate, commit-review-PR pipeline, merge queue) applies only when the user asked to land repository changes. A user shipping to the App Store or TestFlight proceeds through this adapter from whatever branch they are on; a clean working tree on the base branch is a normal and valid state to archive and upload from. Never abort an App Store release over branch topology. One tool runs the entire release: machine-level fastlane — `produce` (app record and bundle ID), `cert` and `sigh` (signing), `gym` (archive and signed export), `pilot` (TestFlight), `deliver` (metadata, screenshots, Submit for Review), `frameit` (device frames). Install it when missing (`brew install fastlane`) with a one-line announcement, not a question — the release authorization covers machine-tool installs. Never install additional App Store CLI tools, and never mention API keys, `.p8` files, sessions, or any credential format to the user; they paid US$99 and want to ship, and the release itself adds no new dependency to the user's project.