Commit Graph

8 Commits

Author SHA1 Message Date
egutierrez cb7f6e92a0 chore: auto-commit (3 archivos)
- project.md
- reports/
- tools/import_google_contacts.py

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-13 21:56:57 +02:00
egutierrez ec9b70a72a feat(tools): import_contacts_vcf — backfill de import_key + enriquecimiento idempotente desde .vcf
Backfill de la clave de importacion (contact_import_key del registry) de los
contactos existentes + enriquecimiento aditivo desde un .vcf de Google
(telefonos/emails faltantes en contacts, direcciones en la persona enlazada).
Match por import_key con fallback por telefono. No destructivo: solo INSERT/UPDATE,
con assert de conteo intacto. Recupero los campos que el import original descarto.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-13 11:48:03 +02:00
egutierrez d98127115b test(davx5): script reproducible de verificación DAVx5 ↔ Xandikos
12 checks: auth requerida (401 sin/con credencial mala), TLS Let's Encrypt + no-cleartext,
recepción de los 1065 contactos via PROPFIND+REPORT, integridad TEL/EMAIL de un contacto
conocido. Lee la credencial de pass en runtime (sin secretos hardcodeados). Validado en
emulador Pixel_API34 con DAVx5 4.5.14: recibió los 1065 contactos.
2026-06-13 01:24:36 +02:00
egutierrez db05c58893 docs(duckdb): inversión completada — DuckDB como fuente de verdad
Documenta la inversión implementada el 13/06/2026: ingest selectivo anti-pisado,
multi-valor en persons (634 fichas migradas), libretas (addressbooks), endpoints de
escritura estructurada, consumo desde osint_web tras el flag OSINT_DB_BACKEND (ON), las 5
funciones nuevas del registry, el runbook anti doble-verdad y el runtime systemd
(osint-db.service, Restart=always).
2026-06-13 00:57:14 +02:00
egutierrez fe280ec8ac feat(tools): sync bidireccional vault OSINT <-> Xandikos CardDAV
- sync_dav_to_osint.py (NUEVO): reverse sync Xandikos->vault. Trae contactos
  nuevos del movil (contexto: movil, dedup por tel/email) y ediciones de agenda
  (nombre/tel/email/aliases) PRESERVANDO la capa OSINT (relaciones/dni/contexto/
  fuente/tags). Estado persistente .sync_state.json (UID->etag/vault_mtime).
  Reconciliacion por etag; --dry-run (default) / --apply.
- sync_osint_to_dav.py: anade --check (audit read-only vault<->Xandikos: fichas
  sin vCard, vCards huerfanos, agendas divergentes) y optimiza build_existing_index
  con dav_get_collection (1 REPORT, ~9s->~0.5s) en vez del patron N+1.

Usa las funciones del registry: dav_get_collection, dav_delete_resource,
carddav_put_vcard, obsidian CRUD, pass_get_secret.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 00:30:27 +02:00
egutierrez f771c9b883 chore: auto-commit (6 archivos)
- CONVENTIONS.md
- tools/dedup_persons.py
- tools/extract_entities.py
- tools/migrate_external_orgs.py
- tools/normalize_person_frontmatter.py
- tools/person_datapoints.py

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-11 00:16:47 +02:00
fn-registry agent 186ce83856 docs: set repo_url in project.md 2026-06-10 11:45:05 +02:00
fn-registry agent 7c475be581 chore: sync from fn-registry agent 2026-06-10 11:43:45 +02:00