22
33## Product boundary
44
5- MRMA v0.4.3 has one confirmatory engine and one shared network policy kernel. The CLI parses input,
5+ MRMA v0.4.4 has one confirmatory engine and one shared network policy kernel. The CLI parses input,
66selects workflow policy, and renders output. It does not own transport authorization decisions.
77
88``` text
@@ -14,7 +14,9 @@ ExperimentPlan + ComparisonPolicy
1414 v
1515ExperimentOracle
1616 | authorization -> AuthorizedRequestContext
17- | budget -> BudgetLease
17+ | prepare -> opaque, adapter-sealed request capability
18+ | budget -> BudgetLease for the prepared representation
19+ | revalidate -> authorization + prepared capability
1820 | journal -> EvidenceContext
1921 |
2022 v
@@ -26,10 +28,19 @@ CapturedResponse -> experiment analysis -> v8 evidence -> bundle
2628
2729## Enforced boundaries
2830
29- ` SemanticHttpAdapter.send() ` requires all three unforgeable-in-normal-use capability objects:
30- an accepted ` AuthorizedRequestContext ` , an active ` BudgetLease ` , and an ` EvidenceContext ` . The
31- adapter revalidates context identity, records ` ATTEMPT_STARTED ` , performs one semantic HTTP
32- attempt, commits actual bounded cost, and records completion. It cannot be called with only a URL.
31+ ` SemanticHttpAdapter.prepare() ` builds the final HTTPX request and returns an opaque capability with
32+ safe accounting metadata; the mutable HTTPX object is not exported. The capability is sealed with
33+ an adapter-local key over the authorization identity, arm, round, accounting values, mutation
34+ delta, and a digest of the final method, URL, ordered raw fields, buffered content and stream,
35+ extensions, effective ` Host ` , and represented size.
36+
37+ ` SemanticHttpAdapter.send_prepared() ` requires that capability plus an accepted
38+ ` AuthorizedRequestContext ` , active ` BudgetLease ` , and matching ` EvidenceContext ` . Immediately before
39+ network I/O it recomputes the request digest, verifies the adapter seal, repeats method/URL/` Host `
40+ authorization checks, and compares actual body and representation sizes with the reservation. A
41+ changed, stale-session, or already-consumed capability fails before ` ATTEMPT_STARTED ` . ` send() ` is
42+ the single-call convenience path through the same prepare and send-prepared boundary; neither
43+ method can be called with only a URL.
3344
3445` ExperimentOracle ` owns retries, redirect traversal, setup/reset hooks, schedules, observations,
3546and partial-run conversion. One observation session owns redirect/retry cookie state and its
@@ -41,7 +52,8 @@ HTTPX-built request so eligible cookie-jar state cannot bypass raw-field filteri
4152
4253- ` mrma.engine ` : typed plan and confirmatory oracle.
4354- ` mrma.policy ` : authorization, budgets, comparison, method risk, and protocol interfaces.
44- - ` mrma.transport ` : semantic HTTP adapter and request-byte estimator.
55+ - ` mrma.transport ` : semantic HTTP adapter, opaque prepared capability, and request-byte estimator.
56+ The capability preserves the public type name but does not expose a public HTTPX request field.
4557- ` mrma.evidence ` : append-only journal, v8 model, schema validation, bundles, and verification.
4658- ` mrma.workflows ` : candidate manifests and guarded legacy exploratory dispatch.
4759- ` mrma.core ` : comparison, statistical experiment, HTTP semantics, request model, and retained
0 commit comments