# Verdict > Fans shouldn't have to choose. Verdict is an agentic system for live music that finds which acts share fans, using > Qloo's taste graph, and acts on it: AI agents put every festival timetable clash on trial and rebuild the day without > breaking the festival's rules; promoters see which nights and which of their own shows compete for the same fans; > fans get a day and a month of nights out planned around the artists they love, with food and drinks to match. > In 28 pre-registered tests over 22 days, Qloo made GPT-6 Astra, OpenAI's frontier reasoning model, measurably better > against real-world data. Entry for the Qloo Agentic Hackathon 2026 by Athmeeya M Kashyap and Siddhant Gudwani. > MIT licence. - Live site: https://clash-court-1s4a.onrender.com - Code: https://github.com/SiddGud/Verdict - This file: https://clash-court-1s4a.onrender.com/llms.txt (also llms.txt at the repo root) - Test 28 protocol, registered before any result: PREREGISTRATION_28.md - Full build and test log, dated: PROJECT_LOG.md Contents: Twelve facts. Links. The vision. Business model. 0 Judge quick start. Criteria map. Why Verdict cannot work without Qloo. 1 Summary in numbers. 2 The judging criteria, answered. 3 The problem and the market. 4 Every feature, page by page. 5 The agents. 6 How Qloo is used. 7 Architecture. 8 Algorithms. 9 Testing: method and every result. 10 Design decisions and why. 11 Limits. 12 API reference. 13 Run it, deploy it. 14 Repository map. 15 Threats to validity. 16 Scalability. 17 Security and responsible AI. 18 FAQ for judges. 19 How to verify every claim. 20 Glossary. 21 Machine-readable summary. Optional. --- ## Twelve facts 1. **Qloo made GPT-6 Astra better at ranking real shared fans:** Spearman 0.697 alone, **0.728** with Qloo, difference +0.031, 95% interval [0.005, 0.056], **significant** (Test 28). 2. **With Qloo, the small Gemini 3.8 Flash scored above GPT-6 Astra alone:** **0.723 against 0.697** on the same task (Gemini's own gain from Qloo, +0.028, is significant; the gap to GPT-6 Astra alone is not). 3. **Without Qloo, the model changed 46 of 903 pair scores** between two identical requests. **With Qloo: 0 of 903.** 4. **Friday closing time for 30 real NYC restaurants:** GPT-6 Astra alone **0/30**, Gemini alone 3/30; **with Qloo, both 29/30** (Test 20). 5. **Qloo found 119 of 120 places** a model named in its own plans (Test 22). 6. **The court cut a real Lollapalooza day's clash score from 10.85 to 5.92, 45% fewer, with 0 rules broken** (44 acts, 7 stages, 946 pairs, 10 cases argued, 9 moves decided). 7. **Code refused 15 rule-breaking agent proposals** in one sitting. Nothing an agent says can break a festival rule. 8. **6 of the court's 9 moves were ones the optimiser alone would not have made.** The agents have real decision space. 9. **Model cost of the path judges use most: $0.** The recorded sitting, the graph, the timetable, the fan route, the city desk and every evening run with no model call (about 76 cached Qloo calls per festival day). 10. **51 same-fan show pairs within a week in one promoter's real New York month** (Live Nation, November 2026, Ticketmaster listings); **17 red clashes on one real Lollapalooza day.** 11. **28 pre-registered tests over 22 days** (Oct 9 to 30, 2026): protocols committed to git before any result, two model families, 95% bootstrap intervals. 12. **Where a frontier model leads, the product says so and uses it there:** openers and tour order are model-led and Qloo-checked (Test 15: model 0.976, Qloo 0.883). ## Links Live product: - [Festival court, front page](https://clash-court-1s4a.onrender.com/): the AI court, the timetable, the graph, the agent. - [Watch the 2-minute tour](https://clash-court-1s4a.onrender.com/?watch=1): the whole product plays itself. - [For promoters](https://clash-court-1s4a.onrender.com/#/promoters): book a date, promoter portfolio, openers, tour. - [For fans](https://clash-court-1s4a.onrender.com/#/fans): plan my day, friends' month with food and drinks. - [Why Qloo](https://clash-court-1s4a.onrender.com/#/why): every test as interactive charts. - [Earlier one-page site](https://clash-court-1s4a.onrender.com/classic) and [health check](https://clash-court-1s4a.onrender.com/health). Live API, open in a browser: - [Festival days](https://clash-court-1s4a.onrender.com/api/clash/festivals) - [Model-alone comparison, Lollapalooza Friday 2026](https://clash-court-1s4a.onrender.com/api/clash/baseline?festival=lolla2026fri) - [City desk options](https://clash-court-1s4a.onrender.com/api/city/options) - [Promoters in New York, November 2026](https://clash-court-1s4a.onrender.com/api/city/promoters?city=new-york&month=2026-11) Code and evidence: - [Repository](https://github.com/SiddGud/Verdict) and [README](https://github.com/SiddGud/Verdict/blob/main/README.md) - [Test 28 protocol, registered before results](https://github.com/SiddGud/Verdict/blob/main/PREREGISTRATION_28.md) - [Dated project log](https://github.com/SiddGud/Verdict/blob/main/PROJECT_LOG.md) - [The court agents](https://github.com/SiddGud/Verdict/blob/main/clash/council.py), [the conversational agent](https://github.com/SiddGud/Verdict/blob/main/clash/ask.py), [booker's words to rules](https://github.com/SiddGud/Verdict/blob/main/clash/agents.py) - [Rules, clash score, optimiser](https://github.com/SiddGud/Verdict/blob/main/clash/schedule.py), [Qloo and Last.fm tables](https://github.com/SiddGud/Verdict/blob/main/clash/overlap.py) - [City desk, friends' month, evenings](https://github.com/SiddGud/Verdict/blob/main/clash/city.py), [openers and tour](https://github.com/SiddGud/Verdict/blob/main/clash/booking.py) - [Fan route](https://github.com/SiddGud/Verdict/blob/main/clash/fanroute.py), [model-alone baseline](https://github.com/SiddGud/Verdict/blob/main/clash/baseline.py), [rate limits](https://github.com/SiddGud/Verdict/blob/main/clash/guard.py) - [Cached Qloo client](https://github.com/SiddGud/Verdict/blob/main/qloo.py), [model providers](https://github.com/SiddGud/Verdict/blob/main/llm.py), [web server](https://github.com/SiddGud/Verdict/blob/main/app.py) - [The site](https://github.com/SiddGud/Verdict/blob/main/static/site/index.html), [charts](https://github.com/SiddGud/Verdict/blob/main/static/site/why.js), [engine tests](https://github.com/SiddGud/Verdict/blob/main/tests/test_clash_schedule.py) - [Deployment blueprint](https://github.com/SiddGud/Verdict/blob/main/render.yaml) ## The vision: the audience layer for live music Every decision in live music (who plays when, which night to book, which shows to market together, where a fan spends their evening) depends on one hidden fact: which acts draw the same people. Today it is guessed. Verdict makes it a number, from Qloo's taste graph, and puts AI agents to work on it. - Why now: taste graphs like Qloo's now cover artists, places and more in one space, and agents can act on live state with code checking every move. Neither was practical before. - Why it is hard to copy: the value is in the combination: Qloo's cross-domain affinity, a measurable clash objective, a rule-checked court of agents with a human veto, real listings and real set times, and 28 pre-registered tests that show where each piece holds up. - One engine, three markets: the same fan-overlap table schedules a festival, books a city's nights and plans a fan's evening, so each new customer reuses the data the last one paid for. ## Business model (a plan) | Customer | Product | How it would pay | |---|---|---| | Festivals (thousands worldwide, from Lollapalooza-scale to local) | The court: a timetable with fewer clashes, every rule kept, every move explained | Per festival edition | | Promoters and booking agents | Book a date, portfolio, openers, tour routing over every city's listings | Monthly subscription per city or roster | | Ticketing platforms | The clash score and fan pull as an API next to on-sale dates | Usage-based API | | Fans | Day and night-out planning with food and drinks matched to taste | Free; partner bookings for restaurants and bars | The scale: live music ticket sales passed $40 billion in 2025 (Omdia), and one promoter, Live Nation, ran 55,000 shows for 159 million fans that year. A small improvement in how those shows are timed, booked and marketed is worth a great deal. ## 0. Judge quick start (60 seconds) What to click on https://clash-court-1s4a.onrender.com, in order, and what you should see: 1. Click **Watch the 2-minute tour** (the first button on the page). The product plays itself with a narration bar: the problem, the bill as Qloo sees it, a full court sitting, a city's month for an artist, a promoter's portfolio, the AI agent answering a question, the evidence. It switches pages by itself. (Or open `/?watch=1`.) 2. Click **Enter the courtroom**. The recorded sitting of four AI agents replays (no model cost): for each clash, two fan agents propose moves, the booker objects on rule grounds, the judge rules, the timetable moves. The clash score falls from **10.85 to 5.92**. 3. On case 1 the replay pauses: **"You have the floor, booker."** Choose a different ruling from the judge's (for example "The clash stands") and the agents argue the remaining cases live, streamed, about 18 seconds a case. 4. Type **Tyla just cancelled** in Booker's emergency: the order becomes a checked rule and the day is rebuilt. Drag any set to another slot: the slot turns red or green before you drop. Move the clash-line slider. 5. Open **For promoters**: the Clairo example runs by itself and pins drop on the New York map; the calendar shows how hard each night's other shows pull on Clairo's fans. Try **Promoter portfolio** with Live Nation. 6. Open **For fans**: the friends' month fills in by itself. Each night shows a place to eat before, the show, and a bar after, matched to the group's taste by Qloo and open at those hours. Press **On the map** on a night. 7. Open **Why Qloo**: interactive charts of every test; hover any mark for exact numbers. 8. Press **Ask the AI agent** (bottom right) and ask "Who on this bill shares the most fans with Hozier?": each tool call appears as it runs, and every number in the answer is checked against the tool results. ## Criteria map: claim, evidence, number | Criterion | What this submission does | Strongest number | Where (this file) | |---|---|---|---| | Technological implementation: how thoroughly Qloo is used | Qloo is the scoring function for every feature: entity resolution, artist to artist affinity, fan to artist affinity, music taste to places with hours | 4 distinct Qloo uses, each backed by a test; Qloo made GPT-6 Astra better: 0.697 to 0.728, significant | Sections 1, 2, 6 | | Design: a complete product | One site by audience (festivals, promoters, fans) plus the evidence; a 2-minute self-playing tour; dark by default; works on phones | 4 pages plus a self-playing tour, 30+ features, a festival day loads in about 1 s | Section 4 | | Potential impact: a real problem, a real audience | Festivals, promoters and fans all lose when audiences collide | $40B+ live music market; 17 same-fan clashes on one real Lollapalooza day; 51 same-fan pairs in one Live Nation New York month | Section 3 | | Quality of the idea: creative, non-obvious use of Qloo | A taste graph used to keep audiences apart, turned into an objective a court of agents argues over | 6 of the court's 9 moves are ones the optimiser alone would not make | Sections 2, 5 | | Agentic: reasoning, tools, action | Four court agents and a 10-tool conversational agent act on real state; code verifies | 15 rule-breaking proposals refused, 0 rules broken | Section 5 | | Multi-agent collaboration | Fan agent A and fan agent B in parallel, then the booker, the judge, the clerk (code) | 10 cases argued, 9 moves decided on the default day | Section 5 | | Human oversight | The booker's gate, drag and drop, plain-word emergencies, Undo | Live overrule in about 18 s a case | Sections 4, 5 | | Reliability and honesty | Never guesses an act, never saves a failed sitting, reports ties and losses | 28 pre-registered tests; both court and optimiser scores shown | Sections 9, 11 | ## Why Verdict cannot work without Qloo Qloo's brief: "If your submission would work the same without Qloo, you're building the wrong thing." Feature by feature, what happens without Qloo, measured: | Feature | Without Qloo | With Qloo | Measured | |---|---|---|---| | The clash score (which pairs of acts share fans) | A model must score every pair; asked twice it changes its answer by 10 points or more on up to 46 of 903 pairs, and it costs about $0.50 and minutes per day | One cached table, the same answer every time, no model call | 46 to 0 changing answers (five real days) | | Ranking pairs by fans they truly share (against real listeners) | GPT-6 Astra 0.697; Gemini 3.8 Flash 0.695 | The same models with Qloo: 0.728 and 0.723 | +0.031 and +0.028, both significant (Test 28) | | Popularity as a stand-in for taste | Timetable quality 0.043, barely better than random | Qloo 0.663 | +0.62 (Test 28) | | Opening hours for a night out | GPT-6 Astra: 0 of 30 right (declines); Gemini: 3 of 30 right, 6 wrong | 29 of 30 right with Qloo's record | Test 20 | | Finding the place or act you mean | Free-text names, no ID, no photo | 119 of 120 places found; 38 of 44 acts matched with ID, photo, description | Test 22, festival days | | A fan's fit for every act, a city's month for an artist, the group's evenings | No signal to compute them from | Qloo affinity, fan to artist and music to places | Tests 27, 28, 12, 20 | In one sentence: Qloo measures, the agents argue, code decides. Remove Qloo and there is nothing to measure. --- ## 1. Summary in numbers | What | Number | Source | |---|---|---| | GPT-6 Astra, Friday closing time of real NYC restaurants | 0 of 30 alone, 29 of 30 with Qloo | Test 20 | | Gemini 3.8 Flash, same question | 3 of 30 alone (6 wrong), 29 of 30 with Qloo | Test 20 | | GPT-6 Astra ranking pairs of acts by fans they truly share (Spearman) | 0.697 alone, 0.728 with Qloo, gain +0.031 [0.005, 0.056], significant | Test 28 | | Gemini 3.8 Flash, same | 0.695 alone, 0.723 with Qloo, gain +0.028 [0.003, 0.056], significant | Test 28 | | Same question asked twice: pairs whose score moved 10 points or more | GPT-6 Astra alone up to 46 of 903; Qloo 0 | Five real festival days | | Places a model named that Qloo found | 119 of 120 | Test 22 | | Clash on a real Lollapalooza day after the AI court | 10.85 to 5.92, 45% fewer, 0 rules broken | Recorded sitting | | Rule-breaking agent proposals refused by code | 15 | Same sitting | | Pre-registered tests | 28 over 22 days (Oct 9 to Oct 30, 2026), 26 run to a result | Logs | | Cost to score every pair on a festival day | about 76 cached Qloo calls, no model; a model alone about $0.50 and minutes each time | Measured | Brackets are 95% bootstrap intervals. "Significant" means the interval of the difference excludes zero. --- ## 2. The judging criteria, answered ### Technological implementation (how thoroughly Qloo is used) - Qloo is the engine, not a garnish. Every clash, every booking night, every portfolio pair, every fan route and every evening out is computed from Qloo's taste graph. Four Qloo uses, each with its own test (section 6): 1. Entity resolution (`/search`): every act matched by exact name, with ID, photo and description. 2. Artist to artist affinity (`/v2/insights`, artist signal, artist results): the pair overlap table for a whole festival bill or a city's month of shows. 3. Fan to artist affinity (`/v2/insights`, a fan's favourites as signal): a personal fit for every act. 4. Music taste to places (`/v2/insights`, artists as signal, place results near a point): cross-domain picks of where to eat before a show and drink after, with Qloo's opening hours deciding what is open. - Agentic: four court agents (two fan agents, a booker, a judge) call tools over Qloo's data and the live timetable; a separate conversational agent chooses among 10 tools; code verifies every move and every number. - Engineering: a constrained timetable optimiser, server-sent event streaming, recorded sittings with a human gate, per-visitor rate limits and a daily model budget, a private cache served to the host from a private dataset. ### Design (a complete product) - One site, organised by audience: Festival court (front page), For promoters, For fans, Why Qloo. Dark by default. - A 2-minute guided tour that plays the whole product with no clicks, the first thing on the page. - Every page says what it is for, how to use it (folded behind "How it works" so the page stays clean) and gives examples to try. Works on phones; light and dark themes; motion reduced for visitors who ask for it. ### Potential impact (a real problem, a real audience) - Live music ticket sales passed $40 billion in 2025 and are heading to $50 billion by 2030 (Omdia). One company, Live Nation, had 159 million fans at 55,000 shows in 2025 ($25.2 billion revenue, $20.9 billion of it concerts). - Three paying audiences: festivals (timetables), promoters and booking agents (dates, portfolios, openers, tours), fans (days and nights out). On one real Lollapalooza day we found 17 pairs of acts that share fans playing at the same time; in one New York month, Live Nation's own calendar holds 51 pairs of shows with the same fans within a week. ### Quality of the idea (creative, non-obvious use of Qloo) - Using a taste graph to keep audiences apart (a timetable clash) rather than to recommend more of the same. - Turning Qloo's pair affinity into a measurable objective (the clash score) that an optimiser and a court of agents can argue over, with a human booker who can overrule. - Cross-domain: the same fan overlap that schedules a festival also books a city's nights and picks the restaurant and bar for a night out, matched to the group's music taste. --- ## 3. The problem and the market Two acts that share fans, on two stages, at the same time: someone misses one. Festivals publish timetables with many such clashes because nobody puts a number on shared audiences before tickets go on sale. The same blind spot costs promoters: shows that draw the same people land on the same night or week. And fans plan their days and nights around a few artists with no help joining them up. Market figures shown on the site, with sources: - $40B+: live music ticket sales worldwide in 2025, heading to $50B by 2030 (Omdia, 2026). - 159M fans at 55,000 shows for Live Nation in 2025; $25.2B revenue, $20.9B from concerts (Live Nation 2025 results, Form 10-K). - 170+ acts on 8 stages over 4 days at Lollapalooza Chicago; its 2024 edition brought over $440M to the city (Lollapalooza 2025 lineup coverage; reported economic impact). - 17 clashes on one real day we tested (Lollapalooza Thursday 2024, Qloo). --- ## 4. Every feature, page by page ### Site-wide - Pages, switched by the address: `/` (Festival court), `/#/promoters`, `/#/fans`, `/#/why`. `/classic` keeps the earlier one-page site. - Menu: Festival court, For promoters, For fans, Why Qloo. The header steps aside when scrolling down and returns when scrolling up. - Festival day bar (on the court, fans and Why Qloo pages): pick one of five real Lollapalooza days (Thursday 2024; Thursday, Friday, Saturday, Sunday 2026, published set times) or a test bill, or bring your own lineup. - Dark by default with a light theme toggle; works at phone width; headings and panels rise into view on scroll; explanations fold behind "How it works" and "How to use" toggles. - "Ask the AI agent": a floating button on every page opens the conversational agent, with example questions that change with the page. - A short, checked description beside every act (for example "Hozier: Irish singer, 'Take Me to Church'") in the court, the timetable, the fan route and the graph, so people who do not know the artists can follow. 225 of 248 acts have one; an act the model was not sure of has none rather than a guess. ### Front page: Festival court - "Watch the 2-minute tour": plays the product end to end with a narration bar (the problem, the bill as Qloo sees it, the court sitting, a city's month for an artist, a promoter's portfolio, the agent answering, the evidence). It switches pages by itself. Stop at any time. - "Enter the courtroom": scrolls to the court and convenes it. "Talk to the AI agent": opens the agent. - Section buttons: Better than GPT-6 Astra alone, The $40B problem, Watch the court, The bill as Qloo sees it, How it works, For fans and promoters. - The result band: "28 pre-registered tests over 22 days found: Qloo makes GPT-6 Astra better", three before and after numbers (0/30 to 29/30 facts; 0.697 to 0.728 real fans; 46 to 0 answers that change), link to every test. - The agent band: what makes it agentic, a live-typed example of tool calls, a question box and example questions. - The market band: four sourced figures (section 3). - The bench: - Clash score as published and after the court; "Not run yet" until the court sits. The score: shared fans times hours of overlap, summed over every pair on the bill. Lower is better. - Convene the court: replays the recorded sitting of four AI agents (instant, no model cost), with the booker's gate. - Run the agents live (about 3 minutes): the agents argue again, fresh, streamed as they speak. - Booker's emergency: plain words such as "Tyla just cancelled", "Kesha arrives at 4pm" or "keep Hozier and Lizzy McAlpine apart" become checked rules and the day is rebuilt. Example chips per festival. - Back to the published timetable. - Stats: acts on the bill, stages, pairs scored, clashes cut. - The courtroom (beside the timetable): - Each case is one red clash: the two acts face off with photos and descriptions; the transcript shows the tool calls and each agent's statement; the proposal chips show where each move lands and the clash score after it. - The booker's gate (human in the loop): on case 1 the recording pauses with "You have the floor, booker": approve a proposal that keeps every rule, let the clash stand, or let the judge decide; the judge decides after 30 seconds of silence. If your ruling differs from the judge's, the agents argue the rest of the day live from your timetable. - The docket lists every case and its outcome; the judgment shows who decided each move (fan agents, the booker, you), how many proposals the code refused, how many moves the optimiser alone would not have made, and both scores: the court's and the optimiser's alone, reported honestly. - Skip to the verdict. - The timetable: - Stages as columns, time down the side, every set with photo, name, description on hover, time. - Red: shares many fans with a set at the same time. Pink: some shared fans. Dashed blue: fan data from Last.fm. - Clash lines (arcs) join pairs that must choose; hovering a set lights its own lines and fades the rest. - Slider: "Draw a clash line when fans overlap at least 0.45", from 0.30 to 0.90, with a live count of lines. - Drag any set to another slot: before dropping, the slot shows red or green for whether that act's fans would clash there and with whom; the move is re-scored, broken house rules are listed, Undo puts it back, and the act stays pinned when the court plans the rest. - One-line source note for the published set times, expandable. - The bill as Qloo sees it: every act drawn with its photo in a force layout, pulled toward the acts its fans share; pink lines are pairs on at the same time; toggle "As published" and "After the court" (9 pairs to 1 on Lollapalooza Thursday 2024); click an act for its closest acts, its clashes and its description. - Who is in the room: six one-line steps (the clerk reads the bill, fan agents file cases, the booker objects, the judge rules, emergencies, fans weigh in). - Two more ways to use it: cards to the promoters and fans pages, and to Why Qloo. - Bring your own lineup (dialog): paste one set per line (stage, act, start, end; commas or tabs; 13:00 or 1pm; at least 4 and at most 80 sets). Every act is matched in Qloo (Last.fm where Qloo has none), the overlap is scored, and the day opens like a built-in one, with progress streamed as it builds. ### For promoters (city desk) - Cities on the demo: New York and Chicago, November 2026, loaded ahead (386 and 203 shows on sale, from Ticketmaster). Any US city works the same way; the list is set by one setting. - The map: every show of the month; the shows that pull hardest on the artist's fans stand up as pins (pink for Qloo, blue for Last.fm), bigger for a stronger pull; the agent flies venue to venue as it reads the month. The first visit runs the Clairo example so the pins are there at once. - Book a date: type an artist; every night of the month is scored by how much the city's other shows that night pull on that artist's fans. A calendar heat map (darker nights pull harder), the best nights to book, the nights to avoid and which show makes them bad, and partners (shows whose fans are your fans, to market alongside). Fridays and Saturdays only, if wanted. - Promoter portfolio: pick a promoter (for example Live Nation, 114 New York shows in November). Pairs of its own shows that share fans are sorted into: compete (same night), sequence (within a week: market the second show to the first one's audience) and co-promote (further apart). Pairs drawn on the map. - Openers and tour: the model suggests openers for a headliner; each is checked against Qloo (held, fan overlap with the headliner, a smaller draw) and against listings. Pick cities and Route the tour: the model orders the cities, then the engine picks each city's night with the least competition, one to four days apart. The model leads these two tools because our tests found it better there (section 9), and the page says so. ### For fans - Plan my day: name up to five artists you love (they need not play the festival). Every act on the bill is scored for your taste by Qloo, and the best path through the day is planned. A clash you cannot avoid is filed with the court as your case and weighs the next ruling. Example buttons fill the form. - Friends' month, with food and drinks: add each friend and the artists they love; get a month of nights out: - A calendar with each night out, the act and the initials of who goes (pink when the whole group goes). - A dated agenda: date, time, act, venue, who goes, the other show that night if you would rather swap, tickets. - Each night as a timetable: a place before the show, the show, a bar after, each near the venue, matched by Qloo to the group's music taste and kept only if Qloo's hours say it is open then. Example: "19:45 Before the show: Joyface (cocktail bar), 9 minutes' walk, open 19:00 to 03:00; 21:00 Gus Dapperton at Mercury Lounge; 23:30 After: Old Flings (cocktail bar), open to 04:00." - "On the map" flies to the venue and drops labelled Before and After pins. - Who goes: a person goes to a show they would love (about their own top tenth of the month); nights the whole group would love come first, then nights two or more would love; anyone left with fewer than two nights gets their own best shows, so a taste nobody else shares still gets a night. ### Why Qloo - Headline: "Qloo makes every model better", four big numbers. - Interactive charts, every mark with a hover tooltip: - Test 20 answer rings: GPT-6 Astra and Gemini 3.8 Flash, alone and with Qloo; right, wrong, did not know. - Dumbbells: each model alone to with Qloo, with 95% intervals and a significance label (shared fans for both models, timetable quality, small artists). - Qloo against popularity in six tests, paired bars. - Identity rings: 119 of 120 places found; 38 of 44 festival acts matched. - Ask the same question twice: a grid of every pair of acts on a festival day; lit squares changed. Switch between five days and between GPT-6 Astra alone and Qloo (46 of 903 against 0 on Friday 2026). The count is measured; where the lit squares sit is illustrative. - Eight test cards: question, data, results, verdict. - What Qloo adds, live, for the chosen festival day: acts matched with ID and photo, answers that change, acts each side does not know, cost. - How we tested: registered first, outside references only, two model families. ### Ask the AI agent (conversational) - Plain-word questions; the agent chooses among 10 tools; each call appears as it runs; every number in the answer is checked against the tool results and unmatched numbers are flagged. Remembers the conversation. Orders change the real timetable. Example questions per page. --- ## 5. The agents ### The court (clash/council.py) For each red clash (shared-fan weight 0.45 or more and overlapping sets), worst first: 1. Two fan agents, one per act, run in parallel. Tools: `fans_of` (the act's closest acts on the bill, from Qloo) and `moves_for` (candidate moves for either act and the clash score after each). They are briefed with the first tool results up front, so most answer in one round trip. Each proposes a move (any move: fans need not respect rules). 2. The booker agent checks every proposal with `check_move` (which house and booker rules it breaks) and `legal_moves`; it objects, naming the rule, and may counter-propose a legal move. 3. The judge agent compares the proposals (may confirm with `score_move`) and rules: the move that frees the most fans while keeping every rule, or none. 4. The clerk (code) refuses any ruling that breaks a rule or does not improve the day; the move is made at once. 5. After the cases, the optimiser tidies the rest of the day with the agents' moves pinned. - Modes: the five worst clashes, or every red clash (up to 30 cases; each pair argued once). - Recordings: a full sitting is recorded once (cache/council_.json) and replayed instantly; a sitting where any agent failed is never saved. If all four agents fail in a case, the quick ruling (optimiser) sits instead. - Human gate and continue: after the booker's ruling on case 1 differs from the judge's, POST /api/clash/council/continue applies the booker's move (marked "by you") and the agents argue the remaining cases live (about 18 seconds a case). - Reliability: waits and retries on provider busy (HTTP 429: 5, 15, 30 seconds). Agents name moves by stage and time, never by slot number. ### The conversational agent (clash/ask.py) Ten tools: `timetable` (score, worst clashes, rules), `where_is` (an act now and as published, its cases), `shares_fans_with` (closest acts on the bill), `clash_between` (two acts' overlap and minutes), `booker_order` (plain words to a checked rule, replays the court), `fan_route` (a fan's day), `city_plan` (best nights in a city month), `promoter_portfolio`, `promoters`, `evidence` (Test 28). Code checks every number in the answer against the tool results. ### The booker's words (clash/agents.py) Patterns first (cancel, arrives at, cannot play after or before, must finish by, keep apart, put on a stage, at a time), then the model for anything the patterns miss. Rule types: cancel, not_after, not_before, end_by, apart, on_stage, at_time. Every rule is checked by code before the optimiser runs. ### Model-led tools, checked by Qloo (clash/booking.py) Openers: the model proposes; Qloo checks each (held, overlap with the headliner ranked among the ideas, smaller draw by Qloo popularity) and listings check whether it is playing nearby. Tour: the model orders the cities; the engine picks each city's night from real listings. ### Models GPT-6 Astra (OpenAI) through CometAPI by default; providers are one setting (CometAPI, Kie, OpenRouter, OpenAI). The recorded sittings, the graph, the timetable, the fan route, the city desk, the evenings and Why Qloo need no model at all. --- ## 6. How Qloo is used | Qloo call | Parameters | Used for | Tested in | |---|---|---|---| | `/search` | artist name | match each act by exact name; ID, photo, description | festival days (38 of 44); Test 22 (places, 119 of 120) | | `/v2/insights` | `filter.type=urn:entity:artist`, `signal.interests.entities`=one act, `filter.results.entities`=the rest of the bill | the pair overlap table for a festival day (about one call per act) | Test 28 | | `/v2/insights` | same, signal = a fan's favourites | a fan's fit for every act; Plan my day | Test 27 | | `/v2/insights` | same, over a city's month of acts | book a date, portfolio, friends' month | Tests 14, 15, 27, 28 | | `/v2/insights` | `filter.type=urn:entity:place`, `filter.location`=the venue, radius 900 m, signal = the group's artists | places before and after a show, with hours | Tests 12, 20 | How the overlap becomes a clash weight: Qloo's raw affinities are bunched together, so each act's scores are ranked against the rest of the bill, the two directions averaged and the result cubed, so near-twins dominate. Acts Qloo does not hold take Last.fm's similar-artist match directly, labelled on the page. An act neither source holds is shown as no data and never guessed. --- ## 7. Architecture ``` Browser (vanilla JS, D3, Leaflet) Server (Python, FastAPI) Data ------------------------------------- ------------------------------------------ ----------------------- Festival court court.js, graph.js ---> clash/api.py sessions, court, moves Qloo API (taste graph) For promoters city.js (map, desk) ---> clash/city_api.py city desk Ticketmaster (listings) For fans court.js, city.js ---> clash/fanroute.py, clash/city.py Last.fm (fill-in) Why Qloo why.js, qloo_adds.js ---> clash/baseline.py (model-alone runs) Published set times Agent ask.js (SSE) ---> clash/ask.py tool loop Model provider (CometAPI) Tour, pages tour.js, site.js clash/council.py court agents (SSE) Lineup lineup.js (SSE) ---> clash/lineup.py clash/schedule.py optimiser and rules clash/agents.py booker words to rules clash/overlap.py Qloo and Last.fm tables clash/booking.py openers, tour clash/guard.py rate limits, daily budget qloo.py, llm.py cached clients ``` - Sessions: the server holds each visitor's timetable and is the only source of truth; every reply carries the full state. - Streaming: the court, the live overrule, the agent and the lineup builder stream server-sent events (a thread and a queue behind a StreamingResponse). - Caching: every Qloo, Ticketmaster and Last.fm reply is cached on the server (listings for a day, the rest kept). Qloo data never goes in the public repo: on the host, the cache is downloaded at start-up from a private dataset. - Guards (public demo): per visitor per hour 20 questions, 10 model calls, 40 commands, 60 lookups, 3 lineups; model spend stops at $5 a day while every no-model feature keeps working. - Hosting: Render (Python web service), health check `/health` (GET and HEAD), an uptime monitor keeps it awake. - Front end: no framework; one HTML page per site with views switched by the address; D3 7.9 for the graph and charts, Leaflet 1.9 for maps; CSS custom properties for both themes. --- ## 8. Algorithms - Clash score: for every pair of acts, shared-fan weight (0 to 1) times hours their sets overlap, summed over the bill. A red clash: weight 0.45 or more and overlapping (the same line in the cells, the arcs and the drag preview). - House rules: headliners close their stages; no act moves more than 2 hours from its billed time; set length within 15 minutes of the published one; acts stay on stages of their size (main, mid, small); locked stages (the dance stage) stay; plus the booker's own rules. - Optimiser (clash/schedule.py): swaps acts between existing slots; 12 seeded local searches within 2 seconds, best kept; pinned acts (the agents' moves, your drags) never move. - Fan route (clash/fanroute.py): a set's value is the fan's fit above their median for the bill; best path by weighted interval scheduling (dynamic programming), allowing a short walk between stages; a clash is flagged when an overlapping set is nearly as good (within 0.03) and in the fan's top quarter. - Book a date (clash/city.py): a night's pull = how much the other shows that night draw on the artist's fans (Qloo fit of each act for a fan of the artist, ranked within the month and cubed). - Portfolio: pairs of one promoter's shows with high shared fans, sorted by days apart into compete (0), sequence (within 7) and co-promote. - Friends' month: a person loves a show at fit 0.7 or more (about their top tenth of the month); greedy plan, one show a night, each act once, up to 10 nights; everyone first, then two or more, then each person's own two best. - Evenings: for each night, places within 900 m ranked by Qloo for the group's artists; a place before the show must be a restaurant genre, open 75 minutes before and until 15 minutes before the start; a bar after must be open at least 3 hours after the start; concert venues, galleries and places closed that day are left out. --- ## 9. Testing: method and every result Method. Every test was pre-registered: its question, data, metric and decision rule were written down and committed to git before any code or result, and deviations were recorded. 28 tests, Oct 9 to Oct 30, 2026. Tests 1 to 27 were run in the team's earlier project on New York restaurant, music and listening data; Test 28 (the clash score) is in this repo with its protocol. References are always outside Qloo: Google Maps hours read by a person, real listeners (Last.fm, GroupLens HetRec 2011), real tour bills and bookings (Ticketmaster), published set times, MLB attendance, NYC records. Two model families: GPT-6 Astra (frontier) and Gemini 3.8 Flash (small). 95% intervals by bootstrap. ### All 28 tests, one line each (registered before any result; 26 run to a result) | # | Question | Result | |---|---|---| | 1 | Do Qloo cuisine heatmaps predict where a cuisine's first restaurant opens? | No (city density does better) | | 2 | Do music-audience heatmaps carry residents' taste? | No | | 3 | Do Qloo-grounded briefs beat plain ones, by blind human raters? | Not completed | | 4 | Does Qloo add to city records for ranking leases? | No | | 5 | Does Qloo predict which young restaurants survive? | No claim (a placebo gained as much) | | 6 | Do Qloo audience tags match independent data? | 2 of 7 hold | | 7 | Does Qloo predict which cuisine opens at a storefront? | No added value | | 8 | Does Qloo add to a brief beyond a list of nearby businesses? | No | | 9 | Do improved Qloo briefs beat city-record briefs? | Not shown | | 10 | Does Qloo's competitor list cover city records? | 37% coverage, 81% exist | | 11 | Is a Qloo scene about the restaurant or its location? | Mostly location | | 12 | Are Qloo's Friday closing times right (vs Google Maps)? | 29 of 30 | | 13 | Which uses of Qloo's graph are stable enough to test? | 3 of 7 pass | | 14 | Does Qloo venue-to-artist affinity match real bookings? | Above popularity | | 15 | Does Qloo artist-to-artist affinity match real tour bills? | 0.875, above popularity and genre | | 16 | Does a model find real openers better with Qloo? | No difference | | 17 | Do Qloo city scores match where artists play? | Not above city size | | 18 | From five loved films, does Qloo find the next? | Above popularity and genre | | 19 | Does Qloo lift models on another team's 115 tours? | Not run (needed model credit) | | 20 | Is a model right about closing times more often with Qloo? | 0/30 to 29/30 | | 21 | Is Qloo ahead on lesser-known headliners? | No | | 22 | Does Qloo find the places a model names? | 119 of 120 | | 23 | Does Qloo know which comedians share a crowd? | Not shown | | 24 | Does Qloo's age skew find acts young people took up? | No | | 25 | Qloo on its home ground: small acts, new restaurants, steadiness | Steady; no gain on new restaurants | | 26 | Do Qloo city scores predict MLB theme-night attendance? | No | | 27 | Does Qloo find small artists real listeners play? | 0.841 vs popularity 0.516 | | 28 | The clash score: which scorer best ranks pairs of acts by real shared listeners (10 bills of 30 artists, Last.fm), and builds the best timetable? | Qloo made GPT-6 Astra (0.697 to 0.728) and Gemini (0.695 to 0.723) better; Qloo 0.663 vs popularity 0.043 on timetables | ### Where Qloo made a model better (the same model, alone and with Qloo) | Test | Task (reference) | Metric | Alone | With Qloo | Difference | Verdict | |---|---|---|---|---|---|---| | 20 | Friday closing time, 30 NYC restaurants (Google Maps) | right within 30 min | GPT-6 Astra 0/30 | 29/30 | +0.967 [0.90, 1.0] | Significant | | 20 | same | same | Gemini 3.8 Flash 3/30, 6 wrong | 29/30 | +0.867 [0.70, 1.0] | Significant | | 28 | Pairs of acts by real shared listeners, 10 bills of 30 artists, 4,350 pairs (Last.fm) | Spearman | GPT-6 Astra 0.697 | 0.728 | +0.031 [0.005, 0.056] | Significant | | 28 | same | Spearman | Gemini 3.8 Flash 0.695 | 0.723 | +0.028 [0.003, 0.056] | Significant | | 28 | Timetable built from the scores, judged by real listeners | gain, 0 random to 1 best | GPT-6 Astra 0.669 | 0.702 | +0.033 [0.000, 0.063] | Higher, borderline | | 27 | Small artists a real listener played, 40 listeners | AUC | GPT-6 Astra 0.865 | 0.874 | +0.010 | Higher | With Qloo, the small Gemini model (0.723) scored above GPT-6 Astra alone (0.697) on real shared fans. ### Qloo against simple baselines | Test | Task | Qloo | Baseline | Verdict | |---|---|---|---|---| | 28 | Timetable quality | 0.663 | Popularity 0.043 | Qloo, +0.62 | | 28 | Shared fans (Spearman) | 0.723 | Popularity 0.394 | Qloo, +0.33 | | 27 | Small artists (AUC) | 0.841 | Popularity 0.516 | Qloo, +0.324 | | 15 | Real tour bills (AUC) | 0.875 | Popularity 0.473, genre 0.714 | Qloo over both | | 18 | Films a person loves (AUC) | 0.758 | Popularity 0.687, genre 0.578 | Qloo over both | | 14 | Venue bookings (AUC) | 0.589 | Popularity 0.485 | Qloo over popularity | ### Qloo's data: facts, identity, steadiness | Test | What | Result | |---|---|---| | 12 | Friday closing time vs Google Maps | 29 of 30 (35 of 36 on all places) within 30 minutes | | 22 | Places named in model-written plans found by Qloo | 119 of 120 | | Festival days | Acts matched with ID, photo, description (Lollapalooza Thursday 2024) | 38 of 44; Last.fm fills 6 | | Festival days | Same question twice, pairs moved 10+ points (model alone / Qloo) | 4 of 946 / 0; 9 of 903 / 0; 46 of 903 / 0; 9 of 903 / 0; 13 of 903 / 0 | | Festival days | Acts the model said it did not know (2026 Thu, Fri, Sat, Sun) | 6, 7, 7, 8; Qloo held no data for 14, 19, 18, 16 (filled from Last.fm) | | 13 | Idea screen, consistency of Qloo's lists for sibling branches | partners +0.33, scene +0.267, twin city +0.276 pass | | 6 | Audience tags vs independent data | Affluent Diners vs income 0.405, Business Professionals vs jobs 0.378 hold | ### Where the model leads (and how the product uses it) | Test | Task | Qloo alone | GPT-6 Astra alone | Reading | |---|---|---|---|---| | 28 | Shared fans | 0.723 | 0.697 | Level, Qloo higher; Qloo used for steadiness and cost | | 15 | Tour bills | 0.883 | 0.976 | Model leads tour order and openers; Qloo checks each pick | Consequences in the product: the clash score uses Qloo (level on taste, steady, no model cost, and it makes the model better when combined); openers and tour order are led by the model and checked by Qloo; places use Qloo's hours, where models alone fail. Earlier tests shaped the scope: Qloo's area maps and audience heatmaps did not hold up against city records, so Verdict is built on artist-to-artist overlap and place facts, where Qloo holds up. ### Product metrics: the court (Lollapalooza Chicago, Thursday August 1, 2024: 44 acts, 7 stages, 946 pairs) | Metric | Value | |---|---| | Clash score, published | 10.85 | | After the agents argued every red clash | 5.92 (45% fewer) | | Optimiser alone | 5.45 | | Red clashes at the start | 17 pairs | | Cases argued / moves decided | 10 / 9 | | Moves proposed by fan agents / by the booker | 3 / 6 | | Rule-breaking proposals refused by code / rules broken | 15 / 0 | | Moves the optimiser alone would not have made | 6 | | Full sitting, time and model cost | 352 s, $0.76 | | Live overrule (agents argue cases 2 to 5) | 76 s, $0.23, about 18 s a case | | Pairs fans must choose between (graph) | 9 to 1 | | Live site response times | load a day 1 s, court replay 1 s, Plan my day 1 s, book a date 3 s, friends' month 2 to 5 s | The court scores slightly worse than the optimiser alone (5.92 against 5.45); the page reports both. The agents' value is explanation, human control (the gate), emergencies in plain words and moves a booker can follow. --- ## 10. Design decisions and why 1. Qloo for the clash score, not a model: in Test 28 Qloo alone matched a frontier model on real shared fans, gives the same answer every time (a model changed up to 46 of 903 pairs between two identical requests), costs no model call, and made the model itself better when combined. 2. Rank and cube Qloo's affinities: raw scores are bunched; ranking within the bill and cubing lets near-twins dominate, so only real clashes turn red. 3. Code decides, models talk: agents propose and argue; the clerk refuses any move that breaks a rule or does not help. Nothing an agent says can break a festival rule. 4. A human booker has the final say: the gate on case 1, drag and drop, plain-word emergencies, Undo. 5. Record once, replay free: judges and visitors see the full agent sitting instantly with no model cost; "Run the agents live" and the overrule show it is real. 6. Never guess an act: exact-name matching; Last.fm fills in, labelled; no data is shown as no data. 7. The model leads where tests found it better (openers, tour order) and the page says so; Qloo checks its picks. 8. Places by Qloo's hours: models alone either refuse or guess wrong (Test 20); Qloo's hours were right for 29 of 30. 9. Every claim on the site is a test result with its interval; ties are reported. 10. Qloo data stays private: cached on the server, never in the public repo; the host loads it from a private dataset. 11. A public demo must survive judges: rate limits per visitor, a daily model budget, every no-model feature always on, cities loaded ahead so no answer waits minutes. 12. Organised by audience: the festival court first (the most agentic, most original part), then promoters, fans and the evidence, each self-explanatory with a tour for anyone in a hurry. --- ## 11. Limits, stated plainly - Qloo does not hold every act (on the 2026 days it lacked 14 to 19 of 43); Last.fm fills in, labelled. - On taste alone, Qloo and a frontier model are level; the win is Qloo with the model, steadiness, identity, place facts and cost. - The court scores slightly worse than the optimiser alone; both scores are shown. - Last.fm listening data (Test 28's reference) is from about 2011 and holds each listener's top 50 artists. - Evenings: some nights have no place that fits the times nearby, and those lines are simply left out. Qloo's hours matched Google's for 29 of 30 places tested; a place with no hours that day is never suggested. - The demo loads New York and Chicago for November 2026; other cities work but load slowly the first time. - Live agent features need model credit; the recorded court and every no-model feature do not. --- ## 12. API reference Pages: `GET /` (the site), `GET /classic` (earlier one-page site), `GET /health` (GET and HEAD), `GET /llms.txt`. Festival court (`clash/api.py`): - `GET /api/clash/festivals`: the festival days. - `POST /api/clash/load {festival}`: a session, the day's state, photos, descriptions, weights. - `POST /api/clash/run {session}`: the quick ruling (optimiser). - `POST /api/clash/command {session, text}`: a booker's order in plain words. - `POST /api/clash/reset {session}`: back to the published timetable. - `POST /api/clash/move {session, act, cell}` and `POST /api/clash/undo {session}`: drag and drop. - `POST /api/clash/route {session, favourites}`: a fan's day. - `GET /api/clash/graph?session=`: the bill as a graph. - `GET /api/clash/baseline?festival=`: the model-alone comparison for the day. - `POST /api/clash/council {session, live}`: the court (recorded replay, or live and streamed). The every-clash recording is made offline with `python -m clash.council --every`. - `POST /api/clash/council/continue {session, pair, act, to}`: the booker's ruling on case 1, then the agents live. - `POST /api/clash/ask {session, question, history}`: the conversational agent (streamed). - `POST /api/clash/lineup {name, text}`: build a day from a pasted lineup (streamed). City desk (`clash/city_api.py`): - `GET /api/city/options`: cities and months on the demo. - `POST /api/city/plan {city, month, artist, weekends}`: book a date. - `GET /api/city/promoters?city=&month=` and `POST /api/city/portfolio {city, month, promoter}`. - `POST /api/city/friends {city, month, people}`: the friends' month, with evenings. - `POST /api/city/support {headliner}`: openers. `POST /api/city/tour {artist, cities, month}`: tour route. --- ## 13. Run it, deploy it ``` python -m venv .venv .venv/Scripts/pip install -r requirements.txt # fastapi, uvicorn, pydantic # .env: QLOO_API_KEY, TICKETMASTER_API_KEY, LASTFM_API_KEY, COMET_API_KEY, LLM_PROVIDER=comet .venv/Scripts/python -m uvicorn app:app --port 8000 ``` Tests: `PYTHONPATH=. python tests/test_clash_schedule.py`. Record a sitting: `python -m clash.council [--every]`. Model-alone comparison: `python -m clash.baseline `. Deploy: render.yaml (Render, Python). Secrets in the host's settings; `CACHE_DATASET` and `HF_TOKEN` load the private cache at start-up; `DAILY_USD`, `ASKS_PER_HOUR`, `CITIES_READY` tune the public demo. --- ## 14. Repository map - `app.py`: the web server, pages, start-up cache. - `clash/`: `api.py`, `city_api.py` (routes); `council.py` (court agents); `ask.py` (conversational agent); `agents.py` (booker's words to rules); `schedule.py` (rules, clash score, optimiser); `overlap.py` (Qloo and Last.fm tables, weights); `fanroute.py`; `city.py` (listings, book a date, portfolio, friends' month, evenings); `booking.py` (openers, tour); `lineup.py`; `baseline.py` (model-alone runs); `guard.py`; `who.json` (act descriptions); `festivals/` (five real days and a test bill). - `static/site/`: the site (`index.html`, `site.js`, `site.css`, `court.js`, `city.js`, `graph.js`, `why.js`, `ask.js`, `tour.js`, `lineup.js`, `qloo_adds.js`). `static/court.html`: the earlier one-page site. - `qloo.py`, `llm.py`: cached Qloo client with a quota guard; model providers with cost tracking. - `tests/test_clash_schedule.py`; `PREREGISTRATION_28.md`; `PROJECT_LOG.md`; `README.md`; `render.yaml`. --- ## 15. Threats to validity - Test 28's reference is Last.fm listening data from about 2011, holding each listener's top 50 artists. - Test 28 covers 10 bills of 30 artists (4,350 pairs), drawn by a fixed seed, not every possible bill. - The second model family is a small model (Gemini 3.8 Flash), not a second frontier model. - The restaurant hours tests (12, 20) used 30 New York places, mostly small independents; Qloo's hours likely share Google's source, so they measure that Qloo delivers live place facts to the agent, not taste. - The "same question twice" comparison is two runs of GPT-6 Astra per festival day. - The court's recorded sitting is one real day; other days replay the five worst clashes. - Tests 1 to 27 ran in the team's earlier project; their protocols are not in this repository. ## 16. Scalability and production readiness | Concern | Now | At 100 times the traffic | |---|---|---| | Qloo quota | Every reply cached; the client reads `X-Month-RateLimit-Remaining` and pauses live lookups below a reserve of 300 | Precompute pair tables per city and month offline | | Model cost | $5 a day cap; per-visitor limits; recorded sittings cost nothing | Record sittings nightly; budgets per customer | | Latency | Agents briefed with tool results up front (one round trip); streaming; cities loaded ahead | Regional caches; a queue for live cases | | State | Sessions held in server memory; every reply carries the full state | A shared session store (for example Redis) behind several servers | | Abuse | Per visitor per hour: 20 questions, 10 model calls, 40 commands, 60 lookups, 3 lineups | Per-account limits | | Failure | Failed sittings never saved; quick-ruling fallback; retries on provider busy | Per-provider circuit breakers; providers already switch with one setting | | Deployment | Render web service, `/health` (GET and HEAD), uptime monitor, private cache loaded at start-up | Containers with autoscaling; static files on a CDN | The path a judge uses most (the recorded court, the timetable, the graph, the fan route, the city desk, the evenings, Why Qloo) makes no model call, so its marginal model cost is zero. ## 17. Security and responsible AI - Keys only in environment variables; `.env` is git-ignored; Qloo data never in the public repository (the host loads it from a private dataset at start-up). - No agent can break a festival rule: the clerk is deterministic code (15 refusals, 0 rules broken on the default day). - No unchecked numbers: every figure in the agent's answer is checked against its tool results; unmatched ones are flagged on the page. - No guessed identities: exact-name matching, labelled Last.fm fallback, "no data" shown as no data; act descriptions left blank when the model was not sure. - Input validation on every endpoint (typed request models with length limits); names from listings are escaped before they reach the map. - No accounts and no personal data: a visitor's timetable and favourites live only in their session. - Accessibility: light and dark themes, phone width, reduced motion honoured. ## 18. FAQ for judges - **Is the court real or a recording?** Both, and the page says which. Convene replays a recorded sitting (instant, no cost). "Run the agents live" argues afresh and streams. The booker's gate on case 1 continues live from your ruling. - **What stops an agent from doing something illegal?** Code. The clerk refuses any move that breaks a house or booker rule or does not improve the day. - **Is this a wrapper around a model?** No. The scores, the city pull, the fan fit and the evenings are Qloo; the model argues, explains and reads plain words; code decides. Most features run with no model at all. - **The court scores worse than the optimiser (5.92 against 5.45). Why have agents?** Both scores are shown. The court's value is a ruling a booker can defend: each move comes with a transcript, the rule checks, the refusals and a human veto; 6 of its 9 moves are ones the optimiser alone would not make. - **What if Qloo has no data for an act?** Last.fm's similar-artist match fills in, labelled on the page; if neither holds the act, it shows as no data and is never guessed. - **What if the model provider is down?** The quick ruling (optimiser) sits instead, labelled; recorded features keep working; providers switch with one setting. - **Can I use my own festival?** Yes: Bring your own lineup (4 to 80 sets), matched in Qloo with progress streamed. - **Where is the data?** Qloo replies are cached on the server and loaded on the host from a private dataset; the repository holds code, fixtures (published set times) and the act descriptions. ## 19. How to verify every claim | Claim | Verify at | |---|---| | Live product | https://clash-court-1s4a.onrender.com | | Code, MIT licence | https://github.com/SiddGud/Verdict | | Test 28 protocol, committed before results | `PREREGISTRATION_28.md` | | Dated build and test log, every result | `PROJECT_LOG.md` | | The court's numbers | replay on the front page; `cache/council_.json` is regenerated by `python -m clash.council --every` | | The model-alone comparison | Why Qloo page; `python -m clash.baseline `; `GET /api/clash/baseline?festival=` | | Engine tests | `PYTHONPATH=. python tests/test_clash_schedule.py` | ## 20. Glossary - **Shared-fan weight**: how much two acts' fans are the same people, 0 to 1, from Qloo (ranked within the bill and cubed) or Last.fm. - **Clash score**: shared-fan weight times hours of overlap, summed over every pair on the bill. Lower is better. - **Red clash**: a pair with weight 0.45 or more whose sets overlap. - **House rules**: headliners close, moves within 2 hours, set lengths within 15 minutes, stage sizes kept, locked stages stay. - **The clerk**: the code that checks and applies every move. - **Quick ruling**: the optimiser alone, no agents. - **Pull**: how much a night's other shows draw on an artist's fans (book a date). - **Fit**: how much a fan (or a group) is likely to love an act, from Qloo. - **Evening**: a night out's timetable: a place before the show, the show, a bar after. ## 21. Machine-readable summary ```json { "name": "Verdict", "event": "Qloo Agentic Hackathon 2026", "team": ["Athmeeya M Kashyap", "Siddhant Gudwani"], "license": "MIT", "live": "https://clash-court-1s4a.onrender.com", "code": "https://github.com/SiddGud/Verdict", "audiences": ["festivals", "promoters and booking agents", "fans"], "qloo_uses": ["/search entity resolution", "/v2/insights artist to artist", "/v2/insights fan to artist", "/v2/insights music taste to places with hours"], "agents": {"court": ["fan agent A", "fan agent B", "booker", "judge"], "court_tools": 5, "chat_tools": 10, "verifier": "deterministic code (the clerk)", "human_gate": true}, "tests": {"preregistered": 28, "days": 22, "window": "2026-10-09 to 2026-10-30"}, "evidence": { "test20_hours_gpt6_astra": {"alone": "0/30", "with_qloo": "29/30"}, "test20_hours_gemini_flash": {"alone": "3/30", "with_qloo": "29/30"}, "test28_spearman_gpt6_astra": {"alone": 0.697, "with_qloo": 0.728, "diff": 0.031, "ci95": [0.005, 0.056], "significant": true}, "test28_spearman_gemini_flash": {"alone": 0.695, "with_qloo": 0.723, "diff": 0.028, "ci95": [0.003, 0.056], "significant": true}, "test28_timetable_qloo_vs_popularity": [0.663, 0.043], "same_question_twice_pairs_changed": {"model_alone_max": "46/903", "qloo": "0/903"}, "places_found": "119/120" }, "court_default_day": {"festival": "Lollapalooza Chicago, Thursday 2024", "acts": 44, "stages": 7, "pairs": 946, "clash_published": 10.85, "clash_after_court": 5.92, "clash_optimiser_alone": 5.45, "cut_pct": 45, "red_clashes": 17, "cases": 10, "moves": 9, "moves_by_fan_agents": 3, "moves_by_booker": 6, "refused": 15, "rules_broken": 0, "moves_optimiser_would_not_make": 6, "seconds": 352, "usd": 0.76}, "limits": ["Qloo and a frontier model are level on taste alone", "the court scores slightly worse than the optimiser alone; both shown", "Last.fm reference data from about 2011"] } ``` ## Optional - [Test 28 protocol](https://github.com/SiddGud/Verdict/blob/main/PREREGISTRATION_28.md): question, data, metric and decision rule, committed before any result. - [Project log](https://github.com/SiddGud/Verdict/blob/main/PROJECT_LOG.md): every build step and test, dated. - [README](https://github.com/SiddGud/Verdict/blob/main/README.md): what it does and how to run it. - [Deployment](https://github.com/SiddGud/Verdict/blob/main/render.yaml): the Render blueprint. - [Earlier one-page site](https://clash-court-1s4a.onrender.com/classic): the first version, kept for comparison.