Problem
/awol aborts the whole roster report when a single member record fails to parse. Two spots in commands/awol.go call HandleError + return inside the per-member loop:
- date parse failure (
commands/awol.go:~169-173)
- uniform/milpac URL parse failure (
commands/awol.go:~195-199)
One bad record kills the report for everyone. The error strings also name neither the offending member nor the bad value, so staff can't tell who/what tripped it.
Scope / origin
Pre-existing behavior — predates and was preserved through #159 (PR #162). Explicitly deferred out of #159 to keep that PR scoped; filing as the agreed follow-up.
Proposed behavior (needs a decision)
Skip-and-continue instead of abort: log the offending member + bad value at WARN (via utils.Warn), drop that one member from the report, and render the rest. Optionally surface a small "N records skipped" note in the embed/file output so the omission isn't silent.
Decision for triage: silently skip + log, or skip + visibly annotate the report? Partial-but-rendered beats all-or-nothing, but staff should probably know coverage was incomplete.
Acceptance criteria (draft)
Refs
Problem
/awolaborts the whole roster report when a single member record fails to parse. Two spots incommands/awol.gocallHandleError+returninside the per-member loop:commands/awol.go:~169-173)commands/awol.go:~195-199)One bad record kills the report for everyone. The error strings also name neither the offending member nor the bad value, so staff can't tell who/what tripped it.
Scope / origin
Pre-existing behavior — predates and was preserved through #159 (PR #162). Explicitly deferred out of #159 to keep that PR scoped; filing as the agreed follow-up.
Proposed behavior (needs a decision)
Skip-and-continue instead of abort: log the offending member + bad value at WARN (via
utils.Warn), drop that one member from the report, and render the rest. Optionally surface a small "N records skipped" note in the embed/file output so the omission isn't silent.Decision for triage: silently skip + log, or skip + visibly annotate the report? Partial-but-rendered beats all-or-nothing, but staff should probably know coverage was incomplete.
Acceptance criteria (draft)
runAwolseam (inject a roster with one malformed record, assert the rest render).golangci-lint,go test ./... -race, coverage floors, andgo buildgreen.Refs
/awolaccountable-day rework, /awol: accountable-day count (subtract LOA) + days-AWOL severity report #159).commands/awol.go:~169-173,:~195-199.