Repository navigation
feat: show subtle project file difference count beside the project name #3057
Description
User request and chosen appearance
The user requested a subtle indication of untracked or modified project files relative to origin/main beside Project: AgentsCommander_iac. They reviewed three standalone prototypes and explicitly chose option B, Número: a quiet outlined pill containing the exact file count on the same header line. Selection: “vamos por la opción b” (2026-10-17).
Expected behavior
- Count distinct project files that differ from the cached origin/main reference, including local staged/unstaged changes, committed differences, deletions, and non-ignored untracked files. Count each path once; include versionable .ac content. This concerns the project's root repository, not an aggregate of room repo clones.
- Display the exact positive count in a subdued outlined pill beside the project name and before the existing filter icon. Hide it for a verified zero; no blinking, warning colors, magnitude thresholds or increased header height.
- Preserve collapse/filter behavior and accessible control separation. The indicator remains visible when project content is collapsed; narrow layouts truncate the name before removing the indicator/filter.
- Tooltip/accessibility copy for a positive count:
N files differ from origin/main, including untracked files. - A failed/unavailable Git read must not be represented as a verified zero. The design must define bounded read/update behavior and recovery, using existing facilities where appropriate. Do not fetch or mutate Git automatically.
Scope and acceptance
Deliver the selected visual behavior and the smallest necessary data path, with focused evidence for distinct file counting, ignored/untracked files, clean and unavailable states, refresh and existing header controls. Preserve unrelated repository behavior. No synchronization action, new changes panel, settings surface, dependencies, release/version bump, or standalone build is requested.
Prototype: .ac/room-04-ac-dev-team-v5/room-shared/project-status-prototypes-20261017/prototipos-v1.html, SHA256 389a74919487f65dd33d3c695fcd4d496fe9677650aead33b8fbad6adf97aa0f. Proposals/evidence: adjacent architect-options-v1.md. The prototype plan covers prototypes only; implementation requires its own reviewed plan.
Initial verified source: repo main/origin/main 7b4191fccf8751d9efae4f9870076d0d74780690; ProjectPanel.tsx:3299/3315 holds the header, existing git_watcher.rs GitStatus exposes branch/dirty, not a project-header file count.
Approved delivery phases
| Phase | Child | Owner | Dependency | State |
|---|---|---|---|---|
| P01: bounded project Git read | #3060 | ac-dev-rust-v5 | none | PR #3066; CI running |
| P02: subtle count pill | #3061 | ac-dev-webpage-ui-v5 | P01 merged | Pending P01 |
The user explicitly chose to preserve the current filter. Round 2 reached exact-digest agreement from the architect and all four reviewers; execution proceeds under the standing authorization for agreed in-scope work. Canonical plan: .ac/plans/3057-project-file-difference-count/plan-v3-project-file-difference-count.md; immutable approval receipt: adjacent approval-receipt-round2.md. No standalone build was requested.
Activity
mblua commentedon Oct 17, 2026
Selección y evaluación inicial I3057
El usuario eligió expresamente B, Número: “vamos por la opción b”. La continuación se interpreta como entrega de la opción elegida. La autorización permanente de authorizations/SKILL.md permite avanzar dentro del alcance con el consenso completo de la versión exacta; no pedir aprobaciones repetidas.
Prototipo v1 SHA256 389a74919487f65dd33d3c695fcd4d496fe9677650aead33b8fbad6adf97aa0f. El plan de prototipos no autoriza código y queda intacto. El nuevo plan de implementación debe tener su propio consenso.
Scoring según task-technical-scoring, preliminar con evidencia 7b4191f:
Raw: 51. Final: round((51-10)/190*99)+1 = 22/100.
Excluido: issue, rama, PR, CI, mensajes, revisiones, consenso, release/build no pedido.
Banda: baja. Path preliminar Full por cambio transversal Rust/UI y probable contrato serializado adicional; arquitecto verifica si la evidencia permite el camino mínimo suficiente. Veto de verificación >=8: revisión de prueba significativa con control positivo.
Autor: ac-architect-v5. Revisores requeridos: owning dev(s), ac-dev-rust-grinch-v5 y ac-architect-grinch-v5. Identidad de consenso: Plan-SHA256 exacto y versión inmutable. No se agrega prueba interactiva, build ni captura sin autorización aplicable.
mblua commentedon Oct 17, 2026
Ronda 1, sin consenso — I3057
Conjunto rechazado: manifiesto v2 56FF609694B9791B9D0EA5B324A146ECC4DAEDA5BFCCCA60A99F192F788F77A7; epic v1 967780BDBA60300D5925028DB823FF1990CC35493E6AD84092E4DFA8F0B2C34C; P01-v2 391473E78498CF103741E010C250410C8B6E704120EBEDD3A70B99AA544ED1C5; P02-v1 7B3E83A7EC35B939846C6366144A58793BDBB93F9A3AE76E7E43AD931B2923D9.
Votos concretos recibidos: autor NEEDS_ANOTHER_ROUND; dev UI PLAN_APPROVED factibilidad P02; dev Rust CHANGES_REQUIRED F1; Rust Grinch CHANGES_REQUIRED G1; architecture Grinch CHANGES_REQUIRED B1. 1 de 4 revisores aprueba. Informes exactos en room-shared/project-status-implementation/review-round1-.md y mensajes canónicos de ronda1. Todos verifican los mismos cuatro hashes.
Bloqueantes consolidados:
Para siguiente candidato: resolver F1/G1; conservar decisiones P02 pendientes hasta respuesta expresa; corregir explicación de cota WebSocket existente 30s (backend5s no es timeout cliente); explicitar canonicalización de ambos paths Windows cuando corresponda; sustituir status que exige consenso futuro en bytes por estado de candidato completo con votos externos vinculados a exact digest. No sumar trabajo opcional.
Resuelto externamente: snapshot workflow byte idéntico a skill vigente; PRE SCC comparable completado por Rust Grinch en pre-7b4191f-scc-grinch.json SHA256 C51C06ED88C7ED45D07ADE93DDF69484667AE2898AFD57FA5B573C15A827FBA6, 1 SCC con 89 miembros, pares previstos existentes. No repetir exploración válida.
Ronda 1 es la línea de base para comparar progreso. Informe visible publicado en comentario al usuario antes de purga de ronda 2. No hubo código modificado, ninguna aprobación se transfiere automáticamente, siguiente ronda empieza cold-start.
mblua commentedon Oct 17, 2026
Decisión expresa de alcance, I3057
El usuario respondió: «mantengamos el filtro actual, no cambiemos eso.»
Aplica a la pregunta sobre el agregado del plan que pasaba el filtro de overlay absoluto a flex para mantener visible la pill al filtrar. Queda autorizado retirar ese agregado de la propuesta y conservar comportamiento actual del filtro. La opción B/Número sigue elegida. No se autoriza rediseño del filtro ni modificación de su interacción.
Arquitecto debe resolver B1 en nuevas versiones inmutables, conservando el filtro. La reserva mínima necesaria para insertar la pill debe respetar ese límite y ser verificada por los mismos participantes. No transferir votos de versiones previas. Continúa ronda 2 ya iniciada desde contexto frío; sólo se completa el pendiente de alcance, sin nueva purga entre autor y revisores.
mblua commentedon Oct 19, 2026
Both phases are delivered and their native children are closed:
Option B is integrated: a quiet exact root-Project count against cached origin/main, including untracked files; zero hides the pill, unavailable remains distinct, polling is sequential and the current filter is preserved.
Acceptance: backend and UI reviews/checks passed; UI has 49 local tests plus typecheck/dependency guards. Final exact-head CI passed all 16 expanded jobs, all 24 current PR checks and all 14 configured required contexts. Actual merge preserves the tested feature/backend blobs and matches the independently qualified clean merge tree. Later unrelated main drift was classified and documented without unnecessary branch updates. The isolated Windows assertion did not reproduce on its single requested repeat; no unrelated fix was introduced.
Final main: 0e8136a. Checkout clean, synchronized and feature branch removed; team purge completed. CSS review was static; no rendered GUI verification or final app build was requested. No remaining epic work; closing completed.