@blundergoat/goat-flow
Version:
AI coding agent harness and local dashboard for Claude Code, OpenAI Codex, Google Antigravity, and GitHub Copilot - setup audits, guardrails, structured skills, deny hooks, and persistent learning loops.
134 lines • 6.42 kB
TypeScript
/**
* Strict schema validation for quality reports emitted by agents and persisted by the CLI.
*/
import type { AgentId } from "../types.js";
export declare const QUALITY_REPORT_KIND = "goat-flow-quality-report";
export declare const QUALITY_FINDING_TYPES: readonly ["setup_quality", "skill_flaw", "contradiction", "false_path", "content_quality", "framework_flaw"];
export declare const QUALITY_FINDING_SEVERITIES: readonly ["BLOCKER", "MAJOR", "MINOR"];
export declare const QUALITY_EVIDENCE_QUALITIES: readonly ["OBSERVED", "INFERRED"];
export declare const QUALITY_EVIDENCE_METHODS: readonly ["runtime-probe", "static-analysis", "mixed"];
export declare const QUALITY_SCOPES: readonly ["framework-self", "consumer"];
export declare const QUALITY_MODES: readonly ["process", "agent-setup", "harness", "skills"];
export declare const QUALITY_DELTA_TAGS: readonly ["new", "persisted"];
export declare const QUALITY_AUDIT_STATUSES: readonly ["pass", "fail", "unavailable"];
export declare const QUALITY_SCORE_VALUES: readonly [0, 5, 10, 15, 20, 25];
type QualityFindingType = (typeof QUALITY_FINDING_TYPES)[number];
type QualityFindingSeverity = (typeof QUALITY_FINDING_SEVERITIES)[number];
type QualityEvidenceQuality = (typeof QUALITY_EVIDENCE_QUALITIES)[number];
/**
* How a finding was gathered: a live `runtime-probe`, `static-analysis` of source, or a `mixed`
* combination. Present on v2+ reports; v1 reports omit it and are defaulted to static-analysis at
* parse time, so readers should treat a defaulted value as "unknown", not a confirmed static check.
*/
export type QualityEvidenceMethod = (typeof QUALITY_EVIDENCE_METHODS)[number];
/**
* Whether a report reviews goat-flow itself (`framework-self`) or a downstream `consumer` project.
* Drives self-review filtering; absent on v1 reports, where scope is treated as unspecified.
*/
export type QualityScope = (typeof QUALITY_SCOPES)[number];
/** Quality workflow mode used to keep history and diffs within comparable report families. */
export type QualityMode = (typeof QUALITY_MODES)[number];
/**
* Whether a finding first appeared in this report (`new`) or carried over from the prior same-agent
* report (`persisted`). Computed during history comparison; null on findings with no prior context.
*/
export type QualityDeltaTag = (typeof QUALITY_DELTA_TAGS)[number];
type QualityAuditStatus = (typeof QUALITY_AUDIT_STATUSES)[number];
/**
* A single rubric axis score, constrained to the fixed 0-25 five-point band so totals stay
* comparable across reports. Values outside this set are rejected by the schema parser.
*/
export type QualityAxisScore = (typeof QUALITY_SCORE_VALUES)[number];
/** Setup-side quality rubric scores; axis values must sum to `total`. */
export interface QualitySetupScores {
total: number;
accuracy: QualityAxisScore;
relevance: QualityAxisScore;
completeness: QualityAxisScore;
friction: QualityAxisScore;
}
/** System-side quality rubric scores; axis values must sum to `total`. */
export interface QualitySystemScores {
total: number;
usefulness: QualityAxisScore;
signal_to_noise: QualityAxisScore;
adaptability: QualityAxisScore;
learnability: QualityAxisScore;
}
/** Paired score groups used by quality history and dashboard trend views. */
export interface QualityScores {
setup: QualitySetupScores;
system: QualitySystemScores;
}
/** One current agent-emitted quality finding before deterministic IDs are attached. */
export interface QualityFinding {
type: QualityFindingType;
severity: QualityFindingSeverity;
file: string | null;
line: number | null;
summary: string;
detail: string;
evidence_quality: QualityEvidenceQuality;
/** How the finding was observed. Present on v2+ reports (2026-04-19+).
* Absent on v1 reports, defaulted to "static-analysis" at parse time. */
evidence_method: QualityEvidenceMethod;
/** Optional compact command provenance for runtime-probe or mixed evidence.
* These fields are intentionally summaries, not raw terminal transcripts. */
evidence_command?: string;
evidence_exit_code?: number;
evidence_summary?: string;
evidence_warning_count?: number;
evidence_excerpt?: string;
delta_tag: QualityDeltaTag | null;
}
/** Persisted quality finding with a deterministic history/diff ID. */
export interface SavedQualityFinding extends QualityFinding {
id: string;
}
/** Agent-emitted quality report schema accepted by `quality validate`. */
export interface QualityReport {
report_kind: typeof QUALITY_REPORT_KIND;
goat_flow_version: string;
agent: AgentId;
project_path: string;
run_date: string;
audit_status: QualityAuditStatus;
/** Optional: "framework-self" for a goat-flow-on-goat-flow review,
* "consumer" for a review of a downstream project. Absent on v1 reports. */
scope?: QualityScope;
/** Optional: the rubric version under which scores were produced.
* Lets readers trace score derivation. Absent on v1 reports. */
rubric_version?: string;
/** Optional: the quality workflow that produced the report.
* Absent on legacy reports, which are treated as agent-setup history. */
quality_mode?: QualityMode;
/** Optional: the previous same-agent report used for delta_tag comparison.
* Null or absent means no prior report context was available. */
prior_report_id?: string | null;
scores: QualityScores;
findings: QualityFinding[];
}
/** Saved quality report schema after `attachFindingIds` has materialized finding IDs. */
export interface SavedQualityReport extends Omit<QualityReport, "findings"> {
findings: SavedQualityFinding[];
}
/**
* Discriminated result of a schema parse: either `ok: true` with the validated report, or
* `ok: false` with a human-readable `error`. Parsing never throws on bad input - callers must
* branch on `ok` rather than try/catch, so a malformed report surfaces as a checked error value.
*
* @template T - the report shape returned on success (`QualityReport` or `SavedQualityReport`).
*/
export type ParseResult<T> = {
ok: true;
report: T;
} | {
ok: false;
error: string;
};
/** Parse strictness switch for current emissions versus legacy history files. */
export interface QualityReportParseOptions {
requireCurrentFields?: boolean;
}
export {};
//# sourceMappingURL=schema-types.d.ts.map