build: a desk card is its list; runs: Tomter Vel's lending board answered from the board

The lift matched cards on a desk by action, which every card there
shares, so a card that left the desk left its words on the next one.
A card with a strong identity - a bucket, a group it invites into, a
page of its own - is matched on that alone, and a desk card's identity
is the bucket its feature lists.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GT37Z1Xtfd9pUuQtMTg6Yt
This commit is contained in:
Bendik Aagaard Lynghaug
2026-09-30 07:02:40 +02:00
co-authored by Claude Fable 5.1
parent 4e1bc2027d
commit 42b6ce7c70
51 changed files with 3613 additions and 1 deletions
@@ -0,0 +1,38 @@
# Tomter Vel's lending board: answered from the board itself (not deployed)
Rebuilt from `plans/tomtervel.yaml` with the words in use on
vel.klingenbergbygg.no, after the plan got its first need `about`
another: `melde-seg` answers one record of `dele-utstyr`.
- A notice stands on the board from the moment it is sent
(`public_states: [open]`, no approval stage); styret is mailed.
- Every row on the board, on the front door and on the full list,
links to the notice's own page `/status/oppslag/[key]`, where a
neighbour leaves an email (filled and hidden when signed in) and a
line if they like. The answer is mailed straight to whoever posted
the notice, with the neighbour's address and the take-down link.
The queue is the poster's inbox; the site keeps no state about who
they picked.
- A notice comes down when the poster says so, when the redaktør
(`redaktor`, the group of the people named responsible) presses "Ta
ned oppslaget" at its own desk, or after 30 days.
- The redaktør desk also lists the answers, marked read by hand.
Words: the model's pass (Sonnet, `--llm-for questions/status/oppslag/`)
read the answer page as the posting page and rewrote the board's tuned
headings, so the new pages' words are written by hand in
`words-board.json` instead, and `words_prompt` now says what that page
is. Also hand-written there: the two mails (a new notice to styret; an
answer to the poster), the front door's inline-list descriptions and
the invite-list lines, which the lift does not carry.
Found on the way: the lift matched desk cards by `action`, which every
card on a desk shares, so when the notices left styret's desk their
words landed on the next card. A desk card is now identified by the
bucket its list shows.
Lints green with iris built against portal's `answer-a-record` branch
(portal PR 4): 12 needs structurally met. On tomtervel/questions branch
`invitasjoner-og-forslag`, which needs portal v0.5.5 on the vel first.
Live records in `oppslag` at `lagt_ut` have no state after this; the
stage is gone.
@@ -0,0 +1,219 @@
aggregates:
- bucket: anleggsfeil
initial: open
states:
open:
event: received
tatt_tak_i:
event: tatt_tak_i
utbedret:
event: utbedret
transitions:
open:
- tatt_tak_i
tatt_tak_i:
- utbedret
- bucket: frivillige
initial: open
states:
open:
event: received
kontaktet:
event: kontaktet
satt_opp:
event: satt_opp
takket_nei:
event: takket_nei
transitions:
kontaktet:
- satt_opp
- takket_nei
open:
- kontaktet
- takket_nei
- bucket: hjelpebehov
initial: open
states:
open:
event: received
mail:
to: submitter
subject: Vi leter etter en nabo til deg
body: Vi har mottatt det du trenger hjelp til, og ser etter en nabo som kan stille opp. Du hører fra oss så snart vi har funnet noen.
formidlet:
event: formidlet
mail:
to: submitter
subject: En nabo er koblet på
body: |-
Vi har funnet en nabo som kan hjelpe. De tar kontakt med deg direkte.
Det du kan gjøre nå: {site}/decide/trenger-hjelp?chain={chain}&email={email}
ordnet:
event: ordnet
mail:
to: submitter
subject: Bra det løste seg
body: Godt å høre at det ordnet seg. Takk for at du sa fra, og lykke til videre.
ikke_lost:
event: ikke_lost
transitions:
formidlet:
- ordnet
- ikke_lost
open:
- formidlet
- ikke_lost
- bucket: hjelpere
initial: open
states:
open:
event: received
registrert:
event: registrert
trukket:
event: trukket
transitions:
open:
- registrert
- trukket
- bucket: husstander
initial: open
states:
open:
event: received
mail:
to: submitter
subject: Nesten i mål som medlem
body: |-
Takk for at du vil bli medlem. Du får en betalingsoppfordring med kontonummer og beløp så snart kasserer har sett på saken.
Det du kan gjøre nå: {site}/decide/bli-medlem?chain={chain}&email={email}
betalt:
event: betalt
mail:
to: submitter
subject: Medlemskapet er i orden
body: Kontingenten er registrert betalt. Du er nå medlem av Tomter Vel - velkommen med!
utmeldt:
event: utmeldt
transitions:
open:
- betalt
- utmeldt
- bucket: innspill
initial: open
states:
open:
event: received
tatt_med:
event: tatt_med
ikke_tatt_med:
event: ikke_tatt_med
transitions:
open:
- tatt_med
- ikke_tatt_med
- bucket: komitesoknader
initial: open
states:
open:
event: received
plassert:
event: plassert
avslatt:
event: avslatt
transitions:
open:
- plassert
- avslatt
- bucket: medlemsendringer
initial: open
states:
open:
event: received
oppdatert:
event: oppdatert
transitions:
open:
- oppdatert
- bucket: oppslag
initial: open
states:
open:
event: received
mail:
to: post@tomtervel.no
subject: 'Nytt oppslag på tavla: {hva}'
body: |-
Et nytt oppslag står på tavla fra nå av.
{har_eller_trenger}: {hva}
Det står der til den som la det ut tar det ned, til redaktøren gjør det, eller i en måned. Hører det ikke hjemme, tas det ned her: {site}/redaktor
after:
days: 30
to: tatt_ned
tatt_ned:
event: tatt_ned
transitions:
open:
- tatt_ned
- bucket: svar
initial: open
states:
open:
event: received
mail:
to: '{oppslag.email}'
subject: En nabo har svart på oppslaget ditt
body: |-
Hei,
En nabo har svart på oppslaget ditt «{oppslag.hva}». Ta kontakt direkte: {email}
{hilsen}
Flere kan svare så lenge oppslaget står; du velger selv hvem du avtaler med. Når det er ordnet, tar du det ned her:
{site}/decide/dele-utstyr?chain={oppslag.id}&email={oppslag.email}
lest:
event: lest
transitions:
open:
- lest
- bucket: trafikkmeldinger
initial: open
states:
open:
event: received
tatt_opp:
event: tatt_opp
ordnet:
event: ordnet
avvist:
event: avvist
transitions:
open:
- tatt_opp
- avvist
tatt_opp:
- ordnet
- avvist
- bucket: utlegg
initial: open
states:
open:
event: received
godkjent:
event: godkjent
utbetalt:
event: utbetalt
avvist:
event: avvist
transitions:
godkjent:
- utbetalt
- avvist
open:
- godkjent
- avvist
@@ -0,0 +1,328 @@
needs:
- id: bli-medlem
who: en husstand i Tomter
wants: å bli medlem og få betalt kontingenten
enters: /
via: Bli medlem eller endre opplysningene dine
lands_in: husstander
handled_by: kasserer
stages:
- open
- betalt
- utmeldt
done_when:
- betalt
- utmeldt
success:
- betalt
max_steps: 2
max_fields: 3
stage_words:
open: mottatt
betalt: betalt
utmeldt: meldt ut
- id: endre-medlemskap
who: et medlem som har flyttet, byttet e-post eller vil melde seg ut
wants: at velet har riktige opplysninger om dem
enters: /
via: Bli medlem eller endre opplysningene dine
lands_in: medlemsendringer
handled_by: kasserer
stages:
- open
- oppdatert
done_when:
- oppdatert
success:
- oppdatert
max_steps: 2
max_fields: 3
stage_words:
open: mottatt
oppdatert: oppdatert
- id: trafikkfare
who: en som har sett et farlig sted i trafikken
wants: at velet tar det opp med kommunen eller den som eier veien
enters: /
via: Meld fra om noe som bør fikses
lands_in: trafikkmeldinger
handled_by: trafikk
stages:
- open
- tatt_opp
- ordnet
- avvist
done_when:
- ordnet
- avvist
success:
- ordnet
max_steps: 2
max_fields: 2
stage_words:
open: mottatt
tatt_opp: tatt opp med kommunen
ordnet: ordnet
avvist: avvist
- id: anleggsfeil
who: en som ser at noe på lekeplassen eller stien er ødelagt
wants: at det blir fikset før noen skader seg
enters: /
via: Meld fra om noe som bør fikses
lands_in: anleggsfeil
handled_by: lekeplasser
stages:
- open
- tatt_tak_i
- utbedret
done_when:
- utbedret
success:
- utbedret
max_steps: 2
max_fields: 2
stage_words:
open: mottatt
tatt_tak_i: tatt tak i
utbedret: utbedret
- id: horingsinnspill
who: en beboer som har en mening om en sak kommunen har på høring
wants: at velet tar det med i sitt svar
enters: /
via: Få din mening med i høringssvaret
lands_in: innspill
handled_by: horingsinstans
stages:
- open
- tatt_med
- ikke_tatt_med
done_when:
- tatt_med
- ikke_tatt_med
success:
- tatt_med
max_steps: 1
max_fields: 3
stage_words:
open: mottatt
tatt_med: tatt med i høringssvaret
ikke_tatt_med: ikke tatt med
- id: hjelpe-til
who: en som vil hjelpe til på et arrangement eller en dugnad
wants: å bli satt opp på noe som passer dem
enters: /
via: Bli med og gjør en innsats
lands_in: frivillige
handled_by: arrangementer
stages:
- open
- kontaktet
- satt_opp
- takket_nei
done_when:
- satt_opp
- takket_nei
success:
- satt_opp
max_steps: 2
max_fields: 3
stage_words:
open: mottatt
kontaktet: kontaktet
satt_opp: satt opp
takket_nei: takket nei
- id: komite
who: en som vil sitte i en komité
wants: en plass i den komiteen som driver med det de bryr seg om
enters: /
via: Bli med og gjør en innsats
lands_in: komitesoknader
handled_by: styret
stages:
- open
- plassert
- avslatt
done_when:
- plassert
- avslatt
success:
- plassert
max_steps: 2
max_fields: 3
stage_words:
open: mottatt
plassert: plassert i en komité
avslatt: avslått
- id: trenger-hjelp
who: en beboer som ikke får til noe selv for tiden, som snømåking, handling eller en skyss
wants: at en nabo stiller opp
enters: /
via: Få hjelp av naboer, eller gi en hånd selv
lands_in: hjelpebehov
handled_by: nabohjelp
stages:
- open
- formidlet
- ordnet
- ikke_lost
done_when:
- ordnet
- ikke_lost
success:
- ordnet
max_steps: 2
max_fields: 4
stage_words:
open: mottatt
formidlet: formidlet til en nabo
ordnet: ordnet
ikke_lost: ikke løst
- id: kan-hjelpe
who: en nabo som kan stille opp når noen trenger det
wants: å bli spurt når det passer
enters: /
via: Få hjelp av naboer, eller gi en hånd selv
lands_in: hjelpere
handled_by: nabohjelp
stages:
- open
- registrert
- trukket
done_when:
- registrert
- trukket
success:
- registrert
max_steps: 2
max_fields: 4
stage_words:
open: mottatt
registrert: registrert som hjelper
trukket: trukket
- id: dele-utstyr
who: en nabo som har noe å låne ut, eller trenger å låne noe
wants: et oppslag naboene ser med en gang
enters: /
via: Få hjelp av naboer, eller gi en hånd selv
lands_in: oppslag
handled_by: redaktor
stages:
- open
- tatt_ned
done_when:
- tatt_ned
success:
- tatt_ned
max_steps: 2
max_fields: 4
stage_words:
open: ute
tatt_ned: tatt ned
- id: melde-seg
who: en nabo som kan låne ut, eller vil låne, det et oppslag gjelder
wants: at den som la ut oppslaget får vite det
enters: /status/oppslag/[key]
via: Si fra til den som la ut oppslaget
lands_in: svar
handled_by: redaktor
stages:
- open
- lest
done_when:
- lest
success:
- lest
max_steps: 1
max_fields: 2
stage_words:
open: sendt
lest: lest
- id: utlegg
who: en i en komité som har lagt ut for noe
wants: pengene tilbake
enters: /komiteer/utlegg
via: Få pengene tilbake
lands_in: utlegg
handled_by: kasserer
stages:
- open
- godkjent
- utbetalt
- avvist
done_when:
- utbetalt
- avvist
success:
- utbetalt
max_steps: 1
max_fields: 3
stage_words:
open: mottatt
godkjent: godkjent
utbetalt: utbetalt
avvist: avvist
enters_as: komiteer
personas:
- id: nyinnflyttet
need: bli-medlem
text: Vi flyttet til Tomter i mars og har hørt at det finnes et vel. Hvordan blir vi med, og hva koster det?
- id: glemte-a-betale
need: bli-medlem
text: Jeg har vært medlem før men fikk ikke betalt i fjor. Kan jeg bare vippse, og til hvem?
- id: ny-epost
need: endre-medlemskap
text: Vi har byttet e-postadresse og får ikke lenger noe fra dere.
- id: flytter
need: endre-medlemskap
text: Vi selger huset og flytter til Ski i august, så vi må ut av medlemslista.
- id: skolevei
need: trafikkfare
text: Bilene kjører altfor fort i svingen ved skolen om morgenen, og det er ikke fortau der ungene går.
- id: busslomme
need: trafikkfare
text: Det er umulig å se om det kommer noen når man skal ut fra busslomma ved butikken, hekken har blitt kjempehøy.
- id: huske
need: anleggsfeil
text: Huska på lekeplassen henger i én kjetting. Sønnen min dro i den i går og den holdt så vidt.
- id: bru
need: anleggsfeil
text: Planken på den lille brua på stien langs elva er råtten, jeg gikk nesten gjennom.
- id: blokker
need: horingsinnspill
text: Kommunen skal bygge blokker på jordet bak stasjonen, og jeg synes det er alt for høyt. Kan velet si ifra?
- id: togtider
need: horingsinnspill
text: Ruter vil kutte det tidlige toget. Jeg pendler til Oslo hver dag og vil at velet skriver til dem om det.
- id: vafler
need: hjelpe-til
text: Jeg kan steke vafler på 17. mai-frokosten hvis dere trenger folk.
- id: motorsag
need: hjelpe-til
text: Har motorsag og ledig helg, kan ta trær langs elvestien hvis det er en dugnad.
- id: pendler
need: komite
text: Jeg pendler og er lei av at ingen snakker med Ruter. Jeg vil gjerne være med i gjengen som jobber med det.
- id: planlegger
need: komite
text: Jeg er arealplanlegger av yrke og kunne bidratt når kommunen sender saker på høring.
- id: tilhenger
need: dele-utstyr
text: Jeg har en tilhenger som står ubrukt mesteparten av året, naboer kan gjerne låne den for en hundrelapp.
- id: stige
need: dele-utstyr
text: Trenger en lang stige en dag i helga for å rense takrenna, er det noen i nærheten som har?
- id: snomaking
need: trenger-hjelp
text: Jeg er 84 og klarer ikke å måke innkjørselen lenger. Er det noen som kan hjelpe meg når det snør?
- id: nyoperert
need: trenger-hjelp
text: Jeg er nyoperert i hofta og kommer meg ikke til butikken på noen uker. Kunne noen handlet for meg?
- id: hjemmekontor
need: kan-hjelpe
text: Jeg jobber hjemmefra og kan godt måke eller handle for noen som ikke får det til selv.
- id: pensjonert-elektriker
need: kan-hjelpe
text: Pensjonert elektriker, har bil og god tid. Si fra om noen trenger skyss eller en hånd med småting.
- id: kvittering
need: utlegg
text: Jeg kjøpte pølser og kakao til skøytedagen for 1 840 kroner, her er kvitteringa, vil ha det igjen.
@@ -0,0 +1 @@
qualifies: arrangementer
@@ -0,0 +1,71 @@
name: Hvem har meldt seg, og hvor langt har jeg kommet med å sette dem opp?
description: Oversikt over folk som vil hjelpe til, slik at du kan følge opp og sette dem opp på noe som passer.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Frivillige til arrangementer og dugnad
description: Her ser du hvem som har meldt seg til dugnad, 17. mai eller andre arrangementer, og hvor langt du har kommet med hver av dem.
action: /arrangementer
consequence:
- Lagre
features:
- name: Frivillige
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
bucket: frivillige
requires_group: arrangementer
transitions:
- from: kontaktet
to: satt_opp
label: Sett opp
- from: kontaktet
to: takket_nei
label: Takket nei
- from: open
to: kontaktet
label: Merk som kontaktet
- from: open
to: takket_nei
label: Takket nei
- name: Inviter noen inn i Arrangementer
description: De får en konto, plass i Arrangementer, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /arrangementer
consequence:
- Inviter
invite:
group: arrangementer
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Sendte invitasjoner
description: Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.
action: /arrangementer
consequence:
- Lagre
features:
- name: Hvem som er invitert
description: Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt.
resource:
source:
kind: kv
bucket: portal_invites
requires_group: arrangementer
transitions:
- from: open
to: done
label: Er inne
- from: expired
to: open
label: Send på nytt
- from: expired
to: done
label: Er inne
@@ -0,0 +1,82 @@
name: Vil du hjelpe til i nabolaget?
description: Vil du stille opp for nabolaget? Her melder du deg til dugnad og arrangementer, eller til en av komiteene.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Bli med på dugnad eller arrangement
description: 17. mai, dugnad eller andre arrangementer trenger folk som stiller opp. Si fra hva du kan bidra med, så setter vi deg opp på noe som passer.
action: /received/hjelpe-til
consequence:
- Meld meg på
record_as: frivillige
features:
- name: Hva skjer videre
description: Arrangementskomiteen tar kontakt og finner ut hva som passer for deg. Sier du ja, blir du satt opp på en oppgave – sier du nei takk, er det helt greit.
icon: lucide:clipboard-list
- name: Hvem leser dette
description: Arrangementskomiteen leser det du sender, og du kan nå dem på post@tomtervel.no i mellomtiden.
icon: lucide:users
- name: Meld deg som hjelper
requirements:
- name: navn
label: Navn
type: text
placeholder: Kari Nordmann
- name: telefon
label: Telefon
type: tel
placeholder: 912 34 567
- name: hva
label: Hva kan du hjelpe til med?
type: select
options:
- 17. mai
- Juletregranstenning
- Skøytedag
- Dugnad på elvestien
- Det som trengs
multiple: true
description: Fortell kort hva du kan hjelpe til med.
icon: lucide:hand-helping
encouragements:
- Det holder med noen ord om hva du kan tenke deg – vi tar kontakt når det nærmer seg.
- name: Sitt i en komité som betyr noe for deg
description: Velet drives av sju komiteer på fritida, og alle trenger flere hender. Si hvilken komité du har lyst til å være med i.
action: /received/komite
consequence:
- Meld interesse
record_as: komitesoknader
features:
- name: Hva skjer videre
description: Styret ser på ønsket ditt og finner en plass i komiteen du har meldt deg til, eller sier fra hvis det ikke er rom akkurat nå.
icon: lucide:clipboard-list
- name: Hvem leser dette
description: Styret leser det du sender, og du kan nå dem på post@tomtervel.no i mellomtiden.
icon: lucide:handshake
- name: Meld deg til en komité
requirements:
- name: navn
label: Navn
type: text
placeholder: Kari Nordmann
- name: epost
label: E-post
type: email
placeholder: kari@eksempel.no
- name: komite
label: Hvilken komité?
type: select
options:
- Arrangementer
- Elvesti
- Høringsinstans
- Leke- og møteplasser
- Miljøgate
- Pendlerforhold
- Trafikkforhold
multiple: true
description: Skriv hvilken komité du er interessert i.
icon: lucide:users
encouragements:
- Det tar bare et minutt, og noen fra styret svarer deg.
@@ -0,0 +1,11 @@
name: What would you like to do?
description: ''
alternatives:
- name: Utmeldt
description: ''
self_transition:
bucket: husstander
to: utmeldt
from:
- open
label: Utmeldt
@@ -0,0 +1,11 @@
name: Skal oppslaget om utstyret fortsatt stå ute?
description: Her sier du fra at utstyret er hentet eller ikke lenger tilgjengelig for utlån.
alternatives:
- name: Meld at utstyret er tatt ned
description: Oppslaget fjernes fra siden, så ingen flere spør om å låne det.
self_transition:
bucket: oppslag
to: tatt_ned
from:
- open
label: Ta ned oppslaget
@@ -0,0 +1,11 @@
name: Vil du fortsatt kunne bli spurt om å hjelpe en nabo?
description: Her ser du naboer som har bedt om en hånd, og kan velge om du fortsatt kan bidra eller trekke deg for nå.
alternatives:
- name: Ta en pause fra nabohjelpen
description: Du blir tatt av lista over naboer som kan spørres, men kan melde deg på igjen når det passer bedre.
self_transition:
bucket: hjelpere
to: trukket
from:
- open
label: Trekk meg
@@ -0,0 +1,11 @@
name: Har naboen fått hjelpen de trengte?
description: Her ser du henvendelsen fra naboen som trengte en hånd, og kan si fra når det er ordnet.
alternatives:
- name: Meld fra at hjelpen er gitt
description: Da vet vi at naboen har fått hjelpen sin, og saken lukkes.
self_transition:
bucket: hjelpebehov
to: ordnet
from:
- formidlet
label: Merk som ordnet
@@ -0,0 +1 @@
qualifies: horingsinstans
@@ -0,0 +1,65 @@
name: Hva sier vi i høringssvaret?
description: Her samler du innspillene og ser hva som er tatt med i velets høringssvar.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Innspill til høringssvar
description: Her ligger innspill fra beboere til saker kommunen har på høring.
action: /horingsinstans
consequence:
- Send svar
features:
- name: Innspill
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
bucket: innspill
requires_group: horingsinstans
transitions:
- from: open
to: tatt_med
label: Tatt med i svaret
- from: open
to: ikke_tatt_med
label: Ikke tatt med
- name: Inviter noen inn i Høringsinstans
description: De får en konto, plass i Høringsinstans, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /horingsinstans
consequence:
- Inviter
invite:
group: horingsinstans
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Sendte invitasjoner
description: Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.
action: /horingsinstans
consequence:
- Send svar
features:
- name: Hvem som er invitert
description: Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt.
resource:
source:
kind: kv
bucket: portal_invites
requires_group: horingsinstans
transitions:
- from: open
to: done
label: Er inne
- from: expired
to: open
label: Send på nytt
- from: expired
to: done
label: Er inne
@@ -0,0 +1,122 @@
name: Hva gjør Tomter Vel, og hva kan du få her?
description: Velforeningen for Tomter, stiftet i 1947, drevet på fritida av naboene dine. Alt du kan be om her havner hos en komité eller styret, og du ser selv hvor saken står.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Velforeningen for Tomter siden 1947
description: Vi er sju komiteer som jobber på fritida for bygda vår. 157 husstander er med.
features:
- name: 157 husstander er medlemmer
description: Kontingenten går til arrangementer, lekeplasser, elvestien og arbeidet for tryggere trafikk.
icon: lucide:users
- name: Naboer som stiller opp for hverandre
description: Trenger du hjelp med snømåking, handling eller skyss, finner vi en nabo som kan. Du kan også låne og låne ut utstyr.
icon: lucide:heart-handshake
- name: Siste fra bygda
description: Nye meldinger og oppslag, slik de står akkurat nå.
features:
- name: Feil på lekeplasser og sti
description: Det som er meldt inn, og hvor langt vi har kommet med å fikse det. [Alle feilmeldinger](/status/anleggsfeil)
icon: lucide:construction
resource:
source:
kind: kv
bucket: anleggsfeil
public: true
states: []
empty: Ingenting er meldt ødelagt akkurat nå. Ser du noe, si fra.
jq: 'sort_by(.submitted_ms) | reverse | .[:3] | .[] | .responses |= {hva: .hva, hvor: .hvor}'
- name: Oppslagstavla for naboer
description: Utstyr som er til låns, og det naboene leter etter. Svar rett fra oppslaget. [Hele oppslagstavla](/status/oppslag)
icon: lucide:list
resource:
source:
kind: kv
bucket: oppslag
public: true
states:
- open
empty: Tavla er tom nå. Legg gjerne ut det første oppslaget.
jq: 'sort_by(.submitted_ms) | reverse | .[:3] | .[] | .responses |= {har_eller_trenger: .har_eller_trenger, hva: .hva}'
link:
to: /status/oppslag/{id}
label: Jeg kan låne ut eller låne denne
- name: Farlige steder i trafikken
description: Det naboer har meldt fra om, og hva velet har gjort med det. [Alle trafikkmeldinger](/status/trafikkmeldinger)
icon: lucide:car
resource:
source:
kind: kv
bucket: trafikkmeldinger
public: true
states: []
empty: Ingen farlige steder er meldt inn nå. Har du sett et, fortell oss.
jq: 'sort_by(.submitted_ms) | reverse | .[:3] | .[] | .responses |= {hva: .hva, hvor: .hvor}'
- name: Bli medlem eller endre opplysningene dine
description: Meld deg inn, betal kontingenten, eller gi beskjed om flytting, ny e-post eller utmelding.
action: /medlem
consequence:
- Til medlemskap
features:
- name: Deg som bor i Tomter
description: Å bli medlem og få betalt kontingenten, at velet har riktige opplysninger om dem.
icon: lucide:house
- name: Meld fra om noe som bør fikses
description: Sett du noe farlig i trafikken, eller noe ødelagt på lekeplassen eller elvestien? Gi oss beskjed.
action: /melde-fra
consequence:
- Meld fra
features:
- name: Deg som har sett noe som bør fikses
description: At velet tar det opp med kommunen eller den som eier veien, at det blir fikset før noen skader seg.
icon: lucide:alert-triangle
- name: Bli med og gjør en innsats
description: Vi trenger folk på 17. mai, dugnader og i komiteene. Det trengs ikke mer enn litt tid du har å avse.
action: /bidra
consequence:
- Bli med
features:
- name: Deg som vil gjøre en innsats
description: Å bli satt opp på noe som passer dem, en plass i den komiteen som driver med det de bryr seg om.
icon: lucide:hand-helping
- name: Få hjelp av naboer, eller gi en hånd selv
description: Trenger du en hånd med snømåking, handling eller skyss? Eller kan du stille opp for en nabo? Her møtes dere.
action: /naboer
consequence:
- Til nabohjelp
features:
- name: Deg som trenger hjelp eller kan gi en hånd
description: At en nabo stiller opp, å bli spurt når det passer, et oppslag som naboene ser.
icon: lucide:heart-handshake
- name: Få din mening med i høringssvaret
description: Har kommunen en sak på høring du mener noe om? Send oss innspillet ditt, så tar vi det med i velets svar.
action: /received/horingsinnspill
consequence:
- Send innspill
record_as: innspill
features:
- name: Hva skjer videre
description: Innspillet ditt kommer inn hos høringsutvalget. De vurderer om det tas med i velets svar til kommunen, eller om det ikke passer inn denne gangen.
icon: lucide:route
- name: Hvem leser dette
description: Høringsutvalget i Tomter Vel leser innspillet ditt; i mellomtiden kan du nå styret på post@tomtervel.no.
icon: lucide:users
- name: Send et høringsinnspill
requirements:
- name: navn
label: Navn
type: text
placeholder: Kari Nordmann
- name: sak
label: Hvilken sak gjelder det?
type: text
placeholder: Reguleringsplan for Tomterveien
- name: innspill
label: Hva mener du?
type: textarea
placeholder: Jeg mener det bør settes opp fartsdumper langs den nye traseen, for barna krysser der til skolen.
description: Fortell hvilken sak det gjelder og hva du mener.
icon: lucide:megaphone
encouragements:
- Innspillet ditt blir lest av høringsutvalget vårt og veier inn i svaret vi sender kommunen.
@@ -0,0 +1 @@
qualifies: kasserer
@@ -0,0 +1,108 @@
name: Hva venter på meg som kasserer akkurat nå?
description: Her har du oversikt over medlemmer, endringer og utlegg som venter på deg som kasserer.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Nye medlemmer som venter på registrering
description: Husstander som har meldt seg inn og venter på å bli registrert som betalende medlem.
action: /kasserer
consequence:
- Lagre
features:
- name: Husstander
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
bucket: husstander
requires_group: kasserer
transitions:
- from: open
to: betalt
label: Registrer betaling
- from: open
to: utmeldt
label: Meld ut
- name: Endringer som venter på å bli registrert
description: Medlemmer som har flyttet, byttet e-post eller vil melde seg ut, og venter på at opplysningene blir oppdatert.
action: /kasserer
consequence:
- Lagre
features:
- name: Medlemsendringer
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
bucket: medlemsendringer
requires_group: kasserer
transitions:
- from: open
to: oppdatert
label: Registrer endring
- name: Utlegg som venter på deg
description: Utlegg fra komitémedlemmer som venter på godkjenning eller utbetaling.
action: /kasserer
consequence:
- Lagre
features:
- name: Utlegg
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
bucket: utlegg
requires_group: kasserer
transitions:
- from: godkjent
to: utbetalt
label: Merk som utbetalt
- from: godkjent
to: avvist
label: Avvis likevel
- from: open
to: godkjent
label: Godkjenn utlegg
- from: open
to: avvist
label: Avvis utlegg
- name: Inviter noen inn i kassereren
description: De får en konto, plass i kassereren, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /kasserer
consequence:
- Inviter
invite:
group: kasserer
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Sendte invitasjoner
description: Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.
action: /kasserer
consequence:
- Lagre
features:
- name: Hvem som er invitert
description: Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt.
resource:
source:
kind: kv
bucket: portal_invites
requires_group: kasserer
transitions:
- from: open
to: done
label: Er inne
- from: expired
to: open
label: Send på nytt
- from: expired
to: done
label: Er inne
@@ -0,0 +1 @@
qualifies: komiteer
@@ -0,0 +1,50 @@
name: Hva står ubehandlet i komiteen din nå?
description: Her holder du oversikt over sakene komiteen din har ansvar for, og flytter dem videre etter hvert som de blir fulgt opp.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Få tilbake det du har lagt ut
description: Har du lagt ut for noe til komiteen? Send det inn så kasserer kan betale deg tilbake.
action: /komiteer/utlegg
consequence:
- Send utlegg
- name: Inviter noen inn i komiteene
description: De får en konto, plass i komiteene, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /komiteer
consequence:
- Inviter
invite:
group: komiteer
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Sendte invitasjoner
description: Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.
action: /komiteer
consequence:
- Confirm
features:
- name: Hvem som er invitert
description: Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt.
resource:
source:
kind: kv
bucket: portal_invites
requires_group: komiteer
transitions:
- from: open
to: done
label: Er inne
- from: expired
to: open
label: Send på nytt
- from: expired
to: done
label: Er inne
@@ -0,0 +1,5 @@
name: Hva skjer med utlegget mitt nå?
description: Utlegget er sendt til kasserer. Du får beskjed når det er sjekket.
alternatives:
- name: Pengene kommer på konto
description: Kasserer ser gjennom kvitteringen og overfører pengene til kontoen du oppga.
@@ -0,0 +1,38 @@
followup: false
name: Har du lagt ut penger for komiteen og vil ha dem tilbake?
description: Har du betalt for noe på vegne av en komité? Send inn utlegget, så får du pengene tilbake.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Få pengene tilbake
description: Har du lagt ut for noe til komiteen? Send det inn, så ordner kasserer resten.
action: /komiteer/utlegg-sent
consequence:
- Send inn
record_as: utlegg
features:
- name: Fra krav til utbetaling
description: Kasserer ser gjennom kravet og godkjenner det, og deretter blir pengene utbetalt til deg. Blir det avvist, hører du hvorfor.
icon: lucide:wallet
- name: Kasserer ser dette
description: Kasserer i styret leser kravet ditt, og kan nås på post@tomtervel.no om det haster.
icon: lucide:coins
- name: Krav om refusjon
requirements:
- name: navn
label: Navn
type: text
placeholder: Kari Nordmann
- name: belop
label: Beløp
type: text
placeholder: 450 kr
- name: hva
label: Hva gjaldt det
type: textarea
placeholder: Kaffe og kjeks til dugnaden
description: Ha kvittering eller bilag klart før du fyller ut.
icon: lucide:receipt
encouragements:
- Legg ved bilag om du har det, så går det raskere.
@@ -0,0 +1 @@
qualifies: lekeplasser
@@ -0,0 +1,65 @@
name: Hva må fikses på lekeplassene og stien nå?
description: Her følger komiteen for lekeplassene opp det som er meldt inn av skader, til det er fikset.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Det som er meldt inn av skader
description: Meldinger om noe som er ødelagt på lekeplassen eller langs stien, og som bør fikses.
action: /lekeplasser
consequence:
- Lagre
features:
- name: Anleggsfeil
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
bucket: anleggsfeil
requires_group: lekeplasser
transitions:
- from: open
to: tatt_tak_i
label: Ta tak i saken
- from: tatt_tak_i
to: utbedret
label: Merk som utbedret
- name: Inviter noen inn i Leke- og møteplasser
description: De får en konto, plass i Leke- og møteplasser, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /lekeplasser
consequence:
- Inviter
invite:
group: lekeplasser
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Sendte invitasjoner
description: Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.
action: /lekeplasser
consequence:
- Lagre
features:
- name: Hvem som er invitert
description: Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt.
resource:
source:
kind: kv
bucket: portal_invites
requires_group: lekeplasser
transitions:
- from: open
to: done
label: Er inne
- from: expired
to: open
label: Send på nytt
- from: expired
to: done
label: Er inne
@@ -0,0 +1,72 @@
name: Vil du bli medlem, eller endre medlemskapet ditt?
description: Bli medlem av Tomter Vel, eller oppdater opplysningene dine hvis du allerede er medlem.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Bli medlem av Tomter Vel
description: Meld deg inn i velet, så holder vi deg oppdatert og du støtter arbeidet i nærmiljøet.
action: /received/bli-medlem
consequence:
- Bli medlem
record_as: husstander
features:
- name: Etter innmelding
description: Meldingen går til kasserer, som registrerer deg og sender deg kontingenten på e-post. Når den er betalt er du medlem.
icon: lucide:coins
- name: Hvem svarer deg
description: Kasserer i styret leser dette, og du kan nå oss på post@tomtervel.no i mellomtiden.
icon: lucide:user
- name: Meld deg inn
requirements:
- name: navn
label: Navn
type: text
placeholder: Ola Nordmann
- name: adresse
label: Adresse
type: text
placeholder: Tomterveien 12
- name: email
label: Email
type: email
- name: telefon
label: Telefon
type: tel
optional: true
placeholder: 123 45 678
description: Ha adressen i Tomter og en e-post du bruker klar.
icon: lucide:user-plus
encouragements:
- Kasserer sender deg kontingenten på e-post rett etterpå.
- name: Oppdater eller avslutt medlemskapet
description: Har du flyttet, byttet e-post eller vil melde deg ut? Gi oss beskjed så vi har riktige opplysninger.
action: /received/endre-medlemskap
consequence:
- Send endring
record_as: medlemsendringer
features:
- name: Etter du sender inn
description: Kasserer får beskjeden og oppdaterer medlemslisten, eller melder deg ut om det er det du ber om.
icon: lucide:refresh-cw
- name: Hvem svarer deg
description: Kasserer i styret leser dette, og du kan nå oss på post@tomtervel.no i mellomtiden.
icon: lucide:user
- name: Endre medlemskap
requirements:
- name: navn
label: Navn
type: text
placeholder: Ola Nordmann
- name: adresse
label: Adresse
type: text
placeholder: Ny adresse i Tomter
- name: hva_er_nytt
label: Hva vil du endre?
type: textarea
placeholder: Ny e-post, ny adresse, eller ønske om utmelding
description: Skriv navnet ditt og hva som er nytt.
icon: lucide:pencil
encouragements:
- Det tar bare et par minutter, og kasserer ordner resten.
@@ -0,0 +1,69 @@
name: Hva vil du melde fra om?
description: Har du sett noe farlig i trafikken, eller noe ødelagt på lekeplassen eller stien? Her sier du fra til velet.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Meld fra om en trafikkfare
description: Sett du noe farlig i trafikken? Fortell trafikkomiteen om det, så tar de det videre.
action: /received/trafikkfare
consequence:
- Send inn
record_as: trafikkmeldinger
features:
- name: Hva skjer videre
description: Trafikkomiteen tar meldingen din opp med kommunen eller den som eier veien. Du får vite om saken blir ordnet eller avvist.
icon: lucide:route
- name: Hvem leser dette
description: Trafikkomiteen leser meldingen din; haster det, kan du nå styret på post@tomtervel.no.
icon: lucide:car
- name: Meld trafikkfare
requirements:
- name: hvor
label: Hvor var det
type: text
placeholder: Krysset Tomterveien / Elvestien
- name: hva
label: Hva så du
type: textarea
placeholder: Dårlig sikt i krysset, biler kjører fort
- name: epost
label: E-post (valgfritt)
type: email
optional: true
placeholder: ola.nordmann@epost.no
description: Fortell hva du så, hvor det var, og legg gjerne igjen e-posten din hvis vi trenger å spørre mer.
icon: lucide:alert-triangle
encouragements:
- Bare noen linjer om hva og hvor er nok til at vi kan følge opp.
- name: Meld fra om noe ødelagt
description: Se noe ødelagt på en lekeplass eller langs elvestien, så tar lekeplasskomiteen tak i det.
action: /received/anleggsfeil
consequence:
- Send inn
record_as: anleggsfeil
features:
- name: Hva skjer videre
description: Meldingen går til lekeplasskomiteen, som ser på den og tar tak i saken. Når feilen er utbedret, er saken avsluttet.
icon: lucide:wrench
- name: Hvem leser dette
description: Lekeplasskomiteen leser meldingen din; til det haster kan du nå styret på post@tomtervel.no.
icon: lucide:hammer
- name: Meld anleggsfeil
requirements:
- name: hvor
label: Hvor er det
type: select
options:
- Lekeplassen
- Elvestien
- Skøytebanen
- Et annet sted
- name: hva
label: Hva er ødelagt
type: textarea
placeholder: Løs planke på gjerdet ved husken
description: Fortell hva som er ødelagt og omtrent hvor det er.
icon: lucide:construction
encouragements:
- Det holder med noen ord om hva du så og hvor.
@@ -0,0 +1,125 @@
name: Trenger du en hånd, eller kan du gi en?
description: Godt naboskap gjør hverdagen lettere. Trenger du en hånd, kan gi en, eller har noe å låne bort?
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Få en nabo til å stille opp
description: Får du ikke til snømåking, en handletur eller skyss for tiden? Si fra, så finner vi en nabo som kan stille opp.
action: /received/trenger-hjelp
consequence:
- Be om hjelp
record_as: hjelpebehov
features:
- name: Fra melding til hjelp
description: Nabohjelpen finner en nabo som kan stille opp. Er det ordnet, eller om det ikke lot seg løse, får du beskjed.
icon: lucide:hand-helping
- name: Hvem ser dette
description: Nabohjelpen tar imot og finner noen til deg, eller ring post@tomtervel.no i mellomtiden.
icon: lucide:users
- name: Be om en hånd
requirements:
- name: navn
label: Navn
type: text
placeholder: Kari Nordmann
- name: email
label: E-post
type: email
placeholder: kari@eksempel.no
- name: adresse
label: Adresse
type: text
placeholder: Tomterveien 12
- name: hva
label: Hva trenger du hjelp til
type: textarea
placeholder: Måke snø på trappa, handle inn litt mat
- name: telefon
label: Telefon
type: tel
optional: true
placeholder: 123 45 678
description: Skriv kort hva du trenger hjelp til.
icon: lucide:heart-handshake
encouragements:
- Vi finner en nabo som kan stille opp så fort som mulig.
- name: Bli spurt når en nabo trenger en hånd
description: Kan du stille opp med snømåking, en handletur eller skyss når en nabo trenger det? Meld deg, så blir du spurt når det passer.
action: /received/kan-hjelpe
consequence:
- Meld deg
record_as: hjelpere
features:
- name: Fra påmelding til spørsmål
description: Du blir registrert som hjelper. Trekker du deg tilbake senere, er det bare å si fra.
icon: lucide:user-check
- name: Hvem ser dette
description: Nabohjelpen har oversikten og ringer deg direkte når det er noe, eller nås på post@tomtervel.no.
icon: lucide:heart-handshake
- name: Meld deg som hjelper
requirements:
- name: navn
label: Navn
type: text
placeholder: Kari Nordmann
- name: email
label: E-post
type: email
placeholder: kari@eksempel.no
- name: telefon
label: Telefon
type: tel
placeholder: 123 45 678
- name: kan
label: Hva kan du hjelpe med
type: select
options:
- Snømåking
- Handling
- Kjøring
- Småfiks i huset
- En prat og litt selskap
- Det som trengs
multiple: true
description: Fortell kort hva du kan bidra med.
icon: lucide:hand-helping
encouragements:
- Du blir bare kontaktet når noe passer for deg.
- name: Lån ut eller lån av naboen
description: Har du noe naboene kan få låne, eller trenger du å låne noe selv? Legg ut et oppslag så ser de andre på Tomter det.
action: /received/dele-utstyr
consequence:
- Legg ut oppslag
record_as: oppslag
features:
- name: Fra oppslag til avtale
description: Oppslaget står på tavla til du tar det ned selv, redaktøren gjør det, eller en måned har gått.
icon: lucide:clipboard-list
- name: Hvem ser dette
description: Alle som åpner tavla, uten navn og e-post. Naboer som kan låne ut, eller vil låne, svarer deg rett på e-post.
icon: lucide:users
- name: Lån eller utlån
requirements:
- name: navn
label: Navn
type: text
placeholder: Ola Nordmann
- name: email
label: E-post
type: email
placeholder: ola@eksempel.no
- name: har_eller_trenger
label: Har du eller trenger du
type: select
options:
- Jeg har noe å låne ut
- Jeg trenger å låne noe
- name: hva
label: Hva gjelder det
type: textarea
placeholder: Hengerfeste til bil, tilhenger, stige
description: Skriv kort hva det gjelder, så folk skjønner det med en gang.
icon: lucide:package
encouragements:
- Det står på tavla med en gang.
@@ -0,0 +1 @@
qualifies: nabohjelp
@@ -0,0 +1,91 @@
name: Hvem trenger hjelp, og hvem kan stille opp?
description: Her kobler du naboer som trenger hjelp med dem som kan stille opp.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Naboer som trenger en hånd
description: Naboer som trenger en hånd med snømåking, handling eller skyss – klare til å bli koblet med noen som kan hjelpe.
action: /nabohjelp
consequence:
- Lagre
features:
- name: Hjelpebehov
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
bucket: hjelpebehov
requires_group: nabohjelp
transitions:
- from: formidlet
to: ordnet
label: Meld ordnet
- from: formidlet
to: ikke_lost
label: Meld ikke løst
- from: open
to: formidlet
label: Koble til nabo
- from: open
to: ikke_lost
label: Meld ikke løst
- name: Naboer som kan stille opp
description: Naboer som har sagt de kan stille opp – klare til å bli spurt når noen trenger dem.
action: /nabohjelp
consequence:
- Lagre
features:
- name: Hjelpere
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
bucket: hjelpere
requires_group: nabohjelp
transitions:
- from: open
to: registrert
label: Registrer som hjelper
- from: open
to: trukket
label: Meld trukket
- name: Inviter noen inn i nabohjelpen
description: De får en konto, plass i nabohjelpen, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /nabohjelp
consequence:
- Inviter
invite:
group: nabohjelp
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Sendte invitasjoner
description: Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.
action: /nabohjelp
consequence:
- Lagre
features:
- name: Hvem som er invitert
description: Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt.
resource:
source:
kind: kv
bucket: portal_invites
requires_group: nabohjelp
transitions:
- from: open
to: done
label: Er inne
- from: expired
to: open
label: Send på nytt
- from: expired
to: done
label: Er inne
@@ -0,0 +1,10 @@
name: Hva skjer med meldingen min nå?
description: Meldingen din om skaden er sendt til lekeplasskomiteen. De ser over det du har sendt.
alternatives:
- name: Komiteen tar tak i det
description: Lekeplasskomiteen ser på meldingen og tar tak i det som må fikses før noen skader seg.
- name: Se andre meldte feil
description: Se hva andre har meldt inn av skader på lekeplassene og stien, og hvor langt det har kommet.
action: /status/anleggsfeil
consequence:
- Se meldte feil
@@ -0,0 +1,5 @@
name: Hva skjer etter at jeg har meldt meg inn?
description: Vi har mottatt innmeldingen din. Kasserer tar kontakt med betalingsinfo så snart medlemskapet er registrert.
alternatives:
- name: Kasserer sender deg betalingsinfo
description: Kasserer går gjennom nye innmeldinger og sender deg kontonummer og beløp for kontingenten.
@@ -0,0 +1,10 @@
name: Hva skjer med oppslaget ditt?
description: Det står på tavla nå, uten navn og e-post. Naboer som kan låne ut, eller vil låne, svarer deg på e-post.
alternatives:
- name: Naboene svarer deg direkte
description: Hvert svar kommer som e-post med naboens adresse. Du velger selv hvem du avtaler med, og tar ned oppslaget når det er ordnet; lenken står i e-posten. Spørsmål går til styret på post@tomtervel.no.
- name: Se oppslagstavla
description: Det som står ute akkurat nå.
action: /status/oppslag
consequence:
- Til tavla
@@ -0,0 +1,5 @@
name: Hva skjer nå med det jeg meldte inn?
description: Vi har mottatt beskjeden om at du har flyttet, byttet e-post eller vil melde deg ut.
alternatives:
- name: Kasserer retter opp opplysningene
description: Kasserer oppdaterer medlemslista og gir deg beskjed hvis det er noe mer vi trenger fra deg.
@@ -0,0 +1,5 @@
name: Hva skjer nå som jeg har meldt meg?
description: Takk for at du vil hjelpe til. Arrangementskomiteen har fått beskjed og tar kontakt med deg.
alternatives:
- name: Komiteen tar kontakt
description: Du hører fra noen i komiteen når de vet hva de trenger hjelp til, gjerne noen dager før arrangementet eller dugnaden.
@@ -0,0 +1,5 @@
name: Hva skjer med det jeg har sagt om saken?
description: Innspillet ditt er sendt til høringsinstansen i velet.
alternatives:
- name: Innspillet ditt inn i vurderingen
description: De ser på om det kan tas med i velets høringssvar til kommunen, og gir beskjed om det blir med.
@@ -0,0 +1,5 @@
name: Hva skjer nå som jeg har registrert meg?
description: Takk for at du sier fra at du kan stille opp. Nabohjelp-komiteen tar imot meldingen og legger deg inn på lista over naboer som kan hjelpe.
alternatives:
- name: Du blir kontaktet ved behov
description: Når en nabo trenger hjelp med noe du har sagt du kan bidra med, tar komiteen kontakt med deg direkte.
@@ -0,0 +1,5 @@
name: Hva skjer nå som jeg har meldt interesse for en komité?
description: Takk for at du vil bidra! Styret har fått beskjed og ser på hvilken komité som passer best for deg.
alternatives:
- name: Vi finner riktig komité til deg
description: Noen fra styret tar kontakt for å høre mer om hva du liker å drive med, og finner en komité som passer.
@@ -0,0 +1,5 @@
name: Hva skjer nå?
description: Svaret ditt er sendt til den som la ut oppslaget.
alternatives:
- name: Den som la ut oppslaget tar kontakt
description: E-posten din gikk rett til dem. Hører du ikke noe, kan det være at noen andre var først ute. Spørsmål går til styret på post@tomtervel.no.
@@ -0,0 +1,10 @@
name: Hva skjer med meldingen min nå?
description: Meldingen din om trafikkfaren er sendt til komiteen for trafikk.
alternatives:
- name: Trafikkomiteen tar den videre
description: Trafikkomiteen ser gjennom meldinger jevnlig og tar det videre med kommunen eller den som eier veien der det trengs.
- name: Andre meldte trafikkfarer
description: Se hva andre har meldt inn, og status på sakene.
action: /status/trafikkmeldinger
consequence:
- Se andre trafikkfarer
@@ -0,0 +1,5 @@
name: Hva skjer nå som jeg har bedt om hjelp?
description: Meldingen din er sendt til nabohjelpa. Vi ser etter en nabo som kan stille opp.
alternatives:
- name: Vi finner en nabo til deg
description: Vi tar kontakt med noen som kan hjelpe, så snart vi finner en som passer.
@@ -0,0 +1 @@
qualifies: redaktor
@@ -0,0 +1,79 @@
name: Hva står på oppslagstavla nå?
description: Redaktøren tar ned oppslag som er ordnet eller ikke hører hjemme, og ser svarene som har gått.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Oppslag som står ute
description: Det naboene har lagt ut om noe de har eller trenger.
action: /redaktor
consequence:
- Bekreft
features:
- name: Oppslag
description: Hver rad er ett oppslag. Ta det ned når det er ordnet eller ikke hører hjemme.
resource:
source:
kind: kv
bucket: oppslag
requires_group: redaktor
transitions:
- from: open
to: tatt_ned
label: Ta ned oppslaget
- name: Svar som har gått
description: Hvert svar gikk rett til den som la ut oppslaget; her ser du at det skjedde.
action: /redaktor
consequence:
- Bekreft
features:
- name: Svar
description: Hver rad er ett svar, med e-posten til den som svarte. Merk som lest når du har sett det.
resource:
source:
kind: kv
bucket: svar
requires_group: redaktor
transitions:
- from: open
to: lest
label: Lest
- name: Inviter noen inn som redaktør
description: De får en konto, plass blant redaktørene, og en engangslenke der de selv velger passord eller passnøkkel.
action: /redaktor
consequence:
- Inviter
invite:
group: redaktor
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Sendte invitasjoner
description: Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.
action: /redaktor
consequence:
- Bekreft
features:
- name: Hvem som er invitert
description: Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt.
resource:
source:
kind: kv
bucket: portal_invites
requires_group: redaktor
transitions:
- from: open
to: done
label: Er inne
- from: expired
to: open
label: Send på nytt
- from: expired
to: done
label: Er inne
@@ -0,0 +1,19 @@
name: Hva skjer med det jeg har meldt fra om?
description: Her ser du meldinger om ødelagt lekeutstyr og skader på elvestien, og hvor langt hver sak har kommet.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Status på meldte anleggsfeil
description: Alle meldinger er åpne for alle å se.
features:
- name: Anleggsfeil
description: Hver rad er én sak og hvor langt den har kommet. Navn og kontaktopplysninger vises ikke her.
resource:
source:
kind: kv
bucket: anleggsfeil
public: true
states: []
empty: Ingenting her ennå.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {hva: .hva, hvor: .hvor}'
@@ -0,0 +1,38 @@
name: Vil du låne ut, eller låne, det som står i oppslaget?
description: Du svarer på ett oppslag. Den som la det ut får e-posten din med en gang, og tar kontakt.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Si fra til den som la ut oppslaget
description: Legg igjen e-posten din, så får de vite at du kan låne ut, eller vil låne.
action: /received/melde-seg
consequence:
- Send svar
record_as: svar
features:
- name: Hva skjer
description: E-posten din går rett til den som la ut oppslaget. Dere avtaler resten dere imellom.
icon: lucide:mail
- name: Hvem ser dette
description: Den som la ut oppslaget, og redaktøren.
icon: lucide:users
- name: Ditt svar
requirements:
- name: email
label: E-post
type: email
placeholder: ola@eksempel.no
value: '{user.email}'
- name: hilsen
label: En hilsen, om du vil
type: textarea
optional: true
placeholder: Jeg har en stige du kan låne i helga
- name: oppslag
type: record
of: oppslag
value: '{key}'
icon: lucide:package
encouragements:
- Flere kan svare; den som la ut velger selv.
@@ -0,0 +1,23 @@
name: Hva er sendt inn, og hvor langt har det kommet?
description: Her ser du alt som er sendt inn og hvor langt hvert oppslag har kommet.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Oversikt over det som er meldt inn
description: Åpen liste – navn og detaljer vises ikke.
features:
- name: Oppslag
description: Hver rad er én sak og hvor langt den har kommet. Navn og kontaktopplysninger vises ikke her.
resource:
source:
kind: kv
bucket: oppslag
public: true
states:
- open
empty: Ingenting her ennå.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {har_eller_trenger: .har_eller_trenger, hva: .hva}'
link:
to: /status/oppslag/{id}
label: Jeg kan låne ut eller låne denne
@@ -0,0 +1,19 @@
name: Er det meldt fra om noe farlig i trafikken der jeg bor?
description: Her ser du farlige steder i trafikken som er meldt inn, og hvor langt saken har kommet.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Trafikkmeldinger og status
description: Alle meldinger som er sendt inn, og hvor de står nå.
features:
- name: Trafikkmeldinger
description: Hver rad er én sak og hvor langt den har kommet. Navn og kontaktopplysninger vises ikke her.
resource:
source:
kind: kv
bucket: trafikkmeldinger
public: true
states: []
empty: Ingenting her ennå.
jq: 'sort_by(.submitted_ms) | reverse | .[] | .responses |= {hva: .hva, hvor: .hvor}'
@@ -0,0 +1 @@
qualifies: styret
@@ -0,0 +1,250 @@
name: Hva venter på styret akkurat nå?
description: 'Herfra følger styret opp det som ikke hører under en enkelt komité: høringssvar, komitéplasser og oppslag fra naboer.'
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Høringsinnspill fra beboerne
description: Her samles meninger fra beboerne om saker kommunen har på høring, klare til å tas med i velets svar.
action: /styret
consequence:
- Lagre
features:
- name: Innspill
description: Hver rad er én sak og hvor langt den har kommet. En annen pult flytter disse.
resource:
source:
kind: kv
bucket: innspill
requires_group: styret
transitions: []
- name: Søknader til komiteene
description: Her ligger alle som har meldt seg til en komité og venter på en plass.
action: /styret
consequence:
- Lagre
features:
- name: Komitesoknader
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
bucket: komitesoknader
requires_group: styret
transitions:
- from: open
to: plassert
label: Sett i komité
- from: open
to: avslatt
label: Avslå søknaden
- name: Meldinger om trafikkfarer
description: Her samles meldinger om farlige steder i trafikken, klare til å tas videre med kommunen eller veieier.
action: /styret
consequence:
- Lagre
features:
- name: Trafikkmeldinger
description: Hver rad er én sak og hvor langt den har kommet. En annen pult flytter disse.
resource:
source:
kind: kv
bucket: trafikkmeldinger
requires_group: styret
transitions: []
- name: Inviter noen inn i Arrangementer
description: De får en konto, plass i Arrangementer, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /styret
consequence:
- Inviter
invite:
group: arrangementer
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Inviter noen inn i Høringsinstans
description: De får en konto, plass i Høringsinstans, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /styret
consequence:
- Inviter
invite:
group: horingsinstans
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Inviter noen inn i kassereren
description: De får en konto, plass i kassereren, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /styret
consequence:
- Inviter
invite:
group: kasserer
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Inviter noen inn i komiteene
description: De får en konto, plass i komiteene, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /styret
consequence:
- Inviter
invite:
group: komiteer
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Inviter noen inn i Leke- og møteplasser
description: De får en konto, plass i Leke- og møteplasser, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /styret
consequence:
- Inviter
invite:
group: lekeplasser
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Inviter noen inn i nabohjelpen
description: De får en konto, plass i nabohjelpen, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /styret
consequence:
- Inviter
invite:
group: nabohjelp
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Inviter noen inn som redaktør
description: De får en konto, plass blant redaktørene, og en engangslenke der de selv velger passord eller passnøkkel.
action: /styret
consequence:
- Inviter
invite:
group: redaktor
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Inviter noen inn i styret
description: De får en konto, plass i styret, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /styret
consequence:
- Inviter
invite:
group: styret
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Inviter noen inn i Trafikkforhold
description: De får en konto, plass i Trafikkforhold, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /styret
consequence:
- Inviter
invite:
group: trafikk
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Sendte invitasjoner
description: Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.
action: /styret
consequence:
- Lagre
features:
- name: Hvem som er invitert
description: Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt.
resource:
source:
kind: kv
bucket: portal_invites
requires_group: styret
transitions:
- from: open
to: done
label: Er inne
- from: expired
to: open
label: Send på nytt
- from: expired
to: done
label: Er inne
- name: Forslag til endringer på siden
description: Det de som står som ansvarlige for et spørsmål, har foreslått å endre. De får beskjed når forslaget flyttes.
action: /styret
consequence:
- Lagre
features:
- name: Forslag
description: Hver rad er ett forslag, med siden det gjelder. Knappene fører opp det du nettopp har gjort med det.
resource:
source:
kind: kv
bucket: portal_edit_suggestions
requires_group: styret
transitions:
- from: open
to: discussed
label: Vi ser på det
- from: open
to: done
label: Endringen er gjort
- from: open
to: declined
label: Gjøres ikke
- from: discussed
to: done
label: Endringen er gjort
- from: discussed
to: declined
label: Gjøres ikke
@@ -0,0 +1 @@
qualifies: trafikk
@@ -0,0 +1,71 @@
name: Hvilke trafikkfarer må følges opp?
description: Her ser du meldinger om farlige steder i trafikken og følger dem opp overfor kommunen eller veieier.
responsible:
name: Styret i Tomter Vel
contact: post@tomtervel.no
alternatives:
- name: Farlige steder i trafikken
description: Farlige steder i trafikken som naboer har meldt inn.
action: /trafikk
consequence:
- Lagre
features:
- name: Trafikkmeldinger
description: Hver rad er én sak. Knappene fører opp det du nettopp har gjort med den.
resource:
source:
kind: kv
bucket: trafikkmeldinger
requires_group: trafikk
transitions:
- from: open
to: tatt_opp
label: Ta opp med kommunen
- from: open
to: avvist
label: Avvis meldingen
- from: tatt_opp
to: ordnet
label: Meld ordnet
- from: tatt_opp
to: avvist
label: Avvis meldingen
- name: Inviter noen inn i Trafikkforhold
description: De får en konto, plass i Trafikkforhold, og en engangslenke der de selv velger passord eller passnøkkel. Send lenken videre til dem.
action: /trafikk
consequence:
- Inviter
invite:
group: trafikk
features:
- name: Hvem
description: Navnet deres, og adressen kontoen og engangslenken går til.
requirements:
- name: name
label: Navn
- name: email
label: E-post
type: email
- name: Sendte invitasjoner
description: Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.
action: /trafikk
consequence:
- Lagre
features:
- name: Hvem som er invitert
description: Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt.
resource:
source:
kind: kv
bucket: portal_invites
requires_group: trafikk
transitions:
- from: open
to: done
label: Er inne
- from: expired
to: open
label: Send på nytt
- from: expired
to: done
label: Er inne
@@ -0,0 +1,16 @@
title: Tomter Vel
lang: no
mail:
from: Tomter Vel <tomtervel@klingenbergbygg.no>
reply_to: post@tomtervel.no
invite:
subject: Din konto hos {site_name}
body: |-
Hei {name},
{site_name} har laget en konto til deg og lagt deg til i {group}. Brukernavnet ditt er {username}.
Velg passord her før {expires}:
{link}
Etterpå logger du inn på {site}.
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,203 @@
{
"aggregates.yaml": {
"oppslag": {
"open": {
"subject": "Nytt oppslag på tavla: {hva}",
"body": "Et nytt oppslag står på tavla fra nå av.\n\n{har_eller_trenger}: {hva}\n\nDet står der til den som la det ut tar det ned, til redaktøren gjør det, eller i en måned. Hører det ikke hjemme, tas det ned her: {site}/redaktor"
}
},
"svar": {
"open": {
"subject": "En nabo har svart på oppslaget ditt",
"body": "Hei,\n\nEn nabo har svart på oppslaget ditt «{oppslag.hva}». Ta kontakt direkte: {email}\n\n{hilsen}\n\nFlere kan svare så lenge oppslaget står; du velger selv hvem du avtaler med. Når det er ordnet, tar du det ned her:\n{site}/decide/dele-utstyr?chain={oppslag.id}&email={oppslag.email}"
}
}
},
"questions/status/oppslag/index.yaml": {
"answer": "Jeg kan låne ut eller låne denne"
},
"questions/status/oppslag/[key].yaml": {
"question": "Vil du låne ut, eller låne, det som står i oppslaget?",
"description": "Du svarer på ett oppslag. Den som la det ut får e-posten din med en gang, og tar kontakt.",
"form": {
"heading": "Si fra til den som la ut oppslaget",
"description": "Legg igjen e-posten din, så får de vite at du kan låne ut, eller vil låne.",
"button": "Send svar",
"encouragement": "Flere kan svare; den som la ut velger selv.",
"icon": "package",
"requires_title": "",
"requires_description": "",
"requires_icon": "",
"road_title": "Hva skjer",
"road_description": "E-posten din går rett til den som la ut oppslaget. Dere avtaler resten dere imellom.",
"road_icon": "lucide:mail",
"who_title": "Hvem ser dette",
"who_description": "Den som la ut oppslaget, og redaktøren.",
"who_icon": "lucide:users",
"form_title": "Ditt svar",
"form_description": "",
"labels": {
"email": "E-post",
"hilsen": "En hilsen, om du vil"
},
"hints": {
"email": "ola@eksempel.no",
"hilsen": "Jeg har en stige du kan låne i helga"
}
}
},
"questions/received/melde-seg.yaml": {
"question": "Hva skjer nå?",
"description": "Svaret ditt er sendt til den som la ut oppslaget.",
"next_heading": "Den som la ut oppslaget tar kontakt",
"next_description": "E-posten din gikk rett til dem. Hører du ikke noe, kan det være at noen andre var først ute. Spørsmål går til styret på post@tomtervel.no.",
"see_all": {
"heading": "Se oppslagstavla",
"description": "",
"button": "Til tavla"
}
},
"questions/received/dele-utstyr.yaml": {
"question": "Hva skjer med oppslaget ditt?",
"description": "Det står på tavla nå, uten navn og e-post. Naboer som kan låne ut, eller vil låne, svarer deg på e-post.",
"next_heading": "Naboene svarer deg direkte",
"next_description": "Hvert svar kommer som e-post med naboens adresse. Du velger selv hvem du avtaler med, og tar ned oppslaget når det er ordnet; lenken står i e-posten. Spørsmål går til styret på post@tomtervel.no.",
"see_all": {
"heading": "Se oppslagstavla",
"description": "Det som står ute akkurat nå.",
"button": "Til tavla"
}
},
"questions/naboer/index.yaml": {
"needs": {
"dele-utstyr": {
"encouragement": "Det står på tavla med en gang.",
"road_description": "Oppslaget står på tavla til du tar det ned selv, redaktøren gjør det, eller en måned har gått.",
"who_description": "Alle som åpner tavla, uten navn og e-post. Naboer som kan låne ut, eller vil låne, svarer deg rett på e-post."
}
}
},
"questions/redaktor/index.yaml": {
"question": "Hva står på oppslagstavla nå?",
"description": "Redaktøren tar ned oppslag som er ordnet eller ikke hører hjemme, og ser svarene som har gått.",
"confirm": "Bekreft",
"buckets": {
"oppslag": {
"heading": "Oppslag som står ute",
"description": "Det naboene har lagt ut om noe de har eller trenger.",
"moves": {
"open->tatt_ned": "Ta ned oppslaget"
},
"list_title": "Oppslag",
"list_note": "Hver rad er ett oppslag. Ta det ned når det er ordnet eller ikke hører hjemme."
},
"svar": {
"heading": "Svar som har gått",
"description": "Hvert svar gikk rett til den som la ut oppslaget; her ser du at det skjedde.",
"moves": {
"open->lest": "Lest"
},
"list_title": "Svar",
"list_note": "Hver rad er ett svar, med e-posten til den som svarte. Merk som lest når du har sett det."
}
},
"invites": {
"redaktor": {
"heading": "Inviter noen inn som redaktør",
"description": "De får en konto, plass blant redaktørene, og en engangslenke der de selv velger passord eller passnøkkel.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
}
}
},
"invited": {
"heading": "Sendte invitasjoner",
"done": "Er inne",
"description": "Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.",
"list_note": "Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt."
}
},
"questions/styret/index.yaml": {
"invites": {
"redaktor": {
"heading": "Inviter noen inn som redaktør",
"description": "De får en konto, plass blant redaktørene, og en engangslenke der de selv velger passord eller passnøkkel.",
"button": "Inviter",
"form_title": "Hvem",
"form_description": "Navnet deres, og adressen kontoen og engangslenken går til.",
"labels": {
"name": "Navn",
"email": "E-post"
}
}
},
"invited": {
"description": "Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.",
"list_note": "Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt."
}
},
"questions/arrangementer/index.yaml": {
"invited": {
"description": "Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.",
"list_note": "Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt."
}
},
"questions/horingsinstans/index.yaml": {
"invited": {
"description": "Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.",
"list_note": "Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt."
}
},
"questions/kasserer/index.yaml": {
"invited": {
"description": "Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.",
"list_note": "Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt."
}
},
"questions/komiteer/index.yaml": {
"invited": {
"description": "Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.",
"list_note": "Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt."
}
},
"questions/lekeplasser/index.yaml": {
"invited": {
"description": "Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.",
"list_note": "Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt."
}
},
"questions/nabohjelp/index.yaml": {
"invited": {
"description": "Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.",
"list_note": "Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt."
}
},
"questions/trafikk/index.yaml": {
"invited": {
"description": "Hver invitasjon og hvor den står. En lenke som går ut ubrukt, kan sendes på nytt.",
"list_note": "Hver rad er én invitasjon. Den blir ferdig av seg selv når personen logger inn, og står som utløpt når lenken gikk ut ubrukt."
}
},
"questions/index.yaml": {
"shopping": {
"items": {
"status-anleggsfeil": {
"description": "Det som er meldt inn, og hvor langt vi har kommet med å fikse det.",
"link": "Alle feilmeldinger"
},
"status-oppslag": {
"description": "Utstyr som er til låns, og det naboene leter etter. Svar rett fra oppslaget.",
"link": "Hele oppslagstavla"
},
"status-trafikkmeldinger": {
"description": "Det naboer har meldt fra om, og hva velet har gjort med det.",
"link": "Alle trafikkmeldinger"
}
}
}
}
}
+52 -1
View File
@@ -2783,6 +2783,18 @@ fn identity(v: &serde_yaml::Value) -> Vec<(&'static str, String)> {
}
}
}
// A desk card is its list: the bucket its feature reads is what
// the card is about, and the only thing that tells two cards on
// one desk apart, since they all lead back to the desk.
if let Some(features) = v.get("features").and_then(|f| f.as_sequence()) {
for feature in features {
if let Some(bucket) = feature.get("resource").and_then(|r| r.get("source")).and_then(|s| s.get("bucket")).and_then(|b| b.as_str()) {
if !bucket.starts_with('\u{1}') && !bucket.is_empty() {
id.push(("bucket", bucket.to_string()));
}
}
}
}
id
}
@@ -2830,12 +2842,22 @@ fn collect_words(a: &serde_yaml::Value, b: &serde_yaml::Value, found: &mut std::
let mut used = vec![false; y.len()];
for (i, va) in x.iter().enumerate() {
let ida = identity(va);
// What a card does is matched before where it points:
// on a desk every card's action is the desk itself, so
// a card with a bucket or a group of its own must not
// take the words of whichever card shares that action
// - when the vel's notices left the board's desk, the
// invite after them was handed their heading that way.
let strong: Vec<(&str, String)> = ida.iter().filter(|(k, v)| strong_identity(k, v)).cloned().collect();
let matching = |keys: &[(&str, String)]| (0..y.len()).find(|&j| !used[j] && identity(&y[j]).iter().any(|k| keys.contains(k)));
let hit = if ida.is_empty() {
// A name is a word, never an identity that blocks a
// positional match: a feature always carries one.
(i < y.len() && !used[i] && identity(&y[i]).iter().all(|(k, _)| *k == "name")).then_some(i)
} else if !strong.is_empty() {
matching(&strong)
} else {
(0..y.len()).find(|&j| !used[j] && identity(&y[j]).iter().any(|k| ida.contains(k)))
matching(&ida)
};
if let Some(j) = hit {
used[j] = true;
@@ -2925,6 +2947,35 @@ mod invite_tests {
assert!(orphan.validate().unwrap_err().to_string().contains("owner"));
}
#[test]
fn a_card_that_left_a_desk_does_not_leave_its_words_on_the_next_card() {
// Live: the board handles expenses, and its card has words of
// its own. Then the plan moves expenses to traffic's desk: the
// invite that now sits where the card sat must not take them.
let live: Plan = serde_yaml::from_str(PLAN).unwrap();
let mut words = fallback_words(&live);
words.get_mut("questions/board/index.yaml").unwrap()["buckets"]["expenses"]["heading"] = json!("Money people want back");
let repo = std::env::temp_dir().join(format!("trainer-moved-{}", std::process::id()));
for (path, text) in render(&live, &words).unwrap() {
let full = repo.join(&path);
std::fs::create_dir_all(full.parent().unwrap()).unwrap();
std::fs::write(full, text).unwrap();
}
// Expenses go to traffic's desk; the board watches hazards
// instead, so its desk stays, with another bucket's card where
// the expenses card was.
let moved: Plan = serde_yaml::from_str(&PLAN.replace(" handled_by: board\n", " handled_by: traffic\n").replace(" handled_by: traffic\n stages: [open, fixed]", " handled_by: traffic\n watched_by: [board]\n stages: [open, fixed]")).unwrap();
moved.validate().unwrap();
let lifted = lift_words(&moved, &repo).unwrap();
let board = &lifted["questions/board/index.yaml"];
assert!(board["buckets"].get("expenses").is_none());
assert_ne!(board["buckets"]["hazards"]["heading"], "Money people want back", "the hazards card took the moved card's heading");
for (group, invite) in board["invites"].as_object().unwrap() {
assert_ne!(invite["heading"], "Money people want back", "the invite into {group} took the moved card's heading");
}
let _ = std::fs::remove_dir_all(&repo);
}
#[test]
fn inviting_desks_get_a_form_per_group_and_a_list_of_invites_sent() {
let plan: Plan = serde_yaml::from_str(PLAN).unwrap();