import InfoBox from '../components/InfoBox.astro';

The [internal stats page](/posts/post-launch-week#the-game-gets-eyes-on-itself) still treated the game as Daily or Duel, even though Duel now meant two substantially different modes. Adding PvP data was therefore not a matter of adding one more query. The page needed four equal views (Total, Daily, PvE, and PvP) without turning mode, language, date, and time span into one dense navigation problem.

## Three filters, not one long report

The wayfinder split the work into data questions and interface questions. Research showed that PvP could report games, scores, wins, turn-duration choices, and timeouts from its existing records. Word-shape and combo breakdowns required reading stored game state, so those stayed outside the first version. This made the Total view deliberately uneven: it could combine the shared metrics now, while leaving mode-specific detail in the mode that actually owned it.

The first interface still stacked all-time and daily reports, which pushed the dated content too far down the page. An agent produced four throwaway navigation variants, and the chosen direction made mode the primary tabs, time span a separate scope control, and language a third filter. Date navigation appears only for the Day scope. Not two reports competing for space, one question at a time.

## The type checker needed honest shapes

Parallel standards and specification review found that the page grids still assumed every mode had the Daily and PvE fields. Opening the PvP view would reach for properties that were not there and throw at runtime. Loose `any` types had hidden the mismatch, so the fix was not another conditional alone: the page data became a real union of the supported result shapes, letting TypeScript reject the same mistake when it was deliberately reintroduced.

<InfoBox title="The review receipt" variant="note">
  The full suite passed with 1,708 tests, and all four mode views returned a
  successful response from the running application. A separate review claim
  that two query helpers were missing was checked with the compiler and source
  search, then rejected as a false positive.
</InfoBox>

The server now loads only the selected mode and time span instead of preparing every possible report for each request. The resulting page has a clearer hierarchy and a more honest data model, which should make later additions a choice about what belongs in each mode rather than another round of conditionals around an old Daily-or-Duel assumption.