Volver a la wiki

Tabla D1: bib_cochanges — Registro de pares de archivos co-cambiados

Descripción

Tabla D1 (Cloudflare) que registra pares de archivos que cambian juntos en el repositorio, alimentando la señal de co-cambio de bib_impact_query.

Creada en migración 0043 (PR#100, cherry-pick Cairn #2).


Schema

CREATE TABLE bib_cochanges (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    repo TEXT NOT NULL DEFAULT 'CreaRack-Pro',
    file_a TEXT NOT NULL,
    file_b TEXT NOT NULL,
    count INTEGER NOT NULL DEFAULT 1,
    last_seen TEXT NOT NULL DEFAULT (datetime('now')),
    UNIQUE (repo, file_a, file_b)
);

CREATE INDEX idx_bib_cochanges_file_a ON bib_cochanges(file_a);
CREATE INDEX idx_bib_cochanges_file_b ON bib_cochanges(file_b);

Columnas

ColumnaTipoDescripción
idINTEGER PKIdentificador único auto-incrementado.
repoTEXTRepositorio: 'CreaRack-Pro' o 'CreaRackSL-workspace'. Default: 'CreaRack-Pro'.
file_aTEXTPrimera parte del par, ordenada lexicográficamente: file_a < file_b.
file_bTEXTSegunda parte del par.
countINTEGERNúmero de commits/merges donde cambiaron juntos. Aditivo (UPSERT suma).
last_seenTEXTTimestamp (ISO 8601 / SQLite datetime) del último cambio conjunto.

Índices y constraints


Populating

Backfill (one-shot)

Invocado manualmente desde CreaRack-Pro/scripts/bib_cochange_backfill.py:

Resultado esperado: ~1500+ pares con count ≥ 2 (acoplamiento real documentado múltiples veces).

Post-merge ingest (continuo)

En .github/scripts/bib_ingest.py, función record_cochanges():


Consultas

Cochanges de un archivo específico

SELECT 
    CASE WHEN file_a = ? THEN file_b ELSE file_a END AS cochange_file,
    count,
    last_seen
FROM bib_cochanges
WHERE (file_a = ? OR file_b = ?) AND count >= ?
ORDER BY count DESC, last_seen DESC
LIMIT 15;

Parámetros: file_path, file_path, file_path, min_count (default 2).

Esta es la consulta que usa bib_impact_query cuando se pasa file_path.


Criterios de inclusión / exclusión

Los archivos registrados son solo de código (para mantener la señal limpia):

Incluidos:

Excluidos:


Anti-ruido

Topes:

Resultado: señal limpia, acoplamiento real documentado (típicamente count ≥ 2 indica genuina co-evolución).


Integridad


Mantenimiento

Limpieza (si es necesario)

Borrar pares antiguos o con count muy bajo:

DELETE FROM bib_cochanges
WHERE last_seen < datetime('now', '-1 year')
   OR count < 2;

(Actualmente sin limpieza automática; la tabla es append-only + UPSERT.)

Estadísticas

SELECT 
    COUNT(*) AS total_pairs,
    AVG(count) AS avg_frequency,
    MAX(count) AS max_frequency,
    COUNT(DISTINCT repo) AS repos
FROM bib_cochanges;

Backfill esperado: ~1561 pares con count ≥ 2.


Véase también

Subir