refactor: de-vendor foreign services and retire claim-forge + cicd-hyper-a - #58
Merged
Conversation
…per-a
Removes three services that should never have been built/published from OPSM,
and stops OPSM publishing any satellite images. GitHub linked their GHCR
packages to OPSM because docker/metadata-action stamps
org.opencontainers.image.source with the building repo; each real owner now
publishes its own correctly-attributed image instead.
De-vendor (delete vendored sources + all references):
- claim-forge: private code that should not have been public.
- cicd-hyper-a: retired (the live project is the separate `hypatia` repo);
removed entirely from OPSM, NOT integrated.
- cerro-torre: belongs to hyperpolymath/stapeln and is not for release.
Deleted services/{claim-forge,cicd-hyper-a,cerro-torre}/ and retired
.github/workflows/trust-pipeline-images.yml (cerro-torre was its last matrix
entry, so OPSM now publishes no satellite images at all).
Elixir core retirement (claim_forge + cicd_hyper_a):
- Deleted the ClaimForge and CicdHyperA client modules.
- config.ex: dropped both service fields, default ports (7001, 7004), the
parser clauses and example config.
- types.ex: removed both OpsmConfig fields, the cicd publish/federation types
(SyncState, FederationStatus, CicdPublishRequest/Response) and the claim-forge
types (claim_type, ClaimForgeRequest/Response); dropped :claim_forge from the
attestation_type union (kept :sigstore | :in_toto and AttestationRef, still
used by ResolvedPackage and the SLSA check).
- wiring.ex: removed the claim-forge attestation stage and the cicd-hyper-a
publish stage; run_publish now does ingest -> license (palimpsest) ->
sustainability (oikos) -> validate -> checky-monkey.
- events.ex: genericised the federation event dispatcher off CicdHyperA (it only
ever simulated a response).
- trust/pipeline.ex: dropped the claim-forge SPDX attestation step from
verify_for_publish; errors.ex: dropped the two *_unavailable severities;
cli.ex/container.ex: doc/help text.
- Updated config_test, pipeline_test, e2e_test, trust_pipeline_test and the
live-service e2e test accordingly.
Proven locally: `mix compile --warnings-as-errors` is clean for all changed
modules and `mix test` is green (the sole failure is an unrelated, pre-existing
network-dependent registry test that hits api.github.com).
Also scrubbed the references from the ReScript/OCaml CLI mirrors (cli/,
lib/ocaml/), opsm.toml, the groove manifest, stapeln.toml, the selur-compose /
k8s deployment files, the trust-pipeline-e2e workflow, the A2ML metadata
(STATE/ECOSYSTEM/META), the mobile controller, and the docs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012kWck3NjBo5orHKAXMHm5W
hyperpolymath
marked this pull request as ready for review
June 26, 2026 22:37
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
OPSM used to build 9 satellite service images and push them to
ghcr.io/hyperpolymath/<svc>. Becausedocker/metadata-actionstampsorg.opencontainers.image.sourcewith the building repo, GitHub linked all of those GHCR packages to OPSM — even the ones that belong to other repos or are private/dead. This PR removes three services that should never have been built/published here and stops OPSM publishing any satellite images; each real owner now publishes its own correctly-attributed image (separate PRs in stapeln, svalinn, checky-monkey, palimpsest-license, oikosbot).This combines the de-vendor, the Elixir core retirement, and the cerro-torre removal into one coherent change (one branch per repo).
De-vendor (delete vendored sources + every reference)
hypatiarepo) — removed entirely, not integratedhyperpolymath/stapeln, not for release — deletedservices/{claim-forge,cicd-hyper-a,cerro-torre}/are deleted and.github/workflows/trust-pipeline-images.ymlis retired (cerro-torre was its last matrix entry → OPSM now publishes no satellite images at all).Elixir core retirement (
claim_forge+cicd_hyper_a)ClaimForgeandCicdHyperAclient modules.config.ex: dropped both service fields, default ports (7001,7004), parser clauses and example config.types.ex: removed bothOpsmConfigfields, the cicd publish/federation types (SyncState,FederationStatus,CicdPublishRequest/Response) and the claim-forge types (claim_type,ClaimForgeRequest/Response); dropped:claim_forgefromattestation_type(kept:sigstore | :in_totoandAttestationRef, still used byResolvedPackage+ the SLSA check).wiring.ex: removed the claim-forge attestation stage and the cicd-hyper-a publish stage;run_publishis nowingest → license (palimpsest) → sustainability (oikos) → validate → checky-monkey.events.ex: genericised the federation event dispatcher offCicdHyperA(it only ever simulated a response).trust/pipeline.ex: dropped the claim-forge SPDX step fromverify_for_publish;errors.ex: dropped the two*_unavailableseverities;cli.ex/container.ex: doc/help text.config_test,pipeline_test,e2e_test,trust_pipeline_testand the live-service e2e test.Proof:
mix compile --warnings-as-errorsis clean for all changed modules, andmix testis green — the only failure is an unrelated, pre-existing network test (hyperpolymath_forge_test) that reachesapi.github.comand gets a401in a sandbox with no token.Also scrubbed
ReScript/OCaml CLI mirrors (
cli/,lib/ocaml/),opsm.toml, the groove manifest,stapeln.toml,selur-compose.yml+deploy/compose/k8s, thetrust-pipeline-e2eworkflow, the A2ML metadata (STATE/ECOSYSTEM/META),opsm_mobile/api/package_controller.ex, and the docs. Verified: no residual references remain (only a couple of explicit "service removed" comments + a CHANGELOG entry);opsm.toml/stapeln.tomlparse as TOML and the groove manifest parses as JSON.🤖 Generated with Claude Code
https://claude.ai/code/session_012kWck3NjBo5orHKAXMHm5W
Generated by Claude Code