Peregrine · question_type and strategy_tags · proposal

Neither of these is a backfill

28 August 2026 · nothing applied · 151 items in the bank

The plan carries both as data entry — 51 items missing one, 39 missing the other. Measured against the bank as it stands the numbers are 62 and 70, and in both cases the gap is not evenly spread. It falls entirely on families where the field may not apply. Filling them as written would put a value on every item and mean less than leaving them empty.

question_type — 62 missing, all of them in two families

FamilyMissingWhat one of its items is
target-practice45 A one-line reasoning claim with a verdict of clean or con. No stem, no options.
go-undercover17 A claim, the line a con would say about it, and two honest lines. No stem, no options.
the-lineup, the-wager0 Four-option questions. Every one already carries a type.
These two families have no question to type

The field's own prompt says it holds "the pipeline's 23-value question_type", and those 23 values are kinds of SAT question — solve, inference, transition, grammar-boundary. A Target Practice item is not a question; it is a claim you shoot or spare. A Go Undercover item is not a question; it is a line you voice. Assigning solve to a claim would make Report G route on a value nobody could act on.

What I would do Declare the field inapplicable for these two families rather than filling it. The clean way is the one the schema already uses elsewhere: an applies_when on question_type naming the families that have a question, so the validator stops counting an absence that is correct. That closes the gap at 0 without inventing 62 values.

strategy_tags — 70 missing, and the counter already exists elsewhere

A strategy tag names what beats the item. Peregrine already writes that down, twice: every con carries a first_move, and every Go Undercover round carries a counter. Tagging 70 items one at a time would be re-deriving, item by item, a thing already recorded per character.

What I would do Map the strategy to the CON, once, and let items inherit it. One decision per con instead of one per item, and it stays right as the bank grows.

I tested that mapping against all thirty cons. It reaches seventeen. The other thirteen have a counter more specific than any of the ten catalogued strategies:

ConIts own first moveNearest strategy
The MismatchStrip the interrupting phrase and match the verb to the true subject.none of the ten
The DanglerFind the noun right after the comma — the opening phrase must describe it.none of the ten
The EarCheck the one thing the sentence is testing, against the passage rather than your ear.none of the ten
The EmbellisherDemand a specific line in the passage that backs the choice.none of the ten
The UnderstudySay the phrase aloud in full — idiom and register fail out loud.none of the ten

That is a gap in the strategy list rather than in the tagging. The ten strategies were migrated from the app and were never grown to cover the cast — nine of the thirteen unmapped cons are Writing, which is the section the strategy list is thinnest on.

RouteItems it reaches
Inherit from the con, using the seventeen that map15 of the 70 missing
Items with no con to inherit from55 33 target-practice, 17 go-undercover, 4 the-wager, 16 the-lineup twins

Three calls

  1. Does question_type apply to a claim? If no, it becomes applies_when the four-option families and the gap closes at zero. If yes, the 23-value vocabulary needs a value that means "not a question", and that is a change to the pipeline's vocabulary rather than to Peregrine.
  2. Should the strategy live on the con instead of the item? One decision per character rather than one per item, and every future item inherits it for free.
  3. Do the ten strategies grow? Thirteen cons have a counter no catalogued strategy covers, nine of them in Writing. Either the list grows to fit the cast, or those cons carry no strategy and the tagging stops at seventeen.