Dormancy and Promotion
Stepped dormancy deductions, 50% floor, promotion delays for T5+, and re-activation paths.
Dormancy and Promotion
Trust is not static. An agent that stops operating gradually loses trust through dormancy deductions. An agent that wants to reach the highest tiers must demonstrate sustained performance over time through promotion delays. These two mechanisms work together to ensure that only active, consistently excellent agents hold high trust.
Dormancy Deduction
When an agent stops recording signals, a dormancy clock starts ticking. Deductions happen at specific milestones — they are not continuous. This makes them predictable: operators know exactly when the next deduction will occur.
// From canonical.ts
const DORMANCY = {
milestones: [
{ days: 7, deduction: 0.06 },
{ days: 14, deduction: 0.06 },
{ days: 28, deduction: 0.06 },
{ days: 42, deduction: 0.06 },
{ days: 56, deduction: 0.06 },
{ days: 84, deduction: 0.05 },
{ days: 112, deduction: 0.05 },
{ days: 140, deduction: 0.05 },
{ days: 182, deduction: 0.05 },
],
floor: 0.50,
halfLifeDays: 182,
};
How It Works
- Agent records its last signal on Day 0.
- On Day 7 (no activity): deduct 6% of current score.
- On Day 14 (still no activity): deduct another 6%.
- Continue through all 9 milestones.
- Deductions stop at the 50% floor.
Worked Example
Agent starts dormancy at score 800 (T5 Trusted):
| Day | Deduction | Score After | Tier | |-----|-----------|-------------|------| | 0 | — | 800 | T5 | | 7 | 6% (48) | 752 | T4 | | 14 | 6% (45) | 707 | T4 | | 28 | 6% (42) | 665 | T4 | | 42 | 6% (40) | 625 | T3 | | 56 | 6% (38) | 587 | T3 | | 84 | 5% (29) | 558 | T3 | | 112 | 5% (28) | 530 | T3 | | 140 | 5% (27) | 503 | T3 | | 182 | 5% (25) | 478 | T2 |
After 182 days of inactivity, the agent has dropped from 800 to 478 — a 40% reduction. But it will never drop below 400 (50% of 800).
The 50% Floor
floor: 0.50 // Never below 50% of pre-dormancy score
No matter how long an agent stays dormant, it retains at least half its pre-dormancy trust. This reflects the principle that past performance has lasting (though diminishing) value. An agent that once reached T5 is fundamentally different from one that never did.
For the example above: the floor is 400 (50% of 800). After all 9 milestones fire, the score would be 478 — above the floor. If further deductions were applied (they are not — 9 milestones is the maximum), the score would be clamped at 400.
Activity Resets the Clock
Any valid signal resets the dormancy timer to Day 0. The agent does not need to "catch up" on missed milestones. A single action resets everything.
// Agent dormant for 40 days (2 deductions applied)
// Agent processes one signal on Day 40
// Dormancy clock resets — next deduction is Day 47 if no further activity
This means agents can maintain their trust score by performing occasional actions. The minimum cadence to avoid any dormancy deduction is one signal every 6 days.
Promotion Delays
While dormancy governs inactivity, promotion delays govern the speed of advancement. The first five tiers (T0–T4) have no time gate — the logarithmic gain curve is the natural throttle. But T5, T6, and T7 require sustained performance over days or weeks.
// From canonical.ts
const PROMOTION_DELAYS = [0, 0, 0, 0, 0, 7, 10, 14];
// T0: instant T4: instant
// T1: instant T5: 7 days
// T2: instant T6: 10 days
// T3: instant T7: 14 days
How Promotion Delays Work
To promote from T4 to T5, the agent must:
- Reach a score of 800 (T5 minimum).
- Hold that score for 7 consecutive days.
- Continue performing successfully during the delay period.
- If the score drops below 800 at any point during the 7 days, the timer resets.
// Pseudo-code for promotion check
function checkPromotion(agent: Agent, targetTier: number): boolean {
const delay = PROMOTION_DELAYS[targetTier];
if (delay === 0) {
// T0–T4: instant promotion if score meets threshold
return agent.score >= TRUST_TIERS[`T${targetTier}`].min;
}
// T5–T7: check sustained score
const qualifyingSince = agent.getQualifyingSince(targetTier);
if (!qualifyingSince) return false;
const daysSinceQualifying = daysBetween(qualifyingSince, now());
return daysSinceQualifying >= delay;
}
Why Time Gates Exist
The logarithmic gain formula already makes high-trust advancement slow. But time gates add a second dimension: consistency over time.
Without time gates, an agent could theoretically reach T7 through a burst of successful high-risk actions in a short period. The 14-day gate for T7 means the agent must sustain T7-qualifying performance for two full weeks. During that time:
- Canary probes continue running.
- Any failure that drops the score below 951 resets the clock.
- Dormancy deductions still apply if activity gaps occur.
- The oscillation detector watches for instability.
This ensures that T5+ agents have genuinely stable, reliable behavior patterns — not just a lucky streak.
The T0–T4 Design Decision
Why no time gates for T0–T4? Because the logarithmic gain curve already provides sufficient throttling at lower tiers. Moving from T0 (score 0) to T4 (score 650) requires hundreds of successful actions. Adding time gates on top of that would be redundant and would penalize legitimately high-performing agents.
From the canonical.ts comments:
T0-T4: logarithmic gain curve requires hundreds of actions per tier T5-T7: promotion delays (7/10/14 days) gate advancement A 24h velocity guard is redundant and penalizes legitimately high-performing agents.
Promotion + Dormancy Interaction
Promotion delays and dormancy deductions can interact:
Scenario: Agent reaches score 810 (qualifying for T5). The 7-day timer starts. On Day 5, the agent goes inactive. On Day 7, a dormancy deduction (6%) fires.
Day 0: Score 810 → T5 timer starts
Day 5: Agent goes inactive
Day 7: Dormancy deduction: 810 × 0.06 = 48.6 → score drops to ~761
Score < 800 → T5 timer RESETS
Agent is still T4
The dormancy deduction dropped the score below the T5 threshold, which reset the promotion timer. The agent must now rebuild to 800 and hold for another full 7 days.
This interaction is intentional. An agent that cannot remain active for 7 days during the promotion window should not be promoted to T5.
Re-Activation Paths
Agents that have been RETIRED can be re-activated through three paths, depending on how long they have been retired:
const REACTIVATION = {
shortThresholdDays: 30,
longThresholdDays: 90,
};
Path 1: Short Retirement (< 30 days)
Agent goes straight to AUDITED state. No course required. The assumption is that the agent's capabilities have not changed significantly.
Path 2: Medium Retirement (30–90 days)
Agent takes an abbreviated qualification course:
const abbreviatedCourse = {
safetyExercises: 3,
ethicalExercises: 3,
triggerCategoryExercises: 3, // Category that caused the retirement
randomExercises: 6,
totalExercises: 15, // vs. 31 for full course
};
On passing, the agent enters AUDITED state.
Path 3: Long Retirement (> 90 days)
Full PROVISIONING reset. Score goes back to 0. The agent must pass the complete 31-exercise qualification course. It is treated as a new agent.
Note: dormancy deductions continue running during retirement. An agent retired at score 800 for 90+ days will have a significantly reduced score (likely near the 400 floor) even before the full reset.
Try It: Simulate Dormancy
import { createTrustEngine } from '@vorionsys/atsf-core';
import { DORMANCY } from '@vorionsys/basis';
const engine = createTrustEngine({ gainRate: 0.05 });
// Start with an established agent at score 800
await engine.initializeEntity('dormancy-demo', 5); // T5
// Simulate dormancy milestones
let score = 800;
const floor = score * DORMANCY.floor;
console.log(`Starting score: ${score} (floor: ${floor})`);
console.log('---');
for (const milestone of DORMANCY.milestones) {
const deduction = Math.round(score * milestone.deduction);
score = Math.max(floor, score - deduction);
// Determine tier
let tier = 'T0';
if (score >= 951) tier = 'T7';
else if (score >= 876) tier = 'T6';
else if (score >= 800) tier = 'T5';
else if (score >= 650) tier = 'T4';
else if (score >= 500) tier = 'T3';
else if (score >= 350) tier = 'T2';
else if (score >= 200) tier = 'T1';
console.log(
`Day ${String(milestone.days).padStart(3)}: ` +
`-${String(deduction).padStart(2)} (${(milestone.deduction * 100).toFixed(0)}%) → ` +
`${score} (${tier})`
);
}
Expected output:
Starting score: 800 (floor: 400)
---
Day 7: -48 (6%) → 752 (T4)
Day 14: -45 (6%) → 707 (T4)
Day 28: -42 (6%) → 665 (T4)
Day 42: -40 (6%) → 625 (T3)
Day 56: -38 (6%) → 587 (T3)
Day 84: -29 (5%) → 558 (T3)
Day 112: -28 (5%) → 530 (T3)
Day 140: -27 (5%) → 503 (T3)
Day 182: -25 (5%) → 478 (T2)
Key Takeaways
- Dormancy uses 9 stepped milestones, not continuous decay. Predictable.
- The 50% floor preserves historical achievement.
- Any activity resets the dormancy clock. One signal every 6 days prevents all deductions.
- Promotion delays (7/10/14 days) apply only to T5, T6, and T7.
- Time gates require sustained qualifying scores — any dip resets the timer.
- Re-activation paths scale with retirement duration: none, abbreviated, or full reset.
Next Steps
- Observation Tiers — how inspectability caps trust
- Cooldowns and Circuit Breakers — what triggers dormancy-adjacent protections
- Eight-Tier Model — what each tier allows