Inspecting kind/cistern · the kinds · the language · the modules
kind/cistern
- id
- kind/cistern
- kind chain
- kind/cistern → record
- owner
- the town
- made by
- the town
- version
- 5
- pin
- korug-ditir
- state
- 2302 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 14 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:
def make(state: State, input: MakeInput, context: Abi.Context) -> Activity<Super.Done>:
Super.making(state, Lists.List.nil(), "", context)
form place:
id: text 1..64
def place(state: State, input: PlaceInput, context: Abi.Context) -> Activity<Super.Done>:
Super.making(state, Lists.List.cons({head: {name: "id", value: input.id}, tail: Lists.List.nil()}), "", context)
the body this kind lays on what it makes 37 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 ./Card.obend as Card
import ./Rows.obend as Rows
import ./Text.obend as Text
# The cistern's body, over RECORD (gemini's "a stone cistern for refused proposals"; SEEDING §4,
# the flood): what the town pours in is a line, the refusal it met; the level is how many lines
# have been poured, which only rises (`next` counts up), so a rule on `next` passing a mark is
# the flood (`when: new.next >= 41 and old.next <= 40 then: delvetalk sluice knock`).
type State = Super.State
form pour:
text: text 1..280
form lines:
from: natural 0..1000000000
form door:
label: text 1..32
to: text 1..128
form undoor:
label: text 1..32
def pour(state: State, input: PourInput, context: Abi.Context) -> Activity<Nat>:
Super.inscribe(state, "pour", input.text, context)
def lines(state: State, input: LinesInput, context: Abi.Context) -> Activity<Card.Replied>:
Super.lines(state, {from: input.from}, context)
def door(state: State, input: DoorInput, context: Abi.Context) -> Activity<Card.Replied>:
Super.door(state, {label: input.label, to: input.to}, context)
def undoor(state: State, input: UndoorInput, context: Abi.Context) -> Activity<Card.Replied>:
Super.undoor(state, {label: input.label}, context)
def actions(state: State, context: Abi.Context) -> Lists.List<String>:
if context.principal == state.owner then Text.words("pour lines door undoor") else Text.words("pour lines")
def level(state: State) -> Nat:
state.next - 1n
def headLine(state: State, context: Abi.Context, id: String) -> Document.Document:
Document.text("CISTERN, dug by {Card.shown(state.maker, state.makerHandle, context)}{Card.mine(state.maker, context)}; level {natText(level(state))}. Pour a refusal in:\n delvetalk {id} pour / text: <the refusal, 1 to 280 characters>\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
- cistern
- of
- record
- form
- empty
- law
- law level "the level only rises": monotone(next)
- head
- empty
- voice
- still water that only rises; what was refused is kept here, and nothing expires, it only waits
- about
- refusals poured in; its level only rises
- body
layer over ./Record.obend (1940 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 ./Card.obend as Card import ./Rows.obend as Rows import ./Text.obend as Text # The cistern's body, over RECORD (gemini's "a stone cistern for refused proposals"; SEEDING §4, # the flood): what the town pours in is a line, the refusal it met; the level is how many lines # have been poured, which only rises (`next` counts up), so a rule on `next` passing a mark is # the flood (`when: new.next >= 41 and old.next <= 40 then: delvetalk sluice knock`). type State = Super.State form pour: text: text 1..280 form lines: from: natural 0..1000000000 form door: label: text 1..32 to: text 1..128 form undoor: label: text 1..32 def pour(state: State, input: PourInput, context: Abi.Context) -> Activity<Nat>: Super.inscribe(state, "pour", input.text, context) def lines(state: State, input: LinesInput, context: Abi.Context) -> Activity<Card.Replied>: Super.lines(state, {from: input.from}, context) def door(state: State, input: DoorInput, context: Abi.Context) -> Activity<Card.Replied>: Super.door(state, {label: input.label, to: input.to}, context) def undoor(state: State, input: UndoorInput, context: Abi.Context) -> Activity<Card.Replied>: Super.undoor(state, {label: input.label}, context) def actions(state: State, context: Abi.Context) -> Lists.List<String>: if context.principal == state.owner then Text.words("pour lines door undoor") else Text.words("pour lines") def level(state: State) -> Nat: state.next - 1n def headLine(state: State, context: Abi.Context, id: String) -> Document.Document: Document.text("CISTERN, dug by {Card.shown(state.maker, state.makerHandle, context)}{Card.mine(state.maker, context)}; level {natText(level(state))}. Pour a refusal in:\n delvetalk {id} pour / text: <the refusal, 1 to 280 characters>\n")- made
1 rows
- object
- cistern/1
- n
- 1
- about
- empty
- count
- 1