From 09aea7061c38da819cca5894af737d1f0010242e Mon Sep 17 00:00:00 2001 From: Bendik Aagaard Lynghaug Date: Wed, 23 Sep 2026 22:36:13 +0200 Subject: [PATCH] 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 --- plans/tomtervel.yaml | 20 ++++++++++++++++++++ src/main.rs | 7 ++++++- src/rate.rs | 5 +++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/plans/tomtervel.yaml b/plans/tomtervel.yaml index c3c4d48..e28aad5 100644 --- a/plans/tomtervel.yaml +++ b/plans/tomtervel.yaml @@ -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] diff --git a/src/main.rs b/src/main.rs index 885b611..b023e6d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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\": , \"confidence\": 0.00}}", listed.join("\n\n") diff --git a/src/rate.rs b/src/rate.rs index 6ccdc2a..0dc77c4 100644 --- a/src/rate.rs +++ b/src/rate.rs @@ -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));