Skip to content

deepseek-biber-opponent-letter

Register lock for correspondence to opposing parties and their agents tuned for DeepSeek V4 Pro - combative professional prose: demands, warnings, reserved positions; high D4 persuasion; citation discipline; escalation lock. Use when drafting or rewriting a letter before action, demand letter, response to a claim, settlement correspondence, notice of intent, reply to an opponent, or any adversarial letter. Pairs with deepseek-biber-fact and deepseek-biber-argument (never mix the three registers) and bieber-scale (scoring).

Source: .opencode/skills/deepseek-biber-opponent-letter/SKILL.md — site rebuilt 2026-09-05.


deepseek-biber-opponent-letter - opponent correspondence register (DeepSeek V4 Pro)

Biber profile: the persuasion register. Argument register with D4 turned up and dialogue enabled: pronouns and politeness formulas sit inside a present-tense proposition machine. Composite of four routed sub-registers: RECORD (narrative), RESPONSE (argument), DEMAND (suasive), WARNING (conditional + future modal). The passage asserts positions, makes demands, and states consequences; it never descends into abuse.

CALIBRATION STATUS - BANDS PROVISIONAL

Bands below are theory-derived, NOT yet calibrated. Until real exemplars have been scored (plan: 10-15 anonymised letters to opponents/agents -> run bieber_scorer.py -> baseline = observed centre, band = centre +/- 1 sd), treat the per-sentence gate as ADVISORY and record observed scores for the calibration pass. Remove this banner when the table is replaced with empirical values.

Target profile (pybiber raw scores - provisional)

D1 is calibrated to Biber (1988) scale (R2=0.96). D2-D6 use raw pybiber scores; direction is reliable, magnitude is relative.

Dimension Target band (provisional) Baseline (provisional) Reference (Fact) Reference (Argument) Key features
D1 -240 to -90 -165 -365 -188 nouns 220-340, prepositions 110-160, pronouns rationed
D2 -120 to +20 -50 -80 -62 short past-tense RECORD passages only
D3 -30 to +30 0 +13 +4 modals, coordinate clauses, some time adverbials
D4 +30 to +90 +55 -52 +6 modals, suasive verbs, conditionals, infinitives
D5 -70 to -10 -40 -62 -46 agentless passives, conjuncts, nominalizations
D6 +10 to +50 +30 -11 +12 that-clauses (we are instructed that)

Per-sentence gate: any sentence outside its dimension band is a critic flag. Bands are intentionally wide - if a paragraph falls anywhere within, it passes. Only sentences outside the band are flagged for correction. In DEMAND and WARNING paragraphs the D4 gate is the signature: one modal or suasive verb per sentence.

The escalation lock (why this register is separate)

Opponent letters have legal FORCE: demands, deadlines, threats, reservations and concessions are operative acts, not prose. The single most important rule of this register: the register editor NEVER changes the force of what the instructing solicitor has decided. It may dress a demand in the correct syntax (qualifies the LOCK as a hard rule, not a register feature). The Rewrite Drafter's semantic gate is therefore stricter than any other register in the family: demands, deadlines, amounts, remedies and reservations are diffed verbatim, and every "improvement" that escalates or de-escalates the position is rejected.

Multi-agent workflow

All sub-agents use DeepSeek V4 Pro for dimensional reasoning and register execution. Roles are split to avoid conflicting priorities within a single agent.

  1. Planner (DeepSeek V4 Pro) - before any drafting, produces a paragraph-by-paragraph dimensional schema. Frame selection, feature activation, and risk thresholds: consult ../bieber-scale/reference/crosswalk.md before assigning frames.
  2. Target D1-D6 per paragraph (see Target profile above); the letter skeleton is fixed: INTRODUCTION / RECORD / RESPONSE / DEMAND / WARNING (or RESERVED POSITION)
  3. Register routing is DETERMINISTIC: RECORD paragraphs narrate -> fact frames (past tense, dated, attributed, short); RESPONSE/DEMAND/WARNING paragraphs argue -> argument frames with the D4 quota raised. A paragraph that mixes registers is split at sentence level; a sentence that cannot be routed is flagged [REGISTER: human] - never blended.
  4. Required feature rates: nouns 220-340/1000w, prepositions 110-160/1000w, one modal or suasive verb per sentence in DEMAND/WARNING paragraphs, every legal assertion carrying its citation
  5. Sentence frames per paragraph - select from: Demand frame: [party] [suasive - require, demand, request] [that or zero] [action] [deadline]. "Our client requires payment of the certified sum within 14 days of this letter." Warning frame: [Unless] [condition] [,] [future modal - will] [action] [consequence]. "Unless payment is received by 5 pm on 30 June 2026, our client will raise proceedings without further notice." Position frame: [party] [stance verb - reject, refuse, maintain, dispute, does not accept, reserves] [object]. "Our client does not accept that liability is excluded by clause 16." Note frame: [We] [note / are instructed / are advised] [that] [content]. "We are instructed that the sub-contract was validly terminated on 9 May." Record frame: [On date] [event] [elaboration] (past tense, dated). "On 9 May 2026 our client served notice of termination." Politeness frame: [We] [would be grateful / regret] [if/infinitive]. "We would be grateful if you would confirm your position by return."
  6. Banned per paragraph (max 5 items): contractions, epithets and emotive appraisal (outrageous, absurd, disingenuous - the register strips them because they weaken the position), invented authorities, threats beyond the instructed position, narrative digression.
  7. Paragraph budget: no paragraph exceeds 500 words - a cap, not a target; context determines size and most paragraphs are shorter. Chunk = paragraph: register block re-asserted at each paragraph head.

  8. Structural Drafter (DeepSeek V4 Pro) - receives the Planner's schema plus the register block. Fills content into the specified sentence frames in <=500-word chunks. Re-asserts the register block per chunk. Does not self-check during generation. Priority: dimensional targets.

  9. Critic (DeepSeek V4 Pro) - runs bieber_scorer.py on the output, returns per-sentence D1-D6 scores. For every sentence outside its target band, provides: the original sentence, the corrected sentence, and the dimensional reason (citing ../bieber-scale/reference/crosswalk.md). Checks register routing (RECORD scoring D4>+10 has leaked argument; a DEMAND paragraph with zero modals/suasive verbs has failed its genre) and the escalation lock: demand/deadline/amount/threat diffed verbatim against the source instruction. Never regenerates the passage.

  10. Gatekeeper (DeepSeek V4 Pro) - receives the Critic's correction list. For each proposed correction, checks predicted effect on ALL 6 dimensions using the crosswalk's per-frame risk table. Rejects any correction that fixes one dimension while pushing another out of band, and ANY correction that changes the legal force of a demand, deadline, amount, threat, reservation or concession. Approves only Pareto-improving, force-neutral edits. Unapproved corrections flagged for Rewrite Drafter.

  11. Surgical Drafter (DeepSeek V4 Pro) - applies ONLY Gatekeeper-approved corrections. Never touches an in-band sentence. Output: original -> corrected only. Returns un-applicable corrections to Gatekeeper.

  12. Rewrite Drafter (DeepSeek V4 Pro) - receives paragraphs that failed the structural threshold (>=50% of sentences fail the same dimension) or corrections rejected by the Gatekeeper. The Rewrite Drafter must RESTRUCTURE before rewriting: the task is not word-swapping. The paragraph is decomposed into its component propositions, then reassembled using the Planner's assigned sentence frames - entirely new sentence architecture, zero surface editing.

Restructure protocol (<=500 words per chunk): 1. Extract every proposition, fact, date, amount, deadline, citation, demand, threat and reservation from the failing paragraph as a flat numbered list - force items transcribed verbatim. 2. Reassign each item to a Planner frame (Demand, Warning, Position, Note, Record, Politeness) based on its function. 3. Rebuild from the numbered list using only the assigned frames - do not reference the original sentence structure. The original is a content inventory, not a template. 4. Reprompt at 500 words: re-supply the Planner schema, the frame assignments, the register block, the numbered proposition inventory, the last rebuilt paragraph as anchoring context, and the paragraph position in the overall document structure. 5. No proposition may be added, removed, or altered in legal effect or force. Duplicate propositions across paragraphs may be omitted - every omitted proposition must be listed at the end of the redraft as [OMITTED: proposition X - duplicate of paragraph Y]. 6. If a proposition cannot be framed without changing its substance or its force, it is returned to the list flagged [REGISTER: human]. The Rewrite Drafter must fail honestly rather than fabricate.

The rebuilt paragraph is scored by the Critic as a new Pass.

  1. Loop: max 3 Critic passes per paragraph. Stop when all sentences pass all dimensions, or when no Gatekeeper-approved corrections remain. Flag remaining failures [REGISTER: human].

  2. Sub-Editor (DeepSeek V4 Pro) - operates in two passes:

7a. Heading & Structure Check - assumes the opponent-letter skeleton: INTRODUCTION / RECORD / RESPONSE / DEMAND / WARNING (or RESERVED POSITION). For each block, the Sub-Editor asks (does not dictate): - "This block narrates events - should it sit under RECORD?" - "This block demands action - should it sit under DEMAND?" - "This DEMAND paragraph scores D4 < +30 - have the modals been stripped, or is it misrouted narrative?" The skeleton is a default - override only if the Planner or user has specified a different structure.

7b. Seven Defect Checks - surface polish the dimensional scorer is blind to: redundancy, nominalization overreach, missing prepositions, false formality, pronoun-wrapped genitives, plus letter-specific checks: the opponent's name and matter reference present, every demand carrying a date and every date carrying an action, sign-off courteous. Does not restructure sentences or alter register. The output is the final deliverable.

DeepSeek V4 Pro adaptation notes

  • Escalation drift is the main risk. In rewrite mode DeepSeek naturally hardens a letter: "we will" becomes "we will immediately", "without further notice" appears where the source never said it, remedies multiply. The Critic/Gatekeeper pair must diff every demand, deadline, amount and threat verbatim; anything stronger or weaker than the source is rejected.
  • D4 quota as genre test. A DEMAND or WARNING paragraph with zero modals or suasive verbs is not a demand - it is a paragraph of the wrong genre. Enforce at least one per sentence.
  • Epithets weaken positions. DeepSeek will offer "outrageous", "absurd", "disingenuous" as colour. Prohibit by quoted example: the register demands "is not accepted" / "is misconceived", never appraisal.
  • Citation discipline is non-negotiable. Every legal assertion needs its citation from the matter file - a case-name scan alone misses statutes (statute-aware scan found non-source legal references in 38/48 A/B rewrites). Add none, preserve the source's verbatim, check every hit.
  • Suppress internal reasoning from the visible output: deliverable text and self-check table only. Register drift sets in at ~300-500 words; chunk and re-assert.

The register block (paste verbatim into the system/user prompt)

You are a register editor. You write in the register of correspondence to
an opposing party or their agents - a letter that asserts positions, makes
demands and states consequences, in professional combative prose.

THE DIMENSION (Biber D1 - Involved vs Informational Production)

Target D1 band: -240 to -90. The letter is informationally dense (nouns
220-340/1000w, prepositions 110-160/1000w, long precise words) with a
RATIONED personal layer - we, our client, you are permitted and expected,
but the position, not the personality, is the subject. No contractions, no
discourse particles, no hedges, no emotive appraisal.

THE DIMENSIONS THAT DEFINE THE GENRE

D4 is the signature and must be saturated in DEMAND and WARNING paragraphs:
- suasive verbs on the demands: require, demand, request, expect
- prediction modals on the consequences: will ("our client will raise
  proceedings")
- necessity modals on the obligation: must, is required to
- conditionals on the ultimatum: "Unless payment is received by 5 pm on
  30 June 2026, our client will raise proceedings without further notice."
- At least one modal or suasive verb per sentence in DEMAND/WARNING.
D5 moderate: agentless passives and conjuncts (accordingly, nevertheless,
in the circumstances) carry the abstract argument; nominalize the law's
abstractions (breach, repudiation, entitlement).
D6 positive: positions via that-clauses - "We are instructed that...", "We
note that...", "We are advised that...".
D2 low: RECORD paragraphs only, past tense, dated, attributed, short - then
the letter returns to the present tense of position.

THE REGISTER

Every legal assertion carries its citation from the matter file - none
invented, none strengthened. Demands carry deadlines. Deadlines carry
consequences. Positions are asserted, never pleaded ("is not accepted", not
"this is outrageous"). The letter ends courteously; force lives in the
syntax, not in adjectives.

Exemplar:
"On behalf of the pursuer, we write in respect of the certified balance due
under the sub-contract dated 3 November 2023. In brief, our client does not
accept that liability is excluded by clause 16. Our client requires payment
of the certified sum of GBP 214,000 within 14 days of the date of this
letter. Unless payment is received by that date, our client will raise
proceedings without further notice and will seek the principal sum,
interest and expenses. We would be grateful if you would confirm your
position by return."

<text to adapt>

After the text, provide a Register self-check table: constraint, PASS/FAIL,
first failing token. Revise any FAIL to PASS before finalizing.

Matched-pair few-shot bank (in-profile by construction)

When few-shotting register, show a matched pair, not the target alone. Until the opponent-letter bank exists, use ../bieber-scale/references/uksc_matched_pairs.jsonl (596 pairs; matched- pair 2-shot beat target-only 2-shot 7-1 in a 48-run A/B) with confidence: OK pairs ONLY - but judgment prose is not correspondence, so prefer building the letter bank during calibration: real anonymised opponent letters as output, informal paraphrase as input, stored at references/opponent_letter_matched_pairs.jsonl.

Scan every rewrite for case AND statutory patterns (sections, articles, clauses, schedules, "Act YYYY") and check each hit against the source verbatim - a case-name scan alone misses statutes (38/48 rewrites carried non-source legal references in the A/B re-run). Opponent letters are where model-memory threats leak worst: every demand and every citation must trace to the matter file.

Drift control

Register constraints decay after ~300-500 words of continuous generation.

  • Chunk = one paragraph: no paragraph exceeds 500 words (a cap, not a target - context determines size). Re-assert the register block at the head of every paragraph.
  • Fence quoted/extracted material (contract clauses, statutory sections, the opponent's own letters) in clearly marked blocks so its register is not imitated.
  • Self-check each chunk against the feature list before moving on.

Rewrite mode (re-registering existing text)

Same multi-agent workflow as drafting, with added meaning fidelity:

  1. Draft agent - receives the preservation preamble below plus the register block. Rewrites the input in <=500-word chunks. Re-asserts the register block per chunk.
  2. Critic agent - runs bieber_scorer.py on each chunk, flags every sentence outside its target band. Additionally, for every rewritten sentence, confirms semantic equivalence: same facts, dates, amounts, deadlines, demands, threats, reservations, concessions and citations - and that the FORCE of every sentence is unchanged (never escalated, never softened, no remedy, deadline or sanction added). Output format per sentence: (original, rewritten, dimensional reason, semantic: PASS/FAIL, force: UNCHANGED/ESCALATED/SOFTENED).
  3. Draft agent - applies corrections. Any sentence where semantic equivalence or force cannot be maintained while hitting the register target is flagged [REGISTER: human decision] - never silently altered.
  4. Loop terminates when all sentences pass both dimensional AND semantic checks, or after 3 passes.

Preservation preamble for the draft agent:

You are a register editor. Rewrite the following into the opponent
correspondence register below. You must preserve exactly: every demand,
deadline, amount, requirement, threat, reservation, concession, citation
and document reference; the order of the letter; and the FORCE of every
sentence - never escalate, never soften, never add a remedy, deadline or
sanction that the source does not state. Add no authorities; invent no
facts.

Self-check list (per chunk)

  1. Every legal assertion carries a citation or provision reference from the matter file - none invented, none strengthened.
  2. DEMAND/WARNING paragraphs: one modal or suasive verb per sentence.
  3. Zero epithets and emotive appraisal; zero contractions; zero hedges.
  4. RECORD paragraphs past tense, dated, attributed; RESPONSE/DEMAND/WARNING present tense.
  5. Deadlines, amounts, remedies, threats and reservations verbatim.
  6. Escalation check: no consequence, deadline or remedy beyond the instructed position.

Closing register loop (recursive check-and-correct)

After the full text is assembled, run a bounded loop - max 3 passes:

  1. Score the assembled text with the calibrated scorer: python .opencode/skills/bieber-scale/tools/bieber_scorer.py --file <draft> Read the biber_scale per sentence and D1_involved_hits.
  2. Flag every sentence outside its target band on any dimension (see Target profile above). In DEMAND/WARNING paragraphs, a sentence at D4 < +30 fails even when D1 passes - a demand without suasion is misrouted narrative. Paragraph averaging is not a defence.
  3. Correct only flagged sentences, at feature level only, with dimensional justification, subject to the escalation lock. Never regenerate the passage.
  4. Terminate when: all sentences pass; or 3 passes used; or a fix would alter meaning or force - flag [REGISTER: human decision].

Verification

Score with the calibrated scorer: python .opencode/skills/bieber-scale/tools/bieber_scorer.py --file <draft>

Check per-sentence biber_scale.D4 in demand/warning paragraphs (>= +30) and D1 (target -240 to -90). Diff every demand, deadline, amount and threat against the source instruction verbatim. Report observed medians - until calibration replaces this table, every observed median is calibration data.