[B1.2] Freeze Beta-era public package surface + stability classes (#1223) - #1266
Merged
Conversation
…es (#1223) Extend package-surface:check so the machine-readable package-export-classes block in PACKAGE_SURFACE.md must classify every named export of every published subpath (stable-candidate / experimental / internal-importable / compatibility-only / deprecated), verified against source through the same TypeScript module resolution as the public-interface snapshot; unclassified, stale or prose-undocumented exports fail the gate. Document the semantic-owner vs physical-source splits (App-owned action/loader protocol and adapter-owned build contract types physically on ADR-0122 frozen element files) with compatibility reason and removal condition; no physical migration. Fix the composeFetchMiddleware location wording and complete the build-utils helper enumeration.
Deploying openelement with
|
| Latest commit: |
c491864
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://01277d67.lessjs.pages.dev |
| Branch Preview URL: | https://kimi-v044-b1-2-surface-freez.lessjs.pages.dev |
Contributor
|
APIError: Insufficient Balance |
This was referenced Sep 3, 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.
Problem
Issue #1223 (stage #1150, umbrella #1155): the Beta-era public package surface had no per-export stability classification.
docs/current/PACKAGE_SURFACE.mdclassified subpaths (supported vs internal) but not the ~180 named exports behind them, so nothing mechanically prevented an unclassified or speculative export from shipping in Beta.1.Owner
Implementer role under dispatch packet B1.2 ("Freeze Beta-era public package surface + stability classes", ADR-0151), executed per
.agents/v044-kimi-implementer.md.Before
deno task package-surface:checkverified subpath drift but could not see named exports.composeFetchMiddlewareon the element root (it lives only in./build-utils); thebuild-utilsbullet omittedinsertBeforeBodyClose,normalizeRoutePatternForURLPatternandcomposeFetchMiddleware.After
package-export-classesblock classifying every named export of every published subpath of all five packages, per-package human tables, and a semantic-owner vs physical-source table (App-owned action/loader protocol and adapter-owned build-contract types physically on ADR-0122 frozen element files — documented with compatibility reason and removal condition, no migration).tools/check-package-surface.tsnow enumerates every subpath's real exports through the same TypeScript module resolution as the public-interface snapshot and fails on unclassified exports, stale classifications, unknown class values, subpath/package mismatches, or classified names missing from prose. Executable body wrapped inimport.meta.mainso the pure helpers are unit-testable; newtools/check-package-surface.test.ts(6 tests).element/property/DANGEROUS_KEYStrio at the element root for the Beta line.Why-not-second-owner
This change introduces no duplicate-looking implementation. The classification check reuses the existing
publicInterfaceShapeexport enumerator (tools/check-public-interface-snapshot.ts) as the single export-discovery mechanism rather than adding a second parser.Evidence
All run against commit c491864 (base c7fb6fc):
deno task package-surface:check→ exit 0 (RED proof: gate failed with "missing or invalid package-export-classes block" before the doc edit; three drift mutations — unknown class, removed classification, stale classification — each failed with precise diagnostics, then restored to GREEN)deno test tools/check-package-surface.test.ts tools/checkers.test.ts tools/check-public-interface-snapshot.test.ts(repo test permissions) → 16 passed, 0 faileddeno task fmt:check→ exit 0deno task lint→ exit 0deno task workflow:check→ exit 0deno task docs:truth→ exit 0 (includes docs:check-version-anchors, docs:check-recipe-parity)deno task docs:check-role-neutral/docs:check-public/docs:check-strategy/docs:check-current/docs:check-claims→ exit 0 eachdeno task text-integrity:check→ exit 0deno task interface:snapshot→ exit 0deno task pack:dry-run→ exit 0deno task package-artifacts:check→ exit 0deno task testnot run in full: no product code changed (packet condition); the touched tooling is covered by the targeted tool tests above.Scope
Packet-owned paths only:
docs/current/PACKAGE_SURFACE.md— classification section, machine block, ownership table, three minimal alignment fixes.tools/check-package-surface.ts— surface/public-api check tooling (extended, no existing check weakened).tools/check-package-surface.test.ts— new unit tests for the classification helpers.No product-code edits were needed: every export already matched its documented classification after doc alignment, so no export lists were touched. Nothing outside the packet was edited; no ADR-0122 frozen path was touched (no ADR-0151 commit-message citation required).
Risk
package-surface:checknow runs TypeScript program construction per subpath entry (same cost profile asinterface:snapshot); gate duration increases moderately.OpenElementRouteKind/OpenElementRouteNodeas compatibility-only) are documented decisions reviewable in the tables; reclassifying is a one-line doc edit that the gate will enforce against source.deprecatedclass is currently unused by design.Part of #1223. Stage #1150, umbrella #1155.