The GitButler version control client, backed by Git, powered by Tauri/Rust/Svelte
This report presents the forensic synthetic code analysis of gitbutlerapp/gitbutler, a Rust project with 21,290 GitHub stars. SynthScan v2.0 examined 568,689 lines of code across 2572 source files, recording 1157 pattern matches distributed across 15 syntactic categories. The overall adjusted score of 2.6 places this repository in the Likely human-written band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1157 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | Cargo.toml | 1 | [workspace] | COMMENT |
| LOW | Cargo.toml | 21 | "crates/but-feedback", # 📄It's very small and very special, but documented and well-enough tested. | COMMENT |
| LOW | Cargo.toml | 81 | # 👉Experimental; needs docs, it's used from `but` CLI and not a library | COMMENT |
| LOW | Cargo.toml | 101 | "crates/but-api-macros/tests", # 📄Compile-time coverage for all `#[but_api]` macro features. | COMMENT |
| LOW | deny.toml | 1 | # This template contains all of the possible sections and their default values | COMMENT |
| LOW | deny.toml | 21 | # `target_family = "unix"` configuration, that only having windows targets in | COMMENT |
| LOW | deny.toml | 41 | #exclude = [] | COMMENT |
| LOW | deny.toml | 61 | COMMENT | |
| LOW | deny.toml | 121 | # Some crates don't have (easily) machine readable licensing information, | COMMENT |
| LOW | deny.toml | 141 | # published to private registries. | COMMENT |
| LOW | deny.toml | 161 | # with multiple versions | COMMENT |
| LOW | deny.toml | 181 | #"ansi_term@0.11.0", | COMMENT |
| LOW | deny.toml | 201 | # "rustls", | COMMENT |
| LOW | deny.toml | 221 | #"ansi_term@0.11.0", # will be skipped along with _all_ of its direct and transitive dependencies | COMMENT |
| LOW | crates/but-cherry-apply/src/lib.rs | 1 | //! Cherry Apply - Applying individual commits into the workspace. | COMMENT |
| LOW | crates/but-secret/src/secret.rs | 1 | //! This module contains facilities to handle the persistence of secrets. | COMMENT |
| LOW | crates/gitbutler-repo/tests/repo/create_wd_tree.rs | 21 | /// These tests exercise the truth table that we use to update the HEAD | COMMENT |
| LOW | crates/gitbutler-repo/src/commands.rs | 121 | /// `FileInfo` stores valid text in `content` with no `mime_type`. Binary files either have no | COMMENT |
| LOW | crates/gitbutler-repo/src/commands.rs | 181 | COMMENT | |
| LOW | crates/but-testsupport/src/in_memory_meta.rs | 221 | branches: vec![stack_segment_from_partial_name(stack_name)], | COMMENT |
| LOW | crates/but-testsupport/src/in_memory_meta.rs | 241 | // .collect(), | COMMENT |
| LOW | crates/but-transaction/src/lib.rs | 41 | /// | COMMENT |
| LOW | crates/but-transaction/src/lib.rs | 61 | /// | COMMENT |
| LOW | …es/but-rebase/tests/rebase/graph_rebase/cherry_pick.rs | 1121 | "#]] | COMMENT |
| LOW | …ut-rebase/tests/rebase/graph_rebase/graph_workspace.rs | 1 | //! Snapshot tests for the [`GraphWorkspace`] projection, covering the | COMMENT |
| LOW | crates/but-rebase/src/lib.rs | 41 | /// Squashes an existing commit into the one in the first `Pick` or `Merge` RebaseStep that precedes it. | COMMENT |
| LOW | crates/but-rebase/src/lib.rs | 121 | } | COMMENT |
| LOW | crates/but-rebase/src/lib.rs | 161 | } | COMMENT |
| LOW | crates/but-rebase/src/cherry_pick.rs | 1 | /// How to perform a cherry-pick. | COMMENT |
| LOW | …es/but-rebase/src/graph_rebase/merge_commit_changes.rs | 21 | /// The selected commit whose change range should be merged. | COMMENT |
| LOW | …es/but-rebase/src/graph_rebase/merge_commit_changes.rs | 101 | conflict, | COMMENT |
| LOW | …es/but-rebase/src/graph_rebase/merge_commit_changes.rs | 221 | enum TraversalMode { | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/rebase.rs | 241 | COMMENT | |
| LOW | crates/but-rebase/src/graph_rebase/mod.rs | 41 | /// their parents. | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/mod.rs | 161 | COMMENT | |
| LOW | crates/but-rebase/src/graph_rebase/mod.rs | 301 | /// This repository may contain objects that have not been persisted yet, | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/cherry_pick.rs | 41 | /// (base) and the new parents (ontos) are merged pairwise. This enum controls | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/cherry_pick.rs | 61 | /// [`SignCommit`] to sign/unsign commits that are otherwise unchanged. | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/cherry_pick.rs | 81 | /// X's "base" sub-tree as the base. | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/cherry_pick.rs | 221 | /// Materialize the narrow synthetic-merge case where building the merged | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/workspace.rs | 61 | /// If we're on the workspace branch, this will contain a list of subgraphs | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/workspace.rs | 81 | /// topology, so a fixture can look like N obviously-distinct stacks and | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/workspace.rs | 101 | /// [`PushStatus::Integrated`]. | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/workspace.rs | 341 | } | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/testing.rs | 701 | ├───╯ | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/testing.rs | 841 | fn three_way_fork_with_a_shared_target() { | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/mutate.rs | 21 | /// | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/mutate.rs | 361 | /// `parents_to_disconnect` - Parent nodes to disconnect from `target.parent`. | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/mutate.rs | 581 | /// | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/mutate.rs | 721 | self.graph.add_edge(target.id, child.id, new_weight); | COMMENT |
| LOW | crates/but-rebase/src/graph_rebase/materialize.rs | 101 | /// Materializes a rebase without performing a checkout. | COMMENT |
| LOW | crates/but-irc/src/client.rs | 121 | /// Set connection state and emit a StateChanged event. | COMMENT |
| LOW | crates/but-irc/src/client.rs | 761 | debug!("> PRIVMSG {} :{}", target, line); | COMMENT |
| LOW | crates/but-irc/src/lib.rs | 1 | //! IRC client implementation for GitButler. | COMMENT |
| LOW | crates/but-irc/src/lib.rs | 21 | //! let config = IrcConfig { | COMMENT |
| LOW | crates/but-irc/src/lifecycle.rs | 1 | //! Shared IRC connection lifecycle management. | COMMENT |
| LOW | crates/but-irc/src/lifecycle.rs | 81 | COMMENT | |
| LOW | crates/but-irc/src/message_store.rs | 101 | /// Channel metadata returned by queries. | COMMENT |
| LOW | crates/gitbutler-operating-modes/src/lib.rs | 81 | /// The ref of the vbranch which owns this commit. | COMMENT |
| LOW | crates/but-oplog/src/lib.rs | 1 | //! The operations log, short: Oplog, is a sequence of restore points, which each restore point implemented as snapshots | COMMENT |
| 703 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 170 | //! ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 172 | //! ├────────────────────────────────────────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 174 | //! └────────────────────────────────────────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 224 | //! │ e │ │ ├──────┴─────┐ ├──────┴─────┐ | COMMENT |
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 227 | //! │ A │ TMB◀─────┘ └─┘◀── feat └─────▶TMB └─┘◀──S:feat TMB └─┘◀──S:feat | COMMENT |
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 232 | //! │ │ └─┘───────────┘ WMB───────────┘ WMB───────────┘ | COMMENT |
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 259 | //! │ e │ | COMMENT |
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 262 | //! │ │ └──┘ └──┘ parent | COMMENT |
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 263 | //! │ I │ │ │ | COMMENT |
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 265 | //! │ i │ ┌─┐ ┌─┐ ┌─┐ ┌─ S:feat/1 | COMMENT |
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 266 | //! │ t │ H:S:main H:S:main────▶└─┘ S:main ────▶└─┘◀── S:feat S:main ──▶└─┘◀┴─ B:feat S:ma | COMMENT |
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 269 | //! └───┘ Need ws/1 for metadata: - Need ws/1 for metadata: | COMMENT |
| MEDIUM⚡ | crates/but-workspace/src/branch/mod.rs | 271 | //! - Stack name changed to | COMMENT |
| MEDIUM | crates/but-workspace/src/branch/mod.rs | 185 | //! │ h │ │ │ ┌──────┴─────┐ │ ┌──── | COMMENT |
| MEDIUM | crates/but-workspace/src/branch/mod.rs | 193 | //! │ │ WMB───────────┘ WMB───────────┘ WMB───────────┘ | COMMENT |
| MEDIUM | crates/but-workspace/src/branch/mod.rs | 205 | //! │ a │ ┌──────┴─────┐ | COMMENT |
| MEDIUM | crates/but-workspace/src/branch/mod.rs | 213 | //! └───┘ └─┘───────────┘ WMB───────────┘ └─┘───────────┘ | COMMENT |
| MEDIUM | crates/but-workspace/src/branch/mod.rs | 287 | //! │ │ └─┘───────┘ └─┘───────┘ └─┘─────── | COMMENT |
| MEDIUM | crates/but-workspace/src/branch/mod.rs | 307 | //! │ h │ │ ┌─────┴────┐ │ │ | COMMENT |
| MEDIUM | crates/but-workspace/src/branch/mod.rs | 315 | //! │ S │ └─┘────────┘ WMB─────────┘ └─┘────────┘ | COMMENT |
| MEDIUM | crates/but-workspace/src/branch/mod.rs | 372 | //! │ e │ ┌──────┼──────┐ │ A ││ B ││ C │ | COMMENT |
| MEDIUM | crates/but-workspace/src/branch/mod.rs | 383 | //! └───┘ WMB───────┘ all commits at once. | COMMENT |
| MEDIUM | crates/but-workspace/src/branch/mod.rs | 391 | //! │ n │ ┌──────┼──────┐ main┐ | COMMENT |
| MEDIUM | crates/but-workspace/src/branch/mod.rs | 403 | //! └───┘ └1┘───────┘ Problem is that lanes wouldn't have | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 138 | //! ┌────────────────────┐ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 140 | //! └────────────────────┘ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 143 | //! ┌────────────────────────┐ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 150 | //! └────────────────────────┘ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 163 | //! ┌───────────────────┐ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 165 | //! └───────────────────┘ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 166 | //! │ ┌────────────────────┐ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 168 | //! │ └────────────────────┘ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 170 | //! │ ┌─────────┴─────────┐ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 173 | //! │ ┌───────────────┐ │ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 175 | //! │ └───────────────┘ ┌───────────────┐ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 177 | //! │ ▼ └───────────────┘ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 178 | //! │ ┌───────────────┐ │ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 180 | //! │ └───────────────┘ │ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 182 | //! │ └─────────┬─────────┘ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 185 | //! │ ┌────────┐ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 187 | //! └─────────────────▶│ ------ │ | COMMENT |
| MEDIUM⚡ | crates/but-graph/src/lib.rs | 189 | //! └────────┘ | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 20 | // ── Hard wrap utility for commit messages ─────────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 69 | // ── Colour palette (inspired by the screenshot) ────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 87 | // ── Editor mode ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 96 | // ── Menu definitions ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/but/src/tui/editor.rs | 154 | // ── Help overlay ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/but/src/tui/editor.rs | 161 | // ── About overlay ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | crates/but/src/tui/editor.rs | 168 | // ── Editor state ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 238 | // ── Cursor helpers ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 266 | // ── Edit operations ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 315 | // ── Menu action dispatch ───────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 340 | // ── Input handling ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 382 | // ── Ctrl shortcuts ──────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 390 | // ── Navigation ──────────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 459 | // ── Text editing ────────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 655 | // ── Dropdown rect calculation ──────────────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 674 | // ── Rendering ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/tui/editor.rs | 1067 | // ── Public API ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | crates/but/src/command/legacy/diff/display.rs | 62 | // ────────╮ | COMMENT |
| 41 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/ui/tests/test-utils.ts | 143 | export async function waitForTextContentWithIdle( | CODE |
| LOW | packages/ui/tests/test-utils.ts | 334 | export async function waitForScrollHeightIncrease( | CODE |
| LOW | packages/ui/tests/test-utils.ts | 466 | export async function waitForScrollHeightChange( | CODE |
| LOW | packages/ui/tests/HardWrapPlugin.spec.ts | 26 | async function waitForParagraphCountGreaterThan( | CODE |
| LOW | packages/ui/tests/HardWrapPlugin.spec.ts | 154 | initialText: "```javascript\nfunction veryLongFunctionNameThatExceedsMax() {}\n```", | CODE |
| LOW | packages/ui/src/lib/utils/timeAgo.ts | 145 | function getSecondsUntilTimestampUpdate(seconds: number): number { | CODE |
| LOW | packages/ui/src/lib/utils/diffParsing.ts | 551 | function computeBaseInlineWordDiff( | CODE |
| LOW | packages/ui/src/lib/utils/tooltipPosition.ts | 56 | function calculateHorizontalAlignment( | CODE |
| LOW | packages/ui/src/lib/utils/tooltipPosition.ts | 81 | function autoDetectHorizontalAlignment(measurements: MeasurementCache): { | CODE |
| LOW | packages/ui/src/lib/utils/tooltipPosition.ts | 107 | function calculateVerticalPosition( | CODE |
| LOW | packages/ui/src/lib/focus/domUtils.ts | 25 | export function findNearestSuitableAncestor(element: HTMLElement): { | CODE |
| LOW | packages/ui/src/lib/focus/shortcutUtils.ts | 11 | export function generateTwoLetterShortcut(used: Map<string, unknown>): string | undefined { | CODE |
| LOW | packages/ui/src/lib/components/VirtualList.svelte | 693 | async function handleItemsRemovedOrReplaced(): Promise<void> { | CODE |
| LOW | packages/ui/src/lib/components/VirtualList.svelte | 733 | function compensateScrollForResize(index: number, oldHeight: number): void { | CODE |
| LOW | packages/ui/src/lib/richText/linewrap.ts | 122 | function isLogicalParagraphBoundary(para: ParagraphNode, previousIndent: string): boolean { | CODE |
| LOW | packages/ui/src/lib/richText/linewrap.ts | 158 | function combineLogicalParagraphText( | CODE |
| LOW | packages/ui/src/lib/richText/linewrap.ts | 207 | function updateParagraphsWithWrappedLines( | CODE |
| LOW | …ckages/ui/src/lib/richText/plugins/IndentPlugin.svelte | 17 | function normalizeNonSimpleTextNode( | CODE |
| LOW | packages/ui/src/lib/richText/plugins/InlineCode.svelte | 18 | function inlineCodeTextNodeTransform(node: TextNode): void { | CODE |
| LOW | …ges/ui/src/lib/richText/plugins/HardWrapPlugin.test.ts | 666 | function inlineCodeTextNodeTransform(node: TextNode): void { | CODE |
| LOW | packages/ui/src/lib/richText/node/mention.ts | 148 | function getTextSurroundingMention(text: string, start: number, end: number): [string, string] { | CODE |
| LOW | packages/ui/src/lib/richText/node/emoji.ts | 193 | export function findAndReplaceShortCodeEmoji(node: TextNode): TextNode | undefined { | CODE |
| LOW | packages/shared/src/lib/persisted.ts | 50 | function setAndPersist(value: T, set: (value: T) => void) { | CODE |
| LOW | packages/shared/src/lib/persisted.ts | 129 | function setAndPersist(value: T, set: (value: T) => void) { | CODE |
| LOW | packages/shared/src/lib/contributors.ts | 14 | async function getUsersWithAvatarsFromMails(userEmails: string[]) { | CODE |
| LOW | packages/shared/src/lib/contributors.ts | 38 | async function getAvatarsForContributors(contributors: UserMaybe[]) { | CODE |
| LOW⚡ | packages/shared/src/lib/contributors.ts | 50 | export async function getContributorsWithAvatars(branch: Branch) { | CODE |
| LOW⚡ | packages/shared/src/lib/contributors.ts | 54 | export async function getPatchContributorsWithAvatars(patch: PatchCommit) { | CODE |
| LOW⚡ | packages/shared/src/lib/contributors.ts | 58 | export async function getPatchApproversWithAvatars(patch: PatchCommit) { | CODE |
| LOW⚡ | packages/shared/src/lib/contributors.ts | 62 | export async function getPatchApproversAllWithAvatars(patch: PatchCommit) { | CODE |
| LOW⚡ | packages/shared/src/lib/contributors.ts | 66 | export async function getPatchRejectorsWithAvatars(patch: PatchCommit) { | CODE |
| LOW⚡ | packages/shared/src/lib/contributors.ts | 70 | export async function getPatchRejectorsAllWithAvatars(patch: PatchCommit) { | CODE |
| LOW⚡ | packages/shared/src/lib/contributors.ts | 74 | export async function getPatchViewersWithAvatars(patch: PatchCommit) { | CODE |
| LOW⚡ | packages/shared/src/lib/contributors.ts | 78 | export async function getPatchReviewersAllWithAvatars(patch: PatchCommit) { | CODE |
| LOW⚡ | packages/shared/src/lib/contributors.ts | 83 | export async function getPatchViewersAllWithAvatars(patch: PatchCommit) { | CODE |
| LOW | …shared/src/lib/organizations/projectsPreview.svelte.ts | 53 | export function getRecentlyInteractedProjects(inView?: InView): Reactive<LoadableProject[]> { | CODE |
| LOW | …shared/src/lib/organizations/projectsPreview.svelte.ts | 68 | export function getRecentlyPushedProjects(inView?: InView): Reactive<LoadableProject[]> { | CODE |
| LOW | …shared/src/lib/organizations/projectsPreview.svelte.ts | 98 | export function getFeedIdentityForRepositoryId( | CODE |
| LOW | packages/shared/src/lib/settings/types.ts | 21 | export function apiToNotificationSettings( | CODE |
| LOW | packages/shared/src/lib/settings/types.ts | 59 | export function notificationSettingsToApi( | CODE |
| LOW | …rc/lib/settings/notificationSetttingsPreview.svelte.ts | 8 | export function getNotificationSettingsInterest( | CODE |
| LOW | …ages/shared/src/lib/chat/chatChannelsPreview.svelte.ts | 33 | export function getChatChannelParticipants( | CODE |
| LOW | packages/shared/src/lib/chat/types.ts | 76 | export function apiToChatMessageInReplyTo( | CODE |
| LOW | packages/shared/src/lib/chat/types.ts | 239 | export function toApiCreateChatMessageParams( | CODE |
| LOW | packages/shared/src/lib/chat/types.ts | 282 | export function toApiPatchChatMessageParams( | CODE |
| LOW | packages/shared/src/lib/patchEvents/types.ts | 310 | export function createPatchEventChannelKey( | CODE |
| LOW | packages/shared/src/lib/branches/utils.ts | 37 | export function getMultipleContributorNames(contributors: UserMaybe[]): string { | CODE |
| LOW | …ages/shared/src/lib/branches/branchesPreview.svelte.ts | 18 | export function getBranchReviewsForRepository( | CODE |
| LOW | e2e/playwright/tests/unifiedDiffView.spec.ts | 97 | async function seedRemoteFileAndCloneFresh( | CODE |
| LOW | e2e/playwright/tests/startTheApp.spec.ts | 16 | async function addProjectAndOpenWorkspace(page: Page, projectPath: string) { | CODE |
| LOW | e2e/playwright/tests/moveCommitToNewStack.spec.ts | 10 | async function applyTwoIndependentStacks(gitbutler: GitButler, page: Page) { | CODE |
| LOW | e2e/playwright/tests/forge.spec.ts | 32 | async function openWorkspaceWithMockedPr( | CODE |
| LOW | e2e/playwright/tests/forge.spec.ts | 120 | async function openGithubPrWithChecksRoute( | CODE |
| LOW | e2e/playwright/tests/projectOffboarding.spec.ts | 5 | async function openProjectSettingsAndDelete(page: import("@playwright/test").Page) { | CODE |
| LOW | e2e/playwright/tests/branches.spec.ts | 36 | async function applyBranchFromBranchesView(page: Page, branchName: string) { | CODE |
| LOW | e2e/playwright/tests/branches.spec.ts | 54 | async function storeFakeGitHubEnterprisePat(page: Page, fakeGitHub: FakeGitHubServer) { | CODE |
| LOW | e2e/playwright/tests/branches.spec.ts | 76 | async function openProjectWithFakeGitHub( | CODE |
| LOW | e2e/playwright/tests/branches.spec.ts | 88 | async function applyReviewFromBranchesView(page: Page, title: string) { | CODE |
| LOW | e2e/playwright/tests/branches.spec.ts | 96 | async function applyReviewBranchFromBranchesView(page: Page, branchName: string) { | CODE |
| LOW | e2e/playwright/tests/commitActions.spec.ts | 174 | async function amendCommitMessageMultipleTimes(TIMES: number, page: Page) { | CODE |
| 131 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | crates/but-irc/src/client.rs | 370 | // Step 1: Tell the server we want PLAIN mechanism | COMMENT |
| LOW⚡ | crates/but-irc/src/client.rs | 375 | // Step 2: Wait for the server's AUTHENTICATE + response | COMMENT |
| LOW⚡ | crates/but-workspace/src/commit/move_commit.rs | 103 | // Step 1: Determine the parents to disconnect. | COMMENT |
| LOW⚡ | crates/but-workspace/src/commit/move_commit.rs | 106 | // Step 2: Disconnect | COMMENT |
| LOW⚡ | crates/but-workspace/src/commit/move_commit.rs | 114 | // Step 3: Insert | COMMENT |
| LOW | crates/but-workspace/src/commit/move_changes.rs | 63 | // Step 1: Get the source commit and its tree | COMMENT |
| LOW | …workspace/src/branch/integrate_branch_upstream/plan.rs | 117 | // Step 1: Find all the local commits associated with a change ID. | COMMENT |
| LOW | …workspace/src/branch/integrate_branch_upstream/plan.rs | 139 | // Step 2: Figure out which upstream-commits to squash into which local commits. | COMMENT |
| LOW | …workspace/src/branch/integrate_branch_upstream/plan.rs | 165 | // Step 3: Return the steps in the right order. | COMMENT |
| LOW | …workspace/src/branch/integrate_branch_upstream/plan.rs | 343 | // Step 1: We interpret the integration steps and transform them into graph steps disconnected from their parents. | COMMENT |
| LOW⚡ | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 181 | // Step 3: Disconnect the segment, isolating it so that we can freely manipulate it. | COMMENT |
| LOW⚡ | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 189 | // Step 4: Based on the prepared steps, we rebuild the chain. | COMMENT |
| LOW⚡ | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 192 | // Step 5: Once we have our new chain, we reconnect it to the original children and parents. | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 126 | // Step 1: We prepare the steps before building. | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 144 | // Step 2: We determine which children and parents to disconnect from the segment above. | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 240 | // Step 1: We create the editor, which maps every segment in the graph - | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 251 | // Step 2: We traverse the editor graph and determine the divergence between the local and remote branch. | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 262 | // Step 3: We determine the integration state of all the relevant commits, to know which are editable | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 285 | // Step 4: Build the initial set of integration steps. | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 302 | // Step 5: Build the return payload, including the integration steps recommended | COMMENT |
| LOW | crates/but/src/command/legacy/setup.rs | 279 | // Step 2: Determine remote | COMMENT |
| LOW | crates/but/src/command/legacy/pull/mod.rs | 248 | // Step 1: Check upstream data | COMMENT |
| LOW | crates/but/src/command/legacy/pull/mod.rs | 337 | // Step 2: Dry-run integration and derive statuses from the preview, like the desktop app. | COMMENT |
| LOW | crates/but/src/command/legacy/pull/mod.rs | 424 | // Step 3: Actually perform the integration | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | crates/but-irc/src/client.rs | 370 | // Step 1: Tell the server we want PLAIN mechanism | COMMENT |
| LOW⚡ | crates/but-irc/src/client.rs | 375 | // Step 2: Wait for the server's AUTHENTICATE + response | COMMENT |
| LOW⚡ | crates/but-workspace/src/commit/move_commit.rs | 103 | // Step 1: Determine the parents to disconnect. | COMMENT |
| LOW⚡ | crates/but-workspace/src/commit/move_commit.rs | 106 | // Step 2: Disconnect | COMMENT |
| LOW⚡ | crates/but-workspace/src/commit/move_commit.rs | 114 | // Step 3: Insert | COMMENT |
| LOW | crates/but-workspace/src/commit/move_changes.rs | 63 | // Step 1: Get the source commit and its tree | COMMENT |
| LOW | …workspace/src/branch/integrate_branch_upstream/plan.rs | 117 | // Step 1: Find all the local commits associated with a change ID. | COMMENT |
| LOW | …workspace/src/branch/integrate_branch_upstream/plan.rs | 139 | // Step 2: Figure out which upstream-commits to squash into which local commits. | COMMENT |
| LOW | …workspace/src/branch/integrate_branch_upstream/plan.rs | 165 | // Step 3: Return the steps in the right order. | COMMENT |
| LOW | …workspace/src/branch/integrate_branch_upstream/plan.rs | 343 | // Step 1: We interpret the integration steps and transform them into graph steps disconnected from their parents. | COMMENT |
| LOW⚡ | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 181 | // Step 3: Disconnect the segment, isolating it so that we can freely manipulate it. | COMMENT |
| LOW⚡ | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 189 | // Step 4: Based on the prepared steps, we rebuild the chain. | COMMENT |
| LOW⚡ | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 192 | // Step 5: Once we have our new chain, we reconnect it to the original children and parents. | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 126 | // Step 1: We prepare the steps before building. | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 144 | // Step 2: We determine which children and parents to disconnect from the segment above. | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 240 | // Step 1: We create the editor, which maps every segment in the graph - | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 251 | // Step 2: We traverse the editor graph and determine the divergence between the local and remote branch. | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 262 | // Step 3: We determine the integration state of all the relevant commits, to know which are editable | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 285 | // Step 4: Build the initial set of integration steps. | COMMENT |
| LOW | …-workspace/src/branch/integrate_branch_upstream/mod.rs | 302 | // Step 5: Build the return payload, including the integration steps recommended | COMMENT |
| LOW | crates/but/src/command/legacy/setup.rs | 279 | // Step 2: Determine remote | COMMENT |
| LOW | crates/but/src/command/legacy/pull/mod.rs | 248 | // Step 1: Check upstream data | COMMENT |
| LOW | crates/but/src/command/legacy/pull/mod.rs | 337 | // Step 2: Dry-run integration and derive statuses from the preview, like the desktop app. | COMMENT |
| LOW | crates/but/src/command/legacy/pull/mod.rs | 424 | // Step 3: Actually perform the integration | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …scripts/project-with-remote-branches__add-submodule.sh | 7 | # Create a simple repository to use as a submodule | COMMENT |
| MEDIUM | e2e/playwright/scripts/create-postcommit-fail-marker.sh | 2 | # Create a marker file to trigger post-commit failure | COMMENT |
| MEDIUM | e2e/playwright/scripts/create-allowed-file.sh | 2 | # Create a file with allowed content | COMMENT |
| MEDIUM | e2e/playwright/scripts/project-with-commit-hooks.sh | 21 | # Create a commit-msg hook that modifies the message | COMMENT |
| MEDIUM | e2e/playwright/scripts/project-with-commit-hooks.sh | 43 | # Create a pre-commit hook that checks for forbidden content | COMMENT |
| MEDIUM | e2e/playwright/scripts/project-with-commit-hooks.sh | 66 | # Create a post-commit hook that can be triggered to fail | COMMENT |
| MEDIUM | e2e/playwright/scripts/create-forbidden-file.sh | 2 | # Create a file with forbidden content | COMMENT |
| MEDIUM | …-with-remote-branches__commit-file-into-remote-base.sh | 10 | # Create a new branch in the remote project, add a file, and commit it. | COMMENT |
| MEDIUM | …t/scripts/project-in-single-branch-apply-transition.sh | 45 | # Create a managed workspace whose metadata will become stale after the direct checkout below. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/but/src/tui/text.rs | 137 | assert_eq!(truncate_text("lorem ipsum", 5), "lore…"); | CODE |
| LOW | crates/but/src/args/config.rs | 27 | /// but config user set name "John Doe" | COMMENT |
| LOW | crates/but/src/args/config.rs | 315 | /// but config user set name "John Doe" | COMMENT |
| LOW | crates/but/src/args/mod.rs | 1100 | /// but config user set name "John Doe" | COMMENT |
| LOW | packages/ui/src/stories/utils/Sticky.stories.svelte | 49 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut | CODE |
| LOW | packages/ui/src/stories/utils/Sticky.stories.svelte | 49 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut | CODE |
| LOW | packages/ui/src/stories/utils/Sticky.stories.svelte | 75 | Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci | CODE |
| LOW | packages/ui/src/stories/utils/Sticky.stories.svelte | 75 | Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci | CODE |
| LOW | packages/ui/src/stories/utils/Sticky.stories.svelte | 118 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> | CODE |
| LOW | packages/ui/src/stories/utils/Sticky.stories.svelte | 118 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> | CODE |
| LOW | …kages/ui/src/stories/components/Textbox.stories.svelte | 60 | let emailValue = $state("user@example.com"); | CODE |
| LOW | …kages/ui/src/stories/components/Textbox.stories.svelte | 395 | placeholder="user@example.com" | CODE |
| LOW | …kages/ui/src/stories/components/Textbox.stories.svelte | 479 | placeholder="user@example.com" | CODE |
| LOW | …kages/ui/src/stories/components/Textbox.stories.svelte | 527 | placeholder="user@example.com" | CODE |
| LOW | …kages/ui/src/stories/components/Textbox.stories.svelte | 544 | placeholder="user@example.com" | CODE |
| LOW | e2e/playwright/tests/branches.spec.ts | 60 | accessToken: "fake-token", | CODE |
| LOW | apps/desktop/src/lib/ai/service.test.ts | 111 | constructor(private response = "lorem ipsum") {} | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/but/src/id/mod.rs | 79 | /// utilize. The purpose is to not cause a shortening of an ID to invalidate a longer form of | COMMENT |
| MEDIUM | crates/gitbutler-stack/src/target.rs | 22 | // up the same anyway? Definitely could use a test then. | COMMENT |
| MEDIUM | crates/but-meta/src/virtual_branches_legacy_types.rs | 486 | // up the same anyway? Definitely could use a test then. | COMMENT |
| MEDIUM | crates/but-installer/src/shell.rs | 123 | // Check for PATH setup with more robust detection | COMMENT |
| MEDIUM | crates/but-hunk-dependency/src/lib.rs | 81 | //! Essentially, perform the same algorithm as with simple `Branches`, but operate on a merge commit instead, simulating | COMMENT |
| LOW | scripts/add-but-symlink-to-deb.sh | 10 | # manager can't track the symlink, so it's better for everyone to just add it | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | crates/but-forge/src/review.rs | 154 | // TODO: implement | COMMENT |
| LOW⚡ | crates/but-forge/src/review.rs | 159 | // TODO: implement | COMMENT |
| LOW⚡ | crates/but-forge/src/review.rs | 164 | // TODO: implement | COMMENT |
| LOW⚡ | crates/but-forge/src/review.rs | 169 | // TODO: implement | COMMENT |
| LOW⚡ | crates/but-forge/src/review.rs | 174 | // TODO: implement | COMMENT |
| LOW⚡ | crates/but-forge/src/review.rs | 179 | // TODO: implement | COMMENT |
| LOW | crates/but-api/src/json.rs | 424 | // TODO: implement this. How to get description and what not? | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …top/src/lib/dragging/dropHandlers/branchDropHandler.ts | 23 | print(): string { | CODE |
| HIGH | …top/src/lib/dragging/dropHandlers/branchDropHandler.ts | 40 | print(): string { | CODE |
| HIGH | …top/src/lib/dragging/dropHandlers/branchDropHandler.ts | 102 | print(): string { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | crates/but-graph/tests/graph/init/with_workspace.rs | 2700 | // It's worth noting that we avoid double-listing remote commits that are also | COMMENT |
| LOW | crates/but-db/src/transaction.rs | 43 | /// Don't forget to call [commit()](Transaction::commit()) to actually persist the result. | COMMENT |
| LOW | crates/but-db/src/transaction.rs | 62 | /// Don't forget to call [commit()](Transaction::commit()) to actually persist the result. | COMMENT |
| LOW | crates/but-db/src/transaction.rs | 79 | /// Don't forget to call [commit()](Transaction::commit()) to actually persist the result. | COMMENT |
| LOW | crates/but-db/src/transaction.rs | 101 | /// Don't forget to call [commit()](Transaction::commit()) to actually persist the result. | COMMENT |
| LOW | crates/but-db/src/transaction.rs | 118 | /// Don't forget to call [commit()](Transaction::commit()) to actually persist the result. | COMMENT |
| LOW | crates/but-db/src/transaction.rs | 140 | /// Don't forget to call [commit()](Transaction::commit()) to actually persist the result. | COMMENT |
| LOW | crates/but-db/src/transaction.rs | 157 | /// Don't forget to call [commit()](Transaction::commit()) to actually persist the result. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | crates/but-rebase/src/graph_rebase/workspace.rs | 356 | let Some(target_ref) = self.workspace.graph.project_meta.target_ref.as_ref() else { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/but/skill/references/reference.md | 248 | but squash <branch> -i # Squash with AI-generated commit message | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ignore-vercel.sh | 23 | # Check if we're in a git repository | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | e2e/playwright/src/fakeGithub.ts | 81 | function handleRequest( | CODE |