Files

3.2 KiB

MIL-007 Lecture step 9: resilience against network failures

Metadata

Key Value
ID MIL-007
CrossReference BC-001
Language en
Domain it

Version History

Date Status Author Reviewer Change Commit
2026-10-28 Accepted Jens Tirsvad Nielsen AI as stand-in for S02 Initial version 50e8331

Purpose

Decide whether the bot completes a full run when the site fails half of its requests, which completes lecture step 9.

Deliverable

A retry(func, retries=7, description=None) wrapper, login(), book_class() and get_my_bookings() made resilient with it, unit tests with a failing fake, and the screenshot for lecture step 9.

Go / No-Go Criteria

# Criterion (objectively checkable) Go No-Go
1 Unit tests show that retry returns on success, repeats on failure and raises after the last attempt 0 failures A test fails
2 Booking is only counted when the page confirms it (the button changes state) Confirmed in tests and in a run A click is counted without confirmation
3 Container runs with 50% simulated failures reach the verification result in 3 of 3 attempts 3 of 3 Fewer than 3
4 docs/images/step-9.png exists The file exists The file is missing
5 The code review against qc-programming-python.md is Go RC-* is Go No-Go

Dependencies

Depends on Reason
MIL-006 Needs login, booking and verification to wrap

Traceability

Business Case objective / KPI / user story Reference
O6, success criteria 4, 5 BC-001
CN-003 SA-001

Ownership

Role Stakeholder ID (SA)
Owner S01
Approving reviewer S02 (AI as stand-in, autonomous mode, not independent)

Target Date

2026-11-04 — inside the planned window 2026-10-28 to 2026-11-06 of PP-001; the Business Case sets no deadline.

Tasks

# Task Summary Needs its own Use Case/User Story? Reference
1 Write the retry wrapper Implement retry(func, retries=7, description=None) that calls the function, logs each failed attempt with the description and re-raises after the last one. Unit-test it with a fake that fails n times. No O6
2 Wrap the login in retry Move all login steps into login() and call it through retry, so a failed page load is repeated. No O6
3 Make booking confirm its result Put the booking steps in book_class() and treat the click as done only when the button reads "Booked" or "Waitlisted"; call it through retry. No O6
4 Make the bookings read resilient Put the My Bookings retrieval in get_my_bookings() and call it through retry. No O6
5 Run the chaos test in a container Clear the bookings in the admin panel, enable the network simulation at 50%, run the bot three times and keep the output. Save the screenshot step-9.png. No O6