Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions docs/00-overview/decision-log.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,21 @@ type: reference

Architecture Decision Records, newest first. One per cluster/significant decision.

## ADR-0032 — M013 cluster `content`: curated rosters + commentary breadth
**Date:** 2026-06-07 · **Status:** accepted · **Cluster:** `m013/content` · **Issues:** #82, #84

**Decision.**
- **Curated rosters (#82):** hand-curated the **Iceland** (authentic Icelandic patronymics) and
**Mongolia** rosters with on-rhythm, original/CC0 fictional names, replacing off-rhythm auto-generated
pools — structure/roles untouched; both still validate, load and select an XI.
- **Commentary breadth (#84):** appended ~30 original CC0 lines to thinner categories (run-2/3/5,
milestone_100, partnership_50, hat-trick, collapse, maiden, last-ball finish, caught, over-start,
innings/match end) via an append-only `_EXTRA` merge — no category emptied, no within-match-dup change.

**Consequences.** 4 unit tests (rosters load/validate/select + distinct on-rhythm names; every category
non-empty; thin categories expanded) + 3 playtest invariants. Gate green (ruff + mypy 64 files + 182
tests + playtest 71/71). **Completes M013 — and Round 2.**

## ADR-0031 — M013 cluster `localization`: a locale-keyed string scaffold
**Date:** 2026-06-07 · **Status:** accepted · **Cluster:** `m013/localization` · **Issues:** #83

Expand Down
4 changes: 2 additions & 2 deletions docs/03-issues/m013-curated-rosters.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ priority: P2
cluster: m013/content
labels:
- enhancement
status: Todo
state: open
status: Done
state: closed
github:
issue: 82
---
Expand Down
4 changes: 2 additions & 2 deletions docs/03-issues/m013-more-commentary.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ priority: P2
cluster: m013/content
labels:
- enhancement
status: Todo
state: open
status: Done
state: closed
github:
issue: 84
---
Expand Down
66 changes: 66 additions & 0 deletions neo_handcricket/commentary/lines.py
Original file line number Diff line number Diff line change
Expand Up @@ -503,6 +503,72 @@
})


# Breadth expansion (M013) — extra original/CC0 lines appended to thinner pools.
_EXTRA: dict[str, dict[str, list[dict]]] = {
"ball_run_2": {
"opener": [
{"text": "Two more, well run.", "tags": ["technical"]},
{"text": "Pushed into the gap, back for the second.", "tags": ["casual"]},
{"text": "Good running between the wickets — two.", "tags": ["technical"]},
],
"analysis": [{"text": "They're turning ones into twos — pressure on the field.", "tags": ["serious"]}],
},
"ball_run_3": {
"opener": [
{"text": "Three! Into the deep and they scamper back.", "tags": ["casual"]},
{"text": "Driven hard, three to the rope-rider.", "tags": ["technical"]},
],
"quip": [{"text": "Three is the new four if you run hard enough.", "tags": ["hilarious", "dry"]}],
},
"ball_run_5": {
"opener": [
{"text": "Five — boundary overthrows tagged on.", "tags": ["casual"]},
{"text": "Misfield! They cash in for five.", "tags": ["technical"]},
],
},
"milestone_100": {
"opener": [
{"text": "A hundred! Bat aloft, helmet off — take it in.", "tags": ["theatrical", "extrovert"]},
{"text": "Three figures, and richly deserved.", "tags": ["serious"]},
],
},
"partnership_50": {
"opener": [
{"text": "Fifty for the stand and the momentum has shifted.", "tags": ["serious"]},
{"text": "They've dug in together — half-century partnership.", "tags": ["technical"]},
],
},
"hat_trick": {
"opener": [{"text": "THREE IN THREE! File this one in the memory bank.", "tags": ["theatrical"]}],
},
"collapse": {
"opener": [{"text": "One brings two, two brings three — it's unravelling.", "tags": ["serious"]}],
},
"maiden": {
"opener": [{"text": "Maiden over. Dot, dot, dot — relentless.", "tags": ["technical"]}],
},
"last_ball_finish": {
"opener": [{"text": "Last delivery, and they nick it! Absolute scenes.", "tags": ["theatrical", "extrovert"]}],
},
"wicket_caught": {
"opener": [{"text": "Held! Safe hands, and the batter trudges off.", "tags": ["serious"]}],
},
"over_start": {
"opener": [{"text": "Fresh over, fresh plans. Here we go again.", "tags": ["casual"]}],
},
"innings_end": {
"opener": [{"text": "And that's the innings — a total to bowl at.", "tags": ["serious"]}],
},
"match_end": {
"opener": [{"text": "Stumps. What a contest that turned out to be.", "tags": ["serious"]}],
},
}
for _sit, _turns in _EXTRA.items():
_bucket = LINES.setdefault(_sit, {})
for _turn, _lines in _turns.items():
_bucket.setdefault(_turn, []).extend(_lines)


# Event kind → commentary situation key, in descending priority. Used to pick the
# single most newsworthy accent line when the event detector flags big moments.
_EVENT_SITUATION_PRIORITY: list[tuple[str, str, str]] = [
Expand Down
Loading
Loading