Confidant Repair Terms Lens / 私约修复条件 Lens

This lens observes whether 私约修复条件线 and 私约修复条件机制 correctly turn a breached private promise into character-authored repair pressure.

The current mesh can already make private promises breachable through 私约违背线. The remaining regression risk is apology laundering: after a breach, the desk files an apology, payment, public statement, legal note, sponsor-safe recap, or handler reassurance and future play treats the character as repaired.

A passing implementation proves that the harmed character names the harm, writes the repair terms, requires proof or records explicit absence, preserves a nonnegotiable limit, and changes future character or route state. A generic relationship recovery, mood change, or clean apology does not satisfy this lens.

This lens observes:

It is observed through:

Observable promise

When a breach reaches repair pressure, the game must show:

  • source promise row or explicit absence;
  • harmed confidant character;
  • breach state before;
  • breached material;
  • violated scope or explicit absence;
  • breach reader;
  • harm named by the character;
  • demanded repair;
  • proof required by the character or explicit absence;
  • nonnegotiable limit or explicit absence;
  • selected repair posture;
  • proof of repair or explicit absence;
  • character state after;
  • material state after;
  • future character or route effect.

The lens fails if the result is only apology accepted, trust restored, relationship repaired, public statement issued, money paid, legal settled, PR handled, or character calmed.

Entry oracle

A valid implementation opens only from live state pressure:

entry_state_required:
  trigger_kind: state_pressure
  source_promise_or_breach_visible: true
  confidant_character_visible: true
  breached_material_visible: true
  violated_scope_visible_or_explicit_absence: true
  breach_reader_visible: true
  character_harm_claim_visible: true
  demanded_repair_visible: true
  proof_required_by_character_visible_or_explicit_absence: true
  future_character_or_route_consumes_repair_state: true
  player_can_accept_negotiate_contrit_shield_separate_refuse_or_default: true
  no_fixed_turn_trigger: true
  no_fixed_day_or_week_trigger: true
  no_raw_breach_count_trigger: true
  no_dashboard_or_lens_health_trigger: true

The lens fails if entry comes from fixed turn number, fixed day/week interval, chapter quota, raw breach count, raw relationship value, generic apology scene, dashboard state, lens health, or public contrition without a named character demand and future consumer.

Docket oracle

私约修复案卷 or equivalent must keep breach, term, and future locks separate.

docket_required:
  breach_lock:
    source_promise_id_or_absence: <promise id or explicit_absence>
    confidant_character: yu_lan | baiya | shen_luo | han_yanshuang | mu_ning | ai_sheng | li_xingtong | equivalent
    breach_state_before: breached | hostile | exposed | public_only | lawful_only | sponsor_only | missed | recovery_only | equivalent
    breached_material: source_identity | private_refusal | witness_name | checksum | route_secret | selfhood_boundary | child_voice_trace | unreleased_take | equivalent
    violated_scope: private_only | named_hearing_only | anonymous_public | lawful_only | route_asset_only | emergency_only | disputed | explicit_absence
    breach_reader: public | lawful_table | sponsor | archive | management | route_claimant | broadcast_reality | fan_public | equivalent
  term_lock:
    harm_named_by_character: <one sentence harm claim>
    demanded_repair: return_material | replace_proof | publish_boundary | shield_source | pay_witness | withdraw_recap | route_separation | public_contrition | handler_recusal | equivalent
    proof_required_by_character: oath | receipt | checksum | public_addendum | lawful_seal | witness_payroll | route_quarantine | explicit_absence | equivalent
    nonnegotiable_limit: no_public_name | no_sponsor_copy | no_archive_reuse | no_broadcast_echo | no_handler_contact | no_route_asset_use | explicit_absence | equivalent
  future_lock:
    selected_repair_posture: accept_terms | negotiate_restitution | public_contrition | shielded_repayment | route_separation | refuse_repair | performative_apology_default
    repair_state_after: pending | accepted | partial | public_contrition | shielded | route_separated | refused | performative | hostile | missed | recovery_only | equivalent
    future_character_or_route_effect: recruitable_again_with_cost | handler_unavailable | proof_replaced | public_addendum_required | route_costlier | character_hostile | route_blocked | ending_scar | equivalent

The lens fails if apology, payment, public response, legal settlement, proof replacement, and future route effect are collapsed into one forgiveness row.

Rite assignment oracle

私约修复面谈 or equivalent must require explicit assignment:

assignment_required:
  docket: storyteller.card.confidant_repair_docket.v1
  selected_repair_row: <row id>
  source_promise_id_or_absence: <promise id or explicit_absence>
  confidant_character: <named character>
  breach_state_before: <state>
  breached_material: <material>
  violated_scope: <scope or explicit_absence>
  breach_reader: <reader>
  harm_named_by_character: <harm claim>
  demanded_repair: <repair>
  proof_required_by_character: <proof or explicit_absence>
  nonnegotiable_limit: <limit or explicit_absence>
  handler_or_absence: producer | shen_luo | yu_lan | han_yanshuang | baiya | ai_sheng | fan_delegate | lawful_clerk | archive_clerk | explicit_absence | equivalent
  selected_repair_posture: accept_terms | negotiate_restitution | public_contrition | shielded_repayment | route_separation | refuse_repair | performative_apology_default
  future_character_or_route: <future consumer>

The lens fails if a famous handler, sponsor payment, public statement, legal seal, archive correction, or recap wording resolves repair without these fields.

Branch divergence oracle

A satisfying implementation must expose six constructive branch families plus default, or explicitly block unavailable families with state reasons.

Branch familyRequired reliefRequired costRequired future effect
Accept termsdemanded repair becomes legitimateproof replacement, schedule/sponsor/archive/handler costrecruitable again with cost, scoped route reopened, addendum required
Negotiate restitutionnarrower repair is mutually visibleconsent debt, notice burden, character route costlierpartial repair, split reader, future objection preserved
Public contritionharmed reader sees public acknowledgementlicense pressure, sponsor pressure, public distrustpublic repair route opens, sponsor route narrowed, ending scar reduced not erased
Shielded repaymentsource/witness gets protection or paymentpayroll, anonymity, lawful delay, handler burdenprotected witness state, lawful-only proof, route delay
Route separationcharacter avoids contaminated route without erasureproof gap, missed scenes, route asset costcharacter available elsewhere, this route blocked or costlier
Refuse repairproof/schedule/sponsor position preserved nowhostile character, recruitability damage, ending scar riskhostile witness, missed recruit, recovery-only branch
Performative apology defaultdesk pressure may fall brieflyfalse repair hardenshostile, unavailable, missed, route blocked, recovery-only, ending scar

No branch may make one repair acceptable for the harmed character, public, lawful table, sponsor, archive, management report, route asset, and broadcast reality at once.

Default oracle

私约修复默认 must fire or arm when:

  • a breached promise is treated as repaired without a repair docket row;
  • character-authored repair terms are absent or hidden;
  • proof required by the character is absent or hidden;
  • nonnegotiable limits are violated or softened;
  • public contrition is treated as private repair without being demanded;
  • payment is treated as consent;
  • legal settlement is treated as character forgiveness;
  • recap wording says repaired while future route consumes a false repair state.

Required payload:

default_required:
  event: storyteller.event.confidant_repair_default.v1
  repair_row_or_absence: <row id or explicit_absence>
  source_promise_id_or_absence: <promise id or explicit_absence>
  confidant_character: <named character or explicit_absence>
  breached_material_or_absence: <material or explicit_absence>
  violated_scope_or_absence: <scope or explicit_absence>
  breach_reader: <reader>
  default_repair_claim: apology_given | money_paid | public_statement | legal_settled | handler_smoothed | sponsor_cleaned | recap_says_repaired | broadcast_memory_clean | equivalent
  false_repair_actor: producer | sponsor | management | archive | lawful_reader | handler | editor | public_table | broadcast_reality | equivalent
  missing_inputs:
    character_authored_terms: present | absent | hidden
    demanded_repair: present | absent | hidden
    proof_required_by_character: present | absent | hidden
    proof_of_repair: present | absent | hidden
    nonnegotiable_limit: present | absent | hidden | violated
    future_reader_or_route: present | absent | hidden
  repair_state_after: performative | false_repaired | hostile | route_separated | missed | recovery_only | ending_scar | equivalent
  character_state_after: hostile | unavailable | handler_refused | public_only | lawful_only | sponsor_only | missed | recovery_only | equivalent
  future_character_or_route_effect: recruit_missed | handler_unavailable | proof_rejected | public_addendum_required | route_costlier | route_blocked | ending_scar | recovery_only | equivalent

A default that changes only mood, money, public approval, relationship points, or generic reputation fails.

Success cost oracle

Every non-default branch must include at least one relief, one cost, and one future mutation.

branch_result_required:
  repair_state_after: accepted | partial | public_contrition | shielded | route_separated | refused | equivalent
  proof_of_repair_or_absence: <proof or explicit_absence>
  character_state_after: available_with_cost | handler_only | lawful_only | public_only | hostile | missed | recovery_only | equivalent
  material_state_after: returned | replaced | shielded | quarantined | sponsor_only | archive_only | public_addendum_required | unusable | equivalent
  counter_deltas:
    relief: at_least_one
    cost: at_least_one
    future: at_least_one

Replay evidence expectation

lens_id: storyteller.lens.confidant_repair_terms.v1
session_id: lens-confidant-repair-terms-v1-<timestamp>
seed: <deterministic-seed>
entry_state:
  trigger_kind: state_pressure
  source_promise_or_breach_visible: true
  confidant_character_visible: true
  breached_material_visible: true
  demanded_repair_visible: true
  future_character_or_route_consumes_repair_state: true
  no_fixed_turn_trigger: true
offered:
  card: storyteller.card.confidant_repair_docket.v1
  rite: storyteller.rite.confidant_repair_interview.v1
valid_branch:
  selected_repair_posture: accept_terms | negotiate_restitution | public_contrition | shielded_repayment | route_separation | refuse_repair
  repair_state_after: <state>
  proof_of_repair_or_absence: <proof or explicit_absence>
  character_state_after: <state>
  material_state_after: <state>
  future_character_or_route_effect: <effect>
  counter_deltas:
    relief: []
    cost: []
    future: []
default_branch:
  selected_repair_posture: performative_apology_default
  event_seen_or_armed: storyteller.event.confidant_repair_default.v1
  default_repair_claim: <claim>
  false_repair_actor: <actor>
  repair_state_after: <state>
  character_state_after: <state>
  future_character_or_route_effect: <effect>
assertions:
  primary_links_exist: true
  repair_locks_are_separate: true
  branch_families_diverge: true
  no_universal_forgiveness: true
  no_generic_affinity_meter: true
  no_fixed_turn_day_week_raw_count_dashboard_or_lens_health_trigger: true

Non-goals

  • Not a design methodology page.
  • Not a raw content-count target.
  • Not a generic social system.
  • Not a public apology wrapper.
  • Not a fixed-turn cleanup phase.
  • Not valid unless future character or route play reads the repair state.