Scheduler job templates
Templates for creating scheduler_job objects via the CLI (process-data-cli-only: do not edit instance YAML under .zqk/process/).
Operator guide (kernel survival vs optional source-code pack, how to use the daemon): docs/howto/SCHEDULER_AND_MAINTENANCE.md.
autofix_batch_cleanup_hourly.yaml
Hourly job that cleans up .zqk/autofix/:
- Removes processed batch files (FIXED_, PROCESSED_).
- Deletes unprocessed
AUTOFIX-*.jsonfiles older than AUTOFIX_BATCH_MAX_AGE_HOURS (default 1 hour). Set to0to delete all unprocessed on each run.
Create (first time):
zqk object create scheduler_job --file scripts/scheduler_jobs/autofix_batch_cleanup_hourly.yaml --keep-file
If job already exists (e.g. same ID):
zqk object create scheduler_job --file scripts/scheduler_jobs/autofix_batch_cleanup_hourly.yaml --keep-file --force
Trigger once (manual run):
zqk scheduler trigger SCH-autofix-batch-cleanup
Check itβs loaded and scheduled:
zqk scheduler list
zqk scheduler status
Check run history:
zqk scheduler history --job-id SCH-autofix-batch-cleanup
zqk scheduler activity --job-id SCH-autofix-batch-cleanup
Policy and lifecycle: docs/scheduler/SCHEDULER_JOB_POLICY_AND_LIFECYCLE.md.
autofix_process_pending.yaml
Timer run_wrapper for zqk system auto-fix-process-pending (id SCH-autofix-process-pending).
Now includes glossary maintenance flags:
--sync-glossary(dry-run glossary candidate scan after batch processing)--sync-glossary-apply(create missing terms, capped byAUTOFIX_GLOSSARY_MAX_CREATE)
Default cap in YAML: AUTOFIX_GLOSSARY_MAX_CREATE=25.
Create/update from YAML (high-level new object flow):
zqk object create scheduler_job --file scripts/scheduler_jobs/autofix_process_pending.yaml --promote
retention_tolerance_catchall.yaml
Catch-all retention job: runs retention tolerance for all kinds in retention_tolerance.yaml. Used by zqk system ensure-retention-jobs when no job with job_type: retention_tolerance exists.
Ensure jobs exist (creates or fixes job_type):
zqk system ensure-retention-jobs
Manual creation flow:
zqk object create scheduler_job --file scripts/scheduler_jobs/retention_tolerance_catchall.yaml --promote
SCH-016: Cleanup Old Command Metrics (bulk delete)
SCH-016 must use bulk delete instead of a per-ID loop to avoid re-creating storage bloat. Apply the patch (portable macOS/Linux) via CLI:
zqk object update SCH-016 --file scripts/sch016-command-patch.yaml
To re-enable the job after patching, promote it along its lifecycle: zqk object promote SCH-016 (legacy alternative: zqk object update SCH-016 --field "status=active").
See scripts/sch016-command-patch.yaml and rule object-bulk-delete-not-loop.mdc.
audit_event_aggregation_default.yaml
Default audit event aggregation job (e.g. SCH-002). Used by zqk system ensure-retention-jobs when no job with job_type: audit_event_aggregation exists.
Ensure jobs exist:
zqk system ensure-retention-jobs
Manual creation flow:
zqk object create scheduler_job --file scripts/scheduler_jobs/audit_event_aggregation_default.yaml --promote
Persistent Daemons vs. Scheduled Jobs
semantic_bridge.yaml & truth_sentinel.yaml
scripts/scheduler_jobs/semantic_bridge.yaml and scripts/scheduler_jobs/truth_sentinel.yaml describe continuous background daemons rather than recurring timer jobs:
- Semantic Bridge (
SCH-semantic-bridge): Continuously monitors the lifecycle WAL for completed requirements and specifications, updating vector index embeddings. - QA Truth Sentinel (
SCH-truth-sentinel): Continuously monitors the lifecycle WAL forin_progressandcompletetransitions to run the AST structural auditor and QA gates.
Anti-Orphan Discipline: Running continuous daemons (max_runtime_seconds: 0) under timer scheduler loops without supervisor process management causes them to detach under PID 1 when parent tasks terminate, causing hidden resource leaks.
Recommended Lifecycle:
- Supervised Daemons: Manage via hostservice / OS supervision (zqk system start, LaunchAgent on macOS, systemd user service on Linux).
- One-Shot Evaluation: For QA audits without long-running daemons, run zqk system truth-sentinel --once --id <ID>.
- Both templates ship disabled by default (enabled: false) to prevent accidental orphaned detachments.