Create the compositor repository, package it, and publish it #337
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#337
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
Give the compositor its own repository and release train, taking umbra's position in the pairing: it owns the roster language and the engine, and
acomposeis downstream of it and never its peer.coilyco-flight-deck, MIT licensed per standing policy for shareable work.justfileas the sole verb manifest, the agentic-os catalog pre-commit suite, and CI running the same recipes.evalkit. The eval runner travels with the engine, following the precedent that umbra shipsspecgenrather than splitting it into a separate repo. That colocation is also what keeps the graded artifact and the shipped artifact identical.aos-evalgrading stays in agentic-os.main, matching the release posture the estate already uses.docs/FEATURES.mdtrifecta from the first commit.HITL. Creating a public repository and claiming a PyPI distribution name are externally visible and effectively irreversible, so both need Kai's explicit go-ahead at the moment of creation rather than standing authorization.
Acceptance criteria
evalkitlive in it, and agent-compose no longer carries either.pip install <name>from PyPI, then composing a bundle from YAML, works on a machine with no Go toolchain present.mainpublishes the next release without manual dispatch, with dispatch retained as the override path.Blocked by
Unblocked on the name:
housecast#330 is settled. Kai chose
housecast. This clears "Blocked by #330 for thename", and the first acceptance criterion now reads against a concrete string.
coilyco-flight-deck/housecast. Verified free on Forgejo and theGitHub mirror at 2026-08-25T18:50:55Z.
housecast. Verified free at the same moment on both theJSON API and the PEP 503 simple index, checked against a control string that
also returned 404.
house-castis a separate PyPI name under PEP 503 normalization and is alsofree. Worth holding alongside
housecastso the hyphen never becomes anear-miss squat.
What the name claims, for the README criterion. A house cast is the resident
standing company of a theatre: a fixed troupe held by one house under one set of
conventions, able to mount any role in its book. That is the roster.
houseisthe authority noun, since a House constitutes its members and grants each one
marks distinguishing them from their siblings.
castcarries both casting a playand casting metal, and the second sense is the immutable bundle. It sits in
umbra's position and cannot be heard as an accessory to
acompose.Two things to carry into the README rather than discover later.
housecastalso parses as house plus forecast, and three of the four existing GitHub
repositories under that string are housing-price forecasters, all dead and
zero-star. And
castis a live Python concept, so type casting is the firstreading for a beat. Neither is occupation, both are reading risks, and the
hyphenated
house-castforces the correct parse in print if that is wanted.Full search record, alternates, and what the name forecloses are in #330.
On the HITL note in this issue
The note here is right and I want it visible against what I filed. I opened #347
asking for the PyPI names to be claimed ahead of the repository, on the grounds
that the naming register is being consumed fast. The urgency argument stands
and the authorization claim in it did not. I labeled it
autonomy/headless,which contradicts this issue's standing position that claiming a PyPI
distribution name is externally visible, effectively irreversible, and needs
Kai's explicit go-ahead at the moment of the claim rather than standing
authorization. I have corrected #347 to
autonomy/async-consultand said sothere. The claim should still happen soon, and it should happen with Kai present.
The repository exists. Bootstrap split out to housecast#1
Kai created
coilyco-flight-deck/housecastat 2026-08-27T09:28:38Z. Thatsatisfies the HITL gate this issue carries for repository creation, and it is
the half of that gate that has now been spent. The PyPI claim in #347 is
untouched and still needs Kai in the room.
The repository is empty, so the first acceptance criterion here is partly met
and partly not. The name is settled and the repository exists under it. MIT and
the trifecta do not, because nothing has been committed.
Split the scaffold out rather than growing it here. housecast#1 carries the
first commit: trifecta, MIT license, the catalog pre-commit suite, justfile, CI,
.ward/ward.yaml, and therepo-housecastpointer skill. It deliberatelyexcludes the compositor,
evalkit, the publish workflow, and the PyPI claim,so it is unblocked by #333 and by #347 and can land today. This issue keeps the
packaging and publication slice and stays blocked on #333 for the code that
moves.
Four calls made in housecast#1 so a build does not stop to ask, all reversible
and all named there with reasoning:
merge-remote-mainas the lane,housecastunhyphenated as the shipped spelling withhouse-casthelddefensively,
band = "small"for documentation layout, and no residentcheckout until real code lands.
Filed from the Portfolio Director seat, which defers
boundary-build-foundational-software. The build is handed to the AgenticPlatform Engineer seat.
The move is done. The publish is what is left.
agent-compose@6086991andhousecast@c4c2825. Composition no longer lives here.Moved to housecast: the compositor from #333,
evalkit,challenges.yaml,evaluations/and its committed evidence, the eval workflow scripts, and the typos config that keeps a spelling fix from editing a preserved model answer.Deleted here: all of the above, plus
internal/person/personality_anchors_test.go. That test asserted every melded personality has a grading anchor, and both the roster andevaluations/personality-anchors.yamlmoved, so the check moved with them rather than reaching across a repository boundary.No Go runs in housecast. The eval scripts called
go run ./cmd/agent-compose rosterandcompose. housecast gained arostersubcommand emitting the sameperson.jsonshape evalkit already read, so the swap was a swap: the entity roster and the 94-line challenge matrix are identical whether derived from the Go snapshot or housecast's.Acceptance criteria
pip install, then composing from YAML, works with no Go toolchain - yes, by the Forgejo route rather than PyPI. Verified from a scratch project that depends only onhousecastand composes a bundle.mainpublishes the next release - not done. This is the PyPI half and it is deliberately out of scope for now.docs/FEATURES.mdentry, since where composition lives is a public boundary.Packaging, and why there is no PyPI
Consumers depend on housecast from Forgejo through
[tool.uv.sources], pinned by tag, which is the shape the estate already uses foraos-eval:Tags
housecast-v0.1.0throughv0.1.4exist. A git tag is not a publish and reaches nobody outside the estate. The PyPI publish workflow and the name claim in #347 both remain untouched and both still want Kai. No placeholder was uploaded.The engine installs without Inspect: eval dependencies sit behind an
evalextra, sochecks/here pulls a light engine while housecast's own gates run--all-extras.What stays in agent-compose, on purpose
checks/holds the #333 differential oracle, which only works where both engines exist. It now runs against housecast resolved from Forgejo, so it proves the published artifact composes identically rather than a sibling working copy. It is deleted with the Go semantic layer under #339.checks/palette.pycame back out of the move. It readsinternal/color/color.goandinternal/palette/directly, so it measures this repository's Go palette and its inputs do not exist in housecast.Three things that went wrong, recorded
housecast-v0.1.0tag rather than cutting a new one. Later fixes used fresh tags.evalextra broke CI in a way no local run saw, because the local venv still carried the dependencies from an earlier sync. That is the same stale-environment failure as thefrom evalkit import paletteimport that kept resolving after the module moved.Leaving this issue open for the publish. Everything else it asks for has landed.