This commit captures work from multiple sessions building the statistics system and frontend component library. Backend - Phase 3.5: Statistics System - Box score statistics with materialized views - Play stat calculator for real-time updates - Stat view refresher service - Alembic migration for materialized views - Test coverage: 41 new tests (all passing) Frontend - Phase F1: Foundation - Composables: useGameState, useGameActions, useWebSocket - Type definitions and interfaces - Store setup with Pinia Frontend - Phase F2: Game Display - ScoreBoard, GameBoard, CurrentSituation, PlayByPlay components - Demo page at /demo Frontend - Phase F3: Decision Inputs - DefensiveSetup, OffensiveApproach, StolenBaseInputs components - DecisionPanel orchestration - Demo page at /demo-decisions - Test coverage: 213 tests passing Frontend - Phase F4: Dice & Manual Outcome - DiceRoller component - ManualOutcomeEntry with validation - PlayResult display - GameplayPanel orchestration - Demo page at /demo-gameplay - Test coverage: 119 tests passing Frontend - Phase F5: Substitutions - PinchHitterSelector, DefensiveReplacementSelector, PitchingChangeSelector - SubstitutionPanel with tab navigation - Demo page at /demo-substitutions - Test coverage: 114 tests passing Documentation: - PHASE_3_5_HANDOFF.md - Statistics system handoff - PHASE_F2_COMPLETE.md - Game display completion - Frontend phase planning docs - NEXT_SESSION.md updated for Phase F6 Configuration: - Package updates (Nuxt 4 fixes) - Tailwind config enhancements - Game store updates Test Status: - Backend: 731/731 passing (100%) - Frontend: 446/446 passing (100%) - Total: 1,177 tests passing Next Phase: F6 - Integration (wire all components into game page) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
146 lines
5.6 KiB
HTML
146 lines
5.6 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<title>Code coverage report for store</title>
|
|
<meta charset="utf-8" />
|
|
<link rel="stylesheet" href="../prettify.css" />
|
|
<link rel="stylesheet" href="../base.css" />
|
|
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<style type='text/css'>
|
|
.coverage-summary .sorter {
|
|
background-image: url(../sort-arrow-sprite.png);
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div class='wrapper'>
|
|
<div class='pad1'>
|
|
<h1><a href="../index.html">All files</a> store</h1>
|
|
<div class='clearfix'>
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">58.4% </span>
|
|
<span class="quiet">Statements</span>
|
|
<span class='fraction'>330/565</span>
|
|
</div>
|
|
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">87.96% </span>
|
|
<span class="quiet">Branches</span>
|
|
<span class='fraction'>95/108</span>
|
|
</div>
|
|
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">85.29% </span>
|
|
<span class="quiet">Functions</span>
|
|
<span class='fraction'>29/34</span>
|
|
</div>
|
|
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">58.4% </span>
|
|
<span class="quiet">Lines</span>
|
|
<span class='fraction'>330/565</span>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
<p class="quiet">
|
|
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
</p>
|
|
<template id="filterTemplate">
|
|
<div class="quiet">
|
|
Filter:
|
|
<input type="search" id="fileSearch">
|
|
</div>
|
|
</template>
|
|
</div>
|
|
<div class='status-line medium'></div>
|
|
<div class="pad1">
|
|
<table class="coverage-summary">
|
|
<thead>
|
|
<tr>
|
|
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
|
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
|
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
|
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
|
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
|
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
|
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr>
|
|
<td class="file low" data-value="auth.ts"><a href="auth.ts.html">auth.ts</a></td>
|
|
<td data-value="0" class="pic low">
|
|
<div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
|
|
</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="210" class="abs low">0/210</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="1" class="abs low">0/1</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="1" class="abs low">0/1</td>
|
|
<td data-value="0" class="pct low">0%</td>
|
|
<td data-value="210" class="abs low">0/210</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file high" data-value="game.ts"><a href="game.ts.html">game.ts</a></td>
|
|
<td data-value="92.38" class="pic high">
|
|
<div class="chart"><div class="cover-fill" style="width: 92%"></div><div class="cover-empty" style="width: 8%"></div></div>
|
|
</td>
|
|
<td data-value="92.38" class="pct high">92.38%</td>
|
|
<td data-value="210" class="abs high">194/210</td>
|
|
<td data-value="84" class="pct high">84%</td>
|
|
<td data-value="75" class="abs high">63/75</td>
|
|
<td data-value="81.25" class="pct high">81.25%</td>
|
|
<td data-value="16" class="abs high">13/16</td>
|
|
<td data-value="92.38" class="pct high">92.38%</td>
|
|
<td data-value="210" class="abs high">194/210</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="file high" data-value="ui.ts"><a href="ui.ts.html">ui.ts</a></td>
|
|
<td data-value="93.79" class="pic high">
|
|
<div class="chart"><div class="cover-fill" style="width: 93%"></div><div class="cover-empty" style="width: 7%"></div></div>
|
|
</td>
|
|
<td data-value="93.79" class="pct high">93.79%</td>
|
|
<td data-value="145" class="abs high">136/145</td>
|
|
<td data-value="100" class="pct high">100%</td>
|
|
<td data-value="32" class="abs high">32/32</td>
|
|
<td data-value="94.11" class="pct high">94.11%</td>
|
|
<td data-value="17" class="abs high">16/17</td>
|
|
<td data-value="93.79" class="pct high">93.79%</td>
|
|
<td data-value="145" class="abs high">136/145</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class='push'></div><!-- for sticky footer -->
|
|
</div><!-- /wrapper -->
|
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
Code coverage generated by
|
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
at 2025-11-10T20:06:09.842Z
|
|
</div>
|
|
<script src="../prettify.js"></script>
|
|
<script>
|
|
window.onload = function () {
|
|
prettyPrint();
|
|
};
|
|
</script>
|
|
<script src="../sorter.js"></script>
|
|
<script src="../block-navigation.js"></script>
|
|
</body>
|
|
</html>
|
|
|