Skip to content

[beta.2.1] Converge browser and server navigation on one RouteResolution #1325

Description

@SisyphusZheng

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

[beta.2.1] Converge browser and server navigation on one RouteResolution

Part of #1320. Release: beta.2.1. Depends on: URLPatternList admission.

Problem

Browser and server maintain parallel winner semantics; Hono independently chooses routes and tests compare it against RouteTable.

Target

route declarations -> RouteTable -> URLPatternList -> RouteResolution
                                                    |- Request (server) -> Hono HTTP execution
                                                    |- Navigation (browser) -> Navigation API driver

Server

Hono keeps HTTP execution, middleware, request context, Response pipeline. It must NOT own route-winner semantics: Request -> RouteTable.resolve() -> RouteResolution -> HTTP execution. Parity tests may remain as defensive evidence; duplicated winner algorithms must disappear.

Browser

Evaluate the Navigation API against the official OE browser baseline. For supported browsers, prefer Navigation API as the canonical history-navigation driver (interception, traversal lifecycle, entry lifecycle, cancellation/abort). It may not own matching. Every navigable URL goes through the same RouteTable. Hash routing survives only for a demonstrated unique requirement (e.g. file://); do not keep an independent History API router as legacy comfort if the supported matrix no longer needs it. Record the browser floor change in the package/public surface.

Adversarial battery (browser + server)

GET; HEAD; POST; forms; loaders; actions; redirect; 404; 405; Allow; basePath; trailing slash; encoded params; malformed URI; same-origin navigation; cross-origin navigation; downloads/non-interceptable; replace; push; back; forward; rapid successive navigations; pending guard; redirecting guard; abort; newer navigation winning; SSR->SPA handoff; hash mode if retained.

Exit

"Who chooses the route winner?" has exactly one answer. No second route-winner algorithm; product boundaries do not mandate package renames.

Release

beta.2.1.

Accepted scope clarification

Explicit records (Route Mode) and file-generated records (Framework Mode default) enter the same table. Select the URL record before method dispatch; do not fall through to another path pattern on method mismatch. Keep query parameters separate from pathname captures. Browser manifests contain public metadata only. Remove displaced navigation/context/winner paths with regression evidence as part of this slice.

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

  • Repair SSG discovery from canonical eligible route metadata; execute real dispatcher, no second Hono winner.
  • Before cancellation/intercept, leave unowned native POST formData to browser/server.
  • History/native fragment navigation and reload default to browser; distinguish hash router semantics.
  • Fresh AbortController on each mount; disposed signals abort; remount receives a new live signal.
  • Adversarial tests and real website/packaged-consumer builds on final SHA; feat: implement Beta.2.1 unified Router and standalone Element tooling #1343 currently has unclosed SSG/navigation findings.

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