Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

milpa-sdk

Implementación Python de referencia candidata para una proyección versionada de MILPA. Aspira a leer manifests, validar perfiles sin mutar y ofrecer puntos de decisión para roles y dominios; no define la metodología ni convierte carpetas en una ontología.

Perfil Milpa: library (P5) · Distribución prevista: PyPI milpa-sdk · Estado: alpha parcial no publicable

Qué resuelve y para quién

Un conjunto de repositorios donde cada equipo —y cada agente de software que los lee— decide por su cuenta dónde van la documentación, las decisiones y los reportes es un campo sin letreros: para saber qué hay en cada parcela hay que recorrerla entera. milpa-sdk lee un letrero por repositorio (.milpa-manifest.json) y comprueba, sin tocar nada, si tiene las carpetas que su tipo declarado exige.

Es para quien mantiene varios repositorios —personas o agentes de software que actúan sobre ellos— y quiere una comprobación de estructura reproducible en vez de una convención escrita en prosa que nadie audita.

Analogía, con su origen. El nombre y la imagen se apoyan, de forma didáctica, en la milpa mesoamericana: un policultivo vivo, sostenido durante generaciones por las comunidades que lo cultivan, en el que distintas plantas comparten una misma parcela porque siguen un patrón conocido; la FAO lo reconoció en 2022 como Sistema Importante del Patrimonio Agrícola Mundial (FAO, s.f.; ver docs/referencias.md). La analogía es del curso que la propuso para explicar por qué conviene un patrón compartido, no una lista de roles: MILPA no es "tres roles de agentes", es estructura de proyecto, niveles de certeza, reglas negativas y responsabilidad. Los roles operativos de un sistema multiagente (coordinador, ejecutor, crítico, compuerta determinista, autoridad humana) son cinco y los define la taxonomía del ecosistema, no este SDK. Detalle completo en D05 — qué es MILPA y qué no.

TL;DR

  • load_manifest ya lee JSON estricto, acotado y sin ejecutar contenido.
  • validate_structure y milpa validate revisan un perfil sin modificar el repositorio.
  • inherits sólo se conserva como dato: todavía no se resuelve ni amplía autoridad.
  • roles, dominios, identidad y enforcement siguen bloqueados.
  • Los perfiles son una proyección candidata hasta fijar revisión y digest del canon.
  • Empieza por el manifiesto, los diagramas o el índice completo.

Documentación

Cuatro niveles, de lo general a lo particular, según el estándar documental de Horcón. Ruta de lectura: manifiesto (sin tecnicismos) → diagramas → operación → contratos; el mapa completo y la ruta por perfil están en docs/INDEX.md. El sitio se audita y construye con la CLI de Horcón desde la raíz de este repo:

../horcon/.venv/bin/python -m horcon audit-docs .   # frontmatter, navegación, enlaces
../horcon/.venv/bin/python -m horcon docs build .   # sitio en tmp/site/ (mkdocs --strict)
../horcon/.venv/bin/python -m horcon docs serve .   # servido en 127.0.0.1

Diseño objetivo

Si ASILO responde "¿está permitida esta acción?", Milpa responde "¿quién puede hacerla y dónde vive lo que produce?".

Capacidad Objetivo Estado actual
Manifests cargar y validar; herencia separada loader estricto ejecutable; herencia pendiente
Perfiles validar estructura en sólo lectura catálogo y validación ejecutables
Roles decidir con identidad confiable stub; identidad/auditoría pendientes
Dominios autorizar y delegar enforcement a un adapter stub; no impone RLS por sí solo

Un decorador no puede impedir que un backend ignore una decisión. El diseño debe separar PDP (decidir) de PEP (aplicar en filesystem, herramienta o almacenamiento) y probar ambos.

require_role (milpa.roles) y domain_boundary (milpa.domains) son importables por ruta de módulo, pero lanzan NotImplementedError en cuanto se llaman y no están en __all__ (src/milpa/__init__.py; fijado por tests/unit/test_api_publica.py): no forman parte de la API pública del paquete. El contrato símbolo por símbolo, con su estado y su prueba, está en docs/04-contratos/01-api-publica.md.

Preparación local

El paquete aún no está publicado. Para trabajar desde el clon:

python3 --version  # debe ser 3.11 o posterior
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'
milpa validate .

API ejecutable

from milpa import load_manifest, validate_structure

manifest = load_manifest(".")
reporte = validate_structure(".", profile=manifest.profile)

if not reporte.ok:
    for falta in reporte.missing:
        print(f"falta: {falta}")

El reporte sólo considera obligatorias las rutas missing; unexpected es informativo. Los enlaces simbólicos no satisfacen una ruta obligatoria. Consulta qué no está implementado antes de usarlo en automatización.

Los seis perfiles actuales

El código contiene una transcripción manual del doc 21. El plan la reemplaza por una proyección generada con revisión y digest para evitar dos fuentes de verdad:

Perfil Para qué
node Nodo organizativo puro: verticales, capas, agrupadores
product-dossier Producto en planeación (marca, tesis, features, MVP, roadmap)
software-single Repo de implementación con un solo deployable
software-monorepo Varios deployables que comparten librerías internas
research Proyecto cuyo entregable es conocimiento verificable
library Paquete publicable a un registro

Todos comparten el mismo núcleo invariante; solo cambian las carpetas de dominio.

Relación prevista con asilo-core

Los paquetes deben permanecer independientes. Este ejemplo sólo ilustra una composición futura: roles, dominios, política y HITL siguen bloqueados; enforce_schema sí valida forma, pero no reemplaza esas capas:

@require_role("Contador")              # Milpa: ¿quién?
@guardrail(".asilo/axioms.yaml")       # ASILO: ¿está permitido?
@enforce_schema(ReporteFinanciero)     # ASILO: ¿tiene la forma correcta?
def generar_reporte(prompt: str): ...

Licencia

Apache-2.0 — texto completo en LICENSE.

La marca MILPA no se licencia con el código (sección 6 de Apache-2.0); ver NOTICE.

Enlaces

Estado de implementación

Ver docs/PLAN_IMPLEMENTACION.md. El slice manifest → perfil → reporte es ejecutable y de sólo lectura. No usar roles o dominios como control de acceso real, resolver inherits por cuenta propia ni ejecutar validaciones esperando que reparen un repositorio.

Release files for milpa-sdk 0.1.0a1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for milpa-sdk 0.1.0a1
File Size Uploaded
milpa_sdk-0.1.0a1.tar.gz 84.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for milpa-sdk 0.1.0a1
File Interpreter ABI Platform
milpa_sdk-0.1.0a1-py3-none-any.whl Python 3 none any Details

Total release size: 102.8 kB

Release files / milpa_sdk-0.1.0a1.tar.gz

Download URL milpa_sdk-0.1.0a1.tar.gz
Size 84.0 kB
Tags Source
SHA-256 checksum
How to use checksums
b073dfb9ae02620dd05a81b8084fd5beec9a6e56687599d2ff52fc9a0a63b248
BLAKE2b-256 checksum
How to use checksums
e5d1b2f350d7c6511d9c65c6185d5d606a46dbdbf776b2b976293d6cfd7387f8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.5

Release files / milpa_sdk-0.1.0a1-py3-none-any.whl

Download URL milpa_sdk-0.1.0a1-py3-none-any.whl
Size 18.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bbe330477dd10bcb530426a12bd2635d123647d534aae515ccb106b370ec27bf
BLAKE2b-256 checksum
How to use checksums
c7bb715584638b9077a72ba4bdd77e3f50e9b6239a8ec954e80fbf0825a4e1e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.5

Release history Release notifications | RSS feed

This release

0.1.0a1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page