@dogfood-lab/study-swarm 1.3.0 → 2.1.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 CHANGED
@@ -2,6 +2,65 @@
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
+ ## [2.1.0] — 2026-09-24
6
+
7
+ ### Added
8
+
9
+ - `study-swarm return <dispatch>` writes `<stem>.results.md`, the sheet you hand someone, and `<stem>.results.json`, the same facts kept beside the dispatch. `return --check` fails if either copy has drifted. The command row is in every README.
10
+
11
+ ### Fixed
12
+
13
+ - The two shipped example locks were regenerated so `lock --verify` passes on this version. The lock hash includes the CLI version.
14
+ - `lint` keeps every identifier on a finding. A URL earlier in the sentence no longer hides a later arXiv, DOI, or RFC from `withdraw` and from `requalify --resolve --mode removed`.
15
+ - An unclosed code fence in Research grounding fails the lint. The lines after it are not treated as clean.
16
+ - Finding numbers are the integers written on the markdown items, not the position in the list.
17
+ - The author check allows one comma before the year (`Smith, 2024`, `Huang et al., 2023`) and rejects a bare function word (`The 2024`).
18
+ - A directory walk that cannot list a directory, or that skips a symlink or junction which might hide a dispatch or a tombstone, fails `lint`, `withdraw`, and `requalify --check` instead of reporting a clean corpus.
19
+ - `lock` requires `resolved_model` and `prompt` to be strings. A caller-supplied `output_sha256` must be 32 bytes. When the step also includes `output`, the digest must match those bytes.
20
+ - `withdraw` and `requalify --resolve` rewrite a sidecar to schema `dispatch.withdrawn/v2` before hashing it, so a resolved v1 sidecar does not stay permanently red.
21
+ - Help, the lock template, the README, and PROTOCOL.md call the prompt digest text-normalized (BOM stripped, newlines folded to LF, NFC), which is what the hasher does.
22
+ - The canon-rollback example no longer states Hsiao & Schneider 2021 as a finding. The pinned run recorded `retrieved: false`. The paper is real; it is not canon in a dispatch whose own evidence did not retrieve it.
23
+ - The lock example's shape sample shows schema v2. The sample CI workflow pins `@dogfood-lab/study-swarm@2.1.0` instead of `@latest`. The release workflow installs `npm@11.5.1` exactly.
24
+ - SECURITY.md reports issues on GitHub and lists the lock, tombstone, and receipt writes. The handbook halt table and three broken handbook links match the protocol. SHIP_GATE's exit code 1 includes lock drift and `requalify --check`.
25
+ - The landing page, the handbook, and the README CI recipe use the same prompt-hash wording and the same `@2.1.0` pin as the shipped sample. Translated security sections name the lock, tombstone, and receipt writes. SECURITY.md lists 2.x as the supported line.
26
+ - A markdown-wrapped DOI or URL is the same identifier as the bare form, so `withdraw` and `requalify --resolve --mode removed` still see it. A function-word year is rejected in any case, and a real author later in the same finding still counts. An unclosed fence fails those compensator commands instead of looking like the citation is gone. A non-string `output_sha256` is rejected.
27
+ - The five-step list drops a fabricated finding and corrects a misattribution once. Halt-and-escalate is only when the verifier or the oracle is unavailable. Spanish, Portuguese, and Hindi `--reason` values are the English tokens the CLI accepts, with a gloss beside them. Translated lock rows call the prompt digest text-normalized.
28
+ - The sample CI workflow, and the copies in the README and handbook, also run `requalify --check` when a pull request only touches a `.withdrawn.json`. The lock example states the digest preimage as the `study-swarm/v2/text` tag plus the normalized text. `tool_schema` must be a JSON object. The symlink smoke check fails if the link cannot be created, instead of passing.
29
+ - Translated READMEs keep the heading `Research grounding`. That English phrase is what `lint` and `withdraw` match. A gloss sits beside it.
30
+ - The lock example's `dispatch_sha256` and `prompt_sha256` lines name the same preimage as `protocol_sha256`: the tag `study-swarm/v2/text`, a newline, then the normalized text.
31
+ - `withdraw` refuses a hand-edited tombstone instead of re-hashing it, and an identical re-withdraw leaves the file untouched. An `arxiv.org/html/` URL is the same identifier as `arXiv:NNNN.NNNNN`. A Step 5 heading is one that starts with "Step 5", or whose text is exactly "Architecture".
32
+ - After `withdraw`, the next step names `--mode removed` and `--mode regrounded`. There is no `--mode override`. The worked examples' lint lines use the `examples/` path that passes from the repo root.
33
+ - The Spanish, Portuguese, and Italian withdraw rows name the scanned section `Research grounding`, the heading `lint` and `withdraw` open.
34
+ - A failed lint repeats the command that failed, including `--strict` and the paths. `requalify --check` prints the dispatch path `--resolve` can open, and it does not call a sidecar problem an evidence-withdrawn flag. A lock digest mismatch names the text-normalized or canonical-JSON preimage. `new` tells the reader to drop a fabricated citation and correct a misattribution once.
35
+ - `withdraw` and `requalify --check` print a full `requalify --resolve <dispatch> <identifier>` command for each flag, for both `--mode removed` and `--mode regrounded`. A resolve line that omits those two operands exits 2.
36
+ - The landing protocol card shows `<dispatch>` in the verify command. The handbook home says the pin is a text-normalized prompt hash.
37
+ - A subheading inside Research grounding does not end the section. A trailing slash on a DOI URL is the same identifier as the bare DOI. `question_id`, `schema_dialect`, `params`, and `verification` are rejected when the type is wrong, not coerced or dropped. `requalify --resolve` refuses a hand-edited sidecar. A null withdrawal entry is a named problem, not a crash. The release workflow does not cancel an in-progress npm publish.
38
+
39
+ ## [2.0.0] — 2026-07-05
40
+
41
+ A full dogfood-swarm pass — health hardening, a feature pass making more of the protocol executable, and a security hardening of the lock's content-addressing. **The breaking change** (hence the major bump): the `dispatch.lock.json` / tombstone / receipt hash format is now domain-separated (artifact schema **v2**), so a lock written by an earlier version (≤ 1.3) no longer verifies until it is regenerated (`study-swarm lock <dispatch> --from <orchestration.json>`) — `lock --verify` now says exactly that, instead of reporting a confusing hash mismatch. The CLI's command surface is otherwise fully backward-compatible and additive.
42
+
43
+ ### Added
44
+
45
+ - **`study-swarm lint --strict`** — makes the protocol's one otherwise-unexecutable failure mode deterministic: an **orphan citation** (a Step-3 finding no Step-5 choice references, by number or author) is flagged, because "citations without a connection are noise." Opt-in, so the default CI gate is unchanged. New `orphan-citation` / `no-step5` rule ids. (All four shipped example dispatches were made `--strict`-clean.)
46
+ - **`study-swarm lock --init <dispatch>`** — scaffolds a fill-in-the-blanks `<dispatch>.orchestration.json` (the harness record `lock … --from` consumes), mirroring what `new` does for a dispatch.
47
+ - **`study-swarm requalify --status <corpus-dir> [--json]`** — a read-only evidence-health view of a corpus: withdrawn vs resolved counts, a breakdown by reason and resolution mode, and per-dispatch lines. Informational (exit 0), distinct from the `--check` gate.
48
+ - `lint --json` now carries a versioned `schema` + `study_swarm_version` envelope, matching the lock/sidecar/receipt objects, so a CI/roleos consumer can detect a shape change.
49
+ - `lint` now accepts a bare **RFC number** (e.g. `RFC 5280`) as a resolvable identifier — the sourcing standard already blessed it and the canon-rollback normalizer already recognized it; the linter now agrees.
50
+
51
+ ### Changed
52
+
53
+ - **Security — domain-separated content-addressing (lock schema v1 → v2).** Every digest now carries a domain tag, so a prompt whose literal text equals a tool schema's canonical JSON can no longer collide with that schema's hash. `lock`, the tombstone sidecar, and the withdrawal receipt bump to schema `v2`; a `v1` artifact read by this version is reported as **"regenerate"**, not a hash mismatch. A caller-supplied `output_sha256` is validated to the `sha256-<base64>` shape where it enters. The two shipped example locks are regenerated.
54
+ - **Robustness.** Fixed a **catastrophic-backtracking (ReDoS)** in the author-citation regex that could hang the CI-gating `lint` on a long author run with no trailing year; the rewrite is linear-time and semantically identical on real citations. Corpus walks (`lint`/`withdraw`/`requalify` over a directory) now skip an unreadable subdirectory with a warning instead of aborting the whole run, don't follow symlinks, and break directory-junction cycles. A non-object (`null`) sidecar is now a reported problem, not a crash. A URL path segment like `/2024/` no longer satisfies the year requirement.
55
+ - **Humanization.** A failed `lint` now prints a "fix and re-run" trailer; the `requalify --resolve --mode removed` block message presents its two recovery paths as a legible fork; `withdraw` on an uncited id points you at `lint` and `--from`; the withdrawal-receipt line reads plainly instead of `(stdout: pass --json)`.
56
+ - **Docs.** The README + handbook CI recipe now include the `requalify --check` andon step (it was documented in the example workflow only); the handbook halt table gains the `PARTIALLY_SUPPORTED` verdict; `SECURITY.md` + `SHIP_GATE.md` now enumerate the `lock`/`withdraw`/`requalify` write surface; the landing page now surfaces the CLI (it previously showed none of the six commands).
57
+
58
+ ### Release CI
59
+
60
+ - The release workflow now verifies the **packed tarball** is runnable from its shipped files only — catching a `files`-allowlist regression a working-tree smoke test can't — and pins `npm@^11.5.1` for OIDC trusted publishing instead of floating `@latest`.
61
+
62
+ Smoke coverage: 57 → 92 checks.
63
+
5
64
  ## [1.3.0] — 2026-06-30
6
65
 
7
66
  Makes the **canon-rollback** executable. A verified finding becomes canon — it informs a downstream design decision — so when it is later **withdrawn** (a citation turns out fabricated/misattributed on a re-run, a cited paper is retracted, or the gate flips it) a `git revert` is not enough: the finding already propagated. This release ships the protocol's named `requalify_dependent_slices` compensator as three deterministic, network-free verbs. The design was grounded by running study-swarm on this feature itself — five load-bearing questions (revocation propagation, machine-readable status states, scholarly retraction, sound compensators, build-system staleness/tombstones/contrastive surfacing) dispatched to parallel retrieval-grounded agents; all 27 findings were gated through Step 4 (`roleos verify-citations` → prism, a different model family, reasoning-stripped) with a public-key-verified Ed25519 receipt before any informed the design.
@@ -115,6 +174,8 @@ First stable release. A dogfood-swarm health + feature pass hardened the CLI and
115
174
  - `SECURITY.md`, MIT `LICENSE`, project logo.
116
175
  - Landing page + Starlight handbook at <https://dogfood-lab.github.io/study-swarm/>.
117
176
 
177
+ [2.0.0]: https://github.com/dogfood-lab/study-swarm/releases/tag/v2.0.0
178
+ [1.3.0]: https://github.com/dogfood-lab/study-swarm/releases/tag/v1.3.0
118
179
  [1.2.0]: https://github.com/dogfood-lab/study-swarm/releases/tag/v1.2.0
119
180
  [1.1.0]: https://github.com/dogfood-lab/study-swarm/releases/tag/v1.1.0
120
181
  [1.0.0]: https://github.com/dogfood-lab/study-swarm/releases/tag/v1.0.0
package/PROTOCOL.md CHANGED
@@ -103,7 +103,7 @@ Example: *"Retry uses a fresh prompt without the previous output. (sycophancy mi
103
103
 
104
104
  **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.
105
105
 
106
- > `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.
106
+ > `study-swarm lint` enforces exactly this FORM locally — author + year + a resolvable arXiv/DOI/URL/RFC, and no "studies show…" gestures. arXiv ids and DOIs are preferred over a bare URL because Step 4's retrieval oracle resolves them deterministically.
107
107
 
108
108
  **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.
109
109
 
@@ -119,7 +119,7 @@ The patterns this protocol exists to catch — each with the step that catches i
119
119
  | **Self-grading** | the synthesizing model also "verifies" | Step 4 different-family rule |
120
120
  | **Postdated-paper false-flag** | an LLM calls a real 2026 paper fabricated | why existence MUST be retrieval, not recall |
121
121
  | **Question padding** | five thin questions, two actually evidence-changing | Step 1 ("don't manufacture to hit a count") |
122
- | **Orphan citation** | a finding never referenced by a Step-5 choice | Step 5 (citations without a connection are noise) |
122
+ | **Orphan citation** | a finding never referenced by a Step-5 choice | Step 5 — and made executable by `study-swarm lint --strict` (opt-in) |
123
123
  | **"Studies show…"** | a gesture with no source named | the sourcing standard / `lint` |
124
124
 
125
125
  A fuller version with corrective actions is in the [handbook](https://dogfood-lab.github.io/study-swarm/handbook/failure-modes/).
@@ -144,9 +144,9 @@ Designs that touch model-facing behavior default to this shape unless evidence j
144
144
 
145
145
  ## Replayability — pinning a dispatch (`dispatch.lock.json`)
146
146
 
147
- A grounded, verified dispatch is only auditable if you can say *what produced it*. `study-swarm lock <dispatch> --from <orchestration.json>` writes a companion `dispatch.lock.json` that pins, per Step-2 research agent, the **resolved model id** (never an alias), the **SHA-256 of the byte-exact prompt**, and the **SHA-256 of the tool schema** the agent was given, plus the Step-4 **verifier receipt** — rolled into one `lock_sha256` content-address. `study-swarm lock --verify` re-derives those hashes and exits non-zero on any drift, so a changed prompt, model, or tool surface is caught — it gates CI exactly like a package lockfile. This is the PIN_PER_STEP standard made executable: the harness emits the record, and the CLI (zero-dependency, network-free) only canonicalizes, hashes, and validates it.
147
+ A grounded, verified dispatch is only auditable if you can say *what produced it*. `study-swarm lock <dispatch> --from <orchestration.json>` writes a companion `dispatch.lock.json` that pins, per Step-2 research agent, the **resolved model id** (never an alias), the **SHA-256 of the text-normalized prompt** (a leading BOM stripped, CR/CRLF folded to LF, Unicode NFC), and the **SHA-256 of the tool schema** the agent was given, plus the Step-4 **verifier receipt** — rolled into one `lock_sha256` content-address. `study-swarm lock --verify` re-derives those hashes and exits non-zero on any drift, so a changed prompt, model, or tool surface is caught — it gates CI exactly like a package lockfile. This is the PIN_PER_STEP standard made executable: the harness emits the record, and the CLI (zero-dependency, network-free) only canonicalizes, hashes, and validates it.
148
148
 
149
- **Honest ceiling:** pinning model + prompt + temperature does **not** make an LLM's *output* bit-identical — batch-invariance, floating-point non-associativity, mixture-of-experts routing, and silent provider drift all sit outside any offline tool's control. So the lock pins **inputs byte-exact and records output hashes for drift detection** — *replayable inputs + drift-detectable outputs*, never "deterministic replay." The design and its evidence are the worked dispatch [`examples/study-swarm-lock.dispatch.md`](examples/study-swarm-lock.dispatch.md) — itself the first dispatch to ship its own lock.
149
+ **Honest ceiling:** pinning model + prompt + temperature does **not** make an LLM's *output* bit-identical — batch-invariance, floating-point non-associativity, mixture-of-experts routing, and silent provider drift all sit outside any offline tool's control. So the lock pins **those normalized inputs and records output hashes for drift detection** — *replayable inputs + drift-detectable outputs*, never "deterministic replay." The design and its evidence are the worked dispatch [`examples/study-swarm-lock.dispatch.md`](examples/study-swarm-lock.dispatch.md) — itself the first dispatch to ship its own lock.
150
150
 
151
151
  ## Compensating a withdrawn finding (canon-rollback)
152
152
 
@@ -156,6 +156,6 @@ A verified finding still becomes **canon** — it informs a downstream design de
156
156
  - **`study-swarm requalify --check <corpus-dir>`** — **fails closed (exit 1)** for any dispatch carrying an unresolved `evidence-withdrawn` flag. This is the andon: a withdrawn finding **HALTS** its dependents until the finding is removed or **re-grounded**. Fail-closed (not a soft alert) is the evidence-driven choice — the RetractoBot RCT (DeVito et al. 2024) found that *notifying* citing authors did **not** reduce continued citation of retracted work, and unexplained drops drive over-reliance (Bansal et al. 2021), so the gate refuses to treat a missing re-verification as "fine" (the Must-Staple rule, RFC 7633).
157
157
  - **`study-swarm requalify --resolve <dispatch> <identifier> --mode removed|regrounded [--note <text>]`** — clears a flag once the finding is **removed** (deterministic: the citation is gone from the dispatch) or **re-grounded** (re-verified clean by the sibling runner; the CLI records the attestation, it does not itself re-verify). **Idempotent** — re-running on an already-cleared finding is a no-op — and it **appends** a transition to the sidecar's audit trail rather than editing in place (the event-sourcing / CRL-`removeFromCRL` rule: un-withdrawal is an explicit, recorded transition, never a silent edit).
158
158
 
159
- The withdrawal is surfaced **contrastively**, never as a silent drop — *"finding N withdrawn because X; you may have relied on it; dispatches A, B are flagged — re-ground or override"* (Buçinca et al. 2024) — pairing with Step 4's `CANNOT_CONFIRM` checkpoint.
159
+ The withdrawal is surfaced **contrastively**, never as a silent drop — *"finding N withdrawn because X; you may have relied on it; dispatches A, B are flagged — requalify --resolve --mode removed, or --mode regrounded --note"* (Buçinca et al. 2024) — pairing with Step 4's `CANNOT_CONFIRM` checkpoint.
160
160
 
161
161
  **Honest ceiling:** the CLI **flags, gates, and receipts deterministically** (file reads, JSON I/O, SHA-256 — zero-dependency, network-free, like the lock). The actual **re-verification** of a re-grounded finding is the **sibling runner's** job (`roleos verify-citations` → `prism`), not this package; `requalify --resolve --mode regrounded` records that it happened, it does not perform it. The tombstone is the **volatile evidence layer** (per-dispatch) and never touches the **stable** `PROTOCOL.md`/lock shape — `lock --verify` is unaffected by a withdraw/resolve, by design. The design and its evidence are the worked dispatch [`examples/study-swarm-canon-rollback.dispatch.md`](examples/study-swarm-canon-rollback.dispatch.md).
package/README.es.md CHANGED
@@ -23,8 +23,8 @@ Aplica su propia medicina. El protocolo prescribe envoltorios protegidos por ver
23
23
 
24
24
  1. **Identifique** de 3 a 5 preguntas de diseño clave donde la evidencia empírica cambiaría la respuesta.
25
25
  2. **Despliegue** un agente de investigación por pregunta, en paralelo. Cada uno debe devolver títulos de artículos + autores + años + URL + un hallazgo de una sola oración; priorice la especificidad sobre la amplitud ("6 a 8 hallazgos bien documentados superan a 20 observaciones vagas").
26
- 3. **Sintetice** los hallazgos en una sección de *fundamentación basada en investigaciones*: `N. **<hallazgo>.** <Autores> <año> (<arXiv/DOI>). <implicación para el diseño>.`
27
- 4. **Verifique 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éngase** si se detecta una falsificación o atribución incorrecta; **deténgase y escale** si el verificador o el oráculo de recuperación no están disponibles (nunca interprete la ausencia como "las citas son correctas").
26
+ 3. **Sintetice** los hallazgos en una sección de *Research grounding* (fundamentación basada en investigaciones): `N. **<hallazgo>.** <Autores> <año> (<arXiv/DOI>). <implicación para el diseño>.`
27
+ 4. **Verifique 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. **Descarte** un hallazgo fabricado; **corrija una atribución incorrecta una vez** y vuelva a verificar (un segundo veredicto no limpio lo descarta). **Deténgase y escale** solo cuando el verificador o el oráculo de recuperación no estén disponibles (nunca interprete la ausencia como "las citas son correctas").
28
28
  5. **Conecte** cada elección arquitectónica con un hallazgo mediante un número. Las citas sin una implicación para el diseño son ruido.
29
29
 
30
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)**.
@@ -75,12 +75,15 @@ npm i -g @dogfood-lab/study-swarm # or run ad-hoc: npx @dogfood-lab/study-sw
75
75
  |---|---|
76
76
  | `study-swarm protocol` | Imprime el protocolo completo: los cinco pasos, la tabla de detención y el estándar de fuentes. |
77
77
  | `study-swarm new <slug>` | Crea un archivo `<slug>.dispatch.md` con el esqueleto de los cinco pasos para completarlo. |
78
- | `study-swarm lint [--json] <path…>` | Verifica la *fundamentación de la investigación* de una prueba en comparación con el estándar de fuentes: cada hallazgo 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` si hay infracciones, por lo que valida la integración continua. Un `<path>` puede ser un archivo, un directorio (se analiza recursivamente para archivos `*.dispatch.md`) o `-` para la entrada estándar; `--json` emite un informe legible por máquina. |
79
- | `study-swarm lock <dispatch> --from <orchestration.json>` | Fija un envío para su reproducción: escribe el contenido con direccionamiento por contenido en `<dispatch>.lock.json`, según el agente del paso 2, que incluye el **ID de modelo resuelto** + el **SHA-256 del mensaje exacto en bytes** + el **SHA-256 del esquema de la herramienta**, más el **comprobante del verificador** del paso 4, todo integrado en un único `lock_sha256`. |
78
+ | `study-swarm lint [--json] [--strict] <path…>` | Verifique la *Research grounding* (base de investigación) de un informe con respecto al estándar de fuentes: cada hallazgo debe tener un autor, un año y un identificador que se pueda resolver (arXiv / DOI / URL / RFC); las afirmaciones vagas como "los estudios demuestran..." no son aceptables. Si se detectan infracciones, salga con el código `1`, lo que impide la ejecución de CI. Un `<path>` puede ser un archivo, un directorio (cuyo contenido se analiza recursivamente en busca de archivos `*.dispatch.md`) o `-` para la entrada estándar; `--json` genera un informe legible por máquina. Con `--strict`, también se señalan las **citaciones huérfanas**, es decir, los hallazgos que no están referenciados por ninguna opción del Paso 5, ya que "las citaciones sin conexión son ruido" (opcional, por lo que la configuración predeterminada de CI permanece sin cambios). |
79
+ | `study-swarm return <dispatch> [--check]` | Escribe los resultados: `<stem>.results.md` es la hoja que se entrega, y `<stem>.results.json` guarda los mismos datos junto al dispatch para la próxima ejecución. `--check` falla si alguna de las dos copias se desvió del dispatch. |
80
+ | `study-swarm lock --init <dispatch>` | Cree el archivo `<dispatch>.orchestration.json`: un registro de plantilla para completar con los datos necesarios (un paso por cada agente del Paso 2) y que se utilizará como entrada para `lock … --from`. |
81
+ | `study-swarm lock <dispatch> --from <orchestration.json>` | Fija un envío para su reproducción: escribe el contenido con direccionamiento por contenido en `<dispatch>.lock.json`, según el agente del paso 2, que incluye el **ID de modelo resuelto** + el **SHA-256 del prompt normalizado (BOM eliminado, saltos de línea a LF, NFC)** + el **SHA-256 del esquema de la herramienta**, más el **comprobante del verificador** del paso 4, todo integrado en un único `lock_sha256`. |
80
82
  | `study-swarm lock --verify <dispatch> [--from …]` | Vuelve a generar esos hashes y verifica que coincidan con el bloqueo; cualquier desviación provoca una salida con código `1`, por lo que actúa como un archivo de bloqueo de paquetes para la integración continua. Sin `--from`, comprueba la integridad del propio bloqueo. |
81
- | `study-swarm withdraw <id> --reason <reason> [--from <dir>] [--receipt <path>]` | **Compensador de anulación del canon.** Marcar cada envío en el corpus cuyo *fundamento de la investigación* cite `<id>` como `evidencia retirada` (un archivo adjunto tipo "lápida" `<slug>.withdrawn.json`: marcar, nunca eliminar) y emitir un recibo de retirada identificado por su contenido. `--reason` ∈ `fabricado · atribuido incorrectamente · retractado · verificador revertido · otro`. |
83
+ | `study-swarm withdraw <id> --reason <reason> [--from <dir>] [--receipt <path>]` | **Compensador de anulación del canon.** Marcar cada envío en el corpus cuya sección *Research grounding* (fundamento de la investigación) cite `<id>` como `evidencia retirada` (un archivo adjunto tipo "lápida" `<slug>.withdrawn.json`: marcar, nunca eliminar) y emitir un recibo de retirada identificado por su contenido. `--reason` ∈ `fabricated · misattributed · retracted · verifier-flipped · other` (fabricado, atribuido incorrectamente, retractado, verificador revertido, otro). |
82
84
  | `study-swarm requalify --check <corpus-dir>` | Si falla, se cierra el proceso (salir con código `1`) para cualquier envío que contenga una marca `evidencia retirada` no resuelta; este es el mecanismo que **detiene** los elementos dependientes de un hallazgo retirado hasta que se elimine o se vuelva a fundamentar. Activa CI. |
83
- | `study-swarm requalify --resolve <envío> <id> --mode removed\ | regrounded [--note …]` | Eliminar una marca una vez que se haya eliminado el hallazgo (la cita ya no existe) o se haya vuelto a fundamentar (el ejecutor hermano lo vuelve a verificar y confirma su validez; `--note` registra la confirmación). Es idempotente; agrega información al registro de auditoría del archivo adjunto. |
85
+ | `study-swarm requalify --status <corpus-dir> [--json]` | Vista de solo lectura del estado de la evidencia de un corpus: recuento de elementos retirados frente a elementos resueltos, desglose por motivo y modo de resolución, líneas por informe. Informativa (salida con el código `0`), a diferencia de la opción `--check`. |
86
+ | `study-swarm requalify --resolve <envío> <id> --mode removed\|regrounded [--note …]` | Eliminar una marca una vez que se haya eliminado el hallazgo (la cita ya no existe) o se haya vuelto a fundamentar (el ejecutor hermano lo vuelve a verificar y confirma su validez; `--note` registra la confirmación). Es idempotente; agrega información al registro de auditoría del archivo adjunto. |
84
87
 
85
88
  `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** sigue utilizando [`roleos verify-citations`](https://github.com/mcp-tool-shop-org/role-os) → prism.
86
89
 
@@ -104,7 +107,7 @@ Cuatro envíos completos y limpios sirven como referencia: [`examples/study-swar
104
107
  name: study-swarm lint
105
108
  on:
106
109
  pull_request:
107
- paths: ['**/*.dispatch.md', '.github/workflows/dispatches.yml']
110
+ paths: ['**/*.dispatch.md', '**/*.withdrawn.json', '.github/workflows/dispatches.yml']
108
111
  workflow_dispatch:
109
112
  concurrency:
110
113
  group: ${{ github.workflow }}-${{ github.ref }}
@@ -112,16 +115,20 @@ concurrency:
112
115
  jobs:
113
116
  lint:
114
117
  runs-on: ubuntu-latest
118
+ timeout-minutes: 5
115
119
  steps:
116
120
  - uses: actions/checkout@v4
117
121
  - uses: actions/setup-node@v4
118
122
  with: { node-version: '20' }
119
- - run: npx @dogfood-lab/study-swarm@latest lint dispatches/
123
+ - run: npx --yes @dogfood-lab/study-swarm@2.1.0 lint dispatches/
124
+ # Halt the build while any finding that became canon is withdrawn and not yet
125
+ # removed or re-grounded — the canon-rollback andon (exit 1 on any unresolved flag).
126
+ - run: npx --yes @dogfood-lab/study-swarm@2.1.0 requalify --check dispatches/
120
127
  ```
121
128
 
122
129
  ### Fija un envío para su reproducción (`dispatch.lock.json`)
123
130
 
124
- Un envío verificado y con base sólida solo es auditable si se puede indicar *qué lo produjo*. `study-swarm lock` escribe un archivo de bloqueo complementario que, según el agente de investigación, utiliza el direccionamiento por contenido para incluir el **ID de modelo resuelto** (nunca un alias dinámico), el **SHA-256 del mensaje exacto en bytes** y el **SHA-256 del esquema de la herramienta** que se le proporcionó, más el **comprobante externo del verificador**, todo integrado en un único `lock_sha256`. `study-swarm lock --verify` vuelve a generar esos hashes y falla si detecta alguna desviación, por lo que cualquier cambio en el mensaje, un modelo diferente o una modificación en la herramienta se detectan. Este es el estándar de reproducibilidad [PIN_PER_STEP](https://github.com/dogfood-lab/study-swarm) implementado. El sistema emite el registro; la CLI permanece sin dependencias y sin conexión a la red, solo normaliza (RFC 8785), calcula hashes y lo valida.
131
+ Un envío verificado y con base sólida solo es auditable si se puede indicar *qué lo produjo*. `study-swarm lock` escribe un archivo de bloqueo complementario que, según el agente de investigación, utiliza el direccionamiento por contenido para incluir el **ID de modelo resuelto** (nunca un alias dinámico), el **SHA-256 del prompt normalizado (BOM eliminado, saltos de línea a LF, NFC)** y el **SHA-256 del esquema de la herramienta** que se le proporcionó, más el **comprobante externo del verificador**, todo integrado en un único `lock_sha256`. `study-swarm lock --verify` vuelve a generar esos hashes y falla si detecta alguna desviación, por lo que cualquier cambio en el mensaje, un modelo diferente o una modificación en la herramienta se detectan. Este es el estándar de reproducibilidad [PIN_PER_STEP](https://github.com/dogfood-lab/study-swarm) implementado. El sistema emite el registro; la CLI permanece sin dependencias y sin conexión a la red, solo normaliza (RFC 8785), calcula hashes y lo valida.
125
132
 
126
133
  **Fija las entradas, no las salidas.** Fijar el modelo + el mensaje + la temperatura *no* hace que la salida de un LLM sea idéntica en bits; la invariancia por lotes, la no asociatividad de punto flotante, el enrutamiento de mezcla de expertos y la desviación silenciosa del proveedor están fuera del control de una herramienta offline. Por lo tanto, el bloqueo le proporciona **entradas reproducibles y salidas con detección de desviaciones**, nunca una "reproducción determinista". El diseño se basa, cita por cita, en [`examples/study-swarm-lock.dispatch.md`](examples/study-swarm-lock.dispatch.md): el primer envío que incluye su propio bloqueo ([`examples/study-swarm-lock.lock.json`](examples/study-swarm-lock.lock.json)).
127
134
 
@@ -145,11 +152,11 @@ study-swarm requalify --resolve d.dispatch.md arXiv:2402.15089 --mode removed
145
152
 
146
153
  ## Seguridad
147
154
 
148
- `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 le pasa a `lint` y escribe un único archivo `<slug>.dispatch.md` en el directorio actual para la opción `new` (rechazando sobrescribir y nunca saliendo del directorio de trabajo). La verificación basada en modelos que describe la metodología (paso 4) la realizan las herramientas complementarias, no este paquete. Consulte [SECURITY.md](SECURITY.md).
155
+ `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 lee los archivos que nombras. `new` escribe un único `<slug>.dispatch.md` en el directorio de trabajo (sin sobrescribir y sin salir de él). `lock`, `withdraw` y `requalify` también escriben un lock, un sidecar de lápida y, si pasas `--receipt`, un recibo en la ruta que indicas. La verificación basada en modelos que describe la metodología (paso 4) la realizan las herramientas complementarias, no este paquete. Consulte [SECURITY.md](SECURITY.md).
149
156
 
150
157
  ## Estado
151
158
 
152
- Un protocolo funcional, verificado externamente por su propio mecanismo: una familia de modelos diferente verifica sus citas (consulte la prueba anterior). **v1.1** mejora el verificador, ya que la primera versión era silenciosa: fundamento descompuesto/ternario, fundamento en tiempo de generación, una cascada controlada por un oráculo para combinar lentes y abstención calibrada; todo ello se basa en el envío verificado v1.1. **v1.2** hace que un envío sea reproducible mediante la repetición de bytes: `study-swarm lock` fija el modelo resuelto, el mensaje y el esquema de herramientas por paso, además del recibo del verificador, y `lock --verify` falla y se cierra si hay cambios. **v1.3** hace que la anulación sea ejecutable: cuando un hallazgo que ya se convirtió en canon se retira, `study-swarm withdraw` marca todos los elementos dependientes y `requalify --check` los detiene y los cierra hasta que se eliminen o se vuelvan a fundamentar; este es un compensador con nombre, con recibo e idempotente. 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.
159
+ Un protocolo funcional, verificado externamente por su propio mecanismo: una familia de modelos diferente verifica sus citaciones (consulte la prueba anterior). **v1.1** mejora el verificador en los aspectos que no se abordaron en la primera versión: base descompuesta/ternaria, base temporal de generación, una cascada controlada por un oráculo para combinar lentes y abstención calibrada; cada uno de estos elementos está basado en el informe verificado v1.1. **v1.2** permite que un informe se pueda reproducir a partir de sus datos: `study-swarm lock` fija el modelo, la instrucción y el esquema de herramientas resueltos por paso, además del recibo del verificador, y `lock --verify` falla si se detecta alguna desviación. **v1.3** hace que la reversión sea ejecutable: cuando un hallazgo que ya formaba parte del canon se retira, `study-swarm withdraw` señala todos los elementos dependientes y `requalify --check` los detiene hasta que se eliminen o vuelvan a verificar; esto crea un compensador con nombre, recibo e idempotencia. **v2.0** hace que una mayor parte del protocolo sea ejecutable y refuerza el bloqueo: `lint --strict` señala las citaciones huérfanas (el único modo de fallo que la CLI no podía detectar), `lock --init` crea el registro de plantilla, `requalify --status` lee el estado de la evidencia de un corpus y el direccionamiento del contenido del bloqueo se separa por dominio (esquema de artefactos v2: en lugar de marcar incorrectamente como manipulado un bloqueo de una versión anterior, se regenera; la interfaz de comandos de la CLI sigue siendo compatible con versiones anteriores). 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.
153
160
 
154
161
  Con licencia MIT.
155
162
 
package/README.fr.md CHANGED
@@ -23,8 +23,8 @@ Il applique sa propre méthode. Le protocole prescrit l’utilisation d’envelo
23
23
 
24
24
  1. **Identifiez** 3 à 5 questions de conception essentielles auxquelles des preuves empiriques permettraient de modifier la réponse.
25
25
  2. **Déployez** un agent de recherche par question, en parallèle. Chacun doit renvoyer les titres d’articles + les auteurs + les années + les URL + une conclusion en une phrase (la spécificité prime sur l’étendue : « 6 à 8 conclusions bien étayées sont plus efficaces que 20 observations vagues »).
26
- 3. **Synthétisez** les conclusions 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 la mémoire du modèle), puis une **lentille d’exactitude** 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 signifiant que les citations sont correctes).
26
+ 3. **Synthétisez** les conclusions dans une section intitulée *Research grounding* (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 la mémoire du modèle), puis une **lentille d’exactitude** confirme que la conclusion correspond à la source. **Écartez** une conclusion fabriquée ; **corrigez une mauvaise attribution une fois** et revérifiez (un second verdict non conforme l’écarte). **Arrêtez et escaladez** seulement si le vérificateur ou l’oracle de récupération n’est pas disponible (ne considérez jamais l’absence comme signifiant que les citations sont correctes).
28
28
  5. **Reliez** chaque choix architectural à une conclusion en utilisant un numéro. Les citations qui n’ont pas d’implication pour la conception sont du bruit.
29
29
 
30
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)**.
@@ -75,12 +75,15 @@ npm i -g @dogfood-lab/study-swarm # or run ad-hoc: npx @dogfood-lab/study-sw
75
75
  |---|---|
76
76
  | `study-swarm protocol` | Affiche le protocole complet : les cinq étapes, la table d’arrêt et la norme de référencement. |
77
77
  | `study-swarm new <slug>` | Crée un fichier `<slug>.dispatch.md` avec le squelette des cinq étapes à compléter. |
78
- | `study-swarm lint [--json] <path…>` | Vérifie la *pertinence de la recherche* d’une analyse 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 du type « des études montrent que… » ne sont pas acceptées. En cas de violation, le programme se termine avec le code `1`, ce qui permet de contrôler l’intégration continue (CI). Un `<path>` peut être un fichier, un répertoire (validé récursivement pour les fichiers `*.dispatch.md`) ou `-` pour l’entrée standard ; l’option `--json` génère un rapport lisible par machine. |
79
- | `study-swarm lock <dispatch> --from <orchestration.json>` | Enregistre une analyse pour la relecture : écrit le contenu de `<dispatch>.lock.json`, qui, par agent, adresse le **modèle résolu** (jamais un alias flottant), le **SHA-256 de l’invite exacte**, et le **SHA-256 du schéma d’outil** qui lui a été fourni, ainsi que le **reçu du vérificateur** de l’étape 4, dans un seul `lock_sha256`. |
78
+ | `study-swarm lint [--json] [--strict] <path…>` | Vérifiez la *Research grounding* (justification de la recherche) d’un document par rapport à la norme de référencement : chaque résultat doit comporter un auteur, une année et un identifiant résolvable (arXiv / DOI / URL / RFC) ; les affirmations du type « des études montrent que… » ne sont pas acceptées. En cas de violation, quittez avec le code `1`, ce qui bloque l’exécution 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 ; `--json` génère un rapport lisible par machine. L’option `--strict` signale également les **citations orphelines** (un résultat qui ne fait pas référence à une option de l’étape 5), car « les citations sans lien sont du bruit » (cette option est activable, de sorte que la validation par défaut n’est pas modifiée). |
79
+ | `study-swarm return <dispatch> [--check]` | Écrit les résultats : `<stem>.results.md` est la feuille à remettre, et `<stem>.results.json` conserve les mêmes faits à côté du dispatch pour la prochaine exécution. `--check` échoue si l'une des deux copies a dérivé. |
80
+ | `study-swarm lock --init <dispatch>` | Créez le fichier `<dispatch>.orchestration.json`, un modèle à remplir pour créer un enregistrement d’ensemble (une étape par agent de l’étape 2) qui sera utilisé avec `lock … --from`. |
81
+ | `study-swarm lock <dispatch> --from <orchestration.json>` | Enregistre une analyse pour la relecture : écrit le contenu de `<dispatch>.lock.json`, qui, par agent, adresse le **modèle résolu** (jamais un alias flottant), le **SHA-256 de l’invite normalisée (BOM retiré, sauts de ligne en LF, NFC)**, et le **SHA-256 du schéma d’outil** qui lui a été fourni, ainsi que le **reçu du vérificateur** de l’étape 4, dans un seul `lock_sha256`. |
80
82
  | `study-swarm lock --verify <dispatch> [--from …]` | Recalcule ces hachages et vérifie qu’ils correspondent à ceux enregistrés ; en cas d’écart, le programme se termine avec le code `1`, ce qui permet de contrôler l’intégration continue (CI), comme un fichier de verrouillage des dépendances. Sans l’option `--from`, il vérifie l’intégrité du propre fichier de verrouillage. |
81
- | `study-swarm withdraw <id> --reason <reason> [--from <dir>] [--receipt <path>]` | **Mécanisme de compensation pour annulation.** Marquer chaque élément du corpus dont la *justification* cite `<id>` comme `preuve retirée` (un fichier d’annulation `<slug>.withdrawn.json` – à marquer, ne jamais supprimer) et générer un reçu d’annulation identifié par son contenu. `--reason` ∈ `fabriqué · mal attribué · rétracté · vérificateur inversé · autre`. |
82
- | `study-swarm requalify --check <corpus-dir>` | En cas d’erreur, interrompre le processus (quitter avec le code `1`) pour tout élément portant un indicateur `preuve retirée` non résolu – cet indicateur est comme un signal d’alarme qui **arrête** les dépendances d’une conclusion annulée jusqu’à ce qu’elle soit supprimée ou réévaluée. Intégré à CI. |
83
- | `study-swarm requalify --resolve <dispatch> <id> --mode removed\ | regrounded [--note …]` | Supprimer l’indicateur une fois que la conclusion est supprimée (la citation a disparu) ou réévaluée (revérifiée par le processus parallèle ; `--note` enregistre l’attestation). Idempotent ; ajoute des informations au journal d’audit du fichier. |
83
+ | `study-swarm withdraw <id> --reason <reason> [--from <dir>] [--receipt <path>]` | **Mécanisme de compensation en cas de rétractation.** Signalez chaque document du corpus dont la *Research grounding* (justification de la recherche) cite `<id>` comme étant `evidence-withdrawn` (un fichier annexe indiquant une suppression, `<slug>.withdrawn.json` : signale, mais ne supprime pas) et générez un reçu de retrait identifié par son contenu. L’option `--reason` peut être `fabricated · misattributed · retracted · verifier-flipped · other`. |
84
+ | `study-swarm requalify --check <corpus-dir>` | En cas d’échec (quittez avec le code `1`) pour tout document contenant un indicateur `evidence-withdrawn` non résolu, cela déclenche l’andon qui **interrompt** les dépendances d’un résultat retiré jusqu’à ce qu’il soit supprimé ou réintégré. Cela bloque l’exécution continue. |
85
+ | `study-swarm requalify --status <corpus-dir> [--json]` | Affiche une vue en lecture seule de l’état des preuves d’un corpus : nombre de documents retirés par rapport au nombre de documents résolus, répartition par raison et mode de résolution, informations par document. C’est une information (quittez avec le code `0`), contrairement à la validation `--check`. |
86
+ | `study-swarm requalify --resolve <dispatch> <id> --mode removed\|regrounded [--note …]` | Supprimez un indicateur une fois que le résultat est supprimé (la citation n’existe plus) ou réintégré (revérifié par l’exécuteur associé ; `--note` enregistre l’attestation). C’est idempotent ; cela ajoute des informations à l’historique d’audit du fichier annexe. |
84
87
 
85
88
  `lint` est déterministe : il n’effectue aucun appel au modèle, ce qui le rend sûr pour l’intégration continue (CI). Il applique localement la **norme de référencement de l’étape 3** ; la vérification basée sur un modèle à l’**étape 4** s’appuie toujours sur [`roleos verify-citations`](https://github.com/mcp-tool-shop-org/role-os) → prism.
86
89
 
@@ -93,7 +96,7 @@ study-swarm lint my-decision.dispatch.md # enforce the sourcing standard
93
96
  roleos verify-citations my-decision.dispatch.md # model-based Step 4 (different family, via prism)
94
97
  ```
95
98
 
96
- Quatre éléments complets et validés sont fournis en tant que références : [`examples/study-swarm-self.dispatch.md`](examples/study-swarm-self.dispatch.md) (la décision centrale du protocole, concise), [`examples/study-swarm-v1_1.dispatch.md`](examples/study-swarm-v1_1.dispatch.md) (l’ensemble complet de la version 1.1 – 27 citations, chacune vérifiée en externe), [`examples/study-swarm-lock.dispatch.md`](examples/study-swarm-lock.dispatch.md) (la conception du verrouillage de la version 1.2 – 39 citations, soumise au processus parallèle, et le premier élément à inclure son propre verrouillage), et [`examples/study-swarm-canon-rollback.dispatch.md`](examples/study-swarm-canon-rollback.dispatch.md) (la conception d’annulation de la version 1.3 – 27 citations relatives à la révocation, au retrait, aux séquences d’événements et à l’invalidation de la construction, et le premier élément à être annulé puis réévalué).
99
+ Quatre documents complets et validés sont fournis en tant que références : [`examples/study-swarm-self.dispatch.md`](examples/study-swarm-self.dispatch.md) (la décision centrale du protocole, concise), [`examples/study-swarm-v1_1.dispatch.md`](examples/study-swarm-v1_1.dispatch.md) (l’ensemble complet de la conception v1.1 : 27 citations, chacune vérifiée en externe), [`examples/study-swarm-lock.dispatch.md`](examples/study-swarm-lock.dispatch.md) (la conception du verrouillage v1.2 : 39 citations, validée par l’exécuteur, et le premier document à inclure son propre verrouillage), et [`examples/study-swarm-canon-rollback.dispatch.md`](examples/study-swarm-canon-rollback.dispatch.md) (la conception de la rétractation v1.3 : 27 citations relatives à la révocation, au retrait, aux sagas et à l’invalidation de la construction, et le premier document à être retiré puis réintégré).
97
100
 
98
101
  ### Intégration dans l’intégration continue (CI)
99
102
 
@@ -104,7 +107,7 @@ Quatre éléments complets et validés sont fournis en tant que références :
104
107
  name: study-swarm lint
105
108
  on:
106
109
  pull_request:
107
- paths: ['**/*.dispatch.md', '.github/workflows/dispatches.yml']
110
+ paths: ['**/*.dispatch.md', '**/*.withdrawn.json', '.github/workflows/dispatches.yml']
108
111
  workflow_dispatch:
109
112
  concurrency:
110
113
  group: ${{ github.workflow }}-${{ github.ref }}
@@ -112,22 +115,26 @@ concurrency:
112
115
  jobs:
113
116
  lint:
114
117
  runs-on: ubuntu-latest
118
+ timeout-minutes: 5
115
119
  steps:
116
120
  - uses: actions/checkout@v4
117
121
  - uses: actions/setup-node@v4
118
122
  with: { node-version: '20' }
119
- - run: npx @dogfood-lab/study-swarm@latest lint dispatches/
123
+ - run: npx --yes @dogfood-lab/study-swarm@2.1.0 lint dispatches/
124
+ # Halt the build while any finding that became canon is withdrawn and not yet
125
+ # removed or re-grounded — the canon-rollback andon (exit 1 on any unresolved flag).
126
+ - run: npx --yes @dogfood-lab/study-swarm@2.1.0 requalify --check dispatches/
120
127
  ```
121
128
 
122
129
  ### Enregistre une analyse pour la relecture (`dispatch.lock.json`)
123
130
 
124
- Une analyse validée et vérifiée n’est auditable que si vous pouvez indiquer *ce qui l’a produite*. `study-swarm lock` écrit un fichier de verrouillage associé qui, par agent de recherche, adresse le **modèle résolu** (jamais un alias flottant), le **SHA-256 de l’invite exacte**, et le **SHA-256 du schéma d’outil** qui lui a été fourni, ainsi que le **reçu du vérificateur externe** dans un seul `lock_sha256`. `study-swarm lock --verify` recalcule ces hachages et échoue si l’un d’eux diffère, de sorte qu’une invite modifiée, un modèle remplacé ou une surface d’outil décalée sont détectés : la norme de reproductibilité [PIN_PER_STEP](https://github.com/dogfood-lab/study-swarm), rendue exécutable. L’ensemble des outils émet le rapport ; l’interface en ligne de commande reste sans dépendance et sans connexion réseau, se contentant de normaliser (RFC 8785), de hacher et de valider les données.
131
+ Une analyse validée et vérifiée n’est auditable que si vous pouvez indiquer *ce qui l’a produite*. `study-swarm lock` écrit un fichier de verrouillage associé qui, par agent de recherche, adresse le **modèle résolu** (jamais un alias flottant), le **SHA-256 de l’invite normalisée (BOM retiré, sauts de ligne en LF, NFC)**, et le **SHA-256 du schéma d’outil** qui lui a été fourni, ainsi que le **reçu du vérificateur externe** dans un seul `lock_sha256`. `study-swarm lock --verify` recalcule ces hachages et échoue si l’un d’eux diffère, de sorte qu’une invite modifiée, un modèle remplacé ou une surface d’outil décalée sont détectés : la norme de reproductibilité [PIN_PER_STEP](https://github.com/dogfood-lab/study-swarm), rendue exécutable. L’ensemble des outils émet le rapport ; l’interface en ligne de commande reste sans dépendance et sans connexion réseau, se contentant de normaliser (RFC 8785), de hacher et de valider les données.
125
132
 
126
133
  **Il fixe les entrées, pas les sorties.** Le fait de fixer le modèle + l’invite + la température ne permet *pas* d’obtenir une sortie d’un LLM qui soit exactement identique à chaque fois — l’invariance par lots, la non-associativité des nombres à virgule flottante, le routage du mélange d’experts et la dérive silencieuse du fournisseur sont autant de facteurs qui échappent au contrôle d’un outil hors ligne. Ainsi, le verrouillage vous donne des **entrées reproductibles et des sorties dont la dérive peut être détectée**, mais jamais une « reproduction déterministe ». La conception est basée sur des données probantes, citation par citation, dans [`examples/study-swarm-lock.dispatch.md`](examples/study-swarm-lock.dispatch.md) — le premier outil à intégrer son propre verrouillage ([`examples/study-swarm-lock.lock.json`](examples/study-swarm-lock.lock.json)).
127
134
 
128
- ### Annuler une conclusion retirée (`withdraw` / `requalify`)
135
+ ### Annulez un résultat retiré (`withdraw` / `requalify`)
129
136
 
130
- Une conclusion vérifiée devient **canonique** – elle influence une décision ultérieure. Alors, que se passe-t-il lorsqu’elle est ensuite **retirée** (une citation s’avère être fabriquée ou mal attribuée lors d’une nouvelle exécution, un article cité est rétracté, ou le processus de validation l’invalide) ? Un `git revert` ne suffit pas, car la conclusion a déjà été diffusée. Le mécanisme de compensation pour annulation rend possible cette opération :
137
+ Un résultat vérifié devient **canonique** : il influence une décision ultérieure. Que se passe-t-il lorsqu’il est ensuite **retiré** (une citation s’avère être fabriquée ou mal attribuée lors d’une nouvelle exécution, un article cité est retiré ou la validation le rejette) ? Un `git revert` ne suffit pas, car le résultat a déjà été propagé. Le mécanisme de compensation en cas de rétractation rend possible cette opération :
131
138
 
132
139
  ```bash
133
140
  study-swarm withdraw arXiv:2402.15089 --reason misattributed --from dispatches/ --receipt rollback.json
@@ -137,7 +144,7 @@ study-swarm requalify --check dispatches/ # exit 1 while any flag is un
137
144
  study-swarm requalify --resolve d.dispatch.md arXiv:2402.15089 --mode removed # or: --mode regrounded --note "<attestation>"
138
145
  ```
139
146
 
140
- `requalify --check` **échoue** jusqu’à ce que chaque conclusion marquée soit supprimée ou **réévaluée** (revérifiée par le processus parallèle – l’interface en ligne de commande enregistre l’attestation, mais ne la revérifie pas elle-même). Le retrait est mis en évidence de manière **contrastive**, et non silencieuse. Tout – le fichier d’annulation et le reçu – est identifié par son contenu et permet de détecter les dérives, et opère uniquement sur la couche des *preuves* : `lock --verify` n’est pas affecté par un retrait. La conception est basée sur [`examples/study-swarm-canon-rollback.dispatch.md`](examples/study-swarm-canon-rollback.dispatch.md), et le [PROTOCOL.md](PROTOCOL.md) § « Compenser une conclusion retirée » représente la forme exécutable. Il s’agit de la norme **NAMED_COMPENSATORS** rendue exécutable : une annulation nommée et idempotente qui laisse un état final connu et génère un reçu.
147
+ `requalify --check` **échoue** jusqu’à ce que chaque résultat signalé soit supprimé ou **réintégré** (revérifié par l’exécuteur associé ; la CLI enregistre l’attestation, mais ne le revérifie pas elle-même). Le retrait est mis en évidence de manière **contrastée**, et non silencieuse. Tout : le fichier annexe et le reçu sont identifiés par leur contenu et peuvent être suivis pour détecter les dérives, et cela n’opère que sur la couche des *preuves* : `lock --verify` n’est pas affecté par un retrait. La conception est basée sur [`examples/study-swarm-canon-rollback.dispatch.md`](examples/study-swarm-canon-rollback.dispatch.md), et le [PROTOCOL.md](PROTOCOL.md) § « Compenser un résultat retiré » représente la forme exécutable. Il s’agit de la norme **NAMED_COMPENSATORS** rendue exécutable : une opération d’annulation nommée et idempotente qui laisse un état final connu et un reçu.
141
148
 
142
149
  ## Pourquoi cela fonctionne, en un clin d’œil
143
150
 
@@ -145,11 +152,11 @@ study-swarm requalify --resolve d.dispatch.md arXiv:2402.15089 --mode removed
145
152
 
146
153
  ## Sécurité
147
154
 
148
- `study-swarm` fournit une **CLI légère et sans dépendances** (`study-swarm`) en plus de la méthodologie. Il n’effectue **aucune requête réseau ou vers le modèle** et ne collecte **aucune télémétrie** ; il n’y a pas de secrets ni d’identifiants dans le code source. Au moment de l’exécution, il lit uniquement le fichier que vous transmettez à `lint` et écrit un seul fichier `<slug>.dispatch.md` dans le répertoire courant pour `new` (il refuse d’écraser les fichiers et ne fonctionne jamais en dehors du répertoire de travail). La vérification basée sur le modèle décrite par la méthodologie (étape 4) est effectuée par les outils associés, et non par ce paquet. Voir [SECURITY.md](SECURITY.md).
155
+ `study-swarm` fournit une **CLI légère et sans dépendances** (`study-swarm`) en plus de la méthodologie. Il n’effectue **aucune requête réseau ou vers le modèle** et ne collecte **aucune télémétrie** ; il n’y a pas de secrets ni d’identifiants dans le code source. À l’exécution, il lit les fichiers que vous nommez. `new` écrit un seul `<slug>.dispatch.md` dans le répertoire de travail (sans écraser, et sans en sortir). `lock`, `withdraw` et `requalify` écrivent aussi un lock, un sidecar tombstone et, avec `--receipt`, un reçu au chemin indiqué. La vérification basée sur le modèle décrite par la méthodologie (étape 4) est effectuée par les outils associés, et non par ce paquet. Voir [SECURITY.md](SECURITY.md).
149
156
 
150
157
  ## État actuel
151
158
 
152
- 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). La **version 1.1** améliore le processus de validation là où la première version était silencieuse : justification décomposée/ternaire, justification au moment de la génération, cascade à activation par un oracle pour combiner les perspectives et abstention calibrée – chaque élément est basé sur la conclusion vérifiée de la version 1.1. La **version 1.2** rend un élément rejouable en boucle : `study-swarm lock` fixe le modèle résolu, l’invite et le schéma d’outils pour chaque étape, ainsi que le reçu du processus de validation, et `lock --verify` échoue en cas de dérive. La **version 1.3** rend l’annulation exécutable : lorsqu’une conclusion qui est déjà devenue canonique est retirée, `study-swarm withdraw` marque toutes les dépendances et `requalify --check` les interrompt et provoque leur échec jusqu’à ce qu’elles soient supprimées ou réévaluées – une compensation nommée, avec reçu et idempotente. Ce dépôt constitue la référence publique ; [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 des systèmes à l’ère de l’IA.
159
+ 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). La **version 1.1** affine le validateur, alors que la première version était silencieuse : justification décomposée/ternaire, justification au moment de la génération, cascade à validation par oracle pour combiner les perspectives et abstention calibrée ; chaque élément est basé sur le document vérifié v1.1. La **version 1.2** rend un document rejouable : `study-swarm lock` fixe le modèle résolu, l’invite et le schéma d’outils par étape, ainsi que le reçu du validateur, et `lock --verify` échoue en cas de dérive. La **version 1.3** rend la rétractation exécutable : lorsqu’un résultat qui est déjà devenu canonique est retiré, `study-swarm withdraw` signale toutes les dépendances et `requalify --check` les interrompt jusqu’à ce qu’elles soient supprimées ou réintégrées : un mécanisme de compensation nommé, avec reçu et idempotent. La **version 2.0** rend davantage d’éléments du protocole exécutables et renforce le verrouillage : `lint --strict` signale les citations orphelines (le seul mode d’échec que la CLI ne pouvait pas détecter), `lock --init` crée le modèle d’ensemble, `requalify --status` affiche l’état des preuves d’un corpus et le verrouillage est identifié par son contenu de manière spécifique au domaine (schéma d’artefacts v2 : un verrouillage provenant d’une version antérieure est régénéré plutôt que signalé à tort comme étant altéré ; la surface de commande de la CLI reste compatible avec les versions antérieures). Ce dépôt est la référence publique ; [PROTOCOL.md](PROTOCOL.md) représente la forme exécutable. Il fait partie de la famille [dogfood-lab](https://github.com/dogfood-lab), qui propose des méthodes et des exemples pour construire dans l’ère de l’IA.
153
160
 
154
161
  Licence MIT.
155
162
 
package/README.hi.md CHANGED
@@ -23,11 +23,11 @@
23
23
 
24
24
  1. **पहचानें** 3–5 ऐसे डिज़ाइन संबंधी प्रश्न जिनमें भार वहन करने की क्षमता हो, और जिनके उत्तर अनुभवजन्य साक्ष्य के आधार पर बदले जा सकते हैं।
25
25
  2. **प्रत्येक प्रश्न के लिए एक-एक शोधकर्ता को नियुक्त करें**, ताकि वे समानांतर रूप से काम कर सकें। प्रत्येक शोधकर्ता को निम्नलिखित जानकारी प्रदान करनी होगी: लेख का शीर्षक + लेखक + वर्ष + यूआरएल + एक वाक्य में निष्कर्ष – व्यापकता की तुलना में विशिष्टता पर ध्यान दें ("6–8 अच्छी तरह से संदर्भित निष्कर्ष, 20 अस्पष्ट विचारों से बेहतर हैं")।
26
- 3. **निष्कर्षों को संश्लेषित करें** और उन्हें *अनुसंधान आधार* नामक अनुभाग में प्रस्तुत करें: `N. <निष्कर्ष>. <लेखक> <वर्ष> (<arXiv/DOI>). <डिज़ाइन निहितार्थ>।`
27
- 4. **बाह्य रूप से सत्यापित करें** – एक *अलग मॉडल परिवार*, जिसमें तर्क को हटा दिया गया है, दो चरणों में प्रत्येक उद्धरण की जाँच करता है: एक **पुनर्प्राप्ति ओरेकल** पुष्टि करता है कि लेख मौजूद है (यह कभी भी मॉडल की स्मृति पर निर्भर नहीं करेगा), फिर एक **आधारभूतता लेंस** यह पुष्टि करता है कि निष्कर्ष स्रोत से मेल खाता है। यदि कोई जानकारी मनगढ़ंत या गलत तरीके से प्रस्तुत की गई है, तो प्रक्रिया को **रोकें**; यदि सत्यापनकर्ता या पुनर्प्राप्ति ओरेकल अनुपलब्ध है, तो प्रक्रिया को **रोकें और आगे बढ़ाएं** (कभी भी अनुपस्थिति को "उद्धरण ठीक हैं" के रूप में न मानें)।
26
+ 3. **निष्कर्षों को संश्लेषित करें** और उन्हें *Research grounding* (अनुसंधान आधार) नामक अनुभाग में प्रस्तुत करें: `N. <निष्कर्ष>. <लेखक> <वर्ष> (<arXiv/DOI>). <डिज़ाइन निहितार्थ>।`
27
+ 4. **बाह्य रूप से सत्यापित करें** – एक *अलग मॉडल परिवार*, जिसमें तर्क को हटा दिया गया है, दो चरणों में प्रत्येक उद्धरण की जाँच करता है: एक **पुनर्प्राप्ति ओरेकल** पुष्टि करता है कि लेख मौजूद है (यह कभी भी मॉडल की स्मृति पर निर्भर नहीं करेगा), फिर एक **आधारभूतता लेंस** यह पुष्टि करता है कि निष्कर्ष स्रोत से मेल खाता है। मनगढ़ंत निष्कर्ष को **हटाएँ**; गलत श्रेय को **एक बार सुधारें** और फिर से जाँचें (दूसरा अशुद्ध निर्णय उसे हटा देता है)। **रोकें और आगे बढ़ाएँ** केवल तब जब सत्यापनकर्ता या पुनर्प्राप्ति ओरेकल अनुपलब्ध हो (अनुपस्थिति को "उद्धरण ठीक हैं" न मानें)।
28
28
  5. **प्रत्येक वास्तुशिल्प विकल्प को संख्या के आधार पर किसी निष्कर्ष से जोड़ें।** बिना डिज़ाइन निहितार्थ वाले उद्धरण अनावश्यक हैं।
29
29
 
30
- पूर्ण निष्पादन योग्य विवरण – जिसमें रोक तालिका, स्रोत मानक और समग्र नियम शामिल हैं – यह **[PROTOCOL.md]** में उपलब्ध है।
30
+ पूर्ण निष्पादन योग्य विवरण – जिसमें रोक तालिका, स्रोत मानक और समग्र नियम शामिल हैं – यह **[PROTOCOL.md](PROTOCOL.md)** में उपलब्ध है।
31
31
 
32
32
  ## एक *अलग* परिवार क्यों, और उसमें तर्क की कमी क्यों है?
33
33
 
@@ -75,12 +75,15 @@ npm i -g @dogfood-lab/study-swarm # or run ad-hoc: npx @dogfood-lab/study-sw
75
75
  |---|---|
76
76
  | `study-swarm protocol` | पूरे प्रोटोकॉल को प्रिंट करें - पांच चरण, रोक तालिका, सोर्सिंग मानक। |
77
77
  | `study-swarm new <slug>` | पांच-चरणीय ढांचे के साथ `<slug>.dispatch.md` बनाएं ताकि इसे भरा जा सके। |
78
- | `study-swarm lint [--json] <path…>` | एक प्रेषण की *अनुसंधान आधार* की जांच सोर्सिंग मानक के विरुद्ध करें - प्रत्येक निष्कर्ष में एक लेखक, एक वर्ष और एक हल करने योग्य पहचानकर्ता (arXiv / DOI / URL) होना चाहिए; "अध्ययनों से पता चलता है..." जैसे अस्पष्ट कथन अस्वीकार कर दिए जाते हैं। उल्लंघन होने पर `1` से बाहर निकलें, इसलिए यह CI को संसाधित करता है। `<path>` एक फ़ाइल, एक निर्देशिका (जो `*.dispatch.md` के लिए पुनरावर्ती रूप से जांच की जाती है), या `-` stdin के लिए हो सकता है; `--json` मशीन-पठनीय रिपोर्ट उत्सर्जित करता है। |
79
- | `study-swarm lock <dispatch> --from <orchestration.json>` | किसी प्रेषण को फिर से चलाने के लिए पिन करें – `<dispatch>.lock.json` सामग्री-आधारित, चरण-2 एजेंट के अनुसार लिखें, **समाधान मॉडल आईडी** + **बाइट-सटीक प्रॉम्प्ट का SHA-256** + **टूल स्कीमा का SHA-256**, साथ ही चरण-4 **सत्यापन रसीद**, एक `lock_sha256` में समेकित करें। |
78
+ | `study-swarm lint [--json] [--strict] <path…>` | किसी प्रेषण की *Research grounding* (अनुसंधान नींव) को स्रोत मानक के विरुद्ध जांचें – प्रत्येक निष्कर्ष में एक लेखक, वर्ष और एक पहचानने योग्य पहचानकर्ता (arXiv / DOI / URL / RFC) होना चाहिए; "अध्ययनों से पता चलता है…" जैसे अस्पष्ट दावे अस्वीकार किए जाते हैं। उल्लंघन होने पर `1` कोड लौटाएं, ताकि यह CI प्रक्रिया को रोक सके। `<path>` एक फ़ाइल, एक निर्देशिका (जिसमें `*.dispatch.md` के लिए पुनरावर्ती रूप से जांच की जाती है), या stdin के लिए `-` हो सकता है; `--json` एक मशीन-पठनीय रिपोर्ट उत्पन्न करता है। `--strict` अतिरिक्त रूप से **अकेले उद्धरणों** को चिह्नित करता है – कोई भी निष्कर्ष जो चरण-5 विकल्प का संदर्भ नहीं देता है – क्योंकि "बिना किसी संबंध के उद्धरण बेकार हैं" (यह वैकल्पिक है, इसलिए डिफ़ॉल्ट CI प्रक्रिया अपरिवर्तित रहती है)। |
79
+ | `study-swarm return <dispatch> [--check]` | परिणाम लिखता है: `<stem>.results.md` वह शीट है जो किसी को दी जाती है, और `<stem>.results.json` वही तथ्य dispatch के पास अगली बार के लिए रखता है। `--check` तब विफल होता है जब कोई प्रति dispatch से हट जाए। |
80
+ | `study-swarm lock --init <dispatch>` | `<dispatch>.orchestration.json` बनाएं – एक रिक्त स्थान भरने वाला ढांचा रिकॉर्ड (प्रत्येक चरण-2 एजेंट के लिए एक चरण) जिसे `lock … --from` में फीड किया जाता है। |
81
+ | `study-swarm lock <dispatch> --from <orchestration.json>` | किसी प्रेषण को फिर से चलाने के लिए पिन करें – `<dispatch>.lock.json` सामग्री-आधारित, चरण-2 एजेंट के अनुसार लिखें, **समाधान मॉडल आईडी** + **पाठ-सामान्यीकृत प्रॉम्प्ट का SHA-256 (BOM हटा, नई पंक्ति LF, NFC)** + **टूल स्कीमा का SHA-256**, साथ ही चरण-4 **सत्यापन रसीद**, एक `lock_sha256` में समेकित करें। |
80
82
  | `study-swarm lock --verify <dispatch> [--from …]` | उन हैश को फिर से प्राप्त करें और पुष्टि करें कि वे लॉक से मेल खाते हैं; यदि कोई विचलन होता है, तो यह `1` पर समाप्त हो जाएगा, इसलिए यह पैकेज लॉकफ़ाइल की तरह CI को नियंत्रित करता है। `--from` के बिना, यह लॉक की अपनी अखंडता की जांच करता है। |
81
- | `study-swarm withdraw <id> --reason <reason> [--from <dir>] [--receipt <path>]` | **कैनन-रोलबैक क्षतिपूर्ति।** कॉर्पस में प्रत्येक प्रेषण को चिह्नित करें, जिसमें *अनुसंधान आधार* `<id>` को `सबूत-वापस लिया गया` के रूप में उद्धृत किया गया है (एक मकबरे की साइडकार `<slug>.withdrawn.json` — चिह्नित करें, कभी भी हटाएं नहीं) और सामग्री-आधारित वापसी रसीद जारी करें। `--reason` ∈ `गढ़ा हुआ · गलत तरीके से श्रेय दिया गया · वापस लिया गया · सत्यापनकर्ता-उलट गया · अन्य`। |
83
+ | `study-swarm withdraw <id> --reason <reason> [--from <dir>] [--receipt <path>]` | **कैनन-रोलबैक क्षतिपूर्ति।** कॉर्पस में प्रत्येक प्रेषण को चिह्नित करें, जिसमें *Research grounding* (अनुसंधान आधार) `<id>` को `सबूत-वापस लिया गया` के रूप में उद्धृत किया गया है (एक मकबरे की साइडकार `<slug>.withdrawn.json` — चिह्नित करें, कभी भी हटाएं नहीं) और सामग्री-आधारित वापसी रसीद जारी करें। `--reason` ∈ `fabricated · misattributed · retracted · verifier-flipped · other` (गढ़ा हुआ, गलत श्रेय, वापस लिया गया, सत्यापनकर्ता-उलट, अन्य)। |
82
84
  | `study-swarm requalify --check <corpus-dir>` | किसी भी ऐसे प्रेषण के लिए विफल बंद (निकास `1`) जिसमें एक अनसुलझा `सबूत-वापस लिया गया` ध्वज हो — वह उपकरण जो किसी वापस लिए गए निष्कर्ष की निर्भरताओं को तब तक रोकता है जब तक कि उसे हटाया या पुन: स्थापित नहीं किया जाता। गेट्स सीआई। |
83
- | `study-swarm requalify --resolve <dispatch> <id> --mode removed\ | regrounded [--note …]` | एक बार जब निष्कर्ष हटा दिया जाता है (उद्धरण गायब हो जाता है) या पुन: स्थापित किया जाता है, तो एक ध्वज साफ़ करें (भाई रनर द्वारा पुन: सत्यापित स्वच्छ; `--note` सत्यापन को रिकॉर्ड करता है)। आइडेंपोटेंट; साइडकार के ऑडिट ट्रेल में जोड़ता है। |
85
+ | `study-swarm requalify --status <corpus-dir> [--json]` | एक कॉर्पस का केवल पढ़ने योग्य प्रमाण-स्वास्थ्य **दृश्य** – वापस लिए गए बनाम हल किए गए निष्कर्षों की संख्या, कारण और समाधान मोड द्वारा वर्गीकरण, प्रति प्रेषण पंक्तियाँ। सूचनात्मक (कोड `0` लौटाएं), `--check` प्रक्रिया से अलग। |
86
+ | `study-swarm requalify --resolve <dispatch> <id> --mode removed\|regrounded [--note …]` | एक बार जब निष्कर्ष हटा दिया जाता है (उद्धरण गायब हो जाता है) या पुन: स्थापित किया जाता है, तो एक ध्वज साफ़ करें (भाई रनर द्वारा पुन: सत्यापित स्वच्छ; `--note` सत्यापन को रिकॉर्ड करता है)। आइडेंपोटेंट; साइडकार के ऑडिट ट्रेल में जोड़ता है। |
84
87
 
85
88
  `lint` नियतात्मक है - शून्य मॉडल कॉल - इसलिए यह CI में सुरक्षित है। यह स्थानीय रूप से **चरण 3 के सोर्सिंग मानक** को लागू करता है; मॉडल-आधारित **चरण 4** सत्यापन अभी भी [`roleos verify-citations`](https://github.com/mcp-tool-shop-org/role-os) → प्रिज्म पर निर्भर करता है।
86
89
 
@@ -104,7 +107,7 @@ roleos verify-citations my-decision.dispatch.md # model-based Step 4 (different
104
107
  name: study-swarm lint
105
108
  on:
106
109
  pull_request:
107
- paths: ['**/*.dispatch.md', '.github/workflows/dispatches.yml']
110
+ paths: ['**/*.dispatch.md', '**/*.withdrawn.json', '.github/workflows/dispatches.yml']
108
111
  workflow_dispatch:
109
112
  concurrency:
110
113
  group: ${{ github.workflow }}-${{ github.ref }}
@@ -112,16 +115,20 @@ concurrency:
112
115
  jobs:
113
116
  lint:
114
117
  runs-on: ubuntu-latest
118
+ timeout-minutes: 5
115
119
  steps:
116
120
  - uses: actions/checkout@v4
117
121
  - uses: actions/setup-node@v4
118
122
  with: { node-version: '20' }
119
- - run: npx @dogfood-lab/study-swarm@latest lint dispatches/
123
+ - run: npx --yes @dogfood-lab/study-swarm@2.1.0 lint dispatches/
124
+ # Halt the build while any finding that became canon is withdrawn and not yet
125
+ # removed or re-grounded — the canon-rollback andon (exit 1 on any unresolved flag).
126
+ - run: npx --yes @dogfood-lab/study-swarm@2.1.0 requalify --check dispatches/
120
127
  ```
121
128
 
122
129
  ### किसी प्रेषण को फिर से चलाने के लिए पिन करें (`dispatch.lock.json`)
123
130
 
124
- एक सत्यापित प्रेषण केवल तभी ऑडिट करने योग्य होता है जब आप बता सकें कि *इसे क्या उत्पन्न किया*। `study-swarm lock` एक सहायक लॉकफ़ाइल लिखता है जो सामग्री-आधारित है, अनुसंधान एजेंट के अनुसार, **समाधान मॉडल आईडी** (कभी भी अस्थायी उपनाम नहीं), **बाइट-सटीक प्रॉम्प्ट का SHA-256**, और **टूल स्कीमा का SHA-256** जिसे दिया गया था, साथ ही बाहरी **सत्यापन रसीद** – एक `lock_sha256` में समेकित। `study-swarm lock --verify` उन हैश को फिर से प्राप्त करता है और किसी भी विचलन पर विफल हो जाता है, इसलिए बदले हुए प्रॉम्प्ट, बदले गए मॉडल या परिवर्तित टूल सतह का पता लगाया जा सकता है – [PIN_PER_STEP](https://github.com/dogfood-lab/study-swarm) पुनरुत्पादनीयता मानक, जिसे निष्पादन योग्य बनाया गया है। हार्नेस रिकॉर्ड उत्सर्जित करता है; CLI शून्य-निर्भर और नेटवर्क-मुक्त रहता है, केवल मानकीकरण (RFC 8785), हैशिंग और मान्य करता है।
131
+ एक सत्यापित प्रेषण केवल तभी ऑडिट करने योग्य होता है जब आप बता सकें कि *इसे क्या उत्पन्न किया*। `study-swarm lock` एक सहायक लॉकफ़ाइल लिखता है जो सामग्री-आधारित है, अनुसंधान एजेंट के अनुसार, **समाधान मॉडल आईडी** (कभी भी अस्थायी उपनाम नहीं), **पाठ-सामान्यीकृत प्रॉम्प्ट का SHA-256 (BOM हटा, नई पंक्ति LF, NFC)**, और **टूल स्कीमा का SHA-256** जिसे दिया गया था, साथ ही बाहरी **सत्यापन रसीद** – एक `lock_sha256` में समेकित। `study-swarm lock --verify` उन हैश को फिर से प्राप्त करता है और किसी भी विचलन पर विफल हो जाता है, इसलिए बदले हुए प्रॉम्प्ट, बदले गए मॉडल या परिवर्तित टूल सतह का पता लगाया जा सकता है – [PIN_PER_STEP](https://github.com/dogfood-lab/study-swarm) पुनरुत्पादनीयता मानक, जिसे निष्पादन योग्य बनाया गया है। हार्नेस रिकॉर्ड उत्सर्जित करता है; CLI शून्य-निर्भर और नेटवर्क-मुक्त रहता है, केवल मानकीकरण (RFC 8785), हैशिंग और मान्य करता है।
125
132
 
126
133
  **यह इनपुट को पिन करता है, आउटपुट को नहीं।** मॉडल + प्रॉम्प्ट + तापमान को पिन करने से LLM का आउटपुट बिट-समान नहीं होगा – बैच-अपरिवर्तनशीलता, फ़्लोटिंग-पॉइंट गैर-सहयोगिता, विशेषज्ञ मिश्रण रूटिंग और मौन प्रदाता विचलन सभी एक ऑफ़लाइन टूल के नियंत्रण से बाहर हैं। इसलिए लॉक आपको **पुन: चलाने योग्य इनपुट और विचलन-पता लगाने योग्य आउटपुट** देता है, कभी भी "निर्धारित पुन: चलाना" नहीं। डिज़ाइन [`examples/study-swarm-lock.dispatch.md`](examples/study-swarm-lock.dispatch.md) में उद्धरण द्वारा उद्धरण के आधार पर है – पहला प्रेषण जो अपना स्वयं का लॉक भेजता है ([`examples/study-swarm-lock.lock.json`](examples/study-swarm-lock.lock.json))।
127
134
 
@@ -145,11 +152,11 @@ study-swarm requalify --resolve d.dispatch.md arXiv:2402.15089 --mode removed
145
152
 
146
153
  ## सुरक्षा
147
154
 
148
- `study-swarm` एक **पतली, शून्य-निर्भरता CLI** (`study-swarm`) को पद्धति के साथ भेजता है। यह **कोई नेटवर्क या मॉडल कॉल नहीं करता है** और **कोई टेलीमेट्री एकत्र नहीं करता है**; स्रोत में कोई गुप्त जानकारी या क्रेडेंशियल नहीं हैं। रनटाइम पर यह केवल उस फ़ाइल को पढ़ता है जिसे आप `lint` में पास करते हैं और वर्तमान निर्देशिका में एक एकल `<slug>.dispatch.md` लिखते हैं (ओवरराइट करने से इनकार करते हुए, और कभी भी कार्यशील निर्देशिका के बाहर नहीं)। पद्धति द्वारा वर्णित मॉडल-आधारित सत्यापन (चरण 4) इस पैकेज द्वारा नहीं, बल्कि संबंधित उपकरणों द्वारा किया जाता है। [SECURITY.md](SECURITY.md) देखें।
155
+ `study-swarm` एक **पतली, शून्य-निर्भरता CLI** (`study-swarm`) को पद्धति के साथ भेजता है। यह **कोई नेटवर्क या मॉडल कॉल नहीं करता है** और **कोई टेलीमेट्री एकत्र नहीं करता है**; स्रोत में कोई गुप्त जानकारी या क्रेडेंशियल नहीं हैं। रनटाइम पर यह उन फ़ाइलों को पढ़ता है जिन्हें आप नाम देते हैं। `new` कार्य निर्देशिका में एक `<slug>.dispatch.md` लिखता है (ओवरराइट नहीं, और निर्देशिका के बाहर नहीं)। `lock`, `withdraw`, और `requalify` एक lock फ़ाइल, एक टूम्बस्टोन sidecar, और `--receipt` देने पर उस पथ पर एक रसीद भी लिखते हैं। पद्धति द्वारा वर्णित मॉडल-आधारित सत्यापन (चरण 4) इस पैकेज द्वारा नहीं, बल्कि संबंधित उपकरणों द्वारा किया जाता है। [SECURITY.md](SECURITY.md) देखें।
149
156
 
150
157
  ## स्थिति
151
158
 
152
- एक कार्यशील प्रोटोकॉल, इसकी अपनी मशीनरी द्वारा बाहरी रूप से सत्यापित — एक अलग मॉडल परिवार इसके उद्धरणों की जांच करता है (ऊपर प्रमाण देखें)। **v1.1** सत्यापनकर्ता को तेज करता है जहां पहला संस्करण मौन था: विघटित/त्रिक आधार, पीढ़ी-समय आधार, लेंस को संयोजित करने के लिए एक ओरेकल-गेटेड कैस्केड, और अंशांकित परित्याग — प्रत्येक सत्यापित v1.1 प्रेषण में निहित। **v1.2** एक प्रेषण को बाइट-रीप्लेबल बनाता है: `study-swarm lock` प्रति चरण हल किए गए मॉडल, प्रॉम्प्ट और टूल स्कीमा के साथ-साथ सत्यापनकर्ता रसीद को पिन करता है, और `lock --verify` विचलन पर विफल बंद हो जाता है। **v1.3** रोलबैक को निष्पादन योग्य बनाता है: जब एक निष्कर्ष जो पहले से ही कैनन बन गया है, उसे वापस ले लिया जाता है, तो `study-swarm withdraw` प्रत्येक निर्भरता को चिह्नित करता है और `requalify --check` उन्हें तब तक विफल बंद कर देता है जब तक कि उन्हें हटाया या पुन: स्थापित नहीं किया जाता — एक नामित, रसीद वाला, आइडेंपोटेंट क्षतिपूर्ति। यह रेपो सार्वजनिक संदर्भ है; [PROTOCOL.md](PROTOCOL.md) निष्पादन योग्य आकार है। [dogfood-lab](https://github.com/dogfood-lab) परिवार का हिस्सा — एआई युग में निर्माण के लिए विधियाँ और प्रदर्शन।
159
+ एक कार्यशील प्रोटोकॉल, जिसकी अपनी मशीनरी द्वारा बाहरी रूप से पुष्टि की जाती है – एक अलग मॉडल परिवार इसके उद्धरणों की जांच करता है (ऊपर दिए गए प्रमाण देखें)। **v1.1** उस सत्यापनकर्ता को बेहतर बनाता है जहाँ पहले संस्करण में यह मौन था: विघटित/त्रिक नींव, पीढ़ी-समय नींव, लेंसों को संयोजित करने के लिए एक ओरेकल-गेटेड कैस्केड, और अंशांकित परहेज – प्रत्येक सत्यापित v1.1 प्रेषण में निहित। **v1.2** किसी प्रेषण को बाइट-रीप्लेबल बनाता है: `study-swarm lock` प्रति चरण हल किए गए मॉडल, संकेत और उपकरण स्कीमा को पिन करता है, साथ ही सत्यापनकर्ता रसीद भी, और `lock --verify` विचलन होने पर विफल हो जाता है। **v1.3** रोलबैक को निष्पादन योग्य बनाता है: जब कोई ऐसा निष्कर्ष जो पहले से ही मानक बन चुका है, वापस ले लिया जाता है, तो `study-swarm withdraw` प्रत्येक निर्भरता को चिह्नित करता है और `requalify --check` उन्हें तब तक विफल कर देता है जब तक कि उन्हें हटाया या पुन: स्थापित नहीं किया जाता – एक नामित, रसीद वाला, आइडेंपोटेंट क्षतिपूर्ति। **v2.0** प्रोटोकॉल के अधिक भाग को निष्पादन योग्य बनाता है और लॉक को मजबूत करता है: `lint --strict` अकेले उद्धरणों को चिह्नित करता है – वह एकमात्र ज्ञात विफलता मोड जिसे CLI पकड़ नहीं सका – `lock --init` ढांचा रिकॉर्ड बनाता है, `requalify --status` एक कॉर्पस के प्रमाण-स्वास्थ्य को पढ़ता है, और लॉक की सामग्री-पताकरण डोमेन से अलग होती है (आर्टिफैक्ट स्कीमा v2 – पुराने संस्करण का लॉक पुन: उत्पन्न किया जाता है बजाय इसके कि उसे छेड़छाड़ किए गए रूप में गलत तरीके से चिह्नित किया जाए; CLI की कमांड सतह पिछली संगतता बनाए रखती है)। यह रिपॉजिटरी सार्वजनिक संदर्भ है; [PROTOCOL.md](PROTOCOL.md) निष्पादन योग्य आकार है। [dogfood-lab](https://github.com/dogfood-lab) परिवार का हिस्सा – AI युग में निर्माण के लिए विधियाँ और प्रदर्शन।
153
160
 
154
161
  MIT लाइसेंस प्राप्त।
155
162