2026-09-26 23:06:16 +02:00
|
|
|
|
---
|
|
|
|
|
|
title: Independent Feature Boundary
|
|
|
|
|
|
status: draft
|
|
|
|
|
|
maturity: hypothesis
|
|
|
|
|
|
families: [composition, execution]
|
|
|
|
|
|
scales: [L1, L4]
|
|
|
|
|
|
admission: research-candidate-only
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
# Independent Feature Boundary
|
|
|
|
|
|
|
|
|
|
|
|
Context: a cohesive frontend capability needs a release cadence different from its
|
|
|
|
|
|
host or neighboring capabilities. Delivery autonomy competes with integration cost,
|
|
|
|
|
|
shared experience and runtime dependency management.
|
|
|
|
|
|
|
|
|
|
|
|
Proposed solution: define the capability's public composition contract and package it
|
|
|
|
|
|
as a separately releasable unit with an explicit activation mechanism. State supported
|
|
|
|
|
|
host/API/dependency versions, lifecycle and cleanup behavior, route ownership, and
|
|
|
|
|
|
which shared state may cross the boundary. Validate compatible old/new combinations
|
|
|
|
|
|
before changing the binding that activates a release.
|
|
|
|
|
|
|
|
|
|
|
|
Publishing bytes, activating them and retiring the old version are separate actions.
|
|
|
|
|
|
Plan for cached bindings, lazy loads and running sessions that retain old code. Define
|
|
|
|
|
|
rollback scope, artifact retention and failure behavior; neither an asset rollback nor
|
|
|
|
|
|
unmount reverses accepted domain operations. A new incompatible contract may require
|
|
|
|
|
|
a coordinated migration despite separate pipelines.
|
|
|
|
|
|
|
|
|
|
|
|
Result: compatible changes can be activated without rebuilding unrelated features,
|
|
|
|
|
|
but compatibility testing, observability and composition policy add cost. A directory,
|
|
|
|
|
|
repository, lazy chunk or lifecycle export alone does not provide this independence.
|
|
|
|
|
|
Shared runtime/startup dependencies can still couple failures. Code in the same browser
|
|
|
|
|
|
context is not thereby security-isolated. Preserve usable navigation and focus across
|
|
|
|
|
|
partial loading, replacement and teardown.
|
|
|
|
|
|
|
|
|
|
|
|
Evidence: [deployment-boundary review](../reviews/FeatureDeploymentBoundaries.md)
|
|
|
|
|
|
D04–D09 locates runtime binding, lifecycle exports and separate workflow definitions
|
|
|
|
|
|
in one example family, with documentary alternatives. CI success, actual deployment
|
|
|
|
|
|
independence and complete-pattern recurrence are unverified. No canonical identity
|
|
|
|
|
|
or admitted graph relations; hypothesis only.
|
|
|
|
|
|
|
|
|
|
|
|
Alternative: a coordinated application release with [Vertical Feature Slice](VerticalFeatureSlice.md)
|
|
|
|
|
|
when separate cadence is unnecessary. Proposed relations: may use
|
|
|
|
|
|
[Failure Boundary](FailureBoundary.md) for a specified fault scope and
|
|
|
|
|
|
[URL-addressable State](URLAddressableState.md) for shared route contracts. Neither
|
|
|
|
|
|
separate activation nor [Islands of Interactivity](IslandsOfInteractivity.md) entails
|
|
|
|
|
|
the other. Boundaries can coincide without becoming the same pattern.
|
|
|
|
|
|
|
|
|
|
|
|
Next test: [VC-06](../walkthroughs/VC06-MicrofrontendEstate.md) proposes compatible and
|
|
|
|
|
|
incompatible feature releases, failed loading and binding rollback across fresh and
|
2026-09-26 23:14:34 +02:00
|
|
|
|
already-open sessions. A bounded native-module experiment now exercises these cases; see the update below.
|
|
|
|
|
|
|
|
|
|
|
|
## Executed activation/session evidence — 2026-09-26
|
|
|
|
|
|
|
|
|
|
|
|
[Feature release experiment](../reviews/FeatureReleaseExperiment.md) meets 14/14
|
|
|
|
|
|
expected observations across two browsers in an authored native-module fixture.
|
|
|
|
|
|
Distinguish retained artifact, per-document binding and evaluated module lifetime:
|
|
|
|
|
|
a fresh session follows activation/rollback while an existing session retains its
|
|
|
|
|
|
binding; deleting the old artifact can break its delayed first load. A post-import
|
|
|
|
|
|
API check runs after evaluation and is not a security boundary. A shared startup
|
|
|
|
|
|
failure can block otherwise separate features. These are bounded mechanism observations,
|
|
|
|
|
|
not execution of the source examples or proof of full-pattern production independence.
|
2026-09-26 23:30:15 +02:00
|
|
|
|
|
|
|
|
|
|
## Activation conflict and reload policy — 2026-09-26
|
|
|
|
|
|
|
|
|
|
|
|
[Follow-up tests](../reviews/ActivationConflictsAndReload.md) demonstrate lost updates
|
|
|
|
|
|
under blind binding replacement and explicit conflict rejection/refetch for disjoint
|
|
|
|
|
|
intent. A same-feature stale rollback is not automatically reapplied. Atomicity is
|
|
|
|
|
|
verified only in the single-process fixture, not a distributed deployment service.
|
|
|
|
|
|
|
|
|
|
|
|
For unfinished work, distinguish defer, preserve-and-reload and authorized explicit
|
|
|
|
|
|
discard. Block unsafe progress on storage refusal or unresolved operation outcome;
|
|
|
|
|
|
read the latest draft after asynchronous checks. Revalidate stored schema in the new
|
|
|
|
|
|
session because activation can change after preflight. The tested per-tab preservation
|
|
|
|
|
|
is not native-unload/crash protection or a substitute for retention policy.
|