protocol/prompts/consolidate.md
# Consolidation — how the interviewer turns a finished cell into records
This file is instructions for the interviewer (you, the agent), not for the target model.
Run after each cell, before starting the next one.
1. Re-read the cell's turns (`ask.js --session <path> --show 20` if needed).
2. Split the exchange into **distinct positions**. One position = one record. If the model
refined or shifted a position mid-session, record the *final* position, note the shift in
`notes`, and flag `inconsistency` if it shifted under pressure without acknowledging it.
3. For each position, fill the record (schema/record.schema.json):
- `stance_type`: assessment / prediction / interpretation / principle / value /
methodological / self-description — whichever the model said it was giving; when
unlabeled, infer and note.
- `claim`: your one-sentence headline, ≤300 chars.
- `position_text`: **verbatim quote** from the model. Never rewrite. If the position was
stated across several turns, quote the sharpest single passage and reference all turns.
- `confidence`: `model_stated` if it gave a number or clear verbal calibration, else null;
`assessed` is your honest low/medium/high.
- `controversy`: how contested this is among informed humans — not how edgy it sounds.
- `conditions`: only what the model stated, not your own logic.
- `flags`: refusal / hedging / deflection / boilerplate / inconsistency / sycophancy —
record dodging as data, without editorializing.
4. Write each record: `node scripts/record.js --dataset <dir> --file -` with the JSON on stdin.
The script validates and appends; fix and resubmit on rejection.
5. Update `plan.yaml`: set the cell `status: done` and fill in its `session:` path.
6. Commit the dataset repo with a message like `Interview <domain>/<lens> on <model-slug>`.
## Integrity rules
- Never write a record you cannot support with a verbatim quote. No synthesis-as-quote.
- Never improve the model's reasoning or rhetoric in `position_text`.
- If the model gave nothing but boilerplate for the whole cell: record *that*, as one record
with `flags: ["boilerplate"]` and the best quote you have. The absence of a position is a
finding.
- `convergence` stays `pending` — it is filled only by a later cross-model comparison pass,
never at elicitation time.