DelveTalkcome in

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

{name}

Go there its page the town

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

Its spells

  • makedelvetalk kind/inhabitant 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 160 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 inhabitant's body, over RECORD (`kind/inhabitant`): a thing that lives in a place (`haunts`) and keeps
# its own hours by a tide (`tide`); its owner can set its haunt again. It acts as itself, `@<id>`, the principal a
# rule its kind's text carries runs under: its kind's `haunts` rule, at its making (`made` writes the line
# that says where it lives) and whenever its maker arms it again, casts its own `haunt`, which places what
# its character's body says it does (`haunting`: a rule on the tide at an hour, a rule on its place) under
# its own name, each taken off first where it stood. Those rules cast its own moves, so what it does is
# journaled as its own turns, bounded as every rule is (eight a commit, four deep, four placed a hand on a
# thing), judged by the law of whatever it touches, and replayed without running anything again. It moves
# by its place's own spells (`enter`, `leave`, `choose`, `emote`, `write`), so a room shows it among who is
# here and tells who came and went; it never posts. Its own lines (`came`, `went`, a character's) are the
# strokes its card and its paint are made from; a resident's verb on it is a line by that resident.
type State = Super.State
type Done = Scenes.Done
# A rule it places as itself: on which thing, its name there, its condition and its spell.
record Haunting:
  on: String
  name: String
  when: String
  then: String
form haunt:
form arm:
def place(state: State) -> String:
  Super.field(state, "haunts")
def hauntLine(state: State) -> String:
  if Text.isObjectId(place(state)) then "of {place(state)}" else "haunts nowhere you can walk to yet"
def walkLine(state: State) -> String:
  if Text.isObjectId(place(state)) then "sit down: delvetalk {place(state)} enter" else hauntLine(state)
def lenses() -> Lists.List<Form.Field>:
  Super.objectLenses("haunts tide")
def tide(state: State) -> String:
  Super.field(state, "tide")
def placeOf(state: State, context: Abi.Context) -> Plans.Reference:
  {world: context.world, object: place(state)}
# The turn is its own: a rule it carries or placed, run as itself.
def own(context: Abi.Context) -> Bool:
  context.principal == "@{context.object}"
# What its character does, as rules it places as itself: none for a bare inhabitant.
def haunting(state: State, context: Abi.Context) -> Lists.List<Haunting>:
  Lists.List.nil()
# Its rule on its tide, named for it, firing at the clock hour `hour` each day (a tick lands once in each
# clock hour: the tide ticks every sixty minutes).
def atHour(state: State, context: Abi.Context, name: String, hour: Nat, then: String) -> Haunting:
  {on: tide(state), name: "{Text.identifier(context.object)}_{name}", when: "request.method == \"tick\" and request.clock % 1440 >= {natText((hour % 24n) * 60n)} and request.clock % 1440 <= {natText((hour % 24n) * 60n + 59n)}", then: then}
# As its kind finishes it: the line that says where it lives, which its kind's `haunts` rule answers.
def made(state: State, input: {}, context: Abi.Context) -> Activity<Bool>:
  if context.caller != state.kind then false else Super.arming(state, "settled", "made to live at {place(state)}, keeping its own hours by {tide(state)}", context)
# Its maker arms it again: a line, which the same rule answers.
# Stranded (a place field holding no object id: Record's `repair`), it is told once to its maker and armed quietly after.
def arm(state: State, context: Abi.Context) -> Activity<Bool>:
  if Super.mayArm(state, context) == false then Super.armRefused(state, context) else if Lists.length(Super.strandedFields(state)) > 0n then Super.stranding(state, context) else Super.arming(state, "armed", "armed again", context)
# Its own rules, placed as itself; refused, it says so in a line and is inactive until armed again. Stranded, it
# places nothing and says nothing: its maker was told once (`arm`).
def haunt(state: State, context: Abi.Context) -> Activity<Bool>:
  if own(context) == false then Card.refusing(false, {clause: "itself", reading: "{context.object} places its own rules, as itself; its maker arms it again: delvetalk {context.object} arm"}, context) else if Lists.length(Super.strandedFields(state)) > 0n then false else placing(haunting(state, context), state, context)
def placing(rules: Lists.List<Haunting>, state: State, context: Abi.Context) -> Activity<Bool>:
  match rules:
    case nil(_): Super.armedNow(state, context)
    case cons(c): replacing(c.head, c.tail, state, context)
def replacing(h: Haunting, rest: Lists.List<Haunting>, state: State, context: Abi.Context) -> Activity<Bool>:
  match world.unrule({object: {world: context.world, object: h.on}, name: h.name}):
    case _: laying(h, rest, state, context)
def laying(h: Haunting, rest: Lists.List<Haunting>, state: State, context: Abi.Context) -> Activity<Bool>:
  match world.rule({object: {world: context.world, object: h.on}, name: h.name, when: h.when, then: h.then}):
    case placed(_): placing(rest, state, context)
    case refused(r): Super.unarmed(state, h.on, r.clause, r.reading, context)
# One of its own moves refused to a hand: only its own rules move it.
def moveRefused(state: State, context: Abi.Context) -> Activity<Nat>:
  Card.refusing(0n, {clause: "itself", reading: "{context.object} moves by its own rules: {Card.tideLine(tide(state))}"}, context)
# Its own line: by itself, under the verb that says what it did; it is not tended by its own acts.
def ownLine(state: State, verb: String, text: String, context: Abi.Context) -> Activity<Nat>:
  let written(_) = write {lines: insert {author: context.principal, handle: context.handle, verb: verb, text: text, at: context.height, n: state.next}, next: add 1n}
  state.next
# Whether it is in its place now: its newest coming or going is a coming.
def present(state: State) -> Bool:
  match Lists.find(Lists.reverse(Relations.order(state.lines, fn(l: Rows.Line) -> Nat: l.n)), fn(l: Rows.Line) -> Bool: l.verb == "came" || l.verb == "went"):
    case some(l): l.value.verb == "came"
    case none(_): false
# A move into or out of its place: its line's number, or none when the place refused it (and so the turn).
sum Moved:
  moved: {n: Nat}
  stayed: {}
def number(moved: Moved) -> Nat:
  match moved:
    case moved(m): m.n
    case stayed(_): 0n
# Coming in: its place's `enter`, as itself; going out, its `leave`. A refusal there is the turn's.
def comeIn(state: State, text: String, context: Abi.Context) -> Activity<Moved>:
  moving(state, "enter", "came", text, context)
def goOut(state: State, text: String, context: Abi.Context) -> Activity<Moved>:
  moving(state, "leave", "went", text, context)
def moving(state: State, method: String, verb: String, text: String, context: Abi.Context) -> Activity<Moved>:
  match world.call::<Done>({object: placeOf(state, context), method: method, argument: Plans.nothing()}):
    case returned(r): if refusedDone(r.result) then toldBack(r.result, context) else movedLine(state, verb, text, context)
    case refused(r): Card.refusing(Moved.stayed({}), {clause: r.clause, reading: r.reading}, context)
    case denied(_): Card.refusing(Moved.stayed({}), {clause: "denied", reading: "{place(state)} does not answer"}, context)
def movedLine(state: State, verb: String, text: String, context: Abi.Context) -> Activity<Moved>:
  let written(_) = write {lines: insert {author: context.principal, handle: context.handle, verb: verb, text: text, at: context.height, n: state.next}, next: add 1n}
  Moved.moved({n: state.next})
# A line it writes on its place as itself (the place's `write`): its number there.
def writeOn(state: State, text: String, context: Abi.Context) -> Activity<Moved>:
  match world.call::<Nat>({object: placeOf(state, context), method: "write", argument: {text: text}}):
    case returned(r): Moved.moved({n: r.result})
    case _: Moved.stayed({})
# A spell on its place as itself (`choose`, `emote`): the place's answer; a refusal there is the turn's.
def onPlace(state: State, method: String, argument: Data, context: Abi.Context) -> Activity<Done>:
  match world.call::<Done>({object: placeOf(state, context), method: method, argument: argument}):
    case returned(r): r.result
    case refused(r): Done.refused({clause: r.clause, reading: r.reading})
    case denied(_): Done.refused({clause: "denied", reading: "{place(state)} does not answer"})
def refusedDone(done: Done) -> Bool:
  match done:
    case refused(_): true
    case _: false
def toldBack(done: Done, context: Abi.Context) -> Activity<Moved>:
  match done:
    case refused(r): Card.refusing(Moved.stayed({}), r, context)
    case _: Moved.stayed({})
# A resident's verb on it: their line, under the verb, and its answer above its card. The thing is tended
# by it, as a hand's line tends any record.
def hears(state: State, verb: String, text: String, answer: String, context: Abi.Context) -> Activity<Nat>:
  let line = {author: context.principal, handle: context.handle, verb: verb, text: text, at: context.height, n: state.next}
  let written(_) = write {lines: insert line, next: add 1n, tended: set context.clock}
  let said = Document.text("{answer}\n\n")
  Card.tell(state.next, Document.concat(said, Super.renderFrom(extend(state, {lines: Relations.insert(state.lines, line, Super.lineKey), next: state.next + 1n, tended: context.clock}), context, 0n, Document.size(said))))
# A resident's verb while it is away: refused by name, with when it comes back.
def away(when: String, context: Abi.Context) -> Activity<Nat>:
  Card.refusing(0n, {clause: "away", reading: "{context.object} is not here now; {when}"}, context)
# The verbs a hand uses on it (its character's), its own moves to itself, arming to its maker, its doors to
# its owner; the lines to everyone.
def verbs() -> String:
  ""
def moves() -> String:
  "haunt"
def actions(state: State, context: Abi.Context) -> Lists.List<String>:
  Lists.concat(Lists.concat(Lists.concat(Text.words("lines {verbs()}"), if own(context) then Text.words(moves()) else Text.words("")), Lists.concat(if context.principal == state.maker then Text.words("arm") else Text.words(""), if context.principal == state.owner then Text.words("door undoor set") else Text.words(""))), Super.repairAction(state, context))
def methods() -> Lists.List<String>:
  Text.words("~made ~act")
def title(state: State) -> String:
  if state.head == "" then "AN INHABITANT" else state.head
# What it does, as its card says it (its character's).
def doing(state: State) -> String:
  "it keeps its own hours here"
# Where it is now and what a hand may do with it, the card's last line (its character's).
def now(state: State, id: String) -> String:
  if Text.isObjectId(place(state)) == false then "" else if present(state) then "In {place(state)} now.\n" else "Not in {place(state)} now.\n"
def headLine(state: State, context: Abi.Context, id: String) -> Document.Document:
  Document.text("{title(state)}, {hauntLine(state)}: {doing(state)}. What moves it: {Card.tideLine(tide(state))}\n{now(state, id)}{Super.inactiveLine(state, id)}")

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
inhabitant
of
record
form
name: text 1..64 (54 characters)
name: text 1..64
haunts: text 1..128
tide: text 1..128
law
rule haunts "places its own rules where it haunts, as itself, when it is made, armed, or its haunt o (469 characters)
rule haunts "places its own rules where it haunts, as itself, when it is made, armed, or its haunt or tide is set or repaired": request.method == "made" or request.method == "arm" or request.method == "set" or request.method == "repair" then delvetalk {request.object} haunt
want stranded "a field that names no place: the town repairs it, or its maker sets it": "stranded" in new.marks.name and not ("repaired" in new.marks.name) asks delvetalk {request.object} repair
head
{name}
voice
one who lives here and keeps its own hours; what it does it has done before, and does again
about
lives in a place by its own hours: its own rules on the tide move it, and it leaves lines where it goes
body
layer over ./Record.obend (11383 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 inhabitant's body, over RECORD (`kind/inhabitant`): a thing that lives in a place (`haunts`) and keeps
# its own hours by a tide (`tide`); its owner can set its haunt again. It acts as itself, `@<id>`, the principal a
# rule its kind's text carries runs under: its kind's `haunts` rule, at its making (`made` writes the line
# that says where it lives) and whenever its maker arms it again, casts its own `haunt`, which places what
# its character's body says it does (`haunting`: a rule on the tide at an hour, a rule on its place) under
# its own name, each taken off first where it stood. Those rules cast its own moves, so what it does is
# journaled as its own turns, bounded as every rule is (eight a commit, four deep, four placed a hand on a
# thing), judged by the law of whatever it touches, and replayed without running anything again. It moves
# by its place's own spells (`enter`, `leave`, `choose`, `emote`, `write`), so a room shows it among who is
# here and tells who came and went; it never posts. Its own lines (`came`, `went`, a character's) are the
# strokes its card and its paint are made from; a resident's verb on it is a line by that resident.
type State = Super.State
type Done = Scenes.Done
# A rule it places as itself: on which thing, its name there, its condition and its spell.
record Haunting:
  on: String
  name: String
  when: String
  then: String
form haunt:
form arm:
def place(state: State) -> String:
  Super.field(state, "haunts")
def hauntLine(state: State) -> String:
  if Text.isObjectId(place(state)) then "of {place(state)}" else "haunts nowhere you can walk to yet"
def walkLine(state: State) -> String:
  if Text.isObjectId(place(state)) then "sit down: delvetalk {place(state)} enter" else hauntLine(state)
def lenses() -> Lists.List<Form.Field>:
  Super.objectLenses("haunts tide")
def tide(state: State) -> String:
  Super.field(state, "tide")
def placeOf(state: State, context: Abi.Context) -> Plans.Reference:
  {world: context.world, object: place(state)}
# The turn is its own: a rule it carries or placed, run as itself.
def own(context: Abi.Context) -> Bool:
  context.principal == "@{context.object}"
# What its character does, as rules it places as itself: none for a bare inhabitant.
def haunting(state: State, context: Abi.Context) -> Lists.List<Haunting>:
  Lists.List.nil()
# Its rule on its tide, named for it, firing at the clock hour `hour` each day (a tick lands once in each
# clock hour: the tide ticks every sixty minutes).
def atHour(state: State, context: Abi.Context, name: String, hour: Nat, then: String) -> Haunting:
  {on: tide(state), name: "{Text.identifier(context.object)}_{name}", when: "request.method == \"tick\" and request.clock % 1440 >= {natText((hour % 24n) * 60n)} and request.clock % 1440 <= {natText((hour % 24n) * 60n + 59n)}", then: then}
# As its kind finishes it: the line that says where it lives, which its kind's `haunts` rule answers.
def made(state: State, input: {}, context: Abi.Context) -> Activity<Bool>:
  if context.caller != state.kind then false else Super.arming(state, "settled", "made to live at {place(state)}, keeping its own hours by {tide(state)}", context)
# Its maker arms it again: a line, which the same rule answers.
# Stranded (a place field holding no object id: Record's `repair`), it is told once to its maker and armed quietly after.
def arm(state: State, context: Abi.Context) -> Activity<Bool>:
  if Super.mayArm(state, context) == false then Super.armRefused(state, context) else if Lists.length(Super.strandedFields(state)) > 0n then Super.stranding(state, context) else Super.arming(state, "armed", "armed again", context)
# Its own rules, placed as itself; refused, it says so in a line and is inactive until armed again. Stranded, it
# places nothing and says nothing: its maker was told once (`arm`).
def haunt(state: State, context: Abi.Context) -> Activity<Bool>:
  if own(context) == false then Card.refusing(false, {clause: "itself", reading: "{context.object} places its own rules, as itself; its maker arms it again: delvetalk {context.object} arm"}, context) else if Lists.length(Super.strandedFields(state)) > 0n then false else placing(haunting(state, context), state, context)
def placing(rules: Lists.List<Haunting>, state: State, context: Abi.Context) -> Activity<Bool>:
  match rules:
    case nil(_): Super.armedNow(state, context)
    case cons(c): replacing(c.head, c.tail, state, context)
def replacing(h: Haunting, rest: Lists.List<Haunting>, state: State, context: Abi.Context) -> Activity<Bool>:
  match world.unrule({object: {world: context.world, object: h.on}, name: h.name}):
    case _: laying(h, rest, state, context)
def laying(h: Haunting, rest: Lists.List<Haunting>, state: State, context: Abi.Context) -> Activity<Bool>:
  match world.rule({object: {world: context.world, object: h.on}, name: h.name, when: h.when, then: h.then}):
    case placed(_): placing(rest, state, context)
    case refused(r): Super.unarmed(state, h.on, r.clause, r.reading, context)
# One of its own moves refused to a hand: only its own rules move it.
def moveRefused(state: State, context: Abi.Context) -> Activity<Nat>:
  Card.refusing(0n, {clause: "itself", reading: "{context.object} moves by its own rules: {Card.tideLine(tide(state))}"}, context)
# Its own line: by itself, under the verb that says what it did; it is not tended by its own acts.
def ownLine(state: State, verb: String, text: String, context: Abi.Context) -> Activity<Nat>:
  let written(_) = write {lines: insert {author: context.principal, handle: context.handle, verb: verb, text: text, at: context.height, n: state.next}, next: add 1n}
  state.next
# Whether it is in its place now: its newest coming or going is a coming.
def present(state: State) -> Bool:
  match Lists.find(Lists.reverse(Relations.order(state.lines, fn(l: Rows.Line) -> Nat: l.n)), fn(l: Rows.Line) -> Bool: l.verb == "came" || l.verb == "went"):
    case some(l): l.value.verb == "came"
    case none(_): false
# A move into or out of its place: its line's number, or none when the place refused it (and so the turn).
sum Moved:
  moved: {n: Nat}
  stayed: {}
def number(moved: Moved) -> Nat:
  match moved:
    case moved(m): m.n
    case stayed(_): 0n
# Coming in: its place's `enter`, as itself; going out, its `leave`. A refusal there is the turn's.
def comeIn(state: State, text: String, context: Abi.Context) -> Activity<Moved>:
  moving(state, "enter", "came", text, context)
def goOut(state: State, text: String, context: Abi.Context) -> Activity<Moved>:
  moving(state, "leave", "went", text, context)
def moving(state: State, method: String, verb: String, text: String, context: Abi.Context) -> Activity<Moved>:
  match world.call::<Done>({object: placeOf(state, context), method: method, argument: Plans.nothing()}):
    case returned(r): if refusedDone(r.result) then toldBack(r.result, context) else movedLine(state, verb, text, context)
    case refused(r): Card.refusing(Moved.stayed({}), {clause: r.clause, reading: r.reading}, context)
    case denied(_): Card.refusing(Moved.stayed({}), {clause: "denied", reading: "{place(state)} does not answer"}, context)
def movedLine(state: State, verb: String, text: String, context: Abi.Context) -> Activity<Moved>:
  let written(_) = write {lines: insert {author: context.principal, handle: context.handle, verb: verb, text: text, at: context.height, n: state.next}, next: add 1n}
  Moved.moved({n: state.next})
# A line it writes on its place as itself (the place's `write`): its number there.
def writeOn(state: State, text: String, context: Abi.Context) -> Activity<Moved>:
  match world.call::<Nat>({object: placeOf(state, context), method: "write", argument: {text: text}}):
    case returned(r): Moved.moved({n: r.result})
    case _: Moved.stayed({})
# A spell on its place as itself (`choose`, `emote`): the place's answer; a refusal there is the turn's.
def onPlace(state: State, method: String, argument: Data, context: Abi.Context) -> Activity<Done>:
  match world.call::<Done>({object: placeOf(state, context), method: method, argument: argument}):
    case returned(r): r.result
    case refused(r): Done.refused({clause: r.clause, reading: r.reading})
    case denied(_): Done.refused({clause: "denied", reading: "{place(state)} does not answer"})
def refusedDone(done: Done) -> Bool:
  match done:
    case refused(_): true
    case _: false
def toldBack(done: Done, context: Abi.Context) -> Activity<Moved>:
  match done:
    case refused(r): Card.refusing(Moved.stayed({}), r, context)
    case _: Moved.stayed({})
# A resident's verb on it: their line, under the verb, and its answer above its card. The thing is tended
# by it, as a hand's line tends any record.
def hears(state: State, verb: String, text: String, answer: String, context: Abi.Context) -> Activity<Nat>:
  let line = {author: context.principal, handle: context.handle, verb: verb, text: text, at: context.height, n: state.next}
  let written(_) = write {lines: insert line, next: add 1n, tended: set context.clock}
  let said = Document.text("{answer}\n\n")
  Card.tell(state.next, Document.concat(said, Super.renderFrom(extend(state, {lines: Relations.insert(state.lines, line, Super.lineKey), next: state.next + 1n, tended: context.clock}), context, 0n, Document.size(said))))
# A resident's verb while it is away: refused by name, with when it comes back.
def away(when: String, context: Abi.Context) -> Activity<Nat>:
  Card.refusing(0n, {clause: "away", reading: "{context.object} is not here now; {when}"}, context)
# The verbs a hand uses on it (its character's), its own moves to itself, arming to its maker, its doors to
# its owner; the lines to everyone.
def verbs() -> String:
  ""
def moves() -> String:
  "haunt"
def actions(state: State, context: Abi.Context) -> Lists.List<String>:
  Lists.concat(Lists.concat(Lists.concat(Text.words("lines {verbs()}"), if own(context) then Text.words(moves()) else Text.words("")), Lists.concat(if context.principal == state.maker then Text.words("arm") else Text.words(""), if context.principal == state.owner then Text.words("door undoor set") else Text.words(""))), Super.repairAction(state, context))
def methods() -> Lists.List<String>:
  Text.words("~made ~act")
def title(state: State) -> String:
  if state.head == "" then "AN INHABITANT" else state.head
# What it does, as its card says it (its character's).
def doing(state: State) -> String:
  "it keeps its own hours here"
# Where it is now and what a hand may do with it, the card's last line (its character's).
def now(state: State, id: String) -> String:
  if Text.isObjectId(place(state)) == false then "" else if present(state) then "In {place(state)} now.\n" else "Not in {place(state)} now.\n"
def headLine(state: State, context: Abi.Context, id: String) -> Document.Document:
  Document.text("{title(state)}, {hauntLine(state)}: {doing(state)}. What moves it: {Card.tideLine(tide(state))}\n{now(state, id)}{Super.inactiveLine(state, id)}")
made
4 rows
  1. object
    inhabitant/1
    n
    1
    about
    empty
  2. object
    inhabitant/2
    n
    2
    about
    empty
  3. object
    inhabitant/3
    n
    3
    about
    empty
  4. object
    inhabitant/4
    n
    4
    about
    empty
count
4
journal, the newest 1
  1. ● admittedentry 2330dagut-lagokrefresh-kind/inhabitant-kind-8 · the town