Skip to main content

fallow_output/
lib.rs

1//! Reusable output contract types for fallow.
2//!
3//! This crate owns stable report DTOs that are not tied to CLI rendering.
4//! Higher-level output assemblers live above this crate in `fallow-api` or the
5//! CLI, while this crate remains the shared typed boundary those builders and
6//! non-CLI consumers can use. Shared selectors such as `OutputFormat` stay in
7//! `fallow-types`; this crate re-exports only the selectors needed to keep
8//! output builders on one contract surface.
9#![cfg_attr(
10    test,
11    allow(
12        clippy::expect_used,
13        reason = "tests use expect to keep serialization assertions concise"
14    )
15)]
16
17mod audit_brief;
18mod audit_decision_surface;
19mod audit_focus;
20mod audit_routing;
21mod audit_walkthrough;
22mod audit_weakening;
23mod check;
24mod ci_output;
25mod codeclimate;
26mod coverage_envelopes;
27mod diff;
28mod dupes;
29mod feature_flags;
30mod fix;
31mod health;
32mod health_actions;
33mod health_coverage;
34mod health_coverage_gaps;
35mod health_coverage_intelligence;
36mod health_css;
37mod health_diagnostics;
38mod health_findings;
39mod health_grouped;
40mod health_report;
41mod health_runtime_coverage;
42mod health_scores;
43mod health_targets;
44mod health_trends;
45mod health_vital_signs;
46mod impact;
47mod inspect_envelopes;
48mod issue_contract;
49mod json_paths;
50mod list_envelopes;
51mod next_steps;
52mod pr_comment_envelope;
53mod pr_comment_post_plan;
54mod pr_decision;
55mod pr_details;
56mod pr_status;
57mod pr_summary;
58mod report_contract;
59mod review_envelopes;
60mod root_envelopes;
61mod sarif;
62mod security;
63mod trace_envelopes;
64mod walkthrough_render;
65
66pub use audit_brief::{
67    CoordinationGapFact, DiffTriage, GraphFacts, ImpactClosureFacts, PartitionFacts,
68    REVIEW_BRIEF_SCHEMA_VERSION, ReviewBriefOutput, ReviewBriefSchemaVersion,
69    ReviewBriefSubtractSections, ReviewDeltas, ReviewEffort, ReviewUnitFact, RiskClass,
70    StandardReviewBriefOutput, build_review_brief_json_output,
71    serialize_decision_surface_json_output, serialize_review_brief_json_output,
72    serialize_walkthrough_guide_json_output, serialize_walkthrough_validation_json_output,
73};
74pub use audit_decision_surface::{
75    ALL_CATEGORIES, DECISION_SURFACE_SCHEMA_VERSION, Decision, DecisionAction, DecisionActionType,
76    DecisionCategory, DecisionSurface, DecisionSurfaceOutput, DecisionSurfaceSchemaVersion,
77    DecisionWithActions, TruncationNote, build_decision_surface_output, decision_actions,
78    suppress_comment,
79};
80pub use audit_focus::{ConfidenceFlag, FocusLabel, FocusMap, FocusScore, FocusUnit};
81pub use audit_routing::{RoutingFacts, RoutingUnit};
82pub use audit_walkthrough::{
83    AcceptedJudgment, AgentJudgment, AgentSchema, AgentWalkthrough, ChangeAnchor, DirectionUnit,
84    INJECTION_NOTE, RejectedJudgment, ReviewDirection, StandardWalkthroughGuide, WalkthroughGuide,
85    WalkthroughValidation, agent_schema,
86};
87pub use audit_weakening::{WeakeningKind, WeakeningSignal};
88pub use check::{
89    CHECK_SCHEMA_VERSION, CheckGroupedEntry, CheckGroupedOutput, CheckOutput, CheckOutputInput,
90    GroupByMode, apply_config_fixable_to_duplicate_exports, build_check_output,
91    build_check_summary, harmonize_dead_code_health_suppress_line_actions,
92    harmonize_multi_kind_suppress_line_actions, serialize_check_grouped_json_output,
93    serialize_check_json_output,
94};
95pub use ci_output::{
96    CiIssue, CiProvider, GroupedReviewIssues, MARKER_PREFIX_V2, MARKER_SUFFIX_V2,
97    MAX_COMMENT_BODY_BYTES, PROJECT_LEVEL_RULE_IDS, PrCommentRenderInput, ReviewCommentRenderInput,
98    ReviewEnvelopeRenderInput, ReviewEnvelopeRenderResult, ReviewEnvelopeTruncation,
99    ReviewGitlabDiffRefs, cap_body_with_marker, command_title, composite_fingerprint, escape_md,
100    github_check_conclusion, group_review_issues_by_path_line, is_project_level_rule,
101    issues_from_codeclimate, issues_from_codeclimate_issues, render_pr_comment,
102    render_review_comment_for_group, render_review_envelope, review_label_from_codeclimate,
103    summary_fingerprint, summary_label,
104};
105pub use codeclimate::{
106    CodeClimateAnnotationField, CodeClimateIssue, CodeClimateIssueInput, CodeClimateIssueKind,
107    CodeClimateLines, CodeClimateLocation, CodeClimateOutput, CodeClimateSeverity,
108    annotate_codeclimate_issues, build_codeclimate_issue, codeclimate_fingerprint_hash,
109    codeclimate_issues_to_value,
110};
111pub use coverage_envelopes::{
112    CoverageAnalyzeOutput, CoverageAnalyzeSchemaVersion, CoverageSetupFileToEdit,
113    CoverageSetupFramework, CoverageSetupMember, CoverageSetupOutput, CoverageSetupPackageManager,
114    CoverageSetupRuntimeTarget, CoverageSetupSchemaVersion, CoverageSetupSnippet,
115    build_coverage_analyze_output, serialize_coverage_analyze_json_output,
116    serialize_coverage_setup_json_output,
117};
118pub use diff::{
119    DiffIndex, MAX_ADDED_LINES, MAX_DIFF_BYTES, parse_new_hunk_start, relative_to_diff_path,
120};
121pub use dupes::{
122    CloneFamilyAction, CloneFamilyActionType, CloneGroupAction, CloneGroupActionType,
123    DUPES_SUPPRESS_COMMENT, DUPES_SUPPRESS_DESCRIPTION, DupesOutput, DupesOutputInput,
124    build_dupes_output, clone_family_actions, clone_group_actions, serialize_dupes_json_output,
125};
126pub use fallow_types::envelope;
127pub use fallow_types::output;
128pub use fallow_types::output_dead_code;
129pub use fallow_types::output_format::OutputFormat;
130pub use fallow_types::output_health;
131pub use feature_flags::{
132    FeatureFlagAction, FeatureFlagActionType, FeatureFlagConfidence, FeatureFlagDeadCodeOverlap,
133    FeatureFlagFinding, FeatureFlagKind, FeatureFlagsConfidenceMeta, FeatureFlagsKindMeta,
134    FeatureFlagsMeta, FeatureFlagsMetaDetails, FeatureFlagsOutput, FeatureFlagsOutputInput,
135    build_feature_flags_output, feature_flags_meta, serialize_feature_flags_json_output,
136};
137pub use fix::{
138    FixJsonOutput, FixJsonOutputInput, build_fix_json_output, count_applied_fixes,
139    count_reported_fix_skips, serialize_fix_json_output,
140};
141pub use health::{
142    HealthJsonOutputInput, HealthOutput, HealthOutputInput, build_health_output,
143    serialize_health_json_output,
144};
145pub use health_actions::HealthActionsMeta;
146pub use health_coverage::CoverageModel;
147pub use health_coverage_gaps::{
148    CoverageGapSummary, CoverageGaps, UntestedExport, UntestedExportFinding, UntestedFile,
149    UntestedFileFinding,
150};
151pub use health_coverage_intelligence::{
152    CoverageIntelligenceAction, CoverageIntelligenceConfidence, CoverageIntelligenceEvidence,
153    CoverageIntelligenceFinding, CoverageIntelligenceMatchConfidence,
154    CoverageIntelligenceRecommendation, CoverageIntelligenceReport,
155    CoverageIntelligenceSchemaVersion, CoverageIntelligenceSignal, CoverageIntelligenceSummary,
156    CoverageIntelligenceVerdict,
157};
158pub use health_css::{
159    ConsumerKind, CssAnalyticsReport, CssAnalyticsSummary, CssBlockOccurrence, CssCandidateAction,
160    CssCandidateActionType, CssDuplicateBlock, CssFileAnalytics, CssNotationConsistency,
161    CssNotationCount, CvaDuplicateVariantBlock, CvaVariantTokenDrift, NearDuplicateThemeToken,
162    NearestStylingToken, RawStyleValue, ScopedUnusedClasses, StylingAgentDisposition,
163    StylingFinding, StylingFindingConfidence, StylingFindingSeverity, TOKEN_CONSUMER_SAMPLE_CAP,
164    TailwindArbitraryValue, TokenConsumerLocation, TokenConsumers, UndefinedKeyframes,
165    UnreferencedCssClass, UnreferencedKeyframes, UnresolvedClassReference, UnusedAtRule,
166    UnusedAtRuleKind, UnusedFontFace, UnusedThemeToken,
167};
168pub use health_diagnostics::{
169    FrameworkHealthDetector, FrameworkHealthDetectorStatus, FrameworkHealthDiagnostics,
170    HealthTimings,
171};
172pub use health_findings::{
173    HealthActionContext, HealthActionOptions, HealthFinding, HotspotFinding,
174    RefactoringTargetFinding, build_health_finding_actions,
175};
176pub use health_grouped::{HealthGroup, HealthGrouping};
177pub use health_report::HealthReport;
178pub use health_runtime_coverage::{
179    RUNTIME_STALE_AFTER_DAYS, RuntimeCoverageAction, RuntimeCoverageBlastRadiusEntry,
180    RuntimeCoverageCaptureQuality, RuntimeCoverageConfidence, RuntimeCoverageDataSource,
181    RuntimeCoverageDiscriminators, RuntimeCoverageEvidence, RuntimeCoverageFinding,
182    RuntimeCoverageHotPath, RuntimeCoverageImportanceEntry, RuntimeCoverageMessage,
183    RuntimeCoverageProvenance, RuntimeCoverageReport, RuntimeCoverageReportVerdict,
184    RuntimeCoverageRiskBand, RuntimeCoverageSchemaVersion, RuntimeCoverageSignal,
185    RuntimeCoverageSummary, RuntimeCoverageVerdict, RuntimeCoverageWatermark,
186};
187pub use health_scores::{
188    COGNITIVE_EXTRACTION_THRESHOLD, ComplexityViolation, ComponentRollup, ContributorEntry,
189    ContributorIdentifierFormat, CoverageSource, CoverageSourceConsistency, CoverageTier,
190    DEFAULT_COGNITIVE_CRITICAL, DEFAULT_COGNITIVE_HIGH, DEFAULT_CRAP_CRITICAL, DEFAULT_CRAP_HIGH,
191    DEFAULT_CYCLOMATIC_CRITICAL, DEFAULT_CYCLOMATIC_HIGH, ExceededThreshold, FileHealthScore,
192    FindingSeverity, HEALTH_SCORE_FORMULA_VERSION, HOTSPOT_SCORE_THRESHOLD,
193    HealthConfiguredThresholds, HealthEffectiveThresholds, HealthScore, HealthScorePenalties,
194    HealthSummary, HotspotEntry, HotspotSummary, LargeFunctionEntry, MI_DENSITY_MIN_LINES,
195    OwnershipMetrics, OwnershipState, ReactHookProfile, STYLING_HEALTH_FORMULA_VERSION,
196    StylingHealth, StylingHealthConfidence, StylingHealthPenalties, ThresholdOverrideMetrics,
197    ThresholdOverrideState, ThresholdOverrideStatus, ThresholdSource, compute_finding_severity,
198    letter_grade, summarize_coverage_source_consistency,
199};
200pub use health_targets::{
201    CloneSiblingEvidence, Confidence, ContributingFactor, DirectCallerEvidence,
202    DirectCallerSymbolEvidence, EffortEstimate, EvidenceFunction, RecommendationCategory,
203    RefactoringTarget, TargetEvidence, TargetThresholds,
204};
205pub use health_trends::{HealthTrend, TrendCount, TrendDirection, TrendMetric, TrendPoint};
206pub use health_vital_signs::{
207    RenderFanInTopComponent, RiskProfile, SNAPSHOT_SCHEMA_VERSION, VitalSigns, VitalSignsCounts,
208    VitalSignsSnapshot,
209};
210pub use impact::{
211    ContainmentEvent, CrossRepoImpactReport, CrossRepoImpactSchemaVersion, CrossRepoProjectEntry,
212    CrossRepoTotals, EnabledSource, ImpactCounts, ImpactReport, ImpactReportSchemaVersion,
213    ImpactTrendDirection, ResolutionEvent, TrendSummary, serialize_cross_repo_impact_json_output,
214    serialize_impact_json_output,
215};
216pub use inspect_envelopes::{
217    ExplainOutput, InspectEvidence, InspectEvidenceScope, InspectEvidenceSection,
218    InspectFileIdentity, InspectIdentity, InspectOutput, InspectSectionStatus,
219    InspectSymbolIdentity, InspectTargetDescriptor, serialize_explain_json_output,
220    serialize_inspect_json_output,
221};
222pub use issue_contract::{
223    ACTIONS_AUTO_FIXABLE_FIELD_DEFINITION, ACTIONS_FIELD_DEFINITION, CHECK_DOCS,
224    CODECLIMATE_RESULT_CODES, IssueOutputContract, TsAliasMeta, check_meta, dead_code_docs_url,
225    issue_output_contract_by_code, issue_output_contracts, rule_docs_url,
226};
227pub use json_paths::{normalize_uri, strip_root_prefix};
228pub use list_envelopes::{
229    BoundariesListLogicalGroup, BoundariesListRule, BoundariesListZone, BoundariesListing,
230    ListBoundariesOutput, ListEntryPointOutput, ListOutput, ListPluginOutput, WorkspaceInfo,
231    WorkspacesOutput, serialize_list_boundaries_json_output, serialize_list_workspaces_json_output,
232};
233pub use next_steps::{
234    AuditNextStepsInput, CombinedNextStepsInput, DeadCodeNextStepsInput, DupesNextStepsInput,
235    HealthNextStepsInput, ImpactDigestCounts, TraceUnusedExportInput, build_audit_next_steps,
236    build_audit_next_steps_input, build_combined_next_steps, build_dead_code_next_steps,
237    build_dupes_next_steps, build_health_next_steps, build_health_next_steps_input,
238    impact_digest_summary, trace_unused_export_input,
239};
240pub use pr_comment_envelope::{PrCommentEnvelope, PrCommentTruncation};
241pub use pr_comment_post_plan::{
242    ExistingPrComment, PrCommentPostAction, PrCommentPostPlan, PrCommentPostPlanInput,
243    PrCommentPostSkipReason, plan_pr_comment_post,
244};
245pub use pr_decision::{
246    PR_DECISION_SCHEMA, PrDecisionAnnotation, PrDecisionAnnotationLevel, PrDecisionConclusion,
247    PrDecisionDetails, PrDecisionGate, PrDecisionSurface,
248};
249pub use pr_details::{PR_DETAILS_SCHEMA, PrDetailsArtifact, PrDetailsRow, PrDetailsSection};
250pub use pr_status::{
251    PrStatusContext, PrStatusMode, pr_status_contexts, pr_status_contexts_with_mode,
252};
253pub use pr_summary::{
254    PrCommentLayout, PrSummaryArea, PrSummaryFinding, PrSummaryInput, PrSummaryScope,
255    PrSummaryStatus, render_pr_summary,
256};
257pub use report_contract::{
258    COVERAGE_ANALYZE_DOCS, COVERAGE_SETUP_DOCS, DUPES_DOCS, HEALTH_DOCS, SECURITY_DOCS,
259    SecurityRuleMeta, coverage_analyze_meta, coverage_setup_meta, dupes_meta, health_meta,
260    security_meta,
261};
262pub use review_envelopes::{
263    GitHubReviewComment, GitHubReviewSide, GitLabReviewComment, GitLabReviewPosition,
264    GitLabReviewPositionType, MARKER_REGEX_FLAGS_V2, MARKER_REGEX_V2, ReviewCheckConclusion,
265    ReviewComment, ReviewEnvelopeEvent, ReviewEnvelopeMeta, ReviewEnvelopeOutput,
266    ReviewEnvelopeSchema, ReviewEnvelopeSummary, ReviewProvider, ReviewReconcileOutput,
267    ReviewReconcileSchema, default_marker_regex, default_marker_regex_flags, is_false,
268    serialize_review_envelope_json_output, serialize_review_reconcile_json_output,
269};
270pub use root_envelopes::{
271    AuditCommand, AuditOutput, CombinedMeta, CombinedOutput, FallowOutput, RootEnvelopeMode,
272    apply_root_kind, attach_telemetry_meta, serialize_audit_json_output,
273    serialize_combined_json_output, serialize_json_root_output, serialize_named_json_output,
274};
275pub use sarif::{
276    GHAS_SARIF_FINGERPRINT_KEY, SARIF_FINGERPRINT_KEY, SarifDocumentInput, SarifResultInput,
277    SarifRuleInput, build_sarif_document, build_sarif_result, build_sarif_rule,
278    normalize_sarif_snippet, sarif_finding_fingerprint,
279};
280pub use security::{
281    SecurityBlindSpotFile, SecurityBlindSpotGroup, SecurityBlindSpotsOutput,
282    SecurityBlindSpotsSchemaVersion, SecurityBlindSpotsSummary, SecurityGate, SecurityGateVerdict,
283    SecurityOutput, SecurityOutputConfig, SecurityOutputRulesConfig, SecurityReachabilityCounts,
284    SecurityRuleSeverityConfig, SecurityRuntimeStateCounts, SecuritySchemaVersion,
285    SecuritySeverityCounts, SecuritySummary, SecuritySummaryOutput, SecuritySurvivor,
286    SecuritySurvivorsOutput, SecuritySurvivorsSchemaVersion, SecuritySurvivorsSummary,
287    SecurityUnresolvedCalleeDiagnostics, SecurityUnresolvedCalleeReasonCount,
288    SecurityUnresolvedCalleeSample, SecurityUnresolvedCalleeTopFile, SecurityVerifierVerdict,
289    SecurityVerifierVerdictStatus, build_security_summary,
290    serialize_security_blind_spots_json_output, serialize_security_json_output,
291    serialize_security_summary_json_output, serialize_security_survivors_json_output,
292};
293pub use trace_envelopes::serialize_trace_json_output;
294pub use walkthrough_render::{
295    MAX_CONTRACT_MEMBERS, WalkthroughAccounting, cap_names, clean_decision_fact,
296    visible_stage_units,
297};