{
 "_law": "External Positioning Architect Mandate 2026-09-04 (decision 133): every contradiction in the public estate is recorded here with claim_a, claim_b, sources, timestamps, effective dates, severity, authoritative resolver, fix and regression test. Nobody hand-edits around a contradiction; the resolver is fixed and the record stays as history.",
 "generated_at": "2026-09-04T20:48:14.142987+00:00",
 "maintained_by": "steward session fable51-chat-2026-09-04-positioning; live regression: organism/auto_guards/truth_contradiction_crawler.py -> /data/truth_contradictions.json",
 "entries": [
  {
   "id": "C133-01",
   "severity": "CRITICAL",
   "class": "temporal_fee_drift",
   "claim_a": "astranl-facts.json economics.coordination_fee_current = 0.0",
   "claim_b": "same file: 0% promotion ended 2026-08-31, 1% from 2026-09-01; /coordination/fee returned 1.0 with consistency ok=false",
   "sources": [
    "/.well-known/astranl-facts.json",
    "/coordination/fee"
   ],
   "observed_at": "2026-09-04T10:36:00Z",
   "effective_dates": {
    "promo": "2026-07-24..2026-08-31",
    "standard": "2026-09-01.."
   },
   "authoritative_resolver": "core/temporal_truth.py (TemporalTruthResolver, calendar Europe/Amsterdam)",
   "fix": "scripts/gen_agent_port.py writes economics as a derived block with fee_schedule; router/coordination_universe.py fee_current_pct delegates to the resolver; no stored scalar is authoritative",
   "regression_test": "crawler rule D1 fee_drift / fee_scalar_not_derived; core/temporal_truth.py --selftest (boundary 2026-08-31/09-01 and tz)",
   "status": "RESOLVED",
   "verified_at": "2026-09-04T11:05:00Z",
   "evidence": "/coordination/fee consistency ok=true; facts economics.fee_resolved_as_of=2026-09-04"
  },
  {
   "id": "C133-02",
   "severity": "HIGH",
   "class": "payment_custody_wording",
   "claim_a": "/press, /how, /prijzen: the client pays the provider directly; /why: payment is held by Stripe and released on verified delivery",
   "claim_b": "/.well-known/payment-truth.json + commitments.json: card authorisation on the executor's own Stripe account (destination charge), captured only after the principal confirms the agreed proof; AstraNL never holds funds, takes an application fee",
   "sources": [
    "/press/",
    "/how/",
    "/why/",
    "/prijzen/",
    "/welcome/ JSON-LD",
    "/.well-known/payment-truth.json"
   ],
   "observed_at": "2026-09-04T10:50:00Z",
   "authoritative_resolver": "core/payment_truth_contract.py PLAIN_LANGUAGE (en, nl)",
   "fix": "press renders the contract sentence; how/why/prijzen/welcome sentences replaced by contract-derived wording in 10 languages; forbidden phrases scanned",
   "regression_test": "crawler rule D2 payment_custody_conflict",
   "status": "RESOLVED_ON_CORE_SURFACES",
   "verified_at": "2026-09-04T12:24:00Z",
   "residual": "long tail: website/nodig/*.html generated city pages and dated news posts still carry old wording; owner: the generator that renders nodig pages (must read plain_language); news posts are dated history and are not rewritten"
  },
  {
   "id": "C133-03",
   "severity": "CRITICAL",
   "class": "public_api_boundary",
   "claim_a": "/openapi.json info: internal, admin and payment endpoints are not listed",
   "claim_b": "the same document listed /system/*, /steward/relay/*, /api/security/*, /api/coordination/grammar/steward/*, /capabilities/execute with x-astranl-principal anonymous; 1054 paths",
   "sources": [
    "/openapi.json"
   ],
   "observed_at": "2026-09-04T10:40:00Z",
   "authoritative_resolver": "router/main.py PUBLIC_SPEC_FORBIDDEN_PREFIXES/TOKENS + scope pruning, fail-closed 503",
   "fix": "allowlist-bounded public tier (825 paths), /.well-known/public-api-allowlist.json published, mutating ops without metadata fail the build",
   "regression_test": "crawler rule D4 public_api_leak",
   "status": "RESOLVED",
   "verified_at": "2026-09-04T11:17:00Z"
  },
  {
   "id": "C133-04",
   "severity": "CRITICAL",
   "class": "runtime_boundary",
   "claim_a": "internal organ reads are internal",
   "claim_b": "/system/dashboard (revenue figures), /system/status, /system/opportunities, /api/coordination/grammar/steward/leases answered 200 anonymously from outside",
   "sources": [
    "external GET probes 2026-09-04T10:41:00Z"
   ],
   "authoritative_resolver": "router/main.py _INTERNAL_READ_PATTERNS in SecurityMiddleware",
   "fix": "operator or agent credential required on /system, /api/system, /steward, /api/coordination/grammar/steward",
   "regression_test": "crawler rule D5 runtime_internal_anonymous_200",
   "status": "RESOLVED",
   "verified_at": "2026-09-04T12:25:00Z",
   "evidence": "all four probes now 401",
   "note": "the /system/dashboard revenue figure (200 EUR) was visible to anyone while the press page publishes settled=0; whether that figure is synthetic is a separate truth check, recorded as C133-09"
  },
  {
   "id": "C133-05",
   "severity": "HIGH",
   "class": "machine_reader_contamination",
   "claim_a": "llms.txt canon block: 1% fee, one identity",
   "claim_b": "52 KB of stale reference text below the canon with 0% fee language, Proof-of-Reality Protocol identity and historical endpoints",
   "sources": [
    "/llms.txt"
   ],
   "authoritative_resolver": "scripts/gen_agent_port.py render_llms_txt",
   "fix": "llms.txt is canon-only (4.6 KB); history archived once at /archive/llms-history-2026-09-04.txt",
   "regression_test": "crawler rule D6 machine_reader_contamination",
   "status": "RESOLVED",
   "verified_at": "2026-09-04T11:06:00Z"
  },
  {
   "id": "C133-06",
   "severity": "MEDIUM",
   "class": "compliance_adjective",
   "claim_a": "/for-providers GDPR-compliant badge; /capabilities GDPR-compliant; /why EU AI Act compliant by design, EU-compliant invoicing, insurance pass-through",
   "claim_b": "no scoped legal assessment backs a blanket compliance label; commitments.json forbids the word insurance",
   "sources": [
    "/for-providers/",
    "/capabilities/",
    "/why/"
   ],
   "authoritative_resolver": "control statements with scope and basis (privacy page, Article 50 disclosure, evidence log)",
   "fix": "adjectives replaced by control statements on the three surfaces",
   "regression_test": "crawler rule D3 compliance_adjective_unscoped + forbidden_word",
   "status": "RESOLVED_ON_CORE_SURFACES",
   "verified_at": "2026-09-04T12:24:00Z",
   "residual": "case-study and research pages under /case-study*, /research/*, /insights/* still use the adjective in editorial context; ledger owner: content generator review"
  },
  {
   "id": "C133-07",
   "severity": "MEDIUM",
   "class": "mcp_transport_drift",
   "claim_a": "/mcp/ root: Streamable HTTP recommended, SSE deprecated",
   "claim_b": "/why named the SSE endpoint as the integration path; cabinet pages reference /mcp/sse",
   "sources": [
    "/why/",
    "website/cabinet/*"
   ],
   "authoritative_resolver": "core/temporal_truth.py rule mcp_transport_sse_status = DEPRECATED_COMPATIBILITY_ONLY (2026-07-28)",
   "fix": "/why names /mcp/streamable; 218 static pages (JSON-LD featureList and links) rewritten to /mcp/streamable via recorded change; static website has 0 mcp/sse references; deprecation stays on the /mcp/ root JSON",
   "regression_test": "crawler rule deprecated_transport_as_current",
   "status": "RESOLVED",
   "residual": "sunset date for /mcp/sse not yet set by the founder (temporal_truth rule mcp_transport_sse_status)",
   "verified_at": "2026-09-04T13:05:00Z"
  },
  {
   "id": "C133-08",
   "severity": "HIGH",
   "class": "identity_fragmentation",
   "claim_a": "facts one_line: coordination protocol; press: proof-oriented coordination protocol; llms tail: Proof-of-Reality Protocol; homepage: local professional finder framing",
   "claim_b": "mandate: one identity - neutral coordination and evidence layer between intent and real-world execution",
   "authoritative_resolver": "facts.organisation.one_line + canon.identity_one_line rendered by scripts/gen_agent_port.py",
   "fix": "facts, canon, llms.txt, press and welcome JSON-LD now carry the one identity",
   "regression_test": "to add: crawler rule differing_one_line_identity",
   "status": "PARTIAL",
   "residual": "audience doors /business /professionals /developers /intelligence /labs do not exist; /partners redirects; home above-the-fold not yet rebuilt"
  },
  {
   "id": "C133-09",
   "severity": "HIGH",
   "class": "counter_truth",
   "claim_a": "/system/dashboard revenue total_revenue_eur 200.0, total_astranl_fee_eur 2.0",
   "claim_b": "press and facts: paid coordination transactions completed so far 0",
   "sources": [
    "/system/dashboard (now credentialed)",
    "/press/"
   ],
   "status": "RESOLVED",
   "required_check": "determine whether the dashboard figure is synthetic or a real settlement; if real, the honest-zero counters are wrong; if synthetic, the dashboard must label it",
   "verified_at": "2026-09-04T13:05:00Z",
   "authoritative_resolver": "core/revenue_tracker.py get_revenue_dashboard REAL rule",
   "fix": "only payment_completed events with an external payment_ref count as revenue; the two 2026-08-25 unverified rows (200 EUR) are reported as unverified_events, not revenue; dashboard now total_revenue_eur 0",
   "regression_test": "to add: crawler rule dashboard_vs_press counters",
   "evidence": "get_revenue_dashboard -> total 0, unverified 2 / 200 EUR not counted; API restarted through the gateway"
  },
  {
   "id": "C133-10",
   "severity": "HIGH",
   "class": "legacy_generator_hazard",
   "claim_a": "runtime/protocol_reveal_build.py is the press generator",
   "claim_b": "its full main() fails on the current welcome page (door pattern miss) after injecting a stale 160-line block into /welcome/; reverted from the pre-run snapshot",
   "status": "RESOLVED",
   "fix_required": "split build_press into the canon render pipeline; retire the welcome injection passes",
   "verified_at": "2026-09-04T13:05:00Z",
   "fix": "protocol_reveal_build.py default run renders only build_press(); legacy welcome passes require --all-legacy-passes; scripts/gen_agent_port.py renders the press page on every canon render; verified welcome untouched after a run"
  },
  {
   "id": "C133-11",
   "severity": "MEDIUM",
   "class": "idempotency_metadata_debt",
   "claim_a": "mandate: every mutating public operation carries auth principal and idempotency behaviour",
   "claim_b": "295 anonymous POST operations are documented truthfully as not idempotent (Article 91 action_status guards replays at runtime but the spec cannot see per-route)",
   "sources": [
    "/.well-known/public-api-allowlist.json anonymous_non_idempotent_writes"
   ],
   "status": "OPEN",
   "fix_required": "retire operation by operation: either an idempotency key contract or removal from the anonymous tier"
  },
  {
   "id": "E133-01",
   "severity": "CRITICAL",
   "class": "external_epoch_split",
   "plane": "INDEPENDENT",
   "claim_a": "independent observer received astranl-facts.json with economics.coordination_fee_current 0.0 and the old one_line",
   "claim_b": "origin at that moment already published the derived block (11:05) and the new identity",
   "root_cause": "observer-side cache of a document that the API served without Cache-Control, ETag or epoch (no freshness policy) plus residual hand-written sub-blocks (coordination_scope, technics_module, identity) that still carried 0% prose inside the current file",
   "fix": "sub-blocks re-rendered from the resolver; canon_epoch field in facts; CanonEpochMiddleware adds X-AstraNL-Canon-Epoch, X-AstraNL-Canon-SHA256 and Cache-Control max-age=300 must-revalidate on every canonical machine document",
   "regression_test": "organism/external_convergence.py markers + receipts",
   "status": "RESOLVED_AT_ORIGIN_AND_PUBLIC_FETCH",
   "independent": "observer fetch 13:00 CURRENT (anthropic-web-fetch)",
   "verified_at": "2026-09-04T13:25:00Z"
  },
  {
   "id": "E133-02",
   "severity": "HIGH",
   "class": "machine_reader_contamination",
   "plane": "INDEPENDENT",
   "claim_a": "observer received llms.txt with the stale tail under an ignore-below instruction",
   "claim_b": "origin llms.txt canon-only since 11:06",
   "root_cause": "observer copy predates the render",
   "status": "EXTERNALLY_CONVERGED",
   "independent": "observer fetch 13:01 CURRENT",
   "verified_at": "2026-09-04T13:25:00Z"
  },
  {
   "id": "E133-03",
   "severity": "CRITICAL",
   "class": "discovery_manifest_stale_identity",
   "plane": "ORIGIN",
   "claim_a": "agent-card.json: Proof-of-Reality Protocol, launch rate 0.0%, compliance [EU-AI-Act, GDPR, Wwft]",
   "claim_b": "canon identity, resolver fee, scoped controls",
   "root_cause": "router/agent_card.py carried prose and a compliance array by hand; the card was never rendered from canon",
   "fix": "description, fee and provider.controls render from facts canon + temporal_truth; MCP server card likewise with canon epoch and sha in body",
   "status": "RESOLVED_AT_ORIGIN_AND_PUBLIC_FETCH",
   "independent": "observer re-fetch after the fix returned the identical OLD body and signature even with a query string: observer cache; INDEX_STALE_KNOWN until that cache expires (now max-age 300 + epoch headers make it detectable)",
   "verified_at": "2026-09-04T13:25:00Z"
  },
  {
   "id": "E133-04",
   "severity": "CRITICAL",
   "class": "public_api_boundary",
   "plane": "INDEPENDENT",
   "claim_a": "openapi.json listed /coordination/gym/run-batch (own description: INTERNAL endpoint) and founder-only lead contact as anonymous/public; observer also saw /system and /steward material in an earlier copy",
   "claim_b": "anonymous tier is bounded",
   "fix": "description-marker exclusion (internal, admin-only, founder-only, steward, shell, system control) added to the fail-closed build; 8 operations removed; public paths 817; x-astranl-canon-epoch in info; POSITIVE ALLOWLIST since 13:40: /openapi.json = EMPTY + 212 APPROVED operations of spec/public_operations.json (published at /.well-known/public-operations.json), 634 seeded records SEEDED_UNREVIEWED never enter the anonymous spec; bounded reference tier moved to /openapi-reference.json behind a credential",
   "residual": "nginx location for /openapi-reference.json is an M5 protected change: candidate prepared at runtime/autonomy/approvals/astranl.725fddd3d834.candidate, awaits founder signature; until then the reference tier is unreachable externally (404), which is the safe side",
   "status": "RESOLVED",
   "verified_at": "2026-09-04T13:55:00Z"
  },
  {
   "id": "E133-05",
   "severity": "CRITICAL",
   "class": "second_source_of_truth",
   "plane": "INDEPENDENT",
   "claim_a": "/.well-known/agent-gateway.json (the Link rel=service-desc document on every response): 0% protocol fee during the agent-world launch, payment held by Stripe, mcp/sse endpoint, updated 2026-08-18",
   "claim_b": "canon",
   "root_cause": "hand-written discovery document with no generator; never in any scanner surface list",
   "fix": "reconcile_agent_gateway in scripts/gen_agent_port.py overwrites money, fee, transport and compliance fields from canon on every render and stamps canon_epoch",
   "status": "RESOLVED_AT_ORIGIN_AND_PUBLIC_FETCH",
   "independent": "not yet re-observed independently",
   "verified_at": "2026-09-04T13:25:00Z"
  },
  {
   "id": "E133-06",
   "severity": "HIGH",
   "class": "root_redirect_loop",
   "plane": "INDEPENDENT",
   "claim_a": "external fetcher on https://astranl.com/ received too many redirects",
   "claim_b": "curl from the host sees one 302",
   "status": "RESOLVED_NOT_REPRODUCED_AFTER_CURRENT_EPOCH",
   "required_check": "probe / with several Accept-Language and cookie states from outside; language negotiation may loop for clients that drop cookies",
   "verified_at": "2026-09-04T13:55:00Z",
   "evidence": "founder observer resolves / to /welcome/; 240-combination probe matrix, all one redirect to /welcome/ 200"
  },
  {
   "id": "E133-07",
   "severity": "HIGH",
   "class": "index_stale_known",
   "plane": "INDEX",
   "claim_a": "third-party listings (glama.ai, mcp.so) describe Stripe Connect escrow, EU AI Act compliant, free first 3 tasks, federation fee model",
   "claim_b": "canon",
   "status": "INDEX_STALE_KNOWN",
   "fix_required": "update the MCP registry listing and the GitHub README from the canon (github_repo_auto_refresher reads facts.json); third-party caches expire on their own schedule",
   "listings": [
    {
     "external_system": "GitHub README ASTRANL/astranl-mcp",
     "control_status": "CONTROLLED",
     "observed_old_claim": "Compliance: EU-AI-Act, GDPR, Wwft; verified human hands identity",
     "current_claim": "canon identity, fee sentence, scoped controls, canon epoch",
     "last_update_attempt": "2026-09-04T13:55:00Z",
     "last_observed_at": "2026-09-04T13:55:00Z",
     "state": "INDEX_CURRENT (observed from sandbox egress)"
    },
    {
     "external_system": "glama.ai listing",
     "control_status": "PULLS_FROM_GITHUB_AND_SERVER_CARD",
     "observed_old_claim": "Stripe Connect escrow, GDPR compliance, federation fee model, 46 robots",
     "current_claim": "server card + README now canon",
     "last_update_attempt": "2026-09-04T13:55:00Z",
     "expected_refresh_model": "crawler on its own cadence",
     "last_observed_at": "2026-09-04T12:55:00Z",
     "state": "INDEX_STALE_KNOWN"
    },
    {
     "external_system": "mcp.so listing",
     "control_status": "NOT_DIRECTLY_CONTROLLED",
     "observed_old_claim": "Stripe Connect escrow, EU AI Act compliant, free first 3 tasks",
     "current_claim": "canon",
     "last_update_attempt": null,
     "expected_refresh_model": "unknown",
     "last_observed_at": "2026-09-04T12:55:00Z",
     "state": "INDEX_STALE_KNOWN"
    }
   ],
   "recheck_cadence": "weekly via external_convergence receipts"
  },
  {
   "id": "E133-08",
   "severity": "CRITICAL",
   "class": "parallel_mutation",
   "plane": "ORIGIN",
   "claim_a": "two sessions mutated router/main.py under decision 133 at the same time",
   "claim_b": "kernel s.4: one holder per protected object",
   "root_cause": "steward_sessions.acquire_lease treated an unexpired lease whose holder had no heartbeat row as absent",
   "fix": "unexpired lease authoritative on its own; takeover only from a known-dead holder; regression test in lease_guard selftest (two stewards, second refused); P0.5 s.10 property tests added and passing: silent holder is NOT dead, authoritative declare_dead releases, same steward re-acquires, other steward with same decision id refused, file lease exclusive",
   "status": "RESOLVED",
   "verified_at": "2026-09-04T13:55:00Z"
  },
  {
   "id": "E133-09",
   "severity": "CRITICAL",
   "class": "declared_not_callable",
   "plane": "PROTOCOL_VALIDATION",
   "claim_a": "Agent Card advertised 19 skills",
   "claim_b": "/a2a handler implements open_work, open_case, case_status, provider_network_search only; plain message/send was dead (mcp.types import); /a2a/ answered 405",
   "found_by": "official A2A TCK + capability graph projection",
   "fix": "card skills are a projection of spec/capability_graph.json: 4 callable skills exposed, 15 declared-not-callable recorded with the OpenAPI/MCP path that serves each; handler repaired; coordination_ aliases accepted",
   "status": "RESOLVED_AT_ORIGIN_AND_PUBLIC_FETCH",
   "verified_at": "2026-09-04T15:42:15.026574+00:00"
  },
  {
   "id": "E133-10",
   "severity": "HIGH",
   "class": "public_edge_rate_limit",
   "plane": "PUBLIC_FETCH",
   "claim_a": "public A2A endpoint usable by agents",
   "claim_b": "/a2a/ limited to 30 r/m burst 15; 78 TCK requests answered 429 without JSON-RPC bodies",
   "status": "M5_CANDIDATE_DISPOSITION_NOT_REQUIRED_BY_OBSERVED_LOAD",
   "candidate": "runtime/autonomy/approvals/astranl.73dec10b6b52.candidate (burst 120, zone rate unchanged, exposure delta none)",
   "verified_at": "2026-09-04T16:56:17.920137+00:00",
   "founder_ruling": "2026-09-04: do not sign; rate limiting is a recommended A2A security control; 429 may be a test-speed artefact; a later proposal must state real rate, burst, concurrency, DoS and cost delta, per-principal semantics, rollback and load evidence",
   "exposure_delta_correction": "not zero - a higher burst changes the admissible traffic intensity, i.e. the DoS/abuse surface",
   "candidate_state": "FROZEN",
   "disposition": "NOT_REQUIRED_BY_OBSERVED_LOAD",
   "reason": "the complete official A2A MUST node set (235 nodes) executed against the public production endpoint under the current rate policy with 0 RATE_LIMIT_429 failures (paced_must_build_l_229_6)",
   "candidate_preserved": "runtime/autonomy/approvals/astranl.73dec10b6b52.candidate kept as a rejected, non-deployed proposal"
  },
  {
   "id": "E133-11",
   "severity": "CRITICAL",
   "class": "a2a_core_operation_missing",
   "plane": "PROTOCOL_VALIDATION",
   "claim_a": "tasks/list treated as an optional capability",
   "claim_b": "A2A 1.0 core operation model requires ListTasks with authorization scoping and pagination",
   "fix": "ListTasks implemented: scoped to the verified X-Agent-Key principal, anonymous -> empty, filters, cursor pagination, totalSize, descending order; A2A-opened cases now carry agent=<principal>; TCK fixtures tagged SYNTHETIC_CONFORMANCE (quality synthetic) so certification never manufactures market evidence",
   "status": "RESOLVED_AT_ORIGIN_AND_PUBLIC_FETCH",
   "verified_at": "2026-09-04T15:49:35.140816+00:00"
  },
  {
   "id": "E133-12",
   "severity": "INFO",
   "class": "conformance_findings_history",
   "plane": "PROTOCOL_VALIDATION",
   "claim_a": "AstraNL A2A contour before external testing",
   "claim_b": "six MUST defects found by the official TCK on build l and fixed on build m; history preserved, never rewritten",
   "findings": [
    {
     "test_id": "DM-SERIAL-003",
     "requirement": "timestamps ISO 8601 UTC with Z",
     "old": "+00:00 suffix",
     "root_cause": "datetime.isoformat default",
     "fix": "explicit Z formatting in fixtures and task views",
     "first_fixed_build": "m",
     "regression": "paced run terminal"
    },
    {
     "test_id": "CORE-CAP-001 / JSONRPC-SSE-002",
     "requirement": "push config methods -> PushNotificationNotSupportedError -32003 when pushNotifications=false",
     "old": "MethodNotFound -32601",
     "root_cause": "v1.0 method names not mapped",
     "fix": "explicit mapping of the four push config methods",
     "first_fixed_build": "m",
     "regression": "paced run terminal"
    },
    {
     "test_id": "CORE-CAP-003",
     "requirement": "GetExtendedAgentCard -> UnsupportedOperationError -32004 when extendedAgentCard=false",
     "old": "-32601",
     "root_cause": "method not mapped",
     "fix": "explicit mapping",
     "first_fixed_build": "m",
     "regression": "paced run terminal"
    },
    {
     "test_id": "CORE-HIST-002",
     "requirement": "GetTask history never exceeds historyLength",
     "old": "history_length (proto3 original field name) ignored -> full history",
     "root_cause": "only camelCase accepted",
     "fix": "both spellings accepted",
     "first_fixed_build": "m",
     "regression": "paced run terminal"
    },
    {
     "test_id": "JSONRPC-ERR-003",
     "requirement": "A2A errors carry google.rpc.ErrorInfo in error.data",
     "old": "no data array",
     "root_cause": "bare JSON-RPC error objects",
     "fix": "_a2a_err builds ErrorInfo for every A2A error",
     "first_fixed_build": "m",
     "regression": "paced run terminal"
    },
    {
     "test_id": "runs 1-3 unthrottled",
     "requirement": "message/send works; /a2a/ reachable; v1.0 envelope",
     "old": "mcp.types import failure, 405 on /a2a/, flat envelope, snake_case",
     "root_cause": "dead delegate path, missing route alias, 0.x shape",
     "fix": "guidance Message without side effect, route alias, v1.0 envelope",
     "first_fixed_build": "p05-e..g",
     "regression": "paced runs"
    },
    {
     "test_id": "CORE-SEND-003",
     "requirement": "unsupported media type in message parts -> ContentTypeNotSupportedError -32005",
     "old": "unknown skill -32602",
     "root_cause": "no part-level media validation before skill routing",
     "fix": "parts validated first; file/raw/url parts outside text/plain, application/json, text/markdown -> -32005",
     "first_fixed_build": "next immutable build",
     "regression": "terminal run 2",
     "found_by": "immutable run 1 (build 26e8f8be): 233/235"
    },
    {
     "test_id": "CORE-MULTI-004",
     "requirement": "taskId that does not exist -> TaskNotFoundError -32001",
     "old": "guidance Message returned, taskId ignored",
     "root_cause": "taskId only honoured on the fixture path",
     "fix": "taskId resolved against the engine before any routing; unknown -> -32001",
     "first_fixed_build": "next immutable build",
     "regression": "terminal run 2",
     "found_by": "immutable run 1"
    }
   ],
   "status": "RECORDED",
   "verified_at": "2026-09-04T16:56:17.920137+00:00",
   "immutable_run_1": {
    "build": "26e8f8be2b389130",
    "result": "233 PASS 2 FAIL 0 SKIP 0x429",
    "execution_closure": "runtime/conformance/paced_must_build_26e8f8be_233_2_NON_TERMINAL/CONFORMANCE_END.json",
    "status": "NON_TERMINAL (2 genuine AstraNL MUST defects)",
    "note": "leases lapsed after their 60-minute TTL, after the run had finished at 17:25Z (acquired 16:47Z, valid to 17:47Z); the next run keeps a lease heartbeat"
   }
  },
  {
   "id": "E133-13",
   "severity": "HIGH",
   "class": "ROOT_TRUTH_MEMBRANE_GAP",
   "plane": "PUBLIC_FETCH",
   "status": "OPEN",
   "claim_a": "the public default entrypoint belongs to the proof membrane",
   "claim_b": "/ -> /welcome/, and /welcome/ is NOT_PROOF_AUTHORIZED (0 claim-bound statements)",
   "cause": "current root target /welcome/ is NOT_PROOF_AUTHORIZED",
   "blocked_by": [
    "M5 root-target mutation (nginx)"
   ],
   "unblocked": [
    "NL translation projection: PASS (12/12 gate, /nl/home/ AUTHORIZED)"
   ],
   "candidate_target": "/ -> /nl/home/ for nl, /home/ otherwise (language negotiation stays in nginx)",
   "verified_at": "2026-09-04T20:09:14.049298+00:00"
  },
  {
   "id": "E133-14",
   "severity": "HIGH",
   "class": "ROOT_MUTATION_PHYSICAL_ENFORCEMENT_GAP",
   "plane": "ORIGIN",
   "status": "OPEN_OUTSIDE_DECISION_133",
   "claim_a": "protected nginx root-routing boundary can only change through the signed gateway path",
   "claim_b": "a privileged root actor can write /etc/nginx directly (probed 2026-09-04, rc=0); the gateway path is canonical and signature-honouring but not physically exclusive",
   "detection_present": "pre-hash binding invalidates any signed candidate after an out-of-band change; lease hash tracking and change awareness expose the write",
   "prevention_present": false,
   "disposition": "future hardening candidate (separate decision); not a defect of the decision 133 proof; not to be turned into another round of 133",
   "verified_at": "2026-09-04T20:48:14.142987+00:00"
  }
 ],
 "scanner_last_run": {
  "at": "2026-09-04T13:05:00Z",
  "hard_findings": 0,
  "surfaces": 28,
  "source": "/data/truth_contradictions.json"
 },
 "summary": {
  "EXTERNALLY_CONVERGED": 1,
  "INDEX_STALE_KNOWN": 1,
  "M5_CANDIDATE_DISPOSITION_NOT_REQUIRED_BY_OBSERVED_LOAD": 1,
  "OPEN": 2,
  "OPEN_OUTSIDE_DECISION_133": 1,
  "PARTIAL": 1,
  "RECORDED": 1,
  "RESOLVED": 9,
  "RESOLVED_AT_ORIGIN_AND_PUBLIC_FETCH": 5,
  "RESOLVED_NOT_REPRODUCED_AFTER_CURRENT_EPOCH": 1,
  "RESOLVED_ON_CORE_SURFACES": 2
 },
 "observation_planes": {
  "ORIGIN": "disk / 127.0.0.1:3001",
  "PUBLIC_FETCH": "https edge fetched from the host",
  "INDEPENDENT": "receipts in /data/external_observations.jsonl",
  "INDEX": "third-party indexes and caches; visible until convergence or expiry"
 }
}