refactor(campaign): finish Proposer migration — uniform optimize-a-surface DX#278
Merged
Conversation
…rface DX
Every optimizer is now a factory `xProposer(opts): SurfaceProposer` exported
from /campaign and drivable by `selfImprove({ proposer })`. gepaProposer and
skillOptProposer already conform and export from /campaign (and gepaProposer is
re-exported from /contract). This resolves the remaining name collision: the
behavior-fuzzing `Proposer<S>` (fuzz/types) is renamed `MutationProposer<S>` so
`SurfaceProposer` is unambiguously THE optimization proposer. A deprecated
`Proposer<S>` alias keeps the public ./fuzz export back-compatible.
Additive + alias-only on the public surface → minor bump 0.96.5 -> 0.97.0
(package.json + clients/python/pyproject.toml + __init__.py together).
tangletools
approved these changes
Jun 22, 2026
tangletools
left a comment
Contributor
There was a problem hiding this comment.
✅ Auto-approved PR — 6e508ab1
Blanket team auto-approval is enabled for this reviewer service.
The full PR reviewer audit still runs separately and will publish findings if it detects issues.
tangletools · auto-approval · reason: blanket_auto_approve · 2026-06-22T22:31:39Z
drewstone
added a commit
that referenced
this pull request
Jun 22, 2026
The fuzz proposer is `MutationProposer<S>`. PR #278 renamed it and kept a `@deprecated export type Proposer<S> = MutationProposer<S>` back-compat alias; the house rule forbids compat shims, so remove it head-on. The alias and its `./fuzz` barrel re-export are deleted — `MutationProposer` is the only name. Removing a published export is breaking on 0.x: minor bump to 0.98.0 (npm + PyPI version trio kept in lock-step).
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
Finishes the Proposer migration so the optimize-a-surface DX is uniform: every optimizer is a factory
xProposer(opts): SurfaceProposerexported from/campaign, drivable byselfImprove({ proposer }).The two flagship proposers already conform on
main(shipped in83505fb):skillOptProposer(opts): SurfaceProposer— factory atsrc/campaign/proposers/skill-opt.ts, wrapsapplySkillPatch/runSkillOptinternals behind the contract (also exposes the patch-nativeproposePatchesused by therunSkillOptpreset). Exported from/campaign.gepaProposer— atsrc/campaign/proposers/gepa.ts, exported from/campaignAND re-exported from/contract.This PR closes the last gap — the
Proposername collision: the behavior-fuzzingProposer<S>(src/fuzz/types.ts) is a different concept from the optimizationSurfaceProposer. Renamed it toMutationProposer<S>(matches its sole value,mutationProposer) soSurfaceProposeris unambiguously THE optimization proposer. A@deprecated Proposer<S>alias keeps the public./fuzzexport back-compatible.Verified
pnpm run typecheckclean,pnpm run buildclean,pnpm run lint0 errors.pnpm test: 247 files, 2533 passed, 2 skipped.dist/campaign:import { gepaProposer, skillOptProposer } from "@tangle-network/agent-eval/campaign"resolves to real functions; both produce objects satisfyingSurfaceProposer(.kindgepa/skill-opt,.propose);skillOptProposerexposesproposePatches../fuzz.d.tsstill exports bothMutationProposerand the deprecatedProposeralias.Version
Additive exports + alias-only on the public surface → minor bump
0.96.5→0.97.0(package.json +clients/python/pyproject.toml+__init__.pytogether).