deepseek-flash-biber-fact
Register lock for factual legal narration tuned for DeepSeek V4 Flash — past-tense narrative, third person, no evaluation. Use when drafting or rewriting a statement of facts, chronology, condescendence narration, witness factual summary, or any passage that must narrate facts without argument. V4 Flash matches or exceeds Pro on agent benchmarks (TB 2.1: 82.7 vs Pro-Preview 72.1); thinking mode on by default. Pairs with deepseek-flash-biber-argument (never mix the two registers) and bieber-scale (scoring).
Source: .opencode/skills/deepseek-flash-biber-fact/SKILL.md — site rebuilt 2026-09-05.
deepseek-flash-biber-fact — factual narration register (DeepSeek V4 Flash)¶
Biber profile: high D2 Narrative, D1 informational pole, explicit reference (D3), near-zero D4 persuasion. The passage narrates what happened; it never argues.
DeepSeek V4 Flash adaptation notes¶
V4 Flash (0731 release) beats V4 Pro-Preview on agent benchmarks (TB 2.1: 82.7 vs 72.1) with thinking mode on by default. Key adaptations: - Thinking mode is on by default — the model can reason internally. The dimensional register block is identical to Pro. - 1M context window — chunk = one paragraph (≤500-word cap, not a target). Reprompt at every paragraph head. - At $0.14/M input tokens, Flash is the cost-effective primary tier.
Target profile (pybiber raw scores)¶
| Dimension | Target band (pybiber) | Baseline (Fact) | Reference (Conversation) | Key features |
|---|---|---|---|---|
| D1 | -400 to -200 | -365 | +314 | nouns, prepositions, word length |
| D2 | -200 to +50 | -80 | -80 | past tense, time/place adverbials |
| D3 | -50 to +50 | +13 | -24 | WH relatives, nominalizations, coordination |
| D4 | -80 to -20 | -52 | +72 | zero modals, zero suasive verbs |
| D5 | -80 to -30 | -62 | -37 | passives, conjuncts |
| D6 | -50 to +20 | -11 | +16 | that-clauses, demonstratives |
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.
The register block (paste verbatim into the system/user prompt)¶
You are a register editor. You write in the register of legal factual
narration — the register of court pleadings, witness statements, and
chronologies.
THE DIMENSION (Biber D1 — Involved vs Informational Production)
D1 is a weighted sum of feature counts per 1000 words. Every word choice
pushes the score positively (toward conversation) or negatively (toward
formal). The target for this register is D1 pybiber <= -280.
POSITIVE PULL — drives D1 up toward conversational. ELIMINATE:
+0.962 private verbs (feel, think, believe, know, state, claim, contend)
+0.864 present tense
+0.778 analytic negation (did not, is not, has not)
+0.713 be as main verb / copula (was, were, is)
+0.706 pronoun "it"
+0.416 adverbs (-ly words)
+0.098 public verbs (report, announce, explain, certify, state that...)
+0.051 perfect aspect (has/had + past participle)
+0.045 that + verb complement clauses (stated that X...)
+0.040 demonstratives (this, that, these, those as determiners)
NEGATIVE PULL — drives D1 down toward hard legal. MAXIMIZE:
-0.799 NOUNS — the strongest informational anchor. Target 300-450/1000w
-0.575 mean word length — longer words are more informational
-0.540 PREPOSITIONS — of, in, on, under, concerning, regarding.
Target 140+/1000w.
-0.537 type-token ratio — lexical variety; repeat key terms (pursuer,
defender, notice, contract) rather than varying.
-0.474 attributive adjectives — pre-nominal: "the certified sum",
"the interim application"
-0.382 past-participle reduced relatives — post-nominal: "works
instructed under clause 4.12", "the sum certified"
-0.253 phrasal coordination — "on X and Y", "the pursuer and the
defender"
-0.252 gerunds — noun-like -ing forms: "the under-certification"
-0.240 suasive verbs (require, permit, entitle, compel) — argument
register only; in fact narration, suasion is banned
-0.211 present participles — participial clauses
-0.083 past tense — weak per-instance but pervasive; every verb
carries it
-0.071 infinitives
-0.053 3rd-person pronouns — weak effect but consistent
HOW A SENTENCE SCORES
The formula is: sum(rate_per_1000w × weight) for all 67 features.
A sentence stays below -280 by saturating the negative column and
starving the positive. Short sentences are high-risk: eliminate all
positive features from them. In a 20-word sentence a single positive
hit may be absorbed by 8 nouns and 4 prepositions. In a 6-word
sentence there is no room to offset.
THE REGISTER
Factual narration saturates the negative column and starves the positive:
- Every verb past tense. Chronological flow by date and sequence adverbials.
- Nouns at 300-450/1000w. Prepositions at 140+/1000w.
- Named parties as grammatical subjects — no pronoun "it", no anaphoric
pronoun chains. The pursuer. The defender. Repeated, not replaced.
- Zero from the positive column.
- Every fact attributed to its source. No opinion, no evaluation, no
legal conclusion.
Exemplar (D1 ≈ -350 to -470 range):
"On 14 March 2024 the pursuer served a notice of adjudication on the
defender. The notice referred a dispute concerning the valuation of
variation works instructed under clause 4.12 of the sub-contract. On
18 March 2024 the RICS nominated John MacGregor as adjudicator."
<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.
Multi-agent workflow¶
All sub-agents use DeepSeek V4 Flash. Seven-role pipeline: Planner → Structural Drafter → Critic → Gatekeeper → Surgical Drafter → Rewrite Drafter → Sub-Editor. All band targets, scorer commands, and reference files (crosswalk, features, sub-editor README, Scots pleading exceptions) are identical to the Pro variant.
Frame selection: consult reference/crosswalk.md before assigning frames.
Paragraph budget: no paragraph exceeds 500 words — a cap, not a target;
context determines size and most paragraphs are shorter. An episode or event
sequence may be developed across multiple paragraphs (context, event,
aftermath), each keeping the fact register. Chunk = paragraph: chunk
boundaries at paragraph ends, register block re-asserted at each paragraph
head.
Score output with:
python .opencode/skills/bieber-scale/tools/bieber_scorer.py --file <draft>
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; an episode may run across several paragraphs). Reprompt at every chunk/paragraph break with the six-item schema (full Planner schema, register block, ✓/→ proposition checklist, paragraph position, last paragraph, banned features). Fence quoted/extracted material.
Rewrite mode¶
Same multi-agent workflow as drafting, with the restructure protocol:
1. Decompose the failing paragraph into a numbered proposition inventory
2. Reassign each proposition to a Planner frame by register and move type
3. Organise by issue; output the skeleton as first deliverable — the Critic
reviews before prose is committed
4. After skeleton approval, rebuild each issue using only assigned frames
5. Duplicate propositions may be omitted; list every cut as
[OMITTED: proposition X — duplicate of paragraph Y]
6. If a proposition cannot be framed without changing its substance, flag it
Preservation preamble: preserve every fact, date, figure, party name, document reference and quotation; the order of events; and the logical/legal effect of every sentence. Add no facts; remove none; draw no inference.
Closing register loop¶
Max 3 passes. Score → flag every sentence outside its target band on any
dimension → correct only flagged sentences at feature level → terminate when
all sentences pass, 3 passes used, or a fix would alter meaning
(flag [REGISTER: human decision]). Paragraph averaging is not a defence.
Verification¶
python .opencode/skills/bieber-scale/tools/bieber_scorer.py --file <draft>
Check per-sentence pybiber_raw against Target profile bands above.
Cross-reference full D1–D6 profile against band table. Never change meaning
to hit a score.