Skip to main content

Win-Condition Pacing & Earnability (the audit spec)

Win-Condition Pacing & Earnability (the audit spec)

Status: BASELINE 2026-07-17 (session 634b4cf5); RE-MEASURED 2026-07-18 (DIPLOMATIC/ECONOMIC/DOMINATION fixes). Constants-derived analysis + the empirical audit method.

Last updated: September 15, 2026

Blood Lineage — Win-Condition Pacing & Earnability (the audit spec)

Status: BASELINE 2026-07-17 (session 634b4cf5); RE-MEASURED 2026-07-18 (DIPLOMATIC/ECONOMIC/DOMINATION fixes). Constants-derived analysis + the empirical audit method.

Re-run the empirical audit after each phase lands to track drift toward the target.

Parent: vision.md (§ Mode 1 — the ~100-turn Campaign target this doc measures against). Mechanics: progression.md (victory conditions), magic.md (mana/TIME_STOP), military.md (conquest), diplomacy.md (alliances). Method: mcp__llitd-context__play_sequence / batch_playtest on target:'local' (NEVER prod — audits use local).

Why this doc

The owner's directive: "track pacing of the games to earn win conditions." A 4X campaign lives or dies on whether its victory paths are earnable and paced — a win you can never reach is a dead path; a win you reach in 20 turns trivializes the campaign; a win that needs 200 turns outlives the player. The campaign target (vision.md) is ~100 turns. This doc measures every path against that target, flags the ones that miss, and defines the repeatable audit that tracks them as fixes land.

Target pacing bands (what "good" looks like)

Band Turns-to-win Meaning
Too fast < 40 Trivializes the campaign; a path this quick needs a gate or higher threshold
Target ~60–110 The intended campaign length; the fastest path ≈60–80, the slowest ≈100–110
Too slow > 130 Outlives the player's session stamina; lower the cost or raise the rate
Unearnable ∞ A dead victory type — a correctness bug, not a pacing knob

The goal is that all five paths land in the Target band for a player who commits to that path, and that a balanced (non-specialized) player reaches the turn-~100 Twilight reckoning without any single path running away early.

Baseline earnability + pacing analysis (constants-derived, pre-fix 2026-07-17)

Victory Threshold Earnable? Est. pacing (committed build) Verdict
MAGICAL Cast TIME_STOP NO — impossible ∞ CRITICAL: TIME_STOP costs 200 mana but maxMana is a flat 100 and current mana is clamped to it (min(current+regen, maxMana)); casting gates on hasMana(200). No tech/building/spell raises the cap (MANA_SURGE is instant +20, clamped; DIVINE_INTERVENTION is +10% bonuses). Code-confirmed 2026-07-17: maxMana is set in (computeMaxMana / getOrCreateManaPool); LineageManaPool:142 only default-inits a null/zero cap — no path raises it. The whole victory type is unreachable and the victory-progress tracker's final step ("TIME_STOP cast") can never complete.
TECHNOLOGICAL All 5 legendary techs Yes ~150–200 turns at base rate TOO SLOW: 5 legendaries × 200 progress + the Advanced/Medieval/Classical/Ancient prereq chains ≈ 1500–2000 unique progress, and research is one-at-a-time at 10/turn base. Even with Library/Academy research_bonus (~15–20/turn) it is ~100–130 turns for the tech alone; gold-rush (2× gold, ≥4000g per legendary) only partly closes it. Slowest path; misses the target unless the rate rises or the set shrinks.
DOMINATION ≥50% of all territories Yes (after Phase 0) Unknown — moving target BROKEN + UNTUNED: blocked today by the war loop (can't reach/take capitals — Phase 0). AND the denominator grows as you explore (frontier tiles materialize on expansion, ), so "50% of all territories" is a moving goalpost. Needs a stable denominator (e.g. % of claimed/known territory, or a fixed campaign map) + empirical pacing after Phase 0.
DIPLOMATIC 3 active alliances Yes (after Phase 0) Possibly < 40 turns BROKEN + RISK-TOO-FAST: blocked today by diplomacy follow-through (allies don't respond — Phase 0). Once alliances work, forming 3 could be very fast and trivialize the campaign. Likely needs a gate (alliances held N turns, or a rising threshold, or reputation cost). Measure after Phase 0.
ECONOMIC 100,000 gold Yes ~80–120 turns (est.) PLAUSIBLE / MEASURE: firsthand early economy was ~+50 gold/turn; with markets, gold-workers, Prosperity (+50/turn), Banking, and territory income it ramps. Reaching 100k plausibly lands near the target but is highly sensitive to how hard gold scales mid-game. The reference path — measure it empirically and tune the others around it.

Headline findings (ranked):

  1. MAGICAL victory is unearnable — a correctness bug, not a pacing knob. Fix: raise maxMana on the legendary-magic track (a mana-cap tech/building/advancement to ≥200) OR lower TIME_STOP to ≤ the reachable cap. (magic.md notes the cost was deliberately raised 80→200 — so the cap must rise to match.)
  2. TECHNOLOGICAL is too slow — misses the ~100-turn target at base research rate.
  3. DOMINATION denominator is a moving target — 50% of a growing map never converges cleanly.
  4. DIPLOMATIC risks being too fast once it works — needs a gate.
  5. ECONOMIC is the reference path — measure it, tune the rest toward it.

Post-fix scorecard (2026-07-17, — Phase 2)

The Phase-2 campaign-shape pass (campaign.md) tuned each path toward the target band.

Victory Was Fix landed Expected band now
MAGICAL Unearnable (∞) maxMana computed from the magic-tech track; LEGENDARY_MAGIC lifts the cap to 250 (), so 200-mana TIME_STOP is castable. JUnit + scenario_test 2888 prove a legendary-magic kingdom casts TIME_STOP and wins. Earnable, committed arcane build ~100-120 turns (the legendary-magic chain is the long pole)
TECHNOLOGICAL ~150-200 turns BASE_PROGRESS_PER_TURN 10 -> 15 (); SP endTurn now reads the constant instead of a hardcoded 10. ~1690 legendary-chain progress / (15 base + ~8 buildings) ≈ 74 turns of pure research plus economy ramp. ~90-110 turns committed (in band)
DOMINATION Moving denominator Already fixed pre-Phase-2 — LineageWorld.dominationTerritoryBaseline snapshots the territory count on first evaluation (report group 248). Stable denominator; empirical pacing after Phase 0 war-loop
DIPLOMATIC Risk too fast Hold gate: an alliance counts only once held DIPLOMATIC_HOLD_TURNS = 5 turns (, reads treaty.signedTurn). JUnit proves 3 fresh alliances do NOT win; 3 held >=5 turns DO. >= ~5 turns past the 3rd alliance, no instant win
ECONOMIC Reference (~80-120) Unchanged — the reference path the others are tuned around. ~80-120 turns (measure empirically)

Constants (single named source each): .MANA_CAP_LEGENDARY=250; .BASE_PROGRESS_PER_TURN=15; .DIPLOMATIC_HOLD_TURNS=5; .CENTURY_TARGET_TURN=100.

Harness now supports the beeline audit for the tech/mana paths: the setDiscoveredTechnologies and setMana seeds (LineageUiPlayEntry.PlayRequest) let a play_sequence / scenario beeline seed the MAGICAL and TECHNOLOGICAL preconditions the audit below previously could not reach.

EMPIRICAL audit results (session 634b4cf5, 2026-07-17 — first live beeline run, local = Phase-2 build)

First empirical run of the audit above, on target:'local' (the Phase-2 build). Six play_sequence passes (transcripts: temp/{session}/scratchpad/pace-*.md). The view victory readout is the measurement instrument — it prints exact per-path progress (gold, alliances held, territories, techs) every turn, so a committed beeline can be sampled and extrapolated without brute-forcing every path to its win.

Path Empirical result Turns-to-win Band Verdict
DIPLOMATIC UNREACHABLE. 3 runs (pace-diplo 01/02/03): proposing trade + alliance over 5-11 turns leaves view relations at "No active diplomatic relations yet"; victory 0%, 0 alliances held. Proposed treaties/alliances are NEVER resolved by the AI (no accept, no reject, no relation row created). propose alliance/propose trade only ever target ONE faction (Shadowmere) — no faction targeting. infinity Unearnable FAIL — a dead victory path. The Phase-2 hold-gate is correctly wired into the threshold ("Hold 3 alliances for 5 turns each") but is moot: acceptance never happens. Matches the #1 recurring player complaint ("diplomacy hollow — allies send no aid"). Phase 0 did NOT fix alliance acceptance. Routed to a fix task.
ECONOMIC Gold economy is FLAT, not compounding: +200/turn early -> +264/turn after one market. Workers hard-capped at 30 of 50 population; each market only +20 gold. Measured gold: t5=2000, t10=3000, t15=3768, t20=5088 (+264/turn steady). Econ techs are prereq-gated (currency needs Writing; banking needs Currency+Mathematics). ~380 (extrapolated to 100k at +264/turn) Too Slow (>130) FAIL — ~3-4x over target. Economy does not scale: worker cap + flat per-market income + no compounding. Needs steeper mid-game gold scaling (raise worker cap / market value / compounding trade+territory income) OR a lower threshold.
DOMINATION Threshold now reads "Control 30 territories" — FIXED denominator (confirmed live). BUT acquisition is trivially cheap: claim territory costs 100 gold, is UNLIMITED per turn (only gold-gated), the frontier keeps expanding. Empirical (pace-dom): 1->13 territories in ~3 turns of spam-claiming; 30 territories needs only 3000 gold. ~10-15 Too Fast (<40) FAIL — trivial. Denominator is fixed but the PACE is not: unbounded 100-gold claims per turn let a player spam to 30 territories in ~10-15 turns. Needs a per-turn claim cap / rising claim cost / settlement time, or make territory gain require conquest.
MAGICAL Winnable — confirmed structurally by scenario_test 2888 (cast-and-win end-to-end, Phase 2). Mana regen measured at +5/turn; base cap 100 (non-magic kingdom); LEGENDARY_MAGIC lifts the cap to 250. Not fully beelined this pass (research-bound long pole). ~100-120 (est.) ~Target FIXED — now winnable (was infinity). Pacing est. in/near band; full empirical beeline pending (seed setDiscoveredTechnologies/setMana).
TECHNOLOGICAL Research 15/turn confirmed (Phase-2 constant); prereq-tree gating confirmed empirically (Writing->Currency->...). Not fully beelined. ~90-110 (est.) ~Target/slow edge Improved (10->15/turn); est. in-band; full empirical beeline pending.

Empirical headline findings (this run):

  1. DIPLOMATIC victory is UNREACHABLE — alliances never form (3 confirming runs). A whole victory path is dead AND it is the #1 recurring player complaint. HIGHEST-value fix. Root-cause candidates (to validate at fix time): the AI never resolves a proposed treaty/alliance (accept/reject loop missing or broken); secondary defect: no faction targeting on propose alliance/propose trade (always Shadowmere).
  2. ECONOMIC victory ~380 turns — flat, non-scaling economy (~3-4x over the ~100-turn target).
  3. DOMINATION victory is TOO FAST (~10-15 turns) — unbounded 100-gold claims per turn trivialize it (denominator fixed, acquisition rate not). Net picture: 4 of 5 paths are off-target (DIPLOMATIC unreachable, ECONOMIC too slow, DOMINATION too fast); only TECHNOLOGICAL is ~in-band and MAGICAL is now winnable.
  4. MAGICAL confirmed winnable (2888); both MAGICAL + TECHNOLOGICAL still want a full beeline once the tech/mana seeds are exercised.
  5. Voice nit: "proposing a alliance" / "a alliance" — should be "an alliance" (diplomacy handler).

Findings 1-2 are engine fixes routed to prod via the queue, NOT folded into Phases 3-5 (which are factions / Eternal-Realm / scenarios). Re-run this audit after those phases land AND after the fixes, and complete the MAGICAL/TECHNOLOGICAL/DOMINATION beelines.

RE-MEASUREMENT after fixes (2026-07-18) — DIPLOMATIC, ECONOMIC, DOMINATION

fixed the three findings above. Re-run of the empirical audit on target:'local', play_sequence transcripts under temp/play-sequence/ (diplo-fix-verify2*, diplo-pale-court-alliance, econ-worker-verify*, dom-pace-verify). All three now land in or near the target band.

Path Root cause + fix Empirical result (2026-07-18) Turns-to-win Band Verdict
DIPLOMATIC never called the existing AIPersonality.calculateAllianceLikelihood formula — it used a flat relation > trust_threshold || diplomacy > 70 gate that only 1 of 6 personality archetypes could ever pass at neutral relation, with no per-treaty-type weighting, so a proposal was rejected forever with no route to acceptance. Fixed: evaluateTreatyProposal now computes real relation, mutualEnemyCount, powerDifference, and a per-treaty-type commitment bonus (NON_AGGRESSION +25, TRADE_AGREEMENT +15, ALLIANCE +0), accepting at likelihood >= 50. Secondary fix: named treaty-proposal targeting (propose alliance to <name>) via parseProposeTargetName/resolveRivalByName. Voice nit fixed: "a alliance" -> "an alliance" (article() helper). Confirmed end-to-end: propose treaty (NON_AGGRESSION) is accepted within 1 turn for an AGGRESSIVE-personality rival (The Iron Compact) — view relations shows "Active treaties, 1. NON_AGGRESSION with The Iron Compact." (was "No active diplomatic relations yet" forever, pre-fix). propose alliance to the Pale Court (DIPLOMATIC personality) accepted within 1 turn — view relations shows "Active treaties, 2. ... ALLIANCE with The Pale Court." propose alliance to Zorblatt (nonexistent) correctly returns "There is no realm called zorblatt." Reachable within 1-3 turns per alliance for a courtable faction (DIPLOMATIC/MERCHANT/PEACEFUL accept immediately at neutral relation); harder factions (AGGRESSIVE/SCHOLAR/MYSTIC) need relation built via accepted lighter treaties first. 3 alliances + the existing DIPLOMATIC_HOLD_TURNS=5 gate puts a full Diplomatic win at roughly 15-30 turns for a player who courts the 3 friendliest available rivals — well inside the target band (not re-earned as "too fast": alliance quality/availability is capped by which factions the campaign's random 3-of-6 roster contains). Target FIXED — now winnable and reachable within a few turns per alliance, matching the acceptance criteria.
ECONOMIC Worker gold production (, hardcoded 5/turn), worker assignment cap (LineageKingdom.getMaxAssignableWorkers, 60% of population), and MARKET_GOLD (20/level) combined to a flat, non-compounding economy. Fixed (all in ): WORKER_PRODUCTION_PER_TURN 5->8, WORKER_ASSIGNMENT_CAP_PCT 0.6->0.75, MARKET_GOLD 20->50. Committed beeline (assign workers to gold, build markets, claim 2 extra territories + markets, let population compound via food surplus): turn 1 gold=1290 (was 1200 at the old rate); by turn 23 (3 territories, 3 markets, pop 132) gold=14,195 at +870/turn; by turn 33 (workers scaled to pop 146) gold=25,465 at a plateaued +1127/turn. Extrapolating the turn-33 rate to the 100,000 threshold: (100,000 - 25,465) / 1127 ≈ 66 more turns -> ~99 turns total. ~99 turns (measured extrapolation from a live committed beeline) Target (~90-110) FIXED — lands in the target band. ~3.8x the pre-fix rate; a real 100-turn run would also balance food workers (this beeline let stability drift to 40 from an all-in gold push), which would round out the curve rather than change the conclusion.
DOMINATION claim territory cost a flat 100 gold with NO per-turn limit (), so a treasury-rich kingdom could spam-claim the ever-expanding frontier ('s lazy frontier-tile materialization) straight to the 30-territory threshold in ~10-15 turns. Fixed: one claim per turn (LineageKingdom.lastTerritoryClaimTurn / hasClaimedTerritoryThisTurn) plus a rising per-claim cost ( = 100 + 40 per territory already owned). Confirmed live: a 2nd claim territory in the same turn is blocked ("Your kingdom has already claimed a territory this turn."); the 2nd claim (after ending the turn, 2 territories owned) costs 140 gold as designed, matching territoryClaimCost(2)=140; the 3rd would cost 180. >= 29 turns minimum (hard floor from the one-claim-per-turn cap alone, 29 more claims needed after the starting capital) plus the turns needed to fund the rising total cost (~19,140 gold across all 29 claims) from a real economy — estimated ~60-100 turns for a committed expansion build given the ECONOMIC fix above supplies that gold well within that window. Full 30-territory beeline not run to completion this pass (bounded estimate from the cap + cost mechanics, not a full playthrough). Target (~60-110, estimated) FIXED — mechanically confirmed; empirical full-beeline turn count is an estimate, not a completed playthrough. Re-run the full claim-to-30 beeline in a future pass to replace the estimate with a measured number.

Constants (single named source each): .TREATY_ACCEPTANCE_THRESHOLD=50; .WORKER_PRODUCTION_PER_TURN=8; .WORKER_ASSIGNMENT_CAP_PCT=0.75; .MARKET_GOLD=50; .TERRITORY_CLAIM_BASE_COST=100; .TERRITORY_CLAIM_COST_PER_OWNED=40.

Updated net picture: all 5 victory paths are now earnable and land in or very near the ~60-110 turn target band (MAGICAL ~100-120, TECHNOLOGICAL ~90-110, DIPLOMATIC ~15-30 per full 3-alliance win, ECONOMIC ~99, DOMINATION ~60-100 est.). The one open item is a full empirical DOMINATION beeline to 30 territories (currently an estimate from the per-turn-cap + rising-cost mechanics, not a measured playthrough) — a candidate for the next audit pass.

DIPLOMATIC winnability CONFIRMED end-to-end (2026-07-18)

The 24706 re-measurement above concluded DIPLOMATIC was "FIXED -- now winnable", but a hands-on verification pass (playtest_finding BL-2026-0718-017) found it was only winnable when the campaign's random 3-of-6 roster happened to contain courtable (MERCHANT/PEACEFUL/DIPLOMATIC) factions. Three gaps remained: (1) a player could not discover WHICH three factions the campaign rolled (the menu never listed them), so named targeting was blind guessing; (2) a bare "propose alliance" only ever hit the first fixed candidate; (3) a "hard" archetype (AGGRESSIVE/MYSTIC/SCHOLAR) rejected a cold ALLIANCE and a cold TRADE_AGREEMENT with no reachable route to acceptance -- and since a Campaign seeds only 3 AI kingdoms and the Diplomatic victory needs 3 alliances, the player must ally EVERY present faction, so one unreachable archetype (present in ~95% of rosters) killed the whole path.

closed all three: establishedRelationshipBonus (+15 per active lighter treaty) makes the ladder NON_AGGRESSION -> TRADE_AGREEMENT -> ALLIANCE reach acceptance for EVERY archetype; positional ("propose alliance to 2") + article-insensitive name resolution plus a rival-roster diplomacy menu make all three factions reachable.

Path Empirical result (2026-07-18) Turns-to-win Band Verdict
DIPLOMATIC WINNABLE end-to-end, confirmed across every roster type. Three fresh target:'local' beelines, each a different random 3-of-6 roster, courted all 3 rivals up the ladder by positional index and each reached the Diplomatic victory ("Victory, my liege! Allied with 3 kingdoms - diplomatic supremacy!"; view victory -> "Diplomatic victory: Achieved!"). Rosters covered the HARDEST archetypes: the AGGRESSIVE Iron Compact, the MYSTIC Ashen Covenant, and the SCHOLAR Sunfire Dynasty -- all now alliable via the ladder. 9 turns (optimal-beeline floor) -- alliances signed turn 4, won turn 9 (turn 4 + the 5-turn hold). A realistic committed player courting sequentially lands nearer the ~15-30 the 24706 estimate predicted. Target (the fastest path; gated by DIPLOMATIC_HOLD_TURNS=5) CONFIRMED winnable end-to-end -- was only conditionally winnable pre-24772.

Constants: .ESTABLISHED_RELATIONSHIP_BONUS_PER_TREATY=15. Guards: JUnit (hard-archetype ladder acceptance) + game_test.scenario_tests 2916 (end-to-end Diplomatic win, hermetic -- green twice from clean, roster-agnostic).

The empirical audit (run AFTER each phase lands, on `target:'local'`)

For each victory path, drive a committed "beeline" playtest and record the turn the win fires (or how far short after a turn cap). Repeat to confirm determinism where the path is not RNG-bound.

Path Beeline script (seed via play_sequence setup, then end-turn to the win or a 130-turn cap)
ECONOMIC gold-workers + markets + Prosperity + Banking; end-turn, sample gold each turn → turn at 100k
TECHNOLOGICAL research the legendary chain in prereq order (+ research buildings); → turn all 5 legendary done
DIPLOMATIC propose alliance to 3 factions each accepting; → turn 3rd alliance active
DOMINATION raise armies, march + assault capitals (needs Phase 0); → turn ≥50% territory
MAGICAL research BASIC→TIME→LEGENDARY_MAGIC, bank mana; → turn TIME_STOP castable + cast (needs finding 1 fix)

Record per run: turns-to-win, the limiting factor (rate/threshold/cap), and the band it lands in. Emit a per-path pacing table each audit so drift toward the target is visible across phases. The audit is a play_sequence/batch_playtest harness on the local backend — it NEVER runs against prod (prod-is-source-of-truth), and it is a MEASUREMENT pass: it reports pacing, it does not itself tune.

How this feeds the pipeline

  • Finding 1 (MAGICAL unearnable) is a P0-class correctness fix — the cleanest, highest-value earnability bug. Fold into the win-condition pass (vision.md Phase 2, or a dedicated fix).
  • Findings 2–4 are pacing tunes owned by the campaign-shape work (vision.md Phase 2), which owns the ~100-turn target and the victory model.
  • The empirical audit re-runs after Phase 0 (unblocks DOMINATION/DIPLOMATIC), after Phase 2 (validates the tuned bands), and as a standing regression on the win-condition pacing thereafter.
  • DIPLOMATIC/ECONOMIC/DOMINATION (2026-07-18) — fixed and re-measured, see § RE-MEASUREMENT above. Remaining follow-up: a full empirical DOMINATION beeline to 30 territories (currently an estimate), and completing the MAGICAL/TECHNOLOGICAL full beelines seeded via setDiscoveredTechnologies/ setMana.
  • vision.md — the ~100-turn campaign target + build path this audit measures against.
  • progression.md — victory-condition mechanics + thresholds.
  • magic.md — the mana/TIME_STOP numbers behind finding 1.
  • military.md / diplomacy.md — conquest + alliance mechanics (Phase 0).