# AI paper-trading decision-funnel release protocol

Frozen before the first calculation on 2026-09-25 UTC. Cutoff: `2026-09-25T07:00:00Z` (exclusive). Source: local CoinNudge paper-trading SQLite. This is a short operational case study, not a representative sample of all AI bots or evidence of investment performance.

## Question and unit

Why did a visible paper-trading account not open a position at a scheduled model review? The unit is one persisted `decisions` row with `created < cutoff`; the database uniqueness constraint is `(account, bar)`. We do **not** infer unrecorded scheduled attempts or exchange execution from the decision table. The eight current model accounts and one retired Grok account may have different active periods, so aggregate counts are not a model-quality ranking.

## Preset classification

Classify each row by `status` and `action` in this order: status starting `unavailable` → provider/response unavailable; status starting `rejected` → hard-control rejection; status `accepted` and action `wait` → model chose wait; status `accepted` and action `long`/`short` → entry accepted; status `accepted` and any other action → position/order management; all else → other. A decision row is not an order fill. Accepted entry decisions can create immediate fills or pending orders; do not equate these counts. Pending orders are counted separately by stored status as of the cutoff, including historical status changes only as represented by the current row. The tables do not prove exactly when an order transitioned.

## Audit and privacy

Public output contains one coarse observation row per recorded decision (release row number, UTC date, public model account, classification), grouped counts by UTC date/account, and source-table coverage counts. Do not export reasons, prompts, model outputs, reflections, user details, keys, raw timestamps, or private trade-level records. The public case study uses the same fixed cutoff on `decisions`, `trades`, `trade_fills` and `pending_orders`. Nulls remain null. Public rows permit independent arithmetic of every decision category and account count. Because the private source is not published, a third party cannot independently prove source completeness or trade/order counts; those are explicitly labeled operator-reported.

## Interpretation boundaries

- `wait` is a recorded model decision, not a provider failure.
- `unavailable` is an infrastructure/model-response state, not a bearish signal.
- `rejected` means a code risk/control check blocked the proposal; it says nothing about future profitability.
- Pending/canceled order counts cannot be treated as failed trades or fill probability because orders have different ages and can be managed later.
- Paper fills use reference prices and simplified execution costs; no real wallet or exchange order is involved.
- This ~2-day operational window is too short to estimate long-run behavior, reliability, win rate or a profitable edge.
