Files
zeekay 76cbcbc34e The Decision Suite leads /kai and /benchmarks, and every Kai figure there is read from the research API when the page opens
Sixteen tasks fixed on 2026-10-15, Kai beside Jev on each: the eleven
harness suites Kai leads, choices of 16 and 77 options, the same request
three times, false alarms on real benign prompts, and cost and deployment.
Each row names the research runs it reads by id, its public dataset, and the
hanzoai/benchmarks folder that re-runs it; one line under the board links
decision/SUITE.md. A row whose runs are not yet public prints "pending" and
holds the count back, so "16 of 16" is stated only once every row holds
both figures. Under the title, the owner's note: the frozen 12-suite
harness, including the row Jev leads, is below, and that board now prints
all twelve suites.

lib/api/research reads GET /v1/research/runs?org=hanzo through lib/api/read;
useKai derives the boards from it and every section draws reading, the
figures, or unreachable, with no snapshot standing in. The cost row is
GET /v1/models. /kai leads under its hero with the suite's own rows as
headlines. The gates serve the runs and an invented model list, read the
pending, loading and unreachable states, and hold the export to carrying no
Kai figure.
2026-10-15 11:35:45 -07:00

24 lines
1009 B
TypeScript

'use client'
import { useMemo } from 'react'
import { Unreachable } from '@/lib/api/read'
import { RESEARCH, runs } from '@/lib/api/research'
import { useReading, type Reading } from '@/lib/api/use'
import { derive, type Kai } from '@/lib/kai'
/**
* Kai's boards and claims, derived from the research API's runs as the page
* reads them (lib/api/research): loading, then ready, or unreachable. Nothing
* stands in while they are read, and no earlier answer is shown when they are
* not; a read that holds no Kai harness run has nothing to draw and says so.
* A module that imports React cannot sit in lib/kai, which scripts read too.
*/
export function useKai(): Reading<Kai> {
const reading = useReading(runs)
return useMemo((): Reading<Kai> => {
if (reading.state !== 'ready') return reading
const kai = derive(reading.data)
return kai ? { state: 'ready', data: kai } : { state: 'unreachable', error: new Unreachable(RESEARCH, 'no Kai run on the frozen harness') }
}, [reading])
}