Repository navigation
docs: ADR 0018, what counts as a breaking change for an app - #343
Open
brian-smith-tcril wants to merge 1 commit into
Open
brian-smith-tcril wants to merge 1 commit into
brian-smith-tcril wants to merge 1 commit into
Conversation
Lists the surface an app promises to site configs, widgets and importing packages (slots and their roles, widget ids and options, config keys, route roles, provides, exports, peer ranges) so that a breaking change is marked at the commit and the graduation DEPR can be written from the release notes. Default widget order is not part of the surface. The TSDoc on the relative widget operations and on idAliases states the order and alias rules. Resolves openedx#341. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
brian-smith-tcril
added a commit
to brian-smith-tcril/bairf
that referenced
this pull request
Nov 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ADR 0018 lists what an app promises to the site configs, widgets and packages that depend on it, so that a maintainer can tell whether a change is breaking by reading its diff. It covers slots and their layout roles, widget ids and options, config keys, route roles,
provides, exports and peer dependency ranges, says how a breaking change is marked, and says when a DEPR is filed and what it lists. Default widget order is not part of what an app promises. Docs only: the one source change is TSDoc.Resolves #341.
Left out of the ADR on purpose, to be discussed here:
dependencies. A non-peer major bump is the app's own business unless its types leak through an export; not decided.The ADR takes
0018. #326 also carries an0018; whichever lands second renumbers.What changed
docs/decisions/0018-app-breaking-changes.rst: Context, Decision in eight sections (what breaking means; slots; widgets; app configuration; route roles and provides; exports; peer dependency ranges; DEPRs), Consequences, References.INSERT_AFTERandINSERT_BEFOREinruntime/slots/widget/types.ts: the widget is placed relative to the target's current position, and an app may reorder its default widgets without that being a breaking change. TheINSERT_BEFOREcomment said "insert after"; corrected.idAliases: "keep the old ID here for at least one release" becomes keep it until it is removed as a breaking change.Testing
npm run typecheck: passes.npm run lint:eslint .andlint:toolspass; thetest-sitestep was not run (its dependencies are not installed here, and this PR does not touch it).rst2html); the only messages are for the Sphinx-only:doc:role in References, which ADR 0016 produces too.Decisions
Decisions made while writing the ADR, including the two review passes that shaped it.
Full decision log
Decisions while writing the ADR for #341
0017landed in feat: add App.defaultConfig for bundled app config defaults #298 after the plan was first written;0018is the file in the open PR feat: add middleware field to App interface #326. Taking0019avoids a clash with feat: add middleware field to App interface #326 whichever lands first; a gap if feat: add middleware field to App interface #326 never lands is harmless. Superseded by decision 21.INSERT_BEFORETSDoc said "insert after". Pre-existing copy error on a line the order rule touched anyway; corrected in the same edit rather than left false.dependencies) are named in Consequences as not addressed, with "silence on them is not a decision either way", so a reader does not infer a rule from their absence. They also go in the PR body for discussion.Review pass on the first draft, 2026-11-02
First draft as pushed to the fork:
brian-smith-tcril/frontend-base@a9ef976. Rewritten draft, amended into the same commit and force-pushed:brian-smith-tcril/frontend-base@d73064d.providesmoved out of the config section into their own section 5 so the config section is the sentence and the table. The six config examples are a third column of the table instead of prose.^23.4.5to^23.20.0bump reached main inside thefeat:translations commit (37e3901), with the bump incidental. The dedicated floor raise on main is 2082df5,chore: upgrade the minimum version of Paragon,^22.17.0to^22.20.1. The ADR no longer cites either (decision 10); the plan's citation of 37e3901 stands corrected here.rst2html, brew): the only messages are the Sphinx-only:doc:role in References, which ADR 0016 produces too.Open from the pass, not changed: the "key moves to
commonAppConfig" table row describes a diff an app cannot make in its own code, and ADR 0009 section 3's deprecation process is not reconciled with "no DEPR on main". Section 6's "including the types its slot props are built from" is a how-used clause by the reasoning that removed the Context bullet.Second review pass, 2026-11-02
Amended into the same commit and force-pushed:
brian-smith-tcril/frontend-base@0a26d82.@openedx/frontend-baserange folded in.stableas a new major; it lists every breaking change since the previous major, from the release notes, with what changed and what a consumer has to do. Framed around the landing onstable, not around what main does not get.Open, unchanged: the "key moves to
commonAppConfig" table row, and ADR 0009 section 3's deprecation process against section 8.Renumbered to 0018, 2026-11-02
0018now, and whichever PR lands second renumbers. The file isdocs/decisions/0018-app-breaking-changes.rst, the three TSDoc references inruntime/slots/widget/types.tssay ADR 0018, and the commit subject names 0018. Amended and force-pushed:brian-smith-tcril/frontend-base@ef8835c.🤖 Generated with Claude Code