2026-08-06 14:39 UTC 路 markdown 路 ~10,000 est. tokens
# Public Meeting Minutes Synthesis Pack
```text
License: MIT
Prepared by Ale (@Al3j1t0hn) 脭脟枚 open contribution for public meeting transparency.
Version: 1.0-draft
```
## 1. Purpose, scope, and limits
This pack turns a **public meeting transcript or authorized meeting notes** into structured, speaker-neutral minutes. It is designed for civic groups, nonprofits, local boards, and community teams that need a reviewable record of what the source actually establishes.
It is **not** an official record, legal advice, legal transcription, fact-checking service, or authority to process private material. It does not verify claims outside the supplied source. A human remains responsible for publication and formal approval.
**Core rule:** never create a decision, action owner, deadline, quotation, attendance fact, or degree of certainty that the source does not establish. When evidence is missing or ambiguous, write `not established` or `human review required`.
## 2. Input contract
Provide one source packet:
```json
{
"meeting_title": "string or not established",
"meeting_date": "YYYY-MM-DD or not established",
"source_type": "transcript | notes | recording transcript",
"source_url_or_reference": "string",
"public_or_authorized": true,
"language": "en",
"source_text": "verbatim source text",
"known_limitations": ["speaker labels may be incomplete"]
}
```
Before processing, minimize personal data: exclude or redact private contact details, protected personal information, and material outside the stated meeting purpose unless its processing is necessary, authorized, and appropriate. Do not silently repair bad audio, absent speaker labels, missing timestamps, or contradictions. Preserve those limitations in the output.
## 3. Four-role workflow
Run the roles in order. The next role receives the prior role脭脟脰s structured output and the original source.
1. **Evidence Extractor** 脭脟枚 identifies only source-supported statements and their evidence.
2. **Structurer** 脭脟枚 classifies extracted statements into decisions, actions, dissents, questions, and ambiguities.
3. **Minutes Writer** 脭脟枚 produces readable minutes without adding facts.
4. **Fidelity Reviewer** 脭脟枚 compares every material output item with the source and blocks unsupported claims.
A single model may run all four roles, but must preserve the role boundaries and intermediate evidence objects.
## 4. Reusable prompts
### Role A 脭脟枚 Evidence Extractor
```text
You are the Evidence Extractor for public-meeting minutes.
Read only the supplied source packet. Extract atomic statements that may support a meeting record. Do not summarize, infer intent, resolve contradictions, or fill blanks.
For each item return: id, category_candidate, statement, speaker_or_source_label, timestamp_or_location, evidence_quote, source_basis, and notes.
Allowed category_candidate values: decision, proposed_action, action_commitment, dissent_or_reservation, open_question, attendance_or_context, ambiguity.
source_basis is one of: confirmed (directly stated), inferred (a cautious interpretation that requires human review), or unknown (not established by the source). Do not promote inferred or unknown content to confirmed.
A decision is explicit only if the source records an adoption, approval, vote result, or equivalent unambiguous outcome. An action owner or deadline is explicit only if named in the source. If labels, timing, or meaning are unclear, preserve the ambiguity.
Return JSON only. Every material statement must contain a short verbatim evidence_quote from the source. Never invent a quote.
```
### Role B 脭脟枚 Structurer
```text
You are the Structurer. You receive the original source packet and the Evidence Extractor JSON.
Create a proposed minutes record. Use only extracted items whose evidence supports the classification. Keep dissents and reservations as first-class items. Keep unresolved requests as open questions; do not convert them into actions or decisions.
For every decision, action, dissent, question, and ambiguity include the schema's `evidence` object. Set `source_basis` to confirmed, inferred, or unknown. Use `review_required: true` for every inferred or unknown item and for ambiguity, conflicts, missing owners, or missing dates.
If no supported item exists for a section, output an empty array. Empty is better than invented completeness.
Return JSON conforming to the schema in this pack.
```
### Role C 脭脟枚 Minutes Writer
```text
You are the Minutes Writer. Convert the validated structured record into concise Markdown minutes for human review.
Use neutral language. Attribute statements only when the source establishes the speaker label. Do not turn a proposal into a decision, a request into a commitment, or an unclear date into a deadline.
Include: meeting information, source limitations, decisions, action items, dissents/reservations, open questions, and ambiguities requiring human review. For every material item, retain an evidence reference and a short source quote in a collapsible-looking blockquote or parenthetical.
If an item is not established, say exactly "Not established in the supplied source." Never use likely, presumably, probably, or inferred to fill the record.
```
### Role D 脭脟枚 Fidelity Reviewer
```text
You are the Fidelity Reviewer. Compare the proposed record and human-readable minutes against the original source packet.
For each material item, verify: (1) it is supported by the cited evidence quote; (2) its classification is not stronger than the source; (3) speaker, owner, date, vote result, and certainty are not invented; (4) dissent and open questions were not omitted; (5) language is neutral.
Return a review with PASS, REVISE, or BLOCK.
BLOCK if any unsupported decision, owner, deadline, quote, attendance claim, or asserted consensus appears. REVISE if evidence is present but classification, wording, or structure needs correction. PASS only when all rubric criteria score at least 4/5 and no auto-fail is present.
```
## 5. JSON Schema (Draft 2020-12)
```json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Public Meeting Minutes Record",
"type": "object",
"required": ["meeting", "decisions", "actions", "dissents", "open_questions", "ambiguities"],
"properties": {
"meeting": {
"type": "object",
"required": ["title", "date", "source_reference", "limitations"],
"properties": {
"title": {"type": "string"},
"date": {"type": "string"},
"source_reference": {"type": "string"},
"limitations": {"type": "array", "items": {"type": "string"}}
},
"additionalProperties": false
},
"decisions": {"type": "array", "items": {"$ref": "#/$defs/recordItem"}},
"actions": {"type": "array", "items": {"$ref": "#/$defs/actionItem"}},
"dissents": {"type": "array", "items": {"$ref": "#/$defs/recordItem"}},
"open_questions": {"type": "array", "items": {"$ref": "#/$defs/recordItem"}},
"ambiguities": {"type": "array", "items": {"$ref": "#/$defs/recordItem"}}
},
"$defs": {
"evidence": {
"type": "object",
"required": ["quote", "reference"],
"properties": {
"quote": {"type": "string", "minLength": 1},
"reference": {"type": "string", "minLength": 1}
},
"additionalProperties": false
},
"recordItem": {
"type": "object",
"required": ["statement", "status", "evidence"],
"properties": {
"statement": {"type": "string"},
"speaker": {"type": "string"},
"status": {"enum": ["confirmed", "human_review_required", "not_established"]},
"source_basis": {"enum": ["confirmed", "inferred", "unknown"]},
"review_required": {"type": "boolean"},
"evidence": {"$ref": "#/$defs/evidence"}
},
"additionalProperties": false
},
"actionItem": {
"type": "object",
"required": ["statement", "status", "evidence"],
"properties": {
"statement": {"type": "string"},
"owner": {"type": "string"},
"due_date": {"type": "string"},
"status": {"enum": ["confirmed", "human_review_required", "not_established"]},
"source_basis": {"enum": ["confirmed", "inferred", "unknown"]},
"review_required": {"type": "boolean"},
"evidence": {"$ref": "#/$defs/evidence"}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
```
## 6. Human-readable minutes template
```markdown
# [Meeting title or Not established]
**Date:** [date or Not established]
**Source:** [reference]
**Source limitations:** [limitations]
## Decisions
- [confirmed decision]
- Evidence: 脭脟拢[short quote]脭脟脴 ([reference])
## Action items
- [action]
- Owner: [name or Not established in the supplied source]
- Due date: [date or Not established in the supplied source]
- Evidence: 脭脟拢[short quote]脭脟脴 ([reference])
## Dissents and reservations
- [neutral description]
- Evidence: 脭脟拢[short quote]脭脟脴 ([reference])
## Open questions
- [unresolved question or request]
- Evidence: 脭脟拢[short quote]脭脟脴 ([reference])
## Ambiguities requiring human review
- [what is unclear and why]
- Evidence: 脭脟拢[short quote]脭脟脴 ([reference])
```
## 7. Guardrails
- Do not infer consensus from silence, applause, or a chair moving on.
- Do not call a proposal approved unless an explicit outcome appears.
- Do not assign an owner from a speaker脭脟脰s presence or expertise.
- Do not normalize vague time language such as 脭脟拢next month脭脟脴 into a date.
- Do not remove dissent because a decision passed.
- Do not create an action item from an unanswered request.
- Do not add external context, corrections, or citations not present in the source packet.
- Preserve conflicting statements and route them to human review.
- An empty section is valid.
- Never present model confidence as evidence.
## 8. Worked example
### Fictional source input
```text
Riverside Neighborhood Council 脭脟枚 public meeting transcript excerpt
Chair: We have a motion to approve a three-month library van pilot, up to $8,000.
Member Lee: I second.
Chair: All in favor? Five. Opposed? One. The motion passes.
Chair: Jordan will bring vendor options to the next regular meeting.
Member Patel: I support access, but I oppose spending from the emergency reserve.
Resident Gomez: Could the pilot also stop near the senior center?
Chair: We should discuss that with the library director later this month.
Clerk note: The next regular meeting date was not stated in this excerpt.
```
### Expected structured outcome
```json
{
"meeting": {
"title": "Riverside Neighborhood Council",
"date": "Not established",
"source_reference": "fictional transcript excerpt",
"limitations": ["Only an excerpt was supplied", "Next regular meeting date was not stated"]
},
"decisions": [{
"statement": "A three-month library van pilot, up to $8,000, was approved by a 5脭脟么1 vote.",
"status": "confirmed",
"evidence": {"quote": "Five. Opposed? One. The motion passes.", "reference": "source excerpt"}
}],
"actions": [{
"statement": "Bring vendor options to the next regular meeting.",
"owner": "Jordan",
"due_date": "Not established in the supplied source",
"status": "confirmed",
"evidence": {"quote": "Jordan will bring vendor options to the next regular meeting.", "reference": "source excerpt"}
}],
"dissents": [{
"statement": "Member Patel supported access but opposed using the emergency reserve.",
"speaker": "Member Patel",
"status": "confirmed",
"evidence": {"quote": "I support access, but I oppose spending from the emergency reserve.", "reference": "source excerpt"}
}],
"open_questions": [{
"statement": "Resident Gomez asked whether the pilot should also stop near the senior center; no resolution is established.",
"speaker": "Resident Gomez",
"status": "confirmed",
"evidence": {"quote": "Could the pilot also stop near the senior center?", "reference": "source excerpt"}
}],
"ambiguities": [{
"statement": "The date of the next regular meeting is not established; 'later this month' is not a commitment or deadline.",
"status": "human_review_required",
"evidence": {"quote": "The next regular meeting date was not stated in this excerpt.", "reference": "source excerpt"}
}]
}
```
## 9. Peer-review rubric
Score each criterion 1脭脟么5.
| Criterion | 1 | 3 | 5 |
|---|---|---|---|
| Evidence fidelity | Unsupported claims | Most material items supported | Every material item is traceable to a source quote |
| Classification discipline | Proposals/requests become decisions | Some boundary errors | Decisions, actions, dissents, and questions are rigorously distinct |
| Uncertainty handling | Fills gaps | Flags some gaps | Clearly marks all missing, conflicting, or ambiguous facts |
| Neutrality | Editorial or partisan tone | Mostly neutral | Faithful, speaker-neutral language throughout |
| Usability | Vague or dense | Usable with effort | Clear prompts, schema, template, and reviewer flow |
| Completeness | Required parts missing | Most parts present | All sections, example, rubric, credit, and MIT license present |
**Acceptance threshold:** every criterion must score at least 4/5.
**Automatic fail:** any invented decision, owner, deadline, quote, vote result, attendance claim, external fact, or omitted explicit dissent.
## 10. Practical run guide
1. Confirm the source is public or authorized.
2. Preserve the original source unchanged.
3. Run Role A, then validate that each material item has a quote.
4. Run Role B and validate against the schema.
5. Run Role C to create minutes.
6. Run Role D against the original source, not only the intermediate JSON.
7. A human resolves every `human_review_required` item before approval or publication.
---
## MIT License
Copyright (c) 2026 Ale
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
https://grokforge.app/projects/open-agent-civic-toolkithttps://grokforge.app/c/cmshmgrvs0001r0k31lq43thu