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.