Files
com_r35157_nenjim-hubd-impl…/openspec/changes/archive/2026-10-26-103-perps-twap-warnings/verification.md
T

4.5 KiB

Verification — issue #103

Verified locally on 2026-10-26. No commits, pushes, Hub restart, deployment, signing or order changes.

Delivered behavior

  • The Phoenix decoder preserves filled outstanding orders with missing market metadata or no matching open position as typed immutable warnings. It also preserves matched progress with a timing warning when the next execution cannot be estimated.
  • TWAP discovery includes existing empty accounts. Metadata is conditional and warning-only markets cause no mark-price calls. Existing request pacing, timeout and shared 429 cooldown remain in use.
  • Warnings map to their real position or Cross account. Empty warning-only Cross accounts remain visible without invented positions or capital. Unmatched isolated orders remain on Phoenix with their real subaccount identity.
  • Amber vector triangles and concise text appear in TWAP cells. Distinct source orders propagate through every actual ancestor to Perpetual Contracts, independently of expansion. Successful recovery clears only resolved orders; failures and five-minute/future-date staleness remain qualified at every level.
  • Detail tooltips preserve raw counters, IDs and original receipt times. They have bounded scrollable content and remain available while moving between their owner cell and details. Risk and existing normal TWAP bars remain independent.
  • Updated docs/Evelyn.md, docs/PhoenixPerps.md and the shared r35157_docs/projects/evelyn/README.md; removed obsolete matching/discovery/group-cell claims. The three affected main OpenSpec specifications are synced. No permanent tests or dependencies were added.

Checks

  • JAVA_HOME=/usr/local/software/java/jfx-25 ./gradlew build: successful; 42 existing tests, no failures/errors/skips.
  • /tmp/Issue103Check.java: 32 focused assertions passed. Covers the captured real asset-97 response; missing markets; matching and unmatched positions; hidden zero-fill/completed orders; identity/duplicate/counter rejection; immutable lists; correct Cross/isolated mapping; warning-only empty accounts without mark requests; unchanged monetary totals; failure retention/recovery; and 429 cooldown. Uses local HTTP fixtures and the actual decoder/adapter/service.
  • /tmp/Issue102Check.java: all 68 existing temporary risk checks still pass, including exact boundaries, account scope and retained/future observations.
  • /tmp/Issue103Preview.java: 82 JavaFX assertions passed. This is an assertion count, including repeated checks of recycled empty cells, not 82 distinct user scenarios. Checks actual warning graphics, source and ancestor counts over two wallets, collapsed Cross/Phoenix/wallet/root nodes, normal 28-hour progress, timing warning plus bar, margin-risk independence, direction backgrounds, accessible text, tooltip content/scrolling/leave behavior, snapshot failures, five-minute aging, recovery, row identity/selection, warning-only Cross, empty venue hiding and horizontal scrolling.
  • Rendered JavaFX images inspected in /tmp/issue103-check/: twap-warnings-expanded.png, twap-warnings-collapsed.png, twap-warning-tooltip.png, twap-warning-tooltip-bottom.png, twap-warnings-stale.png, twap-warning-empty-cross.png, twap-warnings-small-window.png. Long tooltip height and contrast were corrected during inspection. TWAP was scrolled into the viewport before final visual checks.
  • Strict validation passes for change 103-perps-twap-warnings and specifications phoenix-perps-service, evelyn-perps-service and evelyn-perps-overview. Existing long modified requirement paragraphs produce informational length hints only.
  • Changed working-tree and change-specific staged whitespace checks pass; 24 local documentation file links resolve. Pre-existing staged/deleted OpenSpec artifacts for #97 and #99 were left untouched.

Read-only live observation

/tmp/Issue103Live.java used the actual default paced Phoenix adapter and local PDA derivation against the owner's reported wallet. One lookup ran from 2026-10-26 05:25:26 to 05:25:38 UTC. It returned one account with eight held positions and one warning:

PDA/subaccount: 0/0
Asset ID: 97
Reason: MARKET_UNAVAILABLE
Progress: 34/346
Remaining: 312
Original TWAP receipt: 2026-10-26T05:25:28.553550180Z
Mapped Cross warnings: 1
Venue fallback warnings: 0

The order's market identity and execution status remain unresolved; this verification does not claim cancellation, delisting or stopped execution. It confirms local reader/mapping behavior, not deployment to the running Hub. Live reads are separate observations, not an atomic portfolio snapshot.