Planekeeper is currently in alpha development. Features and APIs may change. Feedback is welcome! Request early access to get started.

Rule types

Detailed reference for each rule type — days behind, majors behind, and minors behind — including threshold configuration, stable-only filtering, and calculation examples.

Rules define how Planekeeper measures version staleness. Each rule type calculates a “behind by” value and compares it against three severity thresholds you configure: moderate, high, and critical.

How thresholds work

Every rule has three threshold tiers. Thresholds must be ordered from smallest to largest:

ThresholdSeverityMeaning
moderateModerateFirst level of concern
highHighSignificantly behind
criticalCriticalImmediate attention required

The highest matching threshold wins. If the behind-by value is below the moderate threshold, no alert is generated.

Example: A rule with thresholds moderate=7, high=30, critical=90:

  • Behind by 5 days: no alert
  • Behind by 10 days: moderate alert
  • Behind by 45 days: high alert
  • Behind by 100 days: critical alert

Days behind

Alerts when your deployed version was released more than N days ago, measured from the deployed version’s release date to today.

Parameter: max_days (set via the three threshold fields)

How it calculates:

  1. Look up the release date of your discovered (deployed) version in the upstream releases
  2. Calculate the number of days between that release date and today (time.Since(deployedReleaseDate))
  3. Compare against your thresholds

The latest version’s release date is not used in this calculation. Only the deployed version’s release date and the current date matter.

Example (assuming today is Mar 15):

Your versionReleased onDays since release (to today)Behind by
1.25.0Jan 2945 days45 days
2.0.0Mar 105 days5 days
3.1.0Dec 699 days99 days

With thresholds of moderate=30, high=60, critical=90:

  • Version 1.25.0: 45 days since release = moderate
  • Version 2.0.0: 5 days since release = no alert
  • Version 3.1.0: 99 days since release = critical
warning

Version not found

If your deployed version does not exist in the upstream releases (for example, a custom build or fork), Planekeeper marks it as critical with a behind-by value of -1. Update your gather job configuration to ensure the deployed version appears in the release list.


Majors behind

Alerts when your deployed version is N or more major versions behind the latest release.

Parameter: max_majors (set via the three threshold fields)

How it calculates:

  1. Parse both your deployed version and the latest version as semantic versions
  2. Subtract the major version numbers: latest_major - deployed_major

Example:

Your versionLatest versionCalculationBehind by
1.5.23.1.03 - 12 majors
2.0.02.9.52 - 20 majors
5.3.18.0.08 - 53 majors

With thresholds of moderate=1, high=2, critical=3:

  • Version 1.5.2 vs 3.1.0: 2 majors behind = high
  • Version 2.0.0 vs 2.9.5: 0 majors behind = no alert
  • Version 5.3.1 vs 8.0.0: 3 majors behind = critical
warning

Parse failures

If either version string cannot be parsed as a semantic version (for example, latest or nightly-build), the alert is marked critical with a behind-by value of -1. Use version transforms on your scrape job to normalize version strings into semver format.


Minors behind

Alerts when your deployed version is N or more minor releases behind the latest. This rule counts actual releases, not version number gaps.

Parameter: max_minors (set via the three threshold fields)

How it calculates (preferred method):

  1. Collect all upstream releases between your deployed version and the latest
  2. Count unique major.minor combinations in that range
  3. Use that count as the behind-by value

This means skipped version numbers do not inflate the count. If a project releases 1.1, 1.2, 1.5, and 1.8 (skipping 1.3, 1.4, 1.6, 1.7), only four minor releases are counted.

Example with release-list counting:

Available releases: 2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.4.0, 3.0.0, 3.1.0

Your versionLatestUnique minors betweenBehind by
2.2.03.1.02.3, 2.4, 3.0, 3.14 minors
2.4.03.1.03.0, 3.12 minors
3.0.03.1.03.11 minor

Fallback calculation:

When the full release list is unavailable, Planekeeper uses a formula:

  • Same major version: latest_minor - deployed_minor
  • Different major versions: (latest_major - deployed_major) + latest_minor

This is an approximation and may overcount when major version boundaries are crossed.


Stable-only filtering

Enable the stable_only flag on a rule to ignore prereleases when determining the latest version. When enabled, Planekeeper skips any release whose version string contains:

alpha, beta, rc, dev, snapshot, canary, nightly, pre

The check is case-insensitive, so 1.0.0-RC1, 2.0.0-beta.3, and 3.0.0-SNAPSHOT are all treated as prereleases.

Example:

Available releases (newest first): 5.0.0-rc1, 4.2.0, 4.1.0, 4.0.0

stable_onlyLatest version usedNotes
Off5.0.0-rc1Compares against the prerelease
On4.2.0Skips the RC, uses the latest stable
success

When to use stable_only

Enable stable-only filtering when you track production deployments that should only follow stable releases. Leave it off if your deployment pipeline tracks release candidates or beta versions intentionally.


Choosing the right rule type

ScenarioRecommended rule typeWhy
Security-sensitive applicationsdays_behindTime-based detection catches any stale version regardless of versioning scheme
Frameworks with breaking changes per majormajors_behindTracks the effort level of upgrading
Rapidly iterating projectsminors_behindCounts actual releases you have missed
Mixed versioning strategiesCombine multiple rulesCreate separate alert configs with different rule types for the same scrape+gather pair