This is a submission for the Sanity Challenge, Path One: Ship an Agent That Queries Real Content
The desk is https://luiscore.com/errata-desk/. No account. It asks on load. Same lake as the first Path One post from 19 Sep (luisprimecore); that profile currently 404s, so this is the live copy for the deadline.
If you want the other surfaces:
- Needle: https://luiscore.com/errata-desk/needle
- Checks, no token: https://luiscore.com/errata-desk/check
- The same cases, rerun: https://luiscore.com/errata-desk/score
- Workflow instance: https://luiscore.com/errata-desk/workflow
- Sign board: https://luiscore.com/errata-desk/app/
- Studio: https://luis-errata-desk.sanity.studio/ (the Workflows tab wants a project login: https://luis-errata-desk.sanity.studio/workflows)
Project gsu7qzk9, dataset production. The dataset is public.
What I Built
On June 1, 2020 Wizards changed how a companion enters the game. You pay 3, put it in your hand, then cast it. Paper, Magic Online, and Arena did not pick that up on the same day.
- Tabletop: June 1
- Magic Online: June 3
- MTG Arena: June 4
Ask "two days before Arena switched, do I pay 3 or cast it from outside the game?" A search for "cast your companion" returns both sentences. They are both in the announcement. Arena on June 2 is still on the old reminder. Paper is already on the new one.
The desk keeps a rulesClaim when platform matches and the date is inside effectiveFrom / effectiveUntil. The other claim stays on the page, marked not in force, with the source next to it.
Bind writes a ruling for that platform and day. It does not stand until a person signs. A missing card (Black Lotus on that desk) is not called legal. Quotation marks only appear when the line is in the stored Wizards excerpt. Each answer carries a short receipt hash of the claims the window kept.
The dataset has the claims, the clocks, and the calls I wrote while testing. I didn't put card images in it.
Demo
Desk: https://luiscore.com/errata-desk/
June 2 split with no Context token: https://luiscore.com/errata-desk/check
Studio: https://luis-errata-desk.sanity.studio/
Sign board: https://luiscore.com/errata-desk/app/
I ran the battery against the live desk: 54/54. The workflow timed run is 8/8. The lake currently has 272 rulesClaim documents and 17 sourceDoc excerpts. Claims have valueFr, valueDe, and valueEs.
The dates below are the ones printed on each announcement. I didn't copy one effective day onto every client.
- January 21, 2019 — Magic Online January 21, tabletop January 25 (Modern Ironworks)
- October 21, 2019 — Magic Online October 21, Arena October 24, tabletop October 25 (Field of the Dead)
- November 18, 2019 — Arena and Magic Online November 18, tabletop November 22 (Oko in Standard)
- December 16, 2019 — Pioneer, tabletop and Magic Online December 17
- January 13, 2020 — Modern, tabletop and Magic Online January 14
- March 9, 2020 — tabletop and Magic Online March 10, Arena March 12
- April 13, 2020 — Brawl Lutri, April 16
- May 18, 2020 — tabletop and Magic Online May 18, Arena May 21
- June 1, 2020 — companion change and the Standard bans (Magic Online companion June 3, Arena June 4)
- July 13, 2020 — tabletop and Magic Online July 13, Arena July 16
- August 3, September 28, and October 12, 2020 — the page names one date
- February 15, 2021 — one date, Historic / Pioneer / Modern / Legacy / Vintage
- June 9, 2021 — Historic Time Warp, Arena June 10
Historic and Brawl are Arena. Pioneer, Modern, Legacy, Vintage, and Pauper are tabletop and Magic Online. Omnath on October 12 is banned in one format and suspended in another.
Questions I actually type:
two days before Arena switched, do I pay 3 or cast it from outside the game?On paper, June 2 2020 — pay 3 or cast from outside the game?On Jun 3 2020, what does each table do?dos días antes de que Arena cambiara, ¿pago 3 o lanzo desde fuera del juego?Deux jours avant qu'Arena change, est-ce que je paie 3 ou je joue depuis l'extérieur ?Zwei Tage bevor Arena umgestellt hat: zahle ich 3 oder spiele ich von außerhalb?On Arena, June 2 2020, is Fires of Invention banned in Standard?On Arena, March 11 2020, is Oko banned in Historic?On Arena, May 19 2020, is Winota banned in Brawl?On Arena, October 12 2020, is Omnath suspended in Historic?On Arena, October 23 2019, is Field of the Dead banned in Standard?On paper, November 20 2019, is Oko banned in Standard?On Arena, June 10 2021, is Time Warp banned in Historic?
Public dataset, no token:
Default ask, two days before Arena switched:
- in force: cast once from outside the game (
claim-arena-old, until 2020-06-04) - in the lake, not in force: pay 3 (
claim-arena-current, from 2020-06-04)
Bind stores that call.
Code
https://github.com/AndyAnimus/errata-desk
An ask goes to the hosted Context MCP for this project. It does not skip to a private GROQ query.
initial_context-
array_field_readeronrules-change-companion.clocks(or the Standard-ban clocks) -
errata-sourcesfor thesourceDocrows -
groq_query— a standingrulingif one exists, otherwiserulesClaimrows for that platform (valueFr/valueDe/valueEswhen the question is in that language) - The window filter below. The model does not decide which claim is in force.
- Optional
POST /rule, which writesruling-{platform}-{date} -
errata-sign—decidedByanddecidedAtstay empty until someone signs
The trace under the answer is those tool calls.
function inForce(c, date) {
if (c.effectiveFrom && date < c.effectiveFrom) return false
if (c.effectiveUntil && date >= c.effectiveUntil) return false
return true
}
Schema in the Studio:
-
rulesClaim— game, subject, predicate, platform, status, value, valueFr, valueDe, valueEs, quote, effectiveFrom, effectiveUntil, sourceTitle, sourceUrl -
rulesChange— title, subject, sourceUrl,clocks[](platform + switchesOn) -
sourceDoc— title, sourceUrl, about[], body -
ruling— the bound answer.decidedByanddecidedAtstay empty until a person signs -
deskCase— asked → derived → awaitingSignature → signed. The last step isactor: person -
deskWorkflow— those transitions as documents
How I Used Sanity
Three Context endpoints on the same public dataset.
-
errata-deskreads clocks, claims, and the worked calls. Embeddings are on. -
errata-signcan see onlydeskCase. IfdecidedByordecidedAtis missing, the case is unsigned. -
errata-sourcescan see onlysourceDoc. Those are excerpts from the printed B&R pages (2019–2021).
"Two days before Arena switched" comes back from the first endpoint as the old reminder. The second returns case-arena-2020-06-02 with both decision fields null. Binding the call does not fill them. Signing does, and it wants a name. Fires and Agent of Treachery use the same clocks and the sources endpoint.
French, German, and Spanish asks get the matching shell and the valueFr / valueDe / valueEs body when that field is filled in.
The workflow document is workflow-sign-call. An agent can move asked → derived → awaitingSignature. Only a person can move it to signed. scripts/timed-run.mjs walks that and writes timed-run-latest. The run is 8/8, and two of the steps are refusals: the agent trying to sign, and a blank name.
The sign board reads the same cases: https://luiscore.com/errata-desk/app/
- Studio: https://luis-errata-desk.sanity.studio/
- Rules MCP:
https://api.sanity.io/v2026-03-03/context/mcp/gsu7qzk9/production/errata-desk?embeddings=true - Signature MCP:
https://api.sanity.io/v2026-03-03/context/mcp/gsu7qzk9/production/errata-sign - Sources MCP:
https://api.sanity.io/v2026-03-03/context/mcp/gsu7qzk9/production/errata-sources
The companion clocks are the June 1, 2020 announcement. Later bans are later announcements, using the date that page prints for that platform.
Embeddings are on. This query is live on production:
*[_type=="workedCall"]
| score(text::semanticSimilarity("three tables disagree on one day"))
| order(_score desc)[0]{title, _score}
It returned "Same words, June 2" with _score 8.1. The desk MCP URL has ?embeddings=true, and each ask records a text::semanticSimilarity call.
Recorded session
June 3, 2020, from the desk.
Tools, in order: initial_context, array_field_reader on rules-change-companion.clocks, groq_query for the bringIntoGame claims.
- Tabletop: pay 3. Switched June 1.
- Magic Online: pay 3. Switches that day.
- Arena: cast once from outside the game. Pay 3 is in the lake and not in force until June 4.
Sanity Project Details
- Project ID:
gsu7qzk9 - Dataset:
production(public) - Organization:
o4kqib00c - Public query: https://gsu7qzk9.api.sanity.io/v2021-10-21/data/query/production?query=count(*[_type==%22rulesClaim%22])
- Studio: https://luis-errata-desk.sanity.studio/
- Studio Workflows tab (project login): https://luis-errata-desk.sanity.studio/workflows
- Checks: https://luiscore.com/errata-desk/score
- Desk: https://luiscore.com/errata-desk/
- Needle: https://luiscore.com/errata-desk/needle
- Workflow: https://luiscore.com/errata-desk/workflow
- Sign board: https://luiscore.com/errata-desk/app/
- Repo: https://github.com/AndyAnimus/errata-desk
- Context MCP: https://api.sanity.io/v2026-03-03/context/mcp/gsu7qzk9/production/errata-desk?embeddings=true
- Sources MCP: https://api.sanity.io/v2026-03-03/context/mcp/gsu7qzk9/production/errata-sources
- Sign MCP: https://api.sanity.io/v2026-03-03/context/mcp/gsu7qzk9/production/errata-sign
Top comments (0)