Skip to content

docs: capa security (RFC-017) — cierra falso negativo del n/a - #21

Merged
gedera merged 1 commit into
masterfrom
docs/security-layer-rfc017
Jun 30, 2026
Merged

docs: capa security (RFC-017) — cierra falso negativo del n/a#21
gedera merged 1 commit into
masterfrom
docs/security-layer-rfc017

Conversation

@gedera

@gedera gedera commented Jun 30, 2026

Copy link
Copy Markdown
Owner

Contexto

El pase adversarial de multi-vendor-feedback (opencode + agy) sobre el clean-bill de critias --full impugnó la clasificación n/a de la capa security. Verificado contra lib/cobro_digital.rb: era un falso negativo — el n/a anterior ("sin Pundit/Current") solo miraba la dimensión authz y omitía que la gema implementa secrets-semántica real (decisión deliberada de sanitización de logs para no filtrar credencial + PII).

critias (Cat A) verifica que el n/a esté declarado con motivo, no que el motivo sea semánticamente correcto — ese gap lo atrapa el pase multi-vendor (amplitud complementaria).

Cambios

  • docs/security/security.md (nuevo) — RFC-017 híbrido:
    • §a/§b estructural: conteos (2 secrets, 0 roles/policies) + auth saliente (credencial de comercio id_comercio/sid por arg + handshake MD5(Time.now))
    • §c/§d/§e n/a: sin authz/endpoints/audit propios (declarado con motivo)
    • §f secrets-semántica (enrich): LOG_FILTERS=[:parametros_de_entrada]***FILTERED***; default :error; no-log de sid/request_xml; failure-mode debug expone sid
    • §g confianza + zona de red (enrich): frontera gema→WS saliente; custodia de credencial = responsabilidad del host
  • AGENTS.md / README.md / skill/SKILL.md: seguridad sale de la línea n/a combinada → fila propia apuntando al artefacto

Lo que se mantiene n/a (verificado contra código)

  • errors (RFC-020): la gema no emite excepciones propias (solo ArgumentError de misconfig); los errores del WS (SOAP faults/timeouts) son del proveedor → ya documentados en consumed §d (RFC-018). Los vendors conflaron las dos capas.
  • data-lifecycle (RFC-026): gema stateless (grep persistencia/cache = 0 hits); PII transita in-memory por llamada, sin retención.

Nota

Sin valores reales de credenciales ni descripción de vulnerabilidades (RFC-017 §3).

🤖 Generated with Claude Code

El pase adversarial multi-vendor (opencode + agy) impugnó el n/a de security.
Verificado contra lib/cobro_digital.rb: la gema SÍ tiene superficie de
seguridad real (secrets-semántica), que el n/a anterior ("sin Pundit/Current")
omitía:

- LOG_FILTERS=[:parametros_de_entrada] enmascara sid + PII del pagador como
  ***FILTERED*** (lib/cobro_digital.rb:35-36)
- LOG_LEVEL default :error para no filtrar el sid (lib/cobro_digital.rb:26-31)
- credencial id_comercio/sid por argumento, no persistida (custodia del host)
- failure-mode: COBRODIGITAL_LOG_LEVEL=debug expone el sid en claro

docs/security/security.md (RFC-017 híbrido):
- §a/§b estructural (conteos + auth saliente)
- §c/§d/§e n/a (sin authz/endpoints/audit propios) — declarado con motivo
- §f secrets-semántica + §g confianza/zona-de-red enriquecidos

Composites (AGENTS/README/SKILL): seguridad sale de la línea n/a combinada y
pasa a fila propia apuntando al artefacto.

errors y data-lifecycle se mantienen n/a (verificado: errores del proveedor van
en consumed §d; gema stateless sin persistencia).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@gedera
gedera merged commit dd291c1 into master Jun 30, 2026
1 check passed
@gedera
gedera deleted the docs/security-layer-rfc017 branch June 30, 2026 22:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant