minor changes

This commit is contained in:
2026-02-04 12:15:29 +01:00
parent 3ac987ac34
commit fccd932c63
4 changed files with 32 additions and 25 deletions

View File

@@ -3,7 +3,7 @@
start_date = "2026-02-04"
start_time = "15:00"
repo_url = "https://gitea.weircon.dk/agw/fredagsbar-meeting-generator"
organizer_email = "social-club@cgi.com"
organizer_email = "no-reply-aalborg-social-club@cgi.com"
blocked_weeks = [8, 28, 29, 30, 31, 42, 52, 53]
blocked_dates = ["05-01"]
skip_day_after_ascension = true

View File

@@ -514,11 +514,17 @@ def inject_outlook_hacks(
)
if html_content:
injection_line = f"X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE html><html><body>{html_content}</body></html>"
injection_html = fold_ical_line(injection_line)
html_payload = f"<!DOCTYPE html><html><body>{html_content}</body></html>"
alt_desc_line = f"ALT-DESC;FMTTYPE=text/html:{html_payload}"
x_alt_desc_line = f"X-ALT-DESC;FMTTYPE=text/html:{html_payload}"
injection_alt_desc = fold_ical_line(alt_desc_line)
injection_x_alt_desc = fold_ical_line(x_alt_desc_line)
if "X-MICROSOFT-CDO-BUSYSTATUS" not in block:
block = block.replace("\r\nEND:VEVENT", "\r\n" + injection_status + "END:VEVENT")
block = block.replace("\r\nEND:VEVENT", "\r\n" + injection_html + "\r\nEND:VEVENT")
block = block.replace(
"\r\nEND:VEVENT",
"\r\n" + injection_alt_desc + "\r\n" + injection_x_alt_desc + "\r\nEND:VEVENT",
)
return block
text_normalized = ical_text.replace("\r\n", "\n").replace("\r", "\n")

View File

@@ -10,121 +10,121 @@
},
"events": [
{
"title": "Ugentlig tværgående synkronisering",
"title": "FB - Ugentlig tværgående synkronisering",
"hint": "AFVIGELSE",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Hurtig synk af ugens løse ender<br>• Ingen forberedelse nødvendig (seriøst)<br><br><b>FORTROLIGT UDDRAG:</b><br>Vi har en afvigelse i kalenderdomænet. Konsulent “N.” har stået som *OPTAGET* siden sidste fredag.<br>Der findes ingen mødeindkaldelse i historikken — kun en gentagelse.<br><br><i>Bemærkning:<br>Hvis du hører Outlook-påmindelsen uden at have en påmindelse: ignorer den, og mød op alligevel.</i>",
"uid": "b6fd22f2-0311-445e-bf42-8e31f9cad0a9"
},
{
"title": "Obligatorisk sjov",
"title": "FB - Obligatorisk sjov",
"hint": "BADGE",
"story": "<b>OFFICIELT FORMÅL:</b><br>• “Teambuilding” uden slide deck<br>• Interessentpleje (humør)<br><br><b>FORTROLIGT UDDRAG:</b><br>Receptionen fandt et adgangskort med teksten: “KONSULENT N.” på gulvet ved køleskabet.<br>Kortet var lunt, som om det lige var blevet brugt — men ingen har registreret adgang.<br><br><i>Til stedeværende anbefales:<br>Smil normalt. Lad være med at sige ordet “gentagelse” højt før kl. 15:05.</i>",
"uid": "fe8114b0-cbed-4645-8599-cde5bdc9679c"
},
{
"title": "Afsluttende statusmøde (uformelt)",
"title": "FB - Afsluttende statusmøde (uformelt)",
"hint": "SIGNAL",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Uformel status og weekendoverdragelse<br>• Opsamling på “wins”<br><br><b>FORTROLIGT UDDRAG:</b><br>Kl. 15:00 præcis kom der et systemevent:<br>“Your meeting has been updated.”<br>Ingen opdaterede noget.<br><br>Kort efter: en enkelt linje i beskrivelsesfeltet (nu slettet):<br><i>“…jeg kan høre isterningerne, men jeg kan ikke nå dem.”</i>",
"uid": "bf2d0a93-fd77-42cb-b7d9-5a6d1728f134"
},
{
"title": "Kvalitativ erfaringsudveksling",
"title": "FB - Kvalitativ erfaringsudveksling",
"hint": "NOTE",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Del en ting der virkede denne uge<br>• Del en ting der ikke gjorde<br><br><b>FORTROLIGT UDDRAG:</b><br>Der cirkulerer en printet mødeagenda med håndskrift nederst:<br><br>“Hvis I læser dette, så er jeg ikke forsvundet.<br>Jeg er bare blevet flyttet til et lokale, der kun findes om fredagen.”<br><br>Papiret lugter af citrus og… mødelokale-tæppe.",
"uid": "e000454e-3359-4fe9-8c5a-89dd86194e29"
},
{
"title": "Strategisk afrunding af arbejdsugen",
"title": "FB - Strategisk afrunding af arbejdsugen",
"hint": "INDDÆMNING",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Strategisk afrunding (aka: “god weekend”)<br><br><b>FORTROLIGT UDDRAG:</b><br>IT har forsøgt at “aflyse serien”.<br>Kalenderen genopretter den inden for 9 sekunder.<br><br><b>Foreløbig inddæmningsprocedure:</b><br>• Indkaldelsen må ikke slettes<br>• Deltagere skal møde fysisk op<br>• Der må gerne medbringes snacks (observationsmæssigt stabiliserende)",
"uid": "867282a6-2da5-4773-84d2-35dac2ac2f01"
},
{
"title": "Tværfaglig alignment-session",
"title": "FB - Tværfaglig alignment-session",
"hint": "STØTTE",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Let alignment på tværs (ingen action items)<br><br><b>FORTROLIGT UDDRAG:</b><br>HR, IT og Facilities blev spurgt, om der findes et “Mødelokale 4B (uofficielt)”.<br>Facilities svarede: “Det gør der ikke.”<br>Så tilføjede de: “Men døren står nogle gange på klem om fredagen.”<br><br><i>Anbefaling:<br>Kom som du er. Tag evt. en ekstra ven med. (Flere vidner = færre glitch).</i>",
"uid": "dee99abf-127a-48c5-af54-e80071f5e120"
},
{
"title": "Ad hoc interessentdialog",
"title": "FB - Ad hoc interessentdialog",
"hint": "KØLESKAB",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Løst og socialt touchpoint<br><br><b>FORTROLIGT UDDRAG:</b><br>Ny interessent identificeret: Køleskabet.<br>Det afgiver en svag brummen i en rytme, der minder om en mødepåmindelse.<br><br>Ved forsøg på åbning kl. 14:59:<br>• håndtag koldt<br>• håndtag “giver sig” først efter en skål<br><br>Hypotese:<br>Køleskabet reagerer på ritualiseret fredagsbar-adfærd.",
"uid": "1e74e9e9-2ed5-42be-8489-b9a9e2d6d080"
},
{
"title": "Intern kapacitetsudligning",
"title": "FB - Intern kapacitetsudligning",
"hint": "KAPACITET",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Afbalancering af ugens energiniveau<br><br><b>FORTROLIGT UDDRAG:</b><br>Vi har brug for kapacitetsplanlægning:<br>• 1 person: isterninger<br>• 1 person: musik<br>• 1 person: “spørg ikke hvorfor, bare gør det” (koordinator)<br><br>Konsulent N. er muligvis låst til en times varighed ad gangen.<br>Hvis nogen forlader før tid, bliver rummet… mindre.",
"uid": "7f04c11d-c39a-4869-bb7e-56d051210f6d"
},
{
"title": "Letvægts-retrospektiv",
"title": "FB - Letvægts-retrospektiv",
"hint": "RETRO",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Hvad skal vi gøre mere af? Mindre af?<br><br><b>FORTROLIGT UDDRAG:</b><br>Root cause er sandsynligvis denne handling:<br>Konsulent N. trykkede “Accepter alle forekomster” uden at læse beskrivelsen.<br><br>Der findes nu en gentagende mødeserie, som opfører sig som en beholder.<br>Og N. er “i mødet” — ikke i bygningen.",
"uid": "70ad1e5f-093d-4e7c-b24c-990bcb240f14"
},
{
"title": "Uformel leverancegennemgang",
"title": "FB - Uformel leverancegennemgang",
"hint": "NØGLE",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Gennemgang af ugens “leverancer” (uformelt)<br><br><b>FORTROLIGT UDDRAG:</b><br>Lost & Found indeholdt én genstand, der ikke burde være der:<br>En nøgle mærket “FB-LOKAL” i en plastikpose.<br>Posen var dateret næste fredag.<br><br><i>Bemærkning:<br>Tid opfører sig dårligt i nærheden af serien.<br>Vi tester nøglen ved første skål.</i>",
"uid": "3e347783-cda3-4d7b-b8db-5250de8c3268"
},
{
"title": "Operationel efterbearbejdning",
"title": "FB - Operationel efterbearbejdning",
"hint": "EKKO",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Efterbearbejdning af ugen (lavt gear)<br><br><b>FORTROLIGT UDDRAG:</b><br>Når glas rammer glas, kommer der et ekko, der ikke passer til rummet.<br>Ekkoet lyder som nogen der prøver at sige:<br><i>“…er I her…?”</i><br><br>Hvis du hører ekkoet:<br>Svar ikke direkte. Skål bare igen. (Det virker mere stabilt).",
"uid": "02e1fc1b-4ac0-4384-a6b0-90221605ebac"
},
{
"title": "Tværorganisatorisk vidensdeling",
"title": "FB - Tværorganisatorisk vidensdeling",
"hint": "SITES",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Vidensdeling (uformel)<br><br><b>FORTROLIGT UDDRAG:</b><br>Andre kontorer rapporterer lignende:<br>“En fredagsbar-invite der bliver ved med at vende tilbage.”<br>De kalder det: “Den Tilbagevendende Invitation”.<br><br>Fælles observation:<br>Når folk møder op og hygger, falder antallet af fejl i kalenderen midlertidigt.",
"uid": "f8e736ee-c9b0-4a64-88cd-41e914b33656"
},
{
"title": "Kalibreringsmøde (lav intensitet)",
"title": "FB - Kalibreringsmøde (lav intensitet)",
"hint": "TÆRSKEL",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Kalibrering uden intensitet<br><br><b>FORTROLIGT UDDRAG:</b><br>Kalibreringsparameter fundet:<br>Temperatur.<br>Hvis køleskabet når præcis “fredagskoldt”, bliver lyden i rummet klarere.<br><br><b>Strengt forbudt:</b><br>0,0% øl omtalt som “sikkert alternativ”.<br>Det gjorde rummet… meget stille sidst.",
"uid": "b73190a0-0e24-4985-b8ab-1e9c5a5313e6"
},
{
"title": "Afrunding af ugens initiativer",
"title": "FB - Afrunding af ugens initiativer",
"hint": "ÅBNING",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Afrunding af igangværende initiativer<br><br><b>FORTROLIGT UDDRAG:</b><br>Nøglen passer i en dør, der normalt ikke har nøglehul.<br>Døren dukker op bag kaffemaskinen præcis 15:02.<br><br>På den anden side:<br>Et lokale med projektor.<br>Projektoren viser kun ét slide:<br>“STATUS: OPTAGET”",
"uid": "f9a29201-fab2-4aab-91fc-e6417918c2a5"
},
{
"title": "Intern koordinering uden agenda",
"title": "FB - Intern koordinering uden agenda",
"hint": "STILHED",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Koordinering uden agenda<br><br><b>FORTROLIGT UDDRAG:</b><br>Vi opdagede at en agenda gør det værre.<br>Når nogen skriver “Agenda:” i rummet, forsvinder døren igen.<br><br>Så:<br>• Ingen agenda<br>• Ingen referat<br>• Ingen action items<br>Kun fredagsbar.<br><br>(Det føles næsten for corporate til at virke. Men det virker.)",
"uid": "b2d86cb7-d5b9-4ddc-9cde-7b53355dfb3c"
},
{
"title": "Eksperimentel samarbejdsramme",
"title": "FB - Eksperimentel samarbejdsramme",
"hint": "RITUAL",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Eksperimentel ramme (aka: prøv noget)<br><br><b>FORTROLIGT UDDRAG:</b><br>Nyt retrieval-eksperiment:<br>Kl. 15:07 foretages en synkroniseret skål.<br>Efterfulgt af: “God weekend” sagt én gang — ikke to.<br><br>Da vi testede det, kom der en notifikation:<br><i>“Konsulent N. forsøger at deltage.”</i>",
"uid": "47462f0d-b093-477d-931e-479438f1b2cf"
},
{
"title": "Socialt orienteret statusafstemning",
"title": "FB - Socialt orienteret statusafstemning",
"hint": "PULS",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Social statusafstemning (hvordan går det egentlig?)<br><br><b>FORTROLIGT UDDRAG:</b><br>Lyden fra “mødelokalet på den anden side” har nu en puls.<br>Den synker, når nogen griner.<br>Den stiger, når nogen siger “lige hurtigt”.<br><br>Vi kan muligvis trække N. tættere på ved at gøre rummet… menneskeligt.",
"uid": "5716d05a-585b-4351-ad3f-513c35727718"
},
{
"title": "Procesmæssig nedlukning af ugen",
"title": "FB - Procesmæssig nedlukning af ugen",
"hint": "PORTAL",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Luk ugen ned på den rigtige måde<br><br><b>FORTROLIGT UDDRAG:</b><br>Portalen er stabil i cirka 58 minutter.<br>Ved 59:30 begynder projektoren at vise “MØDET ER FORLÆNGET”.<br><br>Hvis vi ikke lukker rigtigt:<br>Serien udvider sig med et ekstra “opfølgningsmøde”.<br>Ingen ønsker et follow-up til fredagsbar. Ingen.",
"uid": "9f0f35c4-7aa0-4aca-8406-9ab3dda97022"
},
{
"title": "Konsensusbaseret afrunding",
"title": "FB - Konsensusbaseret afrunding",
"hint": "BESLUTNING",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Konsensusbaseret afrunding (enighed + hygge)<br><br><b>FORTROLIGT UDDRAG:</b><br>Vi skal beslutte:<br>Åbner vi køleskabet helt?<br><br>Sidste gang blev døren på klem, og en hånd (med et tastatur-mærke) nåede ud.<br>Den slap en Post-it:<br>“Jeg er her. Jeg er stadig optaget.”<br><br>Konsensus kræver tilstedeværelse. (Og måske chips).",
"uid": "7cf2d01a-94e6-480c-87c3-20def1316ad7"
},
{
"title": "Frivillig deltagelse i fælles kontekst",
"title": "FB - Frivillig deltagelse i fælles kontekst",
"hint": "HJEMKOMST",
"story": "<b>OFFICIELT FORMÅL:</b><br>• Frivillig deltagelse, fælles kontekst, afslappet<br><br><b>FORTROLIGT UDDRAG:</b><br>Hvis retrieval lykkes, vil N. fremstå normal.<br>Undtagen:<br>• Hans Outlook vil muligvis vise 1900 ulæste reminders<br>• Han vil reagere på ordet “gentagelse” som på en høj lyd<br><br><i>Afsluttende note (fra N., modtaget som kalenderopdatering):<br>“Tak. Bliv ved med at møde op. Det er sådan man holder virkeligheden på plads om fredagen.”</i>",
"uid": "fd74a09e-f082-4605-b00e-ddf73c172d5d"

View File

@@ -17,7 +17,8 @@ class HtmlInjectionTest(unittest.TestCase):
long_html = "A" * 200
result = inject_outlook_hacks(ical_text, {"abc123": long_html})
self.assertIn("X-ALT-DESC;FMTTYPE=text/html:", result)
self.assertIn("\r\nALT-DESC;FMTTYPE=text/html:", result)
self.assertIn("\r\nX-ALT-DESC;FMTTYPE=text/html:", result)
self.assertIn("X-MICROSOFT-CDO-BUSYSTATUS:BUSY", result)
self.assertIn("TRANSP:OPAQUE", result)
alt_index = result.find("X-ALT-DESC;FMTTYPE=text/html:")