Skip to content

Defensa en profundidad pre-commit — Análisis de secretos, límite de tamaño y puerta de ayudante

Tres incidentes en la canalización de confirmaciones en 2026 — una clave SSH que llegó a un monorepo público, una anulación de autor en .git/config que atribuyó incorrectamente cientos de confirmaciones, y carreras de reversión de chmod contra el almacén de identidad — comparten una causa estructural: no existía ninguna barrera entre un participante del espacio de trabajo y git commit. Cualquier agente, cualquier operador, podía escribir cualquier contenido y confirmar de cualquier manera.

Tres verificaciones en un solo hook

El endurecimiento de la Fase 1 cierra esta brecha con un único hook pre-commit enlazado simbólicamente en .git/hooks/pre-commit en la raíz del espacio de trabajo y en cada clon de archivo. Ejecuta tres verificaciones en cada confirmación.

Confirmaciones solo mediante ayudante. El hook rechaza a menos que la variable de entorno del ayudante autorizado esté configurada. Las invocaciones directas de git commit — por un operador, un agente o automatización — reciben un mensaje de error claro que apunta al ayudante. Las confirmaciones de fusión y los rebases se permiten mediante la detección de GIT_REFLOG_ACTION; las emergencias pueden omitir con --no-verify. El costo de la regla es una confirmación redirigida; el beneficio es el fin de toda la clase de errores de "autor incorrecto".

Análisis de patrones de secretos. El hook lee el catálogo de patrones y analiza el contenido preparado contra 17 patrones de expresión regular: claves privadas SSH/PGP (OPENSSH, RSA, EC, DSA, PGP), credenciales en la nube (AWS, GCP, GitHub PAT, tokens OAuth), claves API (Anthropic, OpenAI, Slack) y asignaciones genéricas de contraseñas. Las coincidencias de severidad crítica y alta bloquean la confirmación; las de severidad media y baja producen una advertencia y continúan. Una lista de rutas permitidas exime el catálogo de patrones en sí y los archivos de clave pública.

Guardia de tamaño. Los blobs de más de 2 MiB se rechazan a menos que la ruta esté en la lista de tamaños permitidos (data/binary-ledger/, repositorios de activos multimedia, www/ de fleet-deployment). Esto detecta la confirmación accidental de binarios — imágenes grandes, artefactos de compilación copiados, bases de datos integradas — antes de la contaminación del historial.

Tamaño de implementación y costo por confirmación

La implementación en Python es de aproximadamente 150 líneas; PyYAML es la única dependencia externa. Para una confirmación típica de 5 a 20 archivos, el hook agrega menos de un segundo. Para confirmaciones inusualmente grandes, la guardia de tamaño detecta la sobrecarga antes de que el análisis de secretos tenga que leerla.

Vías de omisión conocidas

Lo que esto no resuelve: la omisión mediante --no-verify, o una confirmación en un clon del espacio de trabajo sin el hook instalado. Lo primero es intencional — un operador con una razón legítima puede omitir con una entrada completa en el registro de auditoría. Lo segundo lo cierra el script de aprovisionamiento de archivos, que instala el enlace simbólico del hook cada vez que se aprovisiona un archivo.

Véase también

Important Information

Important Information

Corporate structure. PointSav Digital Systems ("PointSav") is a trade name of Woodfine Capital Projects Inc. ("Woodfine"). PointSav does not itself offer, sell, or solicit any security. Any securities offering associated with Woodfine's real-property direct-hold solutions is made exclusively by Woodfine, and only by means of the applicable Private Placement Memorandum.

No investment advice. This wiki's content is provided for engineering, operational, research, and development purposes. Nothing on this wiki constitutes investment advice or a solicitation to invest in any Woodfine partnership or direct-hold solution.

Intellectual property. The PointSav name, trade name, wordmark, and marks, together with all current and future PointSav- and Totebox-branded products, services, and offerings — and the software, source code, documentation, design system, and all related materials — are proprietary to Woodfine and its affiliates, except for components identified as open source. No rights are granted except as expressly set out in a written license or agreement. See TRADEMARK.md in this repository for the full trademark notice.

Open source components. Portions of the platform are made available under permissive open-source licenses identified in the accompanying repository. Use of those components is governed by their respective license terms.

No warranty; informational use. Content on this wiki is provided for general informational purposes only and does not constitute a representation, warranty, or commitment with respect to product functionality, availability, pricing, or roadmap. Some articles describe planned or intended features, capabilities, and milestones — language such as "planned," "intended," "targeted," "may," and "expected" marks this forward-looking content, which is subject to change and does not constitute a commitment regarding future performance.

Confidentiality. Where an article describes an operational or deployment detail that is not intended for public disclosure, that article is not published on this wiki. Content here is general-purpose engineering documentation, not customer-specific configuration.

Jurisdiction. Woodfine Capital Projects Inc. is organized in British Columbia, Canada. References to the Sovereign Data Foundation on this wiki describe a planned or intended initiative only, not a current equity holder or active governance body.

Changes to this notice. PointSav may update this notice from time to time; the version posted on this page governs.

Not a filing system. This wiki is not a securities filing system, an electronic disclosure repository, or a substitute for SEDAR+ or any other regulatory filing system. Formal securities filings are made through the applicable regulatory filing system, not through this wiki.

Full disclaimer. This notice supplements, and does not replace, the full Disclaimers article. In the event of any conflict, the full Disclaimers article governs.

Read the full disclaimer →