Skip to content

Latest commit

 

History

History
68 lines (62 loc) · 27.1 KB

File metadata and controls

68 lines (62 loc) · 27.1 KB

Semantic ownership

From Beta.1 this table is the registry of record under the governance constitution (docs/governance/GOVERNANCE_CONSTITUTION.md §3); its duplicate-justification rule is constitution §4.3.

This table is the Alpha.9 semantic-ownership record: current truth for the v0.44 internal Alpha.9 checkpoint. One concept has one semantic owner. Other implementations are executors, adapters, conforming polyfills, or derived indexes; they may optimize the canonical meaning but may not redefine it. "Closed" means no known divergence remains after the cited tests; Alpha.9 remains internal and unpublished.

Alpha.10 — the current internal checkpoint, governed by umbrella issue #1155 — evolves specific rows of this table through its issue tree (#1209-#1220). The table remains the Alpha.9 baseline until it is re-baselined at Alpha.10 closure.

Concept Canonical owner and representation Executors, alternatives, and accepted decision Parity evidence and known divergence Forbidden duplicate ownership; issue
Component identity Bundler-neutral compiler semantic core; decorator-derived tag/class records in Part Program metadata Vite discovers modules and registers the compiled class; Element consumes identity Compiler boundary, deterministic fixture, CEM records; closed No Vite regex identity grammar or runtime tag inference; #1208
OpenElement language semantics Compiler semantic core; admitted decorator, property, computed, TSX, Part and Region grammar Vite hook is integration only; unsupported syntax fails closed compiler-semantic-core-boundary.test.ts, compiler-fail-closed-matrix.test.ts, compiled-element-v1.test.ts; closed No bundler-owned parser or runtime JSX fallback; #1208, #1204
Part Program v1 Compiler semantic-core/program.ts; exact versioned serialized wire artifact Element has an independent wire validator and all executors consume the validated artifact Bidirectional validator corpus and deterministic fixture; competing runtime-only grammar removed No Element-only v1 instruction or compatibility grammar; #1208
RuntimeProgramIR Element runtime-program.ts; normalized, recursively frozen representation created only after exact wire validation Fresh DOM, claim, reactive runtime and server serializers part-program-validation-adversarial.test.ts, compiled runtime/server suites; closed No direct cast or widening before validation; #1208
Part, Region, anchor, dependency and location identity Part Program v1 ownership/location tables Element indexes those records but does not rediscover them Adversarial duplicate, missing, misplaced and malformed-record matrix; closed No executor-generated identity or alternate condition representation; #1208
Signals and reactive invalidation Element signal engine; dependency records map signals to owning Parts/Regions Fresh and claimed DOM executors subscribe through the same runtime context Part/Region update, keyed collection and disposal suites; closed No VNode walk or adapter-level reactive graph; #1208
Context discovery and transport Community Context Protocol context-request composed/bubbling event Element Signal bridge provides/consumes values; Lit provider/consumer is the conforming alternative signal-context.test.ts including Lit interop, reconnect and disposal; private ancestry walk removed No parentNode/root-host discovery or global context registry; #1205
DOM context propagation and lifecycle Platform event propagation plus Element connection-scoped subscriptions Shadow/light DOM and reconnect are ordinary protocol cases Compiled context lifecycle matrix; closed No transport tied to one renderer or permanent disconnected subscription; #1205
SSR initial DOM, fresh DOM, claim and activation Element compiled server/runtime/claim semantics over one program Server string serializer, fresh builder and existing-DOM claimant are alternative executors Part Program conformance, compiled server/fresh/claim/update suites; closed No second renderer, generic hydration or binding discovery; #1203
Nested component composition, slots and DSD Element compiled serializer; structured nested records and admitted tags Vite supplies registry modules and immutable admission list only compiled-composition.test.ts, nested-static-ssr.test.ts; duplicate Vite renderer removed; accepted divergence: components embedded in opaque Trusted HTML content stay SSR-inert and upgrade client-side (#1203) No adapter reparsing or independent slot/DSD semantics; #1203
Trusted HTML Caller/compiler creates TrustedHtml identity capability; Element sink validates identity SSR, fresh DOM, claim and public light-child projection consume the same capability Trusted sink matrix and forged-projection rejection; raw-string projection leak fixed No string branding, Vite sanitizer, or HTML-based component discovery; #1203
Document, head and body serialization Element wrapInDocument; structured options to deterministic document HTML Generated Hono and SSG entries call it html-escape.test.ts, entry generation and request-time suites; duplicate entry wrapper removed No generated document renderer; #1203
Compiled serializer text-node escaping Element internal/compiled/escape-text.ts; reduced contract (&, <, > only — quotes pass through in text content) Runtime seed serializer and server serializer both call the shared helper; the two private copies converged compiled-escape-parity.test.ts byte-level text corpus (static text nodes and text Parts across both serializers); closed. The entity-preserving escapeText in sanitize.ts is a deliberately different contract, not this surface No per-serializer private copy or quote-escaping text contract; #1272
CSS and visual theme CSS cascade, Custom Properties, authored styles and scoped compiled light CSS Shadow/light style installation is an Element projection; Context may carry theme identity only StyleSheet, compiled style and website browser suites; closed No Context recreation of color, spacing, typography, radii or visual-token inheritance; #1201
Route pathname grammar Native URLPattern, or admitted urlpattern-polyfill with the same corpus App RouteTable compiles route declarations once Native/polyfill adversarial client-router.test.ts; legacy regex/trie matcher removed No SPA-only pathname parser; #1204
Route matching, order, params, query, base and trailing policy App RouteTable; ordered route records and URLPattern results SPA, generated Hono/request-time, SSG and Nitro project the same route records Route parity corpus plus request-time browser matrix; closed No transport-specific precedence or unsafe-param map; #1204, #1206
Route file-convention grammar and declaration ordering Adapter route-scanner.ts; parseRouteFilePath ([id]:id, [...path]:path{.+}, index stripping, api/ classification) and the static-first sort (special files last, then static-before-dynamic, then lexicographic) App RouteTable honors the declaration order through index-based precedence; SSG, request-time codegen and the SPA route manifest consume the same scanned records route-scanner-*.test.ts, route-manifest.test.ts, request-time-parity.test.ts (dev-vs-build semantic parity); closed No second file-convention grammar or transport-specific declaration ordering; #1270
Renderer scope matching Adapter entry-route-helpers.ts rendererScopeMatches; case-sensitive exact-or-scope/ boundary-prefix predicate Generated __matchingRenderers re-expresses the predicate inside self-contained generated entries, which cannot import adapter internals (derived projection) renderer-scope-parity.test.ts binding corpus evaluates the generated matcher verbatim against the predicate (exact, prefix, nested, non-match, boundary separators, case); closed No second runtime scope grammar or per-transport scope policy; #1271
Request and Response semantics Web platform Request, Response, Headers, FormData, URL Hono executes requests; Nitro adapts deployment transports HTTP bridge, malformed-body, headers, abort/cancel and Nitro proof suites; closed No framework-private HTTP value model; #1206
Loader App authoring contract and outcome classification SPA and generated Hono handlers project the result App authoring/SPA/request-time parity; closed No adapter-specific loader result grammar; #1206
Action App classifyActionResult; ActionOutcome discriminated representation SPA and generated Hono action runtime consume the classifier App authoring/SPA/entry-renderer/request-time suites; prior fail() shape divergence fixed No Hono-only .data interpretation or raw Response action result; #1206
Redirect, NotFound, expected failure and Problem Details App authoring control/outcome semantics SPA navigation and Hono response projection are alternative executors App outcome matrix, action protocol and request-time parity; closed No transport-owned outcome classification; #1206
Hono execution Hono request/middleware execution model Generated entry binds App-owned route/outcome semantics to Hono Request-time fixture and browser suites; closed Hono does not own App classification; #1206
Nitro deployment Nitro adapters and generated deployment artifacts Node server and Cloudflare module are environment alternatives nitro:proof:node, nitro:proof:workers; closed Nitro does not redefine routes, outcomes or documents; #1206
Compiler-known interaction facts Compiler semantic analysis and emitted event records Client admission aggregation reads facts directly Module-analysis, scanner and compiler determinism suites; closed No Vite AST rediscovery of compiler-owned behavior; #1202, #1207
Explicit Island and imperative behavior policy Author declaration validated by adapter protocol Client admission aggregation and delivery strategy projection Island scanner/delivery and exact client-output tests; closed No assumption that imperative browser behavior is compiler-knowable; #1202
Third-party delivery capability Package manifest and CEM classification Adapter aggregates package islands and foreign-tag admission CEM compatibility, foreign-tag and package-island tests; closed No guessing third-party behavior from OpenElement compiler data; #1202
Client reachability, activation and zero-JS Adapter client-admission.ts; deterministic union of route reachability, compiler facts, explicit policy and third-party declarations Vite chunking/client entry generation implements the plan Admission, generator, exact-output, static-only zero-runtime and three-browser suites; false zero-JS for interactive static components fixed No hidden 0.43 island fallback or independent compiler-event scan; #1202
Vite build, HMR, resolution and source-map composition Vite integration layer; module graph, cache and generated source maps Bundler-neutral compiler returns code, diagnostics and source records HMR/delivery, direct-core, source-map and build suites; closed Compiler core must not import Vite or invent a generic bundler abstraction; #1207
Source maps and diagnostics Compiler semantic core owns source spans/records; Vite composes standard module maps Browser/tooling consumes generated maps Frozen source-map fixture, located fail-closed diagnostics and HMR tests; closed No adapter recreation of semantic locations; #1207
Public metadata and package interface Package root exports, package manifests and checked interface snapshot Docs, packed packages, Starter and third-party consumers Interface snapshot, packed dry run and packed-consumer qualification; pending only the final exact-head rerun No unpublished deep-import contract or stale provisional name; #1201

Boundary rules

  • Compiler and Element packages do not import each other's private TypeScript.
  • ADR-0148 remains authoritative: Vite owns module graph, resolution, caching, HMR, chunking, manifest aggregation and final source-map composition; it does not rediscover compiler-known meaning.
  • A static route index is an optimization over URLPattern semantics, never a second pathname grammar.
  • Hono and Nitro remain executors/adapters. Transport representations may differ only while classification, status, redirect target and security policy remain observationally identical.
  • Trusted HTML is opaque content. It is never reparsed as a discovery channel, and public projection requires an identity capability rather than a structural { html } lookalike.
  • Alpha.9 is internal and unpublished. This record authorizes no tag, release, package publication, dist-tag change or main promotion.