Visión general

licit es una herramienta CLI standalone que analiza proyectos de desarrollo asistido por IA para evaluar su compliance regulatorio. Opera de forma local (filesystem-first), sin requerir servicios externos ni bases de datos.

licit (CLI)
├── config/          Esquema Pydantic v2 + loader YAML
├── core/            Modelos de dominio + detección + evidencia
├── logging/         structlog configuración
├── provenance/      Trazabilidad de código (Fase 2 — COMPLETADA)
├── changelog/       Registro de cambios en configs de agentes (Fase 3)
├── frameworks/      Evaluadores regulatorios (Fases 4-5)
│   ├── eu_ai_act/   EU AI Act
│   └── owasp_agentic/  OWASP Agentic Top 10
├── connectors/      Integraciones opcionales (Fase 7)
└── reports/         Generación de reportes (Fase 6)

Stack tecnológico

ComponenteTecnologíaJustificación
CLIClick 8.1+Composición de comandos, tipos, ayuda automática
Validación de configPydantic v2Validación estricta, serialización YAML/JSON
Modelos de dominiodataclassesLigeros, sin dependencias, tipado nativo
EnumsStrEnum (Python 3.12)Serialización directa a string, compatible con ruff UP042
LoggingstructlogLogging estructurado, procesadores componibles
ConfigPyYAMLEstándar de facto para config en YAML
TemplatesJinja2Generación de reportes Markdown/HTML
CryptocryptographyHMAC-SHA256 para firmas de provenance

Principios de diseño

  1. Filesystem-first: Toda la data se almacena en .licit/ dentro del proyecto. No hay bases de datos, APIs ni servicios remotos.

  2. Dataclasses para dominio, Pydantic para config: Los modelos de dominio (ProvenanceRecord, ControlResult, etc.) son dataclasses puros. Solo la configuración (LicitConfig) usa Pydantic v2.

  3. Protocol para interfaces: Las abstracciones entre módulos usan typing.Protocol, no herencia con clases abstractas.

  4. Lazy imports: Los comandos de fases futuras usan imports lazy con try/except ImportError para que el CLI funcione sin los módulos aún no implementados.

  5. Detección automática: ProjectDetector infiere lenguajes, frameworks, CI/CD, herramientas de seguridad y configuraciones de agentes IA sin necesidad de configuración manual.

Flujo de datos

Proyecto del usuario

       ├──────────────────────────────────────┐
       ▼                                      ▼
┌─────────────────┐                  ┌──────────────────┐
│ ProjectDetector  │                  │ProvenanceTracker  │
│                  │                  │                    │
│ Detecta lenguajes│                  │ ┌──────────────┐  │
│ frameworks, CI/CD│                  │ │ GitAnalyzer   │  │ ← git log
│ agentes          │                  │ │  + Heuristics │  │
└────────┬────────┘                  │ └──────┬───────┘  │
         │ ProjectContext             │        │          │
         ▼                           │ ┌──────────────┐  │
┌─────────────────┐                  │ │SessionReaders │  │ ← ~/.claude/
│EvidenceCollector │                  │ └──────┬───────┘  │
│                  │                  │        │          │
│ .licit/, configs │                  │ ┌──────────────┐  │
│ SARIF, architect │                  │ │  Attestor    │  │ ← HMAC sign
└────────┬────────┘                  │ └──────┬───────┘  │
         │ EvidenceBundle             │        │          │
         ▼                           │ ┌──────────────┐  │
┌─────────────────┐                  │ │    Store     │  │ → provenance.jsonl
│   Evaluadores   │ ← Fases 4-5     │ └──────────────┘  │
└────────┬────────┘                  └──────────┬───────┘
         │ ControlResult[]                      │
         ▼                                      ▼
┌─────────────────┐                  ┌──────────────────┐
│   Reportes      │ ← Fase 6        │ Provenance Report │
└─────────────────┘                  └──────────────────┘

Módulos implementados (Fases 1-2)

config/ — Configuración

core/ — Núcleo

logging/ — Logging

provenance/ — Trazabilidad de código

cli.py — Interfaz de línea de comandos

10 comandos registrados con Click. Cuatro funcionales: init, status, connect, trace. Los demás tienen firmas completas y help text, pero sus imports son lazy para módulos de fases futuras.

Fases de implementación

FaseMóduloEstadoDescripción
1FoundationCOMPLETADAConfig, modelos, detección, evidencia, CLI, logging
2ProvenanceCOMPLETADAgit_analyzer, heuristics, store JSONL, HMAC, attestation, session readers, report
3ChangelogPendienteWatcher de configs de agentes, differ, clasificador
4EU AI ActPendienteEvaluador, FRIA interactivo, Annex IV
5OWASPPendienteEvaluador OWASP Agentic Top 10
6ReportsPendienteReporte unificado, gap analyzer, Markdown/JSON/HTML
7ConnectorsPendienteIntegración con architect y vigil

Grafo de dependencias

Phase 1: config ← core/models
         core/project (independiente)
         core/evidence ← config + core/models + (provenance.store opcional)
         cli ← config + core/* + logging

Phase 2: provenance ← core/models + config (COMPLETADA)
         provenance/heuristics (independiente)
         provenance/git_analyzer ← heuristics + core/models
         provenance/store ← core/models
         provenance/attestation (independiente)
         provenance/session_readers ← core/models
         provenance/tracker ← git_analyzer + session_readers + attestation + store + config
         provenance/report ← core/models
Phase 3: changelog ← core/models + config
Phase 4: frameworks/eu_ai_act ← core/* + evidence
Phase 5: frameworks/owasp ← core/* + evidence
Phase 6: reports ← frameworks/* + evidence + core/models
Phase 7: connectors ← config (independiente)

Estructura de directorios del proyecto

licit-cli/
├── pyproject.toml              # Metadata, deps, herramientas
├── LICENSE                     # MIT
├── README.md                   # README en inglés
├── CHANGELOG.md                # Changelog en inglés
├── SECURITY.md                 # Política de seguridad
├── SEGUIMIENTO-V0.md           # Seguimiento de implementación (español)
├── docs/                       # Esta documentación
├── src/
│   └── licit/
│       ├── __init__.py         # __version__
│       ├── __main__.py         # python -m licit
│       ├── py.typed            # PEP 561
│       ├── cli.py              # Click CLI
│       ├── config/
│       │   ├── schema.py       # Modelos Pydantic
│       │   ├── loader.py       # Carga/guardado YAML
│       │   └── defaults.py     # Constantes
│       ├── core/
│       │   ├── models.py       # Dataclasses + enums
│       │   ├── project.py      # ProjectDetector
│       │   └── evidence.py     # EvidenceCollector
│       ├── logging/
│       │   └── setup.py        # structlog config
│       ├── provenance/         # Fase 2 (COMPLETADA)
│       │   ├── heuristics.py   # 6 heurísticas de detección AI
│       │   ├── git_analyzer.py # Análisis de git history
│       │   ├── store.py        # Store JSONL append-only
│       │   ├── attestation.py  # HMAC-SHA256 + Merkle tree
│       │   ├── tracker.py      # Orquestador
│       │   ├── report.py       # Generador de reportes Markdown
│       │   └── session_readers/
│       │       ├── base.py     # Protocol SessionReader
│       │       └── claude_code.py  # Reader Claude Code JSONL
│       ├── changelog/          # (Fase 3)
│       ├── frameworks/         # (Fases 4-5)
│       ├── connectors/         # (Fase 7)
│       └── reports/            # (Fase 6)
└── tests/
    ├── conftest.py             # Fixtures compartidos
    ├── test_cli.py             # Tests de CLI (13)
    ├── test_qa_edge_cases.py   # Tests QA Phase 1 (61)
    ├── test_config/
    │   ├── test_schema.py      # Tests de schema (7)
    │   └── test_loader.py      # Tests de loader (9)
    ├── test_core/
    │   ├── test_project.py     # Tests de detección (12)
    │   └── test_evidence.py    # Tests de evidencia (11)
    └── test_provenance/
        ├── test_heuristics.py      # Tests heurísticas (23)
        ├── test_git_analyzer.py    # Tests git analyzer (15)
        ├── test_store.py           # Tests store JSONL (15)
        ├── test_attestation.py     # Tests attestation (13)
        ├── test_tracker.py         # Tests tracker (7)
        ├── test_session_reader.py  # Tests session reader (13)
        ├── test_qa_edge_cases.py   # Tests QA Phase 2 (81)
        └── fixtures/               # Datos de test