CB-WP-0049 T02/T03: a seat that plays its objective, and F27 splits in two
Some checks failed
ci / check (push) Has been cancelled
Some checks failed
ci / check (push) Has been cancelled
objective() reads GroundState::score (now public) rather than restating
what winning is; a copy in the bot would disagree with the kernel the
first time ground-game rules on F28.
Working out WHERE the modes can differ was most of the task and it
bounds the result: SOLVE always claims for the actor, so own-score and
group-score want the same SOLVE nearly everywhere. That is a fact about
GROUND's action set, not a shortcoming of the bot. Two real divergences,
both readable off the table: SUPPORT regulates someone else (worth less
against a rival, worth MORE under coalitions where a Bond merges them
into my side), and SOLVE's value is the card's value, which greedy
ignores entirely.
THE RESULT — F27 splits in two:
group success UNCHANGED in 34 of 36 cells
who wins MOVES: BONDED COALITIONS at 4p goes 2.04 -> 2.98,
2.12 -> 3.29, 2.05 -> 3.01 winning seats per game
So "the competitive modes are scoring lenses over cooperative play" was
too strong and is withdrawn. The sharper claim: GROUND's scoring modes
change WHO WINS, not WHETHER THE GROUP SUCCEEDS. And the effect is
seat-band dependent -- 2p none, 4p largest, 6p none under coalitions;
two relation slots capping network growth is a candidate explanation and
is untested.
The panel now prints BOTH policies side by side. That was a correction
mid-task: the first version printed only the new one and I compared it
against a figure remembered from CB-WP-0047 -- a comparison against a
board nobody re-ran.
Control that makes the numbers mean anything: under SHARED GROUND the
two policies agree at all but <=2 decision points across 12 boards, so a
moving column is mode-awareness and not simply a different bot.
Also: two T01 tests keyed on `status: proposed`, which ground-game
renamed to `ready-for-implement` mid-session. They now find the module
by asking resolve() -- the structural property is ours and does not move
when another repo edits its vocabulary.
Also: `make vendor` replaces three hand re-vendors with a tool that
regenerates digests by walking editions/, and reports one-sided files
rather than resolving them.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
82b9e7df31
commit
3045eb03f8
16 changed files with 859 additions and 94 deletions
|
|
@ -3,14 +3,62 @@
|
|||
| | |
|
||||
|---|---|
|
||||
| **aspect** | `end_condition` |
|
||||
| **role** | End on **board clear**, **group collapse**, or **max rounds** (default max 5) |
|
||||
| **status** | proposed — not yet implemented in kernel |
|
||||
| **module_id** | `end_condition.hybrid_clear_collapse` |
|
||||
| **role** | End on **board clear**, **group collapse**, or **max rounds** |
|
||||
| **status** | **ready-for-implement** (draft frozen for v0 kernel) |
|
||||
| **rules_delta** | [`rules_delta.yaml`](rules_delta.yaml) |
|
||||
| **design** | [history/260808-deal-end-sequences-design.md](../../../history/260808-deal-end-sequences-design.md) |
|
||||
|
||||
## Draft rules (not frozen)
|
||||
Independent of `problem_stress` / `problem_deal` / `attack_relief`. Measure
|
||||
**alone** first, then profile `scoped_plus_hybrid_end`.
|
||||
|
||||
1. **Clear:** after Solve, if no unclaimed Problems remain → end game; apply mode scoring (threshold auto-success if claimed value ≥ threshold).
|
||||
2. **Collapse:** if no seat has Stress ≤ 3 **or** majority of seats are in active DARVO → end as group failure (SHARED) / no personal winners (semi/coalition).
|
||||
3. **Ceiling:** if Round Max (5) completes without (1) or (2) → current threshold scoring.
|
||||
## Frozen v0 rules
|
||||
|
||||
**Compose with** any problem_stress / deal / attack_relief.
|
||||
**Kernel:** not shipped — package `rules_delta.yaml` when implemented.
|
||||
### END-CLEAR
|
||||
|
||||
After the **Solve** step: if **zero** unclaimed Problems remain in play →
|
||||
**end the game immediately**.
|
||||
|
||||
- Apply mode scoring as usual.
|
||||
- **Threshold:** if total claimed value ≥ scenario threshold for seat band →
|
||||
group success (SHARED mastery / semi-coalition personal winners as normal).
|
||||
- If claimed value < threshold but board is empty (should be rare) → group
|
||||
**failure** (nothing left to claim).
|
||||
|
||||
### END-COLLAPSE
|
||||
|
||||
After Round End stress clamp (and problem-stress ticks if any module active),
|
||||
before Lead rotation:
|
||||
|
||||
**Collapse** if **either**:
|
||||
|
||||
1. **No seat has Stress ≤ 3**, or
|
||||
2. **Majority** of seats are in an **active DARVO sequence** (stage ≠ OFF).
|
||||
|
||||
Effect:
|
||||
|
||||
- End the game.
|
||||
- **Group success = false** (SHARED fails).
|
||||
- Semi / coalition: **no personal / coalition winners** (table broke).
|
||||
|
||||
### END-CEILING
|
||||
|
||||
If Round **5** completes without CLEAR or COLLAPSE → end with current
|
||||
threshold + mode scoring (identical to baseline fixed-rounds behaviour).
|
||||
|
||||
Round max is **5** in v0 (same product length as r0). Changing max is a
|
||||
different module later if needed.
|
||||
|
||||
## Non-goals (v0)
|
||||
|
||||
- Soft collapse (one seat at 5 only).
|
||||
- Extending rounds when board not clear.
|
||||
- Mode-specific collapse exceptions.
|
||||
|
||||
## Success criteria (when clay-borg implements)
|
||||
|
||||
1. Alone on baseline content: some games end before round 5 (clear or collapse).
|
||||
2. Mean game length ≤ 5 rounds; no hangs.
|
||||
3. With `problem_stress.scoped`: collapse rate non-zero for unregulated policies;
|
||||
clear rate non-zero for greedy SHARED at 3–4p.
|
||||
4. Does not recreate H1-style 0% greedy wins solely via collapse spam.
|
||||
|
|
|
|||
|
|
@ -1,10 +1,11 @@
|
|||
# module: end_condition.hybrid_clear_collapse — PROPOSED
|
||||
# module: end_condition.hybrid_clear_collapse
|
||||
# status: ready-for-implement (v0 rules frozen in MODULE.md)
|
||||
module_id: end_condition.hybrid_clear_collapse
|
||||
aspect: end_condition
|
||||
schema_version: 1
|
||||
base: ground-darvo-r0
|
||||
status: proposed
|
||||
implementation: pending
|
||||
status: ready-for-implement
|
||||
implementation: pending_kernel
|
||||
|
||||
deltas:
|
||||
- id: END-CLEAR
|
||||
|
|
@ -15,7 +16,8 @@ deltas:
|
|||
effect:
|
||||
end_game: true
|
||||
scoring: mode_as_usual
|
||||
note: threshold treated as met if claimed_value >= threshold
|
||||
group_success_if_claimed_ge_threshold: true
|
||||
group_fail_if_claimed_lt_threshold: true
|
||||
|
||||
- id: END-COLLAPSE
|
||||
name: early_end_group_collapse
|
||||
|
|
@ -30,7 +32,7 @@ deltas:
|
|||
personal_winners: none
|
||||
|
||||
- id: END-CEILING
|
||||
name: max_rounds_unchanged
|
||||
name: max_rounds_five
|
||||
phase: after_round
|
||||
when:
|
||||
round_completed: 5
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue