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