Skip to content

PointSav Documentation

The engineering library for the PointSav platform — operating systems and services for regulated businesses that own their data, their AI, and their record-keeping outright. Where the monorepo holds the code, this wiki holds the reasoning: architecture, services, security, and the governance commitments that bind future development.

Caché de compilación por usuario — prevención de condiciones de carrera en Cargo

La caché de compilación incremental de Cargo vive en target/. Por defecto eso es un directorio por crate dentro de cada crate. El espacio de trabajo anula esto mediante la variable de entorno CARGO_TARGET_DIR que apunta a una ruta compartida, de modo que la caché de compilación se comparte entre todos los crates del monorepo — ahorrando espacio en disco y tiempo de recompilación.

Puntos clave

  • Con un CARGO_TARGET_DIR compartido, dos llamadas concurrentes a cargo build compiten por target/.cargo-lock y entrecruzan la propiedad de archivos, causando errores esporádicos de Permission denied durante reconstrucciones incrementales — incluso cuando los crates compilados no están relacionados.
  • Solución: un script de perfil del sistema establece CARGO_TARGET_DIR en <raíz-compartida>/$USER/, dando a cada desarrollador un subdirectorio privado de caché de compilación. La compilación incremental dentro de un usuario se preserva; las colisiones de propiedad de archivos entre usuarios se eliminan.
  • CARGO_TARGET_DIR tiene precedencia sobre el ajuste target-dir de ~/.cargo/config.toml. El cambio surte efecto en cualquier shell nueva sin ediciones por usuario de los dotfiles — un script de perfil a nivel de sistema es el punto de cumplimiento.
  • La lección generaliza más allá de Cargo: cualquier ruta compartida de escritura grupal necesita diseño explícito sobre qué operaciones son seguras de compartir (lecturas, adiciones de contenido) y cuáles requieren partición por usuario (estado de compilación, archivos de bloqueo, directorios temporales).

Carrera entre usuarios en la caché compartida

Esto funciona para un único desarrollador. Con dos desarrolladores en el grupo del espacio de trabajo se convierte en una carrera. El target/.cargo-lock de Cargo serializa las compilaciones de árbol completo, de modo que dos invocaciones de cargo build en diferentes crates se bloquean mutuamente. Peor aún, la propiedad mezclada de archivos — artefactos de compilación escritos por un usuario entremezclados con los de otro — causa errores esporádicos de Permission denied durante la recompilación incremental, incluso cuando los crates parecen no estar relacionados.

Particionado de CARGO_TARGET_DIR por usuario

La solución: un script de perfil del sistema exporta CARGO_TARGET_DIR apuntando a un subdirectorio por usuario (<raíz-compartida>/$USER/). Cada usuario obtiene un subdirectorio privado. La caché de compilación permanece compartida dentro de un usuario — la optimización original se conserva — pero ya no cruza entre usuarios. La variable de entorno tiene precedencia sobre el ajuste target-dir de ~/.cargo/config.toml, por lo que el cambio surte efecto en cualquier shell nueva sin ediciones por usuario de los dotfiles.

La migración implicó mover la caché existente de 3,3 GiB al subdirectorio del primer usuario. El estado incremental de ese desarrollador se preserva; el otro comienza con una caché vacía que se llena en la primera compilación.

Las cuentas de servicio en el grupo del espacio de trabajo (local-doorman, local-design y similares) no ejecutan Cargo y no reciben un directorio de caché por usuario. El script de perfil solo exporta cuando existe la raíz de caché compartida, por lo que los contextos que no son del espacio de trabajo no se ven afectados.

Un temporizador revisa el uso de disco de la caché compartida cada 30 minutos y la recorta al superar el 80% del sistema raíz. La partición por usuario resuelve la carrera entre usuarios; una caché en crecimiento sigue necesitando este respaldo.

Generalización más allá de Cargo

La lección generaliza: cualquier ruta compartida de escritura grupal necesita diseño explícito sobre qué operaciones son seguras de compartir (lecturas, adiciones de contenido) y cuáles requieren partición por usuario (estado de compilación, archivos de bloqueo, temporales). Cargo es el ejemplo prominente; la misma lógica aplica a cualquier cosa con estado mutable bajo una raíz compartida.

Véase también

Cite this record: /wiki/cargo-target-per-user-discipline — revision 160f29b9, last updated 25 May 2026.

Important Information

Estructura corporativa. PointSav Digital Systems ("PointSav") es actualmente un nombre comercial de Woodfine Capital Projects Inc. ("Woodfine"), con previsión de convertirse en una subsidiaria de propiedad absoluta de Woodfine tras su incorporación. PointSav no ofrece, vende ni solicita por sí mismo valor alguno. Toda oferta de valores asociada a las soluciones inmobiliarias de tenencia directa de Woodfine se realiza exclusivamente por parte de Woodfine, y únicamente por medio del Memorando de Colocación Privada aplicable.

Sin asesoramiento de inversión. El contenido de este wiki se ofrece con fines de ingeniería, operativos, de investigación y de desarrollo. Nada de lo que figura en este wiki constituye asesoramiento de inversión ni una solicitud para invertir en ninguna sociedad o solución de tenencia directa de Woodfine.

Propiedad intelectual. El nombre, el nombre comercial, el logotipo y las marcas de PointSav, junto con todos los productos, servicios y ofertas actuales y futuros de las marcas PointSav y Totebox — así como el software, el código fuente, la documentación, el sistema de diseño y todos los materiales relacionados — son propiedad de Woodfine y sus filiales, salvo los componentes identificados como de código abierto. No se otorga ningún derecho salvo el expresamente establecido en una licencia o acuerdo por escrito. El aviso de marcas completo aparece en el pie de página de cada página de este sitio.

Componentes de código abierto. Algunas partes de la plataforma se ofrecen bajo licencias de código abierto permisivas identificadas en el repositorio correspondiente. El uso de esos componentes se rige por los términos de sus respectivas licencias.

Sin garantía; uso informativo. El contenido de este wiki se ofrece únicamente con fines informativos generales y no constituye una declaración, garantía ni compromiso respecto de la funcionalidad, disponibilidad, precio o hoja de ruta de ningún producto. Algunos artículos describen características, capacidades e hitos planificados o previstos — el lenguaje como "planificado", "previsto", "objetivo", "puede" y "esperado" marca este contenido prospectivo, que está sujeto a cambios y no constituye un compromiso respecto del rendimiento futuro.

Confidencialidad. Cuando un artículo describiría un detalle operativo o de implementación no destinado a divulgación pública, ese artículo no se publica en este wiki. El contenido aquí es documentación de ingeniería de uso general, no configuración específica de clientes.

Jurisdicción. Woodfine Capital Projects Inc. está constituida en Columbia Británica, Canadá. Las referencias a la Sovereign Data Foundation en este wiki describen una iniciativa planificada o prevista únicamente, no una titular de capital actual ni un órgano de gobierno activo.

Cambios a este aviso. PointSav podrá actualizar este aviso periódicamente; rige la versión publicada en esta página.

No es un sistema de presentación de documentos. Este wiki no es un sistema de presentación de valores, un repositorio de divulgación electrónica ni un sustituto de SEDAR+ ni de ningún otro sistema de presentación regulatorio. Las presentaciones formales de valores se realizan a través del sistema de presentación regulatorio correspondiente, no a través de este wiki.

Descargo completo. Este aviso complementa, y no sustituye, el artículo completo de Avisos Legales. En caso de cualquier conflicto, prevalece el artículo de Avisos Legales.

Read the full disclaimer →