You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add a GitLens-style, read-only attribution experience for local Git repositories. The IDE should show who last changed the active file, provide subtle line-level attribution in the editor, show local commit details on hover/click, and offer remote-host commit actions only when they can be derived from configured remotes.
Users can understand recent file and line history without leaving the editor or modifying the document. The core value works from local Git data in any Git repository, while GitHub or other remote-provider links are optional convenience actions when supported remotes are present.
Scope
In Scope
Detect active files inside local Git repositories.
Inspect repository remotes and derive external commit URLs from any supported host plus SHA when available.
Fetch file latest commit metadata and per-line blame metadata from local Git.
Expose typed frontend attribution data.
Show file attribution in the status bar.
Show quiet, non-selectable inline attribution in the editor.
Show hover metadata for local commit information in all supported Git repositories.
Show a compact click popover with local commit information, and include external provider actions only when matching remote URLs are available.
Fail quietly for non-Git, untracked, ignored, binary, missing, and command-failure states.
Ship behind the Git attribution feature flag from the feature/settings flag foundation.
Out of Scope
GitHub API calls or GitHub authentication.
PR, branch, review, issue, or avatar data.
Provider-specific open buttons beyond the first implemented provider, unless they are cheap once the provider model exists.
Attribution for unsaved local edits beyond a stale/dirty indication.
GitLens parity, history graphs, side panels, diff views, and author heatmaps.
Persisted user preferences beyond the feature flag unless the first pass proves too noisy.
Local Git attribution should apply to any readable Git repository, not only GitHub-backed repositories.
External provider actions should be derived from configured remotes, not external APIs.
GitHub can be the first supported provider action; GitLab and Azure DevOps can use the same model later.
The implementation should prefer an in-process Rust Git integration where practical.
Feature Flag Recommendation
Feature flag required: yes.
Proposed flag id: gitAttribution
Default state: disabled by default for first release.
User visibility: user-toggleable under the feature/settings flag surface created by #7.
Reason: this feature adds background Git work, status bar content, inline editor decorations, hover/click UI, and remote-provider action parsing. It should be easy to disable while performance, stale-result handling, and visual noise settle.
Graduation criteria: promote to a normal setting if users want permanent control over attribution visibility; remove the flag and make the feature always on only after performance is stable on large repositories, disabled-state tests prove no background work runs when off, accessibility behavior is acceptable, and the UI is not too noisy in daily editing.
Acceptance Criteria
In any supported Git repository, opening a tracked file shows status bar text like Last changed by Gordon Beeming 2 days ago.
In a non-Git workspace, untracked file, or repository state that cannot be read, the IDE remains quiet and does not show misleading attribution.
Moving the caret to a blamed line can show subtle ghost text with commit summary, author, and relative time without changing file contents or selectable text.
Hovering the inline attribution shows richer metadata from local Git history.
Clicking the inline attribution opens a compact popover with local commit information for any supported Git repository.
The popover includes provider actions such as Open in GitHub only when matching remote-derived commit URLs are available.
When multiple supported remotes point at the same commit host targets, the popover can show multiple provider actions rather than choosing one silently.
Each provider action opens the derived commit URL for the commit SHA when present.
The feature never polls external APIs and works from local repository data plus remote URL parsing.
The backend uses gix/Gitoxide for repository access where practical, with any shell-git fallback documented and narrowly scoped.
The feature is gated behind a gitAttribution feature flag and does not render UI, start attribution work, or change editor behavior while disabled.
Dirty files continue to edit normally; attribution either remains based on saved content or clearly indicates it may be stale.
Large files or expensive blame operations do not block typing, cursor movement, or file switching.
Attribution data is discarded or refreshed when switching files, switching workspaces, saving, or reloading from disk.
Implementation Tasks
Return file-level attribution, line-level blame metadata, remote provider metadata, unsupported-state information, and zero or more external commit actions from the local Git layer.
Gate all Git attribution behavior behind the feature flag foundation so the status bar, inline attribution, hover details, popover, and background attribution work remain off while disabled.
Use an in-process Rust Git integration where practical for repository reads, remotes, revision lookup, and blame, with any shell-git fallback documented and narrowly scoped.
Respect workspace boundaries and path safety when resolving repository roots, root-relative file paths, and any fallback Git operations.
Support local attribution for any readable Git repository without requiring a GitHub remote or any external API call.
Derive supported remote provider actions from configured remotes, starting with common GitHub SSH and HTTPS remote shapes.
Represent multiple supported remotes without silently choosing one provider when more than one external commit action is valid.
Prevent stale or slow attribution results from updating the wrong file after file switches, saves, reloads, or workspace changes.
Show file-level latest-change attribution in the status bar without making narrow windows or long author names unreadable.
Show line-level attribution as subtle non-document ghost text that is not selectable and does not modify file contents.
Provide hover details and click-to-open local commit information without invasive modal behavior.
Show external provider buttons only when remote-derived commit URLs are available for the selected commit.
Keep editing responsive while attribution is loading, unavailable, stale, or expensive to calculate.
Provide accessible focus, keyboard, contrast, and dismissal behavior for attribution hover and popover interactions where practical.
Add focused coverage for local Git attribution, remote parsing, multiple remotes, non-Git handling, untracked files, stale result handling, popover behavior, unsupported-provider behavior, and flag gating.
Extend smoke coverage if attribution is exposed through the loopback API as well as through the desktop app command path.
Codebase Impact Estimate
Area
Estimate
Existing files touched
Rust/Tauri backend Git integration, frontend command wrappers, app state, editor integration, status bar UI, styles, tests, and optional smoke coverage
New files added
Likely Git attribution backend/frontend modules plus focused tests
Rough LOC
600-1,500
Effort
M
Complexity
4/5
Foreignness
3/5
Confidence
Medium
Likely Touch Points
Planning-time hints only. These are not implementation instructions and may drift before the PBI is worked.
Summary
Add a GitLens-style, read-only attribution experience for local Git repositories. The IDE should show who last changed the active file, provide subtle line-level attribution in the editor, show local commit details on hover/click, and offer remote-host commit actions only when they can be derived from configured remotes.
Artifact source:
/Users/gordonbeeming/Developer/artifacts/ide/new-feature/2026-06-08-git-attribution.htmlUser Value
Users can understand recent file and line history without leaving the editor or modifying the document. The core value works from local Git data in any Git repository, while GitHub or other remote-provider links are optional convenience actions when supported remotes are present.
Scope
In Scope
Out of Scope
Assumptions
Feature Flag Recommendation
Feature flag required: yes.
Proposed flag id:
gitAttributionDefault state: disabled by default for first release.
User visibility: user-toggleable under the feature/settings flag surface created by #7.
Reason: this feature adds background Git work, status bar content, inline editor decorations, hover/click UI, and remote-provider action parsing. It should be easy to disable while performance, stale-result handling, and visual noise settle.
Graduation criteria: promote to a normal setting if users want permanent control over attribution visibility; remove the flag and make the feature always on only after performance is stable on large repositories, disabled-state tests prove no background work runs when off, accessibility behavior is acceptable, and the UI is not too noisy in daily editing.
Acceptance Criteria
Last changed by Gordon Beeming 2 days ago.Open in GitHubonly when matching remote-derived commit URLs are available.gix/Gitoxide for repository access where practical, with any shell-gitfallback documented and narrowly scoped.gitAttributionfeature flag and does not render UI, start attribution work, or change editor behavior while disabled.Implementation Tasks
gitfallback documented and narrowly scoped.Codebase Impact Estimate
Likely Touch Points
Planning-time hints only. These are not implementation instructions and may drift before the PBI is worked.
/Users/gordonbeeming/Developer/github/gordonbeeming/ide/src-tauri/src/lib.rs/Users/gordonbeeming/Developer/github/gordonbeeming/ide/src-tauri/Cargo.toml/Users/gordonbeeming/Developer/github/gordonbeeming/ide/src-tauri/Cargo.lock/Users/gordonbeeming/Developer/github/gordonbeeming/ide/src/tauri.ts/Users/gordonbeeming/Developer/github/gordonbeeming/ide/src/App.tsx/Users/gordonbeeming/Developer/github/gordonbeeming/ide/src/EditorPane.tsx/Users/gordonbeeming/Developer/github/gordonbeeming/ide/src/styles.css/Users/gordonbeeming/Developer/github/gordonbeeming/ide/src/App.test.tsx/Users/gordonbeeming/Developer/github/gordonbeeming/ide/src/EditorPane.test.tsx/Users/gordonbeeming/Developer/github/gordonbeeming/ide/src/tauri.test.ts/Users/gordonbeeming/Developer/github/gordonbeeming/ide/scripts/smoke-test.mjsDependencies
gitAttributionflag. See Manage Feature Flags And Their Promotion To Settings #7.gix/Gitoxide crate available in the Rust backend.Risks and Decisions
git blamecan be expensive on large files.gixAPIs need a quick implementation spike for blame and remote parsing before removing the shell fallback.Validation Plan
gix-backed local Git attribution, remote parsing, multiple remotes, non-Git handling, untracked files, blame/log parsing, and workspace escape rejection.npm test,npm run build, andcargo testinsrc-tauri.gitabsent, confirming thegixpath still works unless a documented fallback is required.Depends on #7.