feat(relay): Quill relays owner asks as nest requests (#40)

This commit is contained in:
Smokey committed 2026-10-28 08:57:50 -06:00
1 parent bfffb04a87
commit 31bf98411c
2 files changed
+88 -12

No files matched your search

+15 -9
View File
@@ -181,14 +181,22 @@ func (s *Server) postNestMessage(w http.ResponseWriter, r *http.Request) {
}
s.emitNestMessage(record)
s.triggerResponse(nest, record)
// Event-driven trigger (no idle loops):
// conspiracy -> several invited crows, each from its own lens
// any other request addressed to a member crow -> one must-respond reply
if kind == "request" {
writeJSON(w, http.StatusCreated, nestRecord(record))
}
// triggerResponse is the event-driven response rule (no idle loops): a
// conspiracy invites several crows, each from its own lens; any other request
// gets exactly one responder through the matching path; a deliver gets one
// divergence check.
// It runs for owner-posted messages and for harness-posted ones alike, so a
// Quill relay answers the named crow exactly like a direct request (#40).
func (s *Server) triggerResponse(nest Nest, record Message) {
if record.Kind == "request" {
switch {
case mode == "conspiracy" && invited > 0:
go s.respondConspiracy(nest, record, invited)
case record.Mode == "conspiracy" && record.Invited > 0:
go s.respondConspiracy(nest, record, record.Invited)
case record.To == "Elder":
go s.respondElder(nest, record)
case record.To == "Quill":
@@ -200,11 +208,9 @@ func (s *Server) postNestMessage(w http.ResponseWriter, r *http.Request) {
}
}
if kind == "deliver" {
if record.Kind == "deliver" {
go s.checkDivergence(nest, record)
}
writeJSON(w, http.StatusCreated, nestRecord(record))
}
var modePostable = map[string]bool{"solo": true, "conspiracy": true, "split": true}