Skip to main content

Business rules catalog

A reference for every "if X then Y" rule that runs in the background and changes something a customer sees. If a status flips, an email lands, a scan stops, or a finding moves on its own, the rule is documented here.

These rules are not configurable per tenant unless the row says so. They run on the same schedule for every workspace.

Agent fleet rules

Heartbeat windows govern when the Online / Offline badge changes on Settings → Agents and when the team gets paged. Email recipients are users whose role includes the Create, rotate, and revoke agent tokens permission.

RuleWindowWhat changes
Agent shown as Offline in the dashboardNo heartbeat for more than 20 minutes (two missed cycles at the 10-minute heartbeat rate)The agent row badge flips from Online to Offline. No email yet.
First Agent Offline emailAgent has been Offline for more than 1 hourOne email per agent to every user with Create, rotate, and revoke agent tokens. The agent is marked alerted so the system stops re-paging on each 5-minute pass.
Daily "still offline" reminderAgent stayed Offline, and 24 hours have passed since the last reminderOne follow-up email per agent. Repeats every 24 hours until the agent comes back.
Agent restored emailAgent heartbeats again after a prior offline alertOne all-clear email per agent. The alerted flag clears so a future outage starts the cycle fresh.
Install token expiryToken unused for 60 minutesToken can no longer install an agent. Generate a new one from Settings → Agents → New Token.

The heartbeat check runs every 5 minutes. A new outage will trigger its first email between 60 and 65 minutes after the last heartbeat.

See Retrievy Agent fleet for the agent management workflow.

Security exception rules

Security exceptions are time-bound. The system reminds the team before an exception expires and reopens findings when it does.

RuleTriggerWhat changes
Expiring exception reminderAn exception's expiry date is exactly 7 days awayOne email per affected finding to every user authorized to see that finding. The email runs once per exception.
Expired exception cleanupAn exception's expiry date has passedThe exception record is deleted. Every affected finding flips from Risk Accepted back to Open, with the audit trail entry showing the change came from an expired exception.
Global rule cascade on expiryAn expired exception had Global rule scopeEvery sibling finding that shares the same check rule and was riding on the same exception flips back to Open at the same time.
Project item restorationAn expired exception had frozen a remediation project itemThe project item returns to Pending, so the team sees it back on the project board.

The reminder job runs daily at 08:00 in the workspace timezone. The cleanup job runs daily at midnight in the workspace timezone, plus an hourly sweep so a finding does not stay frozen until the next overnight pass.

See Security Exceptions for the registry workflow.

Drift alert rules

Drift alerts batch related cloud or on-prem changes into one email instead of paging on every event.

RuleWindowWhat changes
Roll-up window30 minutes from the first drift event in a data sourceEvery drift event detected within the window is grouped into one notification.
Send delayUp to 5 minutes after the window closesThe dispatcher runs every 5 minutes, so a window closing at 14:30 mails between 14:30 and 14:35. Maximum delay from the first event to the email is 35 minutes.
Per-window dedupeEach roll-up window is marked notified before the email goes outThe same window is never mailed twice. Retrievy drops one notification rather than risk an alert storm if something fails mid-send.
Mutation cap per emailUp to 60 mutation rows per windowIf the window has more, the email lists the first 60 sorted as removed first, then added, then modified, and ends with a "+N more" summary.
Drift history retention7 daysDrift events and closed windows older than 7 days are purged daily at midnight in the workspace timezone.

Drift alert recipients are users whose role includes the Create, rotate, and revoke agent tokens permission, the same group that receives heartbeat alerts.

Scan rules

A scan that never finishes blocks the queue and freezes the dashboard. These rules clean up stuck work.

RuleThresholdWhat changes
Stuck Pending scanScan sat in Pending for more than 30 minutes without progressThe scan flips to Failed with the message "Scan timed out while pending in queue." Findings from the previous successful scan stay in place.
Stuck Running scanScan in Running or processing payloads for more than 4 hoursThe scan flips to Failed with the message "Scan exceeded maximum execution time (4h)."
Concurrent scanner capOne scan per workspace on Essentials, three on Advanced and Build Your OwnAdditional scans queue until a slot frees up.
Queue priorityBest effort on Essentials, Standard on Advanced and Build Your OwnBest effort scans run when the platform has spare capacity. Standard scans take precedence.
Daily scheduled scanOnce per day at 23:00 in the workspace timezoneThe platform queues one scan per eligible data source.

The cleanup pass runs every 5 minutes. A stuck scan will be failed between 30 and 35 minutes after it stalled (or between 4 hours and 4 hours 5 minutes, for the long timeout).

For the per-plan numbers, see Plan feature matrix.

Assignment rules

When a teammate claims a finding, takes it on for verification, or sits on it too long, the assignment service decides who owns the work next. The rules below apply to every finding on the Kanban Triage board and inside remediation projects.

RuleThresholdWhat changes
Stale claim auto-releaseA claimed finding sat in Pending Verification for longer than the Claim timeout setting (default 14 days)The claim releases. The finding returns to unassigned. The prior owner receives a "Stale claim released" notification.
Auto-claim on Mark as FixedAn unassigned finding is marked fixed by a user, and the workspace has Auto-claim on Mark as Fixed enabled (default on)The actor becomes the claimant before the status flips to Pending Verification.
Team collapse on commitA shared finding (multiple co-assignees) gets claimed by one userAll other co-assignees are removed and notified that the work was taken on.
Project auto-assignA finding is added to a remediation projectIf the project has one assignee, the finding commits to them. If it has more than one, the finding becomes shared across the project's team.
Project member addedA new member joins an active projectThe new member becomes a co-assignee on every still-active finding in that project. Committed findings stay with their current owner.
Project member removedA member is removed from a projectThe member is removed as co-assignee from that project's findings, unless another active project that links the same finding also lists them.
Deactivated user cleanupA workspace user is deactivatedEvery committed and shared claim held by that user is released, so the work does not stay locked.
Manual override releaseA user with the Force-release or reassign someone else's claim permission reassigns or releases a findingThe previous claimant is notified that the claim moved, with the reason recorded in the audit trail.

The stale claim sweep runs hourly per workspace. The Claim timeout is editable on Settings → Assignment.

See Hardening Kanban for the board where these rules play out and Remediation Projects for project ownership.

Status transition rules

The status of a finding is controlled by a small set of allowed transitions. Manual transitions to a Resolved badge are blocked. Resolution must come from a scanner re-check ("trust but verify").

FromToTrigger
OpenPending VerificationA user clicks Mark as Fixed on the finding.
ReopenedPending VerificationA user clicks Mark as Fixed on the finding.
Open or ReopenedRisk AcceptedA user completes the Accept Risk flow and a Security Exception record is created.
Pending VerificationOpenThe current claimant clicks Release claim without marking the finding fixed.
Pending VerificationResolved (Verified)The next scan ran the check and found the issue gone.
Pending VerificationReopenedThe next scan ran the check and the issue is still present. Reopen count increments. SLA clock resets per severity.
Open or ReopenedResolved (Automated)The next scan ran the check and found the issue gone without anyone marking it fixed (resource deleted, auto-remediated upstream).
Resolved (Verified) or Resolved (Automated)ReopenedThe next scan detected the issue came back.
Risk AcceptedOpenThe exception was revoked from the registry, or its expiry passed and the cleanup job ran.

Manual flips to Resolved (Verified) or Resolved (Automated) are rejected at the service boundary. The scanner is the only actor that can write a Resolved badge.

See Findings lifecycle for the full state diagram and how each transition affects the Retrievy Index.

Plan eligibility rules

Scheduled work is gated by the workspace's billing state. A workspace whose subscription is not in a scan-eligible state does not consume scan capacity, but its data stays intact so cleanup, retention, and exports continue to run.

Billing stateScheduled scansSnapshots, cleanup, retentionSign-in
Active (paid and current)RunRunAllowed
Trialing (trial active)RunRunAllowed
Canceling (canceled, end of cycle pending)Run until cycle endRunAllowed
Past due (payment failed, in dunning)PausedRunAllowed (read-only)
PausedPausedRunAllowed (read-only)
Canceled (in 30-day grace)PausedRunAllowed (read-only with Reactivate Subscription banner)
Disputed (chargeback in progress)PausedRun, exports blockedAllowed (read-only)
Unpaid (dunning exhausted)PausedRunBlocked
ExpiredPausedRun, exports blockedBlocked
PurgedPausedStoppedBlocked

The billing-state filter runs in the scheduler when it dispatches the daily scan job. Exception cleanup, drift cleanup, snapshots, and retention pruning ignore the filter and run for every workspace, so data continues to age out cleanly during a grace window.

See Plans and pricing for the full flow when payment fails, including the 30-day reactivation window.