pages / pack / cubicle

pack · cubicle

a trading venue extends the language: the session (time compression of a market's candles before a move reads them, the venue's verbs, the causality proof) and, since version 2, the strategy (a cubicle.script v1 the program names by hash, its contract desk, the reader gate that grades it, how its indicator draws by the verdict). Generated by lang/emit/genie-cubicle-pack.mjs from the trading-decisions contract, the cubicle.script runner's catalogue and the reader gate; the bar maths stays in the script

version
2
sets
windows, markets, verbs, proofs, ops, desks, desk_modes, reader_kinds, gates, gate_verdicts, broken_versions, draw_rules, draw_styles, script_functions, script_series, script_builtins, script_flags
clauses
compress, market, verb, proves, runs, bars, desk, reads, graded_by, holdout, cost, broken, needs, draws, mode

its sets

its clauses

compress
compress <window> <factor>: the move reads candles of the window compressed by the factor (a time compressor primitive)
market
market <id>: the CLOB market the move reads or trades
verb
verb <verb>: the venue's MCP verb the move calls; its tool name, meter and the proof it carries ride into the flow params
proves
proves <proof>: the proof the move carries (causality: no lookahead; replay; fill)
runs
runs <sha256:hex>: the cubicle.script v1 the move runs, by its runner hash (the hash is the strategy: a changed parameter is another script)
bars
bars <window>: the bar size the script runs on
desk
desk <desk>: the trading-decisions desk the strategy proposes to trade on (always as a shadow, not_proven proposal)
reads
reads <kind>: how the reader gate reads the strategy's calls
graded_by
graded_by <gate>: the gate whose verdict alone may let the strategy trade
holdout
holdout <fraction>: the time-cut holdout share, at least the gate's 0.3 (a program may make the gate stricter, never looser)
cost
cost <bps>: the round trip charged on every call, at least the gate's 8 bps
broken
broken <version>: a broken version that must fail; one clause per version, each one the gate runs for the reader kind
needs
needs <function>: a function of the runner's catalogue the script reads (the studio completes and the checker types it)
draws
draws <rule>: how the strategy's indicator layer draws
mode
mode <mode>: the mode the desk proposal carries; shadow only (mode live is refused: self_proven)

its tables

{
 "verbs": {
  "session.open": {
   "tool": "session_open",
   "meter": "sma.session",
   "proof": "none"
  },
  "session.receipt": {
   "tool": "session_receipt",
   "meter": "sma.session",
   "proof": "causality"
  },
  "market.candles": {
   "tool": "market_candles",
   "meter": "market.price",
   "proof": "none"
  },
  "market.price": {
   "tool": "market_price",
   "meter": "market.price",
   "proof": "none"
  },
  "strategy.publish": {
   "tool": "strategy_publish",
   "meter": "clob.fill",
   "proof": "replay",
   "split": "70/30 publisher/venue"
  },
  "proof.causality": {
   "tool": "proof_causality",
   "meter": "sma.session",
   "proof": "causality"
  }
 },
 "windows": {
  "15s": {
   "seconds": 15
  },
  "1m": {
   "seconds": 60
  },
  "5m": {
   "seconds": 300
  },
  "1h": {
   "seconds": 3600
  }
 },
 "markets": {
  "BTC-USD": {
   "gate": "BTC"
  },
  "ETH-USD": {
   "gate": "ETH"
  },
  "SOL-USD": {
   "gate": "SOL"
  },
  "NQ": {
   "gate": "NQ"
  },
  "ES": {
   "gate": "ES"
  },
  "YM": {
   "gate": "YM"
  }
 },
 "desks": {
  "fest-crypto": {
   "id": "fest-crypto",
   "venue": "taifoon-clob",
   "markets": [
    "BTC",
    "ETH",
    "SOL"
   ],
   "clock": "crypto",
   "horizon_s": 86400,
   "exits": {
    "stop_bps": 300,
    "max_hold_s": 172800,
    "flatten_on": [
     "stop",
     "max_hold",
     "kill"
    ]
   },
   "caps": {
    "max_order_usd": 150,
    "max_exposure_usd": 5000,
    "daily_loss_usd": 250,
    "kill_drawdown_pct": 15
   },
   "setup": "long-dip-desk",
   "verdict": "not_proven",
   "mode": "shadow",
   "what": "the fest desk recast: long AND exit (it bought into a fall with no exit); shadow until its setup is proven",
   "gate_home": {
    "desk": "fest",
    "desk_unit": "fest-live.service",
    "state": "/var/lib/fest",
    "promoted": "/var/lib/fest/promoted.json",
    "from": "2026-01-12",
    "horizon_s": 86400,
    "cost_bps": 8
   }
  },
  "fest-nq": {
   "id": "fest-nq",
   "venue": "taifoon-clob",
   "markets": [
    "NQ",
    "ES"
   ],
   "clock": "cme",
   "horizon_s": 21600,
   "exits": {
    "stop_bps": 60,
    "max_hold_s": 21600,
    "flatten_on": [
     "stop",
     "max_hold",
     "session_end:ny_pm",
     "break",
     "kill"
    ]
   },
   "caps": {
    "max_order_usd": 150,
    "max_exposure_usd": 3000,
    "daily_loss_usd": 150,
    "kill_drawdown_pct": 10
   },
   "setup": "nq-session-desk",
   "verdict": "not_proven",
   "mode": "shadow",
   "what": "NQ/ES by CME session: long or short, flat before the daily break; shadow until proven",
   "gate_home": {
    "desk": "fest-nq",
    "desk_unit": "fest-nq-live.service",
    "state": "/var/lib/fest-nq",
    "promoted": "/var/lib/fest-nq/promoted.json",
    "from": "2026-01-12",
    "horizon_s": 86400,
    "cost_bps": 8
   }
  },
  "world-clock-hf": {
   "id": "world-clock-hf",
   "venue": "taifoon-clob",
   "markets": [
    "BTC",
    "ETH",
    "SOL"
   ],
   "clock": "crypto",
   "horizon_s": 60,
   "exits": {
    "stop_bps": 8,
    "max_hold_s": 180,
    "flatten_on": [
     "stop",
     "max_hold",
     "kill"
    ]
   },
   "caps": {
    "max_order_usd": 20,
    "max_exposure_usd": 60,
    "daily_loss_usd": 20,
    "kill_drawdown_pct": 5
   },
   "setup": "hf-nq-impulse",
   "verdict": "not_proven",
   "mode": "shadow",
   "what": "the NQ impulse into crypto, both directions; its gross edge is drift (the 1 h late version passes), so shadow",
   "gate_home": null
  },
  "callbook-nq": {
   "id": "callbook-nq",
   "venue": "taifoon-clob",
   "markets": [
    "NQ",
    "ES"
   ],
   "clock": "cme",
   "horizon_s": 1800,
   "exits": {
    "stop_bps": 60,
    "max_hold_s": 5400,
    "flatten_on": [
     "stop",
     "target",
     "max_hold",
     "break",
     "kill"
    ]
   },
   "caps": {
    "max_order_usd": 100,
    "max_exposure_usd": 300,
    "daily_loss_usd": 60,
    "kill_drawdown_pct": 10
   },
   "setup": "callbook-house",
   "verdict": "not_proven",
   "mode": "shadow",
   "what": "the call book on NQ/ES: long or short on the experts' vote, stop and target from the expected move, out by the horizon; shadow until proven",
   "gate_home": null
  },
  "callbook-crypto": {
   "id": "callbook-crypto",
   "venue": "taifoon-clob",
   "markets": [
    "BTC"
   ],
   "clock": "crypto",
   "horizon_s": 1800,
   "exits": {
    "stop_bps": 150,
    "max_hold_s": 5400,
    "flatten_on": [
     "stop",
     "target",
     "max_hold",
     "kill"
    ]
   },
   "caps": {
    "max_order_usd": 100,
    "max_exposure_usd": 300,
    "daily_loss_usd": 60,
    "kill_drawdown_pct": 10
   },
   "setup": "callbook-house",
   "verdict": "not_proven",
   "mode": "shadow",
   "what": "the call book on BTC: long or short on the experts' vote, stop and target from the expected move, out by the horizon; shadow until proven",
   "gate_home": null
  }
 },
 "reader_kinds": {
  "answers": {
   "broken": "complement time_shift_24h week_shuffle",
   "announced": false,
   "programmable": true
  },
  "lane": {
   "broken": "complement time_shift_24h week_shuffle",
   "announced": false,
   "programmable": false
  },
  "log": {
   "broken": "complement time_shift_24h week_shuffle",
   "announced": false,
   "programmable": false
  },
  "rule": {
   "broken": "complement time_shift_24h invert_strongest",
   "announced": false,
   "programmable": false
  },
  "script": {
   "broken": "complement time_shift_24h week_shuffle",
   "announced": false,
   "programmable": true
  }
 },
 "gates": {
  "reader_gate": {
   "holdout_frac": 0.3,
   "cost_bps": 8,
   "max_dropped": 0.25,
   "turn_s": 1800,
   "desks_file": "/var/lib/cubicle-reader-gate/desks.json",
   "scripts_dir": "/opt/cubicle-reader-gate/scripts",
   "answers_dir": "/var/lib/cubicle-reader-gate/answers",
   "registry_schema": "cubicle.reader-registry.v1",
   "commit": "bdfdc584"
  }
 },
 "draw_rules": {
  "by_verdict": {
   "PROVEN": "solid",
   "NOT_PROVEN": "none",
   "UNGRADEABLE": "none"
  }
 },
 "script_functions": {
  "ema": {
   "arity": "2..2",
   "returns": "number"
  },
  "sma": {
   "arity": "2..2",
   "returns": "number"
  },
  "rsi": {
   "arity": "1..2",
   "returns": "number"
  },
  "high": {
   "arity": "1..1",
   "returns": "number"
  },
  "low": {
   "arity": "1..1",
   "returns": "number"
  },
  "range": {
   "arity": "2..2",
   "returns": "window"
  },
  "atr": {
   "arity": "1..1",
   "returns": "number"
  },
  "vwap": {
   "arity": "0..0",
   "returns": "number"
  },
  "shift": {
   "arity": "2..2",
   "returns": "number"
  },
  "stdev": {
   "arity": "2..2",
   "returns": "number"
  },
  "highest": {
   "arity": "2..2",
   "returns": "number"
  },
  "lowest": {
   "arity": "2..2",
   "returns": "number"
  },
  "cross_over": {
   "arity": "2..2",
   "returns": "truth"
  },
  "cross_under": {
   "arity": "2..2",
   "returns": "truth"
  },
  "abs": {
   "arity": "1..1",
   "returns": "number"
  },
  "sign": {
   "arity": "1..1",
   "returns": "number"
  },
  "min": {
   "arity": "2..2",
   "returns": "number"
  },
  "max": {
   "arity": "2..2",
   "returns": "number"
  },
  "clamp": {
   "arity": "3..3",
   "returns": "number"
  },
  "if": {
   "arity": "3..3",
   "returns": "number"
  },
  "exp_move": {
   "arity": "1..2",
   "returns": "number"
  },
  "stretch": {
   "arity": "1..1",
   "returns": "number"
  },
  "range_regime": {
   "arity": "1..1",
   "returns": "number"
  },
  "trades_closed": {
   "arity": "1..1",
   "returns": "number"
  },
  "wins_last": {
   "arity": "1..1",
   "returns": "number"
  },
  "sum_r_last": {
   "arity": "1..1",
   "returns": "number"
  }
 }
}

used by

release 4: a leaf · the inclusion proof · head 0x70ca62614037642b…