chore(catalog): retire catalog-block-present and drop the yaml from the trifecta #1142
No reviewers
Labels
No labels
burndown-2026-06
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/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/agentic-os!1142
Loading…
Reference in a new issue
No description provided.
Delete branch "chore/retire-catalog-block-hook"
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?
Phase 2 of the ward retirement (coilysiren/inbox#385). Phase 1 landed in agentic-os-kai; phase 3 is the 29-repo sweep that this unblocks.
Two hooks authored here pin
.ward/ward.yamlby path. With ward retired fleet-wide and that file being deleted from every repo, both would fail every consumer the moment the file goes. So they move first.catalog-block-presentis deletedIt existed solely to assert the catalog block was present and
dependsOnwas a list. The graph that consumed both was deleted in agentic-os-kai this pass, and the tracing behind that is worth recording:load_repos()returns AOS's residency projection, so a block contributed onlydescriptionanddependsOndependsOnwere repo-placement lints answering "which org is this repo in", which Forgejo already knowspersonal-dashboard, documented as the downstream consumer, does not exist under any owneratlas, documented as owning the public artifact, does not exist eithercatalog-trifectabecomes an actual trifectaIt required README, AGENTS, and docs/FEATURES to each carry a link to a fourth, non-markdown member. Now the three markdown files cross-link each other and nothing else, which is what the convention was always about.
CATALOG_YAMLS,resolve_catalog_yaml(), andcheck_catalog_yaml()go with it.The rollout tool needed the same edit
apply-agentic-os-hooks.pydropscatalog-block-presentfromDEFAULT_HOOK_IDS. Without that, the phase 3 rollout would stamp a hook id that no longer resolves upstream and break every repo it touched.Its
LEGACY_BLOCK_MARKERSandLEGACY_STAMPED_SCRIPTSentries stay. Those strip old per-hook stamps and stalescripts/check-catalog-block.pycopies out of consumers, which is still a job that needs doing.A test that was passing for the wrong reason
test_consumer_still_needs_every_peer_linkproved that a missing peer link fails the hook. The link it dropped was the ward.yaml one. Once that stopped being a peer the fixture became valid, the hook returned 0, and the test failed. Rewriting the assertion to match would have quietly destroyed what it tested, so it now drops thedocs/FEATURES.mdpeer instead and proves the same thing.Blast radius
None until a consumer bumps its pinned rev. Repos stay on their current rev and keep running the old hook set against the file they still have. Phase 3 does the rev bump, the file deletion, and the link removal per repo in one commit.
Validation
pre-commit run --all-filesgreen.pytest tests/is 532 passed, 1 failed, and the failure is pre-existing and unrelated:tests/test_ward_specs_bundle.py::test_yaml_configuration_is_accepted_by_ward_doctorshells out toward doctor. It passes in CI becausedocker/dev-base/full/Dockerfilestill installs ward, and fails on any host where ward is now absent. Flagging it as a landmine: dropping ward from that image, which the retirement wants, breaks this test in CI too. It belongs with the image and tap removal rather than here.(
tests/test_check_yaml_strict.pyalso fails to import locally for want ofruamel, likewise pre-existing and unrelated.)