RePERS v0.2.0 — Slim + Pluggable (BREAKING)
The first breaking release in the v0.2 line. Turns RePERS from a 30+-verb
harness with hardcoded logic into a 6-verb pipeline with one plugin slot
per stage plus a deterministic per-task router that decides which
slice fires.
Why this is a major release
v0.1.x was right about the philosophy (Research → Plan → Execute → Review
→ Ship) but wrong about the surface — too many META verbs that only the
maintainers of RePERS itself ever called. v0.2 cuts that surface and makes
the remaining one substitution-friendly: any stage's implementation can
be swapped without forking the harness.
What changed
New — slim + pluggable architecture
.repers/contracts/— 7 versioned JSON Schemas, one per pipeline
stage. The stable shapes that flow between R-P-E-R-S stages..repers/plugins/— conventionplugins/<verb>/<name>.py. Ships
withdefault.pyfor each verb (wrapping the existing implementation).
Select alternates viaREPERS_PLUGIN_<VERB>=<name>env var..repers/scripts/plugin_loader.py— discovers + imports plugin
module by(verb, name). Legacy fallback when no plugin folder exists.- All 6 pipeline verbs (
route,preflight,plan,dispatch,review,
shipping) resolve via the plugin loader.
Breaking — 4 CLI verbs removed
| Removed verb | Removed script |
|---|---|
objective-audit |
objective_audit.py |
continue |
continuation_runner.py |
snapshot-freshness |
snapshot_freshness.py |
open-source-benchmark |
open_source_benchmark.py |
These were specific to RePERS's own v0.1 publication objective and had no
value to receivers.
Breaking — state slimmed
- Removed
state.objective.{complete,blocking_incomplete}andstate.next.*fields - Removed
--deepand--objectiveCLI flags - Output is now git / package / capabilities only
Breaking — registry trimmed 25 → 20
Removed: objective-audit, continuation-runner, state-report (meta
entry), snapshot-freshness, open-source-benchmark.
Breaking — release-pack artifact set trimmed
REQUIRED_RELEASE_PACK_ARTIFACTS no longer includes
open_source_benchmark_json / objective_audit / continuation_markdown.
Migration for receivers
If your CI / scripts call removed verbs:
| Was | Do this |
|---|---|
repers.py objective-audit |
drop — no replacement, was internal |
repers.py continue |
drop |
repers.py snapshot-freshness |
drop, use git status dist/ |
repers.py open-source-benchmark |
drop |
repers.py state --deep --objective "..." |
repers.py state --json (slim only) |
reads of state.objective.complete |
gone — write a plugins/state/<name>.py if you need a richer signal |
Substitution path (the new product)
# write a custom router (LLM-based) in 1 file:
cat > .repers/plugins/route/llm.py <<'EOF'
NAME = "llm"
def route(task, repo_root, est_files=None, **kw):
# call your LLM, return a repers.router.v1-conforming dict
...
def format_human(payload): return payload["recommendation"]
EOF
# select it:
REPERS_PLUGIN_ROUTE=llm python3 .repers/scripts/repers.py route --task "..." --jsonSame pattern for preflight, plan, dispatch, review, ship.
Stats
- Capabilities: 25 → 20
- Installed files: 59 → 55
- Scripts: 25 → 21 (4 META deleted)
- CLI verbs: 32 → 28
- Plugin slots: 0 → 6
- Stage contracts as files: 0 → 7
Assets
repers-0.2.0.zip— installable runtime archive (775 KB)repers-release-pack.zip— transferable evidence bundle (781 KB)repers-verify-all.json— local-gate evidence
What's next (v0.3)
See ROADMAP.md. Headline items: .repers/config.yaml for pinning
plugins per repo, agent-fixture proving non-Claude vendors plug in
end-to-end, optional jsonschema validation of plugin outputs.