Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

### Fixes

- Enforce startup locks and component-function checks for index and fallback
routes, retain a page's index slot after failed registration, and normalize
root-page fallback paths to `/*`.

- Ignore query results and consistency errors superseded by their own callbacks;
preserve newer invalidation work created by start or reconciliation abort
listeners instead of starting obsolete transport or suppressing retries.
Expand Down
8 changes: 5 additions & 3 deletions docs/development/0.5.0-readiness.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

Review date: 2026-10-09. This is a dated planning and evidence snapshot, not a release qualification certificate.

The initial organization inventory contained 24 repositories and 61 open issues. The existing 0.5.0 milestones contain 48 issues. The maintainer selected **existing milestone plus confirmed bugs**: include five additional confirmed CLI/Themes defects, for 53 issues in the working release scope. All five confirmed bugs, the Logos, Lucide, Monaco, telemetry and i18n hardening gates, and the SSR output, DOM node and host prop refactors are now closed; 40 scoped issues remain, plus eight backlog requests. Keep eight newer feature/integration requests in the backlog. No existing milestone issue is deferred by this review.
The initial organization inventory contained 24 repositories and 61 open issues. The existing 0.5.0 milestones contain 48 issues. The maintainer selected **existing milestone plus confirmed bugs**: include five additional confirmed CLI/Themes defects, for 53 issues in the working release scope. All five confirmed bugs, the Logos, Lucide, Monaco, telemetry and i18n hardening gates, and the SSR output, DOM node, host prop and query lifetime refactors are now closed; 39 scoped issues remain, plus eight backlog requests. Keep eight newer feature/integration requests in the backlog. No existing milestone issue is deferred by this review.

**Readiness: blocked.** The API contraction, deeper hardening evidence, three remaining core boundary refactors, coverage baseline, packed consumer matrix, and exact-version qualification remain open. Every published package is still on 0.4.x. An existing test suite or issue title does not establish the required hardening outcome.
**Readiness: blocked.** The API contraction, deeper hardening evidence, two remaining core boundary refactors, coverage baseline, packed consumer matrix, and exact-version qualification remain open. Every published package is still on 0.4.x. An existing test suite or issue title does not establish the required hardening outcome.

## Delivery order

Expand Down Expand Up @@ -50,7 +50,7 @@ Every issue in the initial inventory is included below; delivered rows retain th
| [askr#737](https://github.com/askrjs/askr/issues/737): refactor(ssr): isolate buffered output and portal finalization | Closed | Closed in core PR #761; atomic output, portals, references and hydration retain their contracts. |
| [askr#738](https://github.com/askrjs/askr/issues/738): refactor(renderer): split node dispatch from hydration and lifecycle coordination | Closed | PR #762 merged after focused/full checks, two measured workloads, architecture guards and cursor-failure retry regression. |
| [askr#739](https://github.com/askrjs/askr/issues/739): refactor(renderer): separate host prop lifecycle from prop value writers | Closed | PR #763 merged after mixed lifetime rollback/retry probes, full checks and production artifact comparisons. |
| [askr#740](https://github.com/askrjs/askr/issues/740): refactor(data): make QueryCell ownership and async state boundaries explicit | Release | Extract the private boundary with unchanged behavior; characterize the seam and pass required tests. |
| [askr#740](https://github.com/askrjs/askr/issues/740): refactor(data): make QueryCell ownership and async state boundaries explicit | Closed | PR #764 merged after six original-source regression failures, transition probes, full checks and three cache measurements. |
| [askr#741](https://github.com/askrjs/askr/issues/741): refactor(router): separate route scopes and path policy from record registration | Release | Extract the private boundary with unchanged behavior; characterize the seam and pass required tests. |
| [askr#742](https://github.com/askrjs/askr/issues/742): refactor(router): isolate navigation resolution from root and history commits | Release | Extract the private boundary with unchanged behavior; characterize the seam and pass required tests. |
| [askr#743](https://github.com/askrjs/askr/issues/743): test: measure branch coverage for critical runtime transitions | Release | Measure supported environments; set measured per-area branch floors; retain all existing suites. |
Expand Down Expand Up @@ -160,3 +160,5 @@ GitHub issues and comments were fetched per repository, rather than relying on s
Before #744 is closed, attach: package issue closures or approved scope changes; symbol/path removal and migration commits; hardening scenario outcomes; measured coverage; exact full-check results; all 18 package versions/commit IDs/tarball digests; clean packed consumer results; hosted promotion checks; tag targets; registry integrity/provenance; and clean post-publish consumer readback.

Use [Coordinated release](./coordinated-release.md) for wave sequencing and [Release](./release.md) for package/promotion gates.

- Core query lifetime PR [#764](https://github.com/askrjs/askr/pull/764) merged as `e31d344552471fd9616b331dca6aa845750b1938` and closed #740. Reader/definition ownership, retention timers and cache retirement now live below async publication. Six reproduced failures cover callback invalidation, abort-listener work, reconciliation retries and immediate-GC reattachment. Complete qualification passed 439 unit, 94 repository, 2,695 jsdom, 158 browser and 12 installed type cases. Three before/after cache-dedupe/abort captures retained all assertions with a 1.7% median increase. Exact-head and merge-head CI/CodeQL passed.
31 changes: 31 additions & 0 deletions docs/internals/route-authoring-ownership.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Route authoring ownership

`router/authoring.ts` retains the public overloads, component/path type inference,
execution-model restrictions and typed route references. Its implementations
delegate to three private modules; none is a package entrypoint.

| Owner | Responsibility |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `path-policy.ts` | Validate parameter syntax and normalize/join paths without consulting a registration table. |
| `registration-scope.ts` | Resolve paths against the active scope and capture group/page inheritance. Scope push/pop remains owned by the table in `store.ts`. |
| `route-registration.ts` | Validate record eligibility, compose inherited auth/policies/metadata, reject duplicate match keys, construct handlers and publish records into the active table. |

Scope callbacks remain synchronous. A throwing definition unwinds every scope
through `store.ts`'s `finally` blocks. Records registered before that exception
remain registered; route definitions are not transactions. A later root route
must not inherit the failed definition's path, layout, page, auth or metadata.

All leaf registration helpers (`route`, `index`, `fallback`) must respect the
active table's startup lock and accept only component functions. A fresh
`createRouteRegistry` uses its own unlocked table. `index` reserves its page's
single index slot only after the record is successfully registered.

Fallback paths use the same join rules as relative leaf paths. In particular,
`page('/', Page, ...)` owns `/*`, with `/` as its fallback prefix and `Page` in
its page chain. Nested-group fallback restrictions and inherited auth denial
order are unchanged.

The architecture tests enforce the dependency direction: path policy cannot
read the table; scope capture cannot publish records; record registration cannot
import the public facade. Unit probes exercise these seams alongside the
existing manifest, matching, auth, metadata and jsdom navigation suites.
Loading
Loading