> For the complete documentation index, see [llms.txt](https://docs.trover.tech/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.trover.tech/engineering/verify-2026-09-09-terminal-orders-and-disk.md).

# Verify 2026-09-09: terminal orders, snipe wallet gate, disk writes

Migration status: **none**.

## What changed

Web (Vercel on push):

* Tab rows in the NFT terminal (`listings / mints / sales / activity` and `items / offers / activity / holders / traits`) scroll sideways when they do not fit: mouse wheel, touch, a thin scrollbar on hover, and click-and-drag (`components/ui/DragScrollRow.tsx`).
* Limit orders: switching to `limit` starts the price at the floor, a −50%…+50% slider moves it relative to the floor, the input shows the offset, and the amber order line is now drawn on the dots chart too, with a draggable handle (`NftSaleScatter` gained `orderLine` / `onOrderLineChange`). The candle chart already had the draggable line. A hint under the input says what executes (collection offer or listing, 24 h).
* "N owned assets detected" no longer counts the whole collection (API fix below).
* Snipe is labelled `beta`; the panel warns when the collection is already revealed (arming buys immediately by the chosen filters) and defaults the trigger to "any listing" in that case.
* "Active orders" block at the top of the quick-trade panel: armed snipe plans, open listings and offers on this collection, each with a cancel (plans via DELETE; orders through a `cancel_order` quote + execute).
* Internal test bench at `/internal/sandbox` (noindex, unlinked): the same snipe and active-orders components against an in-memory fake API with a market ticker, reveal/delegation toggles and an event log.

API:

* `requireProfile` now includes the canonical wallet's capability record; the snipe and quote routes resolve the execution wallet through `executionWalletOf()` (wallet capability, else `wallets[]`, else profile capability). This is why arming said "delegated execution wallet required" while the switcher showed the same wallet as delegated.
* `/collections/:slug/owned` uses the account NFTs endpoint filtered by collection and contract (the collection endpoint ignored `owner`).

Worker (disk writes):

* Candle rebuild, trait-count refresh and rank refresh write only rows that changed (they rewrote everything: 2.4M candle deletes, 2M trait-count inserts + deletes, 9.3M metadata updates on the 2026-09-08 counters).

## Checks run

`tsc --noEmit`: api, worker, web, integrations clean.

## Checks for you

1. Terminal on a narrow window: drag the tab row sideways; buttons still click.
2. Sell → the owned count matches your wallet; buy → `limit`: the line shows on both charts, drag it, the input follows; slider moves it.
3. Snipe with your delegated wallet selected: arming succeeds (before: 409). Cancel it from "active orders".
4. `/internal/sandbox`: arm a plan, watch fills in the log, cancel orders.

## Deploy

Frontend: pushed to `main`. Backend (one at a time, detached):

```
ssh trevor-server
cd ~/trover && git pull --ff-only origin main
nohup bash -c 'set -x; docker compose -f docker-compose.yml -f docker-compose.production.yml build api worker && docker compose -f docker-compose.yml -f docker-compose.production.yml up -d --no-deps api worker; echo DEPLOY_EXIT=$?' > deploy-$(date +%Y%m%d-%H%M).log 2>&1 &
```


---

# 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://docs.trover.tech/engineering/verify-2026-09-09-terminal-orders-and-disk.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.
