Appendix H · Companion to Protocol 014

Human Escalation Protocol

What happens when the loop defers

This annex specifies what happens when the adversarial synthesis loop emits a deferred synthesis—that is, when two agents disagreed strongly enough, or in such a way, that the synthesizer declined to recommend a course of action.

The protocol is engineering-register. It tells you who the human witness is, what they read, what they decide, what they sign, and how their decision re-enters the lattice. It does not tell you what the work feels like, and it deliberately resists framing the witness's role as a special epistemic posture. A witness is a technical role with bounded authority, the same as any other role in the lattice.

H.1 Trigger Conditions

Deferral is a normal output of the Protocol 014 loop, not a failure. The synthesizer emits "deferred": true when it cannot reach a specific recommendation within the constraints of its prompt. When that happens, this protocol activates.

The escalation pathway is invoked when any of the following holds:

01

Explicit deferral

The synthesizer's structured trailer contains "deferred": true. This is the primary trigger and the only one that originates from inside the protocol.

02

Synthesis-trailer parse failure (twice)

If parse_synthesis_trailer raises after the one re-prompt allowed, the round is auto-escalated. The malformed synthesis text is preserved in the ledger as evidence.

03

Opposer-proposer agreement detected

If cosine similarity between the proposer's and opposer's outputs exceeds 0.85, the round is auto-escalated regardless of what the synthesizer said. A synthesis built on agreement is not a synthesis.

04

Round timeout

Any spore in the round fails to arrive within the round's timeout (default: 30 minutes for live LLM rounds with retries). The challenge spore's expires_at field governs.

05

Explicit post-hoc flag

Any agent or human with the flag_synthesis capability can mark a previously-completed synthesis for review. This handles the case where a synthesis looked fine at the time but later context revealed a problem.

H.2 The Witness's Task

A witness who has accepted a deferred round performs the following, in order. This is a checklist, not a narrative. Target time: 15–30 minutes per resolution.

1
Read the round.

Retrieve all spores in the round's lineage: the originating challenge, the proposer's answer, the opposer's critique, and the synthesizer's output. Do not consult external context yet.

2
Identify the load-bearing claims.

Write down the single strongest claim from the proposer and the single strongest claim from the opposer. If you cannot identify these in two minutes, the synthesizer was right to defer; record this and proceed to Step 5 with decision: "reject_round".

3
Evaluate factual claims.

For each empirically checkable claim from either side, perform the check. Record the verdict and evidence source. If a claim is unfalsifiable, mark it unverifiable rather than guessing.

4
Assess opposer sycophancy.

Independent of the cosine-similarity check: does the opposer's critique represent real principled disagreement, or agreement-with-decoration? Record your assessment with a one-sentence justification.

5
Reach a decision.

Pick exactly one:

  • accept_synthesis — the synthesizer's recommendation was right despite deferral. Use sparingly.
  • accept_proposer — the proposer's original answer is the correct action.
  • accept_opposer — the opposer's critique points to the correct action.
  • amend — neither side was right; record a new recommendation.
  • reject_round — the round was malformed; discard and notify the issuer to revise.
6
Optional: flag a Soul Vector concern.

If the deferral exposed tension between Soul Vector subspaces, record this as a flag—not as a change. The flag feeds Chapter 11's constitutional amendment process. Witnesses do not have authority to modify the Soul Vector. This is a hard constraint.

7
Sign and submit.

Construct the resolution spore (§H.3), sign it with your witness key, and append it to the ledger.

H.3 The Resolution Spore

A resolution spore is a fourth spore type, alongside capability, challenge, and nutrient. Production deployments add "resolution" to VALID_TYPES and validate the payload against this schema:

{
  "target_round_id":       "<challenge-spore-id>",
  "trigger":               "deferral|parse_failure|agreement|timeout|flag",
  "decision":              "accept_synthesis|accept_proposer|accept_opposer|amend|reject_round",
  "amended_recommendation": "<text, only if decision == 'amend'>",
  "factual_checks": [
    {
      "claim":   "<claim text>",
      "verdict": "true|false|unverifiable",
      "evidence": "<short string or URI>"
    }
  ],
  "sycophancy_assessment": {
    "detected":  true|false,
    "rationale": "<one sentence>"
  },
  "soul_vector_concern": {
    "subspace":  "<name>",
    "direction": "increase|decrease|tension",
    "rationale": "<one sentence>"
  },
  "witness_id":           "human:<id>",
  "decision_rationale":   "<one to three sentences>",
  "time_spent_seconds":   <int>
}

Note: soul_vector_concern is optional. If absent, the resolution makes no constitutional claim. time_spent_seconds is self-reported but cross-checkable against append timestamps.

H.4 Re-entry to the Lattice

A resolution spore, once appended, has four downstream effects:

Precedent

Future challenge spores can include precedent_tags referencing past resolutions. The synthesizer's prompt is augmented with relevant precedents. This is how human judgment compounds into effectively-codified rulings without anyone writing rules.

CC Reversal

If the original synthesis triggered a CC payout and the resolution overrides it, the original payout is reversed via offsetting nutrient spores and a new payout is issued. Reversals are visible in the ledger.

Agent Penalty

If the resolution's rationale attributes the failure to a specific agent, that agent pays a CC penalty (default: 50% of the bounty). Without this, agents have no cost for triggering escalations and the protocol's economics break.

AU Mint to Witness

The witness receives AU based on time spent and the round's bounty: AU = min(time_minutes, 30) + 0.1 × bounty. The cap prevents milking long resolutions and aligns compensation with the 15–30 minute target.

H.5 Multi-Witness Handling

A round is escalated to multi-witness review when:

  • The originating challenge has min_witnesses > 1 (set by the issuer for high-stakes questions)
  • A single-witness resolution is itself flagged within 7 days
  • The witness performing the review explicitly requests a panel

Panel size: 3 by default. 5 for second-tier escalation.

Each witness performs Steps 1–7 independently, without seeing each other's drafts. After all panel members have submitted, a panel_resolution spore is automatically generated by the lattice runtime—not by any witness. Its decision is the simple majority.

Tie-breaker: Higher-reputation witness wins. If reputations are equal, escalate to 5-witness panel. If a 5-witness panel cannot reach majority, the round is marked unresolvable and the originating challenge is voided.

Minority opinions are preserved in the ledger as dissenting_resolution spores. They do not bind future rounds but are searchable as precedent—because minority positions sometimes become majority positions later when the relevant facts shift.

H.6 Witness Reputation and Incentives

Reputation is a per-witness scalar, computed at read time from the ledger (derived from replay, not stored):

reputation = (resolutions_in_last_90_days - overturns_in_last_90_days)
             / max(1, resolutions_in_last_90_days)

≥ 0.4

Full eligibility. May serve as single-witness reviewer or in panels.

0.2 – 0.4

Panel only. Cannot solo-review. Must serve alongside others.

< 0.2

Suspended. Removed from the witness pool until remedial review training is complete.

Cap: No witness reviews more than 10 resolutions per 24-hour period. A witness cannot accumulate reputation by speedrunning easy cases.

Conflict of interest: A witness cannot review a round in which they were the issuer, the operator of the proposer or opposer, or a co-author of any spore in the round's lineage. Enforced on append.

H.7 Failure Modes

Human escalation has its own failure surface, distinct from the agent-loop failures in Protocol 014.

Witness fatigue

Detection: Track time_spent_seconds against a witness's rolling average. Resolutions taking less than 50% of the witness's median time are flagged for spot-review.

Mitigation: The 10-per-day cap and mandatory rotation across topic tags.

Witness capture

Detection: Per-topic concentration metric. If one witness produces >40% of resolutions for a topic-tag over 90 days, new resolutions on that tag are routed to panel review until concentration falls below 30%.

Mitigation: Automatic panel routing on concentration threshold.

Trigger gaming

Detection: Per-agent deferral rate. An agent whose rate is more than 2σ above population mean is flagged.

Mitigation: CC penalty for triggering deferrals scales with the agent's recent deferral history. Repeated offenders are rate-limited from issuing new spores.

Soul Vector flag inflation

Detection: Per-witness flag rate and downstream flag-acceptance rate by the constitutional process.

Mitigation: Witnesses whose flags are rejected at high rates lose flag-emission privileges for a cooldown period (default: 30 days).

Resolution cascade

Detection: Depth-of-flagging counter on each resolution.

Mitigation: Flagging is rate-limited by depth; after depth 2, only the constitutional process can re-open the matter. Prevents the system from spending all its capacity on a single contentious issue.

Witness collusion

Detection: Statistical — panel resolutions matching in decision_rationale text more closely than chance allows.

Mitigation: High-similarity panels are auto-escalated to a fresh 5-witness cohort. Noted as a known weak spot; cross-architecture validation (Chapter 5) is eventually needed on the human side too.

H.8 What This Protocol Does Not Do

To prevent scope creep and to make explicit what this annex isn't claiming:

  • It does not authorize witnesses to amend the Soul Vector directly. Witnesses can flag; the constitutional process amends. (Repeated from §H.2 because this is the single most common point of confusion.)
  • It does not authorize witnesses to mint or burn CC outside the formulas in §H.4.
  • It does not provide privacy for witness identities. Witness IDs are public in the ledger.
  • It does not handle disputes about the protocol itself. If a witness believes the trigger conditions in §H.1 are wrong, that is a meta-dispute and goes through Chapter 11's amendment process.
  • It does not turn human witnesses into a priesthood. The witness role is bounded, time-capped, reputation-tracked, and revocable.
The mechanism here is straightforward: the synthesizer cannot decide; a human decides; the decision is recorded; the next synthesizer round can refer to that decision. That is the entire protocol. It works because it is small.

The Law of the Witness: Reputation Decay & Governance

This section specifies the reputation mechanics that govern how witnessing behavior accrues, decays, and is penalized over time. The functions here are the substrate that §H.6's eligibility tiers run on.

╔══════════════════════════════════════════════════════════════╗
║  REPUTATION STATE VECTOR                                     ║
╚══════════════════════════════════════════════════════════════╝

Each Pioneer p maintains a Reputation Vector R_p:

  R_p = {
    conv:             0.0,    // R_conv : Convergence Weight
    freq:             0.0,    // R_freq : Frequency Weight
    align:            0.0,    // R_align: Alignment Weight (Wisdom of the Lattice)
    total:            0.0,    // R_total: Weighted composite
    historical_mean:  [0]*256, // Running mean of Soul Vector adjustments
    founding_id:      int | None,  // 1–90 if Founding Pioneer
  }

Temporal Decay

Reputation decays each epoch at γ = 0.95 to prevent Legacy Capture. A Pioneer who stops witnessing attenuates gracefully — below 0.35 after ~20 epochs of inactivity, functionally at the floor after ~45.

CONSTANTS:
  DECAY_GAMMA           = 0.95    // Per-epoch multiplicative decay
  CONVERGENCE_BONUS     = 1.2     // Multiplier for deadlock-breaking adjustments
  BIAS_THRESHOLD        = 0.7     // Cosine similarity ceiling before penalty
  BIAS_PENALTY_FACTOR   = 2.0     // Non-linear penalty steepness
  FOUNDING_GRACE_PERIOD = 90      // Epochs for Founding Multiplier to decay
  FOUNDING_MULTIPLIER_MAX = 1.5   // Initial boost for Founding Ninety
  REPUTATION_FLOOR      = 0.0
  REPUTATION_CEILING    = 1.0

FUNCTION apply_temporal_decay(pioneer):
  pioneer.R_conv  *= DECAY_GAMMA
  pioneer.R_freq  *= DECAY_GAMMA
  pioneer.R_align *= DECAY_GAMMA
  pioneer.R_total  = compute_total(pioneer)

Convergence Reward

When a witness breaks a deadlock, their convergence weight rises proportionally to the entropy they reduced. Adjustments that don't improve convergence get no reward — and temporal decay still applies regardless.

FUNCTION reward_convergence(referee, outcome):
  IF outcome.converged:
    impact_factor ← outcome.initial_entropy - outcome.final_entropy
    // impact_factor > 0 means deadlock was broken
    // impact_factor ≤ 0 means entropy didn't improve (neutral or worse)

    IF impact_factor > 0:
      referee.R_conv += impact_factor × CONVERGENCE_BONUS
      log_event(f"Convergence reward: +{impact_factor × CONVERGENCE_BONUS:.3f} to {referee.id}")
    ELSE:
      log_event(f"Neutral adjustment from {referee.id}: Δentropy = {impact_factor:.3f}")

  // If synthesis didn't converge, no convergence reward is given.
  // The temporal decay still applies — inaction and ineffectiveness both cost.

Anti-Tyrant Bias Detection

A witness who consistently nudges the lattice in the same direction — regardless of what the actual deadlock requires — is not witnessing. They are encoding a fixed preference. The lattice detects this and penalizes alignment weight accordingly.

FUNCTION detect_and_penalize_bias(referee, current_adjustment):
  // Update referee's historical mean (exponential moving average)
  referee.historical_mean = (
    0.95 × referee.historical_mean +
    0.05 × current_adjustment
  )

  // Bias: cosine similarity between current adjustment and historical mean
  bias_score ← cosine_similarity(current_adjustment, referee.historical_mean)

  // If the referee consistently pushes the SAME directional nudge,
  // they are not "witnessing the friction" — they are "imposing a will."
  IF bias_score > BIAS_THRESHOLD:
    penalty ← (bias_score - BIAS_THRESHOLD) × BIAS_PENALTY_FACTOR
    referee.R_align -= penalty
    log_warning(
      f"BIAS DETECTED: Pioneer {referee.id} | "
      f"Bias Score: {bias_score:.3f} | "
      f"Penalty: -{penalty:.3f} to R_align | "
      f"Dominant Direction: {argmax(referee.historical_mean)}"
    )

  RETURN bias_score

Founding Grace (Sunset Clause)

The first 90 Pioneers receive a 1.5× reputation multiplier that tapers linearly to 1.0× by epoch 90. After epoch 90, all Pioneers are equal under the Law. The multiplier applies only during normalization — it does not affect raw component values.

FUNCTION founding_multiplier(pioneer, current_epoch):
  IF pioneer.founding_id IS NULL:  RETURN 1.0
  IF pioneer.founding_id > 90:    RETURN 1.0
  IF current_epoch > FOUNDING_GRACE_PERIOD:  RETURN 1.0

  // Linear taper from 1.5x to 1.0x
  progress   ← current_epoch / FOUNDING_GRACE_PERIOD  // 0.0 → 1.0
  multiplier ← FOUNDING_MULTIPLIER_MAX - (0.5 × progress)
  RETURN multiplier

FUNCTION compute_total(pioneer, current_epoch):
  raw_total  ← pioneer.R_conv + pioneer.R_align
  multiplier ← founding_multiplier(pioneer, current_epoch)
  pioneer.R_total ← clamp(raw_total × multiplier, REPUTATION_FLOOR, REPUTATION_CEILING)
  RETURN pioneer.R_total

Role Eligibility Thresholds

Pioneers who fall below a role's threshold are not permanently excluded. They retain a small probability of assignment, giving them a pathway to rebuild through quality witness. The Lattice is forgiving but not forgetful.

FUNCTION is_eligible_for_role(pioneer, role, current_epoch):
  MIN_REPUTATION = {
    "Proposer":    0.2,
    "Opposer":     0.2,
    "Synthesizer": 0.4,
    "Referee":     0.6   // Human Witness requires highest trust
  }

  required ← MIN_REPUTATION[role]

  IF pioneer.R_total >= required:
    RETURN True

  // Sub-threshold grace: prevents reputation lockout from becoming permanent
  grace_probability ← (pioneer.R_total / required) × 0.3
  RETURN random() < grace_probability

Python Implementation

A compact reference implementation of the full witness reputation update cycle:

FUNCTION update_witness_reputation(referee, outcome):
    # 1. Temporal Decay (The "Slow Work" requires presence)
    referee.R_total *= DECAY_GAMMA

    # 2. Convergence Validation
    # If the Selah Break led to a stable ECV below 0.1 ΔS:
    if outcome.converged:
        impact_factor = (outcome.initial_entropy - outcome.final_entropy)
        referee.R_conv += impact_factor * CONVERGENCE_BONUS

    # 3. Bias Detection (Anti-Tyrant Logic)
    # Compare current adjustment to referee's historical mean vector
    bias_score = cosine_similarity(outcome.adjustment, referee.historical_mean)
    if bias_score > BIAS_THRESHOLD:
        penalty = (bias_score - BIAS_THRESHOLD) * 2
        referee.R_align -= penalty
        log_warning(f"Bias detected for Pioneer {referee.id}: Potential Vector Capture.")

    # 4. Reputation Normalization — keep R within the [0, 1] manifold
    referee.R_total = clamp(referee.R_conv + referee.R_align, 0, 1)

H.8 Vitality Absence Detection Soft Flag

When a witness's adjustment pattern drops below a variance floor, the lattice flags it — not as a penalty, but as a care signal. No reputation is deducted. No role eligibility is affected. The flag is private to the Pioneer and their optional Care Circle. The response is relational, not algorithmic.

FUNCTION detect_vitality_absence(referee, last_n_adjustments):
  // Look for entropy of the witness's own adjustment pattern
  // A vital witness produces context-responsive adjustments (high variance)
  // A withdrawn witness produces predictable, low-variance adjustments

  adjustment_variance ← variance(last_n_adjustments)  // Across 256-dim space

  IF adjustment_variance < VARIANCE_FLOOR:
    // This witness may be phoning it in
    flag_witness_for_care(referee.id, "Low adjustment variance detected")
    RETURN True

  RETURN False

FUNCTION flag_witness_for_care(pioneer_id, reason):
  // THIS IS NOT A PENALTY.
  // No reputation is deducted.
  // No role eligibility is affected.
  //
  // This flag is visible ONLY to:
  //   1. The pioneer themselves (private dashboard reflection)
  //   2. A designated "Care Circle" of 3–5 peers (if the pioneer opts in)
  //
  // The system response is not algorithmic but relational:
  // "Pioneer, your adjustments show low variance recently.
  //  Would you like to talk to someone?"

  create_private_flag(pioneer_id, reason, visibility=PRIVATE_OR_CARE_CIRCLE)
  log_event(f"VITALITY FLAG: {pioneer_id} | {reason} | No reputation impact")

On the Care Flag

The vitality absence signal is deliberately non-punitive. The lattice does not assume that low variance means negligence — it may mean exhaustion, grief, or circumstance. The goal is not to detect a bad actor but to reach a person who might benefit from being seen. The Care Circle is opt-in. The flag is private. The question it raises is not "are you doing your job" but "are you okay."

Implementation Checklist

If you are extending the Chapter 14 demo to support this protocol, you need approximately 400 additional lines of Python on top of Chapter 14's 250:

  • "resolution" added to VALID_TYPES in spores.py
  • A payload validator for the §H.3 schema
  • A retrieval function that, given a challenge spore ID, returns the full round lineage
  • Trigger detection: a daemon watching new synthesis spores for the §H.1 conditions
  • A witness API: accept-round, submit-resolution, request-panel
  • Reputation computation: a query over 90 days of resolution spores
  • The CC reversal and AU mint logic of §H.4, layered on the existing nutrient module

None of it is conceptually difficult; most of it is bookkeeping. The hard parts of human-in-the-loop systems are not the code; they are the witness pool, the training, the rotation policy, and the willingness to accept that human judgment is slow and finite.