/** * The pure half of the uniform timestamp format (journal spec ยง1.8, R3, M4; * T12986): the strict canonicalizer and the captured timestamp columns. It * has no runtime imports, so the Gate B fingerprint script * (`scripts/fingerprint-store.mjs --canon-timestamps`) loads this file * directly and applies the very function the sealer applies on the wire * (T12987). {@link module:store/sync/timestamps} re-exports it. * * @module store/sync/timestamp-canon * @task T12986 * @task T12987 */ import type { TableScope } from '@cleocode/contracts'; /** * The canonical wire form of a stored timestamp, * `YYYY-MM-DDTHH:MM:SS.sssZ`, or `null` when the value is refused. * * Fractions beyond milliseconds are truncated, never rounded, so a carry can * never change the second. Pure: two replicas always agree. * * @example * ```ts * canonicalStoreTimestamp('2026-09-14 19:56:01'); // '2026-09-14T19:56:01.000Z' * canonicalStoreTimestamp('2026-09-14T21:56:01.5+02:00'); // '2026-09-14T19:56:01.500Z' * canonicalStoreTimestamp('2026-09-14T19:56:01'); // null (zoneless) * canonicalStoreTimestamp('2026-09-14'); // null (date only) * ``` */ export declare function canonicalStoreTimestamp(value: string): string | null; /** * Captured TEXT timestamp columns per sync-set table. The claim-lease columns * (`claimed_at`, `lease_expires_at`) are local-only and are not captured, so * they are not here. INTEGER epoch-millisecond columns (`brain_attention`, * `brain_decisions.validator_run_at`, `brain_session_narrative.last_updated_at`) * are already canonical and are not here either. A test pins this map, plus * an explicit list of those integer columns, against every captured `*_at` * column of both sync sets. */ export declare const SYNC_TIMESTAMP_COLUMNS: Readonly>>>; /** * Columns the one-time rewrite never touches: `tasks_tasks.updated_at` is the * #1698 CAS token, and rewriting it would invalidate a caller's `--if-match`. */ export declare const CANON_EXCLUDED_COLUMNS: Readonly>>>; /** The captured timestamp columns of `table` (empty when it has none). */ export declare function timestampColumns(scope: TableScope, table: string): ReadonlySet; //# sourceMappingURL=timestamp-canon.d.ts.map