Skip to content
Back to skills

002 Accepted 2d6b5a65

ASecurity

Colin documents can specify time-based staleness thresholds (`stale: 1d`). Users need two distinct behaviors:

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
testing

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 002-accepted_2d6b5a65 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 002 Accepted 2d6b5a65?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 002 Accepted 2d6b5a65
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-002-accepted-2d6b5a65/badge)](https://www.skillsdirectory.com/skills/tools-only-002-accepted-2d6b5a65)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# ADR 014: Calendar-Aligned Staleness

## Status

Accepted

## Context

Colin documents can specify time-based staleness thresholds (`stale: 1d`). Users need two distinct behaviors:

1. **Elapsed time**: "rebuild 24 hours after last compile"
2. **Calendar boundaries**: "rebuild when the calendar day changes"

These are different. A document compiled at 11pm with `stale: 1d` won't rebuild until 11pm tomorrow. But with calendar alignment, it should rebuild at midnight.

## Decision

Use the `c` prefix to indicate calendar-aligned staleness:

- `1d` = 1 day elapsed since compile
- `1cd` = new calendar day (midnight boundary)
- `30m` = 30 minutes elapsed
- `30cm` = at :00 and :30 boundaries

### Validation Constraints

Calendar-aligned values must divide evenly into their containing period to create predictable boundaries:

| Unit | Valid values | Reason |
|------|-------------|--------|
| `cm` | 1,2,3,4,5,6,10,12,15,20,30,60 | Must divide 60 minutes |
| `ch` | 1,2,3,4,6,8,12,24 | Must divide 24 hours |
| `cd` | 1 only | Days don't subdivide into weeks predictably |
| `cw` | 1 only | Weeks don't subdivide into months predictably |
| `cM` | 1,2,3,4,6,12 | Must divide 12 months |
| `cQ` | 1,2,4 | Must divide 4 quarters |

Values like `3cd` or `7cm` are rejected because they would create boundaries that don't align with natural calendar periods.

### Implementation

Minutes and hours use epoch-based periods (fixed boundaries that don't shift). Days and larger use natural calendar boundaries (midnight, Monday, 1st of month, quarter starts).

## Alternatives Considered

**Named schedules** (`stale: quarterly`): More readable but less flexible. Doesn't allow `2cM` (bimonthly) or `15cm` (quarter-hourly).

**Cron syntax**: Powerful but complex for the common cases. Overkill when users just want "refresh monthly."

**Epoch-based for all units**: Consistent but creates unintuitive boundaries for days and larger (why would "every 3 days" start from 1970?).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.