T-ZOQT-tree-and-tabs-show-git-state
State: planning/proposed · Impact: low · Complexity: small
Once the platform can report a vault’s git state, the tree and the open-document tabs should show it: a row with uncommitted changes and a tab holding one should look different from a clean one. This is the read-only, low-risk half of git awareness — no action, just a badge and a dot color.
| Location | Role today |
|---|---|
solutions/determined/experiences/agent-pants/app/components/ApComponentTree.vue#badgesFor | Builds each component row’s badge list (target count, folder/kind disagreements); no git badge |
packages/ts/app-frame/app/components/ShellDocumentTabs.vue#hueStyle | Colors each tab’s dot from the active scope item’s hue via scopeItemHueStyle; nothing reads per-path git state |
solutions/determined/packages/shell/app/composables/useVaultRegistry.ts | Vault registry composable; no per-path git status yet (added by T-NS6Z-vault-git-status-service) |
Proposed
Section titled “Proposed”badgesFor gains a git badge (e.g. M/U/a conflict marker) for a component whose backing path
is modified/untracked/staged/conflicted per useVaultGit(), styled the way the existing
folder/kind-disagreement badges already use warning. ShellDocumentTabs.vue’s tab dot mixes in
the git-state color alongside the existing scope hue. On a vault without VaultAspect::Git, both
surfaces render exactly as they do today — no badge, no dot change — since useVaultGit() has
nothing to report.
Approach
Section titled “Approach”- Read
useVaultGit()(from T-NS6Z-vault-git-status-service) inApComponentTree.vue, keyed by each row’s backing file path. - Add a git-state badge to
badgesFor, following the existingBadgeshape (text,status,hint); decide the glyph/label set (M,U, a conflict marker) alongside a hover hint naming the state. - Read
useVaultGit()inShellDocumentTabs.vueand extendhueStyle(or add a sibling function) to layer the git-state color onto the tab dot; keep the scope-hue behavior for a vault carrying noGitaspect. - Confirm both surfaces are unchanged (no badge, unchanged dot) for a non-git vault, and update on a live status change without a manual refresh, per whatever invalidation T-NS6Z-vault-git-status-service settled on.
| Area | Note |
|---|---|
solutions/determined/experiences/agent-pants/app/components/ApComponentTree.vue | Git badge in badgesFor |
packages/ts/app-frame/app/components/ShellDocumentTabs.vue | Git-state color on the tab dot |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1: A component row backed by a modified file shows a git badge with a hover hint naming the state, in a git-aspected vault.
- AC-2: A tab open on an untracked or modified file shows the git-state color on its dot.
- AC-3: Neither surface shows any git indicator when the active vault lacks
VaultAspect::Git. - AC-4: A Playwright or component test covers at least one changed-state badge and its absence on a clean vault.
Out of scope
Section titled “Out of scope”- Any commit, stage, or discard action from the tree or tabs — T-L7YP-git-panel-commit-with-validation owns write actions.
- A dedicated git status panel — T-L7YP-git-panel-commit-with-validation and T-SK5T-stacked-left-panel own that surface.
Dependencies
Section titled “Dependencies”- T-NS6Z-vault-git-status-service supplies
useVaultGit(); this task cannot start until it closes.
Discovery context
Section titled “Discovery context”From the user’s Agent Manager planning request of 2026-09-07: git awareness as a vault facility,
expanded in solutions/agent-pants/docs/vault/design/workflow-and-ux-assessment.md. This task is
the read-only surfacing half; the write half is T-L7YP-git-panel-commit-with-validation.
Depends on
Section titled “Depends on”T-NS6Z-vault-git-status-service