Commit 254be46
committed
Release v0.12.0
Minor rather than patch: a new subset, three new tools, and two visible
contract changes since v0.11.0.
Full-text coverage is now disclosed. The server reads the PUBLIC dataset,
which masks OCR per row by `OCR_is_public`: only 7,480/12,287 articles
(61%) and 1,298/1,501 publications (86%) carry full text. Keyword search
still reaches every item's title, subjects and AI abstract, so nothing is
invisible — but the full-text half of a match covered only those shares,
silently, and a keyword count read as a corpus-wide census.
get_collection_stats now returns `fulltext_coverage` and `fulltext_note`,
computed from the boolean flag (1-7 ms) rather than a
`length(trim(OCR))` scan (344 ms on publications); the caveat is mirrored
in the handshake instructions, SKILL.md, and the smoke test's pins, so an
upstream policy change trips an alarm instead of shifting every count.
`search` is now two-phase. Columns tagged `heavy` in SUBSET_FIELDS (the
OCR blobs) are excluded from the new FAST_TEXT_COLS; pass 1 matches
curated metadata and pass 2 scans OCR only when pass 1 under-fills the
page. Measured against the July 2026 dataset: 3.09 s -> 0.20 s for a
common term, 4.31 s -> 0.25 s for two tokens, with recall unchanged and
`deep_scan` reporting which path ran.
New in this release:
- The `images` subset (30 fieldwork photographs), with search_images,
get_image, and semantic_search_images — cross-modal, ranking against
the multimodal `embedding_image`, which is the only real handle on a
subset where 28 of 30 have no caption. Tools: 27 core + 3 semantic.
- Audiovisual transcriptions. The subset gained an `OCR` column (4/47
filled) that is now its body and part of its search surface; it was
bodied on `descriptionAI`, which is empty for all 47 rows, so every
fetch answered "(no full text available)" while transcriptions sat
unread.
- MCP prompts (iwac_research brief/extended, iwac_overview) — the only
workflow channel a skill-less client such as ChatGPT receives.
- An MCP App: get_temporal_distribution declares `_meta.ui.resourceUri`,
so hosts supporting the extension render an interactive chart that can
call the tool back to switch granularity. `_meta` is inert elsewhere,
so every other client gets byte-identical output. Palette and type
mirror the IwacVisualizations Omeka module's chart tokens.
Fixes:
- resolveLimit reports clamps at the LOW end too: `limit: 0` returned one
row with nothing saying why, which reads as "that is all there is".
Out-of-range excerpt parameters come back in `parameter_note`.
- A `search` query whose every token is under 2 characters is refused
rather than answered with `count: 0`, which was indistinguishable from
a term that is genuinely unattested.
- `url`/`title` fall back to the derivable canonical item page. ChatGPT
builds citation metadata only when `url` is a non-empty string, and the
result compaction drops empty strings.
- countryFilterIfExists folded into pipeValueFilterIfExists (it had
become a pure passthrough).
- Biome 2.5.5; documented the win32-arm64 lint segfault and the x64
emulation workaround, since the pre-commit lint could not run locally.
Verified: typecheck, biome, 48 unit tests, offline fixture and HTTP
round-trips, and the live smoke test against the real dataset.1 parent 833b353 commit 254be46
31 files changed
Lines changed: 1457 additions & 201 deletions
File tree
- .agents/skills/iwac-mcp
- references
- mcpb
- scripts
- src
- app
- tools
- test
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
| 17 | + | |
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
23 | | - | |
| 23 | + | |
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
| 32 | + | |
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
44 | | - | |
| 44 | + | |
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| |||
209 | 209 | | |
210 | 210 | | |
211 | 211 | | |
| 212 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
9 | | - | |
| 9 | + | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
| 12 | + | |
12 | 13 | | |
13 | 14 | | |
14 | 15 | | |
| |||
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
20 | | - | |
21 | | - | |
| 21 | + | |
| 22 | + | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
| |||
118 | 119 | | |
119 | 120 | | |
120 | 121 | | |
121 | | - | |
| 122 | + | |
122 | 123 | | |
123 | 124 | | |
124 | 125 | | |
125 | 126 | | |
126 | | - | |
127 | | - | |
| 127 | + | |
| 128 | + | |
128 | 129 | | |
129 | 130 | | |
130 | 131 | | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
131 | 142 | | |
132 | 143 | | |
133 | 144 | | |
| |||
162 | 173 | | |
163 | 174 | | |
164 | 175 | | |
165 | | - | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
166 | 182 | | |
167 | 183 | | |
168 | 184 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
61 | 61 | | |
62 | 62 | | |
63 | 63 | | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
64 | 69 | | |
65 | 70 | | |
66 | 71 | | |
| |||
102 | 107 | | |
103 | 108 | | |
104 | 109 | | |
105 | | - | |
| 110 | + | |
106 | 111 | | |
107 | 112 | | |
108 | | - | |
109 | | - | |
110 | | - | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
111 | 128 | | |
112 | 129 | | |
113 | 130 | | |
114 | 131 | | |
115 | 132 | | |
116 | 133 | | |
117 | 134 | | |
118 | | - | |
| 135 | + | |
| 136 | + | |
119 | 137 | | |
120 | 138 | | |
121 | 139 | | |
| |||
0 commit comments