Skip to content

Dependency Governance

Dependency governance is really boundary governance under another name.

For agentic-proteins, a dependency is acceptable only when it supports compatibility proof or retirement work without binding modern runtime ownership more tightly to the bridge.

Governance Model

flowchart TB
    change["new or changed dependency"]
    bridge{"serves bridge or migration purpose?"}
    runtime{"runtime should own this instead?"}
    retirement{"dependency keeps retirement pressure explicit?"}
    accept["dependency is governable"]

    change --> bridge
    bridge -->|yes| runtime
    bridge -->|no| reject1["reject or relocate"]
    runtime -->|no| retirement
    runtime -->|yes| reject2["move to runtime ownership"]
    retirement -->|yes| accept
    retirement -->|no| reject3["reject or isolate"]

The bridge may depend on what is necessary to forward and validate historical behavior. It must not become the installation route for a capability owned by Runtime or another modern package.

Dependency decision record

Question Acceptable evidence Refuse or relocate when
Which compatibility surface needs it? named import, CLI, HTTP, state, or replay contract justification is general convenience
Why can the canonical owner not provide it? dependency is required only to decode or forward a historical surface the dependency implements current execution or science
What installation cost does it add? lock diff, wheel impact, optional-extra posture, and vulnerability review every bridge user inherits an unrelated heavy dependency
How does retirement remove it? caller ledger entry and deletion condition no path exists to remove the dependency with the bridge
Does it reverse dependency direction? package graph remains canonical-owner outward a modern package must import the bridge

A compatibility-only dependency has a deletion condition. Without one, the change is an ownership expansion rather than bridge maintenance.

Review rules

  • require a migration or compatibility contract, not a feature rationale;
  • keep modern packages independent of agentic-proteins;
  • place execution providers, state engines, and protocol implementations in Runtime;
  • prefer optional decoding support when only a subset of historical callers needs the dependency;
  • pair removal of the last caller with removal of its bridge-only dependency.

First proof route

Inspect the dependency declaration and lock change, then trace its imports from packages/agentic-proteins/src/agentic_proteins/. Confirm the dependency is exercised by compatibility tests and absent from reverse imports in canonical packages. Security and license checks remain mandatory even when the dependency is short-lived.

Design Pressure

The common drift is a helper that reduces forwarding code while quietly creating a new reason to install the bridge. The durable response is to move the capability to its canonical owner and keep only the narrow adapter.