Referencia · som-skill-library
Skills
SOM lleva el contexto; las skills llevan el conocimiento. Una skill es una regla escrita una sola vez, por la redacción, y legible por todas las herramientas. Declara lo que es cierto — la herramienta dueña del executor es la única que actúa.
El modelo
Las skills declaran. Los executors actúan.
La skill declara
Un archivo de skill enuncia una condición y lo que es cierto cuando se cumple — un flag sigue en pie, se aplica un hold, se justifica un enriquecimiento. Nunca ejecuta nada, nunca escribe el estado de la Story y nunca cambia el contenido.
El executor invoca (recall)
Los executors viven dentro de las herramientas de los fabricantes. Cada uno compara los mensajes entrantes con los adverts de las skills — el bloque recall, legible por máquina — y publica lo que la skill declara como skill.warning.raised.
La herramienta actúa
El MAM impide vincular un Asset retenido, el playout rechaza el paso a antena, el CMS retiene una ruta. Cada uno a su manera, y cada uno decidiendo por sí mismo. Nadie recibe una orden.
Forma abierta, política de la casa. Las skills siguen el formato abierto agentskills.io ↗: un archivo markdown con frontmatter YAML. La biblioteca compartida es genérica; cada redacción carga sobre ella sus propios valores. Tu política sigue siendo tuya, y una redacción puede implementar SOM 1.0 por completo sin usar la biblioteca en absoluto.
Anatomía
Un archivo: frontmatter para las máquinas, prosa para las personas
---
skill_id: smart-stories/hold-while-flagged
skill_version: 0.2.2
som_schema_version: ["1.0.0"]
skill_type: REFERENCE
category: compliance
lifecycle: draft
recall: # the advert
target_system_type: [mam, playout, rundown,
cms, compliance_hub]
conditions:
- kind: field
path: editorial_gates[].gate_type
op: equals
value: "{{ config.gate_type }}"
- kind: field
path: editorial_gates[].status
op: equals
value: PENDING
recall_on: ["story.context", …]
state_path: editorial_gates[].status
output_messages: ["skill.warning.raised"]
severity_range: [hold]
auto_change_content: false
fail_closed: true
migration_policy: GATED
disclosure_level: L2
depends: []
---
# hold-while-flagged
…what it is, config surface, runtime loop,
output contract, worked configurations,
eval set, open items, vendor build notesskill_id como publisher/name, un skill_version semver, las versiones de schema de SOM contra las que se resuelve, una category y un lifecycle.
recall indica qué tipos de herramienta pueden recoger la skill, las condiciones sobre rutas de la Story (field y field_change) y qué mensajes provocan una revisión. Las rutas son literales y se comprueban contra el schema publicado; los valores pueden tomarse como plantilla de la configuración de la casa.
Un archivo genérico con los valores de una casa cargados, vigilando una condición. Una casa ejecuta varias a partir del mismo archivo — una restricción judicial con alcance story, una cifra sin confirmar con alcance link — y registra una fila de advert por cada instancia configurada.
hold / flag / inform, en minúsculas para siempre. Una skill declara en severity_range cuáles de ellas puede producir.
| Garantía | Valor | Qué significa |
|---|---|---|
auto_change_content | false | El único valor permitido. Lo que se retiene es una acción, nunca el contenido — un executor que edita para liberar ha roto el modelo. |
fail_closed | true | Un valor ilegible se trata como si la condición se cumpliera, con la severidad más alta que tenga la skill. Nunca se permite el silencio ante una restricción ilegible. |
output_messages | ["skill.warning.raised"] | Una skill tiene una sola forma de decir algo. Nunca escribe el estado de la Story. |
depends | [] | El encadenamiento ocurre a través del bus, no mediante dependencias declaradas. Un hold se anuncia contra el estado del flag, sin importar quién lo haya levantado. |
som-skill-library 0.2.2
Diez skills de referencia y una propuesta
Todas lifecycle: draft, origin: reference, resueltas contra SOM 1.0. Busca tu tipo de herramienta en la tabla de consulta, lee las skills de esa fila y configúralas para tu casa.
| Skill | Declara | Categoría | Severidad | Invocada por |
|---|---|---|---|---|
raise-flag-on-match | Un flag con nombre sobre una Story cuando un campo configurado coincide con un valor configurado — desde su creación, incluso antes de que exista ningún medio. | compliance · X=1 | flaginform | planningrundownmamgraphicsdiscovery |
hold-while-flagged | Una acción con nombre retenida mientras siga en pie un flag de un tipo configurado, liberada solo por una aprobación de autoridad igual o superior en el mismo alcance. | compliance · X=1 | hold | mamplayoutrundowncmscompliance_hub |
gate-by-scope | Si el gate de una ruta de destino permite un Telling ahora mismo. Siempre con alcance de link. | compliance · X=1 | holdinform | cmsplayoutrundownmamdistribution |
record-provenance-on-ingest | Que la procedencia de una fuente queda registrada al entrar en una Story — incluida una cadena C2PA ausente, registrada como ausente. | compliance · X=1 | inform | mamingestverificationdiscoveryarchive |
flag-on-mismatch | Una discrepancia cuando un Asset vinculado o un elemento de la escaleta lleva un valor que la Story ya no tiene — nombrando ambos valores. | editorial · X=2 | flaginform | rundowngraphicscmsplayout |
apply-clearance | Qué miembro de un conjunto de versiones preparado pasa a ser el vigente con una aprobación, y a qué miembros sustituye. | workflow · X=3 | inform | playoutrundownmamcmsgraphics |
enrich-on-condition | Que un enriquecimiento con nombre está justificado para un Asset mientras se cumpla una condición configurada. Nunca ejecuta el enriquecimiento. | workflow · X=3 | inform | mamverificationmultimodaltranscriptioningest |
match-and-propose | Una Story candidata para un clip suelto, con una confianza igual o superior a la fijada por la casa. La confirmación es un acto humano que se registra en otro lugar. | workflow · X=3 | inform | multimodalmamdiscoveryingestrundown |
select-provider-by-context | Qué proveedor resuelve la política de la casa para una capacidad, dado el contexto de la historia. Nunca asigna ni invoca. | workflow · X=3 | inform | transcriptionverification |
surface-on-context-match | Un elemento de una fuente monitorizada que coincide con la Story en curso, con su procedencia. Aditivo, fuera de la ruta crítica. | workflow · X=3 | inform | transcriptionverificationdiscoverymarkets_datamamplanning |
declare-context-on-commitpropuesta | El contexto de la historia que se aplica en un link cuando un Asset se vincula a un destino. | workflow · X=3 | inform | playoutmamgraphics |
Tabla de consulta ↗ · Convenciones ↗ · Todos los archivos de skills ↗
Cuando las skills se encuentran
Los holds se combinan por conjunción
Cuando varios gates condicionan el mismo hecho en el mismo Telling, solo se sirve cuando todos lo permiten. «Gana el más restrictivo» y «el propietario de la Story tiene prioridad» se retiraron formalmente el 29 de julio de 2026.
La precedencia entre dos skills que chocan en la misma acción es otra cuestión, y se ordena por X (categoría: compliance 1, editorial 2, workflow 3), Y (origen — todas las skills de la biblioteca son 5) y Z, que solo fija la casa que publica.
Una skill que declarara un estado y además retuviera algo ocuparía dos posiciones a la vez. Por eso «marcar y retener» son dos skills: flag-on-mismatch declara el flag, y hold-while-flagged se anuncia contra el estado del flag — lo haya levantado quien lo haya levantado, una skill o un abogado.
Por eso depends está vacío en todas partes: declarar una dependencia la invertiría y crearía un ciclo en el primer cambio de versión.
Fail-closed. Un valor de configuración o de la Story que no se puede leer se trata como si la condición se cumpliera, con la severidad más alta que tenga la skill, y detail indica qué no se pudo leer. Si una regla no se puede evaluar, la salida que protege sigue retenida y decide una persona.
Lo que no levanta un hold: el paso del tiempo, que el flag simplemente no aparezca en un snapshot posterior, una aprobación en otro alcance, una autoridad inferior, un reinicio del executor o la aprobación de otro flag. Liberar un hold nunca es una instrucción de liberar el Asset.
Validación
La biblioteca se comprueba a sí misma
La biblioteca incluye cinco scripts, y cada uno responde a una pregunta distinta — incluida la de si los documentos coinciden con los archivos que describen.
cd som/skills
python3 scripts/validate_som_skill.py skills/<name>.md # one skill file is legal
python3 scripts/check_library.py skills/ # the library holds together
python3 scripts/check_paths.py skills/ # every path resolves against
# ../schema/story-context.schema.json
python3 scripts/build_lookup_table.py . --check # the table matches the adverts
python3 scripts/check_cover_claims.py . # the docs match the filesHay un hueco que se nombra en lugar de ocultarse: check_paths.py solo resuelve rutas literales. Un valor {{ config.* }} es imposible de conocer hasta que una casa lo configura, así que detectar una ruta configurada incorrecta es trabajo de la casa en el momento del registro.
Abierto, con honestidad
Lo que la biblioteca no pretende resolver
- Cómo se compara la autoridad. «Aprobado por una autoridad igual o superior en el mismo alcance» es la posición de trabajo de la biblioteca, con el orden que aporta cada casa como
authority_scale. Ningún grupo lo ha ratificado. - Quién convierte una advertencia levantada en estado de gate. Una skill de tipo raise solo publica una advertencia; una skill de tipo hold lee
editorial_gates[]. Qué materializa una cosa en la otra aún no está definido. - Coincidencia de etiquetas calificadas por esquema. Hoy las skills comparan
tags[].valuesin tener en cuenta el esquema; sigue abierto si deben coincidir connewsroom:sporten lugar de consport. - Configuración de la demo. Las instancias configuradas que se usaron en el recorrido del IBC nombran a fabricantes concretos y no se publican en 1.0, a la espera del visto bueno de cada fabricante.