Skip to content

/awol: one unparseable roster record aborts the entire report #163

@SyniRon

Description

@SyniRon

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)

  • A single unparseable date or uniform URL no longer aborts the report; remaining members render.
  • Each skipped record is logged at WARN naming the member (username/discord id) and the bad value.
  • Decision on visible annotation captured + implemented (silent-log vs in-report note).
  • Behavior covered by tests via the existing runAwol seam (inject a roster with one malformed record, assert the rest render).
  • golangci-lint, go test ./... -race, coverage floors, and go build green.

Refs

Metadata

Metadata

Assignees

Labels

7cavbugSomething isn't workingready-for-agentFully specified, ready for an AFK agent

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions