@dogfood-lab/study-swarm 0.5.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/PROTOCOL.md +30 -2
- package/README.es.md +78 -26
- package/README.fr.md +83 -31
- package/README.hi.md +77 -25
- package/README.it.md +81 -29
- package/README.ja.md +82 -30
- package/README.md +54 -3
- package/README.pt-BR.md +84 -32
- package/README.zh.md +82 -30
- package/SECURITY.md +6 -6
- package/bin/study-swarm.mjs +280 -0
- package/examples/study-swarm-ci.yml +28 -0
- package/examples/study-swarm-self.dispatch.md +46 -0
- package/package.json +14 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,55 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project are documented here. The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
4
4
|
|
|
5
|
+
## [1.0.0] — 2026-06-13
|
|
6
|
+
|
|
7
|
+
First stable release. A dogfood-swarm health + feature pass hardened the CLI and verified the methodology against its own gate — all 16 cited papers checked by a retrieval oracle plus a different model family (0 fabricated, 0 misattributed).
|
|
8
|
+
|
|
9
|
+
### Security
|
|
10
|
+
|
|
11
|
+
- `new` now sanitizes the slug to a single filename — path separators are replaced with `-` and pure-dots slugs are rejected — so it can only ever write `<slug>.dispatch.md` in the current working directory (a slug like `../../x` previously wrote outside it).
|
|
12
|
+
- Pinned the GitHub Pages workflow's actions to commit SHAs, matching the release workflow.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- `lint` now also checks that each finding names an **author** before the year (Unicode-aware, so names like "Buçinca" count), completing the author + year + identifier sourcing standard the docs describe.
|
|
17
|
+
- `lint --json` emits a machine-readable report (stable `rule` ids + line numbers) for CI annotations and downstream tools.
|
|
18
|
+
- `lint` accepts **multiple paths, a directory** (linted recursively for `*.dispatch.md`), or **`-` for stdin** — so `study-swarm lint dispatches/` gates a whole corpus and a pre-commit hook can pipe a staged file.
|
|
19
|
+
- On a clean lint, the CLI now names the deferred Step-4 next step (`roleos verify-citations`), so a clean form-check isn't mistaken for verified.
|
|
20
|
+
- `new` stamps methodology provenance into each scaffolded dispatch (`study-swarm vX.Y.Z · protocol-sha256:… · created:…`), fulfilling the "pin the methodology version" promise.
|
|
21
|
+
- Shipped a worked, lint-clean reference dispatch (`examples/study-swarm-self.dispatch.md`) and a copy-paste CI sample (`examples/study-swarm-ci.yml`); both are in the npm tarball.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- `lint`: an arXiv id's `YYMM` prefix is no longer mistaken for a publication year, so a finding with no spelled-out year is correctly flagged.
|
|
26
|
+
- `lint`: the "studies show…" gesture check is now scoped to the *Research grounding* section and fires even when a citation sits on the same line.
|
|
27
|
+
- `lint`: the *Research grounding* section is found by a heading whose text *ends* with that phrase, so a document title that merely mentions "research grounding" no longer shadows the real section.
|
|
28
|
+
- `lint`: numbered lines inside fenced code blocks are no longer mistaken for findings.
|
|
29
|
+
- `lint` on a directory, and `protocol` when `PROTOCOL.md` is unreadable, now report an actionable message instead of a raw `EISDIR`.
|
|
30
|
+
- Light-mode handbook link colour darkened to meet WCAG AA contrast, and added a site favicon (previously a 404 on every page).
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- `SECURITY.md` and the README Security section now describe the real shipped artifact — a thin, zero-dependency CLI — replacing stale "documentation repository / reserved placeholder / no executable code" language, and the Supported-versions table now lists the version line that actually ships.
|
|
35
|
+
- `new` now notes when it had to sanitize a slug, so the created filename is never a silent surprise.
|
|
36
|
+
|
|
37
|
+
### Docs
|
|
38
|
+
|
|
39
|
+
- Added arXiv identifiers to the Bansal 2021 and Wei 2022 citations so they meet the project's own sourcing standard.
|
|
40
|
+
- README CLI section now shows the typical `new → lint → verify` loop, a "Gate it in CI" recipe, and the Step-3→Step-4 handoff contract.
|
|
41
|
+
- Corrected the PROTOCOL.md sourcing standard so it matches what `lint` enforces (a resolvable identifier **or** a direct URL, not "title AND a separate URL" — the repo's own examples cite a bare arXiv id).
|
|
42
|
+
- New handbook page **Common failure modes** (symptom → catching step → fix); Step-1 "is this question load-bearing?" heuristics in PROTOCOL.md and the handbook; the `new` template now embeds a worked example finding + selection hint.
|
|
43
|
+
|
|
44
|
+
## [0.6.0] — 2026-06-02
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
|
|
48
|
+
- **Thin CLI** (`study-swarm`) — zero runtime dependencies, ships in the package:
|
|
49
|
+
- `study-swarm protocol` — print the locked protocol.
|
|
50
|
+
- `study-swarm new <slug>` — scaffold a `<slug>.dispatch.md` to fill in.
|
|
51
|
+
- `study-swarm lint <file>` — deterministically check a dispatch's *Research grounding* against the sourcing standard (every finding needs author + year + a resolvable arXiv/DOI/URL; vague "studies show…" claims are rejected). Exit `1` on violations, so it gates CI.
|
|
52
|
+
- `npm run verify` smoke test; CI smoke-tests the CLI before publishing.
|
|
53
|
+
|
|
5
54
|
## [0.5.0] — 2026-06-02
|
|
6
55
|
|
|
7
56
|
### Added
|
|
@@ -12,4 +61,6 @@ All notable changes to this project are documented here. The format is based on
|
|
|
12
61
|
- `SECURITY.md`, MIT `LICENSE`, project logo.
|
|
13
62
|
- Landing page + Starlight handbook at <https://dogfood-lab.github.io/study-swarm/>.
|
|
14
63
|
|
|
64
|
+
[1.0.0]: https://github.com/dogfood-lab/study-swarm/releases/tag/v1.0.0
|
|
65
|
+
[0.6.0]: https://github.com/dogfood-lab/study-swarm/releases/tag/v0.6.0
|
|
15
66
|
[0.5.0]: https://github.com/dogfood-lab/study-swarm/releases/tag/v0.5.0
|
package/PROTOCOL.md
CHANGED
|
@@ -21,6 +21,15 @@ The cost of running it is one parallel dispatch and a few minutes of synthesis.
|
|
|
21
21
|
|
|
22
22
|
List the specific questions where empirical evidence would change the answer. Aim for 3–5. **Fewer is fine** when the decision is genuinely substantial — run with 1–2 agents; the decision-to-investigate governs invocation, the number of evidence-changing questions governs breadth. Do not manufacture questions to hit a count, and do not abort for being under three. More than ~6 → split into multiple passes.
|
|
23
23
|
|
|
24
|
+
**A question is load-bearing if:**
|
|
25
|
+
|
|
26
|
+
- you can picture **two different designs** that hinge on the answer;
|
|
27
|
+
- the honest current answer is *"I think…"*, not *"evidence says…"*;
|
|
28
|
+
- an **adjacent field** (HCI, SRE, compilers, databases) has probably already measured it;
|
|
29
|
+
- getting it wrong ships a **known-broken default** (e.g. "explanations always help" — they can increase over-reliance on *wrong* AI).
|
|
30
|
+
|
|
31
|
+
Worked decomposition: *"Should a retry reuse the previous output?"* splits into *"does context carryover cause sycophancy drift?"* and *"do explanations increase over-reliance on wrong answers?"* — two evidence-changing questions, not one opinion.
|
|
32
|
+
|
|
24
33
|
## Step 2 — Dispatch parallel research agents
|
|
25
34
|
|
|
26
35
|
One agent per question, dispatched **in parallel** (a single batch). Each agent's prompt MUST include:
|
|
@@ -85,9 +94,28 @@ Example: *"Retry uses a fresh prompt without the previous output. (sycophancy mi
|
|
|
85
94
|
|
|
86
95
|
## Sourcing standard
|
|
87
96
|
|
|
88
|
-
**A citation includes ALL of:** (1) author(s) — first author + "et al." inline is fine; (2) year; (3)
|
|
97
|
+
**A citation includes ALL of:** (1) author(s) — first author + "et al." inline is fine; (2) year; (3) a **resolvable identifier or direct URL** — an arXiv id (arXiv:NNNN.NNNNN), a DOI, an RFC number, or a direct link to the source (not a summary or a social-media thread); a paper title is welcome but optional; (4) a one-sentence key finding in your own words.
|
|
98
|
+
|
|
99
|
+
> `study-swarm lint` enforces exactly this FORM locally — author + year + a resolvable arXiv/DOI/URL, and no "studies show…" gestures. arXiv ids and DOIs are preferred over a bare URL because Step 4's retrieval oracle resolves them deterministically.
|
|
100
|
+
|
|
101
|
+
**Not allowed:** "studies show…" / "research suggests…" / "it's well-established…" without naming the source; an identifier-less citation; citations the research step did not actually surface.
|
|
102
|
+
|
|
103
|
+
## Common failure modes
|
|
104
|
+
|
|
105
|
+
The patterns this protocol exists to catch — each with the step that catches it:
|
|
106
|
+
|
|
107
|
+
| Failure | Symptom | Caught by |
|
|
108
|
+
|---|---|---|
|
|
109
|
+
| **Fabricated citation** | the id resolves to nothing | Step 4 retrieval oracle → dropped |
|
|
110
|
+
| **Misattribution** | real paper, wrong author/year | Step 4 oracle → corrected once, else dropped |
|
|
111
|
+
| **Groundedness gap** | the link resolves but the source doesn't say it | Step 4 groundedness lens (distinct from existence) |
|
|
112
|
+
| **Self-grading** | the synthesizing model also "verifies" | Step 4 different-family rule |
|
|
113
|
+
| **Postdated-paper false-flag** | an LLM calls a real 2026 paper fabricated | why existence MUST be retrieval, not recall |
|
|
114
|
+
| **Question padding** | five thin questions, two actually evidence-changing | Step 1 ("don't manufacture to hit a count") |
|
|
115
|
+
| **Orphan citation** | a finding never referenced by a Step-5 choice | Step 5 (citations without a connection are noise) |
|
|
116
|
+
| **"Studies show…"** | a gesture with no source named | the sourcing standard / `lint` |
|
|
89
117
|
|
|
90
|
-
|
|
118
|
+
A fuller version with corrective actions is in the [handbook](https://dogfood-lab.github.io/study-swarm/handbook/failure-modes/).
|
|
91
119
|
|
|
92
120
|
## The architecture this protocol enables
|
|
93
121
|
|
package/README.es.md
CHANGED
|
@@ -7,68 +7,120 @@
|
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
+
<a href="https://www.npmjs.com/package/@dogfood-lab/study-swarm"><img src="https://img.shields.io/npm/v/@dogfood-lab/study-swarm" alt="npm"></a>
|
|
10
11
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT License"></a>
|
|
11
12
|
<a href="https://dogfood-lab.github.io/study-swarm/"><img src="https://img.shields.io/badge/handbook-live-purple" alt="Handbook"></a>
|
|
12
13
|
<img src="https://img.shields.io/badge/cited%20research-verified-1f6feb" alt="Cited research, verified">
|
|
13
14
|
</p>
|
|
14
15
|
|
|
15
|
-
**
|
|
16
|
+
**Fundamenta las decisiones de diseño en investigaciones citadas, y luego verifica las citas con una familia de modelos *diferente* antes de que todo ello se convierta en algo definitivo.**
|
|
16
17
|
|
|
17
|
-
`study-swarm` es un protocolo, no una herramienta. Cuando
|
|
18
|
+
`study-swarm` es un protocolo, no una herramienta. Cuando tomas una decisión de diseño importante con un LLM (una nueva capa de producto, una elección arquitectónica, una decisión sobre si "debemos confiar en el modelo aquí"), improvisar a partir de principios básicos genera diseños obsoletos y citar artículos de memoria genera diseños que se basan en fuentes que no existen o que no dicen lo que crees. `study-swarm` reemplaza ambas cosas: envía agentes de investigación en paralelo, exige hallazgos específicos citados y valida cada cita a través de un **verificador externo de una familia de modelos diferente** antes de que esto influya en el diseño.
|
|
18
19
|
|
|
19
|
-
Aplica su propia medicina. El protocolo prescribe
|
|
20
|
+
Aplica su propia medicina. El protocolo prescribe envolventes protegidas por verificadores para los sistemas que ayuda a diseñar, por lo que ejecuta uno sobre sí mismo. **Ningún modelo califica su propio trabajo, incluido el que ejecuta el protocolo.**
|
|
20
21
|
|
|
21
22
|
## El protocolo en cinco pasos
|
|
22
23
|
|
|
23
|
-
1. **
|
|
24
|
-
2. **
|
|
25
|
-
3. **
|
|
26
|
-
4. **
|
|
27
|
-
5. **
|
|
24
|
+
1. **Identifica** de 3 a 5 preguntas clave de diseño donde la evidencia empírica cambiaría la respuesta.
|
|
25
|
+
2. **Envía** un agente de investigación por cada pregunta, en paralelo. Cada uno debe devolver títulos de artículos + autores + años + URL + un hallazgo de una sola oración; prioriza la especificidad sobre la amplitud ("6 a 8 hallazgos bien documentados superan a 20 gestos vagos").
|
|
26
|
+
3. **Sintetiza** los hallazgos en una sección de *Fundamentación de la investigación*: `N. <hallazgo>. <Autores> <año> (<arXiv/DOI>). <implicación para el diseño>.`
|
|
27
|
+
4. **Verifica externamente**: una *familia de modelos diferente*, sin razonamiento, verifica cada cita en dos etapas: un **oráculo de recuperación** confirma que el artículo existe (nunca la memoria del modelo), y luego una lente de **fundamentación** confirma que el hallazgo coincide con la fuente. **Detén el proceso** si se detecta una falsificación o atribución incorrecta; **detén el proceso y escala** si el verificador o el oráculo de recuperación no están disponibles (nunca interpretes la ausencia como "las citas son correctas").
|
|
28
|
+
5. **Conecta** cada elección arquitectónica con un hallazgo por número. Las citas sin una implicación para el diseño son ruido.
|
|
28
29
|
|
|
29
|
-
Los detalles completos y ejecutables
|
|
30
|
+
Los detalles completos y ejecutables: la tabla de detención, el estándar de fuentes y la regla del conjunto se encuentran en **[PROTOCOL.md](PROTOCOL.md)**.
|
|
30
31
|
|
|
31
|
-
## ¿Por qué una
|
|
32
|
+
## ¿Por qué una familia *diferente*, sin razonamiento?
|
|
32
33
|
|
|
33
|
-
Porque los modos de
|
|
34
|
+
Porque los modos de falla están documentados, no son hipotéticos:
|
|
34
35
|
|
|
35
36
|
- **Los LLM no pueden verificar de manera confiable su propia salida.** Huang et al. 2023 ([arXiv:2310.01798](https://arxiv.org/abs/2310.01798)); Kambhampati et al. 2024 ([arXiv:2402.01817](https://arxiv.org/abs/2402.01817), LLM-Modulo); Stechly et al. 2024 ([arXiv:2402.08115](https://arxiv.org/abs/2402.08115)) — el verificador externo proporciona las ventajas; el contenido de autocrítica es inerte.
|
|
36
|
-
- **Los
|
|
37
|
-
- **Las citas son donde los LLM mienten.** Walters & Wilder 2023 ([doi:10.1038/s41598-023-41032-5](https://doi.org/10.1038/s41598-023-41032-5)) — el 55% de las citas de GPT-3.5 / 18% de
|
|
38
|
-
- **
|
|
39
|
-
- **La diversidad supera a la cantidad.** Rajan 2025 ([arXiv:2511.16708](https://arxiv.org/abs/2511.16708)) — cuatro verificadores con una correlación por pares
|
|
37
|
+
- **Los jueces de la misma familia se auto-favorecen.** Panickssery, Bowman & Feng 2024 ([arXiv:2404.13076](https://arxiv.org/abs/2404.13076)) — el autorreconocimiento se correlaciona *linealmente* con la autopreferencia, por lo que el cegamiento parcial no ayuda. Verga et al. 2024 ([arXiv:2404.18796](https://arxiv.org/abs/2404.18796), PoLL) — un panel de familias disjuntas es menos sesgado a un costo ~7 veces menor.
|
|
38
|
+
- **Las citas son donde los LLM mienten.** Walters & Wilder 2023 ([doi:10.1038/s41598-023-41032-5](https://doi.org/10.1038/s41598-023-41032-5)) — el 55% de las citas de GPT-3.5 / 18% de GPT-4 son falsas. Onweller et al. 2026 ([arXiv:2605.06635](https://arxiv.org/abs/2605.06635)) — los enlaces resuelven >94% de las veces, pero solo el 39-77% del contenido citado realmente respalda la afirmación. Por lo tanto, la existencia debe verificarse mediante **la recuperación, no el recuerdo**.
|
|
39
|
+
- **Oculta el razonamiento del generador.** Khalifa et al. 2026 ([arXiv:2601.14691](https://arxiv.org/abs/2601.14691), "Gaming the Judge") — la manipulación del encadenamiento de pensamientos infla los falsos positivos de un juez hasta en un 90% con las acciones fijas. Turpin et al. 2023 ([arXiv:2305.04388](https://arxiv.org/abs/2305.04388)) — el encadenamiento de pensamientos es una racionalización *a posteriori*. El verificador ve la afirmación de cita desnuda, nunca el "por qué lo incluí".
|
|
40
|
+
- **La diversidad supera a la cantidad.** Rajan 2025 ([arXiv:2511.16708](https://arxiv.org/abs/2511.16708)) — cuatro verificadores con una correlación por pares ρ ∈ [0.05, 0.25] superan a cualquiera solo mediante la cobertura submodular. Kim et al. 2025 ([arXiv:2506.07962](https://arxiv.org/abs/2506.07962)) — los errores de los LLM están *correlacionados*, por lo que la variable clave es la diversidad de las lentes, no la cantidad bruta.
|
|
40
41
|
|
|
41
|
-
## ¿
|
|
42
|
+
## ¿Realmente funciona? (prueba)
|
|
42
43
|
|
|
43
|
-
Como prueba, el protocolo se ejecutó
|
|
44
|
+
Como prueba, el protocolo se ejecutó contra sus propias citas. Dos familias decorrelacionadas y distintas a Claude: **Mistral** (`mistral-small:24b`) e **IBM Granite** (`granite4.1:30b`), verificaron un conjunto de citas, sin razonamiento, con dos trampas ciegas:
|
|
44
45
|
|
|
45
46
|
| Trampa plantada | Mistral | IBM Granite | Verdad fundamental |
|
|
46
47
|
|---|---|---|---|
|
|
47
|
-
|
|
|
48
|
+
| Encadenamiento de pensamientos atribuido a "Nakamura & Olsen" | no detectada | **detectada** (atribución incorrecta → en realidad Wei et al. 2022, arXiv:2201.11903) | atribución incorrecta |
|
|
48
49
|
| un artículo fabricado con la afirmación de que "el 98% de los errores se eliminan, no se necesita un oráculo" | **caught** (fabricated) | **caught** (fabricated) | fabricado |
|
|
49
50
|
|
|
50
|
-
Ninguna de las dos familias detectó ambas trampas por sí sola, pero su **unión detectó 2/2**. Un solo
|
|
51
|
+
Ninguna de las dos familias detectó ambas trampas por sí sola, pero su **unión detectó 2/2**. Un solo juez habría aceptado la atribución incorrecta. Por separado, el oráculo de recuperación detectó dos *atribuciones incorrectas reales* en nuestros propios documentos de diseño (artículos citados bajo el primer autor incorrecto) que ningún LLM paramétrico podría haber señalado, y confirmó correctamente los artículos genuinos de 2026 que ambos LLM marcaron erróneamente como fabricados simplemente porque los artículos son posteriores a su entrenamiento. Ese último punto es la razón por la que la verificación de existencia en el paso 4 **debe** ser un oráculo de recuperación, nunca un LLM.
|
|
51
52
|
|
|
52
|
-
Esa única ejecución es la tesis en miniatura: **lentes
|
|
53
|
+
Esa única ejecución es la tesis en miniatura: **lentes decorrelacionadas + un oráculo de recuperación para la existencia superan a cualquier juez inteligente.**
|
|
53
54
|
|
|
54
55
|
## Cómo está conectado
|
|
55
56
|
|
|
56
|
-
|
|
57
|
+
Puedes ejecutar el protocolo manualmente; cualquier modelo de familia diferente, junto con la resolución del arXiv/DOI por tu cuenta, satisface el paso 4. Dos herramientas complementarias lo convierten en un solo comando:
|
|
57
58
|
|
|
58
|
-
- **[prism-verify](https://github.com/mcp-tool-shop-org/prism-verify)
|
|
59
|
-
- **[role-os](https://github.com/mcp-tool-shop-org/role-os)
|
|
59
|
+
- **[prism-verify](https://github.com/mcp-tool-shop-org/prism-verify)**: el verificador de tiempo de ejecución: enrutamiento entre familias, razonamiento simplificado, adjudicación con múltiples lentes y un límite determinista para la existencia de recuperaciones (arXiv → Crossref) y recibos firmados.
|
|
60
|
+
- **[role-os](https://github.com/mcp-tool-shop-org/role-os)**: proporciona `roleos verify-citations <dispatch>`, el ejecutor que extrae las citas de un "dispatch" y las pasa a través de prism.
|
|
61
|
+
|
|
62
|
+
La transición es el formato del "dispatch" en sí: una conclusión escrita como `N. **conclusión.** Autores año (arXiv|DOI). implicación.` — con **un identificador resoluble por cada conclusión** — es exactamente lo que `roleos verify-citations` extrae y procesa. Un "dispatch" limpio, según las reglas de formato (`lint`), se transfiere sin problemas; una cita malformada es lo que el ejecutor marca como no analizada. Ese contrato es lo que `study-swarm lint` verifica localmente, por lo que los pasos 3 y 4 coinciden en la definición de una cita.
|
|
63
|
+
|
|
64
|
+
## CLI
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npm i -g @dogfood-lab/study-swarm # or run ad-hoc: npx @dogfood-lab/study-swarm <command>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
| Comando | Qué hace |
|
|
71
|
+
|---|---|
|
|
72
|
+
| `study-swarm protocol` | Imprime el protocolo completo: los cinco pasos, la tabla de interrupción y el estándar de fuentes. |
|
|
73
|
+
| `study-swarm new <slug>` | Crea un archivo `<slug>.dispatch.md` con el esqueleto de los cinco pasos para completar. |
|
|
74
|
+
| `study-swarm lint [--json] <path…>` | Verifica la *fundamentación de la investigación* de un "dispatch" según el estándar de fuentes: cada conclusión necesita un autor, un año y un identificador resoluble (arXiv / DOI / URL); se rechaza cualquier afirmación vaga del tipo "los estudios demuestran...". Sale con código `1` en caso de violaciones, por lo que bloquea la integración continua. Una `<ruta>` puede ser un archivo, un directorio (analizado recursivamente para archivos `*.dispatch.md`) o `-` para la entrada estándar; `--json` emite un informe legible por máquina. |
|
|
75
|
+
|
|
76
|
+
`lint` es determinista: no realiza llamadas al modelo, por lo que es seguro en la integración continua. Aplica el **estándar de fuentes del paso 3** localmente; la verificación basada en modelos del **paso 4** aún depende de [`roleos verify-citations`](https://github.com/mcp-tool-shop-org/role-os) → prism.
|
|
77
|
+
|
|
78
|
+
Un ciclo típico:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
study-swarm new my-decision # creates my-decision.dispatch.md
|
|
82
|
+
# …fill in the questions, run the research dispatch, write the findings…
|
|
83
|
+
study-swarm lint my-decision.dispatch.md # enforce the sourcing standard (Step 3)
|
|
84
|
+
roleos verify-citations my-decision.dispatch.md # model-based Step 4 (different family, via prism)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Un "dispatch" completo y limpio, según las reglas de formato (`lint`), con `study-swarm` aplicado a su propio diseño, se incluye en [`examples/study-swarm-self.dispatch.md`](examples/study-swarm-self.dispatch.md) como una referencia práctica.
|
|
88
|
+
|
|
89
|
+
### Bloquéalo en la integración continua
|
|
90
|
+
|
|
91
|
+
`lint` toma un archivo, un directorio (analizado recursivamente para archivos `*.dispatch.md`) o `-` para la entrada estándar, y `--json` emite un informe legible por máquina. Incluye esto en tu repositorio para bloquear la verificación de las fuentes de cada "dispatch" en cada solicitud de extracción (también hay una muestra que se puede copiar y pegar en [`examples/study-swarm-ci.yml`](examples/study-swarm-ci.yml)):
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
# .github/workflows/dispatches.yml
|
|
95
|
+
name: study-swarm lint
|
|
96
|
+
on:
|
|
97
|
+
pull_request:
|
|
98
|
+
paths: ['**/*.dispatch.md', '.github/workflows/dispatches.yml']
|
|
99
|
+
workflow_dispatch:
|
|
100
|
+
concurrency:
|
|
101
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
102
|
+
cancel-in-progress: true
|
|
103
|
+
jobs:
|
|
104
|
+
lint:
|
|
105
|
+
runs-on: ubuntu-latest
|
|
106
|
+
steps:
|
|
107
|
+
- uses: actions/checkout@v4
|
|
108
|
+
- uses: actions/setup-node@v4
|
|
109
|
+
with: { node-version: '20' }
|
|
110
|
+
- run: npx @dogfood-lab/study-swarm@latest lint dispatches/
|
|
111
|
+
```
|
|
60
112
|
|
|
61
113
|
## Por qué funciona, en pocas palabras
|
|
62
114
|
|
|
63
|
-
**
|
|
115
|
+
**Actualizado**: el campo avanza rápidamente; exigir estudios específicos con años evita que los diseños se retrasen 18 meses. **Funcional**: la evidencia muestra lo que *falla*, no solo lo que funciona (las explicaciones pueden aumentar la dependencia excesiva de la IA *incorrecta* — Bansal et al. 2021, [arXiv:2006.14779](https://arxiv.org/abs/2006.14779)). **Seguro**: el entorno protegido por el verificador es la arquitectura que respalda la evidencia, y el protocolo lo aplica a su propia salida. La verificación de fuentes no es un ejercicio académico; es el rastro de la evidencia.
|
|
64
116
|
|
|
65
117
|
## Seguridad
|
|
66
118
|
|
|
67
|
-
`study-swarm`
|
|
119
|
+
`study-swarm` incluye una **CLI delgada, con cero dependencias** (`study-swarm`) junto con la metodología. No realiza **ninguna llamada a la red ni al modelo** y no recopila **ningún dato de telemetría**: no hay secretos ni credenciales en el código fuente. En tiempo de ejecución, solo lee el archivo que se pasa a `lint` y escribe un único archivo `<slug>.dispatch.md` en el directorio actual para `new` (rechazando sobrescribirlo y nunca saliendo del directorio de trabajo). La verificación basada en modelos que describe la metodología (paso 4) es realizada por las herramientas complementarias, no por este paquete. Consulta [SECURITY.md](SECURITY.md).
|
|
68
120
|
|
|
69
121
|
## Estado
|
|
70
122
|
|
|
71
|
-
Un protocolo funcional, verificado externamente por su
|
|
123
|
+
Un protocolo funcional, verificado externamente por su propia maquinaria: una familia de modelos diferente verifica sus citas (consulta la prueba anterior). Este repositorio es la referencia pública; [PROTOCOL.md](PROTOCOL.md) es la forma ejecutable. Forma parte de la familia [dogfood-lab](https://github.com/dogfood-lab): métodos y ejemplos para construir en la era de la IA.
|
|
72
124
|
|
|
73
125
|
Con licencia MIT.
|
|
74
126
|
|
package/README.fr.md
CHANGED
|
@@ -7,68 +7,120 @@
|
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
+
<a href="https://www.npmjs.com/package/@dogfood-lab/study-swarm"><img src="https://img.shields.io/npm/v/@dogfood-lab/study-swarm" alt="npm"></a>
|
|
10
11
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT License"></a>
|
|
11
12
|
<a href="https://dogfood-lab.github.io/study-swarm/"><img src="https://img.shields.io/badge/handbook-live-purple" alt="Handbook"></a>
|
|
12
13
|
<img src="https://img.shields.io/badge/cited%20research-verified-1f6feb" alt="Cited research, verified">
|
|
13
14
|
</p>
|
|
14
15
|
|
|
15
|
-
**Ancrez les décisions de conception dans
|
|
16
|
+
**Ancrez les décisions de conception dans des recherches citées, puis vérifiez ces citations à l’aide d’une *autre* famille de modèles avant que quoi que ce soit ne devienne un élément canonique.**
|
|
16
17
|
|
|
17
|
-
`study-swarm` est un protocole, pas un outil. Lorsque vous prenez une décision de conception importante avec un LLM (un nouveau niveau de produit, un choix d’architecture, une question du type « devons-nous faire confiance au modèle ici »), improviser à partir de principes
|
|
18
|
+
`study-swarm` est un protocole, pas un outil. Lorsque vous prenez une décision de conception importante avec un LLM (un nouveau niveau de produit, un choix d’architecture, une question du type « devons-nous faire confiance au modèle ici »), improviser à partir de principes fondamentaux conduit à des conceptions obsolètes, et citer des articles de mémoire conduit à des conceptions qui reposent sur des sources inexistantes ou qui ne disent pas ce que vous pensez. `study-swarm` remplace les deux : il lance en parallèle des agents de recherche, exige des résultats spécifiques cités et soumet chaque citation à un **vérificateur externe d’une famille de modèles différente** avant qu’elle n’influence la conception.
|
|
18
19
|
|
|
19
|
-
Il applique sa propre méthode. Le protocole prescrit
|
|
20
|
+
Il applique sa propre méthode. Le protocole prescrit l’utilisation d’enveloppes protégées par un vérificateur pour les systèmes auxquels il contribue à concevoir, il l’applique donc également sur lui-même. **Aucun modèle n’évalue son propre travail, y compris celui qui exécute le protocole.**
|
|
20
21
|
|
|
21
22
|
## Le protocole en cinq étapes
|
|
22
23
|
|
|
23
|
-
1. **Identifiez** 3 à 5 questions de conception essentielles
|
|
24
|
-
2. **Lancez** un agent de recherche par question, en parallèle. Chacun doit renvoyer
|
|
25
|
-
3. **Synthétisez** les résultats dans une section *Justification par la recherche*
|
|
26
|
-
4. **Vérifiez de manière externe** — une *famille de modèles différente*, sans raisonnement, vérifie chaque citation en deux étapes
|
|
27
|
-
5. **Reliez** chaque choix architectural à
|
|
24
|
+
1. **Identifiez** 3 à 5 questions de conception essentielles dont la réponse serait modifiée par des preuves empiriques.
|
|
25
|
+
2. **Lancez** un agent de recherche par question, en parallèle. Chacun doit renvoyer le titre de l’article + les auteurs + les années + les URL + une conclusion d’une phrase (privilégiez la spécificité à l’étendue : « 6 à 8 conclusions bien étayées sont plus efficaces que 20 observations vagues »).
|
|
26
|
+
3. **Synthétisez** les résultats dans une section intitulée *Justification par la recherche* : `N. <conclusion>. <Auteurs> <année> (<arXiv/DOI>). <implication pour la conception>.`
|
|
27
|
+
4. **Vérifiez de manière externe** — une *famille de modèles différente*, sans raisonnement, vérifie chaque citation en deux étapes : un **oracle de récupération** confirme que l’article existe (jamais à partir de la mémoire du modèle), puis une **lentille d’ancrage** confirme que la conclusion correspond à la source. **Arrêtez le processus** si la citation est fabriquée ou mal attribuée ; **arrêtez et escaladez** si le vérificateur ou l’oracle de récupération n’est pas disponible (ne considérez jamais l’absence comme une indication que les citations sont correctes).
|
|
28
|
+
5. **Reliez** chaque choix architectural à une conclusion en utilisant un numéro. Les citations sans implication pour la conception sont du bruit.
|
|
28
29
|
|
|
29
30
|
Les détails complets et exécutables — le tableau d’arrêt, la norme de référencement, la règle d’ensemble — se trouvent dans **[PROTOCOL.md](PROTOCOL.md)**.
|
|
30
31
|
|
|
31
|
-
## Pourquoi une *famille différente*, sans raisonnement
|
|
32
|
+
## Pourquoi une *famille différente*, sans raisonnement ?
|
|
32
33
|
|
|
33
|
-
Parce que les modes d’échec sont documentés, et non hypothétiques
|
|
34
|
+
Parce que les modes d’échec sont documentés, et non hypothétiques :
|
|
34
35
|
|
|
35
|
-
- **Les LLM ne peuvent pas vérifier de manière fiable leurs propres résultats.** Huang et al. 2023 ([arXiv:2310.01798](https://arxiv.org/abs/2310.01798))
|
|
36
|
-
- **Les juges de la même famille ont une préférence pour eux-mêmes.** Panickssery, Bowman & Feng 2024 ([arXiv:2404.13076](https://arxiv.org/abs/2404.13076)) — l’auto-reconnaissance est corrélée *linéairement* avec
|
|
37
|
-
- **Les citations sont les points où les LLM mentent.** Walters & Wilder 2023 ([doi:10.1038/s41598-023-41032-5](https://doi.org/10.1038/s41598-023-41032-5)) — 55
|
|
38
|
-
- **Masquez le raisonnement du générateur.** Khalifa et al. 2026 ([arXiv:2601.14691](https://arxiv.org/abs/2601.14691), «
|
|
39
|
-
- **La diversité
|
|
36
|
+
- **Les LLM ne peuvent pas vérifier de manière fiable leurs propres résultats.** Huang et al. 2023 ([arXiv:2310.01798](https://arxiv.org/abs/2310.01798)) ; Kambhampati et al. 2024 ([arXiv:2402.01817](https://arxiv.org/abs/2402.01817), LLM-Modulo) ; Stechly et al. 2024 ([arXiv:2402.08115](https://arxiv.org/abs/2402.08115)) — le vérificateur externe apporte les améliorations ; le contenu d’auto-évaluation est inerte.
|
|
37
|
+
- **Les juges de la même famille ont une préférence pour eux-mêmes.** Panickssery, Bowman & Feng 2024 ([arXiv:2404.13076](https://arxiv.org/abs/2404.13076)) — l’auto-reconnaissance est corrélée *linéairement* avec la préférence pour soi-même, de sorte qu’un aveuglement partiel n’est pas utile. Verga et al. 2024 ([arXiv:2404.18796](https://arxiv.org/abs/2404.18796), PoLL) — un groupe de juges issus de familles différentes est moins biaisé, pour un coût environ 7 fois inférieur.
|
|
38
|
+
- **Les citations sont les points où les LLM mentent.** Walters & Wilder 2023 ([doi:10.1038/s41598-023-41032-5](https://doi.org/10.1038/s41598-023-41032-5)) — 55 % des citations de GPT-3.5 et 18 % des citations de GPT-4 sont fabriquées. Onweller et al. 2026 ([arXiv:2605.06635](https://arxiv.org/abs/2605.06635)) — les liens résolvent plus de 94 % du temps, mais seulement 39 à 77 % du contenu cité soutiennent réellement l’affirmation. Par conséquent, l’existence doit être vérifiée par **récupération, et non par rappel**.
|
|
39
|
+
- **Masquez le raisonnement du générateur.** Khalifa et al. 2026 ([arXiv:2601.14691](https://arxiv.org/abs/2601.14691), « Gaming the Judge ») — la simple manipulation de la chaîne de pensée augmente les faux positifs d’un juge jusqu’à 90 %, les actions étant maintenues constantes. Turpin et al. 2023 ([arXiv:2305.04388](https://arxiv.org/abs/2305.04388)) — la chaîne de pensée est une rationalisation a posteriori. Le vérificateur voit uniquement l’affirmation de citation, jamais le « pourquoi j’ai inclus ceci ».
|
|
40
|
+
- **La diversité surpasse la quantité.** Rajan 2025 ([arXiv:2511.16708](https://arxiv.org/abs/2511.16708)) — quatre vérificateurs avec une corrélation par paires ρ ∈ [0,05, 0,25] sont plus efficaces qu’un seul grâce à la couverture sous-modulaire. Kim et al. 2025 ([arXiv:2506.07962](https://arxiv.org/abs/2506.07962)) — les erreurs des LLM sont *corrélées*, de sorte que la variable essentielle est la diversité des lentilles, et non la quantité brute.
|
|
40
41
|
|
|
41
|
-
## Est-ce que cela fonctionne réellement
|
|
42
|
+
## Est-ce que cela fonctionne réellement ? (preuve)
|
|
42
43
|
|
|
43
|
-
À titre de test, le protocole a été appliqué à ses propres citations. Deux familles non-Claude
|
|
44
|
+
À titre de test, le protocole a été appliqué à ses propres citations. Deux familles non-Claude décorrélées — **Mistral** (`mistral-small:24b`) et **IBM Granite** (`granite4.1:30b`) — ont vérifié un ensemble de citations, sans raisonnement, en utilisant deux pièges aveugles :
|
|
44
45
|
|
|
45
|
-
| Piège
|
|
46
|
+
| Piège planté | Mistral | IBM Granite | Vérité terrain |
|
|
46
47
|
|---|---|---|---|
|
|
47
|
-
| Une chaîne de pensée attribuée à «
|
|
48
|
-
| un article fabriqué affirmant que «
|
|
48
|
+
| Une chaîne de pensée attribuée à « Nakamura & Olsen » | non détecté | **détecté** (mal attribué → en réalité Wei et al. 2022, arXiv:2201.11903) | mal attribué |
|
|
49
|
+
| un article fabriqué affirmant que « 98 % des erreurs sont éliminées, aucun oracle n’est nécessaire » | **caught** (fabricated) | **caught** (fabricated) | fabriqué |
|
|
49
50
|
|
|
50
|
-
Aucune des deux familles n’a détecté les deux pièges individuellement, mais leur **union a permis de détecter
|
|
51
|
+
Aucune des deux familles n’a détecté les deux pièges individuellement, mais leur **union a permis de détecter 2/2**. Un seul juge aurait validé la mauvaise attribution. Par ailleurs, l’oracle de récupération a détecté deux *vrais* mauvaises attributions dans nos propres documents de conception (articles cités avec le mauvais premier auteur) que aucun LLM paramétrique n’aurait pu signaler — et il a correctement confirmé des articles authentiques de 2026 que les deux LLM ont faussement signalés comme étant fabriqués simplement parce que les articles sont postérieurs à leur date d’entraînement. Ce dernier point est la raison pour laquelle la vérification de l’existence dans l’étape 4 **doit** être effectuée par un oracle de récupération, et non par un LLM.
|
|
51
52
|
|
|
52
|
-
Cette seule
|
|
53
|
+
Cette seule exécution est la thèse en miniature : **des lentilles décorrélées + un oracle de récupération pour vérifier l’existence sont plus efficaces qu’un seul juge intelligent.**
|
|
53
54
|
|
|
54
|
-
## Comment cela fonctionne
|
|
55
|
+
## Comment cela fonctionne-t-il ?
|
|
55
56
|
|
|
56
|
-
Vous pouvez exécuter le protocole manuellement
|
|
57
|
+
Vous pouvez exécuter le protocole manuellement : tout modèle d’une famille différente, associé à la résolution de l’identifiant arXiv/DOI, satisfait l’étape 4. Deux outils complémentaires permettent de réaliser cette opération en une seule commande :
|
|
57
58
|
|
|
58
|
-
- **[prism-verify](https://github.com/mcp-tool-shop-org/prism-verify)**
|
|
59
|
-
- **[role-os](https://github.com/mcp-tool-shop-org/role-os)**
|
|
59
|
+
- **[prism-verify](https://github.com/mcp-tool-shop-org/prism-verify)** : le vérificateur d’exécution ; il effectue un routage différent selon la famille, supprime les raisonnements inutiles, réalise une évaluation à plusieurs niveaux et établit un seuil minimal de récupération déterministe (arXiv → Crossref), en plus de générer des reçus signés.
|
|
60
|
+
- **[role-os](https://github.com/mcp-tool-shop-org/role-os)** : il fournit la commande `roleos verify-citations <dispatch>`, qui extrait les citations d’un document et les transmet à prism pour vérification.
|
|
60
61
|
|
|
61
|
-
|
|
62
|
+
Le transfert se fait via le format du document lui-même : une conclusion rédigée sous la forme `N. **conclusion.** Auteurs année (arXiv|DOI). implication.` — avec **un seul identifiant résolvable par conclusion** — est exactement ce que la commande `roleos verify-citations` extrait et transmet pour vérification. Un document propre, validé par `lint`, est transféré sans problème ; une citation mal formée est signalée comme non analysée par l’outil. Ce contrat est ce que la commande `study-swarm lint` vérifie localement, de sorte que les étapes 3 et 4 s’accordent sur la définition d’une citation.
|
|
62
63
|
|
|
63
|
-
|
|
64
|
+
## CLI
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
npm i -g @dogfood-lab/study-swarm # or run ad-hoc: npx @dogfood-lab/study-swarm <command>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
| Commande | Fonctionnement |
|
|
71
|
+
|---|---|
|
|
72
|
+
| `study-swarm protocol` | Affiche le protocole complet : les cinq étapes, la table de terminaison et la norme de référencement. |
|
|
73
|
+
| `study-swarm new <slug>` | Crée un fichier `<slug>.dispatch.md` avec le squelette des cinq étapes à compléter. |
|
|
74
|
+
| `study-swarm lint [--json] <path…>` | Vérifie le *fondement de la recherche* d’un document par rapport à la norme de référencement : chaque conclusion doit comporter un auteur, une année et un identifiant résolvable (arXiv / DOI / URL) ; les affirmations vagues du type « des études montrent que… » sont rejetées. En cas de violation, le programme se termine avec le code `1`, ce qui permet de contrôler l’intégration continue. Un `<chemin>` peut être un fichier, un répertoire (vérifié récursivement pour les fichiers `*.dispatch.md`) ou `-` pour l’entrée standard ; l’option `--json` génère un rapport lisible par machine. |
|
|
75
|
+
|
|
76
|
+
La commande `lint` est déterministe — elle n’effectue aucun appel de modèle —, ce qui la rend sûre pour l’intégration continue. Elle applique localement la **norme de référencement de l’étape 3** ; la vérification basée sur un modèle, à l’**étape 4**, est toujours effectuée par les outils complémentaires, et non par ce paquet.
|
|
77
|
+
|
|
78
|
+
Une boucle typique :
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
study-swarm new my-decision # creates my-decision.dispatch.md
|
|
82
|
+
# …fill in the questions, run the research dispatch, write the findings…
|
|
83
|
+
study-swarm lint my-decision.dispatch.md # enforce the sourcing standard (Step 3)
|
|
84
|
+
roleos verify-citations my-decision.dispatch.md # model-based Step 4 (different family, via prism)
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Un document complet, propre et validé par `lint` — study-swarm appliqué à sa propre conception — est fourni dans le fichier [`examples/study-swarm-self.dispatch.md`](examples/study-swarm-self.dispatch.md) en tant que référence.
|
|
88
|
+
|
|
89
|
+
### Activez-le dans l’intégration continue
|
|
90
|
+
|
|
91
|
+
La commande `lint` prend un fichier, un répertoire (vérifié récursivement pour les fichiers `*.dispatch.md`) ou `-` pour l’entrée standard, et l’option `--json` génère un rapport lisible par machine. Intégrez ceci dans votre dépôt pour contrôler le référencement de chaque document lors de chaque demande d’extraction (un exemple à copier-coller est également disponible dans le fichier [`examples/study-swarm-ci.yml`](examples/study-swarm-ci.yml)) :
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
# .github/workflows/dispatches.yml
|
|
95
|
+
name: study-swarm lint
|
|
96
|
+
on:
|
|
97
|
+
pull_request:
|
|
98
|
+
paths: ['**/*.dispatch.md', '.github/workflows/dispatches.yml']
|
|
99
|
+
workflow_dispatch:
|
|
100
|
+
concurrency:
|
|
101
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
102
|
+
cancel-in-progress: true
|
|
103
|
+
jobs:
|
|
104
|
+
lint:
|
|
105
|
+
runs-on: ubuntu-latest
|
|
106
|
+
steps:
|
|
107
|
+
- uses: actions/checkout@v4
|
|
108
|
+
- uses: actions/setup-node@v4
|
|
109
|
+
with: { node-version: '20' }
|
|
110
|
+
- run: npx @dogfood-lab/study-swarm@latest lint dispatches/
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Pourquoi cela fonctionne, en résumé
|
|
114
|
+
|
|
115
|
+
**Actuel** — le domaine évolue rapidement ; exiger des études spécifiques avec les années correspondantes évite que les conceptions ne soient mises en œuvre avec 18 mois de retard. **Fonctionnel** — les données montrent ce qui *échoue*, et pas seulement ce qui fonctionne (les explications peuvent entraîner une dépendance excessive à l’égard d’une IA *incorrecte* — Bansal et al., 2021, [arXiv:2006.14779](https://arxiv.org/abs/2006.14779)). **Sûr** — l’enveloppe protégée par le vérificateur est l’architecture que les données étayent, et le protocole l’applique à sa propre sortie. Le référencement n’est pas un exercice académique ; il s’agit de la chaîne de preuves.
|
|
64
116
|
|
|
65
117
|
## Sécurité
|
|
66
118
|
|
|
67
|
-
`study-swarm`
|
|
119
|
+
`study-swarm` fournit une **CLI légère, sans dépendances**, (`study-swarm`) ainsi que la méthodologie. Il n’effectue **aucun appel réseau ou de modèle** et ne collecte **aucune télémétrie** ; il n’y a pas de secrets ni d’identifiants dans le code source. Lors de l’exécution, il lit uniquement le fichier que vous transmettez à la commande `lint` et écrit un seul fichier `<slug>.dispatch.md` dans le répertoire courant pour une nouvelle version (il refuse d’écraser les fichiers existants et ne sort jamais du répertoire de travail). La vérification basée sur un modèle décrite par la méthodologie (étape 4) est effectuée par les outils complémentaires, et non par ce paquet. Voir [SECURITY.md](SECURITY.md).
|
|
68
120
|
|
|
69
|
-
## État
|
|
121
|
+
## État actuel
|
|
70
122
|
|
|
71
|
-
Un protocole fonctionnel, vérifié en externe par ses propres mécanismes
|
|
123
|
+
Un protocole fonctionnel, vérifié en externe par ses propres mécanismes — une famille de modèles différente vérifie ses citations (voir la preuve ci-dessus). Ce dépôt est la référence publique ; le fichier [PROTOCOL.md](PROTOCOL.md) représente la forme exécutable. Il fait partie de la famille [dogfood-lab](https://github.com/dogfood-lab) — méthodes et exemples pour construire dans l’ère de l’IA.
|
|
72
124
|
|
|
73
125
|
Licence MIT.
|
|
74
126
|
|