Skip to content

feat: show subtle project file difference count beside the project name #3057

Closed
2 of 2 issues completed
Closed

Description

@mblua

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

  1. mblua commented on Oct 17, 2026

    @mblua
    OwnerAuthor

    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:

    Categoría Puntos Ancla y justificación
    Scope footprint 7 Pocos archivos backend/UI moviéndose juntos, menor que módulo completo (10).
    Diagnosis difficulty 2 Encabezado y ausencia del dato identificados; cerca de causa indicada (1).
    Domain knowledge required 6 Semántica Git de diferencias/untracked, menor que subsistema completo (10).
    Solution-space ambiguity 7 Debe elegir integración del dato existente; apariencia ya decidida; menor que 2-3 alternativas equivalentes (10).
    Blast radius and reversibility 4 Indicador informativo reversible, sin escritura de datos; cercano a local reversible (1).
    Dependency and integration load 4 Datos Rust a UI con Git instalado; menor que contrato externo nuevo (10).
    Verification difficulty 8 Fixtures reales Git y pruebas UI necesarias; cerca de harness disponible con nueva prueba (10).
    State, data and compatibility 3 Dato derivado, sin persistencia/migración; cercano a stateless (1).
    Concurrency and timing 7 Refresco asíncrono debe respetar recursos/cancelación; menor que multithreading con dueño claro (10).
    Environment and tooling 3 Entorno Git/Windows conocido; menor que plataforma específica (10).

    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.

  2. mblua commented on Oct 17, 2026

    @mblua
    OwnerAuthor

    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:

    1. F1/G1: prueba de timeout requiere Tokio test-util no disponible y dependencia prohibida. Autor debe sustituir tiempo pausado por timeout corto real inyectable + runner pending, control positivo sensible, sin nuevas dependencias.
    2. B1: cambio overlay->flex del filtro, para mantener pill al filtrar, altera comportamiento actual. El reviewer propone preservar overlay; coordinación NO solicita retirar esa ampliación antes de consultar al usuario, según Role.md. Pregunta enviada: mantener filtro actual o conservar rediseño. Respuesta pendiente; sólo ese alcance está detenido.

    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.

  3. mblua commented on Oct 17, 2026

    @mblua
    OwnerAuthor

    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.

  4. added
    EpicLarge cross-cutting work item
    on Oct 17, 2026
  5. mblua commented on Oct 19, 2026

    @mblua
    OwnerAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    EpicLarge cross-cutting work itemenhancementNew feature or requestfeature

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions