Skip to content

0.9.0

Choose a tag to compare

@jdh8 jdh8 released this 13 Jun 00:03
· 1419 commits to main since this release
a05fe66

The bidding release

This release turns pons into a bidding-system authoring stack: a constraint vocabulary for writing a pair's notes as code, a complete Two-over-One Game Forcing card built on it, and an "instinct" floor so a bound system always has a sane natural answer — measured at about +0.5 IMPs/board against its own absence.

Highlights

  • Bidding core. Composable Constraints (hcp, len, support, stoppers, seats, vulnerability — combined with &, |, !), ordered Rules with explain ("why did you bid that"), guarded trie fallbacks with rebase (system on over their double is one rule, not a copied subtree), role-aware Constructive/Competitive/Defensive books assembled into a Pair and bound against the opponents' Family as a Stance, and the absolute-seat Table driver that bids out whole boards.
  • A complete 2/1 card. two_over_one() covers openings through slam: 2/1 game-force continuations, the forcing 1NT, Jacoby 2NT, splinters, inverted minors, the strong 2♣ structure, Ogust, RKCB 1430 with the 5NT king ask, full competition (cue-bid raises, negative/support/responsive doubles, Michaels and the unusual 2NT), and a defensive book including defense to weak twos.
  • The instinct floor. bidding::instinct answers every off-book auction with a natural call — it never passes partner's live takeout double, completes standard transfers, and bids forced games opposite our strong notrump. Floor activations are observable via Stance::classify_with_provenance, ranking which auctions to author next.
  • Strawberry 2/1 variant. Opt-in two_over_one_strawberry() layers three conventions from the author's Strawberry Polish Club notes onto the same core: Strawberry Stenberg 2NT, BTU responses to the strong 1NT, and Rubens (transfer) advances.
  • Scoring & simulation. New scoring module (final_contract, ns_score, imps) shared by every harness, plus Table::bid_out_from for seeding an auction prefix and letting the systems finish the board.
  • Examples. practice-bidding (sit at the table against the bots, with double-dummy verdicts), instinct-floor (the A/B match behind the +0.5 IMPs number), and a rebuilt defend-2sx-or-3nt (realistic four-gate population, bid-out continuations, per-flavor regret vs a double-dummy oracle).

Breaking changes

  • Partnership is replaced by Pair + Stance; book routing is three-way via Phase::of, and competition over our openings moves out of the constructive trie.
  • The vulnerability-indexed Forest ([Trie; 4]) and SeatClasses are removed — vulnerability lives in constraints, seats in leading-pass keys.
  • Classifier::classify now takes (Hand, &Context).
  • stats::average_ns_par takes contract_bridge::AbsoluteVulnerability (was ddss::Vulnerability).
  • Minimum contract-bridge is 0.1.2 (for Auction::can_push).

Full details in the changelog. Compare: 0.8.0...0.9.0.