{"id":"error-boundaries-are-module-local","text":"Error contracts are defined per-module with no cross-cutting convention — payment splits exceptions from return codes, the KV store raises generic exceptions, click aggregation uses boolean returns, and routing collapses all failures to None — making each module boundary an error translation boundary that callers must learn independently.","truth_value":"IN","source":"","source_url":"","source_hash":"","justifications":[{"type":"SL","antecedents":["error-signaling-lacks-codebase-convention","none-return-collapses-distinct-failure-modes"],"outlist":[],"label":"absence of codebase-wide error convention plus None-return collapse means every module defines its own failure vocabulary"}],"dependents":["operational-conventions-are-module-scoped","safety-is-local-and-permissive"],"metadata":{"last_reviewed":"2026-06-06T06:26:57","review_result":"pass"},"created_at":"","updated_at":"","reviewed_at":"","verified_at":"","retracted_at":"","explanation":{"steps":[{"node":"error-boundaries-are-module-local","truth_value":"IN","reason":"SL justification valid","antecedents":["error-signaling-lacks-codebase-convention","none-return-collapses-distinct-failure-modes"],"label":"absence of codebase-wide error convention plus None-return collapse means every module defines its own failure vocabulary"},{"node":"error-signaling-lacks-codebase-convention","truth_value":"IN","reason":"SL justification valid","antecedents":["payment-error-strategy-split","kv-store-quorum-exception","click-aggregator-return-value-signaling","wallet-no-exceptions-caught"],"label":"Four distinct error signaling strategies across four modules with no shared pattern or base exception type"},{"node":"payment-error-strategy-split","truth_value":"IN","reason":"premise"},{"node":"kv-store-quorum-exception","truth_value":"IN","reason":"premise"},{"node":"click-aggregator-return-value-signaling","truth_value":"IN","reason":"premise"},{"node":"wallet-no-exceptions-caught","truth_value":"IN","reason":"premise"},{"node":"none-return-collapses-distinct-failure-modes","truth_value":"IN","reason":"SL justification valid","antecedents":["s3-get-returns-none-for-missing","maps-no-exceptions-none-returns"],"label":"S3 returns None matching HTTP 404 semantics; maps returns None for missing nodes, unreachable targets, and unknown geocodes — both APIs eliminate the need for exception handling but prevent callers from distinguishing \"not found\" from \"error computing result\""},{"node":"s3-get-returns-none-for-missing","truth_value":"IN","reason":"premise"},{"node":"maps-no-exceptions-none-returns","truth_value":"IN","reason":"premise"}]}}