evalkit derives the board from the data, with no Go in the path #338
Labels
No labels
burndown-2026-08
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/devrel
role/eval
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/sysadmin
role/tpm
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/agent-compose#338
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent
#329
What to build
Remove the Go binary from the evaluation pipeline. This is the slice where the inversion in #329 is actually achieved rather than merely enabled.
Today both eval entry points open by shelling out:
scripts/eval-matrix.shrunsgo run ./cmd/agent-compose roster --out "$render_dir", readsperson.jsonfrom amktemp -d, then deletes the directory.scripts/eval-prompts.shrunsgo run ./cmd/agent-compose rosterand thencomposeonce per role, extracting eachcompiled.md.After this slice,
evalkit.matrixreads the YAML roster directly andevalkitcomposes the per-role system prompts through the compositor. Nogo run, no temp-directory round trip, noperson.jsonintermediary on the eval path.The rule in
docs/evaluation.mdthat "Python consumes what Go emits and never restates it" was written under the old direction and has to be restated. It becomes a statement about the eval pack schema and coverage rules, which still have exactly one home, rather than about roster composition, which has moved.Check whether
person.jsonretains any consumer once the eval path stops reading it. If its only remaining readers are launch-side and machine-to-machine, it stays JSON. If a human reads it as a debugging surface, it becomes YAML under #329 decision 2.Acceptance criteria
scripts/eval-matrix.shandscripts/eval-prompts.shcontain nogo runand no Go dependency.just evalkit-matrixandjust evalkit-promptswork on a machine with no Go toolchain installed.docs/evaluation.mdrestates the one-parser rule in terms of the pack schema rather than roster composition.person.json's remaining consumers are enumerated, and its format is confirmed or changed on that evidence.Blocked by
Go is already out of the eval path, as a side effect of the #337 move
Not closing this: what landed is the mechanical half, and the acceptance criteria here are about where the board comes from, not only about which binary runs.
evalkit moved to housecast, where no Go toolchain exists, so the three scripts that shelled out to
go run ./cmd/agent-composecould not survive the move unchanged:eval-prompts.shcomposed one compiled bundle per role through Go. It callspython -m housecast compose --delivery compilednow.eval-matrix.shandeval-annotate.shexported the roster throughagent-compose roster. They callpython -m housecast rosternow.housecast gained
housecast/snapshot.py, which emits the sameperson.jsonshape evalkit already read. That kept evalkit itself untouched, which is what made this a swap rather than a rewrite.Evidence it is the same board, not a similar one. Feeding
evalkit.roster.to_entity_rosterthe Go snapshot and the housecast snapshot produces identical output, andevalkit.matrixprints an identical 94-line case list from either. Both were diffed rather than eyeballed.housecast CI runs
just evalkit-matrixas a step, so the board deriving from the roster with no Go in the path is now gated rather than incidental.What this issue still owns
The snapshot is a JSON handoff in the person.json shape, which is a compatibility shim rather than the board reading the roster directly.
housecast/snapshot.pysays so in its own docstring and points here. If the intent is that evalkit consumehousecast.roster.Rosterand drop the JSON hop entirely, that is still to do and this is where it lives.Filed from the Agentic Platform Engineer seat while landing #337.