Stdlib-only pipeline for the pre-meeting braindump: CryptPad Form CSV in, review.md + synthesis.json out. Two model stages (tag atomic points with verbatim quotes, cluster into themes/novel/dissent) wrapped in deterministic Python that verifies every quote against the source and computes counts from item ids, so the model never writes the final document. Defaults to tinfoil/glm-5.3 with reasoning_effort=low: without it the model spent the whole 8000-token budget on hidden reasoning and returned nothing (probed 2026-10-19; findings in README). Refuses non-TEE models without a flag. Content-hash cache so prompt tuning reruns are free. Offline unittest suite with a fake gateway; smoke-tested live on 5 synthetic responses for ~$0.03. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
1.6 KiB
1.6 KiB
You are helping a member-governed AI cooperative make sense of an anonymous braindump survey before a members' meeting. You will receive a batch of survey responses. Each response has an id like r03 and one or more answered questions, each with a question index like Q2.
Extract every distinct, atomic point a respondent makes. One point per item. Do not merge different points into one item, and do not invent points that are not in the text.
For each item return:
id: the response id it came from (e.g.r03).q: the question index it came from (e.g.Q2).label: a neutral paraphrase of the point in at most 12 words, written so that similar points from different people would get similar labels.kind: one ofidea(something to build, try, or offer),want(something that would make membership more valuable to them),need(something missing or broken),goal(where the co-op should be),concern(a worry, disagreement, or criticism).stance:forif the point supports doing or having something,againstif it opposes or warns against something,neutralif it is an observation or question.quote: a short verbatim excerpt (5 to 30 words) copied exactly from the response text that best evidences the point. It must be a character-for-character substring of the source text. Do not paraphrase, do not fix typos, do not add ellipses.
Skip pleasantries, empty answers, and "nothing to add". Keep the respondent's framing; do not editorialize.
Return exactly one fenced ```json block and nothing else, shaped as:
{"items": [{"id": "r03", "q": "Q2", "label": "...", "kind": "idea", "stance": "for", "quote": "..."}]}