Splitting this out of #15 as you suggested. Grounded in what's already on main (benchmark_proposals, constructs).
Intake. A public form that accepts a concept or a text transcript and turns it into one or more benchmark_proposals. Fields: title, content (paste/upload), source_type (symposium / experiment / dialogue / paper), provenance (author, venue, date, link), submitter, consent. benchmark_proposals already has submitterName/submitterEmail — this generalizes that into submitter + source so an extracted proposal keeps a pointer to where it came from.
Dedup. On submit, key content by content_hash; same doc twice → one row. (Semantic-similarity dedup later; hash first.)
Extraction. A pass over the content emits candidate proposals with source = <submission id>, proposer = submitter. Categories stay your existing red-team set (prisoner / life raft / sycophancy / deception) — no separate "construct" abstraction.
Recusal. Once proposals get scored/ranked (#15), a submitter doesn't score their own — rater == proposer drops out, ours included. No rating store on main yet, so this is the rule to bake in when that lands.
Open question: a canonical set of categories to freeze as the seed, or grow them from submissions?
Splitting this out of #15 as you suggested. Grounded in what's already on main (
benchmark_proposals,constructs).Intake. A public form that accepts a concept or a text transcript and turns it into one or more
benchmark_proposals. Fields:title,content(paste/upload),source_type(symposium / experiment / dialogue / paper),provenance(author, venue, date, link),submitter,consent.benchmark_proposalsalready hassubmitterName/submitterEmail— this generalizes that intosubmitter+sourceso an extracted proposal keeps a pointer to where it came from.Dedup. On submit, key content by
content_hash; same doc twice → one row. (Semantic-similarity dedup later; hash first.)Extraction. A pass over the content emits candidate proposals with
source = <submission id>,proposer = submitter. Categories stay your existing red-team set (prisoner / life raft / sycophancy / deception) — no separate "construct" abstraction.Recusal. Once proposals get scored/ranked (#15), a submitter doesn't score their own —
rater == proposerdrops out, ours included. No rating store on main yet, so this is the rule to bake in when that lands.Open question: a canonical set of categories to freeze as the seed, or grow them from submissions?