frontend-patterns/research/candidates/IndependentFeatureBoundary.md
tegwick f273a190f0 Test activation conflicts and draft-preserving application reload
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a0cffe-206f-7323-89d3-b20ca4cf4bf9
2026-09-26 23:30:15 +02:00

74 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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
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.
## 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.