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#![warn(missing_docs)]
10#![cfg_attr(
11    test,
12    allow(
13        clippy::expect_used,
14        reason = "tests use expect to keep serialization assertions concise"
15    )
16)]
17
18mod analysis_sarif;
19mod audit_branching;
20mod audit_brief;
21mod audit_decision_surface;
22mod audit_focus;
23mod audit_render;
24mod audit_routing;
25mod audit_walkthrough;
26mod audit_weakening;
27mod check;
28mod ci_output;
29mod codeclimate;
30mod coverage_envelopes;
31mod dead_code_sarif;
32mod diff;
33mod doctor;
34mod dupes;
35mod error_envelope;
36mod feature_flags;
37mod fix;
38mod health;
39mod health_actions;
40mod health_coverage;
41mod health_coverage_gaps;
42mod health_coverage_intelligence;
43mod health_css;
44mod health_diagnostics;
45mod health_findings;
46mod health_grouped;
47mod health_report;
48mod health_runtime_coverage;
49mod health_scores;
50mod health_targets;
51mod health_trends;
52mod health_vital_signs;
53mod impact;
54mod inspect_envelopes;
55mod issue_contract;
56mod json_paths;
57mod list_envelopes;
58mod next_steps;
59mod pr_comment_envelope;
60mod pr_comment_post_plan;
61mod pr_decision;
62mod pr_details;
63mod pr_status;
64mod pr_summary;
65mod report_contract;
66mod review_envelopes;
67mod root_envelopes;
68mod sarif;
69mod saved_health;
70mod security;
71mod similar_code;
72mod suppressions;
73mod trace_envelopes;
74mod type_aware_envelopes;
75mod walkthrough_render;
76
77pub use analysis_sarif::{
78    annotate_sarif_results, build_duplication_sarif, build_grouped_duplication_sarif,
79    build_health_sarif,
80};
81pub use audit_branching::{
82    BranchingCognitive, BranchingFileDelta, BranchingMetric, BranchingReport, BranchingScope,
83    BranchingSnapshot, CognitiveAttribution, DEFAULT_BRANCHING_TOLERANCE, SplitInPlace,
84};
85pub use audit_brief::{
86    AFFECTED_DIR_CAP, AFFECTED_SAMPLE_CAP, AffectedDirectory, CoordinationGapFact, DiffTriage,
87    GraphFacts, ImpactClosureFacts, PartitionFacts, REVIEW_BRIEF_SCHEMA_VERSION, ReviewBriefHeader,
88    ReviewBriefOutput, ReviewBriefSchemaVersion, ReviewBriefSubtractSections,
89    ReviewBriefWireOutput, ReviewDeltas, ReviewEffort, ReviewUnitFact, RiskClass,
90    StandardReviewBriefOutput, build_review_brief_json_output,
91    serialize_decision_surface_json_output, serialize_review_brief_json_output,
92    serialize_walkthrough_guide_json_output, serialize_walkthrough_validation_json_output,
93};
94pub use audit_decision_surface::{
95    DECISION_SURFACE_SCHEMA_VERSION, Decision, DecisionAction, DecisionActionType,
96    DecisionCategory, DecisionSurface, DecisionSurfaceOutput, DecisionSurfaceSchemaVersion,
97    DecisionWithActions, TruncationNote, build_decision_surface_output, suppress_comment,
98};
99pub use audit_focus::{ConfidenceFlag, FocusLabel, FocusMap, FocusScore, FocusUnit};
100pub use audit_render::{
101    AuditDisplayGate, AuditDisplaySeverity, AuditStylingContextLabelInput,
102    styling_audit_context_label, styling_candidate_count,
103};
104pub use audit_routing::{RoutingFacts, RoutingUnit};
105pub use audit_walkthrough::{
106    AcceptedJudgment, AgentJudgment, AgentSchema, AgentWalkthrough, ChangeAnchor, DirectionUnit,
107    INJECTION_NOTE, JUDGMENT_ACTIONS, JUDGMENT_CONCERNS, RejectedJudgment, ReviewDirection,
108    StandardWalkthroughGuide, TestAdjacency, WalkthroughGuide, WalkthroughValidation, agent_schema,
109    is_judgment_action,
110};
111pub use audit_weakening::{WeakeningKind, WeakeningSignal};
112pub use check::{
113    CHECK_SCHEMA_VERSION, CheckGroupedEntry, CheckGroupedOutput, CheckOutput, CheckOutputInput,
114    GroupByMode, apply_config_fixable_to_duplicate_exports, build_check_output,
115    harmonize_dead_code_health_suppress_line_actions, harmonize_multi_kind_suppress_line_actions,
116    serialize_check_grouped_json_output, serialize_check_json_output,
117};
118pub use ci_output::{
119    CiIssue, CiLocation, CiProvider, GroupedReviewIssues, MARKER_PREFIX_V2, MARKER_SUFFIX_V2,
120    MAX_COMMENT_BODY_BYTES, PROJECT_LEVEL_RULE_IDS, PrCommentRenderInput, ReviewCommentRenderInput,
121    ReviewEnvelopeRenderInput, ReviewEnvelopeRenderResult, ReviewEnvelopeTruncation,
122    ReviewGitlabDiffRefs, apply_path_prefix, cap_body_with_marker, command_title,
123    composite_fingerprint, escape_md, github_check_conclusion, group_review_issues_by_path_line,
124    is_project_level_rule, issues_from_codeclimate, issues_from_codeclimate_issues,
125    markdown_code_span, markdown_table_code_span, markdown_table_text, render_pr_comment,
126    render_pr_comment_with_verdict, render_review_comment_for_group, render_review_envelope,
127    render_review_envelope_with_conclusion, render_scoped_review_envelope,
128    render_scoped_review_envelope_with_conclusion, review_label_from_codeclimate,
129    summary_fingerprint, summary_label,
130};
131pub use codeclimate::{
132    CodeClimateAnnotationField, CodeClimateIssue, CodeClimateIssueInput, CodeClimateIssueKind,
133    CodeClimateLines, CodeClimateLocation, CodeClimateOutput, CodeClimateSeverity,
134    annotate_codeclimate_issues, build_codeclimate_issue, codeclimate_fingerprint_hash,
135    codeclimate_issues_to_value,
136};
137pub use coverage_envelopes::{
138    CoverageAnalyzeOutput, CoverageAnalyzeSchemaVersion, CoverageSetupFileToEdit,
139    CoverageSetupFramework, CoverageSetupMember, CoverageSetupOutput, CoverageSetupPackageManager,
140    CoverageSetupRuntimeTarget, CoverageSetupSchemaVersion, CoverageSetupSnippet,
141    build_coverage_analyze_output, serialize_coverage_analyze_json_output,
142    serialize_coverage_setup_json_output,
143};
144pub use dead_code_sarif::build_dead_code_sarif;
145pub use diff::{
146    DiffIndex, MAX_ADDED_LINES, MAX_DIFF_BYTES, parse_new_hunk_start, relative_to_diff_path,
147};
148pub use doctor::{
149    DOCTOR_SCHEMA_VERSION, DoctorCheck, DoctorCheckCategory, DoctorCheckId, DoctorCheckStatus,
150    DoctorOutput, DoctorRemediation, DoctorStatus, DoctorSummary, serialize_doctor_json_output,
151};
152pub use dupes::{
153    CloneFamilyAction, CloneFamilyActionType, CloneGroupAction, CloneGroupActionType,
154    DUPES_PROGRAMMATIC_SCHEMA_VERSION, DUPES_SCHEMA_VERSION, DupesOutput, DupesOutputInput,
155    build_dupes_output, clone_family_actions, clone_group_actions, serialize_dupes_json_output,
156};
157pub use error_envelope::ErrorOutput;
158pub use fallow_types::envelope;
159pub use fallow_types::output;
160pub use fallow_types::output_dead_code;
161pub use fallow_types::output_format::OutputFormat;
162pub use fallow_types::output_health;
163pub use feature_flags::{
164    FEATURE_FLAGS_SCHEMA_VERSION, FeatureFlagAction, FeatureFlagActionType, FeatureFlagConfidence,
165    FeatureFlagDeadCodeOverlap, FeatureFlagFinding, FeatureFlagKind, FeatureFlagsConfidenceMeta,
166    FeatureFlagsKindMeta, FeatureFlagsMeta, FeatureFlagsMetaDetails, FeatureFlagsOutput,
167    FeatureFlagsOutputInput, build_feature_flags_output, feature_flags_meta,
168    serialize_feature_flags_json_output,
169};
170pub use fix::{FixJsonOutput, FixJsonOutputInput, count_applied_fixes, serialize_fix_json_output};
171pub use health::{
172    HEALTH_SCHEMA_VERSION, HealthJsonOutputInput, HealthOutput, HealthOutputInput,
173    serialize_health_json_output,
174};
175pub use health_actions::HealthActionsMeta;
176pub use health_coverage::CoverageModel;
177pub use health_coverage_gaps::{
178    CoverageGapSummary, CoverageGaps, UntestedExport, UntestedExportFinding, UntestedFile,
179    UntestedFileFinding,
180};
181pub use health_coverage_intelligence::{
182    CoverageIntelligenceAction, CoverageIntelligenceConfidence, CoverageIntelligenceEvidence,
183    CoverageIntelligenceFinding, CoverageIntelligenceMatchConfidence,
184    CoverageIntelligenceRecommendation, CoverageIntelligenceReport,
185    CoverageIntelligenceSchemaVersion, CoverageIntelligenceSignal, CoverageIntelligenceSummary,
186    CoverageIntelligenceVerdict,
187};
188pub use health_css::{
189    ConsumerKind, CssAnalyticsReport, CssAnalyticsSummary, CssBlockOccurrence, CssCandidateAction,
190    CssCandidateActionType, CssDuplicateBlock, CssFileAnalytics, CssNotationConsistency,
191    CssNotationCount, CvaDuplicateVariantBlock, CvaVariantTokenDrift, NearDuplicateThemeToken,
192    NearestStylingToken, RawStyleValue, ScopedUnusedClasses, StylingAgentDisposition,
193    StylingFinding, StylingFindingConfidence, StylingFindingSeverity, TOKEN_CONSUMER_SAMPLE_CAP,
194    TailwindArbitraryValue, TokenConsumerLocation, TokenConsumers, UndefinedKeyframes,
195    UnreferencedCssClass, UnreferencedKeyframes, UnresolvedClassReference, UnusedAtRule,
196    UnusedAtRuleKind, UnusedFontFace, UnusedThemeToken,
197};
198pub use health_diagnostics::{
199    FrameworkHealthDetector, FrameworkHealthDetectorStatus, FrameworkHealthDiagnostics,
200    HealthTimings,
201};
202pub use health_findings::{
203    HealthActionContext, HealthActionOptions, HealthFinding, HotspotFinding,
204    RefactoringTargetFinding, SFC_TEMPLATE_SUPPRESS_COMMENT, build_health_finding_actions,
205};
206pub use health_grouped::{HealthGroup, HealthGrouping};
207pub use health_report::HealthReport;
208pub use health_runtime_coverage::{
209    RUNTIME_STALE_AFTER_DAYS, RuntimeCoverageAction, RuntimeCoverageBlastRadiusEntry,
210    RuntimeCoverageCaptureQuality, RuntimeCoverageConfidence, RuntimeCoverageDataSource,
211    RuntimeCoverageDiscriminators, RuntimeCoverageEvidence, RuntimeCoverageFinding,
212    RuntimeCoverageHotPath, RuntimeCoverageImportanceEntry, RuntimeCoverageMessage,
213    RuntimeCoverageProvenance, RuntimeCoverageReport, RuntimeCoverageReportVerdict,
214    RuntimeCoverageRiskBand, RuntimeCoverageSchemaVersion, RuntimeCoverageSignal,
215    RuntimeCoverageSummary, RuntimeCoverageVerdict, RuntimeCoverageWatermark,
216};
217pub use health_scores::{
218    COGNITIVE_EXTRACTION_THRESHOLD, ClockProvenance, ClockSource, ComplexityViolation,
219    ComponentRollup, ContributorEntry, ContributorIdentifierFormat, CoverageSource,
220    CoverageSourceConsistency, CoverageTier, DEFAULT_COGNITIVE_CRITICAL, DEFAULT_COGNITIVE_HIGH,
221    DEFAULT_CRAP_CRITICAL, DEFAULT_CRAP_HIGH, DEFAULT_CYCLOMATIC_CRITICAL, DEFAULT_CYCLOMATIC_HIGH,
222    DEFAULT_MAX_UNIT_SIZE, ExceededThreshold, FileHealthScore, FindingSeverity,
223    HEALTH_SCORE_FORMULA_VERSION, HOTSPOT_SCORE_THRESHOLD, HealthBaselineStaleness,
224    HealthConfiguredThresholds, HealthEffectiveThresholds, HealthScore, HealthScorePenalties,
225    HealthSummary, HotspotEntry, HotspotSummary, LargeFunctionEntry, MI_DENSITY_MIN_LINES,
226    OwnershipMetrics, OwnershipState, ReactHookProfile, STYLING_HEALTH_FORMULA_VERSION,
227    StylingHealth, StylingHealthConfidence, StylingHealthPenalties, ThresholdOverrideDimension,
228    ThresholdOverrideMetrics, ThresholdOverrideState, ThresholdOverrideStatus, ThresholdSource,
229    compute_finding_severity, letter_grade, summarize_coverage_source_consistency,
230};
231pub use health_targets::{
232    CloneSiblingEvidence, Confidence, ContributingFactor, DirectCallerEvidence,
233    DirectCallerSymbolEvidence, EffortEstimate, EvidenceFunction, RecommendationCategory,
234    RefactoringTarget, TargetEvidence, TargetThresholds,
235};
236pub use health_trends::{HealthTrend, TrendCount, TrendDirection, TrendMetric, TrendPoint};
237pub use health_vital_signs::{
238    CyclomaticPopulation, CyclomaticUnitPopulation, RenderFanInTopComponent, RiskProfile,
239    SNAPSHOT_SCHEMA_VERSION, VitalSigns, VitalSignsCounts, VitalSignsSnapshot,
240};
241pub use impact::{
242    ContainmentEvent, CrossRepoImpactReport, CrossRepoImpactSchemaVersion, CrossRepoProjectEntry,
243    CrossRepoTotals, EnabledSource, GateRunCounts, ImpactCounts, ImpactReport,
244    ImpactReportSchemaVersion, ImpactTrendDirection, ResolutionEvent, TrendSummary,
245    serialize_cross_repo_impact_json_output, serialize_impact_json_output,
246};
247pub use inspect_envelopes::{
248    ExplainOutput, InspectEvidence, InspectEvidenceScope, InspectEvidenceSection,
249    InspectFileIdentity, InspectIdentity, InspectOutput, InspectSectionStatus,
250    InspectSymbolIdentity, InspectTargetDescriptor, serialize_explain_json_output,
251    serialize_inspect_json_output,
252};
253pub use issue_contract::{
254    ACTIONS_AUTO_FIXABLE_FIELD_DEFINITION, ACTIONS_FIELD_DEFINITION, CHECK_DOCS,
255    CODECLIMATE_RESULT_CODES, IssueOutputContract, TsAliasMeta, check_meta, dead_code_docs_url,
256    issue_output_contract_by_code, issue_output_contracts, rule_docs_url,
257};
258pub use json_paths::{normalize_uri, strip_root_prefix};
259pub use list_envelopes::{
260    BoundariesListLogicalGroup, BoundariesListRule, BoundariesListZone, BoundariesListing,
261    ListBoundariesOutput, ListEntryPointOutput, ListOutput, ListPluginOutput, WorkspaceInfo,
262    WorkspacesOutput, serialize_list_boundaries_json_output, serialize_list_workspaces_json_output,
263};
264pub use next_steps::{
265    AuditNextStepsInput, CombinedNextStepsInput, DeadCodeNextStepsInput, DupesNextStepsInput,
266    HealthNextStepsInput, ImpactDigestCounts, TraceUnusedExportInput, build_audit_next_steps,
267    build_audit_next_steps_input, build_combined_next_steps, build_dead_code_next_steps,
268    build_dupes_next_steps, build_health_next_steps, build_health_next_steps_input,
269    impact_digest_summary, trace_unused_export_input,
270};
271pub use pr_comment_envelope::{PrCommentEnvelope, PrCommentTruncation};
272pub use pr_comment_post_plan::{
273    ExistingPrComment, PrCommentPostAction, PrCommentPostPlan, PrCommentPostPlanInput,
274    PrCommentPostSkipReason, plan_pr_comment_post,
275};
276pub use pr_decision::{
277    PR_DECISION_SCHEMA, PrDecisionAnnotation, PrDecisionAnnotationLevel, PrDecisionConclusion,
278    PrDecisionDetails, PrDecisionGate, PrDecisionSurface,
279};
280pub use pr_details::{PR_DETAILS_SCHEMA, PrDetailsArtifact, PrDetailsRow, PrDetailsSection};
281pub use pr_status::{
282    PrStatusContext, PrStatusMode, pr_status_contexts, pr_status_contexts_with_mode,
283};
284pub use pr_summary::{
285    PrCommentLayout, PrSummaryArea, PrSummaryFinding, PrSummaryInput, PrSummaryScope,
286    PrSummaryStatus, render_pr_summary,
287};
288pub use report_contract::{
289    COVERAGE_ANALYZE_DOCS, COVERAGE_SETUP_DOCS, DUPES_DOCS, HEALTH_DOCS, SecurityRuleMeta,
290    coverage_analyze_meta, coverage_setup_meta, dupes_meta, health_meta, security_meta,
291};
292pub use review_envelopes::{
293    GitHubReviewComment, GitHubReviewSide, GitLabReviewComment, GitLabReviewPosition,
294    GitLabReviewPositionType, MARKER_REGEX_V2, ReviewCheckConclusion, ReviewComment,
295    ReviewEnvelopeEvent, ReviewEnvelopeMeta, ReviewEnvelopeOutput, ReviewEnvelopeSchema,
296    ReviewEnvelopeSummary, ReviewEnvelopeWireOutput, ReviewId, ReviewProvider,
297    ReviewReconcileOutput, ReviewReconcileSchema, body_matches_review_id, default_marker_regex,
298    default_marker_regex_flags, is_false, parse_review_id_marker, review_id_marker,
299    serialize_review_envelope_json_output, serialize_review_reconcile_json_output,
300    serialize_scoped_review_envelope_json_output, validate_review_body_scope,
301};
302pub use root_envelopes::{
303    AUDIT_SCHEMA_VERSION, AuditCommand, AuditOutput, COMBINED_SCHEMA_VERSION, CombinedMeta,
304    CombinedOutput, FallowOutput, RootEnvelopeMode, apply_root_kind, attach_telemetry_meta,
305    serialize_audit_json_output, serialize_combined_json_output, serialize_json_root_output,
306    serialize_named_json_output,
307};
308pub use sarif::{
309    GHAS_SARIF_FINGERPRINT_KEY, SARIF_FINGERPRINT_KEY, SarifDocumentInput, SarifFindingFields,
310    SarifFindingInput, SarifResultInput, SarifRuleInput, SarifSourceSnippetCache,
311    append_sarif_findings, build_sarif_document, build_sarif_result,
312    build_sarif_result_with_snippet, build_sarif_rule, ensure_unique_result_fingerprints,
313    sarif_finding_fingerprint,
314};
315pub use saved_health::health_report_from_saved_value;
316pub use security::{
317    SECURITY_SCHEMA_VERSION, SecurityBlindSpotFile, SecurityBlindSpotGroup,
318    SecurityBlindSpotsOutput, SecurityBlindSpotsSchemaVersion, SecurityBlindSpotsSummary,
319    SecurityGate, SecurityGateVerdict, SecurityOutput, SecurityOutputConfig,
320    SecurityOutputRulesConfig, SecurityReachabilityCounts, SecurityRuleSeverityConfig,
321    SecurityRuntimeStateCounts, SecuritySchemaVersion, SecuritySeverityCounts, SecuritySummary,
322    SecuritySummaryOutput, SecuritySurvivor, SecuritySurvivorsOutput,
323    SecuritySurvivorsSchemaVersion, SecuritySurvivorsSummary, SecurityUnresolvedCalleeDiagnostics,
324    SecurityUnresolvedCalleeReasonCount, SecurityUnresolvedCalleeSample,
325    SecurityUnresolvedCalleeTopFile, SecurityVerifierVerdict, SecurityVerifierVerdictStatus,
326    serialize_security_blind_spots_json_output, serialize_security_json_output,
327    serialize_security_summary_json_output, serialize_security_survivors_json_output,
328    validate_saved_security_envelope,
329};
330pub use similar_code::{
331    SIMILAR_CODE_CACHE_CLEAR_SCHEMA_VERSION, SIMILAR_CODE_INSPECT_SCHEMA_VERSION,
332    SIMILAR_CODE_REVIEW_SCHEMA_VERSION, SIMILAR_CODE_SCHEMA_VERSION,
333    SIMILAR_CODE_STATUS_SCHEMA_VERSION, SimilarCodeAction, SimilarCodeActionType,
334    SimilarCodeCacheClearOutput, SimilarCodeCacheClearSchemaVersion, SimilarCodeCacheStatus,
335    SimilarCodeCacheSummary, SimilarCodeCandidate, SimilarCodeCandidateSnapshot,
336    SimilarCodeCompletion, SimilarCodeCompletionStatus, SimilarCodeDiagnostic,
337    SimilarCodeDiagnosticDomain, SimilarCodeDomainOutcome, SimilarCodeEnrichmentAvailability,
338    SimilarCodeEnrichmentState, SimilarCodeGeneration, SimilarCodeGenerationParameters,
339    SimilarCodeInspectOutput, SimilarCodeInspectPacket, SimilarCodeInspectSchemaVersion,
340    SimilarCodeLimits, SimilarCodeLocation, SimilarCodeModelProvenance, SimilarCodeNamedReference,
341    SimilarCodeOutput, SimilarCodePhase, SimilarCodePhaseCompletion, SimilarCodePhaseStatus,
342    SimilarCodeProvider, SimilarCodeProviderProvenance, SimilarCodeReviewOutput,
343    SimilarCodeReviewProvenance, SimilarCodeReviewSchemaVersion, SimilarCodeReviewedCandidate,
344    SimilarCodeSchemaVersion, SimilarCodeScopeProvenance, SimilarCodeSideEffectHint,
345    SimilarCodeSideEvidence, SimilarCodeSimilarityBand, SimilarCodeSkip, SimilarCodeSkipReason,
346    SimilarCodeStatusOutput, SimilarCodeStatusSchemaVersion, SimilarCodeVerdict,
347    SimilarCodeVerdictInput, SimilarCodeVerdictMatch, SimilarCodeVerdictSchemaVersion,
348    SimilarCodeVerdictValidationError, SimilarCodeVerificationStatus,
349    serialize_similar_code_cache_clear_json_output, serialize_similar_code_inspect_json_output,
350    serialize_similar_code_json_output, serialize_similar_code_review_json_output,
351    serialize_similar_code_status_json_output,
352};
353pub use suppressions::{
354    SuppressionInventoryEntry, SuppressionInventoryFile, SuppressionInventoryLevel,
355    SuppressionInventoryOrigin, SuppressionInventoryOutput, SuppressionInventoryOutputInput,
356    SuppressionInventorySchemaVersion, SuppressionInventorySummary, SuppressionKindCount,
357    build_suppression_inventory_output, serialize_suppression_inventory_json_output,
358};
359pub use trace_envelopes::{serialize_trace_error_json_output, serialize_trace_json_output};
360pub use type_aware_envelopes::{
361    TYPE_AWARE_STATUS_SCHEMA_VERSION, TypeAwareStatusOutput,
362    serialize_type_aware_status_json_output,
363};
364pub use walkthrough_render::{
365    MAX_CONTRACT_MEMBERS, WalkthroughAccounting, cap_names, clean_decision_fact,
366    decisions_outside_units, visible_stage_units,
367};