Skip to content

[beta.2.2] Introduce a thin resolved Document boundary #1326

Description

@SisyphusZheng

Current scope amendment (2026-09-07): ADR-0152 / #1341 supersedes former train and ownership policy.

[beta.2.2] Introduce a thin resolved Document boundary

Part of #1321. Release: beta.2.2. Depends on: accepted Beta.2.1 route contract and integration evidence; an intermediate publication is not required for development.

Problem

Page meaning is currently assembled across definePage() descriptors, route head metadata, Content Graph, wrapInDocument, adapter SSG/request-time paths, and www SEO projections — no single resolved boundary.

Ownership target

  • App owns page/document meaning: status; headers; head; title; description; locale; canonical; alternates; body/rendered-content identity. Do not prematurely freeze an oversized public API — internal semantic seam first is acceptable.
  • Rendering integration owns serialization: Native reuses wrapInDocument; Lit uses its qualified serializer/hydration. No duplicate pipeline within an integration.
  • Adapter owns execution: build, SSG, request-time orchestration, deployment integration. It does not redefine Document meaning.
  • Content Graph supplies content metadata: an input to Document resolution, not a CMS and not a page renderer.

Inspection points

definePage() descriptor; route head metadata; Content Graph; wrapInDocument; adapter SSG/request-time paths; www SEO; sitemap; search; canonical; hreflang.

Non-goals

See umbrella hard non-goals. No oversized public API freeze; no second renderer; no Document-owned fetching/caching.

Tests

SSG + request-time + static + dynamic pages; locale; title; description; canonical; hreflang; status; headers; deterministic output; packed consumer smoke.

Release

beta.2.2.

Accepted scope clarification

Router Framework Mode owns page meaning; the existing app package may host it during migration. Page/form execution is #1339. Do not fetch independently inside Document. SSG may read build-time external data; private per-user renders must not become public static outputs. Delete each displaced page-meaning owner in the same change.

Accepted refinement — 2026-09-08 (supersedes conflicting earlier scope)

  • Router owns resolved page meaning and application outcomes. Native reuses existing serialization; Lit owns its qualified SSR/hydration integration.
  • Remove the former universal Element-only serializer requirement; preserve one meaning owner and one pipeline per integration.
  • Derive minimal seam from Native/Lit flows, no oversized public API or independent fetching scheduler.

Governing plan (2026-09-08)

Maintainer-approved: ADR-0152, docs/current/VERSION_PLAN.md and #1341. Execution: https://github.com/orgs/open-element/projects/3. Acceptance checkpoints replace the three-day schedule. No automatic beta.2.4. Native/Lit are formal Framework Mode targets, not already-shipped support. Existing release records/versions remain unchanged; no closure without final-SHA evidence. examples/** stays frozen.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions