feat(okf): el corpus firma su procedencia como autorado por humano - #661
Merged
Conversation
Un consumidor OKF v0.2 que leia nuestro bundle no encontraba `generated`, asi que
caia al `timestamp` legado (§13.1) — una fecha sin ninguna procedencia. Nuestro
corpus se autora a mano en canonical/*.yaml, pero el bundle no lo decia, de modo
que no habia forma de distinguirlo de uno escupido por una maquina.
Los 10 conceptos proyectados pasan a firmar `generated: { by: human:@winston }`.
Dos decisiones, ambas con razon:
`human:` y no `process:`. §7 avisa de que los consumidores que clasifican confianza
(§5.3) se apoyan en ese prefijo, y obliga a los productores a usarlo para contenido
autorado o confirmado por humanos. El proyector TRANSCRIBE el corpus, no lo escribe;
firmar con el script degradaria el corpus a "generado por maquina" ante cualquier
consumidor v0.2, que es justo lo contrario de lo que es.
`at` se OMITE, y conviene que siga omitido. §5.2 lo define como "the content's last
meaningful change" y solo marca `by` como REQUIRED, asi que omitirlo es conforme.
Las dos fuentes posibles no sirven:
- `asOf` es la fecha de PROYECCION. Emitirla haria que cada re-proyeccion afirme
que todo el corpus acaba de cambiar — lo contrario del uso que §5.2 le da.
- La fecha del commit del fichero canonico seria la correcta, pero es inalcanzable:
el bundle se commitea EN EL MISMO commit que el cambio canonico y lo gatea
`--verify`, asi que `at` necesitaria la fecha de un commit que aun no existe al
generar. Cualquier edicion canonica dejaria el gate en rojo.
Un dato ausente es conforme; uno inventado engaña al consumidor.
El bundle sigue siendo v0.1-conforme: v0.1 tolera claves extra, el §11 de v0.2 exige
las mismas tres reglas (frontmatter parseable, `type` no vacio, reservados) y ya las
cumpliamos. Por eso NO se toca la version declarada ni el ADR-0105 — eso seria otra
decision, no un efecto colateral de esta.
El validador gana dientes: si `generated` esta presente, `generated.by` es REQUERIDO
(§5.2) y debe seguir la convencion de actor (§7). Sin eso el campo podria emitirse a
medias y un consumidor lo clasificaria mal en silencio, que es peor que no emitirlo.
Verificacion: el diff del bundle son EXACTAMENTE 10 adiciones de `generated`, nada
mas. --check 0 violaciones, --verify al dia (corrido como en CI, sin --as-of; la
linea 527 reproduce con el as-of del log.md publicado), guard CI 38 exit 0, guard
pre-commit exit 0. Tests del proyector 14 -> 17, incluido uno que fija la AUSENCIA
de `at` para que no se cuele mas adelante.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: aarroyo <beyondnet.peru@gmail.com>
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
📊 Bilingual Coverage ImpactPR Changes
Repository Coverage
To create skeletons: node .harness/scripts/generate-es-skeleton.mjs <file.md>Generated by GitHub Actions |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request Summary
Un consumidor OKF v0.2 que leía nuestro bundle no encontraba
generated, así que caía altimestamplegado (§13.1) — una fecha sin ninguna procedencia. Nuestro corpus se autora a mano encanonical/*.yaml, pero el bundle no lo decía: no había forma de distinguirlo de uno escupido por una máquina.Los 10 conceptos proyectados pasan a firmar:
Dos decisiones, ambas con razón
human:y noprocess:§7 avisa de que los consumidores que clasifican confianza (§5.3) se apoyan en ese prefijo, y obliga a los productores a usarlo para contenido autorado o confirmado por humanos. El proyector transcribe el corpus, no lo escribe; firmar con el script degradaría el corpus a "generado por máquina" ante cualquier consumidor v0.2 — justo lo contrario de lo que es.
atse omite, y conviene que siga omitido§5.2 lo define como "the content's last meaningful change" y solo marca
bycomo REQUIRED, así que omitirlo es conforme. Las dos fuentes posibles no sirven:asOfes la fecha de proyección. Emitirla haría que cada re-proyección afirme que todo el corpus acaba de cambiar — lo contrario del uso que §5.2 le da al campo ("tell a recent edit from a stale fact").--verify, así queatnecesitaría la fecha de un commit que aún no existe al generar. Cualquier edición canónica dejaría el gate en rojo.Un dato ausente es conforme; uno inventado engaña al consumidor. Hay un test que fija la ausencia de
atpara que no se cuele más adelante.Lo que NO cambia
El bundle sigue siendo v0.1-conforme: v0.1 tolera claves extra, y el §11 de v0.2 exige las mismas tres reglas (frontmatter parseable,
typeno vacío, reservados) que ya cumplíamos. Por eso no se toca la versión declarada ni el ADR-0105 — eso sería otra decisión, no un efecto colateral de esta.El validador gana dientes
Si
generatedestá presente,generated.byes REQUERIDO (§5.2) y debe seguir la convención de actor (§7). Sin eso el campo podría emitirse a medias y un consumidor lo clasificaría mal en silencio, que es peor que no emitirlo.Verificación
generated, nada más (auditado línea a línea).--check: 0 violaciones ·--verify: al día — corrido como en CI, sin--as-of(la línea 527 reproduce con el as-of dellog.mdpublicado, así que el diff es determinista).38-validate-okf-projection: exit 0 · guard pre-commit: exit 0.at, y el rechazo degeneratedsinbyo con actor no convencional.Before you submit
Signed-off-byline.Linked ADRs / Issues
🤖 Generated with Claude Code