feat(infra): auto-commit con 88 cambios

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-11 00:16:46 +02:00
parent 6bc97df5c0
commit eb8dbf66a1
126 changed files with 10933 additions and 287 deletions
@@ -0,0 +1,64 @@
---
name: update_obsidian_note
kind: function
lang: py
domain: obsidian
version: "1.0.0"
purity: impure
signature: "def update_obsidian_note(path: str, body: str = None, set_frontmatter: dict = None, append: str = None) -> str"
description: "Actualiza una nota Markdown de Obsidian existente. Lee el estado actual con parse_obsidian_frontmatter, hace merge de claves del frontmatter (set_frontmatter), reemplaza el body (body) o concatena texto al final (append), y reescribe con la funcion pura format_obsidian_note. No depende de la app GUI de Obsidian: solo lee y reescribe el archivo .md plano."
tags: [obsidian, markdown, frontmatter, update, write, notes]
uses_functions: ["parse_obsidian_frontmatter_py_obsidian", "format_obsidian_note_py_obsidian"]
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: ["os"]
params:
- name: path
desc: "ruta al archivo .md de la nota a actualizar"
- name: body
desc: "si no es None, reemplaza por completo el cuerpo de la nota"
- name: set_frontmatter
desc: "dict que se mergea (update de claves) sobre el frontmatter actual; las no mencionadas se conservan"
- name: append
desc: "texto que se concatena al final del cuerpo (separado por salto de linea); se aplica despues de body"
output: "la ruta (str) del archivo actualizado"
tested: true
tests:
- "merge frontmatter conserva claves previas"
- "reemplazo de body"
- "append concatena al final"
- "body y append combinados"
- "nota inexistente lanza filenotfounderror"
- "directorio lanza isadirectoryerror"
test_file_path: "python/functions/obsidian/update_obsidian_note_test.py"
file_path: "python/functions/obsidian/update_obsidian_note.py"
---
## Ejemplo
```python
import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from obsidian import update_obsidian_note
# Marcar como hecha y anadir una linea de log al final
update_obsidian_note(
"/home/me/vault/Tareas/Revisar PR.md",
set_frontmatter={"status": "done", "closed": "2026-06-09"},
append="- Cerrada tras revisar [[PR 42]].",
)
```
## Cuando usarla
Cuando necesites modificar una nota existente sin reescribirla entera: cambiar campos del frontmatter (status, fechas, tags), reemplazar el cuerpo, o ir anadiendo entradas a un log/diario al final. El merge de `set_frontmatter` permite tocar solo las claves que cambian sin perder el resto.
## Gotchas
- **Lee y reescribe en disco** (I/O impuro): sobreescribe el archivo completo con el contenido reserializado por `format_obsidian_note`. El formato/orden del frontmatter puede normalizarse respecto al original escrito a mano.
- **No respeta locks de la app GUI**: si Obsidian tiene la nota abierta con cambios sin guardar, esos cambios en memoria se perderan cuando esta funcion reescriba el archivo (la app puede recargarlo o sobreescribirlo de vuelta). Cierra/guarda en Obsidian antes de editar desde codigo.
- `set_frontmatter` hace **merge superficial** (`dict.update`): claves nuevas se anaden, existentes se reemplazan, las demas se conservan. No borra claves.
- `append` se aplica **despues** de un eventual reemplazo de `body`, garantizando un salto de linea de separacion.
- Lanza `FileNotFoundError` si la nota no existe (no la crea — usa `create_obsidian_note` para eso).