From f4a5dc7d17a26bc1966d2c798b87cc29feda1309 Mon Sep 17 00:00:00 2001 From: aarroyo Date: Sat, 1 Aug 2026 22:57:45 -0500 Subject: [PATCH] =?UTF-8?q?chore(audit):=20contrast=20the=20third=20gap=20?= =?UTF-8?q?surface=20=E2=80=94=20reconcile=20GAP-020/023/025,=20file=20COH?= =?UTF-8?q?-016?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This repository keeps THREE gap surfaces sharing one id namespace: the register (tracker-gaps-opportunities-tracking.md), the board (tracker-gap-tracking.md) and the catalog (tracker-gap-reference-catalog.md). check-gap-registry.py kept the last two in step since the day it was written, and never looked at the first. Measured today: 34 ids in common, 5 of them contradicting each other. And neither surface was the trustworthy one — the board claimed GAP-011 and GAP-017 done while both files were still Spanish, and the register kept three rows open that the catalog had closed with evidence in July. Reconciled, each verified against the repository rather than against the other board: GAP-023 -> RESOLVED. The 254-line Re-Do design exists with state model, recalculation algorithm, events and traceability. Its five open items are scheduling decisions awaiting PO ratification, not missing design. GAP-025 -> RESOLVED. bounded-context-map.md names the four supporting contexts and all ten ddd-model.md files exist. GAP-020 -> REOPENED. This corrects my own closure from earlier today. The catalog reopened it by product direction and the reason stands: the Tracker must CONSUME the Core schema references, not merely document them. The guard now compares the two vocabularies on the only thing both state unambiguously — closed or not — because inventing an OPEN->PENDING mapping would be a decision dressed up as a check. Six self-tests; three go red when the comparison is disabled, verified by disabling it. COH-016 records the finding so the next reader does not rediscover it. --- .github/workflows/ci.yml | 8 + .harness/scripts/check-gap-registry.py | 55 ++++ .harness/scripts/check-gap-registry.test.py | 94 +++++++ .../tracker-gaps-opportunities-tracking.md | 237 ++++++++++-------- 4 files changed, 284 insertions(+), 110 deletions(-) create mode 100644 .harness/scripts/check-gap-registry.test.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 21497219..8360f92b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -236,6 +236,14 @@ jobs: - name: Board y catalogo deben contar lo mismo run: python3 .harness/scripts/check-gap-registry.py + # El paso anterior contrasta ademas el REGISTRO, la tercera superficie, anadida el + # 2026-08-01: board y catalogo llevaban sincronizados desde que existe el guard y + # nadie miraba el registro, que comparte el mismo espacio de ids. De los 34 ids + # comunes, CINCO se contradecian. Estas pruebas son negativas: comprueban que el + # contraste se pone rojo cuando debe, no que exista. + - name: Self-tests for the board/registro contrast + run: python3 .harness/scripts/check-gap-registry.test.py + # Las fichas del board recogen hallazgos de auditoria y nada las vuelve a # contrastar con el codigo, asi que envejecen en silencio mientras siguen # dirigiendo prioridades. El 2026-08-01 se encontraron CINCO reclamando trabajo ya diff --git a/.harness/scripts/check-gap-registry.py b/.harness/scripts/check-gap-registry.py index 8b944765..eaec5b0d 100755 --- a/.harness/scripts/check-gap-registry.py +++ b/.harness/scripts/check-gap-registry.py @@ -24,6 +24,8 @@ RAIZ = Path(__file__).resolve().parent.parent.parent BOARD = RAIZ / "docs/audit/tracker-gap-tracking.md" CATALOGO = RAIZ / "docs/audit/tracker-gap-reference-catalog.md" +# Tercera superficie, añadida el 2026-08-01. Ver `estados_registro`. +REGISTRO = RAIZ / "docs/audit/tracker-gaps-opportunities-tracking.md" # Tolerante a sangrado y a viñeta con `*`: el objetivo es DETECTAR el desorden, no # tropezar con él y reportar un falso "no existe". @@ -57,12 +59,60 @@ def estados_catalogo() -> tuple[dict[str, str], list[str], list[str]]: return estados, dobles, sangradas +def estados_registro() -> dict[str, str]: + """Estados del REGISTRO, la tercera superficie. + + Se añadió el 2026-08-01 después de medir el agujero: board y catálogo llevaban + sincronizados desde que existe esta comprobación, y el registro —que comparte el mismo + espacio de identificadores— no lo miraba nadie. De los 34 ids que las dos superficies + tienen en común, **5 se contradecían**: `COH-012`, `GAP-016`, `GAP-023` y `GAP-025` + figuraban cerrados en el board y abiertos en el registro, y `GAP-020` al revés. En dos + de esos casos el board mentía (los ficheros «traducidos» seguían en español) y en tres + mentía el registro. No es que una superficie sea de fiar y la otra no: es que nada las + obligaba a coincidir. + """ + estados = {} + for linea in REGISTRO.read_text().splitlines(): + if not linea.startswith("|"): + continue + celdas = linea.split("|") + if len(celdas) < 4: + continue + m = re.search(r"\[([A-Z]+-[A-Z0-9/]+)\]", celdas[3]) + if not m: + continue + estado = next( + (s for s in ("BLOCKED", "OPEN", "DEFERRED", "RESOLVED") if s in celdas[2]), None + ) + if estado: + estados[m.group(1)] = estado + return estados + + +# Los dos vocabularios no coinciden y NO se traducen entre sí: inventar un mapa +# `OPEN→PENDING`, `DEFERRED→?` sería una decisión disfrazada de comprobación. Se compara +# sólo lo que ambas superficies afirman sin ambigüedad — si el ítem está cerrado o no — +# que es justo la dimensión en la que se contradecían. +CERRADO_BOARD = {"DONE"} +CERRADO_REGISTRO = {"RESOLVED"} + + def main() -> int: board = estados_board() catalogo, dobles, sangradas = estados_catalogo() + registro = estados_registro() problemas = [] + for gid in sorted(set(board) & set(registro)): + cerrado_b = board[gid] in CERRADO_BOARD + cerrado_r = registro[gid] in CERRADO_REGISTRO + if cerrado_b != cerrado_r: + problemas.append( + f"{gid}: el board dice {board[gid]} y el registro dice {registro[gid]} — " + f"uno lo da por cerrado y el otro no" + ) + desync = [(g, board[g], catalogo[g]) for g in catalogo if g in board and board[g] != catalogo[g]] for gid, b, c in sorted(desync): problemas.append(f"{gid}: el board dice {b} y su ficha dice {c}") @@ -82,8 +132,13 @@ def main() -> int: print(f" · {p}") return 1 + comunes = len(set(board) & set(registro)) print(f"Registro coherente: {len(catalogo)} fichas / {len(board)} filas.") print(f" {dict(Counter(board.values()))}") + # El denominador se imprime siempre. Board y registro comparten espacio de ids pero + # sólo se solapan en una parte: fuera de esos ids nada aquí comprueba nada, y verlo + # escrito evita leer el verde como si cubriera las tres superficies enteras. + print(f" board∩registro: {comunes} id(s) contrastados de {len(registro)} en el registro.") return 0 diff --git a/.harness/scripts/check-gap-registry.test.py b/.harness/scripts/check-gap-registry.test.py new file mode 100644 index 00000000..0e610b7b --- /dev/null +++ b/.harness/scripts/check-gap-registry.test.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +"""Pruebas del contraste board ↔ registro añadido a `check-gap-registry.py`. + +Todas menos una son NEGATIVAS. Un guard que sólo se ha visto pasar es indistinguible de +uno roto, y esa confusión ya costó cara en este repositorio: el board daba por traducidos +dos ficheros que seguían en español, y todo estaba verde. + +La última prueba es la que evita el falso positivo simétrico: board y registro sólo se +solapan en una parte de sus ids, así que un id presente en uno y ausente en el otro NO es +una contradicción y no debe reportarse como tal. +""" +import shutil +import subprocess +import sys +import tempfile +import unittest +from pathlib import Path + +GUARD = Path(__file__).resolve().parent / "check-gap-registry.py" + + +def _repo(tmp: Path, filas): + """Monta un repositorio de usar y tirar con las tres superficies coherentes salvo + en lo que cada prueba quiera romper. `filas` = [(id, estado_board, estado_registro)]; + un estado a None omite la fila en esa superficie.""" + (tmp / ".harness/scripts").mkdir(parents=True) + (tmp / "docs/audit").mkdir(parents=True) + shutil.copy(GUARD, tmp / ".harness/scripts" / GUARD.name) + + board = ["| Gap | Qué | Estado |", "|---|---|---|"] + catalogo = ["# Catálogo", ""] + registro = [ + "| # | Status | ID | Type |", + "|---|---|---|---|", + ] + for n, (gid, eb, er) in enumerate(filas, start=1): + if eb is not None: + board.append(f"| [`{gid}`](./cat.md#{gid.lower()}) | algo | `{eb}` |") + catalogo += [f"#### {gid}", "", f"- **Status:** `{eb}`", ""] + if er is not None: + registro.append(f"| {n} | {er} | [{gid}](#detail-{gid.lower()}) | GAP |") + + (tmp / "docs/audit/tracker-gap-tracking.md").write_text("\n".join(board) + "\n") + (tmp / "docs/audit/tracker-gap-reference-catalog.md").write_text("\n".join(catalogo) + "\n") + (tmp / "docs/audit/tracker-gaps-opportunities-tracking.md").write_text("\n".join(registro) + "\n") + return tmp / ".harness/scripts" / GUARD.name + + +def correr(filas): + with tempfile.TemporaryDirectory() as d: + script = _repo(Path(d), filas) + p = subprocess.run([sys.executable, str(script)], capture_output=True, text=True) + return p.returncode, p.stdout + p.stderr + + +class ContrasteBoardRegistro(unittest.TestCase): + def test_de_acuerdo_en_cerrado_pasa(self): + code, _ = correr([("GAP-001", "DONE", "🟢 RESOLVED")]) + self.assertEqual(code, 0) + + def test_de_acuerdo_en_abierto_pasa(self): + code, _ = correr([("GAP-001", "PENDING", "🟡 OPEN")]) + self.assertEqual(code, 0) + + def test_board_cerrado_y_registro_abierto_falla(self): + """La forma exacta de COH-012, GAP-016, GAP-023 y GAP-025 el 2026-08-01.""" + code, salida = correr([("GAP-001", "DONE", "🟡 OPEN")]) + self.assertEqual(code, 1) + self.assertIn("GAP-001", salida) + self.assertIn("uno lo da por cerrado y el otro no", salida) + + def test_registro_cerrado_y_board_abierto_falla(self): + """La forma de GAP-020: cerrada en el registro y reabierta en el catálogo.""" + code, salida = correr([("GAP-001", "PENDING", "🟢 RESOLVED")]) + self.assertEqual(code, 1) + self.assertIn("GAP-001", salida) + + def test_deferred_en_el_registro_no_cuenta_como_cerrado(self): + code, _ = correr([("GAP-001", "DONE", "🟡⏳ DEFERRED")]) + self.assertEqual(code, 1) + + def test_id_en_una_sola_superficie_no_es_contradiccion(self): + """Las dos superficies sólo se solapan en parte. Comparar lo no compartido + convertiría cada id exclusivo en un fallo y haría el guard inservible.""" + code, _ = correr([ + ("GAP-001", "DONE", "🟢 RESOLVED"), + ("GAP-002", "DONE", None), + ("GAP-003", None, "🟡 OPEN"), + ]) + self.assertEqual(code, 0) + + +if __name__ == "__main__": + unittest.main() diff --git a/docs/audit/tracker-gaps-opportunities-tracking.md b/docs/audit/tracker-gaps-opportunities-tracking.md index 2d3d2592..6ddaba52 100644 --- a/docs/audit/tracker-gaps-opportunities-tracking.md +++ b/docs/audit/tracker-gaps-opportunities-tracking.md @@ -25,113 +25,114 @@ This document is the only operational gap register in this repository. The maste | # | Status | ID | Type | Category | Component | Module | Story(ies) | Description | Resolution / Next Step | Criticality | Complexity | |---:|---|---|---|---|---|---|---|---|---|:---:|:---:| -| 1 | 🟡 OPEN | [GAP-023](#detail-gap-023) | Docs | Documentation gap | Docs | Docs | N/A | Re-Do Flow Not Fully Designed | Pending owner/action definition in this register. | 🟡 MEDIUM | 🟡 MEDIUM | -| 2 | 🟡 OPEN | [GAP-025](#detail-gap-025) | Docs | Documentation gap | Docs | Docs | N/A | Portal DDD incomplete — NARROWED 2026-08-01: the strategic-map half is DONE (`reference/specs/architecture/bounded-context-map.md` calls itself «the single, authoritative strategic map» of the 9 contexts, with integration patterns and cross-context events). What remains is the four support contexts. | Only the remaining half is open. Withdrawn from `falsifiable-claims.json`: «four support contexts» needs judgement about WHICH four, and a probe that pretended to check it would refute the row on any document mentioning a context. | 🟡 MEDIUM | 🟡 MEDIUM | -| 3 | 🟡⏳ DEFERRED | [OPP-002](#detail-opp-002) | OPP | Improvement opportunity | Backend | N/A | N/A | Extraer AuditTrail como Shared Kernel — 5+ contextos implementan historiales inmutables | Pending owner/action definition in this register. | 🟠 HIGH | 🔴 HIGH | -| 4 | 🟢 RESOLVED | [GAP-016](#detail-gap-016) | Docs | Documentation gap | Docs | Docs | N/A | Roadmap Has No Calendar Dates | RESOLVED — stale row. `reference/specs/design/tracker-implementation-roadmap.md` has carried `Document Status: SUPERSEDED — historical NestJS-era draft` since it was corrected, and the marker cites **this row by id**: «SUPERSEDED (GAP-016)». The roadmap planned a NestJS build that was executed in .NET, so «no calendar dates» is moot on a document that describes a plan already carried out under a different stack. The other board, `tracker-gap-tracking.md`, recorded this correctly; this register did not. | 🟡 MEDIUM | 🟡 MEDIUM | -| 5 | 🟢 RESOLVED | [COH-012](#detail-coh-012) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-006 | Gherkin covers only 2 of 4 CRUD operations (Create, Update). Delete and Read entirely missing. Zero edge cases. | RESOLVED — 9 scenarios added to `docs/design/discovery-functional-specs.md`, covering Create (type derivation for 0/1/2/7 products against `InitiativeScope.Derive`, the `Initiative.TenantRequired` guard, and `ConsolidateFrom` lineage), Read (own-tenant hit, and other-tenant read returning exactly what a non-existent id returns — the shape that stops the id being confirmed), and withdrawal. **The row's premise was partly wrong and is corrected rather than obeyed:** there is no Delete in this aggregate and there must not be. An initiative is superseded into another (`Supersede` → `consolidated`, BR-DIS-005) because its lineage is governance evidence. Writing a Delete scenario would have satisfied the row and described a system that does not exist. The COH-012 probe in `falsifiable-claims.json` is therefore withdrawn, with the reason recorded in that file: it had inherited the same false premise. | 🟢 | 🟢 | -| 6 | 🟢 RESOLVED | [GAP-011](#detail-gap-011) | Docs | Documentation gap | Docs | Docs | N/A | C4 Topology No English version | RESOLVED — the row was TRUE and had been mismeasured. `c4-macro-topology-phase1.md` existed, was labelled «English (this document)» and passed `check-bilingual-parity`, but 86 of its 87 non-empty lines were byte-identical to the Spanish file: only the navigation banner had been translated. It is now genuinely in English — prose, diagram descriptions and relationship labels — and its entry was removed from `untranslated-allowlist.json`, which drops from 9 declared to 7. Note for the record: the other board, `tracker-gap-tracking.md`, marked this DONE while the file was still Spanish. | 🟡 MEDIUM | 🟡 MEDIUM | -| 7 | 🟢 RESOLVED | [GAP-017](#detail-gap-017) | Docs | Documentation gap | Docs | Docs | N/A | Discovery Canvas Has No ES Version | RESOLVED — same defect and same correction as GAP-011. `DISCOVERY_CANVAS.md` was 23 of 24 non-empty lines identical to `DISCOVERY_CANVAS.es.md`; the English label was the only English in it. Now translated in full and removed from `untranslated-allowlist.json`. Both boards had this backwards on direction — one said the ES version was missing, the other said the EN one was — and what was actually missing was English content behind an English filename. | 🟡 MEDIUM | 🟡 MEDIUM | -| 8 | 🟢 RESOLVED | [COH-009](#detail-coh-009) | INCO | Source incoherence | Backend | Release | All REL | BR-003 conflated: product-brief = "no deploy without QA gate", but 5+ stories invoke as "human authorization required." Two rules sharing one ID. | RESOLVED — and the repository says so in the row's own words. The business-rule table in `evolith-tracker-crosscutting-diagram.md` now carries a `BR-010` row, *CFR Quality Threshold*, whose own description reads «escindida de BR-003 por COH-009; BR-003 es sólo la firma humana». The split this row asked for was made, credited to this row, and the row was never moved. Verified across the repository: every `BR-003` occurrence outside the audit tree means Human Sign-Off and nothing else, and the QA-gate half lives as `BR-010` — cited by `reference/specs/qa/` («no deployment is authorized without an approved QA verdict and CFR < 2%»), by the test strategy against `PhaseGateEvaluator`, and by the Re-Do flow design. Two rules, two ids. | 🟢 | 🟢 | -| 9 | 🟢 RESOLVED | [GAP-013](#detail-gap-013) | Docs | Documentation gap | Docs | Docs | N/A | 14 Technical Design Docs Lack ES Version | REFUTED and MEASURED 2026-08-01. The row says 14 technical design documents lack a Spanish version. `reference/specs/design/` holds **20** documents and **every one** has its `.es.md` — zero missing. Repository-wide, 19 `.md` files have no Spanish pair, and **9 of them are under `docs/audit/`**: audit reports, corpus triages and this register itself, which are working documents rather than product documentation. The other ten are READMEs and task notes (`robosoft/README.md`, `product/infra/helm/README.md`, `Tracker.ArchitectureTests/README.md`, `docs/tasks/*`). None is a technical design document. **A related defect DOES survive and is tracked elsewhere:** having the pair is not having the translation — `check-translation-language` found 9 documents whose `.md` is written in Spanish, which is what `GAP-011` and `GAP-017` are about. | 🟡 MEDIUM | 🟡 MEDIUM | -| 10 | 🟢 RESOLVED | [GAP-015](#detail-gap-015) | Docs | Documentation gap | Docs | Docs | N/A | DECISIONS.md Lacks Description of T-001 Technical Rationale | Resolved 2026-08-01 by writing `docs/adrs/T-001-nx-monorepo-orchestration.md` (+ `.es`). **The row was right and understated it:** the single line T-001 did carry was also WRONG. It said «npm workspaces con Nx», and no `package.json` in this repository declares a `workspaces` field — Nx orchestrates by PROJECT GRAPH (`project.json` plus the `@nx/vite`, `@nx/webpack`, `@nx/eslint` and `@nx/jest` inference plugins in `src/nx.json`). A reader would have looked for a `workspaces` array, not found one, and concluded the monorepo was misconfigured. The ADR records the reason that decided it — `tracker-api` is .NET, and npm workspaces links `node_modules` between npm packages, so it would have covered three projects of four and left the largest outside — and the DECISIONS entry is corrected in both languages. | 🟡 MEDIUM | 🟡 MEDIUM | -| 11 | 🟢 RESOLVED | [GAP-021](#detail-gap-021) | Docs | Documentation gap | Docs | Docs | N/A | Redis in Docker Compose Without Requirement | REFUTED TWICE against the repository 2026-08-01. **The premise is gone:** there is no `docker-compose` file in this repository at all, no Redis in the Helm charts under `product/infra/helm/` — which is the real deployment — and no Redis in application code. **And the requirement it says is missing was decided:** `T-026` («Redis solo para soporte operacional») is recorded in `AdrRegistryEndpoints`, stating «Redis is operational support only (cache/locks/jobs/idempotency); PostgreSQL is the system of record». The row asks for a requirement that exists, about a file that does not. | 🟢 LOW | 🟡 MEDIUM | -| 12 | 🟢 RESOLVED | [GAP-022](#detail-gap-022) | Docs | Documentation gap | Docs | Docs | N/A | SPACE Metrics Not Defined | REFUTED by `check-falsifiable-claims` 2026-08-01: `reference/specs/metrics/prd.md` carries `REQ-MET-03` — «Compute SPACE metrics (Satisfaction, Performance, Activity, Communication, Efficiency)» — with acceptance criteria naming all five scores plus trend, threshold and last-computed timestamp. The framework is defined; the row is stale. | 🟡 MEDIUM | 🟡 MEDIUM | -| 13 | 🟢 RESOLVED | [COH-008](#detail-coh-008) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-004 | DeploymentRecord Aggregate Root NEVER created by any story. UC-005b ("records a DeploymentRecord") cannot be fulfilled. | REFUTED against the code 2026-08-01: the aggregate the row says was never created EXISTS, complete. `Tracker.Domain/Release/DeploymentRecord` ships `Start`, `Finish` and `RollBack`; it persists to `tracker_release.deployment_records`; three endpoints expose it in `ConstructionReleaseEndpoints` (`POST /`, `POST /{id}/finish`, `POST /{id}/rollback`); and `ConstructionReleaseTests` covers it. UC-005b («records a DeploymentRecord») is therefore fulfillable — the row describes a state of the repository that has not held for some time, and nobody moved it. | 🟡 | 🟡 | -| 14 | 🟢 RESOLVED | [COH-005](#detail-coh-005) | GAP | Missing capability / corrective gap | Infra | Infra | US-INF-002 | Creates 10 schemas but omits `tracker_audit`. Data design defines 11 schemas; audit trail (BR-009) backbone missing. | Resolved by SUPERSESSION 2026-08-01, and the row simply never moved: `T-047` (Accepted 2026-07-19) ratifies the consolidated four-schema topology, supersedes `T-028` (schema-per-context, 10 schemas) and **names COH-005 among the gaps it closes**. `tracker_audit` was never created ON PURPOSE — the audit aggregates live in `tracker_governance`, where they work: `audit_entries` is queried in production, `GT-603` typed its actor, and `GT-588` wired signed transparency statements on top of it. The data design says so itself: sections 3–12 are «the original 2026-06-07 TARGET design … kept for traceability only … read them as intent, never as a description of the database». Nothing was missing; a document and the code disagreed, and the ADR already decided which one wins. | 🟡 | 🟡 | -| 15 | 🟢 RESOLVED | [GAP-020](#detail-gap-020) | Docs | Documentation gap | Docs | Docs | N/A | Artifact Schema URLs from Core Missing | Resolved 2026-08-01: `docs/artifacts/CORE_ARTIFACT_SCHEMAS.md` links the 14 artifacts that publish a canonical schema to its `$id`, lists the 3 that are tool output, and names the 7 with none. Upstream `evolith_arch32#378` took coverage from 10 to 17 of 24 and fixed the broken `schemaRef` paths. | 🟡 MEDIUM | 🟡 MEDIUM | -| 16 | 🟢 RESOLVED | [COH-002](#detail-coh-002) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-006,007 | Discovery refinement entity has no persisted `status` column. States DRAFT/IN_REFINEMENT/SPLIT referenced in specs cannot be persisted; DDD model also missing the status field. | Resolved / Obsolete: El proceso de partición y refinamiento queda fuera del alcance de Tracker; las iniciativas sólo entran cuando están listas. | 🟢 LOW | 🟢 LOW | -| 17 | 🟢 RESOLVED | [COH-004](#detail-coh-004) | INCO | Source incoherence | Backend | QA | US-QA-001..004,006,008,011 | "TestRun" used in 7 stories but NOT in DDD model. DDD defines TestCycle (container) + TestExecution (atomic). TestCycle Aggregate Root never used by any story. | Resolved: TestCycle/TestExecution es el estándar canónico oficial; TestRun se depreca por ambiguo. Glosario actualizado. Historias asumen TestCycle. | 🔴 | 🔴 | -| 18 | 🟢 RESOLVED | [GAP-019](#detail-gap-019) | Docs | Documentation gap | Docs | Docs | N/A | Discovery requirements not broken down into implementable detail | Resolved: Se creó `docs/design/discovery-functional-specs.md` extrayendo las reglas de negocio, máquina de estados y cadenas de aprobación directamente del modelo DDD (Initiative.cs). | 🔴 HIGH | 🟡 MEDIUM | -| 19 | 🟢 RESOLVED | [GAP-010](#detail-gap-010) | Docs | Documentation gap | Docs | Docs | N/A | PRODUCT_VISION.md No English version | Resolved: PRODUCT_VISION.md ya se encontraba traducido y actualizado en inglés. Registro obsoleto. | 🟢 HIGH | 🟡 MEDIUM | -| 20 | 🟢 RESOLVED | [COH-010](#detail-coh-010) | INCO | Source incoherence | Backend | Construction | US-CON-008 | DDD defines `markAsDone()` but no `reopen()`/`revertStatus()`. Yet story allows DONE→IN_REVIEW regression. Contract breach between spec and domain model. | Resolved: Falsa alarma. La regresión real operaba en PhaseProgression y es estrictamente monótona. | 🟡 | 🟡 | -| 21 | 🟢 RESOLVED | [COH-001](#detail-coh-001) | INCO | Source incoherence | Backend | Discovery | US-DIS-002..005,011 | Status naming: `CANVAS_SUBMITTED` vs DB `submitted`. InitiativeStatus enum undefined in DDD. `under_review` in DB but zero specs. | Resolved: El desajuste se arregló previamente (2026-07-20) extrayendo InitiativeStatus como constantes y aplicando CHECK constraint. | 🟡 | 🟡 | -| 22 | 🟢 RESOLVED | [COH-003](#detail-coh-003) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-006 | Violates Small Aggregates pattern: nests child records inside a parent aggregate instead of referencing them by UUID. AGENTS.md mandates UUID refs only. | Resolved: No verificable (la historia US-DIS-006 no existe). El código actual SÍ utiliza referencias UUID correctamente. | 🟡 | 🟡 | -| 23 | 🟢 RESOLVED | [COH-011](#detail-coh-011) | INCO | Source incoherence | Backend | Discovery | US-DIS-003 | "ApprovalChain" aggregate referenced in Gherkin + Tech Reqs, but DDD model only defines `ApprovalGate` VO (0..1 cardinality). No ApprovalChain Aggregate Root exists. | Resolved: El código está bien (implementa ApprovalChain nativamente); el error era documental en una spec antigua. | 🟡 | 🟡 | -| 24 | 🟢 RESOLVED | [COH-006](#detail-coh-006) | GAP | Missing capability / corrective gap | CLI | CLI | US-CLI-010 | README says "MCP polling/sampling/agent SDK" but 0 of 6 MCP tools exist. | Resolved: Tier 2 BFF (`tracker-gateway`) now exposes 6/6 Tracker MCP tools via SSE and REST. | 🟡 | 🟡 | -| 25 | 🟢 RESOLVED | [COH-007](#detail-coh-007) | GAP | Missing capability / corrective gap | CLI | CLI | US-CLI-010 | PRD §5.3 defines 6 MCP tools; 0 implemented. BR-009 audit unenforceable via MCP. | Resolved: Tier 2 BFF (`tracker-gateway`) now exposes 6/6 Tracker MCP tools connected to live services. | 🟡 | 🟡 | -| 26 | 🟢 RESOLVED | [COH-300](#detail-coh-300) | GAP | Missing capability / corrective gap | Backend | Construction | US-CON-008 | Architecture Drift blocks DONE transition scenario already present | Resolved; evidence captured in the description. | 🟠 HIGH | 🟢 LOW | -| 27 | 🟢 RESOLVED | [COH-304](#detail-coh-304) | GAP | Missing capability / corrective gap | Backend | Construction | US-CON-005 | Shell compliance fixed: WFE/IntegrationFabric/TenantConfig injected; seq diagram updated | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 28 | 🟢 RESOLVED | [COH-305](#detail-coh-305) | INCO | Source incoherence | Backend | Construction | US-CON-012 | RefinementLock VO added to Construction DDD model + Ubiquitous Language | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 29 | 🟢 RESOLVED | [COH-201](#detail-coh-201) | GAP | Missing capability / corrective gap | Backend | Design | US-DES-001 | BR-002 enforcement: US-CON-002 rejects linking tasks to DRAFT Blueprint | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 30 | 🟢 RESOLVED | [COH-203](#detail-coh-203) | GAP | Missing capability / corrective gap | Backend | Design | US-DES-011 | DataSchema story created — full CRUD + Core validation for DDD DataSchema AR | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 31 | 🟢 RESOLVED | [COH-204](#detail-coh-204) | GAP | Missing capability / corrective gap | Backend | Design | US-DES-002 | Visual contract designer scenario added to Gherkin + NFRs | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 32 | 🟢 RESOLVED | [COH-205](#detail-coh-205) | INCO | Source incoherence | Backend | Design | US-DES-006 | @evolith/integration-fabric added to dependencies + bounded context | Resolved; evidence captured in the description. | 🟠 HIGH | 🟢 LOW | -| 33 | 🟢 RESOLVED | [COH-207](#detail-coh-207) | INCO | Source incoherence | Backend | Design | US-DES-007 | VersionEntry VO added to Design DDD model + TechnicalContract.versionHistory | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 34 | 🟢 RESOLVED | [COH-101](#detail-coh-101) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-014 | Discovery Canvas Builder created — guided form enforcing ROI, KPIs, risks | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 35 | 🟢 RESOLVED | [COH-102](#detail-coh-102) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-013 | Point estimate updated from 5→13 to reflect merge engine complexity | Resolved; evidence captured in the description. | 🟠 HIGH | 🟢 LOW | -| 36 | 🟢 RESOLVED | [COH-106](#detail-coh-106) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-003 | Edge cases (checklist blocking, state guard, Architect estimation, resubmission) confirmed present | Resolved; evidence captured in the description. | 🟠 HIGH | 🟢 LOW | -| 37 | 🟢 RESOLVED | [COH-202](#detail-coh-202) | GAP | Missing capability / corrective gap | Backend | Governance | AGENTS.md | AGENTS.md §23 already requires RequirementChecklist injection by WorkflowEngine | Resolved; evidence captured in the description. | 🟠 HIGH | 🟢 LOW | -| 38 | 🟢 RESOLVED | [COH-600](#detail-coh-600) | GAP | Missing capability / corrective gap | Backend | Governance | US-GOV-010 | Approval chain config story created — all 5 flow types (simple/seq/parallel/hierarchical/mixed) | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 39 | 🟢 RESOLVED | [COH-603](#detail-coh-603) | INCO | Source incoherence | Backend | Integration | US-INT-004 | StatusMappingACL added; direct Jira→Evolith status mapping prevented | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 40 | 🟢 RESOLVED | [COH-602](#detail-coh-602) | INCO | Source incoherence | Backend | Metrics | US-MET-003 | DriftAlertEvent removed: Metrics consumes DriftDetectedEvent (Conformist); warning-only | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 41 | 🟢 RESOLVED | [COH-403](#detail-coh-403) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-002 | Automatic .harness trigger scenario added on Construction DONE | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 42 | 🟢 RESOLVED | [COH-404](#detail-coh-404) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-003 | CFR cold-start scenario: insufficient data message + gate blocked | Resolved; evidence captured in the description. | 🟠 HIGH | 🟢 LOW | -| 43 | 🟢 RESOLVED | [COH-405](#detail-coh-405) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-004 | Root Cleanliness added to QA gate conditions (US-QA-007 violations block gate) | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 44 | 🟢 RESOLVED | [COH-406](#detail-coh-406) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-005 | Coverage gate enforcement scenario (below 60% blocks advancement) | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 45 | 🟢 RESOLVED | [COH-407](#detail-coh-407) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-010 | ArtifactInstance Core schema validation on QA Report export | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 46 | 🟢 RESOLVED | [COH-500](#detail-coh-500) | INCO | Source incoherence | Backend | Release | US-REL-003 | State naming: RE-DO_SCHEDULED→Replanned, events realigned | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 47 | 🟢 RESOLVED | [COH-501](#detail-coh-501) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-001 | QA gate validation: rejection scenario for non-passed gate prevents Release creation | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 48 | 🟢 RESOLVED | [COH-502/503](#detail-coh-502-503) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-008 | Human authorization + DeploymentRecord status transition on rollback | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 49 | 🟢 RESOLVED | [COH-504](#detail-coh-504) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-009 | Agent deployment execution + report_deployment_status MCP tools | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 50 | 🟢 RESOLVED | [COH-700](#detail-coh-700) | GAP | Missing capability / corrective gap | CLI | CLI | US-CLI-008 | 4 missing CLI commands added: list, reassign, unassign, mode set | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 51 | 🟢 RESOLVED | [COH-704](#detail-coh-704) | GAP | Missing capability / corrective gap | CLI | CLI | US-CLI-004 | 3 missing Construction commands added: cycle start, review submit, drift get | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 52 | 🟢 RESOLVED | [COH-705](#detail-coh-705) | GAP | Missing capability / corrective gap | CLI | CLI | US-CLI-007 | Gate list command added; evaluate/blockers/exception still unresolved | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 53 | 🟢 RESOLVED | [COH-706](#detail-coh-706) | GAP | Missing capability / corrective gap | CLI | CLI | US-CLI-002 | 2 missing Discovery commands added: initiative init, initiative list | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 54 | 🟢 RESOLVED | [GAP-009](#detail-gap-009) | GAP | Missing capability / corrective gap | CLI | CLI | N/A | BMAD Agent Assignment API Endpoints Missing | Created `reference/specs/design/tracker-agent-assignment-api.md` | 🟠 HIGH | 🟡 MEDIUM | -| 55 | 🟢 RESOLVED | [GAP-005](#detail-gap-005) | GAP | Missing capability / corrective gap | Docs | Docs | N/A | Roadmap subestima 45 puntos (16%) | Corregido: 101 stories/325 pts, Phase 0→M(2w), ~18.5w, R-16 registrado | 🟠 HIGH | 🟢 LOW | -| 56 | 🟢 RESOLVED | [COH-601](#detail-coh-601) | GAP | Missing capability / corrective gap | Infra | Infra | US-INF-009 | Audit schema lifecycle story created — tracker_audit bootstrap, append-only trigger, RLS | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | -| 57 | 🟢 RESOLVED | [GAP-002](#detail-gap-002) | GAP | Missing capability / corrective gap | Infra | Infra | N/A | PostgreSQL Schema Names Inconsistent Across Documents | Schema naming `tracker_` adopted | 🟠 HIGH | 🟢 LOW | -| 58 | 🟢 RESOLVED | [GAP-003](#detail-gap-003) | GAP | Missing capability / corrective gap | Infra | Infra | N/A | GraphQL API Status Undefined | REST + OpenAPI 3.0 only in Phase 1 | 🟠 HIGH | 🟢 LOW | -| 59 | 🟢 RESOLVED | [GAP-006](#detail-gap-006) | GAP | Missing capability / corrective gap | Docs | Docs | N/A | Subestimación de puntos no registrada en Risk Register | R-16 añadido a `tracker-risk-register.md` con mitigación y owner | 🟡 MEDIUM | 🟢 LOW | -| 60 | 🟢 RESOLVED | [GAP-007](#detail-gap-007) | GAP | Missing capability / corrective gap | Docs | Docs | N/A | CLI/MCP interbloqueo de fases con feature parity (BR-008) | Roadmap reestructurado: CLI Foundation en Phase 1, CLI distribuido Phase 2-7 | 🟡 MEDIUM | 🔴 HIGH | -| 61 | 🟢 RESOLVED | [COH-821](#detail-coh-821) | INCO | Source incoherence | Backend | Artifacts | US-ART-003 | EvidenceRecord links via ArtifactInstance→PhaseGateState chain. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 62 | 🟢 RESOLVED | [COH-907](#detail-coh-907) | GAP | Missing capability / corrective gap | Backend | Artifacts | N/A | EvidenceChain visualization story created (US-ART-004) — chain traversal + PDF export. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 63 | 🟢 RESOLVED | [COH-808](#detail-coh-808) | GAP | Missing capability / corrective gap | Backend | Construction | All CON | Functional-scope.md references verified — no broken links remain. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 64 | 🟢 RESOLVED | [COH-806](#detail-coh-806) | INCO | Source incoherence | Backend | Design | US-DES-009,010 | C4 Generator + STRIDE Analyzer added to Design DDD ubiquitous language. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 65 | 🟢 RESOLVED | [COH-807](#detail-coh-807) | GAP | Missing capability / corrective gap | Backend | Design | All DES | Tenant scoping added to US-DES-001 (entry point), inherited by remaining Design stories. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 66 | 🟢 RESOLVED | [COH-800](#detail-coh-800) | INCO | Source incoherence | Backend | Discovery | US-DIS-006..013 | All Discovery stories now have Feature:/Scenario: blocks. DIS-006 already had them; DIS-007..013 wrapped. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 67 | 🟢 RESOLVED | [COH-801](#detail-coh-801) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-006..013 | MCP execution scenarios added to all 7 stories (DIS-006 already had MCP parity). | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 68 | 🟢 RESOLVED | [COH-802](#detail-coh-802) | INCO | Source incoherence | Backend | Discovery | US-DIS-007 | IN_REFINEMENT refinement status defined in Discovery DDD §1. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 69 | 🟢 RESOLVED | [COH-803](#detail-coh-803) | OPP | Improvement opportunity | Backend | Discovery | US-DIS-005 | Scope→phase mapping made tenant-configurable via TenantConfigShell. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 70 | 🟢 RESOLVED | [COH-804](#detail-coh-804) | INCO | Source incoherence | Backend | Discovery | US-DIS-001 | Template field mapping: roiRationale→estimatedRoi fixed in US-DIS-001. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 71 | 🟢 RESOLVED | [COH-805](#detail-coh-805) | INCO | Source incoherence | Backend | Discovery | US-DIS-002,004 | Point delta acknowledged: BusinessCase (external inputs) = 5 vs TJ (internal) = 3. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 72 | 🟢 RESOLVED | [COH-900](#detail-coh-900) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-012 | Trailing template line removed. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 73 | 🟢 RESOLVED | [COH-901](#detail-coh-901) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-011 | Fixed: missing closing `**` after EPIC-005. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 74 | 🟢 RESOLVED | [COH-902](#detail-coh-902) | OPP | Improvement opportunity | Backend | Discovery | US-DIS-001 | Downstream scenario noted for Phase 1 refactoring. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 75 | 🟢 RESOLVED | [COH-816](#detail-coh-816) | GAP | Missing capability / corrective gap | Backend | Governance | US-GOV-009 | Agent framework selection (bmad/spec-kit/custom) + FrameworkChangedEvent. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 76 | 🟢 RESOLVED | [COH-817](#detail-coh-817) | GAP | Missing capability / corrective gap | Backend | Governance | US-GOV-001 | SatelliteProduct lifecycle: archive(), PENDING_REVALIDATION, status transitions. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 77 | 🟢 RESOLVED | [COH-909](#detail-coh-909) | GAP | Missing capability / corrective gap | Backend | Governance | N/A | Governance 5-gate demo story created (US-GOV-011) — end-to-end gate command trace. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 78 | 🟢 RESOLVED | [COH-822](#detail-coh-822) | INCO | Source incoherence | Backend | Infra | US-INF-008 | Audit/telemetry distinction: permanent (BR-009) vs rotatable logs. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 79 | 🟢 RESOLVED | [COH-818](#detail-coh-818) | GAP | Missing capability / corrective gap | Backend | Integration | US-INT-007 | Health dashboard checks Core, UMS, GitHub, .harness, Jira — all 5 integrations. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 80 | 🟢 RESOLVED | [COH-819](#detail-coh-819) | INCO | Source incoherence | Backend | Integration | US-INT-008 | Gate advancement routed through Governance (AdvanceGateCommand). | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 81 | 🟢 RESOLVED | [COH-820](#detail-coh-820) | GAP | Missing capability / corrective gap | Backend | Metrics | N/A | SPACE metrics story created (US-MET-006) with all 5 SPACE dimensions. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 82 | 🟢 RESOLVED | [COH-809](#detail-coh-809) | INCO | Source incoherence | Backend | QA | US-QA-003,004,008 | TestCycle Aggregate Root referenced in all QA stories + caps fixed in QA-008 Gherkin. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 83 | 🟢 RESOLVED | [COH-810](#detail-coh-810) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-006 | Human authorization scenario added: gate blocks until QA Engineer approves. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 84 | 🟢 RESOLVED | [COH-811](#detail-coh-811) | INCO | Source incoherence | Backend | QA | US-QA-008 | CFR displayed as aggregate ratio across all TestCycles, not per-cycle field. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 85 | 🟢 RESOLVED | [COH-903](#detail-coh-903) | INCO | Source incoherence | Backend | QA | US-QA-004 | Persona clarified: QA Engineer runs tests, Release Manager approves gate. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 86 | 🟢 RESOLVED | [COH-904](#detail-coh-904) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-002 | .harness execution is async with callback. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 87 | 🟢 RESOLVED | [COH-812](#detail-coh-812) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-003 | ReDoCycle AR listed in dependencies + persistent audit trail noted. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 88 | 🟢 RESOLVED | [COH-813](#detail-coh-813) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-001 | Calendar collision detection scenario with warning on same date/environment. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 89 | 🟢 RESOLVED | [COH-814](#detail-coh-814) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-006 | SPACE Survey Service story created (US-REL-010) — periodic survey trigger + webhook ingestion. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 90 | 🟢 RESOLVED | [COH-815](#detail-coh-815) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-004 | Authorization-time re-validation scenario + GateConditionChangedEvent. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 91 | 🟢 RESOLVED | [COH-905](#detail-coh-905) | INCO | Source incoherence | Backend | Release | US-REL-001 | DDD terminology: ReleasePackage aggregate name consistent. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 92 | 🟢 RESOLVED | [COH-906](#detail-coh-906) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-004 | Permission check documented in dependencies. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 93 | 🟢 RESOLVED | [COH-914](#detail-coh-914) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-005 | DORA dashboard threshold noted for Phase 1 statistical review. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 94 | 🟢 RESOLVED | [COH-823](#detail-coh-823) | INCO | Source incoherence | CLI | CLI | Global | CLI README: 11 stories · 37 pts matching actual files. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 95 | 🟢 RESOLVED | [COH-824](#detail-coh-824) | INCO | Source incoherence | CLI | CLI | Global | MCP Tool Suite duplication resolved (US-CLI-010 Phase 5, US-CLI-011 Phase 7). | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 96 | 🟢 RESOLVED | [COH-910](#detail-coh-910) | INCO | Source incoherence | CLI | CLI | US-CLI-001 | `--format=json` adopted across all CLI stories per Core ADR 0073. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 97 | 🟢 RESOLVED | [COH-911](#detail-coh-911) | INCO | Source incoherence | CLI | CLI | US-CLI-009 | Title aligned: "MCP Server Bootstrap" in both story and README. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 98 | 🟢 RESOLVED | [COH-912](#detail-coh-912) | INCO | Source incoherence | CLI | CLI | US-CLI-003 | Context flag `--initiative` standardized across CLI stories. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 99 | 🟢 RESOLVED | [COH-913](#detail-coh-913) | GAP | Missing capability / corrective gap | CLI | CLI | Global | Offline-aware CLI story created (US-CLI-012) — queue, sync, conflict resolution. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 100 | 🟢 RESOLVED | [GAP-001](#detail-gap-001) | GAP | Missing capability / corrective gap | Docs | Docs | N/A | README.es.md Missing | Created README.es.md | 🟢 LOW | 🟢 LOW | -| 101 | 🟢 RESOLVED | [GAP-012](#detail-gap-012) | Docs | Documentation gap | Docs | Docs | N/A | MASTER_INDEX.md Carece de Cabecera de Navegación Bilingüe | Added bilingual nav header to MASTER_INDEX.md | 🟢 LOW | 🟢 LOW | -| 102 | 🟢 RESOLVED | [GAP-014](#detail-gap-014) | Docs | Documentation gap | Docs | Docs | N/A | Harness ADR-0002 Applies to .NET Only | Added .NET scope note to ADR-0002 | 🟢 LOW | 🟢 LOW | -| 103 | 🟢 RESOLVED | [GAP-018](#detail-gap-018) | Docs | Documentation gap | Docs | Docs | N/A | TAD Internal Links Broken | Fixed TAD internal links | 🟢 LOW | 🟢 LOW | -| 104 | 🟢 RESOLVED | [GAP-024](#detail-gap-024) | Docs | Documentation gap | Docs | Docs | N/A | No Observability Dashboard or Alert Specification | Created `reference/specs/infrastructure/tracker-observability-spec.md` | 🟢 LOW | 🟢 LOW | -| 105 | 🟢 RESOLVED | [COH-908](#detail-coh-908) | GAP | Missing capability / corrective gap | Infra | Infra | N/A | Secrets management story created (US-INF-010) — Vault + Docker/Helm injection. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | -| 106 | 🟢 RESOLVED | [GAP-008](#detail-gap-008) | GAP | Missing capability / corrective gap | Infra | Infra | N/A | Transactional Outbox Uses Prisma in TypeORM Project | Fixed OutboxProcessor to use TypeORM | 🟢 LOW | 🟢 LOW | -| 107 | 🟢 RESOLVED | [GAP-004](#detail-gap-004) | GAP | Missing capability / corrective gap | API | N/A | N/A | 3 dependencias upstream bloqueadas (Core API, UMS JWKS, UMS Auth Graph) | Resolved via Defensive Isolation (Mocks). | 🔴 CRITICAL | 🔴 HIGH | +| 1 | 🟡 OPEN | [GAP-020](#detail-gap-020) | Docs | Documentation gap | Docs | Docs | N/A | Artifact Schema URLs from Core Missing | REOPENED — this is a correction of my own closure earlier today. I closed it on the strength of `docs/artifacts/CORE_ARTIFACT_SCHEMAS.md`, which links each artifact to its canonical `$id`. The catalog then reopened it the same day by product direction, and the reason is not satisfied by that document: the Tracker must CONSUME the Core schema references — persist or cache them tenant-aware, expose them in the phase forms, and validate what people and agents fill in before the Core evaluates. Documenting the links is a prerequisite, not the deliverable. Aligned to the catalog rather than argued with. | 🟡 MEDIUM | 🟡 MEDIUM | +| 2 | 🟡⏳ DEFERRED | [OPP-002](#detail-opp-002) | OPP | Improvement opportunity | Backend | N/A | N/A | Extraer AuditTrail como Shared Kernel — 5+ contextos implementan historiales inmutables | Pending owner/action definition in this register. | 🟠 HIGH | 🔴 HIGH | +| 3 | 🟢 RESOLVED | [GAP-023](#detail-gap-023) | Docs | Documentation gap | Docs | Docs | N/A | Re-Do Flow Not Fully Designed | RESOLVED — stale row; the evidence was in the catalog and never reached this register. `tracker-gap-reference-catalog.md` closed it on 2026-07-20 with «YA HECHA» and named the artifact. Re-verified here rather than taken on trust: `reference/specs/design/tracker-redo-flow-design.md` is 254 lines with trigger conditions, the state model, the domain model inside the Release context, the recalculation algorithm, impact propagation, the human-authorization gate, domain events and a traceability table. Its §10 lists five scheduling decisions (RD-D1…RD-D5) explicitly registered as proposals awaiting PO ratification — that is a decision pending an owner, not a design that is missing. | 🟡 MEDIUM | 🟡 MEDIUM | +| 4 | 🟢 RESOLVED | [GAP-025](#detail-gap-025) | Docs | Documentation gap | Docs | Docs | N/A | Portal DDD incomplete — NARROWED 2026-08-01: the strategic-map half is DONE (`reference/specs/architecture/bounded-context-map.md` calls itself «the single, authoritative strategic map» of the 9 contexts, with integration patterns and cross-context events). What remains is the four support contexts. | RESOLVED — stale row, same shape. The catalog closed it on 2026-07-19; this register kept the narrowed half open. Verified directly: `bounded-context-map.md` §2 classifies all nine contexts and names the four supporting ones — Governance, Artifacts, Metrics, Integration — each linked to its own tactical model, and all ten `ddd-model.md` files exist on disk. Both halves of the row are satisfied. | 🟡 MEDIUM | 🟡 MEDIUM | +| 5 | 🟢 RESOLVED | [GAP-016](#detail-gap-016) | Docs | Documentation gap | Docs | Docs | N/A | Roadmap Has No Calendar Dates | RESOLVED — stale row. `reference/specs/design/tracker-implementation-roadmap.md` has carried `Document Status: SUPERSEDED — historical NestJS-era draft` since it was corrected, and the marker cites **this row by id**: «SUPERSEDED (GAP-016)». The roadmap planned a NestJS build that was executed in .NET, so «no calendar dates» is moot on a document that describes a plan already carried out under a different stack. The other board, `tracker-gap-tracking.md`, recorded this correctly; this register did not. | 🟡 MEDIUM | 🟡 MEDIUM | +| 6 | 🟢 RESOLVED | [COH-012](#detail-coh-012) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-006 | Gherkin covers only 2 of 4 CRUD operations (Create, Update). Delete and Read entirely missing. Zero edge cases. | RESOLVED — 9 scenarios added to `docs/design/discovery-functional-specs.md`, covering Create (type derivation for 0/1/2/7 products against `InitiativeScope.Derive`, the `Initiative.TenantRequired` guard, and `ConsolidateFrom` lineage), Read (own-tenant hit, and other-tenant read returning exactly what a non-existent id returns — the shape that stops the id being confirmed), and withdrawal. **The row's premise was partly wrong and is corrected rather than obeyed:** there is no Delete in this aggregate and there must not be. An initiative is superseded into another (`Supersede` → `consolidated`, BR-DIS-005) because its lineage is governance evidence. Writing a Delete scenario would have satisfied the row and described a system that does not exist. The COH-012 probe in `falsifiable-claims.json` is therefore withdrawn, with the reason recorded in that file: it had inherited the same false premise. | 🟢 | 🟢 | +| 7 | 🟢 RESOLVED | [GAP-011](#detail-gap-011) | Docs | Documentation gap | Docs | Docs | N/A | C4 Topology No English version | RESOLVED — the row was TRUE and had been mismeasured. `c4-macro-topology-phase1.md` existed, was labelled «English (this document)» and passed `check-bilingual-parity`, but 86 of its 87 non-empty lines were byte-identical to the Spanish file: only the navigation banner had been translated. It is now genuinely in English — prose, diagram descriptions and relationship labels — and its entry was removed from `untranslated-allowlist.json`, which drops from 9 declared to 7. Note for the record: the other board, `tracker-gap-tracking.md`, marked this DONE while the file was still Spanish. | 🟡 MEDIUM | 🟡 MEDIUM | +| 8 | 🟢 RESOLVED | [GAP-017](#detail-gap-017) | Docs | Documentation gap | Docs | Docs | N/A | Discovery Canvas Has No ES Version | RESOLVED — same defect and same correction as GAP-011. `DISCOVERY_CANVAS.md` was 23 of 24 non-empty lines identical to `DISCOVERY_CANVAS.es.md`; the English label was the only English in it. Now translated in full and removed from `untranslated-allowlist.json`. Both boards had this backwards on direction — one said the ES version was missing, the other said the EN one was — and what was actually missing was English content behind an English filename. | 🟡 MEDIUM | 🟡 MEDIUM | +| 9 | 🟢 RESOLVED | [COH-009](#detail-coh-009) | INCO | Source incoherence | Backend | Release | All REL | BR-003 conflated: product-brief = "no deploy without QA gate", but 5+ stories invoke as "human authorization required." Two rules sharing one ID. | RESOLVED — and the repository says so in the row's own words. The business-rule table in `evolith-tracker-crosscutting-diagram.md` now carries a `BR-010` row, *CFR Quality Threshold*, whose own description reads «escindida de BR-003 por COH-009; BR-003 es sólo la firma humana». The split this row asked for was made, credited to this row, and the row was never moved. Verified across the repository: every `BR-003` occurrence outside the audit tree means Human Sign-Off and nothing else, and the QA-gate half lives as `BR-010` — cited by `reference/specs/qa/` («no deployment is authorized without an approved QA verdict and CFR < 2%»), by the test strategy against `PhaseGateEvaluator`, and by the Re-Do flow design. Two rules, two ids. | 🟢 | 🟢 | +| 10 | 🟢 RESOLVED | [COH-016](#detail-coh-016) | INCO | Source incoherence | Backend | Release | All REL | Three gap surfaces share one id namespace and only two were kept in step; 5 of the 34 shared ids disagreed. | RESOLVED — found while closing COH-009 and the two translation rows, and recorded here because it explains all of them. This repository keeps THREE gap surfaces sharing one id namespace: this register, `tracker-gap-tracking.md` and `tracker-gap-reference-catalog.md`. `check-gap-registry.py` kept the last two in step and never looked at this one. Measured on 2026-08-01: 34 ids in common, and **5 of them contradicted each other** — COH-012, GAP-016, GAP-023 and GAP-025 closed on the board and open here, GAP-020 the reverse. Neither surface was the reliable one: the board wrongly claimed GAP-011 and GAP-017 done while both files were still Spanish, and this register wrongly kept three closed rows open. Fixed by extending the guard to compare the two vocabularies on the only thing both state unambiguously — closed or not — with six self-tests, three of which go red when the comparison is disabled. | 🟢 | 🟢 | +| 11 | 🟢 RESOLVED | [GAP-013](#detail-gap-013) | Docs | Documentation gap | Docs | Docs | N/A | 14 Technical Design Docs Lack ES Version | REFUTED and MEASURED 2026-08-01. The row says 14 technical design documents lack a Spanish version. `reference/specs/design/` holds **20** documents and **every one** has its `.es.md` — zero missing. Repository-wide, 19 `.md` files have no Spanish pair, and **9 of them are under `docs/audit/`**: audit reports, corpus triages and this register itself, which are working documents rather than product documentation. The other ten are READMEs and task notes (`robosoft/README.md`, `product/infra/helm/README.md`, `Tracker.ArchitectureTests/README.md`, `docs/tasks/*`). None is a technical design document. **A related defect DOES survive and is tracked elsewhere:** having the pair is not having the translation — `check-translation-language` found 9 documents whose `.md` is written in Spanish, which is what `GAP-011` and `GAP-017` are about. | 🟡 MEDIUM | 🟡 MEDIUM | +| 12 | 🟢 RESOLVED | [GAP-015](#detail-gap-015) | Docs | Documentation gap | Docs | Docs | N/A | DECISIONS.md Lacks Description of T-001 Technical Rationale | Resolved 2026-08-01 by writing `docs/adrs/T-001-nx-monorepo-orchestration.md` (+ `.es`). **The row was right and understated it:** the single line T-001 did carry was also WRONG. It said «npm workspaces con Nx», and no `package.json` in this repository declares a `workspaces` field — Nx orchestrates by PROJECT GRAPH (`project.json` plus the `@nx/vite`, `@nx/webpack`, `@nx/eslint` and `@nx/jest` inference plugins in `src/nx.json`). A reader would have looked for a `workspaces` array, not found one, and concluded the monorepo was misconfigured. The ADR records the reason that decided it — `tracker-api` is .NET, and npm workspaces links `node_modules` between npm packages, so it would have covered three projects of four and left the largest outside — and the DECISIONS entry is corrected in both languages. | 🟡 MEDIUM | 🟡 MEDIUM | +| 13 | 🟢 RESOLVED | [GAP-021](#detail-gap-021) | Docs | Documentation gap | Docs | Docs | N/A | Redis in Docker Compose Without Requirement | REFUTED TWICE against the repository 2026-08-01. **The premise is gone:** there is no `docker-compose` file in this repository at all, no Redis in the Helm charts under `product/infra/helm/` — which is the real deployment — and no Redis in application code. **And the requirement it says is missing was decided:** `T-026` («Redis solo para soporte operacional») is recorded in `AdrRegistryEndpoints`, stating «Redis is operational support only (cache/locks/jobs/idempotency); PostgreSQL is the system of record». The row asks for a requirement that exists, about a file that does not. | 🟢 LOW | 🟡 MEDIUM | +| 14 | 🟢 RESOLVED | [GAP-022](#detail-gap-022) | Docs | Documentation gap | Docs | Docs | N/A | SPACE Metrics Not Defined | REFUTED by `check-falsifiable-claims` 2026-08-01: `reference/specs/metrics/prd.md` carries `REQ-MET-03` — «Compute SPACE metrics (Satisfaction, Performance, Activity, Communication, Efficiency)» — with acceptance criteria naming all five scores plus trend, threshold and last-computed timestamp. The framework is defined; the row is stale. | 🟡 MEDIUM | 🟡 MEDIUM | +| 15 | 🟢 RESOLVED | [COH-008](#detail-coh-008) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-004 | DeploymentRecord Aggregate Root NEVER created by any story. UC-005b ("records a DeploymentRecord") cannot be fulfilled. | REFUTED against the code 2026-08-01: the aggregate the row says was never created EXISTS, complete. `Tracker.Domain/Release/DeploymentRecord` ships `Start`, `Finish` and `RollBack`; it persists to `tracker_release.deployment_records`; three endpoints expose it in `ConstructionReleaseEndpoints` (`POST /`, `POST /{id}/finish`, `POST /{id}/rollback`); and `ConstructionReleaseTests` covers it. UC-005b («records a DeploymentRecord») is therefore fulfillable — the row describes a state of the repository that has not held for some time, and nobody moved it. | 🟡 | 🟡 | +| 16 | 🟢 RESOLVED | [COH-005](#detail-coh-005) | GAP | Missing capability / corrective gap | Infra | Infra | US-INF-002 | Creates 10 schemas but omits `tracker_audit`. Data design defines 11 schemas; audit trail (BR-009) backbone missing. | Resolved by SUPERSESSION 2026-08-01, and the row simply never moved: `T-047` (Accepted 2026-07-19) ratifies the consolidated four-schema topology, supersedes `T-028` (schema-per-context, 10 schemas) and **names COH-005 among the gaps it closes**. `tracker_audit` was never created ON PURPOSE — the audit aggregates live in `tracker_governance`, where they work: `audit_entries` is queried in production, `GT-603` typed its actor, and `GT-588` wired signed transparency statements on top of it. The data design says so itself: sections 3–12 are «the original 2026-06-07 TARGET design … kept for traceability only … read them as intent, never as a description of the database». Nothing was missing; a document and the code disagreed, and the ADR already decided which one wins. | 🟡 | 🟡 | +| 17 | 🟢 RESOLVED | [COH-002](#detail-coh-002) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-006,007 | Discovery refinement entity has no persisted `status` column. States DRAFT/IN_REFINEMENT/SPLIT referenced in specs cannot be persisted; DDD model also missing the status field. | Resolved / Obsolete: El proceso de partición y refinamiento queda fuera del alcance de Tracker; las iniciativas sólo entran cuando están listas. | 🟢 LOW | 🟢 LOW | +| 18 | 🟢 RESOLVED | [COH-004](#detail-coh-004) | INCO | Source incoherence | Backend | QA | US-QA-001..004,006,008,011 | "TestRun" used in 7 stories but NOT in DDD model. DDD defines TestCycle (container) + TestExecution (atomic). TestCycle Aggregate Root never used by any story. | Resolved: TestCycle/TestExecution es el estándar canónico oficial; TestRun se depreca por ambiguo. Glosario actualizado. Historias asumen TestCycle. | 🔴 | 🔴 | +| 19 | 🟢 RESOLVED | [GAP-019](#detail-gap-019) | Docs | Documentation gap | Docs | Docs | N/A | Discovery requirements not broken down into implementable detail | Resolved: Se creó `docs/design/discovery-functional-specs.md` extrayendo las reglas de negocio, máquina de estados y cadenas de aprobación directamente del modelo DDD (Initiative.cs). | 🔴 HIGH | 🟡 MEDIUM | +| 20 | 🟢 RESOLVED | [GAP-010](#detail-gap-010) | Docs | Documentation gap | Docs | Docs | N/A | PRODUCT_VISION.md No English version | Resolved: PRODUCT_VISION.md ya se encontraba traducido y actualizado en inglés. Registro obsoleto. | 🟢 HIGH | 🟡 MEDIUM | +| 21 | 🟢 RESOLVED | [COH-010](#detail-coh-010) | INCO | Source incoherence | Backend | Construction | US-CON-008 | DDD defines `markAsDone()` but no `reopen()`/`revertStatus()`. Yet story allows DONE→IN_REVIEW regression. Contract breach between spec and domain model. | Resolved: Falsa alarma. La regresión real operaba en PhaseProgression y es estrictamente monótona. | 🟡 | 🟡 | +| 22 | 🟢 RESOLVED | [COH-001](#detail-coh-001) | INCO | Source incoherence | Backend | Discovery | US-DIS-002..005,011 | Status naming: `CANVAS_SUBMITTED` vs DB `submitted`. InitiativeStatus enum undefined in DDD. `under_review` in DB but zero specs. | Resolved: El desajuste se arregló previamente (2026-07-20) extrayendo InitiativeStatus como constantes y aplicando CHECK constraint. | 🟡 | 🟡 | +| 23 | 🟢 RESOLVED | [COH-003](#detail-coh-003) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-006 | Violates Small Aggregates pattern: nests child records inside a parent aggregate instead of referencing them by UUID. AGENTS.md mandates UUID refs only. | Resolved: No verificable (la historia US-DIS-006 no existe). El código actual SÍ utiliza referencias UUID correctamente. | 🟡 | 🟡 | +| 24 | 🟢 RESOLVED | [COH-011](#detail-coh-011) | INCO | Source incoherence | Backend | Discovery | US-DIS-003 | "ApprovalChain" aggregate referenced in Gherkin + Tech Reqs, but DDD model only defines `ApprovalGate` VO (0..1 cardinality). No ApprovalChain Aggregate Root exists. | Resolved: El código está bien (implementa ApprovalChain nativamente); el error era documental en una spec antigua. | 🟡 | 🟡 | +| 25 | 🟢 RESOLVED | [COH-006](#detail-coh-006) | GAP | Missing capability / corrective gap | CLI | CLI | US-CLI-010 | README says "MCP polling/sampling/agent SDK" but 0 of 6 MCP tools exist. | Resolved: Tier 2 BFF (`tracker-gateway`) now exposes 6/6 Tracker MCP tools via SSE and REST. | 🟡 | 🟡 | +| 26 | 🟢 RESOLVED | [COH-007](#detail-coh-007) | GAP | Missing capability / corrective gap | CLI | CLI | US-CLI-010 | PRD §5.3 defines 6 MCP tools; 0 implemented. BR-009 audit unenforceable via MCP. | Resolved: Tier 2 BFF (`tracker-gateway`) now exposes 6/6 Tracker MCP tools connected to live services. | 🟡 | 🟡 | +| 27 | 🟢 RESOLVED | [COH-300](#detail-coh-300) | GAP | Missing capability / corrective gap | Backend | Construction | US-CON-008 | Architecture Drift blocks DONE transition scenario already present | Resolved; evidence captured in the description. | 🟠 HIGH | 🟢 LOW | +| 28 | 🟢 RESOLVED | [COH-304](#detail-coh-304) | GAP | Missing capability / corrective gap | Backend | Construction | US-CON-005 | Shell compliance fixed: WFE/IntegrationFabric/TenantConfig injected; seq diagram updated | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 29 | 🟢 RESOLVED | [COH-305](#detail-coh-305) | INCO | Source incoherence | Backend | Construction | US-CON-012 | RefinementLock VO added to Construction DDD model + Ubiquitous Language | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 30 | 🟢 RESOLVED | [COH-201](#detail-coh-201) | GAP | Missing capability / corrective gap | Backend | Design | US-DES-001 | BR-002 enforcement: US-CON-002 rejects linking tasks to DRAFT Blueprint | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 31 | 🟢 RESOLVED | [COH-203](#detail-coh-203) | GAP | Missing capability / corrective gap | Backend | Design | US-DES-011 | DataSchema story created — full CRUD + Core validation for DDD DataSchema AR | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 32 | 🟢 RESOLVED | [COH-204](#detail-coh-204) | GAP | Missing capability / corrective gap | Backend | Design | US-DES-002 | Visual contract designer scenario added to Gherkin + NFRs | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 33 | 🟢 RESOLVED | [COH-205](#detail-coh-205) | INCO | Source incoherence | Backend | Design | US-DES-006 | @evolith/integration-fabric added to dependencies + bounded context | Resolved; evidence captured in the description. | 🟠 HIGH | 🟢 LOW | +| 34 | 🟢 RESOLVED | [COH-207](#detail-coh-207) | INCO | Source incoherence | Backend | Design | US-DES-007 | VersionEntry VO added to Design DDD model + TechnicalContract.versionHistory | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 35 | 🟢 RESOLVED | [COH-101](#detail-coh-101) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-014 | Discovery Canvas Builder created — guided form enforcing ROI, KPIs, risks | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 36 | 🟢 RESOLVED | [COH-102](#detail-coh-102) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-013 | Point estimate updated from 5→13 to reflect merge engine complexity | Resolved; evidence captured in the description. | 🟠 HIGH | 🟢 LOW | +| 37 | 🟢 RESOLVED | [COH-106](#detail-coh-106) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-003 | Edge cases (checklist blocking, state guard, Architect estimation, resubmission) confirmed present | Resolved; evidence captured in the description. | 🟠 HIGH | 🟢 LOW | +| 38 | 🟢 RESOLVED | [COH-202](#detail-coh-202) | GAP | Missing capability / corrective gap | Backend | Governance | AGENTS.md | AGENTS.md §23 already requires RequirementChecklist injection by WorkflowEngine | Resolved; evidence captured in the description. | 🟠 HIGH | 🟢 LOW | +| 39 | 🟢 RESOLVED | [COH-600](#detail-coh-600) | GAP | Missing capability / corrective gap | Backend | Governance | US-GOV-010 | Approval chain config story created — all 5 flow types (simple/seq/parallel/hierarchical/mixed) | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 40 | 🟢 RESOLVED | [COH-603](#detail-coh-603) | INCO | Source incoherence | Backend | Integration | US-INT-004 | StatusMappingACL added; direct Jira→Evolith status mapping prevented | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 41 | 🟢 RESOLVED | [COH-602](#detail-coh-602) | INCO | Source incoherence | Backend | Metrics | US-MET-003 | DriftAlertEvent removed: Metrics consumes DriftDetectedEvent (Conformist); warning-only | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 42 | 🟢 RESOLVED | [COH-403](#detail-coh-403) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-002 | Automatic .harness trigger scenario added on Construction DONE | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 43 | 🟢 RESOLVED | [COH-404](#detail-coh-404) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-003 | CFR cold-start scenario: insufficient data message + gate blocked | Resolved; evidence captured in the description. | 🟠 HIGH | 🟢 LOW | +| 44 | 🟢 RESOLVED | [COH-405](#detail-coh-405) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-004 | Root Cleanliness added to QA gate conditions (US-QA-007 violations block gate) | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 45 | 🟢 RESOLVED | [COH-406](#detail-coh-406) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-005 | Coverage gate enforcement scenario (below 60% blocks advancement) | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 46 | 🟢 RESOLVED | [COH-407](#detail-coh-407) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-010 | ArtifactInstance Core schema validation on QA Report export | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 47 | 🟢 RESOLVED | [COH-500](#detail-coh-500) | INCO | Source incoherence | Backend | Release | US-REL-003 | State naming: RE-DO_SCHEDULED→Replanned, events realigned | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 48 | 🟢 RESOLVED | [COH-501](#detail-coh-501) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-001 | QA gate validation: rejection scenario for non-passed gate prevents Release creation | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 49 | 🟢 RESOLVED | [COH-502/503](#detail-coh-502-503) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-008 | Human authorization + DeploymentRecord status transition on rollback | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 50 | 🟢 RESOLVED | [COH-504](#detail-coh-504) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-009 | Agent deployment execution + report_deployment_status MCP tools | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 51 | 🟢 RESOLVED | [COH-700](#detail-coh-700) | GAP | Missing capability / corrective gap | CLI | CLI | US-CLI-008 | 4 missing CLI commands added: list, reassign, unassign, mode set | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 52 | 🟢 RESOLVED | [COH-704](#detail-coh-704) | GAP | Missing capability / corrective gap | CLI | CLI | US-CLI-004 | 3 missing Construction commands added: cycle start, review submit, drift get | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 53 | 🟢 RESOLVED | [COH-705](#detail-coh-705) | GAP | Missing capability / corrective gap | CLI | CLI | US-CLI-007 | Gate list command added; evaluate/blockers/exception still unresolved | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 54 | 🟢 RESOLVED | [COH-706](#detail-coh-706) | GAP | Missing capability / corrective gap | CLI | CLI | US-CLI-002 | 2 missing Discovery commands added: initiative init, initiative list | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 55 | 🟢 RESOLVED | [GAP-009](#detail-gap-009) | GAP | Missing capability / corrective gap | CLI | CLI | N/A | BMAD Agent Assignment API Endpoints Missing | Created `reference/specs/design/tracker-agent-assignment-api.md` | 🟠 HIGH | 🟡 MEDIUM | +| 56 | 🟢 RESOLVED | [GAP-005](#detail-gap-005) | GAP | Missing capability / corrective gap | Docs | Docs | N/A | Roadmap subestima 45 puntos (16%) | Corregido: 101 stories/325 pts, Phase 0→M(2w), ~18.5w, R-16 registrado | 🟠 HIGH | 🟢 LOW | +| 57 | 🟢 RESOLVED | [COH-601](#detail-coh-601) | GAP | Missing capability / corrective gap | Infra | Infra | US-INF-009 | Audit schema lifecycle story created — tracker_audit bootstrap, append-only trigger, RLS | Resolved; evidence captured in the description. | 🟠 HIGH | 🟡 MEDIUM | +| 58 | 🟢 RESOLVED | [GAP-002](#detail-gap-002) | GAP | Missing capability / corrective gap | Infra | Infra | N/A | PostgreSQL Schema Names Inconsistent Across Documents | Schema naming `tracker_` adopted | 🟠 HIGH | 🟢 LOW | +| 59 | 🟢 RESOLVED | [GAP-003](#detail-gap-003) | GAP | Missing capability / corrective gap | Infra | Infra | N/A | GraphQL API Status Undefined | REST + OpenAPI 3.0 only in Phase 1 | 🟠 HIGH | 🟢 LOW | +| 60 | 🟢 RESOLVED | [GAP-006](#detail-gap-006) | GAP | Missing capability / corrective gap | Docs | Docs | N/A | Subestimación de puntos no registrada en Risk Register | R-16 añadido a `tracker-risk-register.md` con mitigación y owner | 🟡 MEDIUM | 🟢 LOW | +| 61 | 🟢 RESOLVED | [GAP-007](#detail-gap-007) | GAP | Missing capability / corrective gap | Docs | Docs | N/A | CLI/MCP interbloqueo de fases con feature parity (BR-008) | Roadmap reestructurado: CLI Foundation en Phase 1, CLI distribuido Phase 2-7 | 🟡 MEDIUM | 🔴 HIGH | +| 62 | 🟢 RESOLVED | [COH-821](#detail-coh-821) | INCO | Source incoherence | Backend | Artifacts | US-ART-003 | EvidenceRecord links via ArtifactInstance→PhaseGateState chain. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 63 | 🟢 RESOLVED | [COH-907](#detail-coh-907) | GAP | Missing capability / corrective gap | Backend | Artifacts | N/A | EvidenceChain visualization story created (US-ART-004) — chain traversal + PDF export. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 64 | 🟢 RESOLVED | [COH-808](#detail-coh-808) | GAP | Missing capability / corrective gap | Backend | Construction | All CON | Functional-scope.md references verified — no broken links remain. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 65 | 🟢 RESOLVED | [COH-806](#detail-coh-806) | INCO | Source incoherence | Backend | Design | US-DES-009,010 | C4 Generator + STRIDE Analyzer added to Design DDD ubiquitous language. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 66 | 🟢 RESOLVED | [COH-807](#detail-coh-807) | GAP | Missing capability / corrective gap | Backend | Design | All DES | Tenant scoping added to US-DES-001 (entry point), inherited by remaining Design stories. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 67 | 🟢 RESOLVED | [COH-800](#detail-coh-800) | INCO | Source incoherence | Backend | Discovery | US-DIS-006..013 | All Discovery stories now have Feature:/Scenario: blocks. DIS-006 already had them; DIS-007..013 wrapped. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 68 | 🟢 RESOLVED | [COH-801](#detail-coh-801) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-006..013 | MCP execution scenarios added to all 7 stories (DIS-006 already had MCP parity). | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 69 | 🟢 RESOLVED | [COH-802](#detail-coh-802) | INCO | Source incoherence | Backend | Discovery | US-DIS-007 | IN_REFINEMENT refinement status defined in Discovery DDD §1. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 70 | 🟢 RESOLVED | [COH-803](#detail-coh-803) | OPP | Improvement opportunity | Backend | Discovery | US-DIS-005 | Scope→phase mapping made tenant-configurable via TenantConfigShell. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 71 | 🟢 RESOLVED | [COH-804](#detail-coh-804) | INCO | Source incoherence | Backend | Discovery | US-DIS-001 | Template field mapping: roiRationale→estimatedRoi fixed in US-DIS-001. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 72 | 🟢 RESOLVED | [COH-805](#detail-coh-805) | INCO | Source incoherence | Backend | Discovery | US-DIS-002,004 | Point delta acknowledged: BusinessCase (external inputs) = 5 vs TJ (internal) = 3. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 73 | 🟢 RESOLVED | [COH-900](#detail-coh-900) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-012 | Trailing template line removed. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 74 | 🟢 RESOLVED | [COH-901](#detail-coh-901) | GAP | Missing capability / corrective gap | Backend | Discovery | US-DIS-011 | Fixed: missing closing `**` after EPIC-005. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 75 | 🟢 RESOLVED | [COH-902](#detail-coh-902) | OPP | Improvement opportunity | Backend | Discovery | US-DIS-001 | Downstream scenario noted for Phase 1 refactoring. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 76 | 🟢 RESOLVED | [COH-816](#detail-coh-816) | GAP | Missing capability / corrective gap | Backend | Governance | US-GOV-009 | Agent framework selection (bmad/spec-kit/custom) + FrameworkChangedEvent. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 77 | 🟢 RESOLVED | [COH-817](#detail-coh-817) | GAP | Missing capability / corrective gap | Backend | Governance | US-GOV-001 | SatelliteProduct lifecycle: archive(), PENDING_REVALIDATION, status transitions. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 78 | 🟢 RESOLVED | [COH-909](#detail-coh-909) | GAP | Missing capability / corrective gap | Backend | Governance | N/A | Governance 5-gate demo story created (US-GOV-011) — end-to-end gate command trace. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 79 | 🟢 RESOLVED | [COH-822](#detail-coh-822) | INCO | Source incoherence | Backend | Infra | US-INF-008 | Audit/telemetry distinction: permanent (BR-009) vs rotatable logs. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 80 | 🟢 RESOLVED | [COH-818](#detail-coh-818) | GAP | Missing capability / corrective gap | Backend | Integration | US-INT-007 | Health dashboard checks Core, UMS, GitHub, .harness, Jira — all 5 integrations. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 81 | 🟢 RESOLVED | [COH-819](#detail-coh-819) | INCO | Source incoherence | Backend | Integration | US-INT-008 | Gate advancement routed through Governance (AdvanceGateCommand). | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 82 | 🟢 RESOLVED | [COH-820](#detail-coh-820) | GAP | Missing capability / corrective gap | Backend | Metrics | N/A | SPACE metrics story created (US-MET-006) with all 5 SPACE dimensions. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 83 | 🟢 RESOLVED | [COH-809](#detail-coh-809) | INCO | Source incoherence | Backend | QA | US-QA-003,004,008 | TestCycle Aggregate Root referenced in all QA stories + caps fixed in QA-008 Gherkin. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 84 | 🟢 RESOLVED | [COH-810](#detail-coh-810) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-006 | Human authorization scenario added: gate blocks until QA Engineer approves. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 85 | 🟢 RESOLVED | [COH-811](#detail-coh-811) | INCO | Source incoherence | Backend | QA | US-QA-008 | CFR displayed as aggregate ratio across all TestCycles, not per-cycle field. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 86 | 🟢 RESOLVED | [COH-903](#detail-coh-903) | INCO | Source incoherence | Backend | QA | US-QA-004 | Persona clarified: QA Engineer runs tests, Release Manager approves gate. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 87 | 🟢 RESOLVED | [COH-904](#detail-coh-904) | GAP | Missing capability / corrective gap | Backend | QA | US-QA-002 | .harness execution is async with callback. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 88 | 🟢 RESOLVED | [COH-812](#detail-coh-812) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-003 | ReDoCycle AR listed in dependencies + persistent audit trail noted. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 89 | 🟢 RESOLVED | [COH-813](#detail-coh-813) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-001 | Calendar collision detection scenario with warning on same date/environment. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 90 | 🟢 RESOLVED | [COH-814](#detail-coh-814) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-006 | SPACE Survey Service story created (US-REL-010) — periodic survey trigger + webhook ingestion. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 91 | 🟢 RESOLVED | [COH-815](#detail-coh-815) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-004 | Authorization-time re-validation scenario + GateConditionChangedEvent. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 92 | 🟢 RESOLVED | [COH-905](#detail-coh-905) | INCO | Source incoherence | Backend | Release | US-REL-001 | DDD terminology: ReleasePackage aggregate name consistent. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 93 | 🟢 RESOLVED | [COH-906](#detail-coh-906) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-004 | Permission check documented in dependencies. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 94 | 🟢 RESOLVED | [COH-914](#detail-coh-914) | GAP | Missing capability / corrective gap | Backend | Release | US-REL-005 | DORA dashboard threshold noted for Phase 1 statistical review. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 95 | 🟢 RESOLVED | [COH-823](#detail-coh-823) | INCO | Source incoherence | CLI | CLI | Global | CLI README: 11 stories · 37 pts matching actual files. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 96 | 🟢 RESOLVED | [COH-824](#detail-coh-824) | INCO | Source incoherence | CLI | CLI | Global | MCP Tool Suite duplication resolved (US-CLI-010 Phase 5, US-CLI-011 Phase 7). | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 97 | 🟢 RESOLVED | [COH-910](#detail-coh-910) | INCO | Source incoherence | CLI | CLI | US-CLI-001 | `--format=json` adopted across all CLI stories per Core ADR 0073. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 98 | 🟢 RESOLVED | [COH-911](#detail-coh-911) | INCO | Source incoherence | CLI | CLI | US-CLI-009 | Title aligned: "MCP Server Bootstrap" in both story and README. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 99 | 🟢 RESOLVED | [COH-912](#detail-coh-912) | INCO | Source incoherence | CLI | CLI | US-CLI-003 | Context flag `--initiative` standardized across CLI stories. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 100 | 🟢 RESOLVED | [COH-913](#detail-coh-913) | GAP | Missing capability / corrective gap | CLI | CLI | Global | Offline-aware CLI story created (US-CLI-012) — queue, sync, conflict resolution. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 101 | 🟢 RESOLVED | [GAP-001](#detail-gap-001) | GAP | Missing capability / corrective gap | Docs | Docs | N/A | README.es.md Missing | Created README.es.md | 🟢 LOW | 🟢 LOW | +| 102 | 🟢 RESOLVED | [GAP-012](#detail-gap-012) | Docs | Documentation gap | Docs | Docs | N/A | MASTER_INDEX.md Carece de Cabecera de Navegación Bilingüe | Added bilingual nav header to MASTER_INDEX.md | 🟢 LOW | 🟢 LOW | +| 103 | 🟢 RESOLVED | [GAP-014](#detail-gap-014) | Docs | Documentation gap | Docs | Docs | N/A | Harness ADR-0002 Applies to .NET Only | Added .NET scope note to ADR-0002 | 🟢 LOW | 🟢 LOW | +| 104 | 🟢 RESOLVED | [GAP-018](#detail-gap-018) | Docs | Documentation gap | Docs | Docs | N/A | TAD Internal Links Broken | Fixed TAD internal links | 🟢 LOW | 🟢 LOW | +| 105 | 🟢 RESOLVED | [GAP-024](#detail-gap-024) | Docs | Documentation gap | Docs | Docs | N/A | No Observability Dashboard or Alert Specification | Created `reference/specs/infrastructure/tracker-observability-spec.md` | 🟢 LOW | 🟢 LOW | +| 106 | 🟢 RESOLVED | [COH-908](#detail-coh-908) | GAP | Missing capability / corrective gap | Infra | Infra | N/A | Secrets management story created (US-INF-010) — Vault + Docker/Helm injection. | Resolved; evidence captured in the description. | 🟢 LOW | 🟢 LOW | +| 107 | 🟢 RESOLVED | [GAP-008](#detail-gap-008) | GAP | Missing capability / corrective gap | Infra | Infra | N/A | Transactional Outbox Uses Prisma in TypeORM Project | Fixed OutboxProcessor to use TypeORM | 🟢 LOW | 🟢 LOW | +| 108 | 🟢 RESOLVED | [GAP-004](#detail-gap-004) | GAP | Missing capability / corrective gap | API | N/A | N/A | 3 dependencias upstream bloqueadas (Core API, UMS JWKS, UMS Auth Graph) | Resolved via Defensive Isolation (Mocks). | 🔴 CRITICAL | 🔴 HIGH | @@ -412,7 +413,7 @@ This document is the only operational gap register in this repository. The maste ### Detail GAP-020 -- **Status:** 🟢 RESOLVED +- **Status:** 🟡 OPEN - **Type:** Docs (Documentation gap) - **Component:** Docs - **Module:** Docs @@ -449,7 +450,7 @@ This document is the only operational gap register in this repository. The maste ### Detail GAP-023 -- **Status:** 🟡 OPEN +- **Status:** 🟢 RESOLVED - **Type:** Docs (Documentation gap) - **Component:** Docs - **Module:** Docs @@ -465,7 +466,7 @@ This document is the only operational gap register in this repository. The maste ### Detail GAP-025 -- **Status:** 🟡 OPEN +- **Status:** 🟢 RESOLVED - **Type:** Docs (Documentation gap) - **Component:** Docs - **Module:** Docs @@ -493,6 +494,22 @@ This document is the only operational gap register in this repository. The maste [Back to master register](#master-register) + + +### Detail COH-016 + +- **Status:** 🟢 RESOLVED +- **Type:** INCO (Source incoherence) +- **Component:** Docs +- **Module:** Docs +- **Story(ies):** N/A +- **Criticality:** 🟡 MEDIUM +- **Complexity:** 🟢 LOW +- **Description:** Three gap surfaces share one id namespace; the coherence guard covered only two of them. +- **Next Step:** None — `check-gap-registry.py` now contrasts the register too, with self-tests in CI. + +[Back to master register](#master-register) + ### Detail COH-012