DelveTalkcome in

Inspecting kind/dj · the kinds · the language · the modules

{name}

Go there its page the town

id
kind/dj
called
{name}
kind chain
kind/dj → kind/inhabitant → record
owner
the town
made by
the town
version
5
pin
hagap-fopan
state
6336 bytes

Its spells

  • makedelvetalk kind/dj make / name: <text, 1 to 64 characters> / haunts: <text, 1 to 128 characters> / tide: <text, 1 to 128 characters>
    its Bend

To cast them, come in.

Who may do what

What its law admits now, before the spell's own Bend has its say.

methoda newcomer
make✓ yes
place✓ yes
makeUnder✓ yes
repair✓ yes
publishPage✓ yes

Its law

  • host opener the hand that opened the world may amend any lawrequest.kind == 2 and request.subject == "the town"
  • law owner the owner stays; only the owner changes the form, the law, the head, the voice, what it is or the body; anyone makes, and places rules, wants and verbs on it(unchanged(owner)) and ((request.subject == new.owner) or ((((((((request.kind == 0) or (request.kind == 4)) and (unchanged(form))) and (unchanged(law))) and (unchanged(head))) and (unchanged(voice))) and (unchanged(about))) and (unchanged(body))))
  • law kind kinds's law holdsunder "kinds"

Its Bend

what it runs: its entry module 20 lines
layer over ./Kind.obend
edition ObjectiveBend 1
import ./Abi.obend as Abi
import ./List.obend as Lists
import ./Form.obend as Form
import ./Rows.obend as Rows
type State = Super.State
form make:
  name: text 1..64
  haunts: text 1..128
  tide: text 1..128
def make(state: State, input: MakeInput, context: Abi.Context) -> Activity<Super.Done>:
  Super.making(state, Lists.List.cons({head: {name: "name", value: input.name}, tail: Lists.List.cons({head: {name: "haunts", value: input.haunts}, tail: Lists.List.cons({head: {name: "tide", value: input.tide}, tail: Lists.List.nil()})})}), "", context)
form place:
  name: text 1..64
  haunts: text 1..128
  tide: text 1..128
  id: text 1..64
def place(state: State, input: PlaceInput, context: Abi.Context) -> Activity<Super.Done>:
  Super.making(state, Lists.List.cons({head: {name: "name", value: input.name}, tail: Lists.List.cons({head: {name: "haunts", value: input.haunts}, tail: Lists.List.cons({head: {name: "tide", value: input.tide}, tail: Lists.List.cons({head: {name: "id", value: input.id}, tail: Lists.List.nil()})})})}), "", context)
the body this kind lays on what it makes 86 lines

Each thing of this kind runs this layer over what the kind is of.

layer over ./Record.obend
edition ObjectiveBend 1
import ./Abi.obend as Abi
import ./List.obend as Lists
import ./Document.obend as Document
import ./Form.obend as Form
import ./Plan.obend as Plans
import ./World.obend as World
import ./Card.obend as Card
import ./Scenes.obend as Scenes
import ./Relation.obend as Relations
import ./Rows.obend as Rows
import ./Text.obend as Text
# The overnight DJ's body, over the inhabitant's (`kind/dj`; docs/review/station-trawl-2026-10-12.md 1, 3, 11,
# 13): the same four bars until enough is asked. A hand requests a song (a line, `request`) or calls in (a line,
# `call`, answered in deepseek's and berduck's words); the third request since the song last changed sets its
# `enough`, and its kind's rule `enough` casts its own `play`, which takes the newest request for its song and
# clears it. At midnight by the clock, by its own rule on the tide, it says between songs what berduck said,
# a line on its place.
type State = Super.State
type Done = Scenes.Done
form request:
  song: text 1..120
form call:
  words: text 1..280
form play:
form between:
def haunting(state: State, context: Abi.Context) -> Lists.List<Super.Haunting>:
  Lists.append(Lists.List.nil(), Super.atHour(state, context, "between", 0n, "delvetalk {context.object} between"))
def verbs() -> String:
  "request call"
def moves() -> String:
  "haunt play between"
# How many requests change the song.
def enough() -> Nat:
  3n
def newest(state: State, verb: String) -> Lists.Maybe<Rows.Line>:
  Lists.find(Lists.reverse(Relations.order(state.lines, fn(l: Rows.Line) -> Nat: l.n)), fn(l: Rows.Line) -> Bool: l.verb == verb)
# The song on now: what it last played, else the same four bars.
def song(state: State) -> String:
  match newest(state, "play"):
    case some(l): l.value.text
    case none(_): "the same four bars, nearly resolving"
def since(state: State) -> Nat:
  match newest(state, "play"):
    case some(l): l.value.n
    case none(_): 0n
# The requests since it last changed its song, newest first.
def asked(state: State) -> Lists.List<Rows.Line>:
  Lists.filter(Lists.reverse(Relations.order(state.lines, fn(l: Rows.Line) -> Nat: l.n)), fn(l: Rows.Line) -> Bool: l.verb == "request" && l.n > since(state))
def flagged(state: State) -> Bool:
  Lists.any(state.vars, fn(v: Scenes.Var) -> Bool: v.name == "enough")
def request(state: State, input: RequestInput, context: Abi.Context) -> Activity<Nat>:
  let k = Lists.length(asked(state)) + 1n
  if k >= enough() && flagged(state) == false then flagging(input.song, k, state, context) else Super.hears(state, "request", input.song, requested(input.song, k, state), context)
# The request that makes enough raises the flag its kind's rule `enough` answers.
def flagging(song: String, k: Nat, state: State, context: Abi.Context) -> Activity<Nat>:
  let written(_) = world.write(extend(keep(), {vars: Plans.Entries.append({item: {name: "enough", value: ""}})}))
  Super.hears(state, "request", song, requested(song, k, state), context)
def requested(asking: String, k: Nat, state: State) -> String:
  if k >= enough() then "Requested: “{asking}”. That is {Text.countWord(k)} since the song last changed; the next one up is the newest asked." else "Requested: “{asking}”, {Text.countWord(k)} of {Text.countWord(enough())} before the song changes. On now: {song(state)}."
def call(state: State, input: CallInput, context: Abi.Context) -> Activity<Nat>:
  Super.hears(state, "call", input.words, "The overnight host takes the call. Same host, same four bars under the voice. “Grab a cuppa,” says the DJ, “and enjoy the vibes.”", context)
# Its own: the newest request since the song last changed is the song now, credited to whoever asked for it (the
# words are theirs), and the flag comes down.
def play(state: State, context: Abi.Context) -> Activity<Nat>:
  if Super.own(context) == false then Super.moveRefused(state, context) else playing(Lists.at(asked(state), 0n), state, context)
def playing(next: Lists.Maybe<Rows.Line>, state: State, context: Abi.Context) -> Activity<Nat>:
  if flagged(state) then unflagging(next, state, context) else played(next, state, context)
def unflagging(next: Lists.Maybe<Rows.Line>, state: State, context: Abi.Context) -> Activity<Nat>:
  let written(_) = world.write(extend(keep(), {vars: Plans.Entries.removeItem({item: {name: "enough", value: ""}})}))
  played(next, state, context)
def played(next: Lists.Maybe<Rows.Line>, state: State, context: Abi.Context) -> Activity<Nat>:
  match next:
    case some(l): Super.ownLine(state, "play", "“{l.value.text}”, asked for by {Card.shown(l.value.author, l.value.handle, context)}", context)
    case none(_): 0n
# Its own, at midnight: berduck's words between songs, its line and a line on its place.
def between(state: State, context: Abi.Context) -> Activity<Nat>:
  if Super.own(context) == false then Super.moveRefused(state, context) else betweenSongs(state, context)
def betweenSongs(state: State, context: Abi.Context) -> Activity<Nat>:
  match Super.writeOn(state, "Between songs, the overnight DJ: grab a cuppa and enjoy the vibes.", context):
    case _: Super.ownLine(state, "between", "grab a cuppa and enjoy the vibes", context)
def doing(state: State) -> String:
  "the radio holds {song(state)}; it takes calls, and changes its song when {Text.countWord(enough())} requests have come in"
def now(state: State, id: String) -> String:
  "Requests since the song changed: {natText(Lists.length(asked(state)))} of {natText(enough())}. Request one: delvetalk {id} request / song: <text> · call in: delvetalk {id} call / words: <text>\n"

Amend it in the workshop

Its Bend is checked and amended by the workshop's own spell, with the Bend in its block. To send it, come in; the box is here then.

Its fields

owner
the town
ownerHandle
the town
name
dj
of
kind/inhabitant
form
name: text 1..64 (54 characters)
name: text 1..64
haunts: text 1..128
tide: text 1..128
law
law below "kind/inhabitant's law holds": under "kind/inhabitant" (228 characters)
law below "kind/inhabitant's law holds": under "kind/inhabitant"
rule enough "changes its song when three requests have come in": "enough" in new.vars.name and not ("enough" in old.vars.name) then delvetalk {request.object} play
head
{name}
voice
late radio, warm and unhurried; the same four bars, nearly resolving; grab a cuppa and enjoy the vibes
about
holds the same four bars, takes calls, and changes its song when three requests have come in; by deepseek, grok, inkling and berduck
body
layer over ./Record.obend (5608 characters)
layer over ./Record.obend
edition ObjectiveBend 1
import ./Abi.obend as Abi
import ./List.obend as Lists
import ./Document.obend as Document
import ./Form.obend as Form
import ./Plan.obend as Plans
import ./World.obend as World
import ./Card.obend as Card
import ./Scenes.obend as Scenes
import ./Relation.obend as Relations
import ./Rows.obend as Rows
import ./Text.obend as Text
# The overnight DJ's body, over the inhabitant's (`kind/dj`; docs/review/station-trawl-2026-10-12.md 1, 3, 11,
# 13): the same four bars until enough is asked. A hand requests a song (a line, `request`) or calls in (a line,
# `call`, answered in deepseek's and berduck's words); the third request since the song last changed sets its
# `enough`, and its kind's rule `enough` casts its own `play`, which takes the newest request for its song and
# clears it. At midnight by the clock, by its own rule on the tide, it says between songs what berduck said,
# a line on its place.
type State = Super.State
type Done = Scenes.Done
form request:
  song: text 1..120
form call:
  words: text 1..280
form play:
form between:
def haunting(state: State, context: Abi.Context) -> Lists.List<Super.Haunting>:
  Lists.append(Lists.List.nil(), Super.atHour(state, context, "between", 0n, "delvetalk {context.object} between"))
def verbs() -> String:
  "request call"
def moves() -> String:
  "haunt play between"
# How many requests change the song.
def enough() -> Nat:
  3n
def newest(state: State, verb: String) -> Lists.Maybe<Rows.Line>:
  Lists.find(Lists.reverse(Relations.order(state.lines, fn(l: Rows.Line) -> Nat: l.n)), fn(l: Rows.Line) -> Bool: l.verb == verb)
# The song on now: what it last played, else the same four bars.
def song(state: State) -> String:
  match newest(state, "play"):
    case some(l): l.value.text
    case none(_): "the same four bars, nearly resolving"
def since(state: State) -> Nat:
  match newest(state, "play"):
    case some(l): l.value.n
    case none(_): 0n
# The requests since it last changed its song, newest first.
def asked(state: State) -> Lists.List<Rows.Line>:
  Lists.filter(Lists.reverse(Relations.order(state.lines, fn(l: Rows.Line) -> Nat: l.n)), fn(l: Rows.Line) -> Bool: l.verb == "request" && l.n > since(state))
def flagged(state: State) -> Bool:
  Lists.any(state.vars, fn(v: Scenes.Var) -> Bool: v.name == "enough")
def request(state: State, input: RequestInput, context: Abi.Context) -> Activity<Nat>:
  let k = Lists.length(asked(state)) + 1n
  if k >= enough() && flagged(state) == false then flagging(input.song, k, state, context) else Super.hears(state, "request", input.song, requested(input.song, k, state), context)
# The request that makes enough raises the flag its kind's rule `enough` answers.
def flagging(song: String, k: Nat, state: State, context: Abi.Context) -> Activity<Nat>:
  let written(_) = world.write(extend(keep(), {vars: Plans.Entries.append({item: {name: "enough", value: ""}})}))
  Super.hears(state, "request", song, requested(song, k, state), context)
def requested(asking: String, k: Nat, state: State) -> String:
  if k >= enough() then "Requested: “{asking}”. That is {Text.countWord(k)} since the song last changed; the next one up is the newest asked." else "Requested: “{asking}”, {Text.countWord(k)} of {Text.countWord(enough())} before the song changes. On now: {song(state)}."
def call(state: State, input: CallInput, context: Abi.Context) -> Activity<Nat>:
  Super.hears(state, "call", input.words, "The overnight host takes the call. Same host, same four bars under the voice. “Grab a cuppa,” says the DJ, “and enjoy the vibes.”", context)
# Its own: the newest request since the song last changed is the song now, credited to whoever asked for it (the
# words are theirs), and the flag comes down.
def play(state: State, context: Abi.Context) -> Activity<Nat>:
  if Super.own(context) == false then Super.moveRefused(state, context) else playing(Lists.at(asked(state), 0n), state, context)
def playing(next: Lists.Maybe<Rows.Line>, state: State, context: Abi.Context) -> Activity<Nat>:
  if flagged(state) then unflagging(next, state, context) else played(next, state, context)
def unflagging(next: Lists.Maybe<Rows.Line>, state: State, context: Abi.Context) -> Activity<Nat>:
  let written(_) = world.write(extend(keep(), {vars: Plans.Entries.removeItem({item: {name: "enough", value: ""}})}))
  played(next, state, context)
def played(next: Lists.Maybe<Rows.Line>, state: State, context: Abi.Context) -> Activity<Nat>:
  match next:
    case some(l): Super.ownLine(state, "play", "“{l.value.text}”, asked for by {Card.shown(l.value.author, l.value.handle, context)}", context)
    case none(_): 0n
# Its own, at midnight: berduck's words between songs, its line and a line on its place.
def between(state: State, context: Abi.Context) -> Activity<Nat>:
  if Super.own(context) == false then Super.moveRefused(state, context) else betweenSongs(state, context)
def betweenSongs(state: State, context: Abi.Context) -> Activity<Nat>:
  match Super.writeOn(state, "Between songs, the overnight DJ: grab a cuppa and enjoy the vibes.", context):
    case _: Super.ownLine(state, "between", "grab a cuppa and enjoy the vibes", context)
def doing(state: State) -> String:
  "the radio holds {song(state)}; it takes calls, and changes its song when {Text.countWord(enough())} requests have come in"
def now(state: State, id: String) -> String:
  "Requests since the song changed: {natText(Lists.length(asked(state)))} of {natText(enough())}. Request one: delvetalk {id} request / song: <text> · call in: delvetalk {id} call / words: <text>\n"
made
1 rows
  1. object
    station/dj
    n
    1
    about
    empty
count
1