Skip to content

Release (main) - #133

Merged
imjlk merged 2 commits into
mainfrom
release/main
Aug 11, 2026
Merged

imjlk merged 2 commits into
mainfrom
release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Aug 10, 2026 •

Copy link
Copy Markdown
Contributor

This PR was generated by Sampo GitHub Action. When you're ready to do a release, you can merge this and the packages will be published automatically. Not ready yet? Just keep adding changesets to the default branch, and this PR will stay up to date.

@mpgd/adapter-ait 0.8.0 -> 0.9.0

Added

  • 949dc45 Add opt-in Apps in Toss IAP authority hooks, partner API contracts, and stable SDK 3 target support. — Thanks @imjlk!
  • 8d8e36a Add fail-closed Microsoft Store PWA Digital Goods checkout with player-scoped retry storage, provider-purchase- and generation-bound server recovery ownership, explicit historical product mappings, first-class target configuration, opt-in remote leaderboard capability discovery, submission product mappings with effective-target revalidation, and authoritative Collections query and consume fulfillment. — Thanks @imjlk!

Patch changes

  • Updated dependencies: bridge@0.8.0, platform@0.9.0

@mpgd/adapter-browser 0.5.1 -> 0.6.0

Added

  • 8d8e36a Add fail-closed Microsoft Store PWA Digital Goods checkout with player-scoped retry storage, provider-purchase- and generation-bound server recovery ownership, explicit historical product mappings, first-class target configuration, opt-in remote leaderboard capability discovery, submission product mappings with effective-target revalidation, and authoritative Collections query and consume fulfillment. — Thanks @imjlk!

Patch changes

  • Updated dependencies: platform@0.9.0

@mpgd/adapter-capacitor 0.4.5 -> 0.4.6

Patch changes

  • Updated dependencies: bridge@0.8.0, capacitor-game-services@0.5.0, platform@0.9.0

@mpgd/adapter-devvit 0.8.6 -> 0.9.0

Added

  • 8d8e36a Add fail-closed Microsoft Store PWA Digital Goods checkout with player-scoped retry storage, provider-purchase- and generation-bound server recovery ownership, explicit historical product mappings, first-class target configuration, opt-in remote leaderboard capability discovery, submission product mappings with effective-target revalidation, and authoritative Collections query and consume fulfillment. — Thanks @imjlk!

Patch changes

  • Updated dependencies: bridge@0.8.0, game-services@0.12.0, platform@0.9.0

@mpgd/adapter-verse8 0.2.3 -> 0.3.0

Added

  • 8d8e36a Add fail-closed Microsoft Store PWA Digital Goods checkout with player-scoped retry storage, provider-purchase- and generation-bound server recovery ownership, explicit historical product mappings, first-class target configuration, opt-in remote leaderboard capability discovery, submission product mappings with effective-target revalidation, and authoritative Collections query and consume fulfillment. — Thanks @imjlk!

Patch changes

  • Updated dependencies: catalog@0.6.0, game-services@0.12.0, platform@0.9.0

@mpgd/analytics 0.3.8 -> 0.3.9

Patch changes

  • Updated dependencies: platform@0.9.0

@mpgd/bridge 0.7.0 -> 0.8.0

Added

  • 8d8e36a Add fail-closed Microsoft Store PWA Digital Goods checkout with player-scoped retry storage, provider-purchase- and generation-bound server recovery ownership, explicit historical product mappings, first-class target configuration, opt-in remote leaderboard capability discovery, submission product mappings with effective-target revalidation, and authoritative Collections query and consume fulfillment. — Thanks @imjlk!

@mpgd/capacitor-game-services 0.4.3 -> 0.5.0

Added

  • 8d8e36a Add fail-closed Microsoft Store PWA Digital Goods checkout with player-scoped retry storage, provider-purchase- and generation-bound server recovery ownership, explicit historical product mappings, first-class target configuration, opt-in remote leaderboard capability discovery, submission product mappings with effective-target revalidation, and authoritative Collections query and consume fulfillment. — Thanks @imjlk!

Patch changes

  • Updated dependencies: bridge@0.8.0

@mpgd/catalog 0.5.2 -> 0.6.0

Added

  • 8d8e36a Add fail-closed Microsoft Store PWA Digital Goods checkout with player-scoped retry storage, provider-purchase- and generation-bound server recovery ownership, explicit historical product mappings, first-class target configuration, opt-in remote leaderboard capability discovery, submission product mappings with effective-target revalidation, and authoritative Collections query and consume fulfillment. — Thanks @imjlk!

Patch changes

  • Updated dependencies: platform@0.9.0

@mpgd/cli 0.21.0 -> 0.22.0

Added

  • fda83d0 Add a test-only, direct-file offline playtest packager for existing web-preview artifacts.
    Generated Apps in Toss wrappers now use the available stable 3.0.2 framework and CLI packages,
    with a narrow pnpm peer allowance for the tested devtools integration. — Thanks @imjlk!
  • 949dc45 Add opt-in Apps in Toss IAP authority hooks, partner API contracts, and stable SDK 3 target support. — Thanks @imjlk!
  • 8d8e36a Add fail-closed Microsoft Store PWA Digital Goods checkout with player-scoped retry storage, provider-purchase- and generation-bound server recovery ownership, explicit historical product mappings, first-class target configuration, opt-in remote leaderboard capability discovery, submission product mappings with effective-target revalidation, and authoritative Collections query and consume fulfillment. — Thanks @imjlk!
  • 8ca5064 Allow Apps in Toss targets to configure validated navigation bar appearance, including transparent game chrome, from mpgd.targets.json. — Thanks @imjlk!

Fixed

  • 43a1936 Bound the generated Phaser starter's ttsc unplugin to Vite's public plugin type so monorepo typechecks do not exceed TypeScript's recursive comparison depth. — Thanks @imjlk!
  • 9cc3538 Pin generated Phaser starters to the verified Vite version so fresh installs do not resolve a patch release that exceeds TypeScript 7's recursive plugin-type comparison depth. — Thanks @imjlk!
  • 70f7a95 Render an accessible fallback instead of leaving generated Phaser game documents blank when a dynamic platform or gameplay entry module fails to load. — Thanks @imjlk!

Patch changes

  • Updated dependencies: adapter-ait@0.9.0, adapter-browser@0.6.0, adapter-capacitor@0.4.6, adapter-devvit@0.9.0, adapter-verse8@0.3.0, analytics@0.3.9, bridge@0.8.0, catalog@0.6.0, game-services@0.12.0, i18n@0.5.5, platform@0.9.0, target-config@0.12.0

@mpgd/create-game 0.21.0 -> 0.22.0

Patch changes

  • Updated dependencies: cli@0.22.0

@mpgd/game-services 0.11.1 -> 0.12.0

Added

  • 949dc45 Add opt-in Apps in Toss IAP authority hooks, partner API contracts, and stable SDK 3 target support. — Thanks @imjlk!
  • 8d8e36a Add fail-closed Microsoft Store PWA Digital Goods checkout with player-scoped retry storage, provider-purchase- and generation-bound server recovery ownership, explicit historical product mappings, first-class target configuration, opt-in remote leaderboard capability discovery, submission product mappings with effective-target revalidation, and authoritative Collections query and consume fulfillment. — Thanks @imjlk!

Patch changes

  • Updated dependencies: analytics@0.3.9, catalog@0.6.0, platform@0.9.0

@mpgd/i18n 0.5.4 -> 0.5.5

Patch changes

  • Updated dependencies: platform@0.9.0

@mpgd/platform 0.8.0 -> 0.9.0

Added

  • 8d8e36a Add fail-closed Microsoft Store PWA Digital Goods checkout with player-scoped retry storage, provider-purchase- and generation-bound server recovery ownership, explicit historical product mappings, first-class target configuration, opt-in remote leaderboard capability discovery, submission product mappings with effective-target revalidation, and authoritative Collections query and consume fulfillment. — Thanks @imjlk!

@mpgd/target-config 0.11.0 -> 0.12.0

Added

  • 95f5071 Add safe-area-aware adaptive game-shell composition geometry with 3:4 side rails, bottom-control fallback, and full-bleed compact portrait modes. — Thanks @imjlk!
  • 8d8e36a Add fail-closed Microsoft Store PWA Digital Goods checkout with player-scoped retry storage, provider-purchase- and generation-bound server recovery ownership, explicit historical product mappings, first-class target configuration, opt-in remote leaderboard capability discovery, submission product mappings with effective-target revalidation, and authoritative Collections query and consume fulfillment. — Thanks @imjlk!

Patch changes

  • Updated dependencies: catalog@0.6.0, i18n@0.5.5, platform@0.9.0

Summary by CodeRabbit

  • New Features

    • Added Microsoft Store digital-goods checkout, purchase recovery, product mapping, fulfillment, and ownership handling.
    • Added leaderboard capability discovery, submission validation, and Collections fulfillment support.
    • Added Apps in Toss IAP authority hooks, partner API contracts, and stable SDK 3 support.
    • Added adaptive game-shell layouts with safe-area and compact portrait handling.
    • Added CLI packaging, navigation configuration, and improved Phaser starter behavior.
  • Documentation

    • Updated release documentation across the platform’s latest package versions.

@github-actions
github-actions Bot force-pushed the release/main branch 3 times, most recently from 8ea7e55 to e7d65d4 Compare August 11, 2026 18:30

imjlk commented Aug 11, 2026

Copy link
Copy Markdown
Owner

@codex review
@coderabbitai review

Please re-review exact release head b980cf83ec0651c343f15007bc3c6c33d838a5dd. The generated release diff has been batch-audited after all feature PRs merged; the only manual correction removes a truncated duplicate changelog bullet while preserving the complete generated entry. Please report only actionable findings against this exact head.

@coderabbitai

coderabbitai Bot commented Aug 11, 2026 •

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

requested='b980cf83ec0651c343f15007bc3c6c33d838a5dd'

echo '== checked-out HEAD =='
git rev-parse HEAD

echo '== requested commit =='
git show -s --format='%H%nParents: %P%nSubject: %s' "$requested"

echo '== changed files relative to first parent =='
git diff-tree --no-commit-id --name-status -r "$requested"

echo '== diff statistics =='
git diff --stat "${requested}^" "$requested"

echo '== exact diff =='
git diff --find-renames "${requested}^" "$requested"

Length of output: 1917


🏁 Script executed:

#!/bin/bash
set -euo pipefail

requested='b980cf83ec0651c343f15007bc3c6c33d838a5dd'

echo '== pull request metadata =='
gh pr view 133 --json number,baseRefName,baseRefOid,headRefName,headRefOid,changedFiles,commits,title,url

base_oid="$(gh pr view 133 --json baseRefOid --jq '.baseRefOid')"
merge_base="$(git merge-base "$base_oid" "$requested")"

echo '== merge base =='
printf '%s\n' "$merge_base"

echo '== commits in PR range =='
git log --oneline "${merge_base}..${requested}"

echo '== files in PR range =='
git diff --name-status --find-renames "${merge_base}..${requested}"

echo '== statistics in PR range =='
git diff --stat "${merge_base}..${requested}"

Length of output: 5948


🏁 Script executed:

#!/bin/bash
set -euo pipefail

base='9b32a48f21307567d974ab4722f49831fab2a79b'
head='b980cf83ec0651c343f15007bc3c6c33d838a5dd'

echo '== complete release diff =='
git diff --find-renames "$base..$head"

echo '== deleted changesets at PR base =='
for path in $(git diff --name-only --diff-filter=D "$base..$head" -- '.sampo/changesets/*.md'); do
  echo "--- $path ---"
  git show "${base}:${path}"
done

echo '== changed manifest versions and internal dependencies =='
python3 - "$base" "$head" <<'PY'
import json
import subprocess
import sys

base, head = sys.argv[1:]
paths = subprocess.check_output(
    ["git", "diff", "--name-only", base + ".." + head, "--", "**/package.json"],
    text=True,
).splitlines()

for path in paths:
    before = json.loads(subprocess.check_output(["git", "show", f"{base}:{path}"], text=True))
    after = json.loads(subprocess.check_output(["git", "show", f"{head}:{path}"], text=True))
    print(f"--- {path} ---")
    print(f"version: {before.get('version')} -> {after.get('version')}")
    for section in ("dependencies", "devDependencies", "peerDependencies", "optionalDependencies"):
        old = before.get(section, {})
        new = after.get(section, {})
        changes = [
            (name, old.get(name), new.get(name))
            for name in sorted(set(old) | set(new))
            if old.get(name) != new.get(name) and name.startswith("`@mpgd/`")
        ]
        for name, was, now in changes:
            print(f"{section}: {name}: {was} -> {now}")
PY

Length of output: 29824


🏁 Script executed:

#!/bin/bash
set -euo pipefail

head='b980cf83ec0651c343f15007bc3c6c33d838a5dd'

echo '== release and workspace configuration files =='
fd -HI -t f -E .git -g '*sampo*' -g 'pnpm-workspace.yaml' -g 'package.json' -g 'pnpm-lock.yaml' | sort

echo '== Sampo configuration content =='
for path in $(fd -HI -t f -E .git -g '*sampo*' | sort); do
  echo "--- $path ---"
  cat "$path"
done

echo '== workspace internal dependency declarations at release head =='
python3 - "$head" <<'PY'
import json
import subprocess
import sys

head = sys.argv[1]
paths = subprocess.check_output(
    ["git", "ls-tree", "-r", "--name-only", head],
    text=True,
).splitlines()

versions = {}
manifests = {}
for path in paths:
    if not path.endswith("/package.json") and path != "package.json":
        continue
    try:
        data = json.loads(subprocess.check_output(["git", "show", f"{head}:{path}"], text=True))
    except subprocess.CalledProcessError:
        continue
    manifests[path] = data
    if data.get("name", "").startswith("`@mpgd/`"):
        versions[data["name"]] = data.get("version")

for path, data in sorted(manifests.items()):
    refs = []
    for section in ("dependencies", "devDependencies", "peerDependencies", "optionalDependencies"):
        for name, spec in data.get(section, {}).items():
            if name in versions:
                refs.append((section, name, spec, versions[name]))
    if refs:
        print(f"--- {path} ({data.get('name')}) ---")
        for section, name, spec, version in refs:
            print(f"{section}: {name} = {spec} (local version {version})")
PY

echo '== uncommitted working-tree changes =='
git status --short

Length of output: 2245


🏁 Script executed:

#!/bin/bash
set -euo pipefail

head='b980cf83ec0651c343f15007bc3c6c33d838a5dd'

echo '== release and workspace configuration files =='
fd -HI -t f -E .git . | rg '(^|/)([^/]*sampo[^/]*|pnpm-workspace\.yaml|package\.json|pnpm-lock\.yaml)$' | sort

echo '== Sampo configuration content =='
while IFS= read -r path; do
  echo "--- $path ---"
  cat "$path"
done < <(fd -HI -t f -E .git . | rg '(^|/)[^/]*sampo[^/]*$' | sort)

echo '== workspace internal dependency declarations at release head =='
python3 - "$head" <<'PY'
import json
import subprocess
import sys

head = sys.argv[1]
paths = subprocess.check_output(
    ["git", "ls-tree", "-r", "--name-only", head],
    text=True,
).splitlines()

versions = {}
manifests = {}
for path in paths:
    if not path.endswith("/package.json") and path != "package.json":
        continue
    data = json.loads(subprocess.check_output(["git", "show", f"{head}:{path}"], text=True))
    manifests[path] = data
    if data.get("name", "").startswith("`@mpgd/`"):
        versions[data["name"]] = data.get("version")

for path, data in sorted(manifests.items()):
    refs = []
    for section in ("dependencies", "devDependencies", "peerDependencies", "optionalDependencies"):
        for name, spec in data.get(section, {}).items():
            if name in versions:
                refs.append((section, name, spec, versions[name]))
    if refs:
        print(f"--- {path} ({data.get('name')}) ---")
        for section, name, spec, version in refs:
            print(f"{section}: {name} = {spec} (local version {version})")
PY

echo '== uncommitted working-tree changes =='
git status --short

Length of output: 3368


🏁 Script executed:

#!/bin/bash
set -euo pipefail

head='b980cf83ec0651c343f15007bc3c6c33d838a5dd'

echo '== tracked Sampo files at release head =='
git ls-tree -r --name-only "$head" | rg '(^|/)\.sampo(/|$)|(^|/)[^/]*sampo[^/]*$' || true

echo '== Sampo files at release head =='
sampo_paths="$(git ls-tree -r --name-only "$head" | rg '(^|/)\.sampo(/|$)|(^|/)[^/]*sampo[^/]*$' || true)"
if [ -n "$sampo_paths" ]; then
  while IFS= read -r path; do
    echo "--- $path ---"
    git show "${head}:${path}"
  done <<< "$sampo_paths"
else
  echo '(none)'
fi

echo '== internal dependency declarations at release head =='
python3 - "$head" <<'PY'
import json
import subprocess
import sys

head = sys.argv[1]
paths = subprocess.check_output(
    ["git", "ls-tree", "-r", "--name-only", head],
    text=True,
).splitlines()

versions, manifests = {}, {}
for path in paths:
    if path != "package.json" and not path.endswith("/package.json"):
        continue
    data = json.loads(subprocess.check_output(["git", "show", f"{head}:{path}"], text=True))
    manifests[path] = data
    name = data.get("name", "")
    if name.startswith("`@mpgd/`"):
        versions[name] = data.get("version")

for path, data in sorted(manifests.items()):
    refs = [
        (section, name, spec, versions[name])
        for section in ("dependencies", "devDependencies", "peerDependencies", "optionalDependencies")
        for name, spec in data.get(section, {}).items()
        if name in versions
    ]
    if refs:
        print(f"--- {path} ({data.get('name')}) ---")
        for section, name, spec, version in refs:
            print(f"{section}: {name} = {spec} (local version {version})")
PY

echo '== package manager configuration =='
for path in pnpm-workspace.yaml package.json; do
  echo "--- $path ---"
  git show "${head}:${path}"
done

echo '== working-tree status =='
git status --short

Length of output: 24929


@imjlk I re-reviewed exact head b980cf83ec0651c343f15007bc3c6c33d838a5dd.

I found no actionable findings.

The final commit removes only the truncated duplicate entry. The complete browser changelog entry remains. The consumed changesets, version increments, fixed package group, and workspace dependency versions are consistent with the release diff.

✅ Action performed

Full review finished.

@coderabbitai

coderabbitai Bot commented Aug 11, 2026 •

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d38e5b60-4612-47c7-8586-e5dcdd571735

📥 Commits

Reviewing files that changed from the base of the PR and between 9b32a48 and b980cf8.

📒 Files selected for processing (38)
  • .sampo/changesets/add-adaptive-game-shell.md
  • .sampo/changesets/ait-target-navigation.md
  • .sampo/changesets/bound-starter-vite-plugin-type.md
  • .sampo/changesets/microsoft-store-iap.md
  • .sampo/changesets/offline-playtest-bundle.md
  • .sampo/changesets/pin-generated-vite.md
  • .sampo/changesets/render-starter-entry-failure.md
  • .sampo/changesets/venerable-bard-otso.md
  • adapters/ait/CHANGELOG.md
  • adapters/ait/package.json
  • adapters/browser/CHANGELOG.md
  • adapters/browser/package.json
  • adapters/capacitor/CHANGELOG.md
  • adapters/capacitor/package.json
  • adapters/devvit/CHANGELOG.md
  • adapters/devvit/package.json
  • adapters/verse8/CHANGELOG.md
  • adapters/verse8/package.json
  • native-plugins/capacitor-game-services/CHANGELOG.md
  • native-plugins/capacitor-game-services/package.json
  • packages/analytics/CHANGELOG.md
  • packages/analytics/package.json
  • packages/bridge/CHANGELOG.md
  • packages/bridge/package.json
  • packages/catalog/CHANGELOG.md
  • packages/catalog/package.json
  • packages/cli/CHANGELOG.md
  • packages/cli/package.json
  • packages/create-game/CHANGELOG.md
  • packages/create-game/package.json
  • packages/game-services/CHANGELOG.md
  • packages/game-services/package.json
  • packages/i18n/CHANGELOG.md
  • packages/i18n/package.json
  • packages/platform/CHANGELOG.md
  • packages/platform/package.json
  • packages/target-config/CHANGELOG.md
  • packages/target-config/package.json
💤 Files with no reviewable changes (8)
  • .sampo/changesets/venerable-bard-otso.md
  • .sampo/changesets/bound-starter-vite-plugin-type.md
  • .sampo/changesets/render-starter-entry-failure.md
  • .sampo/changesets/offline-playtest-bundle.md
  • .sampo/changesets/pin-generated-vite.md
  • .sampo/changesets/ait-target-navigation.md
  • .sampo/changesets/add-adaptive-game-shell.md
  • .sampo/changesets/microsoft-store-iap.md

📝 Walkthrough

Walkthrough

This PR finalizes the 2026-08-12 release metadata. It updates package versions and changelogs across core packages, services, adapters, native plugins, and CLI packages. It also adds the offline playtest changeset and removes superseded changesets.

Changes

Release metadata

Layer / File(s) Summary
Core package releases
packages/analytics/*, packages/bridge/*, packages/catalog/*, packages/i18n/*, packages/platform/*, packages/target-config/*
Package versions and changelogs record Microsoft Store commerce, recovery, leaderboard, configuration, fulfillment, and adaptive game-shell updates.
Service and adapter releases
packages/game-services/*, adapters/*, native-plugins/capacitor-game-services/*
Service, adapter, and native plugin versions and changelogs record the coordinated feature and dependency releases.
CLI and project creation releases
packages/cli/*, packages/create-game/*
CLI and create-game versions and changelogs record offline playtest packaging, target capabilities, starter fixes, and dependency updates.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • imjlk/mpgd-kit#130: Introduces the Apps in Toss IAP, partner API, and SDK 3 changes recorded in these releases.
  • imjlk/mpgd-kit#131: Introduces the offline-playtest changeset recorded by the CLI release.
  • imjlk/mpgd-kit#135: Introduces the adaptive game-shell implementation recorded by the target-config release.

Suggested reviewers: imjlk

Poem

I hop through versions, neat and bright,
Changelogs bloom for release night.
The playtest bundle joins the queue,
Old changesets bid adieu.
— A rabbit in the release burrow 🐇

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description lists the release changes but does not use the required Summary, Validation, and Notes sections or provide validation results. Add the required Summary, Validation, and Notes sections, and mark each applicable validation check with its result.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title identifies this as a release for the main branch, which matches the package version and changelog updates.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release/main

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: b980cf83ec

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@imjlk
imjlk merged commit 39bb180 into main Aug 11, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant