rename: braindump → coopertron (Coopertron 5000)

The tool names the whole experiment, not just this script, so it gets a
name with some personality. Repo, directory and command are `coopertron`;
"Coopertron 5000" is the display name in the README and the report title.
The activity the form captures is still a braindump.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
solo.istandClaude Fable 5.1 committed 2026-10-19 02:56:50 -04:00
1 parent 05f4e88867
commit 9faa403aee
4 files changed
+11 -7

No files matched your search

+6 -2
View File
@@ -1,6 +1,7 @@
# braindump
# Coopertron 5000
Anonymous braindump form + LLM synthesis for Inference Cooperative meetings.
A benevolent robot that reads the co-op's anonymous pre-meeting braindump and
tells the members what they said. Built for Inference Cooperative meetings.
Members answer a short form before a meeting (ideas, wants, needs, goals,
dissent). This script turns the export into a review document the group reads
together: where energy is concentrated, what is unusual, where people disagree.
@@ -129,3 +130,6 @@ lives on CryptPad for now; a small co-op-hosted app (anonymous form + a
synthesize button, same pipeline) is a possible next step if the output is
useful. Discussion and ideas: open an issue here or on
[co-op/support](https://git.inference.coop/co-op/support/issues).
Why the name: it is a small experiment with a big-robot name, on purpose. The
repo and command are `coopertron`; the 5000 lives in prose only.
+3 -3
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
"""braindump synthesize: turn an anonymous survey export into a review document.
"""Coopertron 5000: turn an anonymous survey export into a review document.
Pipeline (deterministic Python around two model stages):
@@ -162,7 +162,7 @@ class Gateway:
f"{self.base}/chat/completions",
data=json.dumps(body).encode("utf-8"),
headers={"Authorization": f"Bearer {key}", "Content-Type": "application/json",
"User-Agent": "braindump-synthesize/0.1"},
"User-Agent": "coopertron/0.1"},
method="POST",
)
try:
@@ -463,7 +463,7 @@ def render(loaded: dict, items: list[dict], clusters: dict, meta: dict) -> str:
return f'> "{it["quote"]}" ({it["rid"]}, {it["q"]})'
out: list[str] = []
out.append(f"# Braindump synthesis\n")
out.append(f"# Coopertron 5000 report\n")
out.append(f"_Generated {meta['date']} from {meta['source']} · {n_resp} responses · "
f"{len(items)} points · {len(clusters['themes'])} themes · model `{meta['model']}`_\n")
out.append("Counts below are computed from the extracted points, not estimated by the model. "
+1 -1
View File
@@ -1,4 +1,4 @@
# Braindump synthesis
# Coopertron 5000 report
_Generated 2026-10-19 from sample.csv · 12 responses · 71 points · 2 themes · model `tinfoil/glm-5.3`_
+1 -1
View File
@@ -156,7 +156,7 @@ class PipelineTests(unittest.TestCase):
meta = {"date": "2026-10-19", "source": "sample.csv", "model": "tinfoil/glm-5.3", "dropped": dropped}
md = S.render(loaded, items, clusters, meta)
self.assertIn("# Braindump synthesis", md)
self.assertIn("# Coopertron 5000 report", md)
self.assertIn("## Priorities (pick up to 3)", md)
self.assertIn("**4** · privacy", md) # r01, r03, r06, r09 picked privacy
self.assertIn("### 1. ", md)