88: Rename Evelyn to EvelynStatusService and expose the calculated reference price

This commit is contained in:
2026-10-04 19:42:21 +02:00
parent 035a01c48c
commit 9c636bc93d
21 changed files with 788 additions and 111 deletions
+33
View File
@@ -28,6 +28,7 @@
* [8. Risici, fail-safes og antifragilitet](#8-risici-fail-safes-og-antifragilitet)
* [9. Udvikling, YouTrack-integration og offentlig gennemsigtighed](#9-udvikling-youtrack-integration-og-offentlig-gennemsigtighed)
* [10. Fremtidige emner / TODO](#10-fremtidige-emner--todo)
* [11. Statusservice og referencepris](#11-statusservice-og-referencepris)
<!-- TOC -->
## 1. Introduktion formål og vision
@@ -301,3 +302,35 @@ kapitalallokering over tid (AI-drevet tuning).
ekstreme markedsbevægelser.
- Open API for ekstern integration: Gør det muligt at tilføje eksterne datafeeds, udveksle signaler med andre
systemer, eller automatisere funding-opgaver.
## 11. Statusservice og referencepris
Evelyn er navnet på det samlede system. `com.r35157.evelyn.service.status.EvelynStatusService` indsamler og
persisterer statusindeks for én navngiven instans og giver consumers adgang til den samme referencepris, som
Evelyn Price Index bruger. Referenceimplementeringen er `EvelynStatusServiceImpl` under
`com.r35157.evelyn.service.status.impl.ref`. Hub'en ejer fortsat startup af de enkelte processer.
`AssetPrice getReferencePrice(Instant timestamp)` beregner prisen for det angivne tidspunkt:
```text
Start: 2026-07-31T22:00:00Z
Startpris: 15.00 USDT pr. EVE
Årlig faktor: 1.20
Årslængde: 31,536,000 sekunder
referencePrice = 15.00 × 1.20^(elapsedSeconds / 31,536,000)
```
Resultatet indeholder det kanoniske EVE/USDT-tradingpar, så quote-valutaen er eksplicit. Prisen er 15 ved start og
18 efter ét 365-dages år. Statusindekset bruger `((actualPrice / referencePrice) - 1) × 10` med samme samplingtidspunkt
og samme beregning og konstanter. Den eksisterende konvention om at behandle USDT som USD i indekset bevares.
Referenceprisen beregnes ved hvert kald uden tickeropslag, historikadgang, workers eller ændring af historikken.
Kaldet virker før sampling starter og mens den er stoppet, også uden provisionerede historikfiler. `null` afvises
med `NullPointerException`, og tidspunkter før kurvens start afvises med `IllegalArgumentException`.
Production og Test bevarer separate navne, historikker, livscyklusser og Mission Control-charts. Historikfilerne
ligger fortsat i `data/evelyn/<instance-name>/status.log` med formatversion 1. Sampling sker fortsat med cirka ét
minuts fast forsinkelse, og et punkt persisteres før publicering i et immutable snapshot. `stop()` rydder kun
hukommelsen og beholder navnereservationen, restart genindlæser filen, og `close()` frigiver navnet efter sikker
terminering. `EvelynStatusIndexPoint` bliver i sin eksisterende package med alle seks indeksfelter; kun Evelyn
Price Index beregnes og vises, mens de øvrige fem felter fortsat er nul. Legacy-rebalancering er fortsat inaktiv.
+9 -2
View File
@@ -268,14 +268,21 @@ nenjim.registry.service
nenjim.journal.service
assetaz.ticker.default
jupiter-perps-alarm.default
evelyn.service.prod
evelyn.service.test
evelyn.status.prod
evelyn.status.test
evelyn.iou-burner.prod
nenjim.javafx-runtime.service
evelyn.mission-control.default
nenjim.process-manager.default
```
Ved opgradering erstattes `evelyn.service.prod` med `evelyn.status.prod` og
`evelyn.service.test` med `evelyn.status.test` i deploymentets private `conf/NenjimHub.conf`, hvor de forekommer.
Bevar rækkefølge og aktive/udkommenterede valg. De gamle ID'er accepteres ikke længere. Hub'en konstruerer samme
navngivne `Production`- og `Test`-instanser gennem `EvelynStatusServiceImpl` og injicerer deres
`EvelynStatusService`-views i Mission Control. Process Manager viser de nye ID'er fra Hub'ens startup-snapshot.
Historik ligger fortsat i `data/evelyn/<instance-name>/status.log` med formatversion 1 og kræver ingen migration.
Efter validering konstruerer og starter Hub'en Registry, registrerer det som `nenjim.registry.service` og registrerer
startup-milepælen. Derefter konstrueres og registreres hele den nuværende passive graph uden at starte workers eller
processer. Først herefter behandles resten af `[AUTO_START]` i den angivne rækkefølge, begyndende med Journal. Hver
+1
View File
@@ -48,6 +48,7 @@
| JavaFxRuntimeService | Registrerbart service-view med kun non-null `runLater(Runnable)`. Samme referenceimplementation er en Hub-styret `NenjimProcess`; service-consumers får den gennem constructor injection, men får ingen lifecycle-, status-, configuration-, window-, event-, stop- eller restart-operationer. |
| TickerService | Lifecycle-frit domain/query-view med kun latest-price lookup. Samme `TickerServiceImpl`-objekt er separat en Hub-styret `NenjimProcess`; det ejer `PriceSource`-startup internt og stopper allerede startede sources som rollback, hvis Ticker-start fejler, men eksponerer ingen almindelig start- eller stop-operation. |
| EvelynIOUBurnerService | Tomt, lifecycle-frit domain-service-view, som bevarer typed Registry- og dependency-identitet, indtil eksterne domain-operationer findes. Samme `EvelynIOUBurnerServiceImpl`-objekt er separat en Hub-styret `NenjimProcess`; service-consumers får ingen start-, stop- eller restart-operationer. |
| EvelynStatusService | Service for én navngiven Evelyn-instans, som indsamler og persisterer statushistorik og udleverer den beregnede EVE-referencepris med eksplicit USDT-quote. Den bevarer sit eksisterende start/stop/close-contract; samme `EvelynStatusServiceImpl`-objekt startes af Hub'en som `NenjimProcess` under `evelyn.status.prod` eller `evelyn.status.test`. Evelyn er fortsat navnet på det samlede system. |
| Context | Fremtidig beskrivelse af ønskede/resolverede artifactvalg og isoleret runtime; ikke implementeret af Journal-laget eller første Registry-version. |
| Resolver | Fremtidig komponent for dependency graph og release-selection; Journal-laget repræsenterer reglerne, men vælger ikke en graf. |