D1: Quill persona + service role #38

Open
opened 2026-10-28 13:42:47 +00:00 by jacisjake · 0 comments
jacisjake commented 2026-10-28 13:42:47 +00:00 (Migrated from github.com)

Epic: #36. Depends on: none

Goal

Quill is a persona and an addressable service role (like Elder). @Quill <request> gets exactly one in-character reply from Quill via Flock.ask. EVENTS.md gains the service-role note first; CHATROOM_SPEC 13 q1 is recorded as decided (Quill/Boss); PERSONAS.md regenerated.

Acceptance criteria — falsifiable tests

  1. TestQuillIsServiceRole (quill_test.go) — Given a nest whose members are Hugin and Munin, when the owner POSTs {"author":"owner","to":"Quill","text":"hello"}, then 201 and the stored record parses to: "Quill" as addressable (no 400). Red now: addressables() has no Quill.
  2. TestQuillAnswersInCharacter — Given a scripted brain that records prompts, when a request is addressed to Quill, then exactly one new message with author: "Quill", kind: "deliver", to: "owner", and the recorded system prompt contains Quill's backstory/strength text from personas.go.
  3. TestQuillNotInNestCrows — Quill never appears in nest.Crows and needs no trust promotion to answer when addressed (service role acts only on address; check matches Elder's gating in respondElder).
  4. go test -run TestQuill . green; ./crows personas > PERSONAS.md contains a Quill section and is committed.

Test command

go test -race -count=1 -run 'TestQuill' .

Blockers / unknowns

None. Names decided: Quill (assistant), Boss (COS).

Epic: #36. Depends on: none ## Goal Quill is a persona and an addressable service role (like Elder). `@Quill <request>` gets exactly one in-character reply from Quill via `Flock.ask`. EVENTS.md gains the service-role note first; CHATROOM_SPEC 13 q1 is recorded as decided (Quill/Boss); PERSONAS.md regenerated. ## Acceptance criteria — falsifiable tests 1. `TestQuillIsServiceRole` (`quill_test.go`) — Given a nest whose members are Hugin and Munin, when the owner POSTs `{"author":"owner","to":"Quill","text":"hello"}`, then 201 and the stored record parses `to: "Quill"` as addressable (no 400). Red now: `addressables()` has no Quill. 2. `TestQuillAnswersInCharacter` — Given a scripted brain that records prompts, when a request is addressed to Quill, then exactly one new message with `author: "Quill"`, `kind: "deliver"`, `to: "owner"`, and the recorded system prompt contains Quill's backstory/strength text from `personas.go`. 3. `TestQuillNotInNestCrows` — Quill never appears in `nest.Crows` and needs no trust promotion to answer when addressed (service role acts only on address; check matches Elder's gating in `respondElder`). 4. `go test -run TestQuill .` green; `./crows personas > PERSONAS.md` contains a Quill section and is committed. ## Test command `go test -race -count=1 -run 'TestQuill' .` ## Blockers / unknowns None. Names decided: Quill (assistant), Boss (COS).
Sign in to join this conversation.