fix(events): envolver VEVENT en VCALENDAR al push (Xandikos 500) + INSERT explicito en contacts (columna import_key)

El raw de un evento guardaba solo BEGIN:VEVENT...END:VEVENT; subirlo a CalDAV
genera un .ics invalido que rompe Xandikos (assert isinstance(cal, Calendar) ->
500 en todo el calendario). _ensure_vcalendar lo envuelve en el push. Ademas, la
columna import_key (migracion 004) rompia los INSERT posicionales de contacts:
ahora son explicitos por columna y el ingest puebla import_key con la funcion del
registry. Tests actualizados (4 derivadas, INSERT explicito).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-13 12:15:27 +02:00
parent 36c4e06779
commit d53d7a9a7e
4 changed files with 49 additions and 9 deletions
+7
View File
@@ -123,6 +123,12 @@ duckdb_upsert = _load_registry_fn("infra", "duckdb_upsert", "duckdb_upsert")
# Composición del vCard multi-valor (DB -> Xandikos), puro.
build_vcard = _load_registry_fn("core", "build_vcard", "build_vcard")
# Clave de importación determinística (tel > email > nombre) para imports
# idempotentes de contactos. Pura.
contact_import_key = _load_registry_fn(
"core", "contact_import_key", "contact_import_key"
)
# Render de tablas Markdown + bloques sentinel idempotentes para las notas.
render_markdown_table = _load_registry_fn(
"core", "render_markdown_table", "render_markdown_table"
@@ -153,6 +159,7 @@ __all__ = [
"duckdb_execute",
"duckdb_upsert",
"build_vcard",
"contact_import_key",
"render_markdown_table",
"upsert_sentinel_block",
]