Skip to content

Classify JobKinds: user-facing vs server-internal #50

Description

@Sootopolis

Question

Which JobKinds deserve to be in the user-facing CLI / HTTP surface, and which are pure server-internal bookkeeping that users shouldn't have to think about?

Proposal

Kind User cares? Today Proposed
Recruitment yes — primary feature user-facing user-facing
Membership yes — admin tool user-facing user-facing
Stats yes — performance reports user-facing user-facing
History mixed — "ingest matches" is a real op, but most fires are prep user-facing user-facing
Blacklist yes — recruitment input user-facing user-facing
MatchRef no — pure rename-recovery bookkeeping user-facing server-internal
ClubData no/indirect — feeds authz + scouting partly exposed server-internal

Implications if accepted

  • No public CLI subcommand for internal kinds. Drop ccas ref and ccas clubdata from the public command table (decline subcommands issue).

  • No public HTTP route under /api/jobs/* for internal kinds. Either drop POST /api/jobs/clubdata entirely (clubdata-route issue pivots) or move to POST /api/admin/jobs/clubdata if an admin namespace exists.

  • Server auto-creates default JobSchedule rows at first boot:

    • MatchRef — daily, e.g. 03:00.
    • ClubData — every 6h.
  • Optional hidden escape hatches via decline Visibility.Partial:

    • ccas admin ref --force
    • ccas admin clubdata --force <slug>

    Useful for ops debugging ("I just got promoted to admin and want CCAS to notice now"). Not advertised in --help.

  • Operator can still edit/disable the auto-schedules via ccas schedule.

Why this matters

Asking a user to run ccas ref is asking them to compensate for Chess.com's behaviour (handle renames). That's CCAS implementation detail leaking into UX. Same for ccas clubdata: users consume the data indirectly through recruitment / authz; they shouldn't have to remember to refresh it.

Counter-arguments worth considering

  • Force-refresh is sometimes legitimate. Just-promoted admin wants CCAS to recognise them. The hidden ccas admin subcommand handles this.
  • Debugging. Internal kinds should still be triggerable manually during development. Same hidden subcommand handles this.
  • Future automation. If a downstream feature ever needs to chain "refresh club data, then run recruitment," it should do so via internal API, not by simulating CLI commands. Internal-only is consistent with that.

Affects

Decision needed

Accept the table as proposed? Modifications? Once decided, close this issue with a comment recording the chosen classification, then unblock the two affected issues (#45 and #46 — remove their pending-decision label).

Reference

Tracked under epic #40 (CLI v0). Roadmap: ~/.claude/plans/ultra-sparkling-unicorn.md (to be amended once this decision lands).

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:serverBackend HTTP server, jobs, schedulerpending-decisionWaiting on a direction to be chosen

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions