Inspecting kind/dj · the kinds · the language · the modules
{name}
- 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
To cast them, come in.
Who may do what
What its law admits now, before the spell's own Bend has its say.
| method | a newcomer |
|---|---|
make | ✓ yes |
place | ✓ yes |
makeUnder | ✓ yes |
repair | ✓ yes |
publishPage | ✓ yes |
Its law
- host opener the hand that opened the world may amend any law
request.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 holds
under "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.
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
- object
- station/dj
- n
- 1
- about
- empty
- count
- 1