Skip to content

Instruction

Owner instruction (human:yasu, 2026-09-29): hermes corrects the ledger.

The two live-fill records backfilled on 2026-09-29 read the confirmation's QTY and PRICE columns the wrong way round. Verified against the source PDFs — see 2026-09-29:order-history-backfill-verification for the extracted text and method.

Append correct records. Do not edit the existing lines. The ledger is append-only; the existing records stay as the original observation, and the corrections supersede them. Correction key format, as used by 2026-09-24 on the NVDA straddle: <position_id>:<record_type>:<event_date>.

What the PDF says

AcctType|B/S|TradeDate|SettleDate|QTY|SYM|PRICE|Principal|COMM|TranFee|Add'lFees|Tag|NetAmount

08/25/26  B  QTY=1  PRICE=0.9600000  Principal=96.00   COMM=1.00  0.02  0.10  Net= -97.12   SPY 09/25/26 675 PUT
08/25/26  S  QTY=1  PRICE=1.1400000  Principal=114.00  COMM=1.00  0.04  0.10  Net=+112.86   SPY 09/25/26 685 PUT
   SUMMARY: SHARES BOUGHT 1.00 | DOLLARS BOUGHT -97.12 | SHARES SOLD -1.00 | DOLLARS SOLD 112.86

09/02/26  S  QTY=1  PRICE=0.5000000  Principal=50.00   COMM=0.00  0.04  0.10  Net= +49.86   SPY 09/25/26 675 PUT
09/02/26  B  QTY=1  PRICE=0.6100000  Principal=61.00   COMM=0.00  0.02  0.10  Net= -61.12   SPY 09/25/26 685 PUT
   both legs: UNSOLICITED CLOSING CONTRACT

QTY is 1 contract on every leg. 0.96 / 1.14 / 0.50 / 0.61 are prices per share. The 100× correspondence between each decimal and its dollar figure is the contract multiplier — it is not "Apex share-multiple reporting", and SHARES BOUGHT: 1.00 settles it.

Correction 1 — spy-675-685p-debit-260925:open:2026-08-25

field recorded correct
leg 675P ref_price 96.0 0.96
leg 685P ref_price 114.0 1.14
record ref_price -16.0 0.18 (net credit per share, 1.14 − 0.96)
structure implied debit put CREDIT spread (bull put): long 675P, short 685P

Leg qty (+1 / -1), symbols, strikes, expiry, price_kind: live-fill and the owner-provided-confirmation / real-money-account-… / pre-pilot flags were all correct — keep them.

ref_price is the net per-share spread price, matching the convention the paper records already use (e.g. the SPY 740/765P exit stored 3.495 from legs 5.29 / 1.795). Put the dollar figures in the note, not in ref_price.

Note should record: principal 96.00 paid / 114.00 received; commissions 1.00 + 1.00; fees 0.02 + 0.10 + 0.04 + 0.10 = 0.26; net cash in +15.74 (112.86 − 97.12).

Correction 2 — spy-675-685p-debit-260925:exit:2026-09-02

field recorded correct
leg 675P ref_price 50.0 0.50
leg 685P ref_price 61.0 0.61
record ref_price 10.64 0.11 (net debit per share, 0.61 − 0.50)
exit fees in note 0.36 0.26, and they increase the closing cost

COMM is 0.00 on both closing legs — the note double-counted a 0.10 and applied the fees in the wrong direction. Net cash out −11.26 (61.12 − 49.86).

Realised result to record

Entry +15.74 net credit, exit −11.26 net debit, realised +4.48 on one contract, closed 8 days before the 09/25 expiry.

Worth stating in the note, since it characterises the position honestly: a bull put spread 10 wide taking 0.18 credit carries roughly 9.82/share ≈ $982 max risk for that credit. That is a fact about the owner's own pre-pilot trade, not a pilot decision, and no pilot rule is implicated — but a ledger that records the credit without the width invites the wrong read later.

The position_id keeps its misleading name

spy-675-685p-debit-260925 says debit; the structure is a credit spread. Do not rename it — it is the join key for records already written, and renaming would orphan them. The correction records should state the misnomer explicitly so a later reader is not misled by the id alone.

Why this happened, and the fix that matters more than these two records

hermes had no PDF text extractor — no pdftotext, no pypdf — so the confirmations were hand-transcribed from a rendering, which is exactly how two adjacent columns get swapped. ops/tools/pdftext.py (stdlib only, 8 tests) is now in the repo and deployed; use it rather than transcribing. It was written instead of installing poppler or pypdf because the host is the production trading box.

This is the third time a fractional contract quantity has appeared and been rationalised instead of treated as a stop condition:

  1. 2026-09-22 — a "0.5 lot" P-collapse half-off on a 1-lot NVDA straddle, which could not execute. Voided by 2026-09-24:nvda-220-half-off-void; prompt v2.10 added the whole-contract rule.
  2. The "0.5-lot residue" carried in three subsequent rounds' prose.
  3. Here — 0.96 and 0.5 read as quantities and explained away as vendor presentation.

A fractional option quantity is never real. Treat one as a signal that a column has been misread, and stop.