feat: cap job_runs history at last 10 per job #78

Merged
josh merged 1 commits from feat/cap-job-runs-history into dev 2026-06-06 09:27:05 -04:00
Owner

Tailscale, Patchmon, and Semaphore sync jobs all wrote into a shared
job_runs table with no retention. With default poll intervals of 15-60
minutes, history grew unbounded.

  • Add pruneJobRuns(jobId) and pruneAllJobRuns() helpers.
  • Prune after every completeJobRun() so new runs trim old ones.
  • Prune once on init() to clean up existing over-cap rows.
  • Prune in importJobs() so re-imported runs are also capped.
  • Defensive LIMIT 10 in getJobRuns() for the read path.

No UI changes needed — _renderRunList already renders whatever the
server returns. No schema migration — only row deletions.

Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

Tailscale, Patchmon, and Semaphore sync jobs all wrote into a shared job_runs table with no retention. With default poll intervals of 15-60 minutes, history grew unbounded. - Add pruneJobRuns(jobId) and pruneAllJobRuns() helpers. - Prune after every completeJobRun() so new runs trim old ones. - Prune once on init() to clean up existing over-cap rows. - Prune in importJobs() so re-imported runs are also capped. - Defensive LIMIT 10 in getJobRuns() for the read path. No UI changes needed — _renderRunList already renders whatever the server returns. No schema migration — only row deletions. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
josh added 1 commit 2026-06-06 09:26:01 -04:00
feat: cap job_runs history at last 10 per job
CI / test (pull_request) Successful in 13s
CI / build-dev (pull_request) Has been skipped
e330119753
Tailscale, Patchmon, and Semaphore sync jobs all wrote into a shared
job_runs table with no retention. With default poll intervals of 15-60
minutes, history grew unbounded.

- Add pruneJobRuns(jobId) and pruneAllJobRuns() helpers.
- Prune after every completeJobRun() so new runs trim old ones.
- Prune once on init() to clean up existing over-cap rows.
- Prune in importJobs() so re-imported runs are also capped.
- Defensive LIMIT 10 in getJobRuns() for the read path.

No UI changes needed — _renderRunList already renders whatever the
server returns. No schema migration — only row deletions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
josh scheduled this pull request to auto merge when all checks succeed 2026-06-06 09:27:05 -04:00
josh merged commit 53fbcbe22c into dev 2026-06-06 09:27:05 -04:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: josh/Catalyst#78