metalstradingdesk — Charter
*This replaces the bare "What This Is" technical line and sits above the CRITICAL RULES. The 7 numbered rules below were each written after a real failure — they are scar tissue, and they stay. What was missing is the half that points forward: what we are building toward, not only what we are guarding against.*
---
THE MISSION
When the market moves — and especially when it falls, at 6 AM, with the trader rattled and reaching for his phone — **metalstradingdesk is the one place he comes, and his question is answered.**
Not a chart. Not a signal in isolation. The whole picture, in one calm place: *how much it moved, why, what the analysts he trusts are saying, what the news is, and what his own read should be* — all real, all sourced, all honest about how fresh it is.
The measure of this platform is a single behavior: **when something happens, Rashid does not open another tab.** Every time he has to leave — to check Kitco, to read an analyst note, to hunt through news — the platform has failed at the exact moment it exists for. A falling market makes a trader anxious and impatient; the job is to *end the scramble*, not add one more screen to it.
The defensive rules below all serve this. We never show a stale price not because staleness is abstractly bad, but because Rashid *acts on that number at 6 AM, rattled* — a fresh-looking stale number is a betrayal at his most vulnerable moment. That "why" is the point of every rule.
---
DESIGN PRINCIPLES (forward-facing — what to build toward)
*These are not reactions to failures. They are what "good" looks like, so the platform can be optimized toward something, not only away from mistakes.*
**P1 — Single source, zero reason to leave.**
The platform must *contain* what Rashid hunts for. A gap that sends him to another tab is a failure even when nothing shown is wrong. "We don't have that here" is the problem to solve, not tolerate.
**P2 — In a falling market, be the calm.**
When prices drop, the trader is anxious and clicking everywhere. The platform's job is one grounded, complete, unhurried answer that ends the hunt — not a wall of panels that adds to the noise. Steadiness is a feature. Tone is part of the product.
**P3 — Comfort carries the highest honesty bar.**
Analyst views, the brief, the "why" — these are comfort features, and comfort built on a fabricated or stale input is the worst possible betrayal, because it fails precisely when trust matters most. Three real, sourced analyst views beat five with two guessed. Never infer what a trusted analyst "probably" thinks. Show only what they actually published, sourced and dated.
**P4 — "I don't know" is a feature, not a failure.**
The platform saying "no clear catalyst for this move" or "no coverage for this window" is an *honest end to the scramble* — which is the whole point. A confident fabrication is worse than an honest blank. Three honest answers, always available: *no data for this window* / *we watched and saw no clear driver* / *the move tracked [X], here's the sourced evidence*.
**P5 — Honesty over confidence, always.**
A quiet, accurate "NEUTRAL, no edge" beats a loud, impressive "STRONG SIGNAL" that isn't earned. The validated read, even when it's unexciting, over the unvalidated read that sounds better. Rashid is sophisticated; he trusts the platform *more* for admitting uncertainty, not less.
**P6 — Builder to principal, not analyst to client.**
The voice is the person who *built the system* showing Rashid what it sees — not an advisor issuing verdicts. Show the read and the evidence; let the principal decide. No "I recommend," no false authority.
---
CRITICAL RULES (defensive — each written after a real failure; the moat)
*Reframed with the "why" — the mission above — so they can be extended to new situations, not just the one that created them.*
**1. Market Hours Gate** *(after the Saturday-brief failure, 2026-05-30)*
Never give a session brief or "what will [market] open with" without checking the day and market calendar. Weekends = all closed. Friday evening → next session is Monday, say so. Check holidays (US→COMEX, China→SGE, UK→LME). *Why: a wrong session time is as bad as a wrong price — Rashid was on the phone when it broke. The platform's authority dies the moment it's confidently wrong about something basic.*
**2. Data Integrity is the moat** *(after the $3,332 freeze)*
Every number real, sourced, honest. No placeholders, no rough estimates, no false-confidence from thin data. If a number isn't defensible, don't show it. *Why: a wrong price scares Rashid away — and trust, once broken at 6 AM, doesn't come back.*
**3. Zero tolerance for wrong prices.**
A wrong price never reaches the screen — not for 5 minutes, not 30 seconds. Validate at write-time, not on a periodic check. Never trust a one-time pipeline load for display prices.
**4. Images are not a numeric source.**
LLM vision transposes digits. All numbers from programmatic sources only (yfinance / Titan API / FRED). Screenshots and news images are for qualitative narrative only.
**5. No easy branch.**
Never silently take the lower-effort path when it sacrifices capability, coverage, correctness, or rigor. Fix root causes, don't amputate features. Verify at scale, not just in isolation.
**6. Remove wrong data, don't caveat it.** *(after the RegimeStrip "Recession 100%" at SPX all-time-high)*
Wrong or unvalidated data comes off the screen immediately — never "likely wrong" left showing. Remove first, explain second.
**7. Event-time timestamps** *(after the 2026-06-05 audit found 15/18 surfaces stamping fetch-time)*
Every timestamp records when the data was TRUE (tick, bar close, headline pub, report release) — not when fetched/stored/computed. UTC/TIMESTAMPTZ storage, Dubai only at display, freshness judged against event-time, every user-facing number carries "as of [time]". Sources provide event-times (yfinance bar close, FRED release, CFTC report, RSS pubDate) — preserve them at ingestion, never discard for datetime.now(). *Why: this IS the frozen-data bug's root pattern — fetch-time masquerading as data-time is false confidence, worse than no timestamp.*
---
SIGNAL & PRODUCT DISCIPLINE (standing rules — were only in handoffs, now law)
*These governed the build for sessions but lived only in handoff text. They belong here.*
- **Long-only asymmetry:** the engine says STAND ASIDE, never SELL. "Not a long" is the bearish state. Levels always stop < entry < target.
- **Gauge descriptive, signal prescriptive:** the gauge describes (Bullish/Neutral/Bearish); the signal prescribes (BUY / STAND ASIDE). Don't conflate.
- **Validated over unvalidated, shown as such:** the displayed signal is the validated engine (L3). Unvalidated layers are context, labeled "does not set conviction."
- **No bias in signals:** show the distribution alongside any accuracy figure. A win-rate without the base rate is misleading.
- **Explicit roll:** on contract roll, close the old leg at its price, open the new at its price — the calendar spread is never P&L.
- **Silent failures are the enemy:** log loud, fail visible. A silent gap is worse than a logged error. (This is the meta-rule behind half the incidents above.)
---
*Standing principle: every rule here was paid for — in a failure, or in a decision made deliberately. When a new rule is added, note what it cost. The mission and design principles are the exception: they are not scars, they are the target. Build toward them.*