The visitor and the rater read what the page says first

iris now hands a task the cards that lead nowhere as `page` context;
the answerer shows it before the options and the rater before the
cards, and the gutted twin loses it like everything else. The Tomter
Vel plan keeps its four doors and gains the opener, the mails and the
member's own move: flat scored worse and the doors stay.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Bendik Aagaard Lynghaug
2026-09-23 22:36:13 +02:00
co-authored by Claude Fable 5.1
parent e3dae063d4
commit 09aea7061c
3 changed files with 31 additions and 1 deletions
+20
View File
@@ -51,11 +51,23 @@ does:
nabohjelpsgruppa deg med en nabo som kan. Du sier selv fra når
det er ordnet.
doors:
- id: medlem
who: en husstand i Tomter som vil bli medlem, betale kontingent, eller melde flytting, ny e-post eller utmelding
- id: melde-fra
who: noen som har sett noe farlig i trafikken, eller noe ødelagt på lekeplassen eller stien
- id: bidra
who: noen som vil stille opp på 17. mai, dugnad eller et arrangement, eller sitte i en komité
- id: naboer
who: en nabo som trenger en hånd med snømåking, handling eller skyss, kan gi en, eller har noe å låne ut
needs:
- id: bli-medlem
who: en husstand i Tomter
wants: å bli medlem og få betalt kontingenten
lands_in: husstander
door: medlem
handled_by: kasserer
stages: [open, betalt, utmeldt]
done_when: [betalt, utmeldt]
@@ -74,6 +86,7 @@ needs:
who: et medlem som har flyttet, byttet e-post eller vil melde seg ut
wants: at velet har riktige opplysninger om dem
lands_in: medlemsendringer
door: medlem
handled_by: kasserer
stages: [open, oppdatert]
done_when: [oppdatert]
@@ -88,6 +101,7 @@ needs:
who: en som har sett et farlig sted i trafikken
wants: at velet tar det opp med kommunen eller den som eier veien
lands_in: trafikkmeldinger
door: melde-fra
handled_by: trafikk
stages: [open, tatt_opp, ordnet, avvist]
done_when: [ordnet, avvist]
@@ -104,6 +118,7 @@ needs:
who: en som ser at noe på lekeplassen eller stien er ødelagt
wants: at det blir fikset før noen skader seg
lands_in: anleggsfeil
door: melde-fra
handled_by: lekeplasser
stages: [open, tatt_tak_i, utbedret]
done_when: [utbedret]
@@ -134,6 +149,7 @@ needs:
who: en som vil hjelpe til på et arrangement eller en dugnad
wants: å bli satt opp på noe som passer dem
lands_in: frivillige
door: bidra
handled_by: arrangementer
stages: [open, kontaktet, satt_opp, takket_nei]
done_when: [satt_opp, takket_nei]
@@ -148,6 +164,7 @@ needs:
who: en som vil sitte i en komité
wants: en plass i den komiteen som driver med det de bryr seg om
lands_in: komitesoknader
door: bidra
handled_by: styret
stages: [open, plassert, avslatt]
done_when: [plassert, avslatt]
@@ -165,6 +182,7 @@ needs:
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
lands_in: hjelpebehov
door: naboer
handled_by: nabohjelp
stages: [open, formidlet, ordnet, ikke_lost]
done_when: [ordnet, ikke_lost]
@@ -183,6 +201,7 @@ needs:
who: en nabo som kan stille opp når noen trenger det
wants: å bli spurt når det passer
lands_in: hjelpere
door: naboer
handled_by: nabohjelp
stages: [open, registrert, trukket]
done_when: [registrert, trukket]
@@ -200,6 +219,7 @@ needs:
who: en nabo som har noe å låne ut, eller trenger å låne noe
wants: et oppslag som naboene ser
lands_in: oppslag
door: naboer
handled_by: styret
stages: [open, lagt_ut, tatt_ned]
done_when: [lagt_ut, tatt_ned]
+6 -1
View File
@@ -487,7 +487,12 @@ pub(crate) fn answer_blind(cmd: &str, tasks: &str, repo: Option<&Path>) -> anyho
format!("{}. {body}", i + 1)
})
.collect();
let head = page.as_ref().map(card::page_head).unwrap_or_default();
let mut head = page.as_ref().map(card::page_head).unwrap_or_default();
// What the page says before it offers anything (the opener, the
// look around): read, not picked.
if let Some(context) = task["state"]["page"].as_str().filter(|c| !c.trim().is_empty()) {
head.push_str(&format!("The page first says:\n{context}\n\n"));
}
let prompt = format!(
"You are this person: {body}\n\n{instructions}\n{head}The page offers these options:\n\n{}\n\nWhich one do you pick? Judge only from your own situation and the wording in front of you. Give your honest confidence between 0 and 1; if two options fit you about equally, confidence is low.\nReply as JSON: {{\"choice\": <the option's number>, \"confidence\": 0.00}}",
listed.join("\n\n")
+5
View File
@@ -72,6 +72,11 @@ fn page_text(step: &Value, page: Option<&Value>, followup: Option<&Value>, gutte
(false, Some(p)) => card::page_head(p),
_ => format!("{}\n", step["question"].as_str().unwrap_or_default()),
};
// The cards that lead nowhere (the opener, the look around) are
// read before the options; the gutted twin loses them too.
if let Some(context) = step["context"].as_str().filter(|c| !c.trim().is_empty() && !gutted) {
text.push_str(&format!("\n{context}\n"));
}
for (i, option) in step["options"].as_array().into_iter().flatten().enumerate() {
if gutted {
text.push_str(&format!("\n- Option {}\n", i + 1));