Async Initialization

Requirements

Requirement: Single-Point Async Preparation

The system SHALL provide a single prepare() function that coordinates all framework initialization asynchronously.

Scenario: Basic application initialization

  • WHEN an application calls prepare() with an AsyncExitStack

  • THEN the system initializes distribution detection, platform directories, configuration, and inscription

  • AND returns an immutable Globals dataclass with all framework state

Scenario: Custom application metadata

  • WHEN an application provides an ApplicationInformation instance to prepare()

  • THEN the system uses the provided metadata for platform directory derivation

  • AND configuration loading uses the application name for environment variable prefixes

Scenario: Custom configuration acquirer

  • WHEN an application provides a custom AcquirerAbc implementation to prepare()

  • THEN the system uses the custom acquirer for configuration loading

  • AND all other initialization steps proceed normally

Scenario: Resource cleanup on exit

  • WHEN the application’s AsyncExitStack is closed

  • THEN all resources registered during initialization are properly cleaned up

  • AND cleanup occurs in reverse registration order

Requirement: Async Resource Management

The system SHALL integrate with AsyncExitStack for proper lifecycle management of async resources.

Scenario: Concurrent resource initialization

  • WHEN external async resources are registered during prepare()

  • THEN those resources are managed by the provided AsyncExitStack

  • AND cleanup is guaranteed even if initialization partially fails

Scenario: Exit stack propagation

  • WHEN prepare() completes successfully

  • THEN the AsyncExitStack is stored in Globals.exits

  • AND application code can register additional resources via Globals.exits