3.6 KiB
| id | title | priority | status | scope | category | owner | created | updated_at | blocked_by | follow_ups | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| p2-55c | Freepeople capture mechanics | p2 | oos | game1 | combat | combat-dev | 2026-05-07 | 2026-05-14 |
|
Context
Originally deferred because freepeople were assumed to have a multi-stage lifecycle (unlanded → settler → integration) needing its own spec before capture rules could compose with it. Resolved 2026-05-14: the freepeople model that actually shipped in p0-34 does not include that lifecycle, and freepeople capture is structurally inapplicable to the p2-55 mechanism. Closing as oos — scope-folded into p0-34.
Why freepeople capture is structurally inapplicable
Verified against the codebase (2026-05-14):
- No owning player.
public/resources/units/dwarf_wanderer.jsonisfaction: "freepeople",unit_type: "support",keywords: ["freepeople", "non_combatant", "prologue_spawnable"],ai_profile: "freepeople". Freepeople wanderers are unowned NPCs. The p2-55 capture pipeline (mc-turn::TurnProcessor::transfer_captured_unit, ransom queue) indexes bydefender_player: u8— there is no player slot for a freepeople unit to be transferred from, and no player to pay or receive a ransom. - Marked
non_combatant. They cannot mount an attack (attack=0, attack_type=none) and the keyword gates the attack surface. The capture-posture branch inmc-combat::resolvertriggers on a lethal blow against adefender_capturableunit; the surface is never opened for freepeople. - Replaced by a different mechanic. The actual freepeople absorption path that shipped in p0-34 is
mc-ecology::freepeople_camps::scan_and_form_camps— when 3+ freepeople end a turn withinTRIBE_CONVERGENCE_RADIUSof each other, they merge into anomadic_bandcamp (perpublic/resources/villages/freepeople.json). Camps grow → freehavens → potential city-states. Combat capture was never the design — freepeople integrate ecologically, not militarily.
The "unlanded → settler → integration" lifecycle referenced in this objective's original design questions does not exist in the codebase. p0-34 shipped a simpler wanderer / camp / haven model, and that model is the canonical freepeople surface for Game 1.
What the original acceptance bullets become
Freepeople lifecycle spec finalized— not needed. p0-34's wanderer / nomadic_band / freehaven progression is the spec.Capture rules for each lifecycle stage defined and locked— N/A. No combat-capture surface for any freepeople stage.Freepeople unit(s) carry— would corrupt the p0-34 model.capturable: truewith lifecycle-appropriate ransom_multiplierdwarf_wanderer.jsonintentionally lackscapturablebecause freepeople are not owned, are not combatants, and integrate via the ecological camp-formation path (mc-ecology), not via the military capture path (mc-combat / mc-turn).Tests cover each capture scenario per lifecycle stage— N/A.— N/A; no code change.cargo test -p mc-combatgreen
Disposition
Status: oos (out-of-scope for Game 1). No code or data changes land. Freepeople absorption is owned by p0-34 (done) and the mc-ecology camp-formation tests. If a future game (Game 2 "Age of Kzzykt" or later) introduces a freepeople lifecycle with player allegiance, this objective can be reopened against that scope — but that is explicitly Game 2+ territory.
Notes
- Originally blocked on p2-55 (resolved) and on freepeople lifecycle spec (never created — the simpler p0-34 model replaced it).
- Closes 0/0 implementable bullets — no acceptance criteria remain in scope. This is a scope-resolution close, not a partial-credit close.