feat(motor): agregar version fijable en build y clusterlog bootstrap-instance

Primer paso hacia separar el motor (herramienta genérica) de cada
instancia (contenido de un deployment): Version deja de ser const para
poder inyectarse con -ldflags en `make build` (git describe, sin tags
aún), y el comando nuevo bootstrap-instance genera el esqueleto mínimo
de una instancia (zola.toml, content/<sección>/_index.md, admins.json
vacío, .clusterlog-version) reusando saveAdmins() en vez de duplicar su
formato. Documentado en CLI.md; el empaquetado de templates/tema y el
CI de instancia quedan para cuando el motor publique releases.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-27 00:06:49 -06:00
co-authored by Claude Sonnet 5
parent c06037fa3b
commit 4afb85bb9e
16 changed files with 545 additions and 2 deletions
@@ -0,0 +1,51 @@
# {{TITLE}}
Este repositorio es una **instancia de clusterlog**: contiene el contenido,
los datos y la configuración de un deployment concreto, no el código del
motor. Se generó con:
```bash
clusterlog bootstrap-instance --output . --product-name "{{PRODUCT_NAME}}"
```
## Qué hay aquí
- `content/` — documentación, manuales, memorias, proyectos y tareas de esta
instancia. Empieza con las seis secciones vacías (`_index.md` únicamente).
- `data/admins.json`, `config/allowed_signers` — registro de administradores,
vacío hasta el primer `admin add`.
- `zola.toml` — configuración de este deployment (`base_url`, nombre del
producto). Cámbiela antes de publicar.
- `.clusterlog-version` — versión del motor `clusterlog` usada para generar
este esqueleto. Manténgala sincronizada con el binario que use su CI.
## Primeros pasos
1. Cambie `base_url` en `zola.toml` por el dominio real de este deployment.
2. Registre al primer administrador (recibe `owner` automáticamente):
```bash
clusterlog --root . --ssh-key ~/.ssh/id_ed25519.pub admin add \
--id ana --name "Ana Torres" --email ana@example.org \
--key ~/.ssh/id_ed25519.pub --roles owner,admin
```
3. Inicialice Git y firme el primer commit (vea la sección "Registrar al
primer administrador" en la documentación del motor para el detalle
completo de `git config`/`commit -S`).
4. Genere la proyección y valide:
```bash
clusterlog --root . sync
clusterlog --root . validate --skip-zola
```
## Pendiente (no incluido por este comando)
- Plantillas Tera y el tema `zola.386`: todavía se obtienen desde un checkout
del repositorio del motor (`make theme` / `scripts/bootstrap-theme.sh`).
Empaquetarlos en un release descargable del motor es trabajo de una fase
posterior.
- Un workflow de CI para esta instancia (que descargue el binario del motor
por versión fijada) no se generó todavía: el motor aún no publica releases
binarios. Se agrega en cuanto exista ese release.
@@ -0,0 +1,9 @@
+++
title = "Documentación"
description = "Arquitectura, decisiones, inventarios, políticas y explicaciones técnicas duraderas."
sort_by = "weight"
template = "section.html"
page_template = "page.html"
+++
Aquí vive el conocimiento descriptivo del clúster: el **qué**, el **por qué** y las relaciones entre componentes.
@@ -0,0 +1,9 @@
+++
title = "Manuales"
description = "Runbooks y procedimientos operativos verificables, con prerrequisitos, pasos y reversión."
sort_by = "weight"
template = "section.html"
page_template = "page.html"
+++
Los manuales deben ser ejecutables por una persona distinta de quien los escribió y declarar claramente sus condiciones de seguridad.
@@ -0,0 +1,10 @@
+++
title = "Memorias"
description = "Historia cronológica y auditable de intervenciones, cambios, incidentes y correcciones."
sort_by = "date"
template = "memories.html"
page_template = "memory.html"
generate_feeds = true
+++
Cada entrada describe una sesión de trabajo o una unidad de cambio. Las entradas sujetas a revisión aparecen también en **Revisión semanal**.
@@ -0,0 +1,9 @@
+++
title = "Proyectos"
description = "Objetivos compartidos, alcance, responsables, hitos y criterios de éxito."
sort_by = "date"
template = "projects.html"
page_template = "project.html"
+++
Los proyectos dan contexto a las tareas y permiten explicar por qué existe cada línea de trabajo.
@@ -0,0 +1,8 @@
+++
title = "Revisión semanal"
description = "Memorias que aún requieren confirmación de uno o más administradores."
template = "review.html"
in_search_index = false
+++
Esta página es la agenda operativa de la reunión semanal. Una memoria desaparece cuando todos los revisores requeridos han registrado su revisión para el hash actual del contenido.
@@ -0,0 +1,9 @@
+++
title = "Tareas"
description = "Trabajo visible para el equipo, con prioridad, estimación, fecha objetivo y tiempo acumulado."
sort_by = "date"
template = "tasks.html"
page_template = "task.html"
+++
El estado actual y el tiempo real se calculan a partir de eventos anexables; la definición original de la tarea permanece legible en Markdown.
@@ -0,0 +1,5 @@
/public/
/bin/
/themes/zola.386/
.DS_Store
*.tmp
@@ -0,0 +1,53 @@
base_url = "{{BASE_URL}}"
title = "{{TITLE}}"
description = "Documentación, manuales, memorias de cambio, proyectos y tareas del equipo de soporte."
default_language = "es"
theme = "zola.386"
output_dir = "public"
compile_sass = true
minify_html = true
generate_feeds = true
feed_filenames = ["atom.xml", "rss.xml"]
build_search_index = true
generate_sitemap = true
generate_robots_txt = false
taxonomies = [
{ name = "categories" },
{ name = "tags", feed = true },
{ name = "systems" },
]
[markdown]
external_links_target_blank = true
external_links_no_referrer = true
smart_punctuation = true
github_alerts = true
insert_anchor_links = "right"
[markdown.highlighting]
error_on_missing_language = false
style = "inline"
theme = "vitesse-black"
[search]
include_title = true
include_description = true
include_date = true
include_path = true
include_content = true
truncate_content_length = 12000
index_format = "elasticlunr_json"
[slugify]
paths = "on"
taxonomies = "on"
anchors = "on"
paths_keep_dates = false
[extra]
product_name = "{{PRODUCT_NAME}}"
product_short_name = "clusterlog"
repository_label = "Repositorio interno"
review_meeting_label = "Revisión semanal"
footer_text = "Fuente auditable: Markdown + eventos JSON + Git"