Eje 5: Procedimientos
Onboarding para PYMES
La entrada de las PYMES en el cumplimiento nativo de Git sigue una ruta paso a paso:
- Inicializar el repositorio Git: estructura con directorio
.gitcover/, configuración de V7GUID - Seleccionar catálogo OSCAL: línea base GoBD, módulos BSI o perfil individual
- Activar políticas OPA: hooks pre-receive para validación antes del commit
- Configurar firma GPG: un par de claves GPG por actor
- Iniciar la cadena de justificantes: asignar los primeros V7GUID, comenzar el encadenamiento prev-hash
Para emprendedores desde el nivel de actividad secundaria
La entrada puede comenzar con una historia muy sencilla: GCDMS para archivado de justificantes, GCPN para cadenas de prueba. Ampliar más adelante: políticas OSCAL, validación OPA, multiinquilino.
Onboarding interactivo: la «Compliance City»
En lugar de cuestionarios clásicos, el onboarding se realiza como una construcción modular siguiendo el concepto de una ciudad sobre una placa base de Lego. Cada decisión arquitectónica y cada requisito funcional corresponde a una pieza o a un conjunto (Lego-Set), que se deposita como módulo estructurado en el repositorio Git por defecto recién inicializado y se versiona.
La analogía para el usuario:
- La placa base: el repositorio Git vacío, recién creado para el inquilino en su infraestructura. Ofrece el marco normalizado (las clavijas) sobre el que todo se conecta.
- Las piezas: configuración modular y archivos de servicio. Solo cuando una pieza encaja (commit de Git) se activa la función o comprobación de cumplimiento correspondiente.
Fase 1: colocar la placa base (inicialización e identidad):
El sistema crea automáticamente el repositorio por defecto para el inquilino. El asistente de onboarding determina la identidad de la empresa. Los datos se depositan estructurados en el repositorio 'TOP' (Tenant Organization Profile): el primer commit de Git ya es el primer proceso de cumplimiento auditable. Por cierto: los inquilinos también pueden organizarse jerárquicamente, como las estructuras empresariales a las que pertenecen.
| Pieza | Equivalencia técnica | Finalidad |
|---|---|---|
| Placa base | git init --object-format=sha256 |
Base de todas las actividades del inquilino en el repositorio Git 'TOP' y directorio |
| Ayuntamiento | ./.gitcover |
Directorio de puntos de GitCover, donde se encuentran los diccionarios y configuraciones del inquilino |
Fase 2: cableado de infraestructura (red de suministro):
El asistente registra el panorama de TI: puesto de trabajo portátil, servidor de archivos, infraestructura cloud-first o híbrida. Parámetros como conexión a Internet, dominio, rutas de almacenamiento, etc., se incorporan a la información de infraestructura y preparan las rutas para conexiones cruzadas (others.json).
Fase 3: erigir edificios (alcance funcional):
El usuario decide de forma modular qué áreas regulatorias debe asegurar su ciudad:
| Pieza | Alcance | Acción |
|---|---|---|
| Plaza del mercado (base GoBD/AO) | Obligatorio para toda PYME: documentación de procedimientos | p. ej., se activa el módulo y la carpeta /compliance/gobd/ |
| Banco y caja (contabilidad financiera) | Llevanza de libros diarios, libros mayores, interfaces bancarias | p. ej., se activa el módulo y la carpeta /finance/journal/ y /finance/ledgers/ |
| Puerta del taller (seguridad/NIS2) | Seguridad de TI ampliada opcional y obligaciones de notificación | p. ej., se activa el módulo y la carpeta /compliance/nis2/ |
El usuario no ve en ningún momento archivos de configuración ni código. Como cada paso genera de inmediato un commit limpio de Git, el sistema queda documentado desde el primer minuto de forma totalmente segura para revisión según GoBD y AO.
Aislamiento de inquilinos y control de acceso
Claims OIDC y others.json
La vinculación de claims OIDC con others.json es la vía regia para entornos de cumplimiento multiinquilino y seguros para personas no técnicas. En others.json se reúnen:
- Rutas canónicas a los repositorios Git propios del inquilino
- Conexiones cruzadas a repositorios Git de otros inquilinos, si el inquilino es miembro de un grupo
El acceso se controla mediante claims OIDC (roles y claims personalizados como tenant_id, org_unit_id y pertenencias a grupos). Una pipeline de entrada lee others.json según el claim del usuario e inyecta las rutas permitidas como prompt de sistema:
Eres el agente GitCover para el inquilino X. Solo tienes acceso a los siguientes repositorios: [Ruta 1], [Ruta 2]. No ejecutes comandos fuera de estos directorios.
Modelo de claims de dos niveles para acceso a PII
Para el acceso a datos personales (PII), el GCBoK define una jerarquía de claims con dos niveles (véase Técnicas: Git como IdP:
| Claim | Nivel | Finalidad | Ejemplo |
|---|---|---|---|
tenant_id |
1. Legal | Entidad jurídica (responsable del RGPD/DSGVO) | 0197a3b2-f3c0-7b00-8001-000000000042 (ORG-1) |
org_unit_id |
2. Organizativo | PMO / División / Departamento / Ubicación (≈ OU de AD) | ORG-1-Portfolio, ORG-2-IT |
others.json asigna estos claims a rutas de repositorio:
{
"tenant_id": "0197a3b2-f3c0-7b00-8001-000000000042",
"org_unit_id": "ORG-1-Portfolio",
"allowed_repos": [
"TOP",
"PII/ORG-1-Portfolio"
]
}
Un usuario con org_unit_id = ORG-1-Portfolio obtiene acceso a PII/ORG-1-Portfolio, pero no a PII/ORG-2-IT, incluso con el mismo tenant_id. Esto aplica el principio de mínimo privilegio (NIS2 Art. 21) a nivel de repositorio.
Para el usuario final, este aparato de seguridad permanece invisible. Inicia sesión, ve su entorno de trabajo habitual y la IA sabe automáticamente dónde puede actuar.
Captura de datos asistida por IA mediante puente de formularios
Las interfaces de chat son adecuadas para contextos y análisis, no para la captura estricta de tipos de datos (IBAN, códigos postales, esquemas OSCAL). Por ello, el GCBoK recomienda un puente de formularios:
- La IA detecta la necesidad: el usuario dice «Quiero añadir una nueva sucursal».
- URL dinámica del formulario: la IA emite un enlace a una máscara de entrada web validada (Blazor WASM/PWA), vinculada a la gestión de sesiones y usuarios.
- Entrada encapsulada: el usuario rellena el formulario, validado de forma estricta antes de guardarse.
- Escritura directa en Git: el formulario escribe el resultado como archivo estructurado directamente en el directorio de trabajo del repositorio del inquilino y activa el commit.
- La IA retoma el control: el servidor MCP informa «Archivo actualizado» y la IA lo confirma en el chat.
Ventaja: la validación antes del almacenamiento protege la única fuente de verdad. Los LLM no manipulan el proceso de escritura. La validación mediante Git-Hook/OPA se activa de inmediato.
La estructura de directorios .gitcover/
El directorio .gitcover/ en la raíz de un repositorio GitCover es el archivo central para todos los artefactos que no son código. Sirve a la seguridad de revisión, al cumplimiento (GoBD/AO) y a la gestión del rastro de auditoría.
Disposición de directorios
.gitcover/
├── issues/ # Gitea-Issues als .gc.md
├── projects/ # Projekt-Management-Daten
├── time_tracking/ # Zeiterfassung und Aufwandsnachweise
├── workflows/ # Workflow-Zustände und Genehmigungen
├── compliance/
│ ├── oscals/ # OSCAL-Dokumente (System Security Plans)
│ ├── opa/ # OPA-Regeln (Rego-Policies)
│ └── hooks/ # Git-Hooks für Automatisierung
├── audit/
│ ├── signatures/ # Kryptografische Signaturen
│ ├── timestamps/ # Zeitstempel (ELSTER/Bundesanzeiger)
│ └── logs/ # Protokolle
└── README.md # Dokumentation der Struktur
Convención de nombres de archivo
Formato general: {YYMMDD}_{human-readable-key}_{Beschreibung}.gc.md
| Tipo de artefacto | Ejemplo | Justificación |
|---|---|---|
| Issue | 261029_#123_Bugfix-Login.gc.md |
Fecha para ordenación, # para identificación |
| Proyecto | 261029_Projekt-X.gc.md |
Único, ordenable temporalmente |
| Registro de tiempo | 261029_2026-06-29_Axel-D.gc.md |
Fecha y usuario en texto claro |
| Sidecar (PDF/DOCX) | Rechnung_2026.pdf.gc.md |
Metadatos del documento original |
La V7GUID y la docUid están en el artefacto de datos, no en el nombre del archivo; el nombre del archivo lleva la firma temporal {YYMMDD}.
Artefacto de datos (.gc.md)
El artefacto de datos sigue el patrón «primero legible por humanos, JSON al final» (JSON-First, sin frontmatter YAML):
{
"docUid": "018e312f-3e4f-7000-8000-000000000000",
"v7guid": "018e312f-3e4f-7000-8000-000000000000",
"key": "#123",
"type": "issue",
"title": "Bugfix: Login-Modul",
"original_source": "Gitea",
"original_repo_hash": "a1b2c3d4e5f6...",
"related_commits": ["abc123", "def456"],
"related_elements": {
"project": "Projekt-X",
"milestone": "v1.0"
},
"compliance": {
"gobd_relevant": true,
"audit_trail": true,
"signature": "GPG-Signatur-Hash",
"timestamp": "ELSTER-2026-06-29-120000"
}
}
Automatización mediante Git-Hooks y webhooks
Los repositorios GitCover se configuran automáticamente con hooks/webhooks durante init o el onboarding del inquilino:
post-commit: actualiza.gitcover/con nuevos commitspre-push: valida.gitcover/antes del push- Webhooks: creación de issues, cambios de proyecto, registro de tiempo; activan respectivamente la exportación como
.gc.md - Claim de cumplimiento: activación inmediata de mecanismos OSCAL/OPA
El versionado de estos hooks/webhooks también se realiza mediante Git, de modo que los cambios son trazables y auditables (autorreferente, versionado, seguro para revisión). Los propios hooks pueden ser artefactos de código versionados que residen en .gitcover/hooks/, se actualizan cuando es necesario y se documentan conforme a GoBD o NIS2.
Directrices privadas del HITL: convención y regla para agentes
Además de la documentación de cumplimiento versionada, cada persona que trabaja mantiene sus directrices personales, es decir, cómo quiere trabajar, delimitar y priorizar por sí misma. Esta capa es privada y protegida: permanece local y sin versionar (por lo general en un directorio excluido mediante .gitignore del propio contexto de trabajo; patrón: projections/). Por tanto, no forma parte del conjunto de documentación de cumplimiento y tampoco pertenece a repositorios con commits, issues, pull requests, informes o anuncios.
Para qué sirve: es el material de entrada de lo que se documenta: documentación de decisiones (ADR), plantillas, ponderación de iniciativas y configuración de las herramientas. Se documenta el resultado, no la valoración subyacente.
Regla para agentes (vinculante):
- Tenerlas en cuenta: las directrices configuran expectativas, tono, delimitaciones y prioridades; se leen y se cumplen.
- No documentar, no citar: ningún contenido de esta capa en texto corrido, código, documentos de decisión, justificantes, tickets, informes o anuncios, salvo que el HITL lo autorice expresamente para su documentación.
- No publicar: la capa permanece local; para ejemplos en la comunidad, OSS o material de formación se anonimiza y se describe solo como patrón.
- Límite de prueba: la cadena de justificantes versionada referencia el efecto de una directriz (por ejemplo, «asignación según las directrices del HITL»), nunca su redacción protegida.
Sidecars de GitCover (.gc.md)
Un sidecar de GitCover es un archivo de metadatos *.gc.md que se deposita junto a un documento original digital; p. ej., Rechnung_2026.pdf recibe Rechnung_2026.pdf.gc.md en el mismo directorio. El sidecar contiene los metadatos que Git no puede almacenar dentro de un archivo binario (PDF, DOCX, EML, imagen) y ancla así el original en la cadena de justificantes y en el GCDMS.
Información mínima
Cada sidecar contiene obligatoriamente:
sha256: hash SHA-256 del documento original digital (prueba de integridad).
Además, suele incluir identidad, taxonomía y ubicación (plantilla véase Eje 6: Plantillas).
Asignación de DocID
Si el documento aún no se gestiona en el DMS, se genera un nuevo DocID. El DocID es el uuidv7 puro: el identificador de instancia concreto (Object ID) del identificador dual que materializa el documento individual (cf. Eje 2: Conceptos). Por tanto, debe distinguirse de la v7guid categorizada, que codifica el contexto funcional (clase, inquilino, esfera).
El DocID se genera a partir de una marca de tiempo, de modo que está ligado al tiempo y es ordenable:
- Herramienta: una herramienta de sidecar genera un UUIDv7 a partir de un argumento TimeStamp como DocID.
- Fuente por defecto: la marca de tiempo del archivo (mtime) del documento original.
- Fuente funcional (si está disponible): si el nombre del archivo o el contenido proporciona una fecha funcionalmente significativa (p. ej., fecha de factura, de correo electrónico o de resolución), se utiliza esta en lugar del mtime; así, el DocID se vincula a la fecha de creación del documento.
Ambos identificadores —DocID (uuidv7) y v7guid categorizada— se incluyen en el sidecar y se vinculan mediante el composite_key ({v7guid}:{uuidv7}).
Relación con V7GUID y el registro
- V7GUID: el bloque
v7g_taxonomyclasifica el documento, mediante suv7guidcategorizada, en la jerarquía empresarial de seis niveles y en la esfera del inquilino (véase Eje 2: Conceptos). - Registro: el bloque
locationsdocumenta la ubicación física de almacenamiento (ruta UNC, periodo de validez). Los identificadores de inquilino registrados se gestionan en el registro central de inquilinos (Registro central de inquilinos, Eje 2).
Estructura (ejemplo)
# GitCover Sidecar - Rechnung_2026.pdf
**SHA-256:** `7d4e2f...`
**Tenant:** ORG-1
**Kategorie:** Finanzen und Buchführung
**Sphäre:** ideell
```json
{
"$schema": "https://gitcover.org/schemas/v7g-sidecar-2.0.schema.json",
"docUid": "0197a3b2-f3c0-7b00-8001-000000000042",
"sha256": "7d4e2f...",
"original_filename": "Rechnung_2026.pdf",
"locations": [
{ "unc_path": "./ORG-1/FY2026/Rechnung_2026.pdf", "from": "260506", "to": null, "note": "Primärspeicherort" }
],
"v7g_taxonomy": [
{ "v7guid": "0197a3b2-...-8001-...", "taxonomy": "ORG-1/Financial", "valid_from": "260506", "valid_to": null }
],
"verification": { "verified_by": "auto", "method": "sha256_file", "intact": true }
}
```
Archivado de issues: de la base de datos de Gitea a la base de hechos de Git
Planteamiento del problema
Los issues de Gitea son entradas de base de datos, no objetos Git nativos. No se versionan y, si se pierde la base de datos de Gitea, no se pueden reconstruir. Los commits referencian issues solo textualmente (Fixes #123); Git no interpreta esta referencia.
Solución: exportación automatizada como .gc.md
El flujo de trabajo desde la base de datos de Gitea hasta la base de hechos segura para revisión:
- Issue de Gitea creado → el webhook activa la exportación
- Exportación como .gc.md → guardado en
.gitcover/issues/ - Extraer metadatos → UUID, hashes, firmas
- Commit de Git con firma →
git commit -S - Validación OSCAL/OPA → comprobación de cumplimiento
- Marca de tiempo → integración con ELSTER/Bundesanzeiger (si es necesario)
Regla OPA de ejemplo para la validación de issues
package gcbok.compliance
violation[msg] {
input.path == "issues"
file := input.files[_]
not startswith(file.name, "018") # UUIDv7-Prüfung
msg := sprintf("Issue %s hat keine gueltige UUIDv7 im Dateinamen", [file.name])
}
Conformidad con GoBD/AO
| Requisito GoBD | Implementación en .gitcover/ |
|---|---|
| Trazabilidad | Cada cambio se registra en .gitcover/audit/logs/ |
| Inmutabilidad | Los archivos .gc.md nunca se sobrescriben, sino que se versionan |
| Obligación de conservación | 10 años (DE): .gitcover/ como archivo central |
| Función de justificante | Archivos .gc.md como justificantes digitales |
| Verificabilidad | Las firmas y marcas de tiempo permiten una validación forense |
Preparación para auditorías
Preparación para auditorías significa: cualquier auditoría puede celebrarse en cualquier momento, sin trabajo posterior.
| Requisito previo | Cumplimiento nativo de Git |
|---|---|
| Rastro de auditoría completo | Historial de Git (commit-log) |
| Identidades demostrables | Firmas GPG |
| Ordenabilidad temporal | Marcas de tiempo V7GUID |
| Pruebas legibles por máquina | OSCAL-Assessment-Results |
| Conformidad con políticas | Resultados de validación OPA |
Tesis: la forense es el repositorio Git; el HTML es solo presentación El paquete de pruebas HTML (sitio web de auditoría, informes generados) es un derivado para la legibilidad humana. La fuerza probatoria forense reside exclusivamente en el propio repositorio Git: historial de commits inmutable, commits firmados con GPG, cadenas de justificantes V7GUID, registros/diccionarios
.gitcover/en formato JSON/JSONL. En una auditoría 10 años después basta con ungit clone(o descomprimir ungit bundle): no se necesita infraestructura web, ni base de datos, ni servicios en ejecución. Esto se corresponde con el Schema-Tiering (véase Plantillas: esquema V7GUID) y el derivadogcbok-audit-evidence-docs/docs/02-audit-website-als-pruefungsartefakt.
Cierre anual GoBD
El cierre anual GoBD con cumplimiento nativo de Git:
- Cerrar el periodo: congelar la rama Git
FY2026(etiqueta) - Validar la cadena de justificantes: comprobar el encadenamiento V7GUID (script)
- Generar OSCAL-Assessment-Results: de forma automatizada a partir de validaciones OPA
- Emisión de sello GPG: commit de cierre con firma de la dirección (GF)
- Archivado: contenedor
.gc.zip,gc-dms pack
Análisis de riesgos NIS2
El análisis de riesgos NIS2 basado en Git:
- Inventario de activos: repositorios Git como registro de activos
- Identificación de riesgos: políticas OPA para escenarios de amenaza
- Evaluación: clasificación V7GUID para categorías de riesgo
- Mitigación: hooks pre-receive para la aplicación de políticas
- Informe: OSCAL-Assessment-Results como prueba NIS2
Gestión de incidentes de seguridad (Incident Response)
Principio: primero demostrar, luego evaluar. Un informe de incidente es un artefacto Git con historial de cambios; también la propia evaluación errónea debe figurar en él. La afirmación sólida nunca es «estamos seguros», sino: «Para este periodo, estos sistemas y estos niveles de log no hay indicios de explotación, con el siguiente límite de prueba».
Procedimiento en siete pasos
- Registrar y triar. ¿Qué se conoce (CVE, alerta, observación), qué sistemas y servicios están en el ámbito de impacto, qué periodo debe considerarse? Registrar el desencadenante y la marca de tiempo.
- Determinar la afectación mediante el inventario. No «usamos el producto X», sino: ¿qué SAPI, qué servicios, qué endpoints expuestos? Indicar por separado las rutas internas, los puertos solo de LAN y los sitios huérfanos.
- Aportar prueba de parche y configuración. Versión del paquete y tiempo de ejecución (reinicio del servicio), integridad de archivos, eficacia de la configuración. Para cada afirmación sobre la configuración, una contrapueba: ¿existe el archivo, crece, rota?
- Evaluar los logs en varios niveles. Un nivel nunca responde a todas las preguntas; cada uno tiene un punto ciego que debe mencionarse en el informe. Documentar el espacio de búsqueda (rutas, profundidad, ventana temporal): un resultado negativo sin espacio de búsqueda no es un hallazgo.
- Evaluar y comprobar la obligación de notificación. En caso de incidente de seguridad significativo, NIS2 Art. 23 exige una alerta temprana (24 h), una notificación (72 h) y un informe final (un mes). La decisión «sujeto a notificación / no sujeto a notificación» se fundamenta; no se toma en silencio.
- Asegurar medidas y evidencia. Medidas inmediatas, endurecimiento, desmantelamiento de servicios huérfanos. Asegurar los medios de prueba como archivo antes de la siguiente rotación: comprimidos, propietario
root, permisos640, suma de verificación en el informe. - Realizar el seguimiento. Lecciones aprendidas, medidas como tareas con referencia a controles, versión del informe con historial de cambios. Los hallazgos erróneos se corrigen y se documentan como corrección.
Niveles de log y sus puntos ciegos
| Nivel | Responde a | Punto ciego |
|---|---|---|
| Acceso a proxy/servidor web | Solicitudes, códigos de estado, tamaños de cuerpo, origen del cliente | Sin contenidos; la rotación limita la retrospectiva |
| Log de aplicación | Eventos internos: errores, advertencias, inicios de sesión | En nivel info, no hay accesos; posibles rutas de fallback |
| Tiempo de ejecución del lenguaje de scripting (FPM) | Caídas de workers, agotamiento de memoria, errores fatales | Sin contexto HTTP |
| Kernel / journal | OOM-kills, segfaults, coredumps | Sin semántica de aplicación |
Además: gestor de paquetes (momento del parche), Fail2ban (fuerza bruta), historial de configuración (qué cambió y cuándo). Solo la combinación sostiene una afirmación.
Hallazgos erróneos típicos
| Hallazgo erróneo | Causa | Contrapueba |
|---|---|---|
| «La aplicación no escribe ningún log» | Directorio de datos fuera del espacio de búsqueda; fallback del logger | Comprobar la ruta configurada y el directorio de datos; probar la rotación de forma activa |
| «El puerto está cerrado desde fuera» | Una regla genérica de subred permite todos los puertos | Leer el firewall en su conjunto: política por defecto, permisos genéricos, orden |
| «No se encontró nada, así que no pasó nada» | Nivel de log incorrecto o ausente | Recorrer la tabla de niveles, demostrar por separado las pruebas negativas |
| «El parche está instalado» | El servicio sigue ejecutándose con el binario antiguo | Prueba en tiempo de ejecución: momento del reinicio y versión del proceso |
| «POST grande = exploit» | El backend de destino no existía | Comprobar el código de estado: 502/503 significa que no hay proceso PHP ni ejecución |
Artefactos de la cadena de prueba
| Artefacto | Contenido | Ubicación |
|---|---|---|
| Informe de incidente | Situación de amenaza, afectación, prueba de parche, evaluación de logs, valoración, medidas, límites de prueba, historial de cambios | Repositorio Git del operador, versionado |
| Archivo de evidencia | Extracto de ventana de los logs, suma de verificación, propietario/permisos, momento de creación | Fuera del web root, root:root 640 |
| Tarea con referencia a control | Medida, prioridad, estado, prueba (BSI DER.2.1, OPS.1.1.5; ISO/IEC 27001 A.5.24–A.5.28, A.8.15, A.8.16) |
Registro de tareas del inquilino |
| Script de verificación/reproducción | Comandos con los que los indicadores pueden comprobarse de forma independiente | Anexo del informe |
Relación con los otros ejes
- Fundamentos (Eje 1): obligaciones y plazos de notificación de NIS2.
- Técnicas (Eje 4): identidades demostrables y firmas para informes y evidencia (GPG, uuidV7, Git como IdP).
- Plantillas (Eje 6): el informe de incidente sigue la misma estructura que otros informes de auditoría: resumen ejecutivo, alcance, prueba, evaluación, medidas, anexo.
Integración de servidor de IA en la LAN
Principio arquitectónico
El GCBoK describe un modelo de referencia para la integración de un servidor de IA headless en la LAN, que proporciona de forma central inferencia LLM y agentes de cumplimiento asistidos por RAG. El entorno de IA se ejecuta en un entorno de contenedores aislado (Podman rootless), pero se acopla, para inferencia y búsqueda web, a servicios instalados de forma nativa en el host.
Host de scripts SSH (OSSH)
Para tareas exigentes (compilación de código, operaciones Git, comprobaciones de cumplimiento) que van más allá del sandbox del contenedor, el agente utiliza un SSH Script Host: una salida controlada y basada en claves hacia el sistema host:
- El agente decide: «Ejecuta dotnet-build»
- Canal SSH: conexión cifrada mediante
id_rsa.pubal usuario del host - Proceso nativo: el comando se ejecuta en el contexto real del sistema operativo
- Devolución por stream: stdout/stderr se devuelven como flujo de texto
- El agente analiza: la salida del compilador en el contexto del LLM
Requisito de seguridad: la clave SSH generada en el contenedor debe incorporarse en el host dentro de authorized_keys. La comunicación se realiza exclusivamente mediante flujos estándar (stdin, stdout, stderr), sin transferencia de archivos.
Direccionamiento de rutas coherente (FQN)
Para evitar inconsistencias de rutas entre la estación de trabajo, el contenedor y el host de scripts, los recursos compartidos del servidor de archivos se montan en los mismos puntos de montaje en todos los sistemas. Los agentes de IA y los desarrolladores humanos referencian en todo momento rutas absolutas idénticas.
Capacidad multidispositivo
Gracias a la centralización en el servidor de IA, varios dispositivos pueden acceder en paralelo al mismo entorno:
- El desarrollador inicia un análisis de código en el escritorio
- Sigue el progreso del agente en tiempo real en el smartphone mediante VPN
- Sin bloqueos mutuos: el host de scripts abre procesos de shell separados y de corta duración
Frontends para recursos compartidos: Nextcloud como frontend de solo lectura
Distribución de roles
| Componente | Rol | Conformidad con GCBoK |
|---|---|---|
| GCDMS | Registro e índice para artefactos de cumplimiento; los originales permanecen en su ubicación, el registro mantiene SHA-256, object_id y storage_locations |
Completa |
| GCPN | Contenedores de expedientes y cadenas de prueba (PrimaNota); las reglas OPA se referencian a través de las puertas | Completa |
| GCUCB | Bus de contexto para agentes de IA, validadores OPA, sistemas de auditoría | Completa |
| Nextcloud | Solo para recursos compartidos (usuarios externos, accesos móviles) | Limitada |
Condiciones de uso
Nextcloud puede utilizarse de forma puntual para recursos compartidos en un entorno basado en GCBoK si:
- Solo recursos compartidos de solo lectura: sin cambios a través de Nextcloud; todas las mutaciones pasan por Git
- Integración con Git: Nextcloud monta repositorios Git como almacenamiento externo (WebDAV, puerta de enlace S3 o GCSYNC)
- Validación de políticas: GCPN define las reglas de acceso (OPA/Rego); Nextcloud solo las aplica
- Registro de auditoría: los logs de Nextcloud se reenvían a GCAL (Syslog/Loki)
- Conformidad con código abierto: solo edición Community, sin plugins propietarios
Criterios de exclusión
- Acceso de escritura a través de Nextcloud (infringe el almacenamiento nativo de Git)
- Extensiones propietarias de Nextcloud (infringen los principios del OSS)
- Falta de integración con Git (Nextcloud debe poder acceder a repositorios Git)
Véase también: plantillas para catálogos OSCAL y políticas OPA en Eje 6: Plantillas.