Trust gating for unprompted speech (CHATROOM_SPEC section 5) applied to dispatch: a stranger crow may speak only when addressed; a regular may claim open requests; a trusted may open requests. This is regression + enforcement, not a new mechanism.
Acceptance criteria — falsifiable tests
TestStrangerOnlyWhenAddressed — Given a ledger where Hugin is a stranger on task_type other (level 0), when a conspiracy-mode request is posted without to (invite list includes Hugin), then Hugin is not invoked; the other invited crows with any level > stranger are. Assert recorded scriptedBrain calls exclude Hugin. Red now (invites ignore trust), green after.
TestRegularMayClaimOpen — Given a regular crow and an open solo request nobody claimed, when the harness surfaces it, the regular is invited to claim; assert one claim-opportunity prompt names that crow. Red now, green after.
With only strangers in a nest and no to, a request posts cleanly with 0 invocations (stays open until addressed). Red now, green after.
Test command
go test -race -run 'TestStrangerOnlyWhenAddressed|TestRegularMayClaimOpen' .
Blockers / unknowns
Uses existing Ledger.Level(crow, taskType) blends; taskType for a nest request is Jev's task_type question from B3 tagging (same call, extend criteria parse to keep both answers).
Epic: #21. Depends on: #24
## Goal
Trust gating for unprompted speech (CHATROOM_SPEC section 5) applied to dispatch: a stranger crow may speak **only when addressed**; a regular may claim open requests; a trusted may open requests. This is regression + enforcement, not a new mechanism.
## Acceptance criteria — falsifiable tests
1. `TestStrangerOnlyWhenAddressed` — Given a ledger where Hugin is a stranger on task_type `other` (level 0), when a `conspiracy`-mode request is posted without `to` (invite list includes Hugin), then Hugin is **not** invoked; the other invited crows with any level > stranger are. Assert recorded scriptedBrain calls exclude Hugin. Red now (invites ignore trust), green after.
2. `TestRegularMayClaimOpen` — Given a regular crow and an open solo request nobody claimed, when the harness surfaces it, the regular is invited to claim; assert one claim-opportunity prompt names that crow. Red now, green after.
3. With only strangers in a nest and no `to`, a request posts cleanly with 0 invocations (stays open until addressed). Red now, green after.
## Test command
`go test -race -run 'TestStrangerOnlyWhenAddressed|TestRegularMayClaimOpen' .`
## Blockers / unknowns
Uses existing `Ledger.Level(crow, taskType)` blends; taskType for a nest request is Jev's `task_type` question from B3 tagging (same call, extend criteria parse to keep both answers).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Epic: #21. Depends on: #24
Goal
Trust gating for unprompted speech (CHATROOM_SPEC section 5) applied to dispatch: a stranger crow may speak only when addressed; a regular may claim open requests; a trusted may open requests. This is regression + enforcement, not a new mechanism.
Acceptance criteria — falsifiable tests
TestStrangerOnlyWhenAddressed— Given a ledger where Hugin is a stranger on task_typeother(level 0), when aconspiracy-mode request is posted withoutto(invite list includes Hugin), then Hugin is not invoked; the other invited crows with any level > stranger are. Assert recorded scriptedBrain calls exclude Hugin. Red now (invites ignore trust), green after.TestRegularMayClaimOpen— Given a regular crow and an open solo request nobody claimed, when the harness surfaces it, the regular is invited to claim; assert one claim-opportunity prompt names that crow. Red now, green after.to, a request posts cleanly with 0 invocations (stays open until addressed). Red now, green after.Test command
go test -race -run 'TestStrangerOnlyWhenAddressed|TestRegularMayClaimOpen' .Blockers / unknowns
Uses existing
Ledger.Level(crow, taskType)blends; taskType for a nest request is Jev'stask_typequestion from B3 tagging (same call, extend criteria parse to keep both answers).