import type { AuditEntry } from './engine.js'; export declare function auditPath(repo: string): string; export interface ObservableIssue { id: string; status: string; acceptanceCriteria: Array<{ id: string; status: string; evidence: unknown[]; }>; } /** Seed an EMPTY baseline (idempotent — no-op if one exists). Called by `ztrack init` for a * fresh LOCAL tracker so its very first `issue create` diffs against `{}` and is logged, rather * than being swallowed by observeChanges's silent first-run seed. A tracker that already holds * issues (a linked pull, or an established repo predating this wiring) must NOT be seeded this * way — leaving no baseline lets the first observe seed silently instead of fabricating a burst * of "created now" entries with the wrong timestamp. */ export declare function seedAuditBaseline(repo: string): void; /** Diff the current issues against the last-seen baseline; append an audit entry * for every change (status / AC status / AC added / evidence added). On the very * first run it seeds the baseline silently (no burst of "created" entries). * Returns [] and records nothing if a concurrent observer holds the lock. */ export declare function observeChanges(repo: string, issues: ObservableIssue[], actor?: string): AuditEntry[]; export declare function appendAudit(repo: string, entry: AuditEntry): void; export declare function readAudit(repo: string, issueId?: string): AuditEntry[]; export interface Timestamps { created?: string; updated?: string; stateSince?: string; } /** Derive an issue's timestamps from its audit entries (no fields in the body). */ export declare function timestampsFor(entries: AuditEntry[], issueId: string): Timestamps;