$tableOptions * @return array> */ public function runRedirectsForViewStaged(string $sub, array $tableOptions): array; /** @return bool */ public function viewDoneIsServeable(): bool; /** @return int Unix timestamp, or 0. */ public function getViewDoneBuiltAtTimestamp(): int; /** @return void */ public function markViewDoneBuildCompleted(): void; /** @return array */ public function getViewBuildProgress(): array; /** * @param bool $forceRebuild * @return array */ public function advanceViewBuildOnce(bool $forceRebuild = false): array; /** @return array{ran:bool, reason:string, progress:array} */ public function runPageLoadFallbackAdvance(): array; /** * @param string $sub * @param array $tableOptions * @return int */ public function runRedirectsForViewCountStaged(string $sub, array $tableOptions): int; /** @return void */ public function rebuildViewDoneInBackground(): void; /** @return string */ public function reconcileStagedTablesAtRunnerStartup(): string; // --- ViewBuildHelpers (progress options, SQL staging, state probes) --- /** * @param string $optionName * @param mixed $expected * @return bool */ public function verifyOptionWriteCoherent(string $optionName, $expected): bool; /** @return void */ public function capturePrefixAtBuildStart(): void; /** @return bool */ public function verifyPrefixUnchangedSinceStageOne(): bool; /** @return void */ public function clearPrefixAtStageOne(): void; /** @return array */ public function probeSqlModeForBuild(): array; /** @return array */ public function detectAndAdjustSqlMode(): array; /** * @param string $url * @param int $maxLength * @return string */ public function sanitizeUrlBeforeInsert(string $url, int $maxLength = 0): string; // --- ViewBuildLockAndCron (cross-request lock, cron scheduling) --- /** @return bool */ public function verifyBuildLockSerializesWriter(): bool; /** * @param int $delaySeconds * @return void */ public function scheduleViewDoneRebuild(int $delaySeconds = 1): void; // --- ViewBuildPhpEnvProbe (PHP runtime constraints) --- /** @return array */ public function probePhpEnvironmentForBuild(): array; /** @return bool */ public function probeSetTimeLimitAvailability(): bool; /** @return int */ public function probeMemoryLimitForS9(): int; /** @return array */ public function probeFilesystemEnvironmentForBuild(): array; // --- ViewBuildHostFailurePolicy (permanent error handling) --- /** @return void */ public function clearStagedBuildDegradedState(): void; /** @return bool */ public function reconcilePostStageElevenState(): bool; // --- ViewBuildSessionEnvProbe (MySQL session health) --- /** @return array */ public function probeSessionVariablesAtS1Entry(): array; // --- AdminMutationGate (watermark-based visibility gate) --- /** @return void */ public function markViewDoneInvalidatedByAdminMutation(): void; // --- ViewBuildForceRestart --- /** * @param int $lockTimeoutSeconds * @return bool */ public function forceRestartViewBuild(int $lockTimeoutSeconds = 10): bool; // --- MutationWatermarkSeam --- /** @return int */ public function bumpMutationWatermark(): int; // --- Bridge methods for ViewReadService --- /** @return void */ public function invalidateViewDoneServeableCacheBridge(): void; /** @return array */ public function getStagedQueryOptionsForRead(): array; /** * @param string $shortName * @param int $default * @return int */ public function readBuildProgressOption(string $shortName, int $default = 0): int; }