The lifecycle defense: an edge traffic sensor, a per-credential abuse gate and the identity boundary's own attestation. Compiled in and mounted, SHADOW per org — edge.Store.Mode returns live only on an exact "live" match, is absent from the inherited base, and is never set here, so nothing is armed by landing it. /v1/risk stays unrouted; /v1/ml is untouched. Four conflicts, each resolved on its merits rather than by side: middleware_identity.go — an import collision where both sides were right. main added namespace.Sanitize (OrgHasUnsafeRune, the cross-org fold refusal), the branch added principal.Mint. Both symbols are live in the merged body, so both imports stay; either blanket resolution drops a defense and the build. middleware_ratelimit.go — the branch's code, main's reasoning. The branch tests the ROUTER's path (RoutePath + underPrefix) instead of the raw spelling, which is what stops /v1/billing/../v1/ai/chat from prefix-matching its way into a rate-limit exemption. Its rationale, though, describes an in-process HTTP self-dispatch that main has since replaced with a typed ZAP op, so the comment kept is main's, which is the one that is true here. plugin/o11y/main.go — complementary, not competing. The branch installs the identity boundary and the abuse gate in this hand-written main; main added cloud.ErrorHandler so a propagated refusal renders as its own status instead of 500. Those two middlewares are precisely what emits refusals, so the handler matters more after the branch lands, not less. Both kept. openapi/floor.json — the pointwise maximum, which is what Floor.Raise means: taking the lower side would silently undo the other's ratchet. Then regenerated from source, so the regeneration is the truth. Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2.7 MiB
2.7 MiB