*/ public static function identity(): array { $manifest = COMMENTMATE_PATH . 'build-manifest.php'; $identity = is_readable($manifest) ? require $manifest : array(); if (!is_array($identity)) { $identity = array(); } return array( 'version' => self::value($identity, 'version', COMMENTMATE_VERSION), 'source_sha' => self::value($identity, 'source_sha', 'unknown'), 'payload_digest' => self::value($identity, 'payload_digest', 'unknown'), 'built_at' => self::value($identity, 'built_at', 'unknown'), ); } /** * Stable, human-readable receipt used to match an installed plugin with an * exactly tested local artifact. */ public static function receipt(): string { $identity = self::identity(); return sprintf( 'CommentMate %s | source=%s | payload=%s | built=%s', $identity['version'], $identity['source_sha'], $identity['payload_digest'], $identity['built_at'] ); } /** * @param array $identity Identity manifest. */ private static function value(array $identity, string $key, string $fallback): string { if (!isset($identity[$key]) || !is_scalar($identity[$key])) { return $fallback; } $value = trim((string) $identity[$key]); return '' === $value ? $fallback : $value; } }