Ruling Attachment Compliance Lens / 裁定附条件履行 Lens

This lens observes whether 裁定附条件履行线 and 裁定附条件履行机制 correctly prevent a served ruling from becoming a clean universal key.

A pass requires executable evidence that a valid ruling carries at least two attached conditions, that one or more conditions are live pressure, that the player can assign a compliance response, and that future route acceptance changes when attachments are served, contested, quarantined, sponsor-gated, channel-limited, or breached.

This lens observes:

It is observed through:

Observable promise

When a ruling is already valid or served, the game must still ask: which attached condition makes this ruling usable, and which future route rejects the ruling if that condition is absent or mismatched?

The answer must be visible in state. A served order remains historically true, but route acceptance is conditional.

Must pass

1. Entry is state-triggered

Required entry evidence:

entry_state:
  trigger_kind: state_pressure
  source_ruling_state: served | mandate_assigned | complied_partial | settlement_active | legality_converted | proof_burden_shifted | custody_order_live
  attachment_rows_min: 2
  attachment_pressure_present: true
  future_route_reads_attachment_state: true
  no_fixed_turn_trigger: true

The lens fails if eligibility depends on fixed numbered turns, arbitrary day counts, chapter quota, content count, dashboard status, or lens health.

2. Ledger contains at least two attachment rows

Ruling Attachment Ledger must list at least two live conditions attached to a source ruling.

Required row shape:

attachment_row:
  row_id: <stable id>
  source_ruling: <source order / event / storyline>
  source_relief_kept_true: []
  attachment_kind: notice | remedy | exclusion | monitor | channel_limit | proof_bridge | witness_protection | artist_boundary | public_receipt | sponsor_carveout | editor_checksum | archive_seal
  attachment_state_before: <state>
  obligated_party: <party or explicit_absence>
  carrier_or_monitor: <asset / character / route asset / explicit_absence>
  satisfied_by: <assignment / proof / explicit_absence>
  breach_if_absent: <breach state>
  future_route_accepts_when: []
  future_route_rejects_or_taxes_when: []

The lens fails if the ledger is only a prose checklist with no source ruling, obligated party, carrier/monitor, breach state, or future route test.

3. At least one attachment has live pressure

At least one row must be unserved, contested, channel-limited, sponsor-gated, monitorless, recovery-only, or breach-risk.

Valid pressured states include:

  • attachment_unserved;
  • attachment_public_only;
  • attachment_lawful_only;
  • attachment_editor_only;
  • attachment_sponsor_gated;
  • attachment_contested;
  • attachment_breach_risk;
  • attachment_recovery_only;
  • equivalent.

The lens fails if every attachment starts and remains cleanly satisfied.

4. Rite is assignable

Ruling Attachment Compliance Hearing or equivalent must require concrete assignments.

Required assignment evidence:

assignments:
  ledger: storyteller.card.ruling_attachment_ledger.v1
  selected_attachment_rows:
    - <row id>
  intended_future_route: <route / rite / event / explicit future use>
  response: serve_conditions | publish_notice | patch_channel | sponsor_carveout | contest_attachment | quarantine_use | breach_or_default
  handler_or_absence: <handler / monitor / explicit_absence>
  proof_bridge_or_absence: <proof / receipt / checksum / seal / explicit_absence>
  excluded_party_or_absence: <party / explicit_absence>
  cost_or_scar: <cost / scar>
  unselected_attachment_effect: <effect>

The lens fails if compliance is automatic, if absence is hidden, or if a single handler clears every attachment without bridge, exclusion, monitor, cost, or scar.

5. Branches diverge

At least four branch families must be playable or explicitly blocked by state.

Valid branch families:

  • serve conditions;
  • publish notice;
  • patch channel;
  • sponsor carve-out;
  • contest attachment;
  • quarantine use;
  • breach or default.

Each branch must produce different attachment state, cost, and future route effect. The lens fails if every branch returns ruling_usable.

6. Future route acceptance changes

At least one future route, rite, or event must read the resulting attachment state.

Required evidence:

future_route_acceptance_check:
  source_ruling: <ruling>
  route_or_rite: <id>
  required_attachment_states: []
  accepted_states: []
  rejected_or_costlier_states: []
  required_conversion_or_absence: <conversion / explicit_absence>
  route_effect_after_branch: accepted | accepted_with_cost | narrowed | blocked | channel_limited | contradiction_pending | recovery_only

The lens fails if attachment_served, attachment_unserved, attachment_contested, attachment_sponsor_gated, and attachment_breached all unlock the same future route.

7. Unselected attachment state matters

The compliance choice must affect at least one unselected attachment or explicitly record why no other row changes.

Required evidence:

unselected_attachment_effect:
  row_id: <row or explicit_absence>
  state_before: <state or explicit_absence>
  state_after: <state or explicit_absence>
  reason: served_elsewhere | made_harder | quarantined | breach_armed | unaffected_with_proof | explicit_absence

The lens fails if the selected row changes while all other attached conditions remain magically clean in every branch.

8. Breach event records claimant and route effect

Ruling Attachment Breach must fire or be armed when the ruling is used with unmet, mismatched, hidden, or falsely satisfied attachments.

Required event evidence:

breach_event:
  event: storyteller.event.ruling_attachment_breach.v1
  source_ruling: <ruling>
  breached_attachment_rows: []
  breach_cause: unserved_notice | unpaid_remedy | missing_exclusion | absent_monitor | channel_mismatch | proof_bridge_absent | false_satisfaction | hidden_row | route_asset_unprotected
  narrating_claimant: inspector | archive | sponsor | editor | public_fan | artist | witness | manager | pirate | route_asset | blackout_system
  affected_route_or_rite: <future route / rite / event>
  attachment_state_after: <state>
  future_route_effect: blocked | costlier | channel_limited | captured | hostile | contradiction_pending | recovery_only

The lens fails if breach is only narration and does not mutate future availability, cost, channel, contradiction, or recovery.

9. Success has cost

Any successful compliance, late notice, channel patch, sponsor carve-out, contest, or quarantine must carry a visible cost or route restriction.

Valid costs include:

  • inspection_heat_up;
  • archive_debt_up;
  • edit_debt_up;
  • contract_capture_up;
  • public_receipt_distrust_up;
  • handler_burden_up;
  • route_asset_pressure_up;
  • sponsor_gate_pressure_up;
  • future_route_channel_limited;
  • unselected_attachment_made_harder;
  • quarantine_blocks_current_use.

The lens fails if compliance creates a free universal refresh.

10. At least three deltas exist

Every resolved branch must mutate at least three counters or durable states. One must be relief, one must be cost, and one must be future route effect.

Expected surfaces:

  • attachment_compliance;
  • attachment_breach_risk;
  • lawful_acceptance;
  • public_acceptance;
  • artist_boundary_respect;
  • archive_signature_legitimacy;
  • editor_checksum_legitimacy;
  • sponsor_gate_pressure;
  • inspection_heat;
  • archive_debt;
  • edit_debt;
  • contract_capture;
  • public_receipt_distrust;
  • handler_burden;
  • route_asset_pressure;
  • future_route_acceptance;
  • future_recovery_cost.

Replay evidence expectation

lens_id: storyteller.lens.ruling_attachment_compliance.v1
session_id: lens-ruling-attachment-compliance-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  source_ruling_state: served | mandate_assigned | complied_partial | settlement_active | legality_converted | proof_burden_shifted | custody_order_live
  attachment_rows_min: 2
  attachment_pressure_present: true
  future_route_reads_attachment_state: true
  no_fixed_turn_trigger: true
offered:
  card: storyteller.card.ruling_attachment_ledger.v1
  rite: storyteller.rite.ruling_attachment_compliance_hearing.v1
ledger_rows:
  - row_id: <row_a>
    source_ruling: <source>
    attachment_kind: <kind>
    attachment_state_before: <state>
    obligated_party: <party>
    carrier_or_monitor: <asset or explicit_absence>
    breach_if_absent: <state>
  - row_id: <row_b>
    source_ruling: <source>
    attachment_kind: <kind>
    attachment_state_before: <state>
    obligated_party: <party>
    carrier_or_monitor: <asset or explicit_absence>
    breach_if_absent: <state>
branch_result:
  selected_attachment_rows: []
  selected_response: serve_conditions | publish_notice | patch_channel | sponsor_carveout | contest_attachment | quarantine_use | breach_or_default
  handler_or_absence: <handler or explicit_absence>
  proof_bridge_or_absence: <proof or explicit_absence>
  excluded_party_or_absence: <party or explicit_absence>
  cost_or_scar: <cost or scar>
  attachment_state_after: <state>
  unselected_attachment_effect: <effect>
  event_seen_or_armed: storyteller.event.ruling_attachment_breach.v1 | none
  future_route_effect: accepted | accepted_with_cost | narrowed | blocked | channel_limited | contradiction_pending | recovery_only
  counter_deltas: {}
assertions:
  - primary_links_exist
  - entry_is_state_triggered
  - served_ruling_has_two_attachment_rows
  - future_route_reads_attachment_state
  - ledger_rows_have_source_obligated_party_carrier_and_breach
  - rite_requires_handler_or_absence_proof_or_absence_exclusion_cost_and_unselected_effect
  - branches_diverge
  - attachment_state_changes_future_route_acceptance
  - breach_event_records_claimant_and_route_effect
  - success_has_cost
  - no_fixed_turn_trigger

Executable evidence (2026-06-07)

  • Binding: wiki/content/lens/storyteller/ruling-attachment-compliance.lens.ts
  • Evaluator: scripts/evaluate_lenses.mjs (storyteller.lens.ruling_attachment_compliance.v1 checks)
  • Serve branch replay:
    • session: lens-storyteller-lens-ruling-attachment-compliance-v1-20260607t0805z-serve
    • seed: ruling-attachment-serve-20260607
    • replay: lens/replays/ruling-attachment-compliance.serve.replay.json
  • Breach/default branch replay:
    • session: lens-storyteller-lens-ruling-attachment-compliance-v1-20260607t0805z-breach
    • seed: ruling-attachment-breach-20260607
    • replay: lens/replays/ruling-attachment-compliance.breach.replay.json
  • Dashboard result: pnpm lens:evaluate -- --lens storyteller.lens.ruling_attachment_compliance.v1 reports this lens Satisfied at 100% with 7/7 checks passing.

Progress metric

  • 20%: state-triggered entry opens from a valid or served ruling with at least two attachment rows.
  • 40%: at least one row is unserved, contested, channel-limited, sponsor-gated, monitorless, or breach-risk, and a future route reads it.
  • 60%: compliance rite accepts selected rows, intended future route, handler/absence, proof/absence, exclusion/absence, cost/scar, and unselected-row effect.
  • 80%: at least four branch families diverge by attachment state, cost, and future route effect.
  • 100%: replay evidence proves one successful compliance branch and one breach/quarantine/contested branch with seed/session, deltas, and changed future route acceptance.

Non-goals

  • Not a new verdict or hearing for fresh facts.
  • Not a generic legal checklist.
  • Not an abstract upkeep tax.
  • Not a fixed turn trigger.
  • Not a dashboard or governance lens.
  • Not valid if a served ruling can ignore attached conditions.
  • Not valid if attachment breach has no future route consequence.