Westside Operational Hygiene

story-westside-basketball-ops-hygiene User Story

active user-story westside-basketball foundational

story: Westside Operational Hygiene

Role

Westside Operator (Lucas, Ava, anyone maintaining Westside infrastructure) — not end-user facing.

Key

ops-hygiene

Want

As the Westside operator, I want naming conventions, resource labels, dead code, schema drift, and minor infra cleanups to be tracked and resolved so that the Westside platform stays coherent over time.

So That

So that onboarding a new agent, a new coach, or a new developer doesn't require explaining "ignore the name, it's historical" — the platform matches its own documentation, conventions are enforced uniformly, and cleanup debt doesn't accumulate into the kind of rot that forces a rewrite.

Why this story exists

Most Westside work traces to a Marcus/parent/coach workflow story (roster visibility, email blasts, jersey ordering, contract signing, etc.). But some work is foundational — it doesn't serve a specific end-user workflow directly, it serves the operator's ability to maintain the platform without ceremony. Renaming westside-landing to westside-app to match the {project}-app naming convention is a canonical example: no parent or player will ever notice, but it keeps the internal mental model consistent with every other frontend in the stack.
Per template-ticket: "A devops infra ticket might have arch:deployment,track:devops,type:infra but no story: because it's foundational work that enables stories without being one." However, the check-board-item.sh hook enforces story: as mandatory on every board item. This story exists as the load-bearing answer for foundational Westside work until either the hook is relaxed or every foundational item gets a dedicated story of its own. Pragmatic over pure.

Acceptance Criteria

This story is evergreen — it is never "done" in the conventional sense. Instead, it serves as the home for a rotating set of hygiene tickets. Each completed hygiene ticket contributes to the success metric below.
  • [ ] New foundational/infra/hygiene tickets have a clear home (this story) so the hook doesn't block them
  • [ ] Hygiene tickets on board-westside-basketball carry story:ops-hygiene as the traceability anchor
  • [ ] A hygiene ticket is scoped narrowly enough that its acceptance criteria are "before → after" with no user-visible change expected (if a parent would notice, it's not a hygiene ticket — it's a feature or bug)

Success Metric

At the end of each quarter, a quick review of closed story:ops-hygiene tickets should show them trending down — hygiene debt is being paid off faster than it accumulates. Specifically: the count of naming-convention violations, dead code references, schema/model drifts, and "TEMPORARY" comments in the westside codebases should decrease over time.

Examples of what fits here

  • westside-landing → westside-app rename (the ticket this story unblocks)
  • basketball-api sponsors table / sponsor_outreach email type missing from models.py (schema drift from westside-ops audit)
  • age_group NULL on all 7 teams in the live DB (data-cleanup, not a workflow bug)
  • Re-enabling the bases/standard/networkpolicy.yaml once the kube-router ipset bug is resolved upstream
  • Any TEMPORARY: comment that has outlived its explanation in kustomization patches

What doesn't fit here

  • User-visible work — if Marcus, a coach, a parent, or a player experiences the change, it's a real user story, not hygiene
  • Security fixes — those get their own story because they carry risk and urgency hygiene doesn't
  • New features — even small ones
  • Bugs with production impact — bugs get tracked as bugs, not hygiene
  • arch-deployment-westside-basketball (if it exists) — most hygiene tickets touch deployment infrastructure
  • arch-domain-westside-basketball (if it exists) — schema drift tickets touch the domain model
  • board-westside-basketball — where hygiene tickets live
  • template-ticket — the convention that explicitly allows foundational work to omit story: (which the current hook does not implement; this story is the pragmatic workaround)
  • feedback_naming_convention — the {project}-app / {project}-api / {project}-docs pattern that drives the first hygiene ticket
  • feedback_discovered_scope_always_tracked — the policy that says discovered cleanup work must become tickets
  • story-westside-ops-spreadsheet-access — the sister story that directly serves Marcus; this one serves the platform itself