1 · What this desk does
This desk trades exactly one thing on BTCUSDT: a crossing of a volume-profile VAH (value area high) or VAL (value area low), and nothing else. It polls for crossings roughly every 20 minutes and, almost every time, there is nothing to do.
- Gate 1, verbatim
- “unavailable”
- Where the facts come from
-
production.silver.btc_triggers(the crossings),production.silver.btc_volume_profile_tpo(the levels) andproduction.silver.btc_market_data(30-minute price)
2 · The market map
1D, 1W, 1M, 1Q.
The shaded band is the value area: where most of the recent trading happened. VAH and VAL are its ceiling and floor; POC is the single price traded the most. A crossing means price left that band — not just touched its edge.
3 · The trigger — and why almost nothing happens
| cross_type | Level | Candidate side |
|---|---|---|
vah_below_to_above |
VAH | long |
vah_above_to_below |
VAH | short |
val_below_to_above |
VAL | long |
val_above_to_below |
VAL | short |
The desk does not look for crossings. An upstream table computes them, and the poll's only job is to notice a row it has never acted on. A crossing older than 60 minutes is left alone: the move it named has already happened.
The trigger is treated as a fact, not a claim. No part of the tick re-audits whether price really crossed — that question is settled before the desk wakes up, which is what keeps the debate about what the crossing is worth rather than about whether it occurred.
The side in the table is only the candidate. It says which direction is on trial; it does not say the desk will take it.
4 · The gates it cannot pass
Checked in order, before a single chart is opened. Any one of them ends the tick — there is no analysis that can talk the desk past a gate.
the hard rules are currently unavailable
5 · One tick, end to end
The conductor's steps
the conductor's stages are currently unavailable
The trader's own steps
the decision-flow steps are currently unavailable
The trader runs twice per tick and is absent from the debate in between. Everything it says in the first pass is a request for evidence — anything it asserted there would become an anchor for lenses that are supposed to open blind.
6 · Who argues, and what their word is worth
the debate roster is currently unavailable
Each lens states which way the market looked to it —
bullish, neutral, bearish, no_read —
never whether it likes the trade. Turning that into a position for or
against the candidate is arithmetic the trader does afterwards, so a
lens is never asked to argue for an outcome.
Standing is by domain, not by vote
A lens counts for what it is the only one able to see. An equal vote per head would let four ways of looking at price outweigh the one reader of structure, so the weights are fixed in advance and the two binding lenses are the only ones that can open a trade.
the standing table is currently unavailable
Two rounds, and then it is over
Round one is blind: every lens gets the same snapshot and candidate plus only its own artifact, and no peer's read. Round two is sighted: each is handed every peer's opening verbatim and answers once, saying whether it holds or changes, with one line per peer. There is never a third round — a debate that runs until everyone agrees has converted disagreement into fatigue.
A lens whose chart failed to build reads
no_read and costs the tick nothing. Below
three lenses with a real read, the tick abstains: that is an absence of
evidence, not a balanced view of it.
7 · The six lenses, in their own words
Each lens below is quoting its own definition — the file the desk actually runs. None of this is a second description written for this page, which is why a lens that is rewritten changes here on the same commit.
They all obey one shared discipline: separate what you SEE from what you THINK. What a lens can see is a number a second person could check off the same artifact; what it thinks carries the reading and the other way to read the same facts, which is mandatory. None of them is there to convince.
the lens definitions are currently unavailable
8 · Why this counts as a good debate
The design target is Ray Dalio's thoughtful disagreement: a debate whose purpose is to find what is true, not to decide who wins. Dalio names the two things that stop it — ego, which makes you defend a position because it is yours, and the blind spot, which is what your way of looking cannot see at all. Neither is fixed by thinking harder. Both are fixed structurally, by people who see differently and by rules written down before the outcome is known.
Each principle below is answered by a mechanism that is on this page, not by an intention.
| The principle | How it is attacked here |
|---|---|
| The goal is what is true, not who wins | A lens reports which way the market looked, never whether it wants the trade. Nobody at the table owns the position, so there is nothing to defend. |
| Ego | The decider holds no lens. It reads no chart for signal and forms no view of its own — a chief who also analyses is one more analyst, and the only one nobody gets to rebut. |
| The blind spot | 0 lenses, each looking at something the others cannot: structure, participation, session, price action, news. The roster is the answer to “what can I not see?” |
| Premature consensus destroys information | Round one is blind. A read formed after seeing four peers agree is not a fifth piece of evidence, and the desk pays for independence by giving up the cheaper single round. |
| Open-minded and assertive | Round two demands one line per peer and an explicit hold or change. Yielding politely and never yielding are both recorded as what they are. |
| Credibility-weighted, not one vote each | The standing table in §6. Two lenses are binding, two share a single vote because they read the same thing twice, and one can only ever subtract. |
| Know who is who before you argue | Standing is published before the tick, not negotiated during it, so no lens has to establish its authority mid-argument. |
| Ask what is true before what to do | The two passes in §5. The proposing pass issues the request and decides nothing; direction is only touched once the evidence is in. |
| Turn criteria into explicit rules, then algorithms | The ladder in §8 is arithmetic, not judgement: where it starts and every step down is checkable by someone who was not there. |
| Expected value and asymmetry, not hit rate | The ladder only ever descends, a refusal is a stand-down rather than a trade the other way, and a reduced size is half of a full one. The structure is built to survive being wrong. |
| Do not leave a disagreement open | The fourth question below forces the unresolved disagreement to be named, with who held it. A disagreement that dissolves in silence is a decision taken by omission. |
| Pain + reflection = progress | The criteria are written before the outcome is known, and a debate that fails its own test is filed as a defect in the desk — never in the market. |
| It is expensive, and worth it | 0 analyst runs plus two trader passes per crossing. The poll runs first precisely so that cost is only paid when there is something to argue about. |
| Record everything | Every turn, both rounds, and the reasoning behind the call are written to the tick's own trace before the decision leaves the machine — which is what the Monitor tab is reading. |
The debate is judged before it is counted
A conclusion reached badly is worth less than no conclusion, so the trader answers four questions about the argument itself before it is allowed to weigh what the argument concluded. Any one of them failing makes the debate weak, and a weak debate costs the tick a step on the ladder — it can never earn one.
the debate questions are currently unavailable
Where this desk is not yet Dalio
- The open gap — credibility by track record
-
the standing note is currently unavailable
Standing here answers “who is the only one who can see this?” — not “who has been right before?” Dalio's weighting is the second question, and it cannot be answered without history. The desk has recorded 41 ticks so far, against roughly 30 resolved decisions per lens before a track record would mean anything. Until then, weighting by who has been right would be weighting by noise.
9 · If it trades
The two binding lenses set where the tick starts; everything else can only push it down. Nothing on this desk ever steps up.
Where it starts
the ladder is currently unavailable
Every reason it steps down
the ladder is currently unavailable
A trade carries these fields; the ones marked optional are omitted when the setup does not call for them:
- direction
- horizon
- entry
- stop
- target_1
- risk_reward
- target_2 (optional)
- trailing_pct (optional)
- trailing_trigger_pct (optional)
- invalidation (optional)
- partials (optional)
The most recent real trade, from tick 2026-08-13T172000Z:
10 · What a tick leaves behind
Every tick writes a folder, and that folder is the whole audit. It is written before the decision leaves the machine, so nothing here is reconstructed afterwards — a loss is attributable to the lens that read it wrong, months later, without anyone having to remember anything.
Read from the newest tick on disk,
2026-08-14T054000Z — so an artifact the loop
stopped writing disappears from this list by itself:
| Artifact | What it is |
|---|---|
analyst_macd_bbands.md |
one participant's own reasoning for this tick, in its own words |
analyst_multicomposite.md |
one participant's own reasoning for this tick, in its own words |
analyst_news.md |
one participant's own reasoning for this tick, in its own words |
analyst_sessions.md |
one participant's own reasoning for this tick, in its own words |
analyst_trend_rsi.md |
one participant's own reasoning for this tick, in its own words |
analyst_volume.md |
one participant's own reasoning for this tick, in its own words |
breakout/ |
one composite chart per granularity, plus the verdicts drawn on them |
broadcast.md |
the receipt for what was sent to the desk, verbatim |
chart/ |
the study each chart-reading lens was handed |
context.md |
one participant's own reasoning for this tick, in its own words |
dag.json |
the edge to the previous tick, which is what makes the store a chain |
debate.jsonl |
every turn: which lens, which round, its flag, its stance, its full text |
debate.md |
the same debate as one readable transcript |
decision.jsonl |
the decision itself — evidence, reasoning, and the trade structure |
desk.md |
one participant's own reasoning for this tick, in its own words |
proposal.json |
|
snapshot/ |
every timeframe's POC/VAH/VAL and staleness at that instant, and the 30-minute closes it was read on |
system.json |
|
trader.md |
one participant's own reasoning for this tick, in its own words |
trigger.json |
the crossing that opened the tick, exactly as the table reported it |
The Monitor tab reads exactly this folder and nothing else. Its one write in the whole application is a price cache — it can never alter a tick it is showing you.
11 · As of now
41 ticks · last 2026-08-14T05:40:00Z
12 · Where these facts come from
| Path | What it is | |
|---|---|---|
| ✖ | .claude/agents/trader.md |
the trader's own definition — [Errno 2] No such file or directory: '/app/.claude/agents/trader.md' |
| ✖ | CLAUDE.md |
the conductor's own playbook — [Errno 2] No such file or directory: '/app/CLAUDE.md' |
| ✖ | config/debate_roster.json |
the debate roster — debate roster not found at /app/config/debate_roster.json - the registry is required |
| ✔ | traces/ |
the trace store |
| ✔ | src/alphinity_claude_ai/trading/triggers.py |
the trigger vocabulary |
| ✔ | src/alphinity_claude_ai/trading/breakout.py |
the breakout constants |
| ✖ | config/system_versions.json |
the system version registry — system registry not found at /app/config/system_versions.json - every trade is published under a version, so the registry is required |
System versions
Every published trade is a claim about a desk that existed at one moment — six lenses today, five yesterday; a mandatory-lens gate that did not exist last week. Comparing a trade from before a change against one from after it averages two different systems and calls the result performance. So each version carries a colour, and every trade card on the Performance tab wears it on its left edge. Attribution is by time: a version owns every trade from its own start until the next one begins, which is what reaches the four oldest trades, published before the trace store existed at all.
the version registry is currently unavailable