@mcptoolshop/research-os 0.2.0 → 0.3.1

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,200 @@
2
2
 
3
3
  All notable changes to `research-os` are documented here.
4
4
 
5
+ ## [0.3.1] — 2026-05-09
6
+
7
+ Tight release. One real, tested, dogfooded improvement: section-scoped
8
+ source-floor waivers + reviewer-side acknowledgement. Earned by Experiment 3
9
+ XRPL pack Session 2 — canonical-protocol sections (XRPL XLS standards,
10
+ single-foundation chain documentation, walled-garden API specs) inverted
11
+ the assumption that publisher diversity is a proxy for truth quality. No
12
+ other v0.3.x candidates shipped — F-01 (init version-stamp), F-02
13
+ (packs-dir docs), F-05 (discover --query example), F-08 (Windows process
14
+ recovery), F-16 (unused SectionSchema fields), F-17 (sections/<id>/gates.yaml
15
+ runtime wiring) are deferred to their own scoped releases.
16
+
17
+ ### Added
18
+
19
+ - **`primary_source_waiver.section_waivers[]`** — section-scoped source-floor
20
+ waivers. Each entry carries `section_id`, `scope` (`min_independent_publishers`
21
+ or `primary_sources_required`), `reason` (non-empty), and
22
+ `compensating_controls[]` (at least one entry). Schema enforcement: empty
23
+ `reason` or empty `compensating_controls[]` fail validation. Pack policy
24
+ `gates.source_floor.primary_source_waiver_allowed: false` blocks both
25
+ pack-level and section-scoped waivers — operators cannot smuggle a waiver
26
+ past pack policy by rerouting it to section scope.
27
+
28
+ Multiple entries can target different sections, or the same section with
29
+ different scopes. Pack-level `primary_source_waiver` semantics unchanged;
30
+ the new `section_waivers[]` is additive and defaults to `[]` for backward
31
+ compatibility. Existing packs unaffected. Full reference:
32
+ [`docs/section-scoped-waivers.md`](docs/section-scoped-waivers.md).
33
+
34
+ - **Reviewer-side acknowledgement** — when a section has a matching
35
+ `min_independent_publishers` waiver in effect, the calibrated reviewer's
36
+ section-wide `source_cluster_monopoly` finding remains visible in the
37
+ findings ledger but does NOT, by itself, route claims to
38
+ `needs_source_repair`. The finding is annotated as
39
+ `(severity, waived)` in the claim-review's reason string so operators
40
+ reading the ledger can see the finding is present but neutralised. Other
41
+ source-quality findings (per-claim `source_quality_problem`,
42
+ `scope_widening`, `overgeneralized_claim`, etc.) continue to drive their
43
+ own routing normally.
44
+
45
+ - **Audit-side disclosure** — `weak-sources.{json,md}` and
46
+ `source-diversity-gaps.{json,md}` rollups annotate waived rows with
47
+ `waived: true` and `waiver_reason: <verbatim>` when a matching section
48
+ waiver is active. Rows are NOT removed (Law 16: waivers do not hide
49
+ evidence). The publisher-monopoly fact is still surfaced in the rollup;
50
+ it's disclosed as deliberately accepted rather than as an open blocker.
51
+
52
+ - **13 new tests** in `test/section-scoped-waivers.test.ts` covering
53
+ schema validation (valid shape, missing reason, empty compensating
54
+ controls, invalid scope enum, bad section_id regex), gate-side
55
+ conversion (section_id match, section_id mismatch, primary_sources_required
56
+ scope, pack-level regression, pack-policy refusal, multiple sections,
57
+ multiple scopes for same section, disclosure in WaiverApplication),
58
+ reviewer-side acknowledgement (waived monopoly → accepted, per-claim
59
+ quality still routes, regression without waiver), and audit-side
60
+ annotation.
61
+
62
+ - **`docs/section-scoped-waivers.md`** — full operator reference: schema,
63
+ behavior contract, valid-cases / invalid-cases enumeration, required
64
+ operator discipline (synthesis-time disclosure beyond the schema), and
65
+ the release thesis. Opens with the canonical phrasing:
66
+ *"Use section-scoped source waivers when publisher diversity is
67
+ structurally incompatible with the section's truth source, not when a
68
+ section merely failed to find enough sources."*
69
+
70
+ - **Handbook page** at `/handbook/section-scoped-waivers` — condensed
71
+ reference matching the docs page.
72
+
73
+ ### Changed
74
+
75
+ - **Pack-level `min_independent_publishers: 0` workaround DEPRECATED**
76
+ in the canonical `research-packs/docs/operator-playbook.md` and the
77
+ research-os handbook mirror. The pack-level pattern remains valid for
78
+ already-frozen packs (e.g., `packages/comfyui-workflow-durability/`)
79
+ whose freeze receipts are unchanged; new packs should prefer the
80
+ section-scoped pattern. Forward notes added to
81
+ [`docs/experiment-1-proof.md`](docs/experiment-1-proof.md) at the
82
+ references to the deprecated workaround — historical content
83
+ preserved, not rewritten.
84
+
85
+ ### Documentation
86
+
87
+ - README status block updated to v0.3.1; version badge updated.
88
+ - `docs/roadmap.md` Experiment 3 progress: section-scoped source waivers
89
+ shipped in v0.3.1; pack #2 of 3 (XRPL) earned both v0.3.0 and v0.3.1
90
+ fixes. Two more external-domain packs required for closure.
91
+ - **Cross-repo:** `research-packs/docs/operator-playbook.md` updated in
92
+ the same release window. Adds the section-scoped waiver pattern as the
93
+ canonical guidance with the same anti-misuse framing as the research-os
94
+ docs page (public guidance is consistent across the surface by design).
95
+ Deprecates the `min_independent_publishers: 0` pack-level workaround.
96
+
97
+ ### Tests
98
+
99
+ - **540 total** (527 at v0.3.0 → 540 at v0.3.1, +13 from
100
+ `test/section-scoped-waivers.test.ts`).
101
+
102
+ ### Migration notes
103
+
104
+ No code-level migration required. Existing packs continue to work
105
+ unchanged — `section_waivers` defaults to `[]`. Frozen packs' freeze
106
+ receipts remain valid (the schema addition is additive).
107
+
108
+ For new canonical-protocol packs: prefer section-scoped waivers over the
109
+ deprecated pack-level `min_independent_publishers: 0` workaround. The
110
+ section-scoped pattern preserves the publisher-diversity floor on every
111
+ section that doesn't waive it explicitly.
112
+
113
+ For operators with packs already using the deprecated pack-level
114
+ workaround: the pattern remains valid; no migration is required. If you
115
+ want to tighten the global default and waive specific sections instead,
116
+ that's a clean per-section migration — set
117
+ `min_independent_publishers` back to its non-zero pack default and add
118
+ section_waivers entries for the sections that need them, with
119
+ `reason` and `compensating_controls[]` documented.
120
+
121
+ ## [0.3.0] — 2026-05-09
122
+
123
+ Tight release. One real, tested, dogfooded improvement: `--detector` flag on
124
+ `research-os contradict map`. F-09 from Experiment 3 Session 1 (XRPL pack)
125
+ earned the fix. No other v0.3 candidates shipped — F-01 (init version-stamp),
126
+ F-02 (packs-dir docs), F-05 (discover --query example), F-08 (Windows process
127
+ recovery) are deferred to v0.3.x.
128
+
129
+ ### Added
130
+
131
+ - **`--detector <auto|heuristic|ollama-intern>`** flag on
132
+ `research-os contradict map`. Three explicit modes:
133
+
134
+ - `auto` (default) — preserves env-var-driven behavior. When the
135
+ configured Ollama model is available, runs the LLM detector;
136
+ otherwise falls through to heuristic. Mirrors v0.2.x behavior.
137
+ - `heuristic` — bypasses Ollama entirely. No model availability check,
138
+ no LLM calls. Always works. Always completes quickly.
139
+ - `ollama-intern` — requires the configured model. Exits with code 2
140
+ and a visible failure message if the model is unavailable, instead
141
+ of silently falling back to heuristic.
142
+
143
+ Invalid `--detector` values exit with code 2. The mode chosen is
144
+ announced visibly on the first output line of every run; there are no
145
+ silent shifts. Full reference: [`docs/contradict-map.md`](docs/contradict-map.md).
146
+
147
+ - **12 new tests** in `test/contradictions-detector-flag.test.ts` covering
148
+ all three modes (heuristic never instantiates the Ollama client;
149
+ ollama-intern errors visibly when model unavailable; auto preserves
150
+ existing behavior; invalid value fails fast), heuristic ledger validity,
151
+ and a regression fixture that mirrors the XRPL Section 01 pattern (~60
152
+ claims with ~5-token shared vocabulary completes via heuristic in well
153
+ under 30 seconds).
154
+
155
+ - **`docs/contradict-map.md`** — full CLI reference: detector modes, mode
156
+ announcements (verbatim strings), when-to-use-which guidance, and the
157
+ release thesis.
158
+
159
+ - **Handbook page** at `/handbook/contradict-map` — condensed reference
160
+ matching the docs page.
161
+
162
+ ### Changed
163
+
164
+ - **CLI `--help`** for `contradict map` now lists the three `--detector`
165
+ choices.
166
+ - **Reference page** in the handbook updated to mention the flag and
167
+ link to the new contradict-map page.
168
+
169
+ ### Documentation
170
+
171
+ - README status block updated to v0.3.0; version badge updated.
172
+ - `docs/roadmap.md` Experiment 3 entry: F-09 chain blocker noted as
173
+ resolved in v0.3.0 (Experiment 3 itself remains in progress; closure
174
+ requires a third external-domain pack).
175
+ - **Cross-repo:** `research-packs/docs/operator-playbook.md` updated in
176
+ the same release window. The earlier "clear `OLLAMA_INTERN_MODEL` to
177
+ force heuristic" workaround is replaced with `--detector heuristic`
178
+ as the canonical operator surface. The handbook mirror in this repo
179
+ is kept consistent with the canonical.
180
+ - `SHIP_GATE.md` D2 updated: version bump + tag for v0.3.0.
181
+
182
+ ### Tests
183
+
184
+ - **527 total** (515 at v0.2.0 → 527 at v0.3.0, +12 from
185
+ `test/contradictions-detector-flag.test.ts`).
186
+
187
+ ### Migration notes
188
+
189
+ No code-level migration required. Existing scripts that don't pass
190
+ `--detector` continue to work via `auto` mode.
191
+
192
+ For operators who previously cleared `OLLAMA_INTERN_MODEL` to force the
193
+ heuristic detector: that pattern still works in environments where the
194
+ default model isn't installed, but the flag is the canonical surface
195
+ and is environment-independent. Switch to `--detector heuristic` when
196
+ re-running narrow-topic sections; the v0.3.0 operator-playbook update
197
+ in `research-packs` documents the rationale.
198
+
5
199
  ## [0.2.0] — 2026-05-09
6
200
 
7
201
  Tight release. Two real, tested, dogfooded improvements: `research-os pack publish`
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  </p>
8
8
 
9
9
  <p align="center">
10
- <a href="https://github.com/mcp-tool-shop-org/research-os/releases/tag/v0.2.0"><img src="https://img.shields.io/badge/version-0.2.0-blue" alt="version 0.2.0"></a>
10
+ <a href="https://github.com/mcp-tool-shop-org/research-os/releases/tag/v0.3.1"><img src="https://img.shields.io/badge/version-0.3.1-blue" alt="version 0.3.1"></a>
11
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
12
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT License"></a>
13
13
  <img src="https://img.shields.io/badge/node-%E2%89%A520-brightgreen" alt="Node ≥20">
@@ -151,9 +151,13 @@ This is the structural alternative to *search → summarize → pretty report*.
151
151
 
152
152
  ## Status
153
153
 
154
- **v0.2.0** — published to npm as `@mcptoolshop/research-os@0.2.0`, 2026-05-09. Ships `research-os pack publish` (Experiment 2) and the Pattern 2 readiness predicate fix. 515/515 vitest passing. See [CHANGELOG.md](CHANGELOG.md).
154
+ **v0.3.1** — published to npm as `@mcptoolshop/research-os@0.3.1`, 2026-05-09. Ships section-scoped source-floor waivers (`primary_source_waiver.section_waivers[]`) plus reviewer-side acknowledgement so a waived section-wide `source_cluster_monopoly` finding becomes a visible caveat rather than auto-routing all claims to `needs_source_repair`. Earned by Experiment 3 XRPL pack Session 2 — canonical-protocol sections (single-foundation chains, walled-garden API specs, standards-body docs) inverted the assumption that publisher diversity is a proxy for truth quality. 540/540 vitest passing. See [CHANGELOG.md](CHANGELOG.md) and [`docs/section-scoped-waivers.md`](docs/section-scoped-waivers.md).
155
155
 
156
- **`research-os pack publish`**Frozen packs export to the canonical `research-packs` archive with a single command. Derives `pack.manifest.json`, generates `README.md`, provisions `docs/how-to-read-this.md`, verifies the admission contract. See [`docs/pack-publish.md`](docs/pack-publish.md). Dogfood: both existing packages re-derived and `verify-pack.mjs` PASS — see [`docs/pack-publish-dogfood.md`](docs/pack-publish-dogfood.md).
156
+ **Section-scoped source waivers**Use them when publisher diversity is structurally incompatible with the section's truth source, not when a section merely failed to find enough sources. Schema-enforced `reason` + non-empty `compensating_controls[]`. Pack policy `primary_source_waiver_allowed: false` blocks both pack-level and section-scoped waivers. The pre-v0.3.1 pack-level `min_independent_publishers: 0` workaround is now deprecated; existing frozen packs remain valid under their existing receipts. See [`docs/section-scoped-waivers.md`](docs/section-scoped-waivers.md) and the [research-packs operator playbook](https://github.com/mcp-tool-shop-org/research-packs/blob/main/docs/operator-playbook.md).
157
+
158
+ **v0.3.0** — published 2026-05-09. Shipped the `--detector <auto|heuristic|ollama-intern>` flag on `contradict map` (F-09 chain-blocker fix from Experiment 3 Session 1, XRPL pack). 527/527 vitest then. Detector selection is now an explicit operator choice instead of a state-dependent env-var dance; mode is announced visibly on every run. See [`docs/contradict-map.md`](docs/contradict-map.md).
159
+
160
+ **v0.2.0** — published 2026-05-09. Shipped `research-os pack publish` (Experiment 2) and the Pattern 2 readiness predicate fix. 515/515 vitest passing then. See [CHANGELOG.md](CHANGELOG.md). Frozen packs export to the canonical `research-packs` archive with a single command; admission contract is enforced by code, not checklist. See [`docs/pack-publish.md`](docs/pack-publish.md).
157
161
 
158
162
  **v0.1.0** — dogfood pack frozen 2026-05-08. The pack at `research-os-packs/research-os-spec/` (sibling repo) reached freeze with 296 accepted claims across 8 sections, 17 dispositioned, 30 operator-overridden, 0 active repair blockers, 0 unresolved contradictions, all gates `synthesis_eligible=true`. Sixteen load-bearing laws cumulative. See [`docs/dogfood-proof.md`](docs/dogfood-proof.md) for the seven findings and freeze receipt fingerprints.
159
163
 
@@ -161,9 +165,9 @@ This is the structural alternative to *search → summarize → pretty report*.
161
165
 
162
166
  **v1 Experiment 1 (ComfyUI workflow durability)** — CLOSED 2026-05-09. All 8 sections at Terminal A, pack frozen, archive live. See [`docs/experiment-1-proof.md`](docs/experiment-1-proof.md) and [`docs/roadmap.md`](docs/roadmap.md).
163
167
 
164
- ### What v0.2 is not
168
+ ### What v0.3 is not
165
169
 
166
- - Not battle-tested by external users. Two dogfood arcs have run — one self-referential, one external-domain. External user pressure is Experiment 3 (API stability) in the v1.0 roadmap.
170
+ - Not battle-tested by external users. Two dogfood arcs have closed — one self-referential, one external-domain and Experiment 3 (API stability under external pressure) is in progress: pack #1 of 3 (XRPL creator-token durability) earned both the v0.3.0 `--detector` flag and the v0.3.1 section-scoped source waivers. Two more external-domain packs required for Experiment 3 closure.
167
171
  - Not a synthesis writer. The `synth workspace` command generates the structured workspace; humans (or Cowork) write the prose against accepted claim IDs.
168
172
  - Not API-stable under semver. v1.0.0 is an earned state, not a calendar date — see [`docs/roadmap.md`](docs/roadmap.md) for the six experiments that close the gap.
169
173