@wonsukchoi/crondex 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -12
- package/bin/crondex.js +219 -2
- package/catalog.json +352 -2
- package/jobs/automotive/estimate-approval-followup-check.yaml +36 -0
- package/jobs/automotive/vehicle-pickup-reminder.yaml +35 -0
- package/jobs/childcare/enrollment-waitlist-followup-check.yaml +35 -0
- package/jobs/childcare/staff-certification-expiry-check.yaml +35 -0
- package/jobs/devops/error-rate-spike-watch.yaml +2 -2
- package/jobs/fitness/facility-cleaning-log-check.yaml +36 -0
- package/jobs/fitness/trainer-session-package-expiry-check.yaml +35 -0
- package/jobs/government/budget-appropriation-deadline-check.yaml +35 -0
- package/jobs/government/public-meeting-notice-compliance-check.yaml +39 -0
- package/jobs/retail/gift-card-liability-reconciliation-check.yaml +36 -0
- package/jobs/retail/return-fraud-pattern-check.yaml +39 -0
- package/jobs/veterinary/diagnostic-equipment-calibration-check.yaml +35 -0
- package/jobs/veterinary/surgery-prep-check.yaml +30 -0
- package/jobs/warehousing/cycle-count-schedule-check.yaml +35 -0
- package/jobs/warehousing/forklift-inspection-check.yaml +36 -0
- package/lib/deploy.js +167 -0
- package/lib/duplicates-allowlist.js +18 -0
- package/lib/smoke-test.js +32 -0
- package/package.json +3 -1
- package/templates/job.template.yaml +49 -0
package/catalog.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"generated_by": "scripts/build-catalog.js",
|
|
3
3
|
"schema": "schema/job.schema.json",
|
|
4
|
-
"count":
|
|
4
|
+
"count": 271,
|
|
5
5
|
"jobs": [
|
|
6
6
|
{
|
|
7
7
|
"id": "1on1-prep-reminder",
|
|
@@ -462,6 +462,31 @@
|
|
|
462
462
|
],
|
|
463
463
|
"path": "jobs/content/broken-link-check.yaml"
|
|
464
464
|
},
|
|
465
|
+
{
|
|
466
|
+
"id": "budget-appropriation-deadline-check",
|
|
467
|
+
"version": 1,
|
|
468
|
+
"name": "Budget Appropriation Submission Deadline Check",
|
|
469
|
+
"description": "Warns you before an agency's budget appropriation submission is due. Use this if a department has ever missed its window to request funding for the next cycle because the internal deadline snuck up during budget season chaos.",
|
|
470
|
+
"category": "government",
|
|
471
|
+
"tags": [
|
|
472
|
+
"government",
|
|
473
|
+
"budget",
|
|
474
|
+
"appropriation",
|
|
475
|
+
"deadline"
|
|
476
|
+
],
|
|
477
|
+
"schedule": "0 8 * * *",
|
|
478
|
+
"timezone": "UTC",
|
|
479
|
+
"runner": "shell",
|
|
480
|
+
"modes": [
|
|
481
|
+
"script"
|
|
482
|
+
],
|
|
483
|
+
"compatible_agents": [
|
|
484
|
+
"generic",
|
|
485
|
+
"claude",
|
|
486
|
+
"codex"
|
|
487
|
+
],
|
|
488
|
+
"path": "jobs/government/budget-appropriation-deadline-check.yaml"
|
|
489
|
+
},
|
|
465
490
|
{
|
|
466
491
|
"id": "budget-overspend-check",
|
|
467
492
|
"version": 1,
|
|
@@ -1405,6 +1430,31 @@
|
|
|
1405
1430
|
],
|
|
1406
1431
|
"path": "jobs/security/cve-watch.yaml"
|
|
1407
1432
|
},
|
|
1433
|
+
{
|
|
1434
|
+
"id": "cycle-count-schedule-check",
|
|
1435
|
+
"version": 1,
|
|
1436
|
+
"name": "Cycle Count Schedule Adherence Check",
|
|
1437
|
+
"description": "Checks whether scheduled cycle counts actually happened on time, zone by zone. Use this if a cycle count program has ever quietly stopped happening for a whole section of the warehouse because nobody was tracking adherence to the schedule itself, only the count results.",
|
|
1438
|
+
"category": "warehousing",
|
|
1439
|
+
"tags": [
|
|
1440
|
+
"warehousing",
|
|
1441
|
+
"cycle-count",
|
|
1442
|
+
"schedule",
|
|
1443
|
+
"inventory"
|
|
1444
|
+
],
|
|
1445
|
+
"schedule": "0 8 * * 1",
|
|
1446
|
+
"timezone": "UTC",
|
|
1447
|
+
"runner": "shell",
|
|
1448
|
+
"modes": [
|
|
1449
|
+
"script"
|
|
1450
|
+
],
|
|
1451
|
+
"compatible_agents": [
|
|
1452
|
+
"generic",
|
|
1453
|
+
"claude",
|
|
1454
|
+
"codex"
|
|
1455
|
+
],
|
|
1456
|
+
"path": "jobs/warehousing/cycle-count-schedule-check.yaml"
|
|
1457
|
+
},
|
|
1408
1458
|
{
|
|
1409
1459
|
"id": "daily-flashcard-review",
|
|
1410
1460
|
"version": 1,
|
|
@@ -1558,6 +1608,31 @@
|
|
|
1558
1608
|
],
|
|
1559
1609
|
"path": "jobs/devops/dependency-audit.yaml"
|
|
1560
1610
|
},
|
|
1611
|
+
{
|
|
1612
|
+
"id": "diagnostic-equipment-calibration-check",
|
|
1613
|
+
"version": 1,
|
|
1614
|
+
"name": "Diagnostic Equipment Calibration Check",
|
|
1615
|
+
"description": "Tracks calibration due dates for in-house diagnostic equipment (x-ray, in-house lab analyzers, ultrasound) and warns before any lapse. Use this if a lab result has ever been called into question because equipment calibration had quietly lapsed and nobody noticed until an audit.",
|
|
1616
|
+
"category": "veterinary",
|
|
1617
|
+
"tags": [
|
|
1618
|
+
"veterinary",
|
|
1619
|
+
"equipment",
|
|
1620
|
+
"calibration",
|
|
1621
|
+
"compliance"
|
|
1622
|
+
],
|
|
1623
|
+
"schedule": "0 7 * * 1",
|
|
1624
|
+
"timezone": "UTC",
|
|
1625
|
+
"runner": "shell",
|
|
1626
|
+
"modes": [
|
|
1627
|
+
"script"
|
|
1628
|
+
],
|
|
1629
|
+
"compatible_agents": [
|
|
1630
|
+
"generic",
|
|
1631
|
+
"claude",
|
|
1632
|
+
"codex"
|
|
1633
|
+
],
|
|
1634
|
+
"path": "jobs/veterinary/diagnostic-equipment-calibration-check.yaml"
|
|
1635
|
+
},
|
|
1561
1636
|
{
|
|
1562
1637
|
"id": "disk-space-check",
|
|
1563
1638
|
"version": 1,
|
|
@@ -1860,6 +1935,31 @@
|
|
|
1860
1935
|
],
|
|
1861
1936
|
"path": "jobs/creator/engagement-drop-watch.yaml"
|
|
1862
1937
|
},
|
|
1938
|
+
{
|
|
1939
|
+
"id": "enrollment-waitlist-followup-check",
|
|
1940
|
+
"version": 1,
|
|
1941
|
+
"name": "Enrollment Waitlist Follow-Up Check",
|
|
1942
|
+
"description": "Flags waitlisted families who haven't been contacted in a while, so a spot doesn't go unfilled because nobody worked down the list. Use this if an opening has ever sat empty for weeks while a waitlisted family who would've taken it never got a call.",
|
|
1943
|
+
"category": "childcare",
|
|
1944
|
+
"tags": [
|
|
1945
|
+
"childcare",
|
|
1946
|
+
"waitlist",
|
|
1947
|
+
"enrollment",
|
|
1948
|
+
"followup"
|
|
1949
|
+
],
|
|
1950
|
+
"schedule": "0 9 * * 1",
|
|
1951
|
+
"timezone": "UTC",
|
|
1952
|
+
"runner": "shell",
|
|
1953
|
+
"modes": [
|
|
1954
|
+
"script"
|
|
1955
|
+
],
|
|
1956
|
+
"compatible_agents": [
|
|
1957
|
+
"generic",
|
|
1958
|
+
"claude",
|
|
1959
|
+
"codex"
|
|
1960
|
+
],
|
|
1961
|
+
"path": "jobs/childcare/enrollment-waitlist-followup-check.yaml"
|
|
1962
|
+
},
|
|
1863
1963
|
{
|
|
1864
1964
|
"id": "env-drift-check",
|
|
1865
1965
|
"version": 1,
|
|
@@ -1960,7 +2060,7 @@
|
|
|
1960
2060
|
},
|
|
1961
2061
|
{
|
|
1962
2062
|
"id": "error-rate-spike-watch",
|
|
1963
|
-
"version":
|
|
2063
|
+
"version": 2,
|
|
1964
2064
|
"name": "Error Rate Spike Watch",
|
|
1965
2065
|
"description": "Checks your error tracker's recent error count against a threshold and flags a spike. Use this if a bad deploy has ever quietly spiked errors for hours before anyone noticed.",
|
|
1966
2066
|
"category": "devops",
|
|
@@ -1985,6 +2085,31 @@
|
|
|
1985
2085
|
],
|
|
1986
2086
|
"path": "jobs/devops/error-rate-spike-watch.yaml"
|
|
1987
2087
|
},
|
|
2088
|
+
{
|
|
2089
|
+
"id": "estimate-approval-followup-check",
|
|
2090
|
+
"version": 1,
|
|
2091
|
+
"name": "Repair Estimate Approval Follow-Up Check",
|
|
2092
|
+
"description": "Flags repair estimates sent to a customer that haven't been approved yet, so the car doesn't sit untouched while a text goes unanswered. Use this if a vehicle has ever taken up a bay for days because nobody followed up on an estimate the customer never actually saw or responded to.",
|
|
2093
|
+
"category": "automotive",
|
|
2094
|
+
"tags": [
|
|
2095
|
+
"automotive",
|
|
2096
|
+
"repair-shop",
|
|
2097
|
+
"estimate",
|
|
2098
|
+
"followup"
|
|
2099
|
+
],
|
|
2100
|
+
"schedule": "0 9,15 * * *",
|
|
2101
|
+
"timezone": "UTC",
|
|
2102
|
+
"runner": "shell",
|
|
2103
|
+
"modes": [
|
|
2104
|
+
"script"
|
|
2105
|
+
],
|
|
2106
|
+
"compatible_agents": [
|
|
2107
|
+
"generic",
|
|
2108
|
+
"claude",
|
|
2109
|
+
"codex"
|
|
2110
|
+
],
|
|
2111
|
+
"path": "jobs/automotive/estimate-approval-followup-check.yaml"
|
|
2112
|
+
},
|
|
1988
2113
|
{
|
|
1989
2114
|
"id": "event-budget-overrun-check",
|
|
1990
2115
|
"version": 1,
|
|
@@ -2109,6 +2234,31 @@
|
|
|
2109
2234
|
],
|
|
2110
2235
|
"path": "jobs/inventory/expiring-perishable-stock-check.yaml"
|
|
2111
2236
|
},
|
|
2237
|
+
{
|
|
2238
|
+
"id": "facility-cleaning-log-check",
|
|
2239
|
+
"version": 1,
|
|
2240
|
+
"name": "Facility Cleaning Log Check",
|
|
2241
|
+
"description": "Checks that scheduled cleaning tasks (equipment wipe-down, locker rooms, floors) were actually logged as done today. Use this if a cleaning checklist has ever gone unfilled for a shift because it lived on a clipboard nobody was checking.",
|
|
2242
|
+
"category": "fitness",
|
|
2243
|
+
"tags": [
|
|
2244
|
+
"fitness",
|
|
2245
|
+
"cleaning",
|
|
2246
|
+
"facility",
|
|
2247
|
+
"compliance"
|
|
2248
|
+
],
|
|
2249
|
+
"schedule": "0 21 * * *",
|
|
2250
|
+
"timezone": "UTC",
|
|
2251
|
+
"runner": "shell",
|
|
2252
|
+
"modes": [
|
|
2253
|
+
"script"
|
|
2254
|
+
],
|
|
2255
|
+
"compatible_agents": [
|
|
2256
|
+
"generic",
|
|
2257
|
+
"claude",
|
|
2258
|
+
"codex"
|
|
2259
|
+
],
|
|
2260
|
+
"path": "jobs/fitness/facility-cleaning-log-check.yaml"
|
|
2261
|
+
},
|
|
2112
2262
|
{
|
|
2113
2263
|
"id": "failed-login-watch",
|
|
2114
2264
|
"version": 1,
|
|
@@ -2330,6 +2480,31 @@
|
|
|
2330
2480
|
],
|
|
2331
2481
|
"path": "jobs/hospitality/food-safety-temp-log-check.yaml"
|
|
2332
2482
|
},
|
|
2483
|
+
{
|
|
2484
|
+
"id": "forklift-inspection-check",
|
|
2485
|
+
"version": 1,
|
|
2486
|
+
"name": "Forklift Daily Safety Inspection Check",
|
|
2487
|
+
"description": "Checks that each forklift's required daily pre-use inspection was actually logged today. Use this if a forklift has ever been operated on a shift with no inspection logged, which is exactly what an OSHA audit will ask to see records of.",
|
|
2488
|
+
"category": "warehousing",
|
|
2489
|
+
"tags": [
|
|
2490
|
+
"warehousing",
|
|
2491
|
+
"forklift",
|
|
2492
|
+
"safety",
|
|
2493
|
+
"compliance"
|
|
2494
|
+
],
|
|
2495
|
+
"schedule": "0 10 * * *",
|
|
2496
|
+
"timezone": "UTC",
|
|
2497
|
+
"runner": "shell",
|
|
2498
|
+
"modes": [
|
|
2499
|
+
"script"
|
|
2500
|
+
],
|
|
2501
|
+
"compatible_agents": [
|
|
2502
|
+
"generic",
|
|
2503
|
+
"claude",
|
|
2504
|
+
"codex"
|
|
2505
|
+
],
|
|
2506
|
+
"path": "jobs/warehousing/forklift-inspection-check.yaml"
|
|
2507
|
+
},
|
|
2333
2508
|
{
|
|
2334
2509
|
"id": "form-lead-crm-sync-check",
|
|
2335
2510
|
"version": 1,
|
|
@@ -2536,6 +2711,31 @@
|
|
|
2536
2711
|
],
|
|
2537
2712
|
"path": "jobs/crypto/gas-price-alert.yaml"
|
|
2538
2713
|
},
|
|
2714
|
+
{
|
|
2715
|
+
"id": "gift-card-liability-reconciliation-check",
|
|
2716
|
+
"version": 1,
|
|
2717
|
+
"name": "Gift Card Liability Reconciliation Check",
|
|
2718
|
+
"description": "Compares your POS's outstanding gift card balance against your accounting ledger and flags a mismatch. Use this if outstanding gift card liability has ever drifted out of sync with your books for months before anyone reconciled it at year-end and found a gap.",
|
|
2719
|
+
"category": "retail",
|
|
2720
|
+
"tags": [
|
|
2721
|
+
"retail",
|
|
2722
|
+
"gift-cards",
|
|
2723
|
+
"reconciliation",
|
|
2724
|
+
"finance"
|
|
2725
|
+
],
|
|
2726
|
+
"schedule": "0 7 1 * *",
|
|
2727
|
+
"timezone": "UTC",
|
|
2728
|
+
"runner": "shell",
|
|
2729
|
+
"modes": [
|
|
2730
|
+
"script"
|
|
2731
|
+
],
|
|
2732
|
+
"compatible_agents": [
|
|
2733
|
+
"generic",
|
|
2734
|
+
"claude",
|
|
2735
|
+
"codex"
|
|
2736
|
+
],
|
|
2737
|
+
"path": "jobs/retail/gift-card-liability-reconciliation-check.yaml"
|
|
2738
|
+
},
|
|
2539
2739
|
{
|
|
2540
2740
|
"id": "github-issue-triage",
|
|
2541
2741
|
"version": 1,
|
|
@@ -4525,6 +4725,31 @@
|
|
|
4525
4725
|
],
|
|
4526
4726
|
"path": "jobs/team/pto-balance-check.yaml"
|
|
4527
4727
|
},
|
|
4728
|
+
{
|
|
4729
|
+
"id": "public-meeting-notice-compliance-check",
|
|
4730
|
+
"version": 1,
|
|
4731
|
+
"name": "Public Meeting Notice Compliance Check",
|
|
4732
|
+
"description": "Checks that an upcoming public meeting's notice was posted with enough lead time to meet open-meetings law requirements. Use this if a meeting has ever gotten challenged, or had to be redone, because notice went out a day late.",
|
|
4733
|
+
"category": "government",
|
|
4734
|
+
"tags": [
|
|
4735
|
+
"government",
|
|
4736
|
+
"open-meetings",
|
|
4737
|
+
"notice",
|
|
4738
|
+
"compliance"
|
|
4739
|
+
],
|
|
4740
|
+
"schedule": "0 8 * * *",
|
|
4741
|
+
"timezone": "UTC",
|
|
4742
|
+
"runner": "shell",
|
|
4743
|
+
"modes": [
|
|
4744
|
+
"script"
|
|
4745
|
+
],
|
|
4746
|
+
"compatible_agents": [
|
|
4747
|
+
"generic",
|
|
4748
|
+
"claude",
|
|
4749
|
+
"codex"
|
|
4750
|
+
],
|
|
4751
|
+
"path": "jobs/government/public-meeting-notice-compliance-check.yaml"
|
|
4752
|
+
},
|
|
4528
4753
|
{
|
|
4529
4754
|
"id": "quality-defect-rate-check",
|
|
4530
4755
|
"version": 1,
|
|
@@ -4869,6 +5094,31 @@
|
|
|
4869
5094
|
],
|
|
4870
5095
|
"path": "jobs/restaurant/reservation-noshow-deposit-check.yaml"
|
|
4871
5096
|
},
|
|
5097
|
+
{
|
|
5098
|
+
"id": "return-fraud-pattern-check",
|
|
5099
|
+
"version": 1,
|
|
5100
|
+
"name": "Return Fraud Pattern Check",
|
|
5101
|
+
"description": "Checks recent returns for patterns that look like abuse — the same customer returning unusually often, or a spike in receiptless returns — instead of treating every return as an isolated, no-questions-asked event. Use this if return fraud has ever quietly eaten margin for months because nobody was looking at returns in aggregate.",
|
|
5102
|
+
"category": "retail",
|
|
5103
|
+
"tags": [
|
|
5104
|
+
"retail",
|
|
5105
|
+
"returns",
|
|
5106
|
+
"fraud",
|
|
5107
|
+
"loss-prevention"
|
|
5108
|
+
],
|
|
5109
|
+
"schedule": "0 7 * * 1",
|
|
5110
|
+
"timezone": "UTC",
|
|
5111
|
+
"runner": "shell",
|
|
5112
|
+
"modes": [
|
|
5113
|
+
"script"
|
|
5114
|
+
],
|
|
5115
|
+
"compatible_agents": [
|
|
5116
|
+
"generic",
|
|
5117
|
+
"claude",
|
|
5118
|
+
"codex"
|
|
5119
|
+
],
|
|
5120
|
+
"path": "jobs/retail/return-fraud-pattern-check.yaml"
|
|
5121
|
+
},
|
|
4872
5122
|
{
|
|
4873
5123
|
"id": "return-refund-backlog-check",
|
|
4874
5124
|
"version": 1,
|
|
@@ -5393,6 +5643,31 @@
|
|
|
5393
5643
|
],
|
|
5394
5644
|
"path": "jobs/devops/ssl-cert-expiry-check.yaml"
|
|
5395
5645
|
},
|
|
5646
|
+
{
|
|
5647
|
+
"id": "staff-certification-expiry-check",
|
|
5648
|
+
"version": 1,
|
|
5649
|
+
"name": "Childcare Staff Certification Expiry Check",
|
|
5650
|
+
"description": "Checks staff CPR/first-aid and other required childcare certifications and warns before any expire. Use this if a licensing inspection has ever been the first place a lapsed certification got noticed, instead of catching it with time to renew.",
|
|
5651
|
+
"category": "childcare",
|
|
5652
|
+
"tags": [
|
|
5653
|
+
"childcare",
|
|
5654
|
+
"staff",
|
|
5655
|
+
"certification",
|
|
5656
|
+
"compliance"
|
|
5657
|
+
],
|
|
5658
|
+
"schedule": "0 8 * * 1",
|
|
5659
|
+
"timezone": "UTC",
|
|
5660
|
+
"runner": "shell",
|
|
5661
|
+
"modes": [
|
|
5662
|
+
"script"
|
|
5663
|
+
],
|
|
5664
|
+
"compatible_agents": [
|
|
5665
|
+
"generic",
|
|
5666
|
+
"claude",
|
|
5667
|
+
"codex"
|
|
5668
|
+
],
|
|
5669
|
+
"path": "jobs/childcare/staff-certification-expiry-check.yaml"
|
|
5670
|
+
},
|
|
5396
5671
|
{
|
|
5397
5672
|
"id": "staff-child-ratio-compliance-check",
|
|
5398
5673
|
"version": 1,
|
|
@@ -5743,6 +6018,31 @@
|
|
|
5743
6018
|
],
|
|
5744
6019
|
"path": "jobs/manufacturing/supplier-otd-performance-watch.yaml"
|
|
5745
6020
|
},
|
|
6021
|
+
{
|
|
6022
|
+
"id": "surgery-prep-check",
|
|
6023
|
+
"version": 1,
|
|
6024
|
+
"name": "Surgery Prep Check",
|
|
6025
|
+
"description": "Checks tomorrow's scheduled surgeries for missing pre-op bloodwork or signed consent forms. Use this if a surgery has ever had to be rescheduled the morning of because consent wasn't signed or bloodwork hadn't been run, and nobody checked the night before.",
|
|
6026
|
+
"category": "veterinary",
|
|
6027
|
+
"tags": [
|
|
6028
|
+
"veterinary",
|
|
6029
|
+
"surgery",
|
|
6030
|
+
"pre-op",
|
|
6031
|
+
"consent"
|
|
6032
|
+
],
|
|
6033
|
+
"schedule": "0 17 * * *",
|
|
6034
|
+
"timezone": "UTC",
|
|
6035
|
+
"runner": "shell",
|
|
6036
|
+
"modes": [
|
|
6037
|
+
"script"
|
|
6038
|
+
],
|
|
6039
|
+
"compatible_agents": [
|
|
6040
|
+
"generic",
|
|
6041
|
+
"claude",
|
|
6042
|
+
"codex"
|
|
6043
|
+
],
|
|
6044
|
+
"path": "jobs/veterinary/surgery-prep-check.yaml"
|
|
6045
|
+
},
|
|
5746
6046
|
{
|
|
5747
6047
|
"id": "tax-deadline-reminder",
|
|
5748
6048
|
"version": 1,
|
|
@@ -6019,6 +6319,31 @@
|
|
|
6019
6319
|
],
|
|
6020
6320
|
"path": "jobs/legal/trademark-renewal-reminder.yaml"
|
|
6021
6321
|
},
|
|
6322
|
+
{
|
|
6323
|
+
"id": "trainer-session-package-expiry-check",
|
|
6324
|
+
"version": 1,
|
|
6325
|
+
"name": "Trainer Session Package Expiry Check",
|
|
6326
|
+
"description": "Flags members with a paid personal-training session package that's expiring soon with sessions still unused. Use this if a client has ever paid for ten sessions, used three, and let the rest expire because nobody nudged them to book before the window closed.",
|
|
6327
|
+
"category": "fitness",
|
|
6328
|
+
"tags": [
|
|
6329
|
+
"fitness",
|
|
6330
|
+
"personal-training",
|
|
6331
|
+
"sessions",
|
|
6332
|
+
"expiry"
|
|
6333
|
+
],
|
|
6334
|
+
"schedule": "0 9 * * 1",
|
|
6335
|
+
"timezone": "UTC",
|
|
6336
|
+
"runner": "shell",
|
|
6337
|
+
"modes": [
|
|
6338
|
+
"script"
|
|
6339
|
+
],
|
|
6340
|
+
"compatible_agents": [
|
|
6341
|
+
"generic",
|
|
6342
|
+
"claude",
|
|
6343
|
+
"codex"
|
|
6344
|
+
],
|
|
6345
|
+
"path": "jobs/fitness/trainer-session-package-expiry-check.yaml"
|
|
6346
|
+
},
|
|
6022
6347
|
{
|
|
6023
6348
|
"id": "travel-insurance-expiry-check",
|
|
6024
6349
|
"version": 1,
|
|
@@ -6168,6 +6493,31 @@
|
|
|
6168
6493
|
],
|
|
6169
6494
|
"path": "jobs/fleet/vehicle-maintenance-due-check.yaml"
|
|
6170
6495
|
},
|
|
6496
|
+
{
|
|
6497
|
+
"id": "vehicle-pickup-reminder",
|
|
6498
|
+
"version": 1,
|
|
6499
|
+
"name": "Finished Vehicle Pickup Reminder",
|
|
6500
|
+
"description": "Flags vehicles marked ready for pickup that the customer hasn't collected yet, so the lot doesn't fill up with finished cars nobody's chasing. Use this if a completed car has ever sat in the lot for a week because the \"ready\" call was made once and then forgotten.",
|
|
6501
|
+
"category": "automotive",
|
|
6502
|
+
"tags": [
|
|
6503
|
+
"automotive",
|
|
6504
|
+
"repair-shop",
|
|
6505
|
+
"pickup",
|
|
6506
|
+
"customer"
|
|
6507
|
+
],
|
|
6508
|
+
"schedule": "0 9 * * *",
|
|
6509
|
+
"timezone": "UTC",
|
|
6510
|
+
"runner": "shell",
|
|
6511
|
+
"modes": [
|
|
6512
|
+
"script"
|
|
6513
|
+
],
|
|
6514
|
+
"compatible_agents": [
|
|
6515
|
+
"generic",
|
|
6516
|
+
"claude",
|
|
6517
|
+
"codex"
|
|
6518
|
+
],
|
|
6519
|
+
"path": "jobs/automotive/vehicle-pickup-reminder.yaml"
|
|
6520
|
+
},
|
|
6171
6521
|
{
|
|
6172
6522
|
"id": "vehicle-registration-expiry-check",
|
|
6173
6523
|
"version": 1,
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: estimate-approval-followup-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Repair Estimate Approval Follow-Up Check
|
|
4
|
+
description: >
|
|
5
|
+
Flags repair estimates sent to a customer that haven't been approved
|
|
6
|
+
yet, so the car doesn't sit untouched while a text goes unanswered. Use
|
|
7
|
+
this if a vehicle has ever taken up a bay for days because nobody
|
|
8
|
+
followed up on an estimate the customer never actually saw or responded
|
|
9
|
+
to.
|
|
10
|
+
category: automotive
|
|
11
|
+
tags: [automotive, repair-shop, estimate, followup]
|
|
12
|
+
schedule: "0 9,15 * * *"
|
|
13
|
+
timezone: "UTC"
|
|
14
|
+
runner: shell
|
|
15
|
+
command: >
|
|
16
|
+
today=$(date +%s);
|
|
17
|
+
awk -F',' -v hours="{{followup_after_hours}}" -v today="$today" '
|
|
18
|
+
NR==1 {next}
|
|
19
|
+
$3 == "pending" {
|
|
20
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f \"%Y-%m-%d %H:%M\" \"" $2 "\" +%s 2>/dev/null";
|
|
21
|
+
cmd | getline sent_epoch; close(cmd);
|
|
22
|
+
age_hours = (today - sent_epoch) / 3600;
|
|
23
|
+
if (age_hours >= hours) {
|
|
24
|
+
printf "NO RESPONSE: RO %s — estimate sent %s (%d hrs ago)\n", $1, $2, age_hours;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
' "{{estimates_csv_path}}"
|
|
28
|
+
variables:
|
|
29
|
+
estimates_csv_path:
|
|
30
|
+
default: "./repair-estimates.csv"
|
|
31
|
+
description: "Path to a CSV with columns: ro_number,sent_at (YYYY-MM-DD HH:MM),status (pending/approved/declined)."
|
|
32
|
+
followup_after_hours:
|
|
33
|
+
default: 24
|
|
34
|
+
description: Hours an estimate can sit with no response before it counts as needing a follow-up call.
|
|
35
|
+
compatible_agents: [generic, claude, codex]
|
|
36
|
+
notes: Follow up by phone or text once flagged — this job only surfaces the gap, it doesn't contact the customer.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: vehicle-pickup-reminder
|
|
2
|
+
version: 1
|
|
3
|
+
name: Finished Vehicle Pickup Reminder
|
|
4
|
+
description: >
|
|
5
|
+
Flags vehicles marked ready for pickup that the customer hasn't
|
|
6
|
+
collected yet, so the lot doesn't fill up with finished cars nobody's
|
|
7
|
+
chasing. Use this if a completed car has ever sat in the lot for a week
|
|
8
|
+
because the "ready" call was made once and then forgotten.
|
|
9
|
+
category: automotive
|
|
10
|
+
tags: [automotive, repair-shop, pickup, customer]
|
|
11
|
+
schedule: "0 9 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v days="{{warn_days_before}}" -v today="$today" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$3 == "ready" {
|
|
19
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
20
|
+
cmd | getline ready_epoch; close(cmd);
|
|
21
|
+
age_days = (today - ready_epoch) / 86400;
|
|
22
|
+
if (age_days >= days) {
|
|
23
|
+
printf "NOT PICKED UP: RO %s — ready since %s (%d days)\n", $1, $2, age_days;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{repair_orders_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
repair_orders_csv_path:
|
|
29
|
+
default: "./repair-orders-status.csv"
|
|
30
|
+
description: "Path to a CSV with columns: ro_number,ready_date (YYYY-MM-DD),status (ready/picked-up)."
|
|
31
|
+
warn_days_before:
|
|
32
|
+
default: 2
|
|
33
|
+
description: Days a finished vehicle can sit before it counts as overdue for pickup.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: A car sitting too long after completion can also mean unpaid storage/labor charges piling up — worth a call, not just a lot walk-through.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: enrollment-waitlist-followup-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Enrollment Waitlist Follow-Up Check
|
|
4
|
+
description: >
|
|
5
|
+
Flags waitlisted families who haven't been contacted in a while, so a
|
|
6
|
+
spot doesn't go unfilled because nobody worked down the list. Use this
|
|
7
|
+
if an opening has ever sat empty for weeks while a waitlisted family who
|
|
8
|
+
would've taken it never got a call.
|
|
9
|
+
category: childcare
|
|
10
|
+
tags: [childcare, waitlist, enrollment, followup]
|
|
11
|
+
schedule: "0 9 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%s);
|
|
16
|
+
awk -F',' -v days="{{stale_after_days}}" -v today="$today" '
|
|
17
|
+
NR==1 {next}
|
|
18
|
+
$3 == "waiting" {
|
|
19
|
+
cmd = "date -d \"" $2 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $2 "\" +%s 2>/dev/null";
|
|
20
|
+
cmd | getline last_contact_epoch; close(cmd);
|
|
21
|
+
age_days = (today - last_contact_epoch) / 86400;
|
|
22
|
+
if (age_days >= days) {
|
|
23
|
+
printf "STALE: %s — last contacted %s (%d days ago)\n", $1, $2, age_days;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{waitlist_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
waitlist_csv_path:
|
|
29
|
+
default: "./enrollment-waitlist.csv"
|
|
30
|
+
description: "Path to a CSV with columns: family_name,last_contacted_date (YYYY-MM-DD),status (waiting/enrolled/withdrawn)."
|
|
31
|
+
stale_after_days:
|
|
32
|
+
default: 30
|
|
33
|
+
description: Days since last contact before a waitlisted family counts as due for a check-in.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: A family that's gone quiet on a stale waitlist entry may have already enrolled elsewhere — a check-in also keeps the waitlist itself accurate.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
id: staff-certification-expiry-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Childcare Staff Certification Expiry Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks staff CPR/first-aid and other required childcare certifications
|
|
6
|
+
and warns before any expire. Use this if a licensing inspection has ever
|
|
7
|
+
been the first place a lapsed certification got noticed, instead of
|
|
8
|
+
catching it with time to renew.
|
|
9
|
+
category: childcare
|
|
10
|
+
tags: [childcare, staff, certification, compliance]
|
|
11
|
+
schedule: "0 8 * * 1"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
awk -F',' -v days="{{warn_days_before}}" '
|
|
16
|
+
NR==1 {next}
|
|
17
|
+
{
|
|
18
|
+
cmd = "date -d \"" $3 "\" +%s 2>/dev/null || date -j -f %Y-%m-%d \"" $3 "\" +%s 2>/dev/null";
|
|
19
|
+
cmd | getline expiry_epoch; close(cmd);
|
|
20
|
+
"date +%s" | getline now_epoch; close("date +%s");
|
|
21
|
+
diff_days = (expiry_epoch - now_epoch) / 86400;
|
|
22
|
+
if (diff_days <= days) {
|
|
23
|
+
printf "EXPIRING: %s — %s expires %s (%d days)\n", $1, $2, $3, diff_days;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{staff_certs_csv_path}}"
|
|
27
|
+
variables:
|
|
28
|
+
staff_certs_csv_path:
|
|
29
|
+
default: "./staff-certifications.csv"
|
|
30
|
+
description: "Path to a CSV with columns: staff_name,cert_type (e.g. CPR, first-aid, mandated reporter),expiry_date (YYYY-MM-DD)."
|
|
31
|
+
warn_days_before:
|
|
32
|
+
default: 45
|
|
33
|
+
description: How many days before a certification expires to start warning.
|
|
34
|
+
compatible_agents: [generic, claude, codex]
|
|
35
|
+
notes: Required certification types vary by state/licensing body — confirm your jurisdiction's list rather than assuming CPR/first-aid is the whole requirement.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
id: error-rate-spike-watch
|
|
2
|
-
version:
|
|
2
|
+
version: 2
|
|
3
3
|
name: Error Rate Spike Watch
|
|
4
4
|
description: >
|
|
5
5
|
Checks your error tracker's recent error count against a threshold and
|
|
@@ -11,7 +11,7 @@ schedule: "*/15 * * * *"
|
|
|
11
11
|
timezone: "UTC"
|
|
12
12
|
runner: hybrid
|
|
13
13
|
command: >
|
|
14
|
-
if [ -n "$SENTRY_AUTH_TOKEN" ] && [ -n "{{sentry_project}}" ]; then
|
|
14
|
+
if [ -n "${SENTRY_AUTH_TOKEN:-}" ] && [ -n "{{sentry_project}}" ]; then
|
|
15
15
|
count=$(curl -s -H "Authorization: Bearer $SENTRY_AUTH_TOKEN" "https://sentry.io/api/0/projects/{{sentry_org}}/{{sentry_project}}/events/?statsPeriod=15m" | grep -o '"id"' | wc -l | tr -d ' ');
|
|
16
16
|
if [ "$count" -ge "{{threshold}}" ]; then echo "WARNING: $count errors in last 15m (threshold {{threshold}})"; exit 1;
|
|
17
17
|
else echo "OK: $count errors in last 15m"; fi
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
id: facility-cleaning-log-check
|
|
2
|
+
version: 1
|
|
3
|
+
name: Facility Cleaning Log Check
|
|
4
|
+
description: >
|
|
5
|
+
Checks that scheduled cleaning tasks (equipment wipe-down, locker rooms,
|
|
6
|
+
floors) were actually logged as done today. Use this if a cleaning
|
|
7
|
+
checklist has ever gone unfilled for a shift because it lived on a
|
|
8
|
+
clipboard nobody was checking.
|
|
9
|
+
category: fitness
|
|
10
|
+
tags: [fitness, cleaning, facility, compliance]
|
|
11
|
+
schedule: "0 21 * * *"
|
|
12
|
+
timezone: "UTC"
|
|
13
|
+
runner: shell
|
|
14
|
+
command: >
|
|
15
|
+
today=$(date +%Y-%m-%d);
|
|
16
|
+
missing=$(awk -F',' -v today="$today" -v tasks="{{required_tasks}}" '
|
|
17
|
+
BEGIN { n = split(tasks, req, ","); }
|
|
18
|
+
$2 == today { done[$1] = 1 }
|
|
19
|
+
END {
|
|
20
|
+
for (i = 1; i <= n; i++) {
|
|
21
|
+
t = req[i];
|
|
22
|
+
gsub(/^ +| +$/, "", t);
|
|
23
|
+
if (!(t in done)) print "NOT LOGGED TODAY: " t;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
' "{{cleaning_log_csv_path}}");
|
|
27
|
+
if [ -n "$missing" ]; then echo "$missing"; exit 1; else echo "OK: all required cleaning tasks logged today"; fi
|
|
28
|
+
variables:
|
|
29
|
+
cleaning_log_csv_path:
|
|
30
|
+
default: "./cleaning-log.csv"
|
|
31
|
+
description: "Path to a CSV with columns: task_name,completed_date (YYYY-MM-DD)."
|
|
32
|
+
required_tasks:
|
|
33
|
+
default: "equipment wipe-down, locker rooms, floors, restrooms"
|
|
34
|
+
description: Comma-separated list of tasks that must be logged each day.
|
|
35
|
+
compatible_agents: [generic, claude, codex]
|
|
36
|
+
notes: Only as reliable as whoever fills in the log — pair with a physical walk-through periodically to spot-check that logged-done actually means done.
|