Compatibility foundations¶
agentic-proteins preserves named interfaces required by historical callers
while bijux-proteomics-runtime owns execution behavior. The boundary is
deliberately asymmetric: the bridge may forward to canonical packages, but
canonical packages never depend on the bridge.
flowchart LR
C["historical caller"] --> B["agentic-proteins bridge"]
B --> R["Runtime execution owner"]
B --> S["Core scientific report owner"]
R --> E["equivalence evidence"]
S --> E
E --> M["canonical caller"]
Contract routes¶
| Question | Guide | Decision |
|---|---|---|
| Why does the distribution exist? | Package overview | bridge required by a supported historical caller |
| Is a surface in scope? | Scope and non-goals | preserve, migrate, or reject |
| Where must behavior change? | Ownership boundary | bridge or canonical owner |
| Which behaviors may the bridge perform? | Capability map | forward, translate, warn, or report |
| Which packages may it depend on? | Dependencies and adjacencies | allowed one-way dependency |
| What permits a surface to disappear? | Lifecycle overview | caller evidence and removal gate |
The compatibility contract is authoritative when a convenient local change conflicts with the bridge boundary.
Owned surfaces¶
The package owns compatibility behavior for historical:
agentic_proteinsPython imports;agentic-proteinscommand invocation;- HTTP module paths and route assembly;
- configuration and state translation required for canonical execution;
- migration diagnostics and explicit failure when equivalence is unavailable.
It does not own providers, run state machines, replay semantics, scientific reports, benchmarks, evidence interpretation, or new feature design. Those changes begin in the canonical package and flow through the bridge only when a declared compatibility contract requires forwarding.
Compatibility decisions¶
flowchart TD
P["proposed bridge change"] --> H{"historical caller requires it?"}
H -->|no| X["implement in canonical owner"]
H -->|yes| O{"canonical owner exists?"}
O -->|yes| F["forward or translate narrowly"]
O -->|no| R["reject or record migration blocker"]
F --> T["prove surface equivalence"]
A bridge change is justified by a concrete caller contract, not by the possibility that somebody might use it. Compatibility code remains narrow, observable, and removable once its declared consumers have migrated.
Proof obligations¶
| Surface | Minimum proof |
|---|---|
| Python import | legacy import resolves to the declared canonical object or an explicit removal error |
| CLI | command, arguments, exit status, standard output, standard error, and artifacts are compared |
| HTTP | route, request, response, status, and error contracts are compared |
| configuration | accepted keys, defaults, rejection behavior, and translation are compared |
| persisted state | schema identity, checkpoint loading, and replay behavior are compared |
Package tests protect local forwarding. Repository migration validation checks the complete ledger and cross-package equivalence. Both are required because a bridge can import successfully while still changing operational behavior.
Language and change rules¶
The domain language distinguishes bridge, canonical owner, forwarder, translation, equivalence, and removal. The change principles apply those terms to implementation and release decisions. Repository fit explains how the distribution participates in the wider package family without becoming a second runtime.
For canonical execution behavior, continue to the Runtime handbook. For repository migration gates, continue to runtime migration validation.