25 Commits
Author SHA1 Message Date
Tirsvad 6f544538aa Merge pull request 'Ignore the AI prompt log in a public repository' (#39) from ignore-ai-prompt-log into main
TirSystem/git-workflows: Sync GitHub mirror metadata / sync-metadata (push) Successful in 6s
2026-10-28 07:53:35 +01:00
Tirsvad 4ca49bf65a Ignore the AI prompt log in a public repository
Ignores `/docs/ai-prompts/` because the repository is public (`framework/process/ai-prompt-log.md`, rule 5). The session log itself stays local.

No issue closed: housekeeping outside the milestone tasks; no src/ or tests/ change.
2026-10-28 14:53:30 +08:00
Tirsvad ff5d937178 Merge pull request 'MIL-006 wiki in three languages' (#38) from mil-006-wiki-screenshots into main
TirSystem/git-workflows: Publish wiki / publish-wiki (push) Successful in 19s
TirSystem/git-workflows: Sync GitHub mirror metadata / sync-metadata (push) Successful in 5s
2026-10-28 07:51:06 +01:00
Tirsvad 7d139f86c7 MIL-006 wiki in three languages
Delivers MIL-006 tasks 1 to 4: the wiki pages in `docs/wiki/` in English, Danish and Bahasa Malaysia (Home plus one page per lecture step, each with its screenshot and a "what we gained" section, and a shared `_Sidebar.md`), laid out as `framework/process/wiki.md` says (English without suffix, `-da` and `-ms` for the others, a language line on every page). The README links to the wiki.

Checked: the three languages have the same five pages; every page starts with the language line; code, commands and file names stay in English. There is no QC checklist for wiki pages, so there is no RC record. Publishing to the host's wiki (task 5, issue #31) follows after this merge.

Task: MIL-006#1
Task: MIL-006#2
Task: MIL-006#3
Task: MIL-006#4
2026-10-28 14:50:58 +08:00
Tirsvad 7d9573e447 Merge pull request 'MIL-005 README for Step 4' (#37) from mil-005-readme-step-4 into main
TirSystem/git-workflows: Sync GitHub mirror metadata / sync-metadata (push) Successful in 6s
2026-10-28 07:49:01 +01:00
Tirsvad 73fd40fcf8 MIL-005 README for Step 4
Completes MIL-005 task 5: the README section for Step 4 (the live Amazon page, which answers with a robot check) and the Run section about `PRODUCT_URL`. The README edit was left out of PR 36 by mistake (a failed script run), so the issue was closed before its README work landed; this PR adds it.

No code changed; no review record needed beyond RC-014.

Task: MIL-005#5
2026-10-28 14:48:55 +08:00
Tirsvad 7fe0cfe5c1 Merge pull request 'MIL-005 live Amazon page (Step 4)' (#36) from mil-005-live-amazon into main
TirSystem/git-workflows: Sync GitHub mirror metadata / sync-metadata (push) Successful in 6s
2026-10-28 07:48:30 +01:00
Tirsvad b7aee83993 Resolve pending commit links of MIL-005 2026-10-28 14:48:25 +08:00
Tirsvad 34e70b31dc MIL-005 live Amazon page (Step 4)
Delivers MIL-005 (lecture Step 4): the product URL comes from `PRODUCT_URL` (default: the lecture's Amazon page), price and title selectors and robot-check markers live in `constants.py`, and a robot-check page raises `RobotCheckError` with a clear message. The code does not try to solve or bypass the check.

Outcome on the live page (2026-10-28): Amazon returned HTTP 200 with a robot-check page and no price; the page is kept (tokens redacted) as a test fixture and shown in the README. Two live requests were made in total, one to inspect the response and one for the screenshot; there are no retries or loops.

Review: code against QC-PY-001 as RC-014 (Go, autonomous, not independent). 56 pytest tests (no network), ruff and mypy --strict pass.

Task: MIL-005#1
Task: MIL-005#2
Task: MIL-005#3
Task: MIL-005#4
Task: MIL-005#5
2026-10-28 14:48:21 +08:00
Tirsvad 3455128948 Merge pull request 'MIL-004 request headers (Step 3)' (#35) from mil-004-request-headers into main
TirSystem/git-workflows: Sync GitHub mirror metadata / sync-metadata (push) Successful in 8s
2026-10-28 07:45:56 +01:00
Tirsvad 0db472711a Resolve pending commit links of MIL-004 2026-10-28 14:45:50 +08:00
Tirsvad ec6ed213fb MIL-004 request headers (Step 3)
Delivers MIL-004 (lecture Step 3): `DEFAULT_HEADERS` (User-Agent, Accept-Language, Accept, Accept-Encoding, Sec-Fetch-*, Priority, Upgrade-Insecure-Requests; no Host and no X-Amzn-Trace-Id) is defined once in `constants.py` and sent by `RequestsPageFetcher`. Tests assert the headers, the absence of Host/trace id, the timeout and read-only behaviour, with no network.

Review: code against QC-PY-001 as RC-013 (Go, autonomous, not independent). 38 pytest tests, ruff and mypy --strict pass. Screenshots compare the browser's headers and the bot's headers at httpbin.org/headers.

Task: MIL-004#1
Task: MIL-004#2
Task: MIL-004#3
Task: MIL-004#4
2026-10-28 14:45:46 +08:00
Tirsvad e1b055d427 Merge pull request 'MIL-003 e-mail alert (Step 2)' (#34) from mil-003-email-alert into main
TirSystem/git-workflows: Sync GitHub mirror metadata / sync-metadata (push) Successful in 8s
2026-10-28 07:44:27 +01:00
Tirsvad aa0cdf0847 Resolve pending commit links of MIL-003 2026-10-28 14:44:22 +08:00
Tirsvad 07b46f0180 MIL-003 e-mail alert (Step 2)
Delivers MIL-003 (lecture Step 2): an alert e-mail with title, price and buy link is sent over SMTP (port 587, STARTTLS) when the price is below the target 100. SMTP address, e-mail address and password are read from `.env` with python-dotenv (`.env.example` lists them). Tests use fakes and never open a network or SMTP connection.

Review: code against QC-PY-001 as RC-012 (Go, autonomous, not independent). 33 pytest tests, ruff and mypy --strict pass. The Step 2 screenshots come from a run with a stubbed SMTP connection; no real mail was sent.

Task: MIL-003#1
Task: MIL-003#2
Task: MIL-003#3
Task: MIL-003#4
Task: MIL-003#5
2026-10-28 14:44:18 +08:00
Tirsvad 8c53047084 Merge pull request 'MIL-002 scrape price (Step 1)' (#33) from mil-002-scrape-price into main
TirSystem/git-workflows: Sync GitHub mirror metadata / sync-metadata (push) Successful in 5s
2026-10-28 07:40:44 +01:00
Tirsvad 72c6a6dea7 Resolve pending commit links of MIL-002 2026-10-28 14:40:37 +08:00
Tirsvad 5ac60a43fc MIL-002 scrape price (Step 1)
Delivers MIL-002 (lecture Step 1): BeautifulSoup reads the title and the price (as a float, 99.99) from the practice page. Layers: domain (Product, errors), application (ports, read_product), infrastructure (scraper, HTTP client), main as composition root. Tests use a trimmed fixture of the practice page and never the network.

Review: code against QC-PY-001 as RC-011 (Go, autonomous, not independent). 15 pytest tests, ruff and mypy --strict pass; a real run printed 99.99. Screenshots: docs/images/step-1-*.png.

Task: MIL-002#1
Task: MIL-002#2
Task: MIL-002#3
Task: MIL-002#4
Task: MIL-002#5
2026-10-28 14:40:33 +08:00
Tirsvad 62812d6af7 Merge pull request 'MIL-001 foundation' (#32) from mil-001-foundation into main
TirSystem/git-workflows: Sync GitHub mirror metadata / sync-metadata (push) Successful in 7s
2026-10-28 07:37:40 +01:00
Tirsvad c568a44ab8 Resolve pending commit link of RC-010 2026-10-28 14:37:14 +08:00
Tirsvad 88d5fcaddb Set up the project foundation (MIL-001)
pyproject.toml (Python >=3.13, src layout, dev extra), constants.py,
.gitignore, .env.example, Doxyfile, README from the framework template,
smoke tests, and the code review RC-010.

Task: MIL-001#1
Task: MIL-001#2
Task: MIL-001#3
Task: MIL-001#4
Task: MIL-001#5
Task: MIL-001#6
2026-10-28 14:36:58 +08:00
Tirsvad 956f4d2ffd Merge pull request 'Add the project baseline (BC, SA, PP, MIL-001 to MIL-006)' (#1) from baseline-plan into main
TirSystem/git-workflows: Sync GitHub mirror metadata / sync-metadata (push) Successful in 6s
2026-10-28 07:31:52 +01:00
Tirsvad ea4523ba5c Resolve pending commit links of the baseline 2026-10-28 14:31:16 +08:00
Tirsvad f9765fd374 Add the project baseline: Business Case, Stakeholder Analysis, Project Plan, six milestones and their reviews 2026-10-28 14:31:08 +08:00
Tirsvad 1e0c5e0bd0 Initial commit 2026-10-28 07:12:40 +01:00