035-screening-seam

Untrusted-text screening seam (amends 002, 003 and 009)

Lifecycle approvedImplementation completeVerification unknownQualification unknown

An amendment of approved specs 002, 003 and 009, for #76 child B7 (#65). A definition may declare a `screening` block that names untrusted text fields (caller text, third-party text, list item text), the screener backend that judges each one, a consequence on block (`refuse`, `drop_field`, `drop_text`, `drop_item`) and a consequence when the screener is unavailable (`fail_closed`, `skip_generation`, `fail_open`). The block compiles down to ordinary `proposition` steps, one text value per request, plus consequence rules evaluated before the selection policy; a screener is an ordinary backend that declares a `screen` profile (categories, maximum text bytes, text unit size) and uses the general per-capability `isolation: per_item` member this spec introduces. In a definition that declares screening, the compiler refuses a model step that reads unscreened untrusted text. A blocked value under `refuse` yields spec 033's `refused` outcome with its computed addressing. Adds a `screen_unavailable` unresolved reason, an explicit withheld marker in projections, per-value screening evidence with digests only, text-unit budgets, verdict caching through spec 017's cache, the reserved `rustev.screening` metric of spec 028, a per-item isolation rule for spec 009 remote adapters, and the mapping constraints for spec 030's reserved Bedrock screening values. New members go into the shared #76 track versions (`rustev.definition/2`, `rustev.plan/3`, `rustev.evidence/2`, `rustev.judgment/2`, `rustev.run/3`); definitions, descriptors and plans that use no #76 construct keep byte-identical identities. Approved (A-32); implementation is complete.

Read the full pinned specification ↗

Relationships

Claimed units

  • extends
    {
      "nature": "amending",
      "spec": "002-decision-contract-and-pure-core",
      "unit": {
        "kind": "directory",
        "path": "crates/rustev-contract/"
      }
    }
  • extends
    {
      "nature": "amending",
      "spec": "002-decision-contract-and-pure-core",
      "unit": {
        "kind": "directory",
        "path": "crates/rustev-core/"
      }
    }
  • extends
    {
      "nature": "amending",
      "spec": "003-runtime-execution-and-evidence",
      "unit": {
        "kind": "directory",
        "path": "crates/rustev-runtime/"
      }
    }
  • extends
    {
      "nature": "amending",
      "spec": "009-remote-adapter-protocol",
      "unit": {
        "kind": "directory",
        "path": "integrations/rustev-remote-http/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "004-evaluation-and-replay",
      "unit": {
        "kind": "directory",
        "path": "crates/rustev-eval/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "006-cli-surface",
      "unit": {
        "kind": "directory",
        "path": "crates/rustev-cli/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "005-reference-backends",
      "unit": {
        "kind": "directory",
        "path": "backends/rustev-backend-rules/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "012-jev-integration",
      "unit": {
        "kind": "directory",
        "path": "integrations/rustev-jev/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "030-bedrock-backend",
      "unit": {
        "kind": "directory",
        "path": "integrations/rustev-bedrock/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "027-node-and-wasm-bindings",
      "unit": {
        "kind": "directory",
        "path": "integrations/rustev-node/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "027-node-and-wasm-bindings",
      "unit": {
        "kind": "directory",
        "path": "integrations/rustev-wasm/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "028-opentelemetry-evidence-sink",
      "unit": {
        "kind": "directory",
        "path": "integrations/rustev-otel/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "027-node-and-wasm-bindings",
      "unit": {
        "kind": "directory",
        "path": "tools/rustev-conformance/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "027-node-and-wasm-bindings",
      "unit": {
        "kind": "directory",
        "path": "crates/rustev-surface/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "031-public-api-and-release-family",
      "unit": {
        "kind": "directory",
        "path": "tools/rustev-release/"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "001-boundaries-and-authority",
      "unit": {
        "kind": "file",
        "path": "Makefile"
      }
    }
  • extends
    {
      "nature": "additive",
      "spec": "001-boundaries-and-authority",
      "unit": {
        "kind": "directory",
        "path": "scripts/acceptance/"
      }
    }

Source headings

  1. 035: Untrusted-text screening seam (amends 002, 003 and 009)
  2. 1. Purpose
  3. 2. Territory
  4. 2.1 Binding principles of #76
  5. 3. Behavior
  6. 3.1 Terms
  7. 3.2 The screen profile (descriptor)
  8. 3.3 The screen output and required kind
  9. 3.4 Screening declarations
  10. 3.5 Compilation
  11. 3.6 Verdicts and consequences
  12. 3.7 Screening refusals
  13. 3.8 Withheld values in projections
  14. 3.9 Unavailability
  15. 3.10 Isolation and batching
  16. 3.11 Verdict cache
  17. 3.12 Text units and budgets
  18. 3.13 Evidence
  19. 3.14 Metrics
  20. 3.15 Remote adapters (amends 009)
  21. 3.16 Alignment with spec 030 (Bedrock)
  22. 3.17 Relation to B3, B5 and B6
  23. 3.18 Compatibility and identity
  24. 4. Out of scope
  25. 5. Observable negative cases
  26. Acceptance
  27. Verification
  28. Implementation record
  29. Facts relied on
  30. Decisions at approval

Frozen anchors

No frozen anchors declared.