Skip to content

Change validation

Classify every bridge change as preserving, narrowing, or retiring a named compatibility promise. A change that introduces bridge-owned behavior is mis-scoped even when every legacy test passes.

Validation matrix

Change Focused validation Wider review
forwarded export object identity, import path, __all__, unavailable dependency canonical Runtime public API and external caller
CLI command arguments, defaults, exit codes, stdout/stderr, errors, artifacts Runtime CLI and migration guidance
HTTP endpoint request schema, status, response, middleware, failure mapping Runtime HTTP contract and clients
execution or orchestration alias state transitions, resume, cancellation, artifacts, telemetry Runtime lifecycle and persistence
provider or tool capability selection, dependency isolation, timeout, error, fallback Runtime provider policy and optional extras
compatibility removal caller inventory, replacement proof, release metadata, absence test retirement budget and public migration record

Validation decision

flowchart TD
    E["bridge edit"] --> P["name promise and caller"]
    P --> O{"new behavior owner?"}
    O -->|bridge| M["mis-scoped: move policy to Runtime"]
    O -->|Runtime| C["run direct comparison"]
    C --> D{"divergence?"}
    D -->|unexplained| F["failed validation"]
    D -->|none or declared narrowing| R["check migration and retirement evidence"]
    R --> V["validated change"]

Inspect both the legacy result and the canonical result. Compare object identity where promised; otherwise compare public fields, ordering, terminal state, errors, warnings, and artifacts. Include at least one negative path.

Required record

State the compatibility promise, remaining caller, Runtime owner, comparison method, negative case, exact checks, and effect on retirement. For a narrowed or removed surface, state the replacement and evidence that affected callers can move. “Still works” is not a validation result.