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