# Verification — issue #100 Verified locally on 24 October 2026; no live Hub was started or restarted, and no signing, trading, activation, deposits or withdrawals were performed. Changes are uncommitted and unpushed. Existing staged/deleted change-97/change-99 artifacts and the pre-existing untracked NFS log file were left untouched. ## Build and focused checks - `JAVA_HOME=/usr/local/software/java/jfx-25 ./gradlew build` passed against the final sources: 42 existing tests, zero failures/errors. Some intermediate runs encountered transient NFS locks while deleting binary test results; normal reruns succeeded without changing build configuration. - Temporary `/tmp/issue100-check/Issue100Check.java` passed 66 focused checks. No permanent test suite was added. Fixtures exercised gross Long/Short totals, once-only Cross capital/Value, missing components, valid empty scopes, immutable collections, positive/negative PnL, zero/negative denominators, Jupiter response completeness/duplicates/units, Phoenix funding signs and fee overrides, size-dependent tiers and quote-lot rounding, negative base-lot exponents, unsupported spot collateral, funded empty Cross accounts, failed refresh, retained timestamps, recovery to empty, independent wallet/venue attempts, no-I/O snapshot access and Phoenix 429 cooldown. - Hand-checkable Cross fixture: 100 USD Long + 100 USD Short = 200 USD gross exposure; shared collateral 80, price PnL +5, net unsettled funding 0 and exit fees 1 give equity 85 and Value 84. Cross leverage is 200/85. Initial margin requirements of 10 per child are not added to the 80 owned capital. - Tier fixture: 150 base lots at exponent 2 and price 100.009, tick size 100, between tiers (100 lots, 10×) and (200 lots, 5×), uses integer leverage 7 and initial margin 21.428572 USD. Exposure remains 150.0135 USD. ## Read-only live comparison The new adapters were read directly, outside the Hub, from **2026-10-24 10:18:38 UTC to 10:19:13 UTC** (12:18–12:19 CEST). The controlled PROD wallet was `H5Yrdm7B4FHhTxhPw9SVwFzQyTEL6bAPptZuTyRxcepq`; the existing TEST wallet was `6NyYEoXmJyBXvU4pvv9aoxZNdyqqtkmPBZFEDkRDHcqp`. The other five PROD wallets remain configured, but were not all read for this preview. Counts and prices are observations, not fixed expectations. | Observed scope | Positions | Collateral USD | Gross Exposure USD | Price uPnL USD | Estimated Value USD | | --- | ---: | ---: | ---: | ---: | ---: | | Controlled PROD wallet, Phoenix | 32 | 938.131075 | 4527.060948 | -328.677770 | 608.027266 | | Controlled PROD wallet, Jupiter | 6 | 54.993558 | 704.568047 | -15.752428 | unavailable | | Controlled PROD wallet, combined | 38 | 993.124633 | 5231.628995 | -344.430198 | unavailable | | TEST wallet, both venues | 0 | 0 | 0 | 0 | 0 | Jupiter API units and collateral were independently checked against a read-only Solana `getMultipleAccounts` response for all six returned position identities. API `sizeUsd` and `collateralUsd` matched the on-chain values exactly. USD and price fields use six decimal places; percentage fields are already percentage points. The UI's leverage and isolated PnL percentage are derived independently from precise collateral, rather than using rounded API ratios. Phoenix uses exact signed quantity × REST mark plus virtual quote for price PnL; quote lots are 1e-6 USD. Estimated equity adds signed unsettled funding, and Value subtracts estimated closing taker fees with the REST account override. Settled funding/fees are not charged again. Tier interpolation and integer price rounding were cross-checked against the official SDK `margin/math.ts`, `margin/compute.ts`, `units.ts` and Rust leverage-tier implementation. ## JavaFX verification A standalone `/tmp/issue100-check/PerpsPreview.java` used the actual immutable read-only PROD/TEST observations above. Controlled edge cases were a separate preview tab and are absent from application sources. It checked eight columns, the visible root, Cross grouping, preserved selection/expansion/row identity on unchanged and changed snapshots, positive/negative/rounded-zero PnL and tooltip definitions. Both 1100-pixel and 600-pixel layouts were inspected; the latter has horizontal scrolling at useful column widths. Root labels use explicit readable text color, including after selection and tab changes; column factories are installed before the initial root. Screenshots produced and visually inspected: - `/tmp/issue100-check/preview-prod.png` - `/tmp/issue100-check/preview-test.png` - `/tmp/issue100-check/preview-edges.png` - `/tmp/issue100-check/preview-tooltip.png` - `/tmp/issue100-check/preview-small-window.png` ## OpenSpec and documentation The change and all four affected main specifications pass strict validation: ```text openspec validate 100-perps-capital-and-risk --strict openspec validate evelyn-perps-service --type spec --strict openspec validate evelyn-perps-overview --type spec --strict openspec validate phoenix-perps-service --type spec --strict openspec validate jupiter-perps-overview --type spec --strict ``` Main specs were synchronized; the change remains active for review. Project Evelyn/Phoenix documentation and the shared `r35157_docs/projects/evelyn/README.md` were updated. `git diff --check` passed. Whole-project `openspec validate --all --strict` reports 24 passed and two pre-existing failures: placeholder Purpose sections in `javafx-runtime-service` and `nenjim-process-manager`. Those unrelated specifications were not changed. ## Known unavailable metrics and valuation limits - **Jupiter Value is unavailable**, including higher totals requiring it. The observed API `valueUsd` subtracts opening fees from collateral that already matches post-fee on-chain collateral. Its collateral-valuation/profit-cap treatment is not verified. No fabricated zero, partial total or speculative fee-only correction is displayed; see `docs/JupiterPerpsOverview.md`. - Phoenix Cross position leverage/ROI conventions remain unverified. Those ratios are unavailable; dollar PnL is shown and account effective leverage is provided. Individual Cross position Value is inapplicable. - Nonzero unsupported spot collateral or missing funding/fees/PnL makes the affected collateral/equity/Value unavailable. This version does not claim full account utilization or include open-order risk adjustments in such a metric. - Valuations use periodic reference observations, not executable prices. Slippage, price impact, swaps, network fees, account rent and future funding are excluded. Phoenix state and prices are separate REST observations. Failed refreshes can retain old data indefinitely with explicit status/time. - No changes were made to shared `detag.conf`, wallet lists, trading/alarm implementations, EMC polling cadence or the 60-second post-cycle delay.