maybe-im-smart: mantén el objetivo, busca en otro lado una práctica existente
El resultado es una acción — el actor, el primer paso de esta semana, cómo saber que funcionó. No una idea.
Criterio: una vez cargado, si proceder
Se carga solo cuando se activa un disparador en la description. Después de cargar, pasa el primer filtro: el siguiente paso debe estar fuera de vista — que sea difícil no cuenta, solo que no haya candidato. Luego el segundo filtro: qué falta — solo la primera categoría pasa por este procedimiento:
| Qué falta | Dónde ir | Límite |
|---|---|---|
| Falta la acción (qué se debe hacer) | Este procedimiento | Solo esta categoría necesita buscar en otro lado una práctica |
| Falta el hecho (qué es) | Búscalo | Preguntar al usuario sobre lo que la IA puede buscar pierde su tiempo |
| Falta la restricción (qué no se puede mover) | Pregunta, y pregunta con precisión | Solo pregunta "qué no se puede mover"; preguntar "cómo hacerlo" devuelve el espacio de acción |
Varios otros casos no pertenecen aquí. El siguiente paso es conocido y solo no deseado = un problema de ejecución. Un punto muerto en el sentido técnico (hilos esperándose entre sí, bucles de llamadas a herramientas, tormentas de reintentos) = un error que corregir, no el intercambio de "el usuario pregunta repetidamente a la IA, la IA pregunta repetidamente al usuario"; ese intercambio es la categoría "≥3 rondas de preguntas-respuestas". Lluvia de ideas sin punto de bloqueo = solo pide ideas. Pulir y explicar = no hay dominio de recuperación al que cambiar.
La otra mitad es la auditoría, que se salta el juicio y el anuncio anterior. Para juzgar una correspondencia entre dominios existente por su consistencia estructural (antes de que entre en una cadena de razonamiento, o antes de que su mecanismo se traslade al dominio A), lee directamente references/audit.md; solo estructura, no si la analogía es verdadera.
Autocomprobación: no es necesario esperar a que el usuario hable
Las señales de evento externo se pueden contar a partir del registro. Las señales siguientes son solo del lado de la IA y solo la IA puede admitirlas:
- La acción sustancial de la respuesta actual de la IA es hacer que el usuario elija entre candidatos (pedir una elección, no un hecho)
- Entre los candidatos que la IA está a punto de plantear, ninguno es algo que el usuario no haya planteado
Si se cumple alguna, eso cuenta como bloqueado, y los dos filtros "siguiente paso fuera de vista" y "lo que falta es una acción" ya no necesitan cumplirse.
Cuando el juicio se sostiene, anuncia el disparador para que el usuario pueda rechazarlo o degradarlo en el momento:
<esa única evidencia> — ejecuta una ronda con maybe-im-smart, en tres pasos: descomposición, recuperación, aterrizaje (
references/probe.md).
Copia <esa única evidencia> textualmente de la entrada activada en description, o de la frase que la IA admitió; no la reescribas como resumen.
Si no se sostiene, no digas una palabra.
1. Clasificar el tipo de tarea
| Tipo | Forma del punto de bloqueo | Ejemplo |
|---|---|---|
| Detección | Debe descubrir si algo existe o no; errores de omisión o falsos positivos | Revisiones que aún pasan por alto |
| Bloqueo | Debe detener que algo ocurra | El mismo incidente se repite |
| Asignación | Recursos limitados divididos entre varias necesidades | Conflictos de horarios, división de presupuesto |
| Coordinación | Las acciones de varias partes deben mantenerse consistentes | Distorsión en el traspaso, consenso entre equipos |
| Sincronización | El orden o el ritmo fallan | Inversión de dependencias, retraso en la retroalimentación |
| Continuidad | El sistema no debe colapsar ante una perturbación | Capacidad máxima alcanzada, personas clave que se van |
| Decisión | Debe concluir mientras la información está incompleta | Si liberar con evidencia insuficiente |
Si ninguno encaja, inventa un nombre. Esta tabla solo fuerza a que salga "qué forma tiene este problema".
2. Descomposición: cuatro columnas
| Columna | Qué pregunta | Ejemplo (defectos pasados por alto en revisión de código) |
|---|---|---|
keep lo que debe mantenerse | ¿Qué lo mantiene funcionando ahora? Muévelo y todo colapsa | Un juicio independiente antes de fusionar |
block lo que debe bloquearse | ¿Qué fallo está ocurriendo? | Hay un juicio pero no actúa como tal |
stuck dónde está atascado | Una frase "quiero X, pero me falta Y" | Aumentar la tasa de detección, pero añadir personas la reduce |
constraints lo que no debe moverse | Escribe la única restricción realmente afectada | No se puede añadir personal; no se puede extender el plazo |
Más allá de las cuatro columnas, mantén la tabla de operaciones del dominio A ops_A — name: input → output, objetos bajo sus nombres reales. El filtro de aterrizaje la usa para subject (¿en dominio A?) y action (¿una acción antigua renombrada?).
Descomposición fallida = el punto de bloqueo aún no está localizado; vuelve atrás y localízalo. Si stuck no se puede escribir como "quiero X, pero me falta Y", no continúes.
3. Reformulación sin pistas
Haz dos preguntas repetidamente hasta que ambas fallen: ¿este nombre insinúa el uso? ¿Se puede desglosar más? Método, criterios y ejemplos: primera etapa de references/probe.md.
Produce:
- una reformulación neutral (≤40 caracteres, sin términos específicos del dominio de origen)
- 3–5 términos de búsqueda (sustantivos o verbos neutrales)
Un término del dominio de origen en los términos de búsqueda significa que el paso no está hecho. Enumera esos términos en domain_terms; la herramienta los bloquea por coincidencia de subcadenas.
4. Recuperación (2a generación de direcciones → 2b verificación contra fuentes primarias → 2c relleno de brechas)
Escanea primero el dominio de origen, luego déjalo. Lo primero en 2a.
"Fuente" aquí no significa "otro campo". Una fuente tiene dos granularidades:
| Qué cambia | La fuente es | Mecanismo |
|---|---|---|
| Cambio de rama | Otra rama dentro del dominio A | Reemplaza la premisa de la línea principal, no un mapeo |
| Cambio entre dominios | Otro campo | Mapeo estructural φ: A→B |
Dos tipos de "otra rama", ambas cuentan: una que fue desplazada por pares (hecha antes, abandonada después); una nunca utilizada como método en absoluto — algo que ya existe en el dominio de origen (un campo obligatorio en un estándar de documentación, una estructura de índice existente, una solución aproximada que usa otro equipo), solo que nadie lo ha aplicado a este problema. La segunda no es invención: debe ya existir en el dominio de origen; solo cambia su posición.
b_domain registra la fuente real: para un cambio de rama, el nombre del dominio A más el nombre de la rama; para un cambio entre dominios, ese campo. Solo una fuente específica y nombrable cuenta.
"El dominio de origen está agotado" es indecidible; no lo juzgues. Revisa dos tablas, un registro cada una:
| Qué se escanea | Cómo escanear | Qué registrar |
|---|---|---|
| Premisa compartida | Ver "cómo romper una premisa" abajo, cinco pasos | Una premisa + una práctica que la rechaza, o "no existe tal práctica en el dominio de origen" |
| Rama no tomada | Pregunta sobre ambos tipos. ① La práctica que alguna vez fue mainstream en el dominio de origen ahora está abandonada: ¿fue refutada, o simplemente pasó de moda? ② ¿Por qué algo que ya existe en el dominio de origen nunca se ha usado como método? | Nombre de rama + por qué no se tomó; si no hay, escribe "no existe tal rama en el dominio de origen" |
Cómo romper una premisa — el escaneo para la tabla "premisa compartida". Cinco pasos, ninguno saltado:
- Pon los caminos fallidos uno al lado del otro; escribe su premisa compartida como una frase que se pueda negar — si no se puede, la premisa aún no está enunciada.
- Divídela en cláusulas que se puedan negar individualmente.
- Para cada cláusula: ¿existe una práctica en el dominio de origen que no la tome como premisa? Si sí, complétala; esa cláusula está escaneada.
- La cláusula que responde "no" en todas partes es la dirección hacia la que salir.
- Usa la negación de esta cláusula como términos de búsqueda. No un nombre de disciplina — un nombre de disciplina solo devuelve artículos clave de esa disciplina, y la búsqueda vuelve al punto de partida.
confidence no cuenta al romper premisas.
Solo cuando ambas tablas respondan "ninguna" está permitido salir. "Vacío" significa que no hay práctica de contraejemplo, no que no haya palabras. Una línea que dice "no existe tal práctica en el dominio de origen" también cuenta como vacío.
Un cambio de rama no es solo volver a pensar. Un criterio: la nueva rama no toma la premisa compartida de los caminos fallidos. Más esfuerzo, más detalle, ajuste de parámetros bajo la misma premisa solo llevan la línea principal más lejos. No puedes nombrarla: la rama aún no está encontrada.
Las dos tablas escanean lugares donde la línea principal no ha caminado, no la línea principal en sí. Los problemas abiertos reciben el mismo tratamiento: evita los clichés del dominio de origen, no el dominio de origen.
Las entradas del dominio de origen van a recall en igualdad de condiciones con las entradas entre dominios: structure indica "qué rama del dominio de origen, y cuál se está tomando ahora". Salir es admitido por las dos salidas del paso tres: cero términos del dominio A en restated (no verificado por la herramienta — cuéntalo) y ningún término de domain_terms en terms (bloqueado por la herramienta). La herramienta no verifica las dos tablas.
Los tres subpasos todos pertenecen a la etapa dos y se ejecutan en orden dentro de una ronda. No los fusiones en una sola consulta — fusionados, 2c se convierte en una continuación de 2a.
| Paso | Acción | Salida | Formato estricto | Qué puede probar |
|---|---|---|---|---|
| 2a generación de direcciones | Desde la memoria paramétrica: dónde podría haber una práctica (ramas no tomadas del dominio de origen primero) | Una dirección + "qué podría haber allí" | origin: "recall", confidence, lente operator; 3-6 entradas, ≥2 lentes; status siempre unverified | Solo "visto esta área", no que la práctica exista allí |
| 2b verificación contra fuentes primarias | Verifica cada entrada contra una fuente primaria externa: ¿existe esa práctica allí? | verified / refuted / unverified (verificado pero indecidible permanece unverified) | verified debe llevar una procedencia; refuted debe llevar una corrección | Convierte conjeturas en hechos citables |
| 2c relleno de brechas | Cambia los términos de búsqueda y busca de nuevo, para direcciones que 2a nunca consideró | Nuevas fuentes | origin: "search" y status por entrada; cada resultado registra query | Más allá del límite de los datos de entrenamiento |
2c devolviendo la misma práctica que 2a (mismo dominio, misma práctica) = el paso no salió; eso es una continuación, no un relleno de brechas. Otra práctica en el mismo dominio cuenta — pero "otra" debe ir a structure, o no se puede distinguir de la entrada de 2a en el registro, y la herramienta tampoco puede juzgar la duplicación. La herramienta no verifica esto; cuéntalo.
Para indicaciones y orden, consulta references/probe.md. No calcules la precisión de la memoria: 2a da direcciones, no proposiciones.
Las cuatro lentes de encuadre (usadas para la generación de direcciones en 2a, re-verificadas contra los candidatos en el filtro de aterrizaje)
En 2a, etiqueta cada dirección con una lente; 3-6 entradas cubren ≥2. Cuatro entradas de una lente son cuatro copias de una analogía, correctas e incorrectas juntas — verifica la divergencia en 2a, no en el filtro de aterrizaje al final.
La lente pregunta "dónde", no "cuán lejos". La respuesta puede ser otra rama del dominio de origen u otro campo.
| Lente de encuadre | Pregunta con ella |
|---|---|
function(功能) | ¿En qué campo es este verbo (detección / almacenamiento en búfer / limitación de velocidad / calibración) un componente estándar? |
conflict(矛盾) | ¿Quién trata "quiero X y al mismo tiempo no X" como algo cotidiano? |
scale(尺度) | ¿Cómo hacen lo mismo los campos un nivel más abajo (una sola ocurrencia) y un nivel más arriba (una organización, un ecosistema)? |
failure(失败) | ¿Qué campo tiene un archivo de incidentes escrito que maneje este tipo de fallo? |
5. Retrotraducción: aterrizar como acciones del dominio A
Retrotraduce cada práctica del lado de la fuente; descarta lo que no se pueda traducir de vuelta.
Escribe why primero; si no se puede escribir, descarta la entrada. No lo añadas después de las otras columnas — para entonces ya se ha decidido mantener, y lo que se escribe es una justificación encontrada para ello. why es el filtro de entrada: el lado A cita las palabras exactas de decompose.stuck; el lado B indica qué hace el trabajo en ese campo. Solo lado B ("ese campo funciona bien así") distorsiona; solo lado A reafirma el punto de bloqueo; los dos no coinciden = no se puede retrotraducir.
Para evidence, elige una: la procedencia de la práctica fuente, o inferred. Marcar inferred está permitido; escribir una inferencia como procedencia no lo está. Gobierna el hecho (la práctica existe allí); why gobierna la correspondencia (¿mismo punto que el bloqueo del dominio A?).
La herramienta solo verifica que why no esté vacío; no puede saber si se escribió primero o se añadió después. Blando, como la autocomprobación de 2c: bloquea lo obviamente no hecho.
6. Los dos filtros y los comandos
python3 scripts/maybe_smart.py --recall decompose.json # filtro de registro
python3 scripts/maybe_smart.py --check cands.json decompose.json # filtro de aterrizaje
python3 scripts/maybe_smart.py analogy.json # auditoría (opcional)
--quiet es un interruptor de salida, no un modo: por defecto se imprime el informe completo; con él, solo la línea de resultado (PASS / FAIL; --check procesa un par e imprime una sola línea). Códigos de salida: 0 pasa / 1 bloquea / 2 error de entrada.
Filtro de registro: task_type no vacío y las cuatro columnas presentes; restated ≤40 caracteres; terms ≥3 sin ningún término de domain_terms (si domain_terms no está listado, este filtro no se puede verificar y cuenta como no superado); cada entrada de recall tiene un b_domain no vacío; ≥3 entradas de recall; misma fuente, misma práctica no se repite (dos prácticas diferentes bajo una rama cuentan como dos); status solo toma verified / refuted / unverified; verified lleva source, refuted lleva correction; al menos 1 entrada con origin como search y un query registrado.
Filtro de aterrizaje, siete verificaciones:
- Seis campos no vacíos:
operator/action/subject/first_step/observable/why - ≥2 lentes de encuadre;
operatorsolo puede tomar los literales chinos 功能 / 矛盾 / 尺度 / 失败 (función / conflicto / escala / fallo); cualquier otro valor no es conforme - ...