Problem
Records in programs/catalog/ are dated snapshots of official pages — each
carries retrieved_at and its source URLs. Official pages change, so a
catalog that was accurate when retrieved can silently ship stale deadlines
months later. The README frames every record as a dated snapshot, but nothing
actively tells the maintainer "this snapshot is now old."
Proposal
A scheduled GitHub Actions workflow (weekly cron) that:
- scans every record in
programs/catalog/;
- flags records whose
retrieved_at is older than a threshold (proposal:
90 days, configurable in the workflow);
- fails the scheduled run — or opens/updates a single tracking issue —
listing each stale record with its official URL, so it can be re-verified
against the live page.
It must not run on pull requests: contributors should never be blocked by
calendar drift they didn't cause. Freshness is a maintenance signal, not a
merge gate.
Acceptance criteria
- New workflow under
.github/workflows/ with schedule: and
workflow_dispatch: triggers only.
- Output lists each stale record's id,
retrieved_at, and official URL.
- Reuses the existing catalog parsing from
scripts/verify/catalog.js where
practical rather than re-implementing YAML handling.
Problem
Records in
programs/catalog/are dated snapshots of official pages — eachcarries
retrieved_atand its source URLs. Official pages change, so acatalog that was accurate when retrieved can silently ship stale deadlines
months later. The README frames every record as a dated snapshot, but nothing
actively tells the maintainer "this snapshot is now old."
Proposal
A scheduled GitHub Actions workflow (weekly cron) that:
programs/catalog/;retrieved_atis older than a threshold (proposal:90 days, configurable in the workflow);
listing each stale record with its official URL, so it can be re-verified
against the live page.
It must not run on pull requests: contributors should never be blocked by
calendar drift they didn't cause. Freshness is a maintenance signal, not a
merge gate.
Acceptance criteria
.github/workflows/withschedule:andworkflow_dispatch:triggers only.retrieved_at, and official URL.scripts/verify/catalog.jswherepractical rather than re-implementing YAML handling.