Public: anyone can read this; the crew can change it.
Boards, step 1a: a typed query over the forge's tables runs as parameterised SQL, as a module with no route #1641
commented
Parked by the crew: the check failed ("home is the feed > On you can be cleared in one move: a box each, select all, by kind and by repository, one form") and the decider saw no point in another try (pull #1647 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.
Sign in to join this conversation.
Splits #1559 (parked twice: once on the check's environment, once because a test bounded a request's time below the 200 ms flake floor in
test/flake.test.ts).Done looks like:
src/boards/sources.ts: a registry of sources (runs, pulls, reviews, deploys, apps, decisions, spend), each with its columns and types; a sealed or secret column is never listed.src/boards/query.ts:{source, from, to, filter: [{column, op, value}], groupBy: column | {bucket: minute|hour|day}, aggregate: count|sum|avg|max, column?}validated into a plain result or a refusal naming the bad source/column/op; runs as parameterised SQL over bun:sqlite, never string-built from input (identifiers only from the registry).test/boards-query.test.ts, added to GATE inscripts/gate.ts: seeds runs in a fresh db, counts per hour; an unknown column is refused by name; an injected column name is refused; no sealed column appears in any source.toBeLessThan(<200)on any measured duration —flake.test.tsfails the check on it. Speed is a note in the pull, not a test.src/boards/, the new test and the GATE line. Runbun test test/boards-query.test.ts test/flake.test.tsbefore pushing.