/** * What `auden status` reports about the **eval shadow tree** — the criteria * files a guide is graded against, which live at `.auden/evals/` * (`docs/plans/eval-criteria-on-disk-plan.md` → slice 3). * * The tree is deliberately invisible to everything else: `.auden/` appears in * none of discovery's root lists (`packages/cli/src/rules/discover.ts:93-105`), * so nothing under it is imported as a guide. That containment is the feature — * a rubric must not land in the agent's context as if it were instructions — * and it is also why this exists. A file no surface mentions is a file nobody * maintains, which is the standing risk recorded in that plan's Open questions. * * **Each entry is named by the guide it grades, not just by its own path**, and * that mapping comes from `guidePathFromEvalShadow` — the inverse of the * derivation that placed it. Re-deriving it here by trimming a prefix would be * a second expression of the convention, and the inverse is deliberately * narrower than a prefix trim: it refuses remainders the forward derivation * would never emit, so a stray file that merely sits under `.auden/evals/` * cannot be reported as criteria for a guide that could not have them. * * Kept free of citty/console — the command injects the filesystem read, the * same shape `computeDocsStatus` uses. */ export type EvalShadowRow = { /** Repo-relative POSIX path of the criteria file. */ path: string; /** The guide those criteria grade, repo-relative. */ guidePath: string; }; export type EvalShadowStatus = { /** True when `.auden/evals/` exists at all. */ exists: boolean; /** Recognised criteria files, sorted by path for a stable report. */ rows: EvalShadowRow[]; /** * Files under the shadow tree that name no guide — a hand-created stray, or * something left by a tool that does not know the convention. * * **Reported, never removed**, matching how the docs phase treats an * unmanaged file — "it is reported and never removed" * (`packages/cli/src/docs/sync-docs.ts:411-413`, `findUnmanagedFileNames`). * Nothing here can be shown to be Auden's, so nothing here is Auden's to * delete. Naming them is the point — silently dropping them from the count * would make the tree look tidy while it is not. */ unrecognized: string[]; }; export type EvalShadowStatusDeps = { /** * List a directory, or return `null` when it does not exist. Any other read * error should propagate rather than be reported as an empty tree. */ listDir: (dir: string) => Promise<{ name: string; isDirectory: boolean; }[] | null>; }; /** * Walk the project's shadow tree. * * Project scope only. A `global` guide's criteria live under * `~/.auden/evals/` by the same rule, but `status`' other rows are repo-scoped * (`computeDocsStatus` roots at the repo), and a status command that silently * mixed two roots would report files the current repo does not contain. */ export declare function computeEvalShadowStatus(repoRoot: string, deps: EvalShadowStatusDeps): Promise; /** * The lines `auden status` prints for the shadow tree, or none at all when the * repo has no criteria on disk — a repo that never synced any is not in a * broken state and should not be told it is. */ export declare function formatEvalShadowStatus(status: EvalShadowStatus): string[]; //# sourceMappingURL=eval-status.d.ts.map