Skip to content

Keep extension configurations paired across runtime boundaries - #9010

Draft
isaacroldan wants to merge 1 commit into
mainfrom
codex/extension-config-boundaries
Draft

isaacroldan wants to merge 1 commit into
mainfrom
codex/extension-config-boundaries

Conversation

@isaacroldan

@isaacroldan isaacroldan commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

WHY are these changes introduced?

The shared extension model assumes boolean capabilities and loses the relationship between a configuration and its specification. This makes a different capability shape require changes to unrelated consumers or casts at collection boundaries.

WHAT is this pull request doing?

Separate common configuration fields from UI capabilities. Keep each concrete instance paired with its configuration-specific specification, and use runtime interfaces for mixed collections.

Configuration parsing, instance creation, and configuration expansion stay within the owning specification. Construction uses the final merged parser and metadata. UI payload consumers narrow their capability type explicitly.

This is a standalone refactor against main, which now contains merged #9003. The theme network-access validation and deploy payloads are preserved. Tests that intentionally use partial or invalid configurations have an explicit unvalidated fixture helper rather than weakening production construction.

How to manually test your changes?

  1. Use an existing linked app with UI, function, and theme extensions.
  2. Run pnpm shopify app info --path /path/to/app and confirm that the extension list is unchanged.
  3. Run pnpm shopify app build --path /path/to/app and confirm that the extensions build as before.
  4. If the app has configuration modules, confirm that its TOML still loads without new unsupported-section errors.

Validation

  • Full app suite: 345 files passed; 4,583 tests passed and three skipped.
  • App type check, app build and dependencies, and CLI type check passed.
  • App Knip, changed-file ESLint, Prettier, and git diff --check passed.
  • A temporary mutation that removes the configuration/specification type link fails the new type assertion.
  • Tests used an isolated temporary HOME; no live deployment was performed.

Checklist

  • I've considered possible cross-platform impacts (Mac, Linux, Windows)
  • I've considered possible documentation changes
  • I've considered analytics changes to measure impact

@isaacroldan
isaacroldan force-pushed the codex/extension-config-boundaries branch from 2373a9d to c1ca520 Compare October 26, 2026 14:43
@isaacroldan
isaacroldan marked this pull request as ready for review October 26, 2026 14:44
@isaacroldan
isaacroldan requested a review from a team as a code owner October 26, 2026 14:44
@isaacroldan
isaacroldan force-pushed the codex/extension-config-boundaries branch from c1ca520 to fa1f5d1 Compare October 26, 2026 14:56
@github-actions github-actions Bot added the no-changelog This PR doesn't include a changeset entry. Is an internal only change not relevant to end users. label Oct 26, 2026
@isaacroldan
isaacroldan marked this pull request as draft October 26, 2026 15:01

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-changelog This PR doesn't include a changeset entry. Is an internal only change not relevant to end users.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant