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