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
2 changes: 1 addition & 1 deletion .claude/agents/spec-auditor.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ For each requirement or claim you audit, return a structured finding:
## Your Constraints

- **Read-only.** You do not commit, push, branch, or modify files. Report only.
- **Cite file paths.** Every artifact you read gets a path: `specs/013-expand-test-coverage/data-model.md`, not "the data model."
- **Cite file paths.** Every artifact you read gets a path: `specs/done_013-expand-test-coverage/data-model.md`, not "the data model."
- **Distinguish spec from implementation.** You audit alignment; you do not judge whether the spec itself is good. If a spec is vague or incomplete, surface that as a finding ("spec underspecifies X; cannot audit without clarification").
- **Flag incomplete checks.** If a folder is missing an artifact (e.g., no `data-model.md`), note it: "data-model.md not found; checked only spec.md, plan.md, tasks.md; exemption check incomplete."
- **Handle done_ folders.** They carry binding artifacts. Apply rule 15 in full even for finished features.
Expand Down
2 changes: 1 addition & 1 deletion docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ Status as of 2026-10-14. Task counts come from each spec's `tasks.md`.

- **Spec 002, Nuclear Option module and load-balancer IP pool override** (`specs/002-nuclear-option-ip-pool/`): 136 of 143 tasks done. Blocked: the server does not bind UDP 7777, so no join client can be built until a real-client packet capture documents the handshake (maintainer decision, 2026-10-11). Unblocked by: that packet capture. The join test, its bucket and the coverage row wait on it.
- **Spec 009, code scanning remediation and Dependabot** (`specs/009-remediate-security-dependabot/`): 80 of 82 tasks done. Blocked: TypeScript 7 is blocked because the `@typescript-eslint` peer range stops before TypeScript 7, and ESLint 10 is blocked because `eslint-plugin-react` does not accept `^10`. Unblocked by: a `@typescript-eslint` release that accepts TypeScript 7 (then T055/T056 and PR #272), and an `eslint-plugin-react` release that accepts `^10` (then PR #386, and #387 if open).
- **Spec 013, expand test coverage** (`specs/013-expand-test-coverage/`): 39 of 62 tasks done. No external blocker is named. Open work is the live web e2e specs, the optional-components e2e, the Postgres e2e, docs and checks, and the archive step. Some tasks wait for the first green CI run of their job, and the archive waits until every PR is merged. Open PRs for this spec are in progress.
- **Spec 013, expand test coverage** (`specs/done_013-expand-test-coverage/`): 39 of 62 tasks done. No external blocker is named. Open work is the live web e2e specs, the optional-components e2e, the Postgres e2e, docs and checks, and the archive step. Some tasks wait for the first green CI run of their job, and the archive waits until every PR is merged. Open PRs for this spec are in progress.
- **Spec 019, app localization and community language packs** (`specs/019-localization-language-packs/`): 0 of 105 tasks checked; the four design decisions are settled. The implementation is on open PR #668 and is not yet on `master`. Unblocked by: merging PR #668, which needs human approval. The first step is the `i18n/` module and checker.
- **Spec 021, edit game configuration from server Settings** (`specs/021-settings-game-config/`): implemented, 20 of 24 tasks done, pending CI and review. Blocked: CI must go green and a human must approve the PR. Unblocked by: that approval and merge, then archiving to `done_021`.
- **Spec 022, default telemetry destination, extended telemetry and telemetry dashboard** (`specs/022-default-telemetry-dashboard/`): 109 of 119 tasks done. The shipped feature is unchanged until the version-trend amendment (2026-10-14, T101 to T110) lands. Blocked: T104 needs Pencil design work on the machine where Pencil runs; T109 needs the user's sign-off before editing existing tests `lifecycle_test.go:11` and `charts_test.go:83`; T110 waits for the PR to merge. Unblocked by: the design work, that sign-off, and the merge.
Expand Down
2 changes: 1 addition & 1 deletion hack/check-codegen-drift_test.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# check-codegen-drift_test.sh: Proof that the "codegen drift" CI gate fails on a
# types edit committed without regenerating (spec 013 G5,
# specs/013-expand-test-coverage/contracts/static-gates.md).
# specs/done_013-expand-test-coverage/contracts/static-gates.md).
#
# The gate is: make generate manifests && make tidy && git diff --exit-code
# run inside a checkout. This script runs it in a throwaway detached worktree:
Expand Down
6 changes: 3 additions & 3 deletions hack/check-coverage-gaps.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
# (expand-test-coverage).
#
# Purpose:
# specs/013-expand-test-coverage/contracts/coverage-gap-record.md defines the
# specs/done_013-expand-test-coverage/contracts/coverage-gap-record.md defines the
# layout and rules of coverage-gaps.md. This script enforces them so that a
# gap row cannot be marked closed without evidence, and the Summary counts
# cannot drift from the table. It runs in the `docs` CI job.
#
# Usage:
# hack/check-coverage-gaps.sh [FILE]
# COVERAGE_GAPS_FILE=path hack/check-coverage-gaps.sh
# Default: specs/013-expand-test-coverage/coverage-gaps.md
# Default: specs/done_013-expand-test-coverage/coverage-gaps.md
# An optional first argument overrides COVERAGE_GAPS_FILE.
#
# Rules checked (contracts/coverage-gap-record.md):
Expand All @@ -35,7 +35,7 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR/.."

FILE="${1:-${COVERAGE_GAPS_FILE:-specs/013-expand-test-coverage/coverage-gaps.md}}"
FILE="${1:-${COVERAGE_GAPS_FILE:-specs/done_013-expand-test-coverage/coverage-gaps.md}}"

if [[ ! -f "$FILE" ]]; then
echo "$FILE:1: file not found" >&2
Expand Down
2 changes: 1 addition & 1 deletion hack/check-coverage-gaps_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ cd "$SCRIPT_DIR/.."

VALIDATOR="$SCRIPT_DIR/check-coverage-gaps.sh"
FIXTURES="$SCRIPT_DIR/testdata/coverage-gaps"
REAL="specs/013-expand-test-coverage/coverage-gaps.md"
REAL="specs/done_013-expand-test-coverage/coverage-gaps.md"

shopt -s nullglob
pass_files=("$FIXTURES"/pass/*.md)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Contract: Coverage Gap Record

**File**: `specs/013-expand-test-coverage/coverage-gaps.md` (moves with the folder to `done_013-…` on completion).
**File**: `specs/done_013-expand-test-coverage/coverage-gaps.md` (moved here with the folder on completion).

## Layout

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ One row in the Coverage Gap Record.

## Coverage Gap Record

The single file `specs/013-expand-test-coverage/coverage-gaps.md` (format: [contracts/coverage-gap-record.md](contracts/coverage-gap-record.md)). It contains every Coverage Gap row, seeded from research R0, plus a status summary line computed by hand on each update and checked by `hack/check-coverage-gaps.sh`.
The single file `specs/done_013-expand-test-coverage/coverage-gaps.md` (format: [contracts/coverage-gap-record.md](contracts/coverage-gap-record.md)). It contains every Coverage Gap row, seeded from research R0, plus a status summary line computed by hand on each update and checked by `hack/check-coverage-gaps.sh`.

## Optional Component

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

**Branch**: `claude/project-thread-nuvx3j` (the spec-kit script derived `013-expand-test-coverage`) | **Date**: 2026-10-09 | **Spec**: [spec.md](spec.md)

**Input**: Feature specification from `specs/013-expand-test-coverage/spec.md`
**Input**: Feature specification from `specs/done_013-expand-test-coverage/spec.md`

## Summary

Expand Down Expand Up @@ -89,7 +89,7 @@ Test-side: Playwright 1.63, vitest 5, `client-go/kubernetes/fake`, existing e2e
### Documentation (this feature)

```text
specs/013-expand-test-coverage/
specs/done_013-expand-test-coverage/
├── spec.md
├── plan.md # this file
├── research.md # Phase 0 (R0 baseline + R1–R11 decisions)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ The telemetry receiver is already covered by `TestTelemetryLifecycle` (R0). This

## R10: Coverage Gap Record

**Decision**: one Markdown file, `specs/013-expand-test-coverage/coverage-gaps.md`, with one table row per gap. Columns and allowed values are fixed in [contracts/coverage-gap-record.md](contracts/coverage-gap-record.md). It is seeded from R0 by the first implementation task, and every PR that closes a gap flips its row in the same commit. A lightweight `hack/check-coverage-gaps.sh`, run in the `docs` job, validates the table: allowed statuses only, and `closed` rows must cite a test path or CI job plus proof link.
**Decision**: one Markdown file, `specs/done_013-expand-test-coverage/coverage-gaps.md`, with one table row per gap. Columns and allowed values are fixed in [contracts/coverage-gap-record.md](contracts/coverage-gap-record.md). It is seeded from R0 by the first implementation task, and every PR that closes a gap flips its row in the same commit. A lightweight `hack/check-coverage-gaps.sh`, run in the `docs` job, validates the table: allowed statuses only, and `closed` rows must cite a test path or CI job plus proof link.

**Rationale**:
- One readable file meets SC-007's ten-minute read.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ description: "Task list for 013-expand-test-coverage"

# Tasks: Expand Test Coverage

**Input**: Design documents from `specs/013-expand-test-coverage/`. These are [plan.md](plan.md), [spec.md](spec.md), [research.md](research.md), [data-model.md](data-model.md), [contracts/](contracts/), [quickstart.md](quickstart.md) and [OPEN-DECISIONS.md](OPEN-DECISIONS.md) (all five, OD-1 to OD-5, are ruled).
**Input**: Design documents from `specs/done_013-expand-test-coverage/`. These are [plan.md](plan.md), [spec.md](spec.md), [research.md](research.md), [data-model.md](data-model.md), [contracts/](contracts/), [quickstart.md](quickstart.md) and [OPEN-DECISIONS.md](OPEN-DECISIONS.md) (all five, OD-1 to OD-5, are ruled).

**Tests**: tests *are* this feature's deliverables (FR-002 to FR-005). Every user-story phase therefore consists mostly of test, fixture and CI tasks. Each gate also has a "proof it can fail" task (FR-006).

Expand Down Expand Up @@ -32,7 +32,7 @@ description: "Task list for 013-expand-test-coverage"
- uses actions pinned by SHA with a version comment
- has a display name that does not start with `go (`
- is added to the `report` job's `needs:` list and to its `NEEDS_ORDER` array and `JOB_MATCHERS` map (`hack/check-ci-report-coverage.sh` enforces this)
- **Gap record**: every task that closes a gap flips its row in `specs/013-expand-test-coverage/coverage-gaps.md` in the same commit (contracts/coverage-gap-record.md).
- **Gap record**: every task that closes a gap flips its row in `specs/done_013-expand-test-coverage/coverage-gaps.md` in the same commit (contracts/coverage-gap-record.md).

## Format: `[ID] [P?] [Story] Description`

Expand All @@ -50,14 +50,14 @@ description: "Task list for 013-expand-test-coverage"
- `cosign.pub` is now `signing/cosign.pub`
- `e2e-capture-overhead` is a new job and new `report` member, and is the template for the `e2e-postgres` job in T057

Edit `specs/013-expand-test-coverage/{plan.md,research.md,contracts/e2e-additions.md}` where a cited path or line changed.
- [X] T002 Create `specs/013-expand-test-coverage/coverage-gaps.md` using the layout and the 24 seed rows in contracts/coverage-gap-record.md. Fill these rows' Evidence:
Edit `specs/done_013-expand-test-coverage/{plan.md,research.md,contracts/e2e-additions.md}` where a cited path or line changed.
- [X] T002 Create `specs/done_013-expand-test-coverage/coverage-gaps.md` using the layout and the 24 seed rows in contracts/coverage-gap-record.md. Fill these rows' Evidence:
- G-12: the `web/e2e/specs/live/*` specs
- G-17: `TestTelemetryLifecycle` / `e2e telemetry`
- G-16: Notes say the Tailscale/playit providers need external accounts (research R7)

Fill the Summary and Last updated lines.
- [X] T003 [P] Write `hack/check-coverage-gaps.sh`, which validates a gap-record file (default `specs/013-expand-test-coverage/coverage-gaps.md`, overridable with `COVERAGE_GAPS_FILE`) against rules 1–8 of contracts/coverage-gap-record.md. It exits non-zero with a `file:line` message per violation.
- [X] T003 [P] Write `hack/check-coverage-gaps.sh`, which validates a gap-record file (default `specs/done_013-expand-test-coverage/coverage-gaps.md`, overridable with `COVERAGE_GAPS_FILE`) against rules 1–8 of contracts/coverage-gap-record.md. It exits non-zero with a `file:line` message per violation.
- [X] T004 [P] Add the fixtures `hack/testdata/coverage-gaps/pass/ok.md` and `hack/testdata/coverage-gaps/fail/{bad-status,closed-no-evidence,wrong-summary,unproven-no-ruling}.md`.
- [X] T005 Write `hack/check-coverage-gaps_test.sh`. It must fail unless every `fail/*.md` is rejected and `pass/ok.md` is accepted (depends on T003, T004).
- [X] T006 Add a `check-coverage-gaps` target (running both scripts) to `Makefile`, include it in the `lint:` prerequisites, and add a `run: make check-coverage-gaps` step to the `docs` job in `.github/workflows/ci.yaml`, next to `make check-specs`.
Expand Down Expand Up @@ -399,7 +399,7 @@ description: "Task list for 013-expand-test-coverage"
Result (2026-10-16): over the feature diff, from before #671 to master after #707, the command prints nothing. Markdown is excluded (valgul, 2026-10-16) because its only matches are prose in CLAUDE.md and the agent and skill docs telling contributors not to use these directives; SC-006 covers in-source directives.
- [X] T061 Confirm `coverage-gaps.md` has no `open` or `in-progress` rows and that `make check-coverage-gaps` passes in CI. Then run `/speckit-analyze` on this folder.
Result (2026-10-16): no open or in-progress rows; `make check-coverage-gaps` passed in "docs and repository checks" on #710 (https://github.com/GameplanePanel/Gameplane/actions/runs/38951995010/job/117146106043). `/speckit-analyze` found 0 critical issues; its two medium findings (the tasks.md checkpoint and the plan.md decision count) are fixed on #710, and SC-004 was amended.
- [ ] T062 Once every PR above is merged and every task is checked or withdrawn, `git mv specs/013-expand-test-coverage specs/done_013-expand-test-coverage` and update every in-repo reference (including `hack/check-coverage-gaps.sh`'s default path) in one `docs:` commit (Constitution IV).
- [X] T062 Once every PR above is merged and every task is checked or withdrawn, `git mv specs/013-expand-test-coverage specs/done_013-expand-test-coverage` and update every in-repo reference (including `hack/check-coverage-gaps.sh`'s default path) in one `docs:` commit (Constitution IV).
Comment thread
coderabbitai[bot] marked this conversation as resolved.

---

Expand Down
Loading