CreaRack-SL

Partición del method-doctor (09-09-2026): núcleo genérico + extensión de equipo

Qué se decidió

Segunda pieza del escalón grande (tras la partición de los function hooks de s315): el doctor del harness, harness/method-doctor.ps1, mezclaba lo transversal (repo del método al día, plugins activos, paridad de reglas, Python, hooks de git, Biblioteca viva, simulacro) con lo que presupone pertenecer al equipo CreaRack (identidad edu/dani/txell, plugins de equipo, token y publicación al rollup, repos de la organización). El plan v7 (public/supercontext/doctor-split/PLAN_DOCTOR_SPLIT.md, tres paneles fríos, 29 objeciones) lo APROBÓ Edu en s317 con dos decisiones: el núcleo se queda en harness/ y -NoExtensions es modo genérico de verdad. Se ejecutó en s318.

Qué se hizo

PiezaDóndeQué
Núcleo genéricoharness/method-doctor.ps1Capas A-E, G, H en cualquier repo de cualquier perfil. Parámetros nuevos -NoExtensions (sin extensiones y capa B al suelo fijo) y -UserClaude <dir> (pruebas contra una copia; excluye -Repair). Descubre extensiones por declaración y las carga por dot-source en try/catch con sello de completitud: declarada y ausente, o cargada a medias, = issue high de la capa extension, se descarta lo que fijó y no se publica
Extensión de equipoplugins/crearack/harness/doctor-crearack.ps1 (declarada en plugin.json → doctorExtension)Identidad, team-plugins.txt, plugin v1 retirado, capa F, publicador al rollup, patrón de la org para el barrido de hooks, remotos que “declaran Biblioteca”, scope team del simulacro. Escribe solo seis variables $script:Ext*; la última línea es el sello
Fuente única de pluginsharness/method-plugins.txtQué plugins del método lleva el perfil; la leen el instalador (habilita) y el núcleo (vigila). Suelo fijo method + method-hooks escrito en ambos; vacío o sin suelo = aviso + critical, nunca verde falso. Decidir qué perfil lleva crearack* es editar este fichero
Simulacroharness/gate_selftest.py --scope generic,teamgeneric = hooks fuera de plugins/crearack/; hook ausente se salta, no falla
Skills/method:doctor (plugin method 3.5.0) · /crearack:method-doctor puntero (plugin crearack 2.3.0)iniciar-proyecto manda /method:doctor en el proyecto nuevo

Commits en claude-method: 5017a08 (parámetros + reordenación, JSON idéntico) y f96628f (extensión, fuente única, skills, guía). Tag de marcha atrás pre-doctor-split-2026-09-09; snapshot en claude-backups/edu/harness-snapshots/2026-09-09-pre-doctor-split.

Qué cambia para los tres perfiles

Nada observable: los tres siguen llevando los cuatro plugins (method-plugins.txt los lista) y el doctor imprime el mismo veredicto, ahora con el sello “extensión: crearack”. Lo que se gana: el doctor sirve en un perfil sin crearack (perfil general, otro equipo, un proyecto del Iniciador), y el código de equipo vive en su plugin, como los function hooks.

Verificado (PC de Edu, 09-09-2026)

  • Paridad: JSON del doctor en Pro, estado real y sembrado (regla alterada, marcador sin report_url, token vacío), idéntico antes y después tras el push; las 36 llamadas Add-Issue del script viejo están todas en núcleo + extensión.
  • Núcleo solo: -NoExtensions no acusa de equipo (sin issue de token), no acusa a FableCities de marcador ausente, y el barrido de hooks pasa de 6 repos a 3 (solo adoptados).
  • Extensión: token vacío, crearack-hooks fuera de enabledPlugins, plugin inventado en team-plugins.txt, crearack fuera de enabledPlugins → en cada caso solo el issue esperado; la extensión carga por lista aunque el plugin no esté habilitado (el caso de s177).
  • Arranque: session-start.ps1 en Pro, FableCities y claude-method imprime el veredicto con el sello; return a mitad, error de sintaxis y fichero renombrado dan su issue extension, perfil genérico y sin publicar.
  • Rollup: edu verde con f96628f el mismo día. dani/txell: verdes con f96628f el 09-09 tras reiniciar la estación (C4 hecha), reconfirmados el 10-09 con 9d9449e. Plan cerrado el 10-09; las piezas siguientes van al grill del “harness al perfil general”.

Trampas cazadas al ejecutar

  • En PowerShell los nombres de variable no distinguen mayúsculas: en el ámbito de un script $extPublisher es la misma variable que $script:ExtPublisher. Una copia local inicializada a $null borró el publicador y el rollup dejó de recibir; se cazó por el efecto (la hora del rollup no avanzaba). Las copias del núcleo llevan prefijo core.
  • "$var:" dentro de una cadena se lee como variable con ámbito: ${var}:.
  • claude plugin validate admite el campo doctorExtension con aviso de “campo desconocido, se ignora al cargar”: es lo esperado, lo lee el doctor, no Claude Code.

Piezas siguientes (anotadas, sin fecha)

Mover reject_powershell_herestring.py y guarda_modelo_subagentes.py al plugin method (hoy scope team); partir session-start.ps1 en genérico/equipo. Apuesta #20 en WAGERS.md (vence 09-10-2026).