Changes for docs/index.md: 1 added line, 0 removed lines.
Original line number
Diff line number
Diff line
@@ -2,6 +2,7 @@
| Doc | Description |
|---|---|
| [20260718_2236_duty-cycle-engineer-operation-estimate.md](20260718_2236_duty-cycle-engineer-operation-estimate.md) | Bill `RadioEngineer` for hours *worked* rather than hours elapsed. A 30-day engagement charged `720 h x €45` as if the engineer were on duty around the clock; `ResourceEstimator.Profile` gains an `operationHoursPerDay` duty cycle (defaulting to 24 via a secondary constructor, so no other spec's figures move) and the same engagement now costs `30 x 8 x €45`. The reported `durationSeconds` deliberately keeps echoing OSOM's window — only energy and cost are duty-cycled. The requested `shiftHours` reaches the estimate through a new overridable `estimateProfile(ResourceUpdate)` rather than the singleton's mutable field, which the background OPERATION callback would have raced on. |
| [20260716_1615_more-example-resource-specs.md](20260716_1615_more-example-resource-specs.md) | Grow the demo catalogue from 2 specs to 10 — `VirtualMachine`, `VPNAccess`, `KubernetesCluster`, `5GCore`, `RadioNode`, `CPE`, `MobilePhone`, `RadioEngineer` — each with its own characteristics and (invented) estimate profile spanning three orders of magnitude. The four tangible ones register as `PhysicalResourceSpecification`; `RadioEngineer` reports measured-zero energy against a labour cost rate, exercising the estimate contract's null-is-not-zero rule. Replaces the four hard-coded lists that had to stay in sync with one `ExampleResourceSpec` base plus a fail-fast `ResourceSpecRegistry`, so adding a spec is one class and one line. Fixes `CatalogClient` reply strictness (physical specs would have stack-traced at every startup) and a `Math.abs(hash)` idiom that can go negative. Adds the project's first tests (58). |
| [20260716_1430_report-lifecycle-estimates.md](20260716_1430_report-lifecycle-estimates.md) | Report simulated CREATION / OPERATION / TEARDOWN estimates (seconds / Watt-hours / dimensionless units) back to OSOM as JMS headers on the planning callback, one phase per callback. New stateless `ResourceEstimator` holds the per-spec cost model (invented numbers — it demonstrates the contract, it models nothing real); the OPERATION phase is sized by the `org.etsi.osl.operationDurationSeconds` window OSOM sends, and is omitted entirely when that header is absent rather than defaulted locally. Also adds `UPDATE/…/PLANNING` and `DELETE/…/PLANNING` routes, so OSOM's day-2 dry-runs stop landing on the production queues — `UNDER SIMULATION DELETE` now actually appears in the log. |
| [20260707_0044_dedup-resourcereposervice.md](20260707_0044_dedup-resourcereposervice.md) | Refactor `ResourceRepoService`: extract `resourceIdFromHeaders` + `applyResourceLogic` helpers and header-key constants to remove three duplicated boilerplate blocks (no behavior change). |