staleTtl = max(0, $staleTtl); } public function getStatus(KnowledgeEntry $entry, \DateTimeImmutable $at): string { if (! $entry->isValid()) { return self::INVALID; } if ($entry->isMerged()) { return self::MERGED; } if ($at <= $entry->getExpiresAt()) { return self::FRESH; } $staleUntil = $entry->getExpiresAt()->modify('+' . $this->staleTtl . ' seconds'); return $at <= $staleUntil ? self::STALE : self::EXPIRED; } public function isReusable(KnowledgeEntry $entry, \DateTimeImmutable $at, bool $allowStale = true): bool { $status = $this->getStatus($entry, $at); return $status === self::FRESH || ($allowStale && in_array($status, [self::STALE, self::MERGED], true)); } public function getStaleTtl(): int { return $this->staleTtl; } }