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.
Primary observation link
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: trueThe 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_onlyThe 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_absenceThe 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_onlyThe 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_triggerExecutable evidence (2026-06-07)
- Binding:
wiki/content/lens/storyteller/ruling-attachment-compliance.lens.ts - Evaluator:
scripts/evaluate_lenses.mjs(storyteller.lens.ruling_attachment_compliance.v1checks) - 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
- session:
- 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
- session:
- Dashboard result:
pnpm lens:evaluate -- --lens storyteller.lens.ruling_attachment_compliance.v1reports this lensSatisfiedat100%with7/7checks 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.