> For the complete documentation index, see [llms.txt](https://nytshift.gitbook.io/nytshift-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nytshift.gitbook.io/nytshift-docs/evidence-and-handoff-records/nightshift-full-trader-qa-2026-07-23.md).

# Full trader QA report

**Date:** 2026-07-23\
**Production URL:** <https://nytshift.xyz/terminal\\>
**Test identity:** signed-in Privy customer session\
**Execution scope:** PAPER and read-only venue data only. No real order, withdrawal, deposit, or fund transfer was submitted.

## Executive result

NightShift's desktop PAPER trading path is operational. The signed-in production terminal passed end-to-end tests for market and limit execution, reduce-only protections, actual stop-loss and take-profit triggers, persistent GTC orders, portfolio accounting, database recovery, and multi-market/multi-venue PAPER activity.

One authenticated-profile defect was found during the run. Privy can return a bounded embedded-wallet identity with an empty `chain_id` when the chain is unreported. NightShift rejected that valid bounded response. The projector now normalizes only that empty value to `null`, keeps the wallet fail-closed as `CHAIN UNREPORTED`, and has a regression test. The fix was built on Linux, promoted atomically, and reverified in the signed-in production session.

**Verdict:** PAPER core and customer database/profile persistence passed. Real-money trading is **not certified or authorized** yet; production execution remains deliberately locked.

## Release evidence

| Evidence                          | Production value                                                   |
| --------------------------------- | ------------------------------------------------------------------ |
| Commit                            | `69d9aec82a6768898c60102a7948d50eb81e6e27`                         |
| Artifact SHA-256                  | `e9567abd74f312c8761297623811cba5ae69e0f20aa0a1e10f4120f096aafb61` |
| Release state                     | `verified`                                                         |
| Public health                     | `ok`                                                               |
| PostgreSQL customer store         | `ready`                                                            |
| Customer profiles                 | `1`                                                                |
| Active PAPER sessions after reset | `0`                                                                |
| Execution mode                    | `disabled`                                                         |
| Mainnet allowed                   | `false`                                                            |
| Operator session                  | `false`                                                            |

The immutable Linux artifact contained 2,836 files, had a verified tree SHA-256 of `6a7fb0eed9209a522dbdf9dfaaebd252475a85c19d3ee96cc55db6140f9a7c98`, and was built with Node 24.13.0, pnpm 11.7.0, Next.js 16.2.10, and Python 3.12.3.

## Trader test matrix

| Area                   | Production tests performed                                                                                                       | Result         |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------- | -------------- |
| Authentication         | Privy sign-in, logout/login refresh, signed-in reload, private workspace access                                                  | PASS           |
| New-user education     | Complete five-step onboarding guide, coachmarks, changelog, build-trust panel                                                    | PASS           |
| PAPER setup            | Starting balance, daily-loss limit, drawdown limit, spread, slippage, per-market cap, total exposure cap                         | PASS           |
| Risk validation        | Rejected a per-market cap larger than the total portfolio cap                                                                    | PASS           |
| Market orders          | Hyperliquid BTC long and short fills from visible live depth                                                                     | PASS           |
| Position sizing        | 2x sizing guide and one-market exposure cap                                                                                      | PASS           |
| Reduce-only            | Partial close; rejected wrong-side/add, over-close, and position-flip attempts                                                   | PASS           |
| Stop-loss validation   | Rejected an invalid long stop above entry and an already-triggered stop                                                          | PASS           |
| Stop-loss execution    | Armed a valid stop, observed the trigger against newer market data, and closed the position from visible live depth              | PASS           |
| Take-profit execution  | Armed a valid short take-profit, observed the trigger, and closed the position from visible live depth                           | PASS           |
| Trigger lifecycle      | Create, persist through reload, cancel, and database recovery                                                                    | PASS           |
| Immediate limit        | Crossing order filled; non-crossing order returned `NO CROSSING LIVE DEPTH` without inventing a fill                             | PASS           |
| GTC PAPER limit        | Non-crossing local order created, reserved exposure, survived reload, and canceled locally without implying a venue cancel       | PASS           |
| Multi-market portfolio | Concurrent Hyperliquid ETH long and SOL short; both marked and closed reduce-only                                                | PASS           |
| Multi-venue PAPER      | Lighter ETH and Arcus BTC-USD open/close cycles                                                                                  | PASS           |
| PnL and portfolio      | Equity, marked/unmarked state, position count, and realized lifecycle observed across trades                                     | PASS           |
| Persistence            | PAPER setup/orders/triggers survived reload; offline/browser recovery converged to `DATABASE SYNCED`                             | PASS           |
| Customer profile       | Private profile opened, saved as revision 1, and persisted through reload                                                        | PASS after fix |
| Watchlist and alerts   | Add/remove watchlist; create/remove alerts; alert-direction guard                                                                | PASS           |
| Workspaces             | Full desk, Chart focus, Research, and custom save/apply/delete                                                                   | PASS           |
| Charts                 | Line, area, Heikin-Ashi, candles; 14 intervals; six ranges; 5,000-bar backfill; indicators, drawings, zoom/FIT, fullscreen entry | PASS           |
| Market data            | Live order book, trades, WebSocket/REST updates, perp-risk context                                                               | PASS           |
| Discovery              | Command palette, market search across venues, Robinhood Chain catalog and gate map                                               | PASS           |
| Public account tools   | Invalid-address rejection; zero-address public account; positions, open orders, history, Time Machine lock                       | PASS           |
| Live safety            | LIVE mode stayed fail-closed; approval unlock disabled; signer locked; dead-man switch unarmed; no venue order sent              | PASS           |

The alert engine's live-market crossing was not forced during the session. Its trigger behavior is covered by deterministic automated tests.

## Automated verification

| Gate                               | Result                  |
| ---------------------------------- | ----------------------- |
| PAPER readiness suite              | 126/126 passed          |
| Full monorepo tests                | 1,311 passed, 2 skipped |
| Turbo tasks                        | 16/16 successful        |
| Full typecheck                     | PASS                    |
| Optimized production build         | PASS                    |
| Linux release handoff verification | PASS                    |
| HTTPS routes and health            | PASS                    |
| HTTP-to-HTTPS redirect             | PASS                    |

The two skipped tests are the local PostgreSQL integration tests:

* `apps/web/app/api/customer-trading/store.postgres.test.ts`
* `apps/web/app/api/customer-trading/live-store.postgres.test.ts`

They require a local database test environment. The deployed PostgreSQL path was separately validated through signed-in profile and PAPER persistence, reload, recovery, and production health checks.

## Defect fixed during QA

**Symptom:** the signed-in customer profile returned `PRIVY USER PROFILE UNAVAILABLE`.

**Root cause:** Privy's bounded identity token reported an embedded EVM wallet with `chain_id: ""`. The NightShift provider-profile projector treated the empty value as invalid instead of “chain not reported.”

**Fix:** exact empty `chain_id` values are normalized to `null`. They are not accepted as Robinhood Chain evidence, and the UI displays `CHAIN UNREPORTED`. Malformed non-empty chain values still fail closed.

**Verification:** targeted regression, full web suite, full monorepo suite, typecheck, production build, immutable Linux release, signed-in profile save, and reload all passed.

The first isolated pre-promotion smoke run intentionally failed because its environment omitted the database configuration. Nothing was promoted. The smoke environment was corrected, the complete check passed, and only then was the release promoted.

## Clean handoff state

* PAPER ledger reset.
* Zero open PAPER positions.
* Zero open PAPER orders.
* Zero active PAPER sessions in PostgreSQL.
* Test alerts, watchlist changes, custom layout, and drawings removed.
* Default full-desk workspace and candles restored.
* Customer profile revision 1 persisted.
* Customer database and profile stores report `ready`.
* LIVE execution, mainnet, operator session, approvals, and withdrawals remain locked.

## Workstation handoff

* No task-owned server, watcher, test runner, or browser-automation process remained after QA.
* CPU averaged 19.4%.
* 5.61 GiB of 15.71 GiB RAM was free.
* C: reported healthy with 12.55 GiB free.
* Hardware temperatures were not exposed by Windows, so thermal status could not be independently measured.
* Windows still reports the earlier external-drive reset and retry warnings. D: is not currently mounted and must not be used for project migration until the drive is replaced or passes a trustworthy long diagnostic.

## Remaining launch blockers

These items prevent a truthful real-money launch certification:

1. **No authorized funded live test has been run.** Real orders and funds require explicit action-time authorization, a capped test amount, and a rollback/close plan.
2. **Live execution is disabled.** Mainnet is false, the operator session is unconfigured, the signer is locked, and the dead-man switch is unarmed.
3. **Privy production evidence is unconfigured.** Google sign-in worked in the browser, but the server health contract still reports production identity evidence, Google-login evidence, and wallet-login evidence as unconfigured.
4. **The licensed Advanced Charts package and its production evidence are unconfigured.** The current terminal chart features passed, but the licensed integration cannot be certified.
5. **Robinhood Chain data is diagnostic-only.** The public RPC path is healthy, but a production provider, archive evidence, and WebSocket configuration are absent. The Privy wallet's bounded token also reports no chain, so it cannot be treated as RHC capital.
6. **Mobile is not fully trader-certified.** A 390×844 visual smoke was completed, but mobile gestures, keyboard behavior, background/resume behavior, and the complete trade lifecycle need a dedicated device pass.

## Final assessment

NightShift can be used for signed-in desktop PAPER trading with persistent PostgreSQL state and tested risk controls. The run exercised the terminal like a trader, left it flat and clean, and fixed the authenticated-profile failure found along the way.

It is not yet safe to describe NightShift as real-money production-ready. The next controlled milestone is a separately authorized, low-value live rehearsal only after the identity evidence, signer/operator controls, and live safety checklist are configured and verified.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://nytshift.gitbook.io/nytshift-docs/evidence-and-handoff-records/nightshift-full-trader-qa-2026-07-23.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
