trades-runtime

MCP local en la sombra para HVAC, plomería, electricidad y alcantarillado. Puerta pública de solo lectura. No es un sistema operativo de empresa alojado.

Servidor MCP alojado

npx add-mcp 'https://trades-runtime.vibelock.workers.dev/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Trades-Runtime

Runtime TypeScript privado para un sistema operativo de IA de sombra-primero / capa de inteligencia operativa de la empresa. Oficios de campo: HVAC, plomería, electricidad, alcantarillado y oficios cruzados.

Autor / identidad: Solo Aziel Eliab. Ver IDENTITY.md. Sin nombre legal, domicilio o condado en exportaciones.
Versión: 1.0.0-local (Local Softwares 1.0, instalable)
Rol: trades-runtime
Licencia: Apache-2.0
Lanzamiento: software libre (Apache-2.0). Clónalo y ejecuta la sombra local en tu máquina. Aziel Eliab es el autor, no el operador, y no está ejecutando un piloto de empresa.
Worker público (si se despliega): https://trades-runtime.vibelock.workers.dev
Probar en Glama (listado previsto): https://glama.ai/mcp/servers/AzielEliab/trades-runtime — el paquete está en el repositorio (glama.json, Dockerfile, cli/mcp-stdio.mjs). No trates Install Server como EN VIVO solo desde este árbol git. Verificado 2026-10-02: Glama Latest/releaseVersion es 1.0.0-local. La insignia coincide con la cita de Softwares. Local Softwares 1.0. Esa coincidencia no es una afirmación de Field 1.0 ni de Office Softwares 1.0. Este corte no hace Release. Ver docs/GLAMA.md.
Estado: 1.0.0-local instalable Local Softwares 1.0 (puerta Track L; piloto no iniciado; live_backends false; no es una afirmación de Field 1.0) — 0.4.12 comandos familiares (help, softwares, version, health) para que una persona descubra el producto sin leer todo el README; las funciones del escritorio permanecen congeladas (piloto no iniciado) — 0.4.11 UI humana de regalo en el VibeLock Worker (navegador / PWA) sin descargar primero; paquete contado opcional; escritorio del operador aún local (piloto no iniciado) — 0.4.10 seguimiento de tiempo local, interruptores de cobertura de servicio y sugerencias de tecnología correcta en el escritorio de Monitoreo (piloto no iniciado) — 0.4.9 informe de calidad entrante local para fragmentos de ServiceTitan y ProBooks, stubs de alerta a acción con rechazo de escritura, y un panel de preparación de puerta de inicio Opción C (piloto no iniciado) — 0.4.8 millas recorridas locales y rendimiento de conducción, un tablero clasificado de empleados y departamentos, sugerencias de trabajo conjunto entre departamentos, y una tasa de fricción de empleados junto a ese tablero (piloto no iniciado) — 0.4.7 costo de piezas con adaptación de mercado regional, trainingNeeded por técnico, banderas de comportamiento bueno y malo de departamento, y conteos de camiones locales (piloto no iniciado) — 0.4.6 razones de clasificación por llamada, filtros de devolución de llamada / garantía / no clasificado, un resumen de bucle de tasa de devolución de llamada semanal, y una reunión matutina de técnicos (piloto no iniciado) — 0.4.5 conteos locales de devolución de llamada y garantía, exportación de resumen de alertas, explicaciones de puntuación y recibo de bloque de reserva (piloto no iniciado) — 0.4.4 pulido local del escritorio del operador (tema, vista de carril, instantánea imprimible; piloto no iniciado) — 0.4.3 preparación de piloto BYO Opción C (runbook local + npm run pilot:prep; piloto no iniciado) — 0.4.2 reglas de alerta locales en el escritorio del operador — 0.4.1 perfiles de proveedor de aplicaciones de oficios nombrados en el drop-in universal 0.4.0 — en sincronía con Property Intelligence v1.0 en el árbol — núcleo puro en vivo + stubs honestos — BYO ServiceTitan local + ProBooks + entrada de aplicaciones de oficios — sin escrituras en vivo, datos de inquilinos, escritura de ST/ProBooks, phone-home, DOIs, cargador alojado o afirmación de sistema operativo de empresa de producción — Opción C lista para código / piloto no iniciado — Opción D no iniciada

El producto es el software en src/. docs/ es un catálogo/UI local delgado. GitHub Pages está intencionalmente deshabilitado (live_backends: false). No hay flujo de trabajo de Pages. Los PDF nunca se publican. Las especificaciones del implementador viven en la raíz del repositorio specs/ (no bajo docs/).

Regla permanente: cada PDF que Aziel envía es una especificación para implementar como software codificado.

Rastro documental: TR-1.0-GATE-2026-09-28 (puerta Track L Local Softwares 1.0; piloto no iniciado) · TR-COMMANDS-2026-09-27 (ayuda de comandos CLI comunes, softwares, version, health; escritorio congelado; piloto no iniciado) · TR-OPS-2026-09-27 (seguimiento de tiempo local, interruptores de cobertura, sugerencias de tecnología correcta; piloto no iniciado) · TR-DESK-VIEW-2026-09-27 (casillas de mostrar/ocultar locales; cuadrículas de tarjetas de Softwares sin cambios; piloto no iniciado) · TR-MOBILE-DESK-2026-09-27 (escritorio local de ancho de teléfono; tarjetas de Softwares sin cambios; piloto no iniciado) · TR-QUALITY-2026-09-27 (calidad entrante, stubs de alerta a acción, puerta de inicio Opción C; piloto no iniciado) · TR-DRIVE-2026-09-27 (millas recorridas, rendimiento de conducción, tablero clasificado de empleados y departamentos; piloto no iniciado) · TR-SOFTWARES-2026-09-27 (costo de piezas y adaptación de mercado, trainingNeeded, banderas de comportamiento de departamento, conteos de camiones locales; piloto no iniciado) · TR-HUDDLE-2026-09-26 (razón de clasificación por llamada, filtros de llamadas, tasa de devolución de llamada semanal, reunión matutina; piloto no iniciado) · TR-CALLS-2026-09-26 (conteos de devolución de llamada y garantía, resumen de alertas, por qué de puntuación, recibo de bloque de reserva; piloto no iniciado) · TR-DESK-POLISH-2026-09-25 (pulido local del escritorio; piloto no iniciado) · TR-OPTION-C-PILOT-RUNBOOK-2026-10-02 (ruta de inicio Opción C humana; piloto de catálogo no iniciado) · TR-PILOT-START-2026-10-02 (pilot:start --branch explícito en el aislado del operador; no Field 1.0; no Office Softwares 1.0) · TR-OPTION-C-PREP-2026-09-25 (preparación de caja Opción C; piloto no iniciado) · TR-ALERTS-2026-09-25 (reglas de alerta locales) · TR-VENDOR-2026-09-25 (perfiles de proveedor nombrados) · TR-DESK-2026-09-25 (drop-in universal + escritorio humano local) · TR-AUDIT-2026-09-18C · TR-AUDIT-2026-09-18B · TR-AUDIT-2026-09-18 · TR-AUDIT-2026-09-17 · TR-CUT-2026-09-17 · TR-BOT-2026-09-17 (brief permanente) · TR-BYO-2026-09-17 (enmienda TR-BOT §9 y TR-CUT R2–R3).

Pruébalo en tu máquina

Fusionar este repositorio no inicia un piloto. Aziel Eliab escribió el software. Él no es el operador, no es un cliente y no está ejecutando un taller en este repositorio. live_backends permanece false. No hay escritura de retorno. Un clon nuevo no necesita inquilino de ServiceTitan o ProBooks ni secretos.

git clone https://github.com/AzielEliab/trades-runtime.git
cd trades-runtime
npm install
npm test
npm run demo
npm run shadow:office
npm run shadow:field
npm run desk

Lo que verás:

  • npm run demo imprime un día de sombra sintético en la terminal. Es un fixture. No es un resultado de empresa y no imprime un porcentaje de precisión.
  • npm run shadow:office ejecuta la sombra de oficina en la rama de muestra llamada sample-shop. Los fixtures ya están en test/fixtures/sample-branch/office/. El recibo dice office_softwares_1_0: false, pilot_started: false y live_backends: false. Verás trabajos de muestra admitidos, un conteo de reunión, calidad entrante como lista de verificación y stubs de alerta que rechazan escritura de retorno. Ese comando no carga banderas de campo.
  • npm run shadow:field ejecuta la sombra de campo en la misma rama de muestra, desde test/fixtures/sample-branch/field/. Verás banderas locales (needsParts, safetyHold, vanDown y una fila que nombra una etiqueta sin camioneta, que no inventa una camioneta), una tarjeta de tiempo, lugares de cobertura y una sugerencia de tecnología correcta. field_softwares_1_0 es false. No es una alimentación GPS en vivo ni Field 1.0. Es un comando separado de la sombra de oficina.
  • npm run desk abre el escritorio local en http://127.0.0.1:4174/. Con carpetas de entrada vacías, la página está etiquetada como demo sintética. No es tu empresa ni un inquilino en vivo. Colocar tus propias exportaciones en data/inbound/ es opcional y permanece en tu máquina.

Cuando tengas una rama real en tu propia máquina, y solo entonces:

npm run pilot:prep
npm run pilot:start -- --branch <branchId>

Ese es el único camino de software que establece pilot_started en true, y lo hace solo en tu aislado. Rechaza una rama faltante o mala, preparación que no está lista y --claim-company cuando la entrada está vacía o es solo sintética. El catálogo enviado permanece pilot_started false. El modo permanece SHADOW-SEALED. Las escrituras permanecen rechazadas. El recibo no es un sistema operativo de empresa en vivo, no es Office Softwares 1.0 y no es Field 1.0.

Instalar, probar, demo

npm install
npm test
npm run typecheck
npx tsx src/cli.ts help
npx tsx src/cli.ts softwares
npx tsx src/cli.ts version
npx tsx src/cli.ts health
npm run demo
npm run byo:admit-demo
npm run drop-in:demo
npm run desk
npm run shadow:office
npm run shadow:field
npm run pilot:prep
npm run pilot:start -- --branch <branchId>
npm run health:local
npm run shadow:sealed-demo
npm run manifest
npm run mcp

help imprime la lista de comandos (--help y -h hacen lo mismo). softwares lista el slug, estado y una línea en lenguaje simple de cada módulo (Softwares coincide en cualquier caso de letra). version imprime el nombre del producto y la versión, luego una línea de honestidad: live_backends false, pilot_started false (--version y -V hacen lo mismo). health es la misma tarjeta de honestidad local que health-local. Un comando desconocido imprime que es desconocido, luego el texto de ayuda y sale con código no cero. Sin comando aún imprime ayuda y sale con cero.

npm test ejecuta pruebas de reglas constitucionales incluyendo Autoridad Humana, confianza≠verdad, enrutamiento solo secundario CrossTrade, reconocimiento v0.2 / bloqueo de lista de precios / tablero de misión / economía de ubicación, la columna de ejecución 0.3.3 (entrada FragGate, recibos duraderos, runAction), reproducción de reinicio de recibos JSONL de solo anexar (data/receipts.jsonl o {tmpdir}/tr-replay-*/receipts.jsonl), la demo de admisión BYO sintética, la demo de drop-in universal, el escritorio del operador local, el andamiaje sellado de sombra Opción C (sin auto-promoción, retroceso de compromiso, campos de liquidación requeridos) y la preparación de piloto Opción C (verificaciones de máquina, admisión sintética, arranque de escritorio, pilot_started: false).

CI (.github/workflows/ci.yml) ejecuta npm ci, npm run typecheck y npm test en solicitudes de extracción y empujes a main. GitHub Pages está intencionalmente deshabilitado — no trates una URL github.io como puerta de prueba.

npm run demo ejecuta un día de sombra sintético: Call-Fit, contrafactual sellado, anulación humana, recibos encadenados por hash, rebase de trayectoria.

Mapa de software

ÁreaRutaEstado
IDs canónicos / eventos / modossrc/core/live-pure
Confianza ≠ verdadsrc/core/confidence.tslive-pure
Cadenas A/B/C/Dsrc/core/chains.tslive-pure
Autoridad humanasrc/core/human-authority.tslive-pure
TradesCoherence, EvidencePacket, DecisionGate, ReceiptLedger, Shadow, Trajectorysrc/inherited/live-pure
Call-Fit, economía, CrossTrade, Cadena D, fuerza laboral, Decision Fabric, analíticasrc/domain/live-pure
Comunicaciones (canales de flujo de eventos)src/domain/communications.tslive-pure
Reconocimiento (con control de calidad)src/domain/recognition.tslive-pure
Tablero de misiones diariosrc/domain/mission-board.tslive-pure
Etiquetas de devolución de llamada y garantíasrc/domain/call-class.tslive-pure
Reunión matutina + trainingNeededsrc/domain/huddle-board.tslive-pure
Millas recorridas y rendimiento de conducciónsrc/domain/drive-miles.tslive-pure
Tablero clasificado de empleados y departamentossrc/domain/performance-board.tslive-pure
Trabajo en equipo y sugerencias entre departamentossrc/domain/work-together.tslive-pure
Tasa de fricción de empleadossrc/domain/friction.tslive-pure
Informe de calidad entrantesrc/domain/inbound-quality.tslive-pure
Stubs de acciones de alertasrc/desk/alert-actions.tslive-pure
Puerta de inicio de Opción Csrc/spine/option-c-start-gate.tslive-pure
Posiciones locales y vista de monitoreosrc/domain/local-positions.tslive-pure
Pricebook (sombra ST + costo actual/último + LOCK)src/domain/pricebook.tslive-pure
Conteos de stock de camión / cumplimientosrc/domain/truck-stock.tslive-pure
Clima / demanda / lunar (experimental)src/domain/weather-demand.tslive-pure
Enrutamiento de mantenimiento (primero demanda)src/domain/maintenance-routing.tslive-pure
Property Intelligence v1.0src/domain/property-*.ts, neighborhood-*.ts, regional-recalibration.tslive-pure
FragGate entrantesrc/spine/fraggate-inbound.tslive-pure
Recibos duraderossrc/spine/durable-receipts.tslive-pure
Columna vertebral runAction()src/spine/run-action.tslive-pure
Registro de actores / autoridadsrc/core/actor-registry.tslive-pure
Modos sombrasrc/core/shadow-modes.tslive-pure
Reglas de participación (no una orden)src/core/engagement-rules.tslive-pure
Configuración de sombra de una sucursalsrc/core/shadow-branch.tslive-pure
Arnés de liquidaciónsrc/core/settlement-harness.tslive-pure
Sombra de ServiceTitan (solo lectura)src/spine/servicetitan-shadow.tslive-pure
Sombra de ProBooks (solo lectura, entrante entre pares)src/spine/probooks-shadow.tslive-pure
Diseño de entrada BYO localsrc/spine/inbound-layout.tslive-pure
Configuración de entrada local (sin cuenta en la nube)src/spine/local-inbound-config.tslive-pure
Inserción universal de trades-appsrc/spine/drop-in.tslive-pure
Sombra de trades-app (solo lectura)src/spine/trades-app-shadow.tslive-pure
Escritorio de operador humano localsrc/desk/live-pure
Demo de inserción sintéticasrc/demo/drop-in.tslive-pure
Aislamiento de tiempo de ejecución (recibos por instancia)src/spine/runtime-isolate.tslive-pure
Demo de admisión BYO sintéticasrc/demo/byo-admit.tslive-pure
Demo de sombra sellada sintéticasrc/demo/shadow-sealed.tslive-pure
Preparación piloto de Opción Csrc/spine/option-c-prep.tslive-pure
Tarjeta de salud localsrc/spine/health-local.tslive-pure
Máquina de estados de cumplimientosrc/domain/fulfillment-machine.tslive-pure
Reloj del tablero de misionessrc/domain/mission-board.tslive-pure
PI conectado a trabajossrc/domain/property-jobs.tslive-pure
Congelación §18 + reglas rectoras v0.2src/rules/constitution.tslive-pure
Escrituras en vivo de ServiceTitan / ProBooks—rechazado

Entrada BYO (TR-BYO-2026-09-17)

Cada usuario incorpora su propio ServiceTitan y su propio ProBooks en su tiempo de ejecución local. El nodo de autoría / GitHub no es un custodio de datos. Sin volcado central. Sin cargador alojado. Sin llamada a casa.

Entrada local en esa máquina (contenidos ignorados por git):

  • data/inbound/servicetitan/ — exportación de ST o extracción de solo lectura que el usuario coloca
  • data/inbound/probooks/ — libros / artículos / costos / archivos de proveedores de ProBooks que el usuario coloca
  • data/inbound/trades-app/ — otras exportaciones de servicio de campo / trabajo / pricebook / cliente / cita. Perfiles nombrados: Jobber, Housecall Pro, Service Fusion, libros con forma de QuickBooks, ServiceM8, AccuLynx, SuccessWare, Xero, FieldEdge, ServiceTrade. CSV/JSON genérico cuando no coincide ninguna huella.
  • data/runtime/<instanceId>/receipts.jsonl y ledger.jsonl — aislar por instancia de tiempo de ejecución

No es data/tenants/ (esa palabra implica un servicio alojado multiinquilino). La configuración local opcional enumera rutas o sugerencias de puntos finales de lectura solamente — sin cuenta en la nube, y el tiempo de ejecución no llama a esas sugerencias. Los tokens permanecen en la máquina del usuario o en su bóveda sellada.

Valores de sourceKind de primera clase de FragGate: servicetitan (MEDIUM, con hash, live:false write:false), probooks (igual), trades-app (igual, clase genérica), operator-file (LOW hasta que el origen esté etiquetado servicetitan, probooks, o trades-app; aún no es verdad), human (corrección de gerente en la Cadena C con ID de actor). Envoltorio ≠ verificado. Raspado, volcado central, carga alojada y promoción silenciosa a VERIFIED son rechazados.

Inserción universal (TR-DESK-2026-09-25)

ServiceTitan y ProBooks permanecen como clases de pares nombradas. Una tercera clase de entrada, trades-app, admite la misma familia de exportaciones sin un nuevo documento para cada proveedor. La inserción detecta la forma JSON/CSV y aplica un perfil de mapeo. 0.4.1 prefiere un perfil nombrado cuando las claves, los encabezados o el nombre del archivo coinciden: Jobber, Housecall Pro, Service Fusion, QuickBooks Online, QuickBooks Desktop, ServiceM8, AccuLynx, SuccessWare, Xero, FieldEdge y ServiceTrade. De lo contrario, usa JSON genérico o CSV genérico. Un archivo que aún parece ServiceTitan o ProBooks permanece en esa clase de par. Ver TR-VENDOR-2026-09-25.

npm run drop-in:demo

Esa demo copia accesorios sintéticos de test/fixtures/byo/ a un árbol de entrada temporal, los admite a través de FragGate, genera hash de los paquetes, escribe recibos de aislamiento temporales y demuestra que las escrituras aún fallan. No es un volcado de cliente.

Las exportaciones reales permanecen en las carpetas de entrega ignoradas por git. data/inbound/local.json (copiado de local.json.example) puede nombrar rutas y sugerencias de puntos finales de lectura. Las sugerencias son documentación para el operador. Este proceso no las obtiene.

Escritorio de operador humano

El escritorio es la superficie humana. El MCP de agente sigue siendo un puente de solo lectura sin este cromo.

npm run desk
# http://127.0.0.1:4174/

npm run shadow:field y npm run shadow:office imprimen una lectura de sombra local de esa misma instantánea del escritorio. Ambos comandos, y la página del escritorio, leen data/runtime/<instanceId>/field-events.jsonl (Entrada, Salida, Inicio de comida, Fin de comida, Tiempo de conducción a casa) y el registro de precio del trabajo en data/runtime/<instanceId>/job-prices.json (costo de pieza tipado, mano de obra, tarifas de tarea, margen, descuento bloqueado). No mantienen un segundo registro de eventos. live_backends permanece falso. pilot_started permanece falso. Esto no es una afirmación de Field 1.0 ni Office Softwares 1.0. ServiceTitan, Jobber y otros perfiles de traer el tuyo permanecen de solo lectura. Las escrituras permanecen rechazadas. Un precio de SupplyHouse está presente solo cuando la hoja almacenada ya tiene uno. Esta lectura no inventa un precio y no agrega una ruta de pedido. Los hechos de listado de propiedades permanecen vacíos hasta que exista una fuente permitida.

Se vincula solo a 127.0.0.1. La página muestra gráficos de trabajos / finalización, un gráfico de capacidad, un tablero de misiones y un tablero de técnicos, una reunión matutina, progreso de cumplimiento, alertas y puntuaciones. Llamadas de devolución, llamadas de garantía y un cubo no clasificado se encuentran en las métricas y el tablero de misiones. Cada fila de llamada lleva la razón de clasificación cuando la exportación nombró una etiqueta, y dice no clasificado cuando la exportación está en silencio. Los filtros son ?calls=callback, ?calls=warranty y ?calls=not-classified en la página, /api/snapshot, /api/view, /api/receipt y el flujo SSE. /api/calls/week.json es la tasa de devolución de llamada de la semana anterior por carril comercial. /api/huddle imprime la reunión matutina y /api/huddle.json es el mismo tablero como JSON. La reunión nombra trainingNeeded (gravedad y razón) de observaciones de procedimiento. No es una puntuación de habilidad. El costo de piezas, el comportamiento del departamento y los conteos de camiones están en la misma página. /api/stock lee conteos en furgoneta y almacén. Las millas recorridas y el rendimiento de conducción se encuentran junto a un tablero clasificado de rendimiento de empleados y departamentos. /api/drive y /api/performance son el JSON de bucle de retorno para esos tableros. Un archivo de millas opcional es data/runtime/<instanceId>/drive-miles.json o data/inbound/drive-miles.json. Un archivo faltante permanece desconocido una vez que se admite una exportación local. El escritorio de carpeta vacía etiqueta una demo sintética. Esa demo no es una exportación de empresa ni una fuente de telemática. El rango no es una puntuación de habilidad y no establece trainingNeeded. No se afirma ningún proveedor de GPS. Trabajo en equipo enumera colaboración positiva de la Cadena D, entre oficios y banderas de reconocimiento y nombra quién o qué carril debería emparejarse o transferirse para técnicos de servicio cuando sea necesario y para instalación. /api/work-together es ese tablero. La tasa de fricción de empleados se encuentra en el mismo tablero de rendimiento y en /api/friction. Cuenta fallos de transferencia, banderas de coordinación, devoluciones de llamada explícitas y transferencias retrasadas en esta máquina. Una exportación en silencio permanece desconocida. El rango de fricción 1 es la fricción conocida más alta, no el mejor rendimiento. No es un sistema de RRHH alojado y no establece trainingNeeded. Esas rutas permanecen en esta máquina. Cada puntuación y banda de ritmo incluye un breve por qué. Los aciertos de reglas de alerta actuales se exportan como JSON o CSV desde /api/alerts/digest.json y /api/alerts/digest.csv en esta máquina. /api/receipt imprime qué bloqueó la reserva cuando hay un bloque presente, y dice cuando nada está bloqueando. TR-DESK-POLISH-2026-09-25 agrega espaciado y tipo, un tema claro/oscuro almacenado en este navegador (trades-desk-theme), una vista de carril y una instantánea imprimible en /api/receipt. El carril es un conteo de espacios, o un token de oficio conocido cuando la exportación nombra uno (hvac, plumbing, electrical, sewer, cross-trades). Un nombre de ciudad no es un carril. No se dibuja ningún mapa. La instantánea es HTML que el operador puede imprimir o guardar como PDF. Cita identificadores de recibos locales y no incluye cuerpos de recibos. Nada en esa página llama a casa. Las puntuaciones usan el ritmo de misión, la banda de confianza de evidencia, la verificación (UNVERIFIED) y recommendBlock. La confianza de predicción permanece retenida en una entrega BYO. La confianza registrada del día de sombra sintética aparece solo en la demo sintética, etiquetada como accesorio. Una carpeta de entrada vacía muestra esa demo sintética. Soltar un archivo actualiza el siguiente tick SSE (aproximadamente 2s) y la etiqueta cambia a admitido BYO, o ejercicio sintético admitido BYO cuando cada archivo declara synthetic: true.

Reglas de alerta locales (TR-ALERTS-2026-09-25)

Las mismas puntuaciones impulsan umbrales locales: capacidad (espacios abiertos, solo cuando existe un carril), trabajos atrasados (filas sin terminar contra el reloj de misión), banda de confianza (piso de confianza de evidencia o una entrega recordada en esta máquina), bloqueo de reserva (recommendBlock) y estancamiento de verificación (la puntuación de verificación permanece UNVERIFIED o CONFLICTED durante N minutos desde la observación más antigua). No se calcula ningún porcentaje de precisión. Un reloj faltante no inventa un estancamiento. Espacios abiertos en blanco en un escritorio BYO no inventan un porcentaje de utilización.

Copie data/runtime/alerts.json.example a data/runtime/<instanceId>/alerts.json (ignorado por git). data/inbound/local.json puede establecer alertsPath o un objeto alerts. El banner del escritorio muestra reglas no reconocidas. El panel de alertas muestra reglas activas, historial y reconocimiento. Reconocer es un POST local en 127.0.0.1 y escribe solo alert-state.json. Los ganchos opcionales agregan un archivo JSONL local o publican en bucle de retorno (127.0.0.1, localhost, ::1). Cualquier otro host de webhook es rechazado. Sin llamada a casa.

Calidad entrante, stubs de alerta y puerta de inicio de Opción C (TR-QUALITY-2026-09-27)

/api/inbound-quality y /api/inbound-quality.txt puntúan fragmentos de ServiceTitan y ProBooks ya en esta máquina. El escritorio grafica volumen por sourceKind, distribución de puntuaciones de lista de verificación y clases de defectos principales de ese informe local. Las carpetas vacías usan un accesorio sintético etiquetado. La lista de verificación no es un porcentaje de precisión ni una extracción de inquilino en vivo. Los archivos aterrizan en data/runtime/<instanceId>/inbound-quality.json, .txt y .jsonl. /api/alert-actions devuelve solo stubs. Una alerta activada se expande a una etiqueta, una justificación, la autoridad humana requerida y refused: write-back. La Regla de Autoridad Humana está en el panel. Los stubs no llaman a ServiceTitan ni a ProBooks.

/api/option-c-start-gate enumera las condiciones de inicio. Cada compuerta permanece bloqueada-hasta. La Opción C permanece en preparación hasta que un operador humano inicie un piloto real. La Opción D está fuera de alcance. No hay transición. El catálogo enviado mantiene pilot_started en falso. live_backends permanece en falso. El panel no inicia el piloto.

/api/monitoring es una vista de escritorio: pines de técnicos y camiones locales o de demostración, tarjetas de tiempo, un mapa de cobertura en vivo, sugerencias de técnico adecuado, tarjetas de puntuación de conducción, tarjetas de puntuación de técnicos, un tablero de llamadas estilo despacho y gráficos de KPI. Los pines provienen de data/runtime/<instanceId>/positions.json, data/inbound/positions.json o coordenadas copiadas de un archivo de millas local. Copie data/runtime/positions.json.example. Una carpeta vacía usa una demostración sintética etiquetada. Un archivo rechazado no se reemplaza con esa demostración. Los totales de millas aún ignoran las coordenadas. El mapa de direcciones permanece sin dibujar. Esto no es una fuente de GPS en vivo ni un proveedor de telemática. La vista se recalcula cuando los archivos locales cambian. Solo monitoreo. La Regla de Autoridad Humana permanece en el panel. Nada se escribe de vuelta a ServiceTitan o ProBooks.

/api/time-tracking es el tablero de tiempo local: tiempo registrado en la llamada actual, tiempo transcurrido, tiempo restante estimado y segmentos de inactividad o viaje. Copie data/runtime/time-cards.json.example a data/runtime/<instanceId>/time-cards.json o data/inbound/time-cards.json. El escritorio escribe time-tracking.json y time-tracking.jsonl bajo data/runtime/<instanceId>/. Un archivo faltante permanece vacío una vez que se admite una exportación local. El escritorio de carpeta vacía etiqueta una demostración sintética. Esa demostración no es un reloj de empresa ni una fuente de GPS.

/api/coverage son códigos postales, condados, ciudades y carreteras o autopistas, con interruptores de encendido/apagado. Copie data/runtime/coverage.json.example a data/runtime/<instanceId>/coverage.json o data/inbound/coverage.json. Los interruptores persisten en coverage-layers.json en esta máquina (POST /api/coverage/layers). Los conteos son lugares, trabajos y técnicos de ese archivo local. No es un proveedor de mapas de teselas en vivo. El mapa de direcciones permanece sin dibujar.

/api/right-tech (y /api/tech-fit) clasifica a los técnicos para un trabajo abierto o programado según geolocalización, tiempo restante estimado y ajuste de habilidades. ?job= opcional. Solo sugerencias. Sin despacho automático. Sin escritura de retorno. La fricción y los minutos de conducción local pesados son banderas. La geografía no es el único factor.

El operador puede activar o desactivar tableros, métricas, KPIs, técnicos, puntuaciones, gráficos, carriles, alertas, columnas de llamadas y medidas de misión. Cada casilla comienza activada. La elección se almacena en este navegador bajo trades-desk-view y no se envía fuera de la máquina. TR-DESK-VIEW-2026-09-27.

La misma página es utilizable a aproximadamente 375px. Una navegación de dominio fija salta a cada tablero. Los encabezados de enlaces, gráficos de monitoreo y tablas anchas se desplazan dentro de la página en lugar de ensancharla. El tema, los filtros, el reconocimiento, la divulgación de stubs, la impresión y cualquier input, select o textarea tienen al menos 44px de alto, con relleno de área segura. Las cuadrículas de tarjetas de Softwares de ventana ancha permanecen como están. Aún no hay formulario de entrada de datos de inquilino. TR-MOBILE-DESK-2026-09-27. Las tarjetas públicas de Worker no son parte de este corte.

El Worker público puede citar npx tsx src/cli.ts desk y /local-desk como notas de instalación. No aloja el escritorio, los enlaces de alerta ni las métricas de inquilino. Este repositorio no despliega el Worker.

npm run byo:admit-demo es prueba de software de operador con fixtures sintéticos bajo test/fixtures/byo/. Copia esos fixtures en un directorio de entrada temporal, los admite vía FragGate como servicetitan + probooks, genera hashes de paquetes, escribe recibos de aislamiento bajo un data/runtime/<id>/ temporal, imprime hashes y demuestra que wrapper ≠ VERIFIED mientras las escrituras de ST/ProBooks aún fallan. No es un volcado de cliente. El nodo de autoría no es un custodio de datos.

Las exportaciones reales de usuarios pertenecen solo a la máquina de ese usuario bajo data/inbound/{servicetitan,probooks,trades-app}/ (ignorado por git excepto .gitkeep).

Los nombres heredados provienen solo de specs/aziel-runtime-inheritance.txt. Esto no es una copia completa de aziel-runtime Softwares.

Escalera (honesta)

OpciónSignificadoEstado
ASolo fusiónhecho
BColumna localhecho en software
CSombra de una ramacódigo listo / piloto no iniciado
DPiloto de bloqueo con asesoríano iniciado

El software para la Opción C existe (rama nombrada, reglas de participación, arnés de liquidación sellado, demostración sintética). Eso no es un piloto de empresa o de campo. No le diga a un gerente general que el sistema operativo de la empresa está en vivo. No falsifique la Opción C como un piloto de empresa en vivo. La Opción D sigue siendo NO.

TR-OPTION-C-PREP-2026-09-25 es la lista de verificación de la caja del operador: instalación local, carpetas de entrega de entrada, configuración de ejemplo, admisión sintética, escritorio y alertas, expectativas de SHADOW-SEALED, prueba de rechazo de escritura y qué no hacer. npm run pilot:prep ejecuta esas verificaciones e imprime un recibo. ready: true significa que la máquina pasó. Ese recibo mantiene pilot_started en falso. El comando no abre un día sellado contra los reales de la empresa y no escribe en ServiceTitan, ProBooks o una aplicación de oficios.

TR-OPTION-C-PILOT-RUNBOOK-2026-10-02 es cómo un operador inicia un piloto real con el comando enviado. Después de que la preparación esté en verde, una persona en la caja del operador ejecuta npm run pilot:start -- --branch <branchId> (CLI pilot-start). Se requiere una rama nombrada. El comando reutiliza las verificaciones de preparación. Rechaza una rama faltante o incorrecta, preparación que no está lista y --claim-company cuando la entrada está vacía o es solo sintética. El éxito escribe data/runtime/<instanceId>/pilot.json y una línea en receipts.jsonl solo para ese aislamiento. El catálogo enviado, la salud predeterminada, glama.json y el pin del Worker de regalo permanecen 1.0.0-local con pilot_started en falso. El modo permanece en SHADOW-SEALED. live_backends permanece en falso. Las escrituras permanecen rechazadas. Un cambio de modo explícito no inicia el piloto. El recibo dice que esto no es un sistema operativo de empresa en vivo, no Field 1.0 y no Office Softwares 1.0. Fusionar esta documentación no inicia un piloto. Un humano debe ejecutar el comando en una rama real lista para preparación. TR-PILOT-START-2026-10-02 es el corte que envió el comando. Este repositorio no despliega el Worker y no hace Make Release.

Solo humano/operador: una ruta real de ServiceTitan en su caja, un gerente general nombrado y días sellados contra sus reales. El nodo de autoría no contiene ese volcado. Un recibo de preparación no es ese piloto.

Worker de regalo público

La superficie pública autorizada por el operador es un Cloudflare Worker:

https://trades-runtime.vibelock.workers.dev

Nombre del script del Worker: trades-runtime (mismo patrón de cuenta vibelock workers.dev que aziel-runtime.vibelock.workers.dev). Fuente: workers/giveaway/.

Qué es:

  • UI de regalo humano en este host VibeLock (navegador / PWA): honestidad, citas, MCP, habilidad y estadísticas, utilizable sin descargar primero
  • Tarball Apache-2.0 contado opcional en GET /download (se incrementa solo después de un 200 gzip verificado)
  • /local-desk cita la instalación local de npx tsx src/cli.ts desk. No aloja métricas de inquilino ni un tablero de empresa en vivo
  • /openapi.json y POST /mcp de solo lectura delgados para clientes de IA (salud / estadísticas / citas / habilidad solo)
  • Superficies de rastreo Growth-ON: /robots.txt (Allow completo + Content-Signal), /sitemap.xml, /ai.txt, /humans.txt, /.well-known/mcp.json, /person.jsonld, /graph.jsonld
  • Puente MCP stdio para Glama / Claude Desktop / Cursor: npm run mcp → cli/mcp-stdio.mjs (reenvía al Worker POST /mcp)
  • Contadores honestos de Workers KV (COUNTS): views y downloads comienzan en 0; se incrementan solo en respuestas 200 exitosas; sin muestreo, sin semilla, sin inflación

Despliegue (operador / caja con autenticación de wrangler)

Este repositorio no despliega el Worker. Primera vez en la cuenta vibelock:

npm ci
npm test
cd workers/giveaway
npm ci
npx wrangler kv namespace create COUNTS
# paste the printed id into wrangler.jsonc kv_namespaces[0].id
npm run pack
npx wrangler deploy

Despliegues posteriores desde la raíz del repositorio:

npm run giveaway:pack
cd workers/giveaway && npx wrangler deploy

Prueba local de humo (Miniflare KV, sin autenticación de Cloudflare requerida):

npm run giveaway:pack
cd workers/giveaway
npx wrangler dev
# GET http://127.0.0.1:8787/  /download  /v1/health  /v1/stats  /robots.txt  /sitemap.xml  /ai.txt

Contadores: ver workers/giveaway/README.md.

Glama (paquete de servidor de instalación)

Listado previsto: Probar en Glama

La URL del listado está documentada para que agentes y humanos puedan encontrarla. El paquete Git (glama.json + Dockerfile + cli/mcp-stdio.mjs) es lo que Glama necesita para indexar y alojar un proceso stdio. Install Server no se declara EN VIVO solo desde este árbol git. Pasos: docs/GLAMA.md.

No invente puntuaciones TDQS de Glama. El listado Latest coincide con la cita de Softwares. Esa coincidencia no es Field 1.0 ni Office Softwares 1.0.

Verificado 2026-10-02: Glama Latest/releaseVersion es 1.0.0-local (latestRelease.version en https://glama.ai/mcp/servers/@AzielEliab/trades-runtime). La insignia coincide con la cita de Softwares. Softwares local 1.0. Esa coincidencia no es una afirmación de Field 1.0 ni Office Softwares 1.0. La versión glama.json es el archivo de afirmación en el repositorio (1.0.0-local) y coincide con esa insignia. La fuente del Worker en este repositorio es 1.0.0-local. El pin de versión del Worker de regalo es 1.0.0-local. Verificado 2026-09-28: el Worker ya en ejecución sigue siendo 0.4.12. Este corte no despliega y no hace Make Release. pilot_started falso. live_backends falso.

Local / Docker:

npm run mcp
# or
node cli/mcp-stdio.mjs
docker build -t trades-runtime-mcp .
docker run --rm -i trades-runtime-mcp

Pages (deshabilitado intencionalmente)

GitHub Pages está deshabilitado intencionalmente. No hay .github/workflows/pages.yml. No agregue un flujo de trabajo de despliegue de Pages. No habilite Pages en el repositorio. No trate una URL de github.io como una superficie de producto en vivo.

El software es libre de clonar. GitHub Pages permanece apagado. No habilite Pages. No agregue PDFs bajo docs/. Una UI de navegador, si un Worker ya está desplegado, es https://trades-runtime.vibelock.workers.dev.. Este repositorio no despliega ese Worker. El tarball contado es opcional.

Vista previa de UI local (Pages permanece apagado):

python3 -m http.server 4173 --directory docs

Catálogo de máquinas: docs/v1/runtime.json. UI de módulos: /modules/.

Qué no es esto (§1.2)

No es un optimizador simple de despacho. No es un tablero de ingresos como habilidad. No es un planificador fijo de rutas matutinas. No es una caja negra autónoma que anula silenciosamente a los humanos. No es foto como prueba de mala conducta. No es combustible primero. No es una penalización automática de devolución de llamada de 30 días. No es un portal de PDF.

Licencia

Apache License 2.0. Ver LICENSE.