Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
0d74901
docs(bc-tmdc): say where a team encounter's marks land, mark by mark
gitrgoliveira Oct 11, 2026
5cd1c91
test(web-mobile): pin the shared-court console rules in render tests …
gitrgoliveira Oct 11, 2026
85ab1c9
fix(a11y): tie the competition-config, sign-in and first-run labels t…
gitrgoliveira Oct 11, 2026
a001238
fix(a11y): name the remaining operator form fields by their labels (b…
gitrgoliveira Oct 11, 2026
3ff334d
test: pin unfought team bouts and lineup refusal wording on every sur…
gitrgoliveira Oct 11, 2026
6e0556f
fix: name the 3rd-place match on the court console and list it under …
gitrgoliveira Oct 11, 2026
39987ba
feat: kachinuki bout mode shows fighters left and who is next (bc-kfnl)
gitrgoliveira Oct 11, 2026
22699c7
docs: the kachinuki screenshots' alt text names the advisory line (bc…
gitrgoliveira Oct 11, 2026
015f8c7
fix: review round 1 (PR #467)
gitrgoliveira Oct 11, 2026
b76b3ff
fix: an exhausted kachinuki side reads "no fighters left" (PR #467)
gitrgoliveira Oct 11, 2026
fe3dc4b
fix: review round 2 (PR #467)
gitrgoliveira Oct 11, 2026
ef6cac0
Merge branch 'main' into worktree-bridge-cse_01N8XTrYTRShcdZL8WfsRv7k
gitrgoliveira Oct 11, 2026
fc7a53c
Merge branch 'main' into worktree-bridge-cse_01N8XTrYTRShcdZL8WfsRv7k
gitrgoliveira Oct 11, 2026
9df4c7a
feat: Record bout stamps a kachinuki bout as recorded (bc-kfnl, PR #467)
gitrgoliveira Oct 11, 2026
a067547
fix: an unscored kachinuki bout never reads as tied (bc-ktih)
gitrgoliveira Oct 11, 2026
3f6a2fa
fix: a recorded kachinuki bout reads as recorded when no pairing foll…
gitrgoliveira Oct 11, 2026
e06751a
Merge branch 'main' into worktree-bridge-cse_01N8XTrYTRShcdZL8WfsRv7k
gitrgoliveira Oct 11, 2026
9c6bf30
fix: close a recorded kachinuki bout only when a lineup says a side h…
gitrgoliveira Oct 11, 2026
6e731c5
Merge remote-tracking branch 'origin/main' into worktree-bridge-cse_0…
gitrgoliveira Oct 11, 2026
5694f2a
Merge remote-tracking branch 'origin/worktree-bridge-cse_01N8XTrYTRSh…
gitrgoliveira Oct 11, 2026
d880e4f
fix: review round 3 (PR #467)
gitrgoliveira Oct 11, 2026
386e5ca
fix: review round 4 (PR #467)
gitrgoliveira Oct 11, 2026
bbc6689
fix: review round 5 (PR #467)
gitrgoliveira Oct 11, 2026
dc84c34
fix: the kachinuki recorded mark gets its own stamped merge group (re…
gitrgoliveira Oct 11, 2026
7946412
fix: review round 7 (PR #467)
gitrgoliveira Oct 11, 2026
fc0a1cc
fix: review round 8 (PR #467)
gitrgoliveira Oct 11, 2026
e054a9e
docs(CLAUDE.md): the recorded mark also clears on a result change (PR…
gitrgoliveira Oct 11, 2026
4176dac
fix: review round 9 (PR #467)
gitrgoliveira Oct 11, 2026
85d51d9
refactor: kachinukiRemainingRoster becomes a test helper (PR #467)
gitrgoliveira Oct 11, 2026
beff58b
fix: review round 10 (PR #467)
gitrgoliveira Oct 11, 2026
f45a9e2
docs: docs-review fixes for PR #467
gitrgoliveira Oct 11, 2026
5824c53
docs: recapture the kachinuki screenshots and demo with the advisory …
gitrgoliveira Oct 11, 2026
cf3c599
docs: final docs-review fixes (PR #467)
gitrgoliveira Oct 11, 2026
631f38f
fix: final code-review minors (PR #467)
gitrgoliveira Oct 11, 2026
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
6 changes: 3 additions & 3 deletions CLAUDE.md

Large diffs are not rendered by default.

Binary file modified docs/screenshots/kachinuki-correct-bout.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/screenshots/kachinuki-knockout-tie-encho.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/screenshots/kachinuki-scoring-buttons.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion docs/user-guide/court-operators/recording-decisions.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ In the score editor, open the **Overtime** control and tick **Encho started**. A

Completed results follow the paper score sheet's layout. The centre, between the two sides' points, only ever carries one mark: **vs** when no special mark applies, **X** for a tie, **(E)** for a match that went to overtime, or **(DH)** for a team encounter sent to a representative bout. The marks never combine: a match that went to encho cannot end in a tie, and a daihyosen has no overtime. A side with no points shows a plain dash. A match won by men in regulation reads **M vs –**, and the same win in overtime reads **M (E) –**, on the court console and the public viewer. The exported results workbook carries the same **(E)** marker in its centre column, but leaves a no-points cell blank rather than dashed. The marker is the same however many overtime periods were fought, because the counter records the number for the tournament log but results never show it.

Everything else is a result, written beside the competitor it names: **Ht** next to the winner of a judges' decision, **Kiken** next to the competitor who withdrew, **Fus.** next to a no-show, and also **Fus.** next to the winner when the match itself was decided by a fusensho. A match decided by hantei after a tied overtime reads **M Ht (E) K**, with the winner's mark on the winner's side of the centre. A team encounter shows its team totals in the score cell instead, so for those the marks appear on the bracket and in the exported workbook.
Everything else is a result, written beside the competitor it names: **Ht** next to the winner of a judges' decision, **Kiken** next to the competitor who withdrew, **Fus.** next to a no-show, and also **Fus.** next to the winner when the match itself was decided by a fusensho. A match decided by hantei after a tied overtime reads **M Ht (E) K**, with the winner's mark on the winner's side of the centre. A team encounter shows its team totals in the score cell instead, so its marks sit where they happened. A bout's own mark (**X**, **(E)**, or **Ht** for a representative bout decided by the judges) appears on that bout's row wherever the bouts are shown, such as the score editor, the match's page on the public viewer and the court display. A decision that settles the encounter is marked beside the team on the bracket and wherever the match is listed: **Kiken** beside a team that withdrew, **Fus.** beside a team that did not appear, and **Fus.** beside the winning team when the encounter was closed with a fusensho. On the bracket, the encounter also shows its winner with a tick, and **(DH)** when a representative bout decided it. The exported workbook carries each numbered bout's marks on its row, **Kiken** or **Fus.** beside the team's victory count, and **X** (a drawn encounter) or **(DH)** in the centre of the encounter's summary row; a knockout encounter's representative bout, with its **Ht**, is on the **Representative Bouts** sheet (refer to [Daihyosen](#daihyosen)).

![Completed results on the public viewer: an overtime win reading M, the E marker, then a dash for the side with no points, and a hantei result with the Ht mark beside the winner.](../../screenshots/viewer-result-encho.png)

Expand Down
6 changes: 4 additions & 2 deletions docs/user-guide/court-operators/scoring-a-match.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ A correction made while offline never carries a confirmation with it. If it reac

A knockout final cannot be called until the earlier bouts that feed it are scored. While it is still waiting, it appears under a **Later** heading with a **Waiting** tag. Its competitors read "Winner of …" until the feeding bouts are known.

The 3rd-place match waits there too until both semi-finals are scored. A side still waiting reads "Loser of" and the semi-final's match number (for example, `Loser of M5`); once both semi-finals are scored, it moves to your queue as the 3rd-place match. It has no **Run now**: its competitors are the semi-finals' losers, so use the final's **Run now** (refer to [Run a match before results have synced](#run-a-match-before-results-have-synced)), on the court where the final is scheduled, to record both semi-final winners, which also places their losers here.

You cannot start a match that has no confirmed competitors. The Later heading lets you see that more play is scheduled for your court, so the queue never appears empty when further matches are still pending.

## Refresh the court view
Expand Down Expand Up @@ -120,10 +122,10 @@ On a tied bout you also decide what the tie means, according to the [kachinuki m

- **Record bout** retires both fighters. Under the taisho rule a Taisho who draws stays on, and **Record bout** pairs them with the next opponent automatically.
- **Encho** keeps the same pair fighting when the pairing must produce a result. It is available in any stage.
- **End match** records a drawn encounter in pools or leagues. In a knockout a tied last bout cannot end the match, so continue with **Record bout** or **Encho**.
- **End match** records a drawn encounter in pools or leagues. In a knockout a tied last bout cannot end the match, so continue with **Record bout** or **Encho**. When both teams have nobody left, **Record bout** adds no pairing: use **Encho**, or **Add next bout manually** if a team has another fighter.

If you finish too early, open the completed match and use **Reopen match** to carry on. Reopening takes a single tap, and ending the match again asks for no reason. The bouts you have already fought stay on screen as read-only rows above the current bout. The encounter reads like a regular team sheet, and you can check the winner-stays-on order at a glance. **× Remove this bout** takes back an unscored pairing the app added by mistake without ending the encounter.

To fix a bout you have already recorded, tap its row: it reopens in place with the scoring controls. If your change flips who won, the app flags the later bouts for you to check. Refer to [Scoring a kachinuki encounter](../organisers/team-tournaments.md#scoring-a-kachinuki-encounter) for the full flow.

![The kachinuki score editor: the one-line Kachinuki (winner stays on) note above the bout list, the bouts already fought shown as read-only rows above the current bout (which carries the ippon buttons for each side), the × Remove this bout undo, and the Record bout and End match footer actions.](../../screenshots/kachinuki-scoring-buttons.png)
![The kachinuki score editor: the one-line Kachinuki (winner stays on) note above the bout list, the bouts already fought shown as read-only rows above the current bout (which carries the ippon buttons for each side), a muted line just above the current bout naming each team's fighter on and the fighters left, the × Remove this bout undo, and the Record bout and End match footer actions.](../../screenshots/kachinuki-scoring-buttons.png)
21 changes: 16 additions & 5 deletions docs/user-guide/organisers/team-tournaments.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,23 +152,34 @@ Kachinuki encounters are scored one bout at a time. Score the current bout, then
- **Record bout** keeps the encounter going. The winner stays on and the app adds the next pairing; if the bout was a draw, both fighters retire and the next pair comes up. When the app cannot work out who fights next, for example when a team brings fighters it has not seen, use **Add next bout manually** and pick or type both players on the new row.
- **End match** finishes the encounter on the last scored bout. The winning team is the one that won that bout; you do not pick it, the app reads it from the score.

If the app adds a pairing you did not want, for example an extra bout after the encounter was really over, use **× Remove this bout** to take it back. It only removes a bout that has no score yet, so nothing you have recorded is lost. The bouts you have already fought stay on screen as read-only rows above the current bout. The encounter reads like a regular team sheet, and you can check the winner-stays-on order at a glance.
The bouts you have already fought stay on screen as read-only rows above the current bout. The encounter reads like a regular team sheet, and you can check the winner-stays-on order at a glance.

![The kachinuki score editor: the bouts already fought shown as read-only rows above the current bout (which carries the ippon buttons for each side), the × Remove this bout undo for a pairing added by mistake, and the Record bout and End match footer actions.](../../screenshots/kachinuki-scoring-buttons.png)
Just above the current bout, a short line shows each team's fighter on the shiai-jo, how many fighters its lineup has left after them, and who they are, next fighter first, for example "Shiro: T1.2 Ueda on, 1 left (T1.3 Sato) · Aka: T2.1 Kudo on, last fighter". Each fighter carries their team member number, as on the bout rows. The line is read from the lineup and the bouts recorded so far, the same reading the app pairs the next bout from. It is a guide only: it never ends the encounter, and you still decide when the encounter is over. A team with no lineup entered shows only its fighter on, and when neither team has one the line is not shown.

While a bout is being fought, the line names both of its fighters as on, whatever the score. After **Record bout**, the fighter who lost goes off and the winner stays on, and after a draw both go off. Some cases read differently:

- **A team has nobody left.** When **Record bout** takes the last fighter in a team's lineup off, no pairing follows. The bout you recorded joins the read-only rows, and one line stands where the current bout was, for example "Aka has no fighters left. End match finishes the encounter." **Record bout** is greyed out, because that bout is already recorded; if the team does have another fighter, use **Add next bout manually**. You can still tap the recorded bout to correct it like any earlier bout: a correction that changes who won, or makes it a draw, makes it the current bout again, to record anew, while a different technique for the same winner does not. Until the editor has read the lineups, when it is opened again or on another device, the bout you recorded shows as the current bout, and tapping **Record bout** again changes nothing.
- **A draw leaves one team with nobody.** That team's last fighter stays on for the next pairing.
- **No lineup saved.** Without a lineup for the team that lost the bout, the app cannot tell whether that team has anyone left, so the bout you recorded stays the current bout, with **Record bout** greyed out because nothing can follow it, and you continue with **Add next bout manually** or **End match**. **Record bout** comes back if a lineup saved later gives that team another fighter.
- **A tie leaves both teams with nobody.** The bout stays the current bout, in pools, leagues and knockouts alike, and the line names both of its fighters as on. **Encho** is there if you want the pair to fight on, **Record bout** is greyed out because nothing can follow it, and **End match** decides the rest: a drawn encounter in a pool or league, held back in a knockout, which needs a winner. Scoring a point on that tie, or starting **Encho**, makes it a bout being fought again: both fighters stay on and **Record bout** records it anew.

If the app adds a pairing you did not want, for example an extra bout after the encounter was really over, use **× Remove this bout** to take it back. It only removes a bout that has no score yet, so nothing you have recorded is lost. When the bout you remove is the pairing **Record bout** added, the bout before it becomes the current bout again, as if **Record bout** had not been pressed, so the line above names both of its fighters as on until you record it again. When you remove a bout you added with **Add next bout manually** after a team had nobody left, the sheet goes back to how it was before you added it: the recorded bout stays recorded and the line still names the team with nobody left. Editing a lineup in between does not change this. If the match's history does not show how the bout you removed was added, for example because that history could not be saved, the recorded bout stays recorded; tap it to correct it.

![The kachinuki score editor: the bouts already fought shown as read-only rows above the current bout (which carries the ippon buttons for each side), a muted line just above the current bout naming each team's fighter on, the fighters left and who is next, the × Remove this bout undo for a pairing added by mistake, and the Record bout and End match footer actions.](../../screenshots/kachinuki-scoring-buttons.png)

To fix a bout you have already recorded, without ending the encounter, tap its row. It reopens in place with the same scoring controls as the current bout. You can adjust the points or change who won, and the change saves as you go. Each fought bout carries a black triangle in its number column: it points right when the bout is collapsed and down when it is open. Tap it to expand the bout for a correction, and tap it again to collapse it when you are finished.

![The kachinuki score editor with an earlier bout reopened for correction: the bout sits in an accent frame with its ippon buttons for each side and a downward black triangle in its number column that collapses it again, while the other fought bouts stay as read-only rows above and below, each with a rightward triangle.](../../screenshots/kachinuki-correct-bout.png)
![The kachinuki score editor with an earlier bout reopened for correction: the bout sits in an accent frame with its ippon buttons for each side and a downward black triangle in its number column that collapses it again, while the other fought bouts stay as read-only rows above and below, each with a rightward triangle, and the line naming each team's fighter on and fighters left sits just above the current bout.](../../screenshots/kachinuki-correct-bout.png)

If your correction changes who won that bout, the bouts after it were fought on the old result. The app flags them for you to check and put right. It never re-shuffles the later bouts on its own: only you, at the court, know how they actually went.

When the last bout is tied, the editor offers every legitimate way forward and you choose, according to the [kachinuki mode](#kachinuki-modes) in force; the app never decides it from the stage:

- **Record bout** retires both fighters and brings the next pair up.
- **Encho** keeps the same pair fighting on that bout until one of them takes a point. It is offered on any tied bout: whether a pair fights on is your call, and the app records it. Use it whenever your rules say the pairing must have a result, in any stage. Tapped Encho by mistake, or twice? **Undo encho**, beside it, takes back one overtime period per tap while nothing has been scored in overtime; taking back the last one returns the bout to its tie. Its place beside Encho is kept empty until there is something to undo, so no button moves under your finger when it appears.
- **End match** finishes the encounter on the tie. In pools and leagues this records a drawn encounter. In a knockout the bracket needs a winner, so End match is held back while the last bout is tied; continue with Record bout or Encho instead.
- **End match** finishes the encounter on the tie. In pools and leagues this records a drawn encounter. In a knockout the bracket needs a winner, so End match is held back while the last bout is tied; continue with Record bout or Encho instead. When both teams have nobody left, **Record bout** adds no pairing: use **Encho**, or **Add next bout manually** if a team has another fighter.

![The kachinuki score editor on a tied knockout bout, showing the notice that a knockout cannot end in a draw with an Encho button, and the End match button held back.](../../screenshots/kachinuki-knockout-tie-encho.png)
![The kachinuki score editor on a tied knockout bout: the line above bout 1 reads "Shiro: T2.1 Mori on, 4 left (T2.2 Ueno, T2.3 Kimura, T2.4 Aoki, T2.5 Saito) · Aka: T1.1 Ishida on, 4 left (T1.2 Kono, T1.3 Sano, T1.4 Hara, T1.5 Abe)", the notice that a knockout cannot end in a draw sits above the Record bout and Encho buttons, and the End match button is held back.](../../screenshots/kachinuki-knockout-tie-encho.png)

There is no representative bout (daihyosen) in kachinuki: a tied pairing that must produce a result is settled by encho on that same bout, not by a separate rep bout.

Expand Down
Binary file modified docs/videos/kachinuki-demo.webm
Binary file not shown.
Loading
Loading