协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
monitor-binary-version-baselines【开发与工程】Establezca y mantenga líneas base longitudinales del contenido de binarios CLI a lo largo de las versiones. Cubre la selección de marcadores por categoría (API / identidad / configuración / telemetría / flag / función), puntuación ponderada, detección de presencia del sistema por umbral y registros de línea base por versión. Úselo al seguir el ciclo …
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Construya y mantenga registros comparables, indexados por versión, de qué marcadores de sistema de función aparecen en un binario de arnés CLI, de modo que adiciones, eliminaciones y capacidades dark-launched puedan detectarse mecánicamente a lo largo de los lanzamientos.
grep ad-hoc responde "¿está X presente hoy?" pero en realidad se necesita "cómo se ha movido el sistema compuesto por X, Y, Z a lo largo de las versiones"Elija cadenas que sobrevivan a las reconstrucciones. Escoja identificadores estables y semánticamente significativos — no nombres minificados que el empaquetador renombrará en el próximo lanzamiento.
Seis categorías recomendadas:
Evite: identificadores cortos que parezcan minificados (p. ej., _a1, bX, nombres de dos letras seguidos de dígitos), literales en línea que cambiarían con cualquier revisión de texto, cualquier cosa que coincida con la convención de nombrado interno del propio empaquetador.
Expected: Cada marcador candidato tiene una etiqueta de categoría y una breve justificación ("aparece en documentos de cara al usuario", "estable durante N lanzamientos previos", etc.). Una primera pasada típica arroja 20-50 marcadores por sistema.
On failure: Si los marcadores desaparecen entre versiones menores consecutivas, el catálogo ha capturado cadenas volátiles a la reconstrucción en lugar de identificadores estables. Descarte esas entradas; amplíe a subcadenas más largas y semánticamente más ancladas.
Agrupe los marcadores en una tabla de sistema por cada capacidad que evoluciona de forma independiente. Un "sistema" es un conjunto coherente de marcadores cuya presencia/ausencia se mueve junta porque comparten el ciclo de vida de una función (p. ej., todos los marcadores pertenecientes a una hipotética capacidad acme_widget_v3).
Por qué importa la agrupación: la puntuación por sistema evita la contaminación cruzada. La ausencia de los marcadores de un sistema no debe suprimir la detección de otro, y los recuentos agregados entre sistemas no relacionados no son informativos.
Forma de un catálogo de trabajo (pseudocódigo):
catalog:
acme_widget_v3:
markers:
- { id: "acme_widget_v3_init", category: function, weight: 10 }
- { id: "acme.widget.v3.dialog.open", category: telemetry, weight: 5 }
- { id: "ACME_WIDGET_V3_DISABLE", category: flag, weight: 10 }
acme_other_system:
markers:
- ...
Expected: Cada sistema tiene su propia lista de marcadores; ningún marcador aparece en dos sistemas. Añadir un nuevo sistema significa añadir una nueva entrada de primer nivel — nunca mover marcadores entre sistemas retroactivamente.
On failure: Si los marcadores son difíciles de asignar a un sistema (solapamiento, ambigüedad), las definiciones de sistema son demasiado burdas. Divida el sistema, o acepte que algunos marcadores son "sustrato compartido" y excluyalos de la puntuación por sistema.
Asigne a cada marcador un peso que refleje cuánto confirma por sí solo su presencia el sistema:
Enseñe la convención, no los números específicos. La separación entre "diagnóstico" y "corroborante" importa más que los enteros exactos elegidos — lo que cuenta es que los umbrales del paso 5 puedan distinguir "una señal fuerte" de "muchas señales débiles".
Expected: Cada marcador tiene un peso. La distribución de pesos del catálogo se inclina hacia marcadores corroborantes (3-5), con un pequeño número de marcadores diagnósticos-por-sí-solos (10) por sistema.
On failure: Si cada marcador está ponderado a 10, la puntuación pierde resolución — los hallazgos de presencia parcial se vuelven imposibles. Degrade marcadores que reaparezcan en múltiples sistemas o aparezcan en manejadores no relacionados.
Para cada versión escaneada, registre tanto los marcadores presentes como los ausentes, indexados por versión. Ambos son evidencia: un marcador ausente en la versión N es tan informativo como uno presente cuando la versión N+1 lo reintroduce.
Forma de la línea base:
baselines:
"1.4.0":
acme_widget_v3:
present: ["acme_widget_v3_init", "ACME_WIDGET_V3_DISABLE"]
absent: ["acme.widget.v3.dialog.open"]
score: 20
"1.5.0":
acme_widget_v3:
present: ["acme_widget_v3_init", "ACME_WIDGET_V3_DISABLE", "acme.widget.v3.dialog.open"]
absent: []
score: 25
"1.4.1":
_annotation: "never-published; skipped from upstream release timeline"
Las versiones nunca-publicadas reciben una anotación explícita en lugar de una omisión silenciosa. Las versiones silenciosamente saltadas parecen pérdida de datos al siguiente lector.
Expected: Cada versión produce un registro por sistema seguido, con present, absent y score poblados, o una _annotation explícita si nunca-publicada.
On failure: Si un escaneo de línea base arroja cero marcadores para un sistema que antes estaba presente, no asuma eliminación hasta confirmar que la ruta del binario era correcta, que el comando strings produjo salida, y que los IDs de marcador coinciden con el catálogo exactamente. Los ceros falsos corrompen el registro longitudinal.
Defina dos compuertas por sistema, aplicadas a la puntuación agregada:
full — puntuación por encima de la cual el sistema se considera presente-y-activo en esta versiónpartial — puntuación por encima de la cual el sistema se considera enviado-pero-incompleto (algunos marcadores presentes, pero por debajo del umbral full)Por debajo de partial = ausente (o aún-no-presente, según la dirección del viaje).
thresholds:
acme_widget_v3:
full: 25
partial: 10
Elección de umbrales: fije full a la suma de pesos que esperaría emitir una instalación sana; fije partial a un marcador diagnóstico más una señal corroborante. Reajuste cuando tenga evidencia de varias versiones.
Expected: Cada escaneo produce un hallazgo etiquetado por sistema: full | partial | absent. Los hallazgos con partial merecen investigación — son los candidatos a dark-launch y a eliminación.
On failure: Si cada sistema reporta partial en cada versión, los umbrales son demasiado sensibles (probablemente fijados más altos de lo que los marcadores puedan sumar). Recalibre contra una versión conocida-buena donde el sistema esté verificablemente en vivo.
strings -n 8Use strings con un filtro de longitud mínima como primitiva de extracción. El piso -n 8 filtra la mayor parte del ruido (fragmentos cortos, padding, basura de tabla de direcciones) sin perder identificadores significativos, que casi siempre tienen más de 8 caracteres.
strings -n 8 path/to/binary > /tmp/binary-strings.txt
Luego ejecute la coincidencia del catálogo contra /tmp/binary-strings.txt (cualquier matcher orientado a líneas: grep -F -f markers.txt, ripgrep, o un script pequeño).
Matices:
-n 4, -n 6) inundan la salida con basura binaria y ruido de símbolos minificados; la distinción diagnóstico-a-corroborante colapsa-n 12+) pierden identificadores de flag cortos y claves de configuraciónstrings devuelve una salida casi vacía, el binario puede requerir primero extracción del bundle (fuera del alcance de esta skill)Expected: Una salida de línea por cadena de entre 1k-100k líneas, según el tamaño del binario. La inspección manual debería revelar identificadores reconocibles en las primeras 100 líneas.
On failure: Si la salida está vacía o es irreconocible, el binario probablemente está empaquetado, cifrado o enviado en un formato de bytecode que strings no puede leer. Detenga y resuelva en la capa de extracción; no registre una línea base a partir de un escaneo ilegible.
Cuando se añade un nuevo sistema o marcador al catálogo, solo las versiones futuras se escanean para él. Los registros de versiones pasadas permanecen como se escribieron originalmente.
Por qué: las líneas base de versiones previas son evidencia empírica de lo que se escaneó en su momento, no un modelo actual de lo que la versión pasada contenía. Reescribirlas retroactivamente con marcadores recién descubiertos confunde "lo que sabemos ahora" con "lo que observamos entonces". Ambas son útiles; solo una debería vivir en el archivo de línea base.
Si un escaneo retroactivo es genuinamente necesario (p. ej., para probar si un nuevo marcador estaba presente en la versión N-3), regístrelo como un addendum separado:
addenda:
"1.4.0":
scan_date: "2026-04-15"
catalog_revision: "v7"
findings:
acme_new_system:
present: ["..."]
La entrada original baselines["1.4.0"] queda intacta. El lector puede ver tanto el registro original como el escaneo retroactivo posterior, con sus respectivas revisiones de catálogo.
Expected: El archivo de línea base crece monótonamente hacia adelante; los registros pasados son append-only con bloques opcionales de addendum. Las revisiones del catálogo están versionadas para que cada escaneo pueda vincularse al estado del catálogo que utilizó.
On failure: Si alguna vez siente el impulso de editar directamente la lista present de una versión pasada, deténgase. Añada un addendum en su lugar. Mutar registros pasados pierde la capacidad de detectar regresiones del escáner (el Paso 8 de cualquier pasada posterior de validación del escáner depende de que el registro histórico sea inmutable).
present, absent y score por sistema seguidofull y partial; los hallazgos se etiquetan en consecuenciastrings -n 8 es la primitiva de extracción (o un equivalente documentado para binarios no-texto)_p3a o q9X se renombran en cada reconstrucción. Aunque coincidan hoy, son ruido mañana. Quédese con identificadores semánticamente significativos._annotation: "never-published".strings -n 4 como más exhaustivo que -n 8. Los mínimos más bajos añaden ruido más rápido que señal. Los marcadores diagnósticos tienen prácticamente siempre 8 o más caracteres.security-audit-codebase — disciplina compartida; ambos pipelines tratan la presencia de marcadores como un hallazgo, con distintos consumidores aguas abajoaudit-dependency-versions — extiende el mismo rigor de seguimiento de versiones a los manifiestos de dependencias externas; esta skill lo aplica a artefactos binariosprobe-feature-flag-state — seguimiento de Fase 2-3; consume líneas base para clasificar el estado de despliegue del flag (vivo / opt-in / dark / eliminado)conduct-empirical-wire-capture — seguimiento de Fase 4; valida el comportamiento inferido contra el tráfico real del arnésredact-for-public-disclosure — seguimiento de Fase 5; rige qué hallazgos pueden salir del espacio de trabajo privado