3.4 KiB
MODIFIED Requirements
Requirement: NenjimHub owns composition and runtime startup
NenjimHub SHALL be the global runtime owner and SHALL expose start() throws Exception plus an immutable ordered snapshot of successfully started process IDs. It SHALL be neither a component nor a process and SHALL not register itself. Its only accepted startup attempt SHALL construct the Registry subsystem, start the Registry process first, register it as nenjim.registry.service, construct and register the Journal subsystem as nenjim.journal.service, start Journal second, and continue to the complete hardcoded business component set from issue #76 only after Journal startup succeeds. The Hub SHALL then resolve only the explicitly enabled business IDs through NenjimProcess, start them in dependency-safe order, announce the existing online point, and preserve the existing blocking wait. Registration SHALL never imply startup, and both the Registry and Journal managers SHALL remain distinct passive, unregistered handles retained privately by the Hub.
Scenario: Infrastructure starts before business composition
- WHEN the Hub performs its first startup attempt
- THEN it starts, registers and records Registry first, then registers, starts and records Journal before constructing components in the business graph
Scenario: Registry is process-discoverable
- WHEN the Registry registration has completed
- THEN the same object is retrievable as both
NenjimRegistryServiceandNenjimProcess
Scenario: Journal is process-discoverable
- WHEN the Journal registration has completed
- THEN the same object is retrievable as both
JournalServiceandNenjimProcessundernenjim.journal.service, while its manager is not registered
Scenario: Required hardcoded bindings are registered
- WHEN Hub composition completes
- THEN Journal and all component IDs and implementation choices enumerated by issue #76 are present exactly as configured, including intentionally inactive components and excluding both service managers
Scenario: Explicit startup subset preserves order
- WHEN Hub startup succeeds through the business-process phase
- THEN successful process order is
nenjim.registry.service,nenjim.journal.service,assetaz.ticker.default,evelyn.service.prod,evelyn.service.test,evelyn.iou-burner.prod, andevelyn.mission-control.default
Scenario: Deliberately inactive processes remain inactive
- WHEN Hub startup reaches its online point
- THEN
jupiter-perps-alarm.defaultand the dormant Composer, Process Manager, Test Tool, Soda Task Manager, and Suwimo Client paths have not been started
Scenario: Journal failure is fail-fast
- WHEN Journal process startup throws
- THEN Registry remains the only recorded process, no business component is constructed or started, the exception propagates, and the Hub neither announces online nor enters its final wait
Scenario: Hub start is not retried
- WHEN any first Hub startup attempt has begun and
start()is requested again - THEN the later request fails with
IllegalStateExceptionwhether the first attempt succeeded or failed
Scenario: Later startup failure is fail-fast
- WHEN a business process startup throws
- THEN the exception propagates, no later process starts, the Hub neither announces online nor enters its final wait, and no generic rollback or retry is attempted