@mcptoolshop/research-os 0.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 ADDED
@@ -0,0 +1,98 @@
1
+ # Changelog
2
+
3
+ All notable changes to `research-os` are documented here.
4
+
5
+ ## [0.1.0] — 2026-05-08
6
+
7
+ ### Added
8
+ - Initial scaffold matching mcp-tool-shop conventions
9
+ - `research-os init <topic>` — Link 1 of the workflow chain
10
+ - `research.yaml` schema with intake fields, gate config, and primary-source waiver model
11
+ - Pack template with prompt contracts (`cowork-master.md`, `section-worker.md`, `adversarial-reviewer.md`)
12
+ - Pack-local `CLAUDE.md` operating instructions
13
+ - `research-os section add <id>` — Link 2 of the workflow chain
14
+ - Per-section folder scaffold: `brief.md`, `sources.jsonl`, `claims.jsonl`, `contradictions.md`, `gates.yaml`, `open_questions.md`
15
+ - `gates.yaml` schema for per-section budget and source/contradiction requirements; inherits pack-level defaults with per-section overrides
16
+ - Section id format enforcement (`NN-slug`) and duplicate-id rejection
17
+ - `research-os gather <section>` — Link 3 of the workflow chain
18
+ - Direct-fetch acquisition layer: every fetch attempt produces a persistent `FetchReceipt` (URL, final URL, status, content-type, sha256, byte count, title, raw text path) appended to `evidence/fetch-log.jsonl`
19
+ - `SourceCard` schema separating fetched truth from extracted interpretation, with the `asserts` / `scope` / `not` triple to prevent contextual claims from being promoted into universal rules
20
+ - Extractor adapter interface: `HeuristicExtractor` (cheerio-based, always available) + `OllamaInternExtractor` (local Ollama HTTP, runtime-detected, never required for end users)
21
+ - Failed fetches still write receipts but do not write source cards; failed extractions write a receipt with `extraction_outcome: failed` plus the error, no fake card
22
+ - Load-bearing law added: **fetch is evidence; extraction is interpretation**
23
+ - `research-os claim extract <section>` — Link 4 of the workflow chain
24
+ - `Claim` schema (zod): `claim_id` / `source_ids` / `source_hashes` / `asserts` / `scope` / `not` / `evidence_excerpt` / `evidence_location` / `confidence` / `extractor` / `extraction_method` / `created_at` / `review_state`. Every emitted claim ships at `review_state: candidate` — extraction never promotes
25
+ - `HeuristicClaimExtractor`: one candidate claim per source-card `key_point` with `extraction_method: heuristic_key_point`, `scope: null`, `not: null`, `confidence: low` — labelled honestly as shallow
26
+ - `OllamaInternClaimExtractor`: 3-7 propositional claims per source via local Ollama HTTP, each with its own `asserts` / `scope` / `not` triple grounded in a literal `evidence_excerpt`. Falls back to heuristic when unavailable
27
+ - `OLLAMA_HOST` host normalization: bare `127.0.0.1:11434` and `localhost:11434` are accepted alongside fully-qualified URLs; trailing slashes stripped
28
+ - Re-runs of `claim extract` are idempotent — claim_ids dedupe by `clm_<source-hash>_<extractor>_<index>`
29
+ - `NoSourcesGatheredError` when claim extraction is invoked on an empty section
30
+ - 26 new tests (79 total)
31
+ - `research-os contradict map <section>` — Link 5 of the workflow chain
32
+ - `Contradiction` schema (zod) with six tension types: `direct_conflict` / `scope_conflict` / `temporal_conflict` / `definition_conflict` / `evidence_conflict` / `overgeneralization_risk`. Severity, confidence, scope_analysis, overlap_assessment, status (always `unresolved` at write), detector, detection_method
33
+ - Pair-wise comparison of `review_state: candidate` claims within a single section. Section-scoped only; cross-section mapping is a later link
34
+ - `HeuristicContradictionDetector`: scope-aware similarity + negation matching. Surfaces direct_conflict (token overlap + negation mismatch + overlapping/unknown scope) and overgeneralization_risk (asymmetric scope-tagging on claims that share substantive tokens). Conservative thresholds; only low/medium confidence
35
+ - `OllamaInternContradictionDetector`: pair-wise LLM classification across all six tension types with explicit "none" path; falls back cleanly when unavailable
36
+ - Stable `contradiction_id` = `cnt_<sha256(sorted_claim_pair)>_<detector>` — deterministic and dedup-friendly across re-runs
37
+ - Markdown view written to `sections/<id>/contradictions.md` is regenerated each run; honest "0 candidates detected" when nothing fires; ledger appended to `sections/<id>/contradictions.jsonl`
38
+ - Load-bearing law added: **contradiction mapping surfaces tension; it does not resolve, synthesize, or decide which claim wins**
39
+ - `research-os gate <section>` — Link 6 of the workflow chain
40
+ - Seven gate families: `source_floor` (min_sources, min_independent_publishers, primary_sources_required + waiver, failed-fetches visibility), `claim_integrity` (every_claim_needs_source, no_orphan_claims, source_hashes_present, evidence_excerpt_present, fetch_receipt_anchored, no_source_cluster_monopoly), `scope_integrity` (no_untagged_universal_claims, not_constraint_present, no_blocking_overgeneralization, low-severity overgen warning, scope-tagging summary), `freshness` (policy applicability, no_stale_sources, publication_date_known), `contradiction` (unresolved_visible, unresolved_blocks_synthesis, contradiction_required_by_policy), `section_budget` (budget_configured, runtime_tracking honest about not-yet-tracked), `waivers` (primary-source waiver post-pass that converts fail → pass_with_waiver only when reason + compensating_controls + pack-policy permission all present)
41
+ - Verdict model: `pass` / `warn` / `fail` / `blocked`. `synthesis_eligible: boolean` is the real switch — failures with `blocks_synthesis: true` produce `blocked` verdict; non-blocking failures produce `fail` but remain synthesis-eligible
42
+ - Structured gate result schema: section_id, verdict, summary, checked_at, gate_results[], failures[], warnings[], waivers_applied[], blocking_reasons[], synthesis_eligible, claim_counts, source_counts, contradiction_counts, freshness_summary, scope_integrity_summary, next_actions[]
43
+ - Outputs: `audits/<section>-gate.json` (structured), `audits/<section>-gate.md` (human-readable)
44
+ - `research.yaml.sections[]` status promoted to `gated` only when synthesis_eligible; never downgraded
45
+ - Load-bearing law added: **gates decide whether a section is eligible for synthesis; they do not synthesize, rewrite claims, resolve contradictions, or hide failure**
46
+ - `research-os review <section>` — Link 7 of the workflow chain
47
+ - Thirteen finding categories: `unsupported_claim`, `ungrounded_excerpt`, `stale_claim`, `overgeneralized_claim`, `scope_widening`, `missing_not_constraint`, `source_quality_problem`, `source_cluster_monopoly`, `unmapped_contradiction`, `recommendation_exceeds_evidence`, `hidden_synthesis`, `definition_drift`, `temporal_mismatch`
48
+ - Severity model: `info` / `warn` / `block`
49
+ - Six review decisions: `accepted_for_synthesis`, `rejected`, `needs_scope_repair`, `needs_source_repair`, `needs_contradiction_mapping`, `needs_human_review`
50
+ - `HeuristicReviewer`: missing-field detection, evidence-grounding re-verification against raw text, scope-null risk, unresolved-contradiction involvement, source-cluster monopoly per-claim, source-quality mismatch (high confidence + forum/unknown source type), stale-claim per pack freshness policy, hidden-synthesis flag when brief.md exceeds stub state
51
+ - `OllamaInternReviewer`: pair-pass over candidate claims for `overgeneralized_claim`, `scope_widening`, `definition_drift`, `recommendation_exceeds_evidence`, `hidden_synthesis`, `temporal_mismatch`. **Critical guard**: any LLM finding citing a claim_id or source_id not in the input is rejected as ungrounded reviewer output (counted in `llmFindingsRejected`). Falls back to heuristic when unavailable
52
+ - Append-only ledgers: `audits/<section>-findings.jsonl` and `sections/<id>/claim-reviews.jsonl`. **`claims.jsonl` is never mutated** — extraction truth and review truth are separate
53
+ - Snapshot artifacts (regenerated each run): `audits/<section>-review.json` (structured) and `audits/<section>-review.md` (human-readable)
54
+ - Section status promoted from `gated` → `reviewed` only when **every** candidate claim has decision=`accepted_for_synthesis`
55
+ - Load-bearing law added: **adversarial review judges research integrity; it does not synthesize, rewrite source truth, or erase extraction history**
56
+ - `research-os index build [section]` / `research-os index export-repo-knowledge` / `research-os index sync-repo-knowledge` / `research-os query <term>` — Link 8 of the workflow chain
57
+ - Pack-local SQLite index at `.research-os/index.sqlite` (auto-gitignored). Schema: `sections`, `sources`, `claims`, `contradictions`, `review_findings`, `claim_reviews`, `gate_results`, `fetch_receipts`, `artifacts`, plus FTS5 virtual table `facts_fts` for human-queryable text. Every indexed row carries `artifact_path` so search results point back to canonical files; the SQLite row is a pointer + acceleration layer, not the evidence
58
+ - Re-build is deterministic and idempotent — re-indexing a section deletes its rows then re-inserts from current artifact state. Canonical artifacts (`claims.jsonl`, `contradictions.jsonl`, `claim-reviews.jsonl`, `findings.jsonl`, `gate.json`, source-cards, fetch-log) are never mutated by index build or query
59
+ - Snippet-based query results group by record type; FTS5 prefix queries supported (`prefix='2 3 4'`)
60
+ - `export-repo-knowledge` writes `evidence/repo-knowledge/research-os-facts.jsonl` with one fact per row (`fact_type`, `id`, `section_id`, `text`, `artifact_path`, `metadata`, `pack_origin`, `exported_at`). The export is portable; no runtime dependency on `@mcptoolshop/repo-knowledge`
61
+ - `sync-repo-knowledge` is optional and dynamic — when `@mcptoolshop/repo-knowledge` is locally installed and exposes `ingestFacts`, the index syncs in; when absent, the command exits cleanly with a clear "skipped, use export instead" message. **No hard runtime dependency on repo-knowledge**
62
+ - `IndexNotBuiltError` when querying or exporting before a build has run
63
+ - Load-bearing law added: **indexing makes research truth queryable; it does not create new truth, rewrite truth, or become the source of record**
64
+ - `research-os cowork handoff` — Link 9 of the workflow chain
65
+ - Renders the pack's current research-truth state into a runtime contract for Cowork. Outputs `handoffs/cowork-handoff.json` (structured) + `handoffs/cowork-master.md` (rendered runtime). The static template at `prompts/cowork-master.md` is the source template and is never mutated by handoff
66
+ - Three handoff modes: `repair_required` (sections blocked, no accepted claims, or repair decisions outstanding — Cowork may gather/repair/re-run gates and review, may NOT write final synthesis); `synthesis_ready` (required sections synthesis-eligible, accepted claims exist, no unwaived blocking contradictions — Cowork may produce cross-section synthesis using accepted_claim_ids only); `human_review_required` (invalid waiver state, blocking contradictions, malformed artifacts, or ambiguous review states — Cowork prepares options, doesn't decide)
67
+ - `synthesis_allowed: boolean` is the operational switch. Mode-specific `allowed_write_paths[]` constrain Cowork's write surface
68
+ - `forbidden_actions[]` ships as pack invariants regardless of mode: never mutate claims.jsonl / source-cards / audits, never cite outside the source ledger, never widen scope, never flatten unresolved contradictions, never write final synthesis when mode != synthesis_ready
69
+ - `recommended_next_actions[]` are mode-specific and concrete: in `repair_required` they enumerate per-section commands (`research-os gate <id>`, `research-os review <id>`, etc.); in `synthesis_ready` they walk through synthesis structure
70
+ - `index_status` reported as `present` / `missing`. Missing index produces a warning but does not fail handoff generation — Cowork can still operate from canonical artifacts
71
+ - Mode determination: any malformed artifact / invalid waiver (granted but missing reason or compensating_controls) / unresolved high-or-blocking contradiction → `human_review_required`. Else any not-ready section → `repair_required`. Else → `synthesis_ready`
72
+ - Latest review decision per claim wins (claim-reviews.jsonl is append-only; effective state = claim + latest decision). Re-running cowork handoff is idempotent
73
+ - Load-bearing law added: **cowork handoff renders operational instructions from research truth; it does not create truth, bless weak claims, or bypass gates**
74
+ - `research-os synth workspace` — Link 10 of the workflow chain
75
+ - **Refusal as feature, not error gap.** When `handoffs/cowork-handoff.json` is in `repair_required` or `human_review_required` mode, the workspace command refuses to create synthesis files and exits with code 2 plus a clear remediation message. No empty synthesis placeholders ever appear in repair mode
76
+ - When mode is `synthesis_ready`: writes `synthesis/cross-section-map.json` (structured) and `synthesis/cross-section-map.md` (human-readable map). Both regenerated each run — they are derived state, not Cowork's drafts
77
+ - Also writes `synthesis/decision-brief.md`, `synthesis/working-report.md`, `synthesis/final-report.md` as guardrail-headed writable workspaces — only created if absent so Cowork's drafts are preserved across re-runs. Each carries enforced citation rules in the front-matter (cite only `allowed_synthesis_inputs[]`, never widen scope, preserve unresolved contradictions, disclose all waivers)
78
+ - `CrossSectionMap` schema: pack_id / pack_topic / pack_decision / generated_at / accepted_claim_ids / sections[] / claim_clusters[] / shared_sources[] / scope_overlaps[] / cross_section_contradictions[] / waiver_dependencies[] / open_questions[] / allowed_synthesis_inputs[] / forbidden_inputs[]
79
+ - Claim-cluster derivation via union-find on shared `source_ids`; scope-overlap detection via Jaccard similarity on `scope` strings (threshold 0.3); cross-section contradictions identified by claim_ids spanning multiple sections
80
+ - `forbidden_inputs[]` enumerates every non-accepted claim with its decision and reason — synthesis must not cite them
81
+ - `HandoffNotFoundError` when handoff hasn't been generated yet; `SynthesisNotReadyError` carries the mode for diagnostic clarity
82
+ - Load-bearing law added: **synthesis workspace organizes accepted research truth for Cowork; it does not create synthesis, bless repair-mode claims, or bypass handoff mode**
83
+ - `research-os audit` — Link 11 of the workflow chain
84
+ - Pack-level rollups derived from existing section truth (gate JSON, review JSON, claims, contradictions, claim-reviews, source-cards, fetch-log, handoff). Eight markdown rollups + JSON siblings: `pack-audit.{json,md}`, `orphan-claims.{json,md}`, `stale-sources.{json,md}`, `weak-sources.{json,md}`, `unresolved-contradictions.{json,md}`, `scope-widening-risks.{json,md}`, `source-diversity-gaps.{json,md}`, `synthesis-readiness.{json,md}`
85
+ - Six audit categories: orphan_claims (missing source card / hash / excerpt / unresolvable source_id), stale_sources (too_old / missing_date / unparseable_date per pack policy), weak_sources (cluster monopoly / low publisher count / missing primary / type imbalance / failed-fetches reducing floor), unresolved_contradictions (with explicit "clean ledger ≠ proof of completeness" disclosure), scope_widening_risks (overgeneralization findings, scope=null in use, missing not), source_diversity_gaps (per-section monopoly + cross-section publisher overlap)
86
+ - Pack verdict: `ready_for_synthesis` (every section ready), `repair_required` (some sections need work), `human_review_required` (invalid waivers / blocking contradictions / malformed artifacts), `blocked` (no section has been gated — foundational gap). Verdict never invents green state when section gates are missing
87
+ - Every audit row carries `artifact_path` so rollups are pointers back to canonical evidence; canonical artifacts are never mutated. Idempotent: re-running with the same inputs produces the same rollups
88
+ - `pack-audit.json` schema includes section_summaries / claim_summary / source_summary / contradiction_summary / review_summary / waiver_summary / readiness_summary / audit_files / blocking_reasons / warnings / next_actions
89
+ - Audit rollups are themselves indexable by Link 8 — re-running `research-os index build --all` makes the audit JSON files queryable through `research-os query`
90
+ - Load-bearing law added: **pack audit aggregates existing research truth; it does not create new truth, resolve failures, or hide section-level evidence**
91
+ - `research-os freeze` — Link 12 of the workflow chain (final integrity lock)
92
+ - **Refusal as feature, not error gap.** Freeze refuses unless every pass condition holds: pack-audit verdict=ready_for_synthesis, handoff mode=synthesis_ready, synthesis workspace exists, final-report.md cites accepted claim_ids only (via `[claim:clm_...]` references), unresolved contradictions disclosed in decision-brief or final-report, waivers disclosed similarly, every section has a gate result on file, all canonical artifacts parse cleanly. On refusal, exits with code 2 and writes `audits/freeze-refusal.json` + `audits/freeze-refusal.md`. Does NOT write freeze-receipt.* on refusal. Does NOT mark the pack frozen on refusal
93
+ - On pass: writes `audits/freeze-receipt.json` + `audits/freeze-receipt.md`, sha256-fingerprints every canonical artifact + every synthesis file, sets `research.yaml.frozen_at = <ISO>`, bumps every section status to `frozen`. Removes any stale freeze-refusal artifact from a prior failed run
94
+ - Receipt schema: pack_id / frozen_at / verdict='frozen' / pack_audit_hash / handoff_hash / synthesis_hashes[] / canonical_artifact_hashes[] / accepted_claim_ids[] / cited_claim_ids[] / uncited_accepted_claim_ids[] / unresolved_contradictions[] (with disclosed_in pointers) / waivers_disclosed[] (with disclosed_in pointers) / sections[] / counts / integrity_checks[]
95
+ - Refusal schema: pack_id / checked_at / verdict='refused' / reasons[] / blocking_reasons[] / missing_artifacts[] / invalid_artifacts[] / next_actions[] / would_freeze=false. next_actions[] are concrete commands derived from reasons
96
+ - Citation rule: synthesis markdown must use explicit `[claim:clm_<id>]` references for freeze-grade traceability. Plain prose, source URLs, or vague mentions don't count
97
+ - `frozen_at: string | null` field added to research.yaml schema with default null; existing packs continue to validate
98
+ - Load-bearing law added: **freeze locks completed research truth; it does not complete unfinished research, excuse missing synthesis, or convert repair state into evidence**
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 mcp-tool-shop
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.es.md ADDED
@@ -0,0 +1,160 @@
1
+ <p align="center">
2
+ <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.md">English</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
3
+ </p>
4
+
5
+ <p align="center">
6
+ <img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/research-os/readme.png" alt="research-os" width="400">
7
+ </p>
8
+
9
+ <p align="center">
10
+ <a href="https://github.com/mcp-tool-shop-org/research-os/releases/tag/v0.1.0"><img src="https://img.shields.io/badge/version-0.1.0-blue" alt="version 0.1.0"></a>
11
+ <a href="https://github.com/mcp-tool-shop-org/research-os/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/research-os/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
12
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT License"></a>
13
+ <img src="https://img.shields.io/badge/node-%E2%89%A520-brightgreen" alt="Node ≥20">
14
+ <a href="https://mcp-tool-shop-org.github.io/research-os/handbook/"><img src="https://img.shields.io/badge/handbook-live-purple" alt="Handbook"></a>
15
+ </p>
16
+
17
+ # research-os
18
+
19
+ Una herramienta de línea de comandos (CLI) que transforma un tema abierto en un **paquete de investigación estructurado**, un repositorio organizado donde Claude, Cowork o un conjunto de herramientas pueden trabajar durante horas sin generar información falsa ni distorsionar la investigación.
20
+
21
+ ## ¿Qué es?
22
+
23
+ `research-os` es la capa de control entre "quiero investigar X" y una base de evidencia sólida y verificable. Separa las pistas de descubrimiento de la recopilación de evidencia, la extracción de datos de la validación de afirmaciones, la detección de contradicciones de la resolución de contradicciones, y las decisiones de revisión de las conclusiones. Cada paso se registra en un registro de solo escritura; cada decisión se calcula a partir de esos registros, no se afirma arbitrariamente.
24
+
25
+ No es un generador de informes. No es un marco de orquestación de modelos de lenguaje (LLM). No escribe la síntesis por usted. Impone las condiciones bajo las cuales la síntesis puede comenzar.
26
+
27
+ **La versión 0.1 se ha utilizado exactamente una vez: por sí misma, sobre sí misma.** Ese único uso reveló siete errores en `research-os`, cada uno corregido antes de esta versión. El registro de pruebas, que incluye siete sesiones, dos patrones de integración, 463 casos de prueba `vitest` y un paquete finalizado, se encuentra en [`docs/dogfood-proof.md`](docs/dogfood-proof.md). Manual de usuario: <https://mcp-tool-shop-org.github.io/research-os/handbook/>.
28
+
29
+ ## Las 16 leyes fundamentales
30
+
31
+ | # | Ley |
32
+ |---|-----|
33
+ | 1 | No hay síntesis antes de la verdad de la fuente. |
34
+ | 2 | La recopilación es evidencia; la extracción es interpretación. |
35
+ | 3 | Los modelos pueden interpretar fragmentos de la fuente; no pueden crear fragmentos de evidencia. |
36
+ | 4 | La extracción puede generar demasiada información; la síntesis no puede heredar esa abundancia. |
37
+ | 5 | El mapeo de contradicciones revela tensiones; no resuelve, sintetiza ni decide qué afirmación es correcta. |
38
+ | 6 | Las restricciones deciden si una sección es elegible para la síntesis. No sintetizan ni ocultan los fallos. |
39
+ | 7 | La revisión crítica evalúa la integridad de la investigación. No sintetiza ni reescribe la verdad de la fuente. |
40
+ | 8 | La indexación hace que la verdad de la investigación sea consultable. No crea nueva verdad ni se convierte en la fuente oficial. |
41
+ | 9 | La transferencia a Cowork genera instrucciones operativas a partir de la verdad de la investigación. No crea verdad ni evita las restricciones. |
42
+ | 10 | El espacio de trabajo de síntesis organiza la verdad de la investigación aceptada para Cowork. No crea síntesis ni evita el modo de transferencia. |
43
+ | 11 | La auditoría del paquete agrega la verdad de la investigación existente. No crea nueva verdad ni oculta la evidencia a nivel de sección. |
44
+ | 12 | El descubrimiento propone pistas; solo la recopilación produce evidencia. |
45
+ | 13 | Un revisor no es confiable hasta que las pruebas de fallos demuestran su capacidad de recuperación. |
46
+ | 14 | La abundancia de afirmaciones no es sinónimo de calidad de la investigación. Las afirmaciones deben ser validadas antes de poder competir para la síntesis. |
47
+ | 15 | La congelación fija la verdad de la investigación completada. No completa la investigación inconclusa ni convierte el estado de reparación en evidencia. |
48
+ | 16 | Las exenciones relajan las restricciones de la fuente; no pueden crear evidencia. |
49
+
50
+ **Ley 3** — el modelo de lenguaje nunca crea texto de evidencia. `research-os` crea un registro de extractos determinista (con identificadores estables como `ex_<id_hex_de_la_fuente>_001`); el modelo de lenguaje elige los identificadores de los extractos; `research-os` copia el texto literal. La clase de error "parafrasear como cita" es estructuralmente imposible.
51
+
52
+ **Ley 14** — entre la extracción y la revisión, `research-os claim triage` elimina duplicados, limita la contribución por fuente y reserva los candidatos de bajo rendimiento. El triage NO modifica `claims.jsonl`; las afirmaciones reservadas permanecen en el registro canónico.
53
+
54
+ ## La cadena de flujo de trabajo de la versión 0.1
55
+
56
+ ```
57
+ discover
58
+ → gather
59
+ → claim extract
60
+ → claim audit-density
61
+ → claim triage
62
+ → contradict map
63
+ → contradict resolve
64
+ → review
65
+ → review-promote
66
+ → gate
67
+ → section report
68
+ → audit
69
+ → index build
70
+ → cowork handoff
71
+ → synth workspace
72
+ → freeze
73
+ ```
74
+
75
+ Cada paso es un comando de la interfaz de línea de comandos (CLI). Cada paso escribe en archivos que solo se pueden añadir, no modificar. Ningún paso sintetiza, resuelve o crea nueva información verificable; esos invariantes se aplican, no se confían. La revisión acepta, rechaza o solicita correcciones para las afirmaciones propuestas; el proceso de "gate" utiliza estas decisiones de revisión para calcular la elegibilidad para la síntesis; la fase de "freeze" es el bloqueo final de integridad que impide marcar un paquete como completado a menos que todas las capas estén de acuerdo. Consulte [docs/dogfood-proof.md](docs/dogfood-proof.md) para la prueba de la versión 0.1 que demuestra la integridad de la cadena de principio a fin.
76
+
77
+ Esta es la alternativa estructural a *búsqueda → resumen → informe detallado*. La cadena es el producto.
78
+
79
+ ## Instalación
80
+
81
+ **Requisitos:** Node.js ≥ 20.
82
+
83
+ ```bash
84
+ # From source (v0.1.0 is not yet published to npm)
85
+ git clone https://github.com/mcp-tool-shop-org/research-os.git
86
+ cd research-os
87
+ npm install
88
+ npm run build
89
+ npm link # makes `research-os` available on your PATH
90
+ ```
91
+
92
+ ## Inicio rápido
93
+
94
+ ```bash
95
+ # Create a new research-pack
96
+ research-os init "How should X be structured?"
97
+
98
+ # Add a section
99
+ research-os section add 01-landscape --purpose "Map the current landscape"
100
+
101
+ # Discover and approve sources, then gather
102
+ research-os discover run 01-landscape
103
+ research-os discover approve 01-landscape --top 8
104
+ research-os gather 01-landscape --approved
105
+
106
+ # Run the per-section chain
107
+ research-os claim extract 01-landscape
108
+ research-os claim audit-density 01-landscape
109
+ research-os claim triage 01-landscape
110
+ research-os contradict map 01-landscape --triaged-only
111
+ research-os review 01-landscape --triaged-only --preset hermes-two-pass --profile hermes-two-pass
112
+ research-os review-promote 01-landscape --profile hermes-two-pass
113
+ research-os gate 01-landscape
114
+ research-os section report 01-landscape
115
+
116
+ # Pack-level finish
117
+ research-os audit
118
+ research-os index build --all
119
+ research-os cowork handoff
120
+ research-os synth workspace # only if handoff returned synthesis_ready
121
+ research-os freeze
122
+ ```
123
+
124
+ **Para un ejemplo práctico**, consulte el paquete de prueba en `research-os-packs/research-os-spec/`: cada archivo, cada registro, cada disposición, cada huella digital de la fase de "freeze", todo almacenado en el disco en registros de solo escritura. Ese paquete es el que generó `docs/dogfood-proof.md`.
125
+
126
+ **Requiere [ollama-intern-mcp](https://github.com/mcp-tool-shop-org/ollama-intern-mcp) ejecutándose localmente** para la extracción, clasificación, revisión y descubrimiento de modelos de lenguaje. El modelo predeterminado es `hermes3:8b`; puede cambiarlo con `OLLAMA_INTERN_MODEL=<modelo>`. Establezca `OLLAMA_HOST` si Ollama no se ejecuta en el puerto predeterminado `localhost:11434`.
127
+
128
+ ## Glosario
129
+
130
+ | Término | Significado |
131
+ |------|---------|
132
+ | `research-os` | El plano de control / CLI / mecanismos de control / ley de orquestación (este repositorio) |
133
+ | `research-pack` | El archivo generado para un esfuerzo de investigación. |
134
+ | `research section` | Una unidad de investigación delimitada dentro de un paquete. |
135
+ | `research receipt` | Prueba de que una sección ha superado las comprobaciones de origen/afirmación/mecanismo de control. |
136
+
137
+ ## Seguridad
138
+
139
+ `research-os` es una herramienta de línea de comandos que funciona principalmente localmente. Lee y escribe archivos dentro del directorio del paquete de investigación al que la apunta, y (cuando se utiliza `gather`) realiza solicitudes HTTP salientes para obtener las URL de origen que proporciona. No: ejecuta un servidor, acepta conexiones entrantes, almacena credenciales ni envía datos de telemetría. No se escriben secretos en los archivos del paquete. Consulte [SECURITY.md](SECURITY.md) para la política de notificación de vulnerabilidades.
140
+
141
+ ## Estado
142
+
143
+ **v0.1.0** — Congelado el 08 de mayo de 2026. El paquete de prueba en `research-os-packs/research-os-spec/` (repositorio relacionado) alcanzó la fase de "freeze" con 296 afirmaciones aceptadas en 8 secciones, 17 dispuestas, 30 modificadas por el operador, 0 bloqueadores de corrección activos, 0 contradicciones sin resolver, y todos los mecanismos de control con `synthesis_eligible=true`. 463/463 pruebas de vitest superadas. Dieciséis leyes fundamentales acumuladas. Consulte [`docs/dogfood-proof.md`](docs/dogfood-proof.md) para conocer los siete hallazgos y las huellas digitales de la fase de "freeze".
144
+
145
+ ### Lo que la versión 0.1 no es
146
+
147
+ - No ha sido probada por usuarios externos. La única ejecución de prueba encontró siete errores.
148
+ - Todavía no está disponible en npm. Instale desde el código fuente hasta que se publique en npm.
149
+ - No es un generador de contenido. El comando `synth workspace` genera el espacio de trabajo estructurado; los humanos (o Cowork) escriben el contenido en función de los ID de las afirmaciones aceptadas.
150
+ - No tiene una API estable según las convenciones de versiones semánticas. La versión 1.0.0 se lanzará después de que los usuarios externos hayan validado la interfaz a lo largo del tiempo.
151
+
152
+ ### Limitaciones conocidas
153
+
154
+ - **La información sobre el origen del extractor no es visible en la costura de la puerta.** Una sección puede superar el umbral de aceptación si se utilizan criterios de evaluación alternativos cuando el extractor calibrado (Ollama con el modelo configurado) no está disponible. Se ha registrado como una debilidad conocida; en el futuro, se informará sobre las reclamaciones aceptadas por el extractor y se requerirá un número de reclamaciones aceptadas equivalente al umbral desde la ruta calibrada.
155
+ - **La selección del modelo de revisión, más allá de la línea de base calibrada `hermes-two-pass`, no está resuelta.** El ciclo de pruebas internas validó una configuración de revisión; otros modelos necesitan su propia calibración para detectar fallos antes de que puedan ser considerados fiables.
156
+ - **El paquete de pruebas internas utilizó `mistral-nemo:12b` para la extracción (el valor predeterminado estándar es `hermes3:8b`).** El sistema generó resultados incorrectos para nombres de secciones que se referían a sí mismos; esto se corrigió mediante la precisión de las consultas (ver manual) y mediante URLs predefinidas por el operador para temas ambiguos.
157
+
158
+ ## Licencia
159
+
160
+ MIT
package/README.fr.md ADDED
@@ -0,0 +1,160 @@
1
+ <p align="center">
2
+ <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.md">English</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
3
+ </p>
4
+
5
+ <p align="center">
6
+ <img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/research-os/readme.png" alt="research-os" width="400">
7
+ </p>
8
+
9
+ <p align="center">
10
+ <a href="https://github.com/mcp-tool-shop-org/research-os/releases/tag/v0.1.0"><img src="https://img.shields.io/badge/version-0.1.0-blue" alt="version 0.1.0"></a>
11
+ <a href="https://github.com/mcp-tool-shop-org/research-os/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/research-os/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
12
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT License"></a>
13
+ <img src="https://img.shields.io/badge/node-%E2%89%A520-brightgreen" alt="Node ≥20">
14
+ <a href="https://mcp-tool-shop-org.github.io/research-os/handbook/"><img src="https://img.shields.io/badge/handbook-live-purple" alt="Handbook"></a>
15
+ </p>
16
+
17
+ # research-os
18
+
19
+ Un outil en ligne de commande qui transforme un sujet ouvert en un **ensemble de ressources de recherche structuré** — un référentiel organisé où Claude, Cowork ou un groupe de personnes peuvent travailler pendant des heures sans produire d'hallucinations ni déformer l'investigation.
20
+
21
+ ## Qu'est-ce que c'est
22
+
23
+ `research-os` est la couche de contrôle entre "Je veux étudier X" et une base de preuves structurée et vérifiable. Il sépare les pistes de découverte de la collecte de preuves, l'extraction brute des affirmations triées, la détection des contradictions de la résolution des contradictions, et les décisions de révision des dispositions de synthèse. Chaque étape est enregistrée dans un registre en écriture seule ; chaque verdict de validation est calculé à partir de ces registres, et non affirmé.
24
+
25
+ Ce n'est pas un générateur de rapports. Ce n'est pas un framework d'orchestration de modèles de langage (LLM). Il ne rédige pas la synthèse pour vous. Il impose les conditions dans lesquelles la synthèse peut commencer.
26
+
27
+ **La version 0.1 a été utilisée une seule fois : par elle-même, sur elle-même.** Cette seule utilisation a révélé sept lacunes de correction dans `research-os`, chacune étant corrigée avant cette version. La traçabilité des modifications — sept sessions, deux modèles d'intégration, 463 cas de tests `vitest`, un ensemble de ressources structuré — se trouve dans [`docs/dogfood-proof.md`](docs/dogfood-proof.md). Manuel d'utilisation : <https://mcp-tool-shop-org.github.io/research-os/handbook/>.
28
+
29
+ ## Les 16 lois fondamentales
30
+
31
+ | # | Loi |
32
+ |---|-----|
33
+ | 1 | Pas de synthèse avant la vérification des sources. |
34
+ | 2 | La collecte est une preuve ; l'extraction est une interprétation. |
35
+ | 3 | Les modèles peuvent interpréter des extraits de sources ; ils ne peuvent pas créer de preuves. |
36
+ | 4 | L'extraction peut produire trop d'informations ; la synthèse ne peut pas en hériter. |
37
+ | 5 | La cartographie des contradictions révèle les tensions ; elle ne résout pas, ne synthétise pas et ne décide pas quelle affirmation est correcte. |
38
+ | 6 | Les mécanismes de contrôle déterminent si une section est éligible à la synthèse. Ils ne synthétisent pas et ne masquent pas les échecs. |
39
+ | 7 | L'examen par les pairs évalue l'intégrité de la recherche. Il ne synthétise pas et ne réécrit pas les sources vérifiées. |
40
+ | 8 | L'indexation rend la recherche vérifiable. Elle ne crée pas de nouvelles informations et ne devient pas la source de référence. |
41
+ | 9 | La transmission à Cowork transforme les instructions opérationnelles à partir des informations de recherche vérifiées. Elle ne crée pas de nouvelles informations et ne contourne pas les mécanismes de contrôle. |
42
+ | 10 | L'espace de travail de synthèse organise les informations de recherche vérifiées pour Cowork. Il ne crée pas de synthèse et ne contourne pas le mode de transmission. |
43
+ | 11 | L'audit de l'ensemble de ressources agrège les informations de recherche existantes. Il ne crée pas de nouvelles informations et ne masque pas les preuves au niveau des sections. |
44
+ | 12 | La découverte propose des pistes ; seule la collecte produit des preuves. |
45
+ | 13 | Un examinateur ne peut être considéré comme fiable tant que des échecs simulés n'ont pas prouvé sa capacité de rappel. |
46
+ | 14 | L'abondance des affirmations ne garantit pas la qualité de la recherche. Les affirmations doivent être triées avant de pouvoir être prises en compte pour la synthèse. |
47
+ | 15 | La "gelée" verrouille les informations de recherche vérifiées. Elle ne complète pas les recherches inachevées et ne convertit pas l'état de réparation en preuves. |
48
+ | 16 | Les dérogations assouplissent les contraintes des sources ; elles ne peuvent pas créer de preuves. |
49
+
50
+ **Loi 3** — le modèle de langage ne crée jamais de texte de preuve. `research-os` crée un registre d'extraits déterministes (identifiants stables comme `ex_<source_id_hex>_001`); le modèle de langage choisit les identifiants des extraits ; `research-os` copie le texte littéral. La classe d'erreur "paraphrase-as-quote" est structurellement impossible.
51
+
52
+ **Loi 14** — entre l'extraction et l'examen, `research-os claim triage` déduplique, limite la contribution par source et met de côté les candidats à faible valeur ajoutée. Le triage NE modifie PAS `claims.jsonl`; les affirmations mises de côté restent dans le registre canonique.
53
+
54
+ ## La chaîne de flux de travail de la version 0.1
55
+
56
+ ```
57
+ discover
58
+ → gather
59
+ → claim extract
60
+ → claim audit-density
61
+ → claim triage
62
+ → contradict map
63
+ → contradict resolve
64
+ → review
65
+ → review-promote
66
+ → gate
67
+ → section report
68
+ → audit
69
+ → index build
70
+ → cowork handoff
71
+ → synth workspace
72
+ → freeze
73
+ ```
74
+
75
+ Chaque étape est une commande en ligne de commande. Chaque étape écrit des données dans des fichiers qui ne peuvent être modifiés qu'en ajoutant des informations. Aucune étape ne synthétise, ne résout ou ne crée de nouvelles informations vérifiées ; ces invariants sont appliqués, et non simplement considérés comme acquis. L'étape de revue accepte, rejette ou demande une correction des propositions candidates ; l'étape de validation utilise ces décisions pour calculer l'éligibilité à la synthèse ; l'étape de "gel" est le verrouillage final qui empêche de marquer un ensemble comme terminé, sauf si toutes les étapes sont d'accord. Consultez le fichier [docs/dogfood-proof.md](docs/dogfood-proof.md) pour la preuve de la version 0.1 qui démontre que la chaîne fonctionne de bout en bout.
76
+
77
+ Ceci est une alternative structurée à *recherche → résumé → rapport détaillé*. La chaîne est le produit.
78
+
79
+ ## Installation
80
+
81
+ **Prérequis :** Node.js ≥ 20.
82
+
83
+ ```bash
84
+ # From source (v0.1.0 is not yet published to npm)
85
+ git clone https://github.com/mcp-tool-shop-org/research-os.git
86
+ cd research-os
87
+ npm install
88
+ npm run build
89
+ npm link # makes `research-os` available on your PATH
90
+ ```
91
+
92
+ ## Démarrage rapide
93
+
94
+ ```bash
95
+ # Create a new research-pack
96
+ research-os init "How should X be structured?"
97
+
98
+ # Add a section
99
+ research-os section add 01-landscape --purpose "Map the current landscape"
100
+
101
+ # Discover and approve sources, then gather
102
+ research-os discover run 01-landscape
103
+ research-os discover approve 01-landscape --top 8
104
+ research-os gather 01-landscape --approved
105
+
106
+ # Run the per-section chain
107
+ research-os claim extract 01-landscape
108
+ research-os claim audit-density 01-landscape
109
+ research-os claim triage 01-landscape
110
+ research-os contradict map 01-landscape --triaged-only
111
+ research-os review 01-landscape --triaged-only --preset hermes-two-pass --profile hermes-two-pass
112
+ research-os review-promote 01-landscape --profile hermes-two-pass
113
+ research-os gate 01-landscape
114
+ research-os section report 01-landscape
115
+
116
+ # Pack-level finish
117
+ research-os audit
118
+ research-os index build --all
119
+ research-os cowork handoff
120
+ research-os synth workspace # only if handoff returned synthesis_ready
121
+ research-os freeze
122
+ ```
123
+
124
+ **Pour un exemple concret**, consultez l'ensemble de données "dogfood" situé dans `research-os-packs/research-os-spec/` : chaque fichier, chaque enregistrement, chaque disposition, chaque empreinte de "gel", le tout est stocké sur disque dans des fichiers qui ne peuvent être modifiés qu'en ajoutant des informations. Cet ensemble de données a généré le fichier `docs/dogfood-proof.md`.
125
+
126
+ **Nécessite [ollama-intern-mcp](https://github.com/mcp-tool-shop-org/ollama-intern-mcp) en cours d'exécution localement** pour l'extraction, le tri, la revue et la découverte des modèles de langage. Le modèle par défaut est `hermes3:8b`; vous pouvez le modifier en utilisant la variable d'environnement `OLLAMA_INTERN_MODEL=<modèle>`. Définissez la variable d'environnement `OLLAMA_HOST` si Ollama n'est pas exécuté sur l'adresse par défaut `localhost:11434`.
127
+
128
+ ## Vocabulaire
129
+
130
+ | Terme | Signification |
131
+ |------|---------|
132
+ | `research-os` | Le plan de contrôle / l'interface en ligne de commande / les étapes de validation / la loi d'orchestration (ce dépôt) |
133
+ | `research-pack` | L'artefact de dépôt généré pour un effort de recherche. |
134
+ | `research section` | Une unité d'investigation délimitée à l'intérieur d'un ensemble de données. |
135
+ | `research receipt` | Preuve qu'une section a passé les vérifications de source/proposition/étape de validation. |
136
+
137
+ ## Sécurité
138
+
139
+ `research-os` est une interface en ligne de commande qui fonctionne localement. Elle lit et écrit des fichiers dans le répertoire de l'ensemble de données que vous lui spécifiez, et (lorsque vous utilisez la commande `gather`), elle effectue des requêtes HTTP sortantes pour récupérer les URL de sources que vous fournissez. Elle ne : ne fait pas fonctionner de serveur, n'accepte pas de connexions entrantes, ne stocke pas de mots de passe, ni n'envoie de données de télémétrie. Aucun mot de passe n'est écrit dans les fichiers de l'ensemble de données. Consultez le fichier [SECURITY.md](SECURITY.md) pour connaître la politique de signalement des vulnérabilités.
140
+
141
+ ## Statut
142
+
143
+ **v0.1.0** — gelée le 2026-05-08. L'ensemble de données "dogfood" situé dans `research-os-packs/research-os-spec/` (dépôt frère) a atteint l'état de "gel" avec 296 propositions acceptées réparties sur 8 sections, 17 dispositions, 30 propositions corrigées par l'utilisateur, 0 blocage de correction actif, 0 contradiction non résolue, toutes les étapes de validation indiquant `synthesis_eligible=true`. 463/463 tests Vitest réussis. Seize règles fondamentales cumulées. Consultez le fichier [`docs/dogfood-proof.md`](docs/dogfood-proof.md) pour connaître les sept découvertes et les empreintes des enregistrements de "gel".
144
+
145
+ ### Ce que la version 0.1 n'est pas
146
+
147
+ - Non testée en conditions réelles par des utilisateurs externes. La seule exécution "dogfood" a révélé sept bogues.
148
+ - Pas encore disponible sur npm. Installez à partir du code source jusqu'à ce que la publication `npm publish` ait lieu.
149
+ - Pas un générateur de code. La commande `synth workspace` génère l'espace de travail structuré ; les humains (ou Cowork) écrivent le texte en fonction des identifiants des propositions acceptées.
150
+ - Pas une API stable selon les règles de compatibilité sémantique. La version 1.0.0 sera publiée après que des utilisateurs externes auront validé l'interface au fil du temps.
151
+
152
+ ### Limitations connues
153
+
154
+ - **L'origine de l'extracteur n'est pas visible au niveau de la jointure.** Une section peut passer le seuil de validité tout en s'appuyant sur des mécanismes de repli heuristiques lorsque l'extracteur calibré (Ollama avec le modèle configuré) n'est pas disponible. Ceci est enregistré comme une faiblesse connue ; les améliorations futures indiqueront les affirmations acceptées par l'extracteur et exigeront un nombre d'affirmations acceptées égal au seuil à partir du chemin calibré.
155
+ - **Le choix du modèle de réviseur, au-delà de la base de référence calibrée `hermes-two-pass`, n'est pas encore résolu.** L'environnement de test interne a validé une configuration de réviseur ; les modèles alternatifs doivent être calibrés avec des tests de défaillance simulées avant de pouvoir être utilisés.
156
+ - **Le pack de test interne a utilisé `mistral-nemo:12b` pour l'extraction (la valeur par défaut est `hermes3:8b`).** Le système a généré des résultats incorrects pour des noms de sections auto-référentielles, ce qui a été corrigé grâce à une discipline de précision des requêtes (voir le manuel) et à des URL pré-configurées par les opérateurs pour les sujets ambigus.
157
+
158
+ ## Licence
159
+
160
+ MIT