MIL-001 Project setup #17

Merged
Tirsvad merged 2 commits from mil-001-project-setup into main 2026-11-04 05:41:14 +01:00
24 changed files with 1500 additions and 1 deletions
+26
View File
@@ -0,0 +1,26 @@
# Secrets: personal tokens and credentials, never committed
.env
.env.*
# Python
__pycache__/
*.py[cod]
*.egg-info/
build/
dist/
.pytest_cache/
.coverage
htmlcov/
# Virtual environments
.venv/
venv/
# Doxygen output
docs/doxygen/
# Editors and OS
.idea/
.vscode/
.DS_Store
Thumbs.db
+3
View File
@@ -0,0 +1,3 @@
[submodule "framework"]
path = framework
url = ssh://git@git.tirsystem.com:10022/TirSystem/SQA-QC-Framework.git
+14
View File
@@ -0,0 +1,14 @@
# Minimal Doxygen configuration. Generate the API docs with: doxygen Doxyfile
PROJECT_NAME = "Instagram Followers"
PROJECT_BRIEF = "Day 52: Selenium bot that follows the followers of a target account"
OUTPUT_DIRECTORY = docs/doxygen
INPUT = src
FILE_PATTERNS = *.py
RECURSIVE = YES
OPTIMIZE_OUTPUT_JAVA = YES
EXTRACT_ALL = YES
EXTRACT_PRIVATE = NO
GENERATE_HTML = YES
GENERATE_LATEX = NO
QUIET = YES
WARN_IF_UNDOCUMENTED = YES
+114 -1
View File
@@ -1,2 +1,115 @@
# 052-instagram-followers
# 🚀 Instagram Followers
A Python Selenium bot from Day 52 of Udemy's "100 Days of Code: The Complete Python Pro Bootcamp": it logs in to the Share-a-Naan mock service, opens a target account and follows each of its followers. It is for course participants who want readable, runnable code and for visitors looking for ideas.
## 📚 Table of Contents
- [Overview](#-overview)
- [Requirements](#-requirements)
- [Setup](#-setup)
- [Run](#-run)
- [Tests](#-tests)
- [License](#-license)
- [Links](#-links)
- [Appendix: Project documents](#-appendix-project-documents)
## 🧭 Overview
The assignment has five steps: get credentials, create the `InstaFollower` class, log in, find the followers of the target account and follow them. The code keeps the assignment's names (`InstaFollower`, `login`, `find_followers`, `follow`).
- `src/instagram_followers/` holds the bot and `constants.py`.
- `tests/` holds the pytest tests, which use a fake driver and need no browser or network.
- `docs/` holds the project documents and the wiki (English, Danish and Bahasa Malaysia).
The bot targets the mock service Share-a-Naan. Running bots against the real Instagram can get an account banned and is not supported.
## 📋 Requirements
- Python 3.13 or newer.
- Google Chrome (Selenium 4 downloads a matching driver by itself).
- A Share-a-Naan account from the mock dashboard (`https://app.100daysofpython.dev/`).
## 🛠️ Setup
Create and use a local virtual environment named `.venv`, then upgrade pip and install the project with its test tools.
```bash
python -m venv .venv
```
Activate it (Windows PowerShell: `.venv\Scripts\Activate.ps1`; Git Bash, Linux, macOS: `source .venv/bin/activate` or `source .venv/Scripts/activate`).
```bash
python -m pip install --upgrade pip
```
```bash
python -m pip install -e ".[dev]"
```
Credentials are read from environment variables, never from the code. Do not commit a `.env` file; it is ignored by git.
```bash
export INSTA_USERNAME="your_email"
export INSTA_PASSWORD="your_password"
```
## ▶️ Run
```bash
python -m instagram_followers.main
```
Run it sparingly and log out between test runs by hand.
## 🧪 Tests
```bash
python -m pytest
```
API documentation can be generated with `doxygen Doxyfile` (output in `docs/doxygen/`).
## 📄 License
AGPL-3.0, see [LICENSE][license].
## 🔗 Links
- [Repository][repository]
- [Documentation][documentation]
- [Issue tracker][issues]
## 📎 Appendix: Project documents
The documents a newcomer needs, in reading order.
| Document | What it tells you |
| --- | --- |
| [AGENTS.md][agents] | The rules AI agents follow in this repository |
| [Business Case][BC-001] | Why the project exists, its scope and success criteria |
| [Stakeholder Analysis][SA-001] | Who is involved; the stakeholder IDs used for owners and reviewers |
| [Project Plan][PP-001] | The gateways and their schedule |
| [Milestones][milestones] | One document per gateway: Go/No-Go criteria and tasks |
| [Artifact registry][registry] | Where each artifact type lives, the next version, the PO language and domain |
| [Domain dictionary][DICT-001] | The PO terms and the IT terms |
| [Traceability matrix][TM-001] | How the artifacts link and when each was last reviewed |
| [Framework README][framework-readme] | The framework this project uses |
| [Framework changelog][framework-changelog] | What changed in each framework release |
---
[license]: ./LICENSE
[repository]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers
[documentation]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/wiki
[issues]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/issues
[agents]: ./AGENTS.md
[BC-001]: ./docs/business-case.md
[SA-001]: ./docs/stakeholder-analysis.md
[PP-001]: ./docs/project-plan.md
[milestones]: ./docs/milestones/
[registry]: ./docs/artifact-registry.md
[DICT-001]: ./docs/dictionary.md
[TM-001]: ./docs/sqa/traceability-matrix.md
[framework-readme]: ./framework/README.md
[framework-changelog]: ./framework/CHANGELOG.md
+61
View File
@@ -0,0 +1,61 @@
# Artifact Registry
This project's artifact state. Types, short names and `CrossReference
Candidates` come from the framework catalog
(`framework/registry/artifact-catalog.md`); this file only records where
each document lives in *this* project and the next version to use.
Delete rows for types you don't use. Add a row the first time you create a
document of a type. `Primary File` may contain a glob (e.g.
`docs/use-cases/uc-*/uc.md`); `framework/scripts/find-crossreferences.sh` reads it.
| Short Name | Artifact Type | Primary File | Next Available Version |
| --- | --- | --- | --- |
| BC | Business Case | docs/business-case.md | 002 |
| SA | Stakeholder Analysis | docs/stakeholder-analysis.md | 002 |
| PP | Project Plan | docs/project-plan.md | 002 |
| MIL | Milestone / Gateway | docs/milestones/*.md | 005 |
| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 009 |
| DICT | Domain Dictionary | docs/dictionary.md | 002 |
| TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 |
## Languages
Set the PO language when the project starts; `project-planning` asks for it
if it is missing. An artifact of a type marked "Written in the PO language"
exists once, in that language, under its normal name (`business-case.md`); the
`artifact` skill ("One file per artifact") has the rule.
| Setting | Value |
| --- | --- |
| PO language | en |
| PO domain | it |
| High-level register | IT Executive English |
| Technical register | IT Professional English |
| Wiki languages | en, da, ms |
Every artifact of a type marked "Yes" below states its language and domain in
its `Language` and `Domain` Metadata rows; `new-artifact.sh` fills them from
`PO language` and `PO domain`. `Language` is a BCP 47 code (`da`, `en`).
`Domain` is a value from this list; add a row to introduce a domain, so a
reviewer can see at once which professional vocabulary a document uses.
| Domain | Meaning |
| --- | --- |
| it | Software and IT |
| medical | Healthcare and medical devices |
| construction | Construction and civil engineering |
| Artifact types | Register | Written in the PO language |
| --- | --- | --- |
| BC, KPI, PP, MIL | IT Executive English | Yes |
| SA, BMC, BPMN, UCD, US, UC, SSD, DM, RA, GOV, DICT | IT Professional English | Yes |
| OC, SD, DCD, ERD, TP, AD, ADR, TM, RC, QC, source code | IT Professional English | No |
## Notes
- "Next Available Version" is the zero-padded (3-digit) version to use the
*next* time a new document of that type is created. Increment it only when
a brand-new document is created, not when an existing document's
`## Version History` gets a row.
- `ADR` uses 4 digits (`0001`); `RC` is sequential across all artifact types.
+132
View File
@@ -0,0 +1,132 @@
# Business Case
## Metadata
| Key | Value |
| --- | --- |
| ID | BC-001 |
| CrossReference | [SA-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Deprecated | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
| 2026-11-04 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Accepted on RC-001 (Go)<br>Mode: autonomous, not independent | [4cd695e] |
---
## Executive Summary
Day 52 of Udemy's "100 Days of Code: The Complete Python Pro Bootcamp" asks the course participant to build an Instagram follower bot with Selenium. The bot logs in, opens a target account, scrolls its followers list and follows each follower. This project delivers that assignment as a readable, runnable, tested Python repository against the Share-a-Naan mock service, with a README and a three-language wiki (English, Danish, Bahasa Malaysia) that explain what each lecture step teaches.
## Methodological and Standards Foundation
The project follows the software quality assurance (SQA) and quality control (QC) framework mounted at `framework/`: artifacts are reviewed against their QC checklists, and quality criteria are tagged with ISO/IEC 25010:2023 characteristics. Code is structured by Clean Architecture and reviewed against `QC-PY-001` (Python).
## Problem Statement
- The assignment is described only as lecture prose; there is no tested, documented reference solution to compare against.
- Following accounts by hand does not scale, and automating it against the real Instagram risks an account ban and breaks when XPaths change.
- Course solutions shared online often lack tests, setup instructions and an explanation of what was learned.
## Business Opportunity
A small, well-documented repository helps the participant prove the skill, helps other course participants compare solutions, and gives GitHub visitors an example of a Selenium bot that is testable and safe to run against a mock service.
## Objectives
1. Deliver the `InstaFollower` class with `login()`, `find_followers()` and `follow()` as the assignment names them.
2. Run safely against the Share-a-Naan mock; the real Instagram is out of the default path.
3. Keep all constants in `constants.py` and all secrets out of the repository.
4. Test the logic with pytest without a live browser or network.
5. Document run and test instructions, including a local `.venv`, in the README.
6. Publish a wiki in English, Danish and Bahasa Malaysia, with a screenshot per lecture step and a note on what each step teaches.
7. Set a repository description and topics on the git host.
## Scope
### In Scope
- Python 3.13 or newer, `venv`, `pyproject.toml`, Python `.gitignore`.
- Selenium bot for the Share-a-Naan mock (login, cookie/pop-up dismissal, follower modal scroll, follow with ElementClickIntercepted handling).
- pytest unit tests with a fake driver; Doxygen comments and a `Doxyfile`.
- README from the framework template; wiki in `en`, `da`, `ms`; screenshots per lecture step.
- Git host metadata (description, topics) and one pull request per milestone.
### Out of Scope
- Running the bot against the real Instagram, or any evasion of bot detection.
- Committing, printing or testing the contents of `.env` (tokens are for the maintainer's own use).
- Packaging for PyPI; any runtime dependency other than Selenium.
## Expected Benefits
### Tangible Benefits
- A runnable solution with passing tests and documented set-up.
- A wiki in three languages with one screenshot per lecture step.
### Intangible Benefits
- Practice with Selenium, XPath, exceptions and a class-based design.
- A reusable pattern for later bootcamp days.
## Strategic Alignment
The repository belongs to the Tirsvad-Udemy-100-days-of-code collection and shows consistent use of the SQA and QC framework on a small project.
## Success Criteria
| # | Criterion | Target | Measure |
| --- | --- | --- | --- |
| 1 | Unit tests pass | 100 % of tests green | `pytest` exit code 0 |
| 2 | Wiki completeness | 3 languages with the same page set | file listing in `docs/wiki/` |
| 3 | Lecture-step screenshots | one per step 1 to 5 in README and wiki | image files referenced |
| 4 | Secrets in repository | 0 | scan for token values |
| 5 | Runtime dependencies | only `selenium` | `pyproject.toml` |
## Risks
| Risk | Impact | Mitigation |
| --- | --- | --- |
| Share-a-Naan page layout differs from the lecture | Locators fail | Keep locators in `constants.py`; use `contains()` and `text()` |
| Login to the mock needs credentials the AI does not have | Screenshots cannot be captured | Credentials come from environment variables; capture screenshots of the public pages and mark what needs the owner's login |
| Token leaks into history | Security incident | `.env` in `.gitignore`; never read into code; stop on any exposure |
| GUI test takes the host desktop | Disturbs the user | Run the browser headless or in a container, as `gui-testing.md` says |
## Assumptions
- The Product Owner (S01) is also developer and reviewer, and reaches the other stakeholders.
- The git host accepts the token in `.env` for the repository and its wiki.
- Python 3.13 or newer is installed locally.
## Constraints
- Python 3.13 or newer; `venv`; `pytest`; constants in `constants.py`; `pyproject.toml`.
- Layout `src/`, `tests/`, `docs/`.
- Product Owner language English, domain IT.
- One branch and pull request per milestone.
## Cost–Benefit Assessment
| Costs | Benefits |
| --- | --- |
| Qualitative: a few hours of the participant's time and AI assistance; no licence cost. | Qualitative: a documented, tested learning artifact that other participants and visitors can reuse. |
## Stakeholders
| Stakeholder ID (SA) | Interest in this project |
| --- | --- |
| S01 | Owns the product, builds it and reviews it |
| S02 | Wants readable, runnable code and run instructions |
| S03 | Wants a clear description, topics and README, with no runtime dependencies |
## Recommendation
Proceed — the scope is small, the risk is contained by the mock service, and the deliverable is verifiable.
---
[SA-001]: ./stakeholder-analysis.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+46
View File
@@ -0,0 +1,46 @@
# Domain Dictionary (PO and IT terms)
## Metadata
| Key | Value |
| --- | --- |
| ID | DICT-001 |
| CrossReference | [BC-001], [SA-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Deprecated | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
| 2026-11-04 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Accepted on RC-004 (Go)<br>Mode: autonomous, not independent | [4cd695e] |
---
## Purpose and Scope
Maps each Product Owner (PO) term to its professional IT term. PO language: English (`en`), domain `it`. It covers the words of the Day 52 assignment and the IT terms used in code.
## Dictionary
| PO term | Language | IT term | Definition | Used as PO term in | Used as IT term in |
| --- | --- | --- | --- | --- | --- |
| follow | en | Follow action | Click the Follow button of an account so that it is followed. | BC, PP, MIL | PY |
| follower | en | Follower | An account that follows the target account. | BC, PP, MIL | PY |
| log in | en | Authenticate | Sign in to the service with a username and a password. | BC, PP, MIL | PY |
| mock service | en | Test double service | A practice copy of the real service that behaves like it but cannot harm a real account. | BC, PP, MIL | PY |
| pop-up | en | Modal dialog | A window that opens over the page and asks for an answer. | BC, PP, MIL | PY |
| target account | en | Source account | The account whose followers the bot goes through. | BC, PP, MIL | PY |
## Rules
- The Domain Model, use cases and user stories use the PO term; the Operation
Contract, Sequence Diagram, Design Class Diagram and ERD use the IT term.
- One IT term per PO term and one PO term per IT term; no synonyms.
- Rows are in ascending order of the PO term (case-insensitive, by the
alphabet of the PO language), so a term is found without searching.
---
[BC-001]: ./business-case.md
[SA-001]: ./stakeholder-analysis.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+71
View File
@@ -0,0 +1,71 @@
# MIL-001 Project setup
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-001 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Deprecated | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
| 2026-11-04 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Accepted on RC-005 (Go)<br>Mode: autonomous, not independent | [4cd695e] |
---
## Purpose
Decide whether the repository foundation is ready for code: configuration, tooling, documentation skeleton and git host metadata.
## Deliverable
Repository with `pyproject.toml` (Python 3.13 or newer, selenium runtime dependency, pytest dev extra), a Python `.gitignore` that excludes `.env` and `.venv`, a `Doxyfile`, a README skeleton from the framework template with `.venv` instructions, the baseline documents, and the repository description and topics on the git host.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | `pyproject.toml` declares `requires-python >=3.13` and only `selenium` as runtime dependency | `pip install -e .[dev]` succeeds | Missing or extra runtime dependency |
| 2 | `.gitignore` excludes `.env`, `.venv` and caches | `git check-ignore .env` prints the path | `.env` is trackable |
| 3 | Baseline documents are `Accepted` with `Go` reviews | RC records exist | Any baseline row is `Proposed` |
| 4 | Repository description and topics are set on the git host | API read-back shows both | Description or topics missing |
## Dependencies
| Depends on | Reason |
| --- | --- |
| none | First phase |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| Objective 3, 5, 7 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 |
## Target Date
2026-11-04 — within the one-week plan.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Add pyproject, gitignore and Doxyfile | Create `pyproject.toml` (Python 3.13 or newer, `selenium` runtime, `pytest` dev extra, `src` layout), a Python `.gitignore` that ignores `.env` and `.venv`, and a `Doxyfile` for `src/`. These satisfy the project constraints without touching `src/` or `tests/`. | No | |
| 2 | Write README skeleton with venv instructions | Fill the framework README template with the project purpose and how to create and use `.venv`, run `python -m pip install --upgrade pip`, install, run and test. Screenshots are added in MIL-003. | No | |
| 3 | Set repository description and topics | Set a description and topics (python, selenium, udemy, 100-days-of-code, instagram-bot, share-a-naan) on the Gitea repository through the API, using the token from `.env`. The token is read from the environment only and never written to the repository. | No | |
| 4 | Review baseline documents | Review Business Case, Stakeholder Analysis, Project Plan and milestones against their QC checklists and record the `RC-*` records. | No | |
---
[BC-001]: ../business-case.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+72
View File
@@ -0,0 +1,72 @@
# MIL-002 Follower bot
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-002 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Deprecated | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
| 2026-11-04 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Accepted on RC-006 (Go)<br>Mode: autonomous, not independent | [4cd695e] |
---
## Purpose
Decide whether the InstaFollower bot is implemented, tested and reviewed against the Python checklist.
## Deliverable
A `src/` package with `constants.py` and `InstaFollower` (`login`, `find_followers`, `follow`) and an entry point, pytest tests using a fake driver, and Doxygen comments; reviewed against `QC-PY-001`.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | `pytest` passes with no browser and no network | Exit code 0 | Any failing test |
| 2 | Constants (URLs, locators, delays) live only in `constants.py` | No literals elsewhere | Locator or URL literal in the class |
| 3 | Credentials come from environment variables, not from code | No secret in source | Hard-coded credential |
| 4 | The Python code review record is `Go` | RC verdict is Go | Verdict is No-Go |
## Dependencies
| Depends on | Reason |
| --- | --- |
| MIL-001 | Tooling and configuration must exist |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| Objective 1, 2, 3, 4 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 |
## Target Date
2026-11-05 — within the one-week plan.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Create constants module | Add `constants.py` with `SIMILAR_ACCOUNT`, `BASE_URL`, `LOGIN_URL`, locator XPaths using `contains()` and `text()`, delays and scroll settings. Credentials are read from the environment variables `INSTA_USERNAME` and `INSTA_PASSWORD`. | No | |
| 2 | Implement InstaFollower login | Create the class with a Selenium driver in `__init__` and a `login()` that dismisses the cookie banner, fills the Share-a-Naan form and dismisses follow-up pop-ups. | No | |
| 3 | Implement find_followers and follow | `find_followers()` opens the target account and scrolls the followers modal; `follow()` clicks each Follow button with a 1 second delay and handles `ElementClickInterceptedException` by clicking Cancel. | No | |
| 4 | Add entry point and pytest tests | Add `main.py` that runs the three methods in order, and unit tests with a fake driver for login, scrolling, follow and the intercepted-click path. | No | |
| 5 | Add Doxygen comments and review code | Document the public API with Doxygen comments, review against `QC-PY-001` and record the `RC-*`. | No | |
---
[BC-001]: ../business-case.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
@@ -0,0 +1,69 @@
# MIL-003 README and screenshots
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-003 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Deprecated | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
| 2026-11-04 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Accepted on RC-007 (Go)<br>Mode: autonomous, not independent | [4cd695e] |
---
## Purpose
Decide whether the README lets a reader install, run and test the project and see each lecture step.
## Deliverable
A completed `README.md` with run and test instructions and one screenshot per lecture step (1 to 5) stored under `docs/images/`.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | README follows the framework template and passes `check-readme.sh` | Script exits 0 | Script fails |
| 2 | One screenshot per lecture step 1 to 5 is referenced | 5 images exist | A step lacks an image |
| 3 | Instructions work from a fresh clone | Commands in README succeed | A command fails |
## Dependencies
| Depends on | Reason |
| --- | --- |
| MIL-002 | The bot must exist to be described |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| Objective 5, 6 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 |
## Target Date
2026-11-06 — within the one-week plan.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Capture screenshots per lecture step | Capture one screenshot per assignment step (credentials, class, login, followers modal, follow) from the Share-a-Naan mock using the built-in browser or a headless driver, never the desktop of the user. If the mock needs the owner login, stop and report. | No | |
| 2 | Complete README with steps and screenshots | Finish the README with install, run and test instructions and embed the screenshots with a short explanation per step. | No | |
| 3 | Validate README against framework check | Run `framework/scripts/check-readme.sh` and fix its findings. | No | |
---
[BC-001]: ../business-case.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+70
View File
@@ -0,0 +1,70 @@
# MIL-004 Wiki
## Metadata
| Key | Value |
| --- | --- |
| ID | MIL-004 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Deprecated | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
| 2026-11-04 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Accepted on RC-008 (Go)<br>Mode: autonomous, not independent | [4cd695e] |
---
## Purpose
Decide whether the wiki is complete in English, Danish and Bahasa Malaysia and says what each lecture step teaches.
## Deliverable
`docs/wiki/` with Home, one page per lecture step and `_Sidebar.md`, in English (no suffix), Danish (`-da`) and Bahasa Malaysia (`-ms`), with the screenshots, reviewed against `QC-WIKI-001`.
## Go / No-Go Criteria
| # | Criterion (objectively checkable) | Go | No-Go |
| --- | --- | --- | --- |
| 1 | Same page set in en, da and ms | File listing matches | A page is missing in a language |
| 2 | Every step page has a screenshot and a "what we gained" section | Present on each page | Missing section |
| 3 | Sidebar follows the framework shape | `QC-WIKI-001` item passes | Sidebar defect |
## Dependencies
| Depends on | Reason |
| --- | --- |
| MIL-003 | Screenshots and README text are reused |
## Traceability
| Business Case objective / KPI / user story | Reference |
| --- | --- |
| Objective 6 | [BC-001] |
## Ownership
| Role | Stakeholder ID (SA) |
| --- | --- |
| Owner | S01 |
| Approving reviewer | S01 |
## Target Date
2026-11-07 — within the one-week plan.
## Tasks
| # | Task | Summary | Needs its own Use Case/User Story? | Reference |
| --- | --- | --- | --- | --- |
| 1 | Write English wiki pages | Write Home and one page per lecture step 1 to 5 with the screenshot and a section on what was gained (Selenium locators, waits, scrolling a modal, exception handling), plus `_Sidebar.md`. | No | |
| 2 | Translate wiki to Danish | Create the same page set with the `-da` suffix; code, commands and file names stay in English. | No | |
| 3 | Translate wiki to Bahasa Malaysia | Create the same page set with the `-ms` suffix; code, commands and file names stay in English. | No | |
| 4 | Review wiki against QC-WIKI-001 | Check page sets, language lines, sidebar and links and record the `RC-*`. | No | |
---
[BC-001]: ../business-case.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+91
View File
@@ -0,0 +1,91 @@
# Project Plan
## Metadata
| Key | Value |
| --- | --- |
| ID | PP-001 |
| CrossReference | [BC-001], [SA-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Deprecated | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
| 2026-11-04 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Accepted on RC-003 (Go)<br>Mode: autonomous, not independent | [4cd695e] |
---
## Purpose
Schedule the four phases that deliver the Instagram follower bot within the Business Case constraints (Python 3.13 or newer, one branch and pull request per milestone).
## Planning Assumptions
- Week 1 starts 2026-11-04 and the plan ends by 2026-11-07 (source: the user prompt asks for milestones with a branch each; the dates are the AI proposal accepted by S01 in chat).
- One phase per day; each phase is one branch and one pull request (source: [BC-001] Constraints).
- Tasks are plain technical tasks (`No` in the use-case column): the assignment is a single goal whose steps the lecture gives, so no separate use case or user story is modelled.
## Gateway Schedule
| Gateway | Document | Window | Decision date | Owner | Stories | Main deliverable | Milestone |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Project setup | [MIL-001] | 2026-11-04 | 2026-11-04 | S01 | none (technical tasks) | Config, tooling, README skeleton, repo metadata | not yet synced |
| Follower bot | [MIL-002] | 2026-11-05 | 2026-11-05 | S01 | none (technical tasks) | InstaFollower bot, tests, Doxygen comments | not yet synced |
| README and screenshots | [MIL-003] | 2026-11-06 | 2026-11-06 | S01 | none (technical tasks) | README with run/test steps and 5 screenshots | not yet synced |
| Wiki | [MIL-004] | 2026-11-07 | 2026-11-07 | S01 | none (technical tasks) | Wiki in en, da, ms with screenshots | not yet synced |
```plantuml
@startgantt
Project starts 2026-11-04
[Project setup] starts 2026-11-04 and ends 2026-11-04
[Follower bot] starts 2026-11-05 and ends 2026-11-05
[README and screenshots] starts 2026-11-06 and ends 2026-11-06
[Wiki] starts 2026-11-07 and ends 2026-11-07
[MIL-001 Go/No-Go] happens 2026-11-04
[MIL-002 Go/No-Go] happens 2026-11-05
[MIL-003 Go/No-Go] happens 2026-11-06
[MIL-004 Go/No-Go] happens 2026-11-07
@endgantt
```
## Scope Coverage
| Business Case scope item | Gateway |
| --- | --- |
| Python 3.13, venv, pyproject, .gitignore, Doxyfile | [MIL-001] |
| Git host description and topics | [MIL-001] |
| Selenium bot, pytest tests, Doxygen comments | [MIL-002] |
| README and screenshots | [MIL-003] |
| Wiki in en, da, ms | [MIL-004] |
## Dependencies
```
MIL-001 → MIL-002 → MIL-003 → MIL-004
```
A No-Go on a phase stops the later phases until it is fixed and re-reviewed, and each later date moves by the days lost. S01 decides any move of the end date 2026-11-07.
## Plan Risks
| Risk | Impact | Mitigation |
| --- | --- | --- |
| Share-a-Naan needs the owner login for screenshots (Business Case risk: layout or login differs from the lecture) | MIL-003 and MIL-004 blocked | Stop and report; resume when credentials are provided in the environment |
| The wiki is not enabled on the host | Wiki not visible | Check at MIL-004 and report |
| The git host token lacks a scope (Business Case risk: token handling) | Metadata or issues fail | Report which call failed; never print the token |
## Open Issues
- The `origin` path is `Tirsvad-Udemy-100-days-of-code/052-instagram-followers`; the prompt names `Tirsvad-Udemy-100_days_of_code`. The existing `origin` is used unless the user says otherwise.
- Share-a-Naan selectors are unknown until the page is inspected; locators are verified in MIL-002 and MIL-003.
---
[BC-001]: ./business-case.md
[SA-001]: ./stakeholder-analysis.md
[MIL-001]: ./milestones/mil-001-project-setup.md
[MIL-002]: ./milestones/mil-002-follower-bot.md
[MIL-003]: ./milestones/mil-003-readme-and-screenshots.md
[MIL-004]: ./milestones/mil-004-wiki.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+68
View File
@@ -0,0 +1,68 @@
# Review of BC-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-001 |
| CrossReference | [BC-001], [QC-BC-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
---
## Artifact Under Review
- Instance reviewed: [BC-001]
- Checklist used: [QC-BC-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: none (the stand-in for S01 reads English and the IT domain)
- Mode: autonomous, not independent (reviewer is AI as stand-in for S01)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | ROI/Cost-Benefit analysis is quantitative, or where qualitative, is explicitly justified | Pass | Cost-Benefit is qualitative and the table says why it is enough for a no-licence learning project. |
| 2 | Risks are identified with documented impact and mitigation | Pass | Four risks, each with impact and mitigation. |
| 3 | Success criteria are measurable, stating explicit targets rather than vague aspirations | Pass | Five criteria with targets and measures. |
| 4 | Scope explicitly separates In Scope vs Out of Scope | Pass | `### In Scope` and `### Out of Scope` present. |
| 5 | Stakeholders are cross-referenced to Stakeholder Analysis IDs rather than re-described inline | Pass | Stakeholders table cites S01, S02, S03. |
| 6 | Methodology and quality-standard foundation are stated explicitly (e.g. ISO/IEC 25010, Larman) | Pass | SQA/QC framework and ISO/IEC 25010 stated. |
| 7 | Assumptions and constraints are explicit and clearly distinguished from one another | Pass | Assumptions and Constraints are separate lists. |
| 8 | Document supports executive decision-making with a clear, unambiguous recommendation | Pass | Recommendation: Proceed, with rationale. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Prose and table cells are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register matches the registry row for this type. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms follow [DICT-001] (follower, follow, log in, mock service, pop-up, target account). |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | No change of language since the first version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in for S01 reads English and knows the IT domain; open to challenge by S01 in the run summary. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out on first use. |
## Overall Verdict
Go — Every Mandatory criterion passes.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None; no Fail and no condition. | S01 | - |
---
[BC-001]: ../../business-case.md
[QC-BC-001]: ../../../framework/qc/artifacts/qc-business-case.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+69
View File
@@ -0,0 +1,69 @@
# Review of SA-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-002 |
| CrossReference | [SA-001], [QC-SA-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
---
## Artifact Under Review
- Instance reviewed: [SA-001]
- Checklist used: [QC-SA-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: none (the stand-in for S01 reads English and the IT domain)
- Mode: autonomous, not independent (reviewer is AI as stand-in for S01)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | Power/Interest grid is filled for every stakeholder, with no gaps or unclassified entries | Pass | Meets the criterion; see the sections of [SA-001]. |
| 2 | Each stakeholder is assigned a unique, stable ID (e.g. S01-S11 style) reusable for RACI assignments in other artifacts | Pass | Meets the criterion; see the sections of [SA-001]. |
| 3 | Roles and organizational context are defined with explicit Power and Interest levels, not just narrative description | Pass | Meets the criterion; see the sections of [SA-001]. |
| 4 | Communication needs (channel, frequency, deliverable type) are mapped to project phases or milestones | Pass | Meets the criterion; see the sections of [SA-001]. |
| 5 | Conflicting stakeholder interests are identified with documented mitigation or resolution strategies | Pass | Meets the criterion; see the sections of [SA-001]. |
| 6 | Stakeholder concerns are explicitly traced to Business Case objectives | Pass | Meets the criterion; see the sections of [SA-001]. |
| 7 | Primary concerns are expressed in both business language and a recognized quality-attribute mapping (e.g. FURPS+) | Pass | Meets the criterion; see the sections of [SA-001]. |
| 8 | Document is understandable and navigable by non-technical stakeholders reviewing their own entry | Pass | Meets the criterion; see the sections of [SA-001]. |
| 9 | Every concern has a stable ID (`CN-NNN`) in the concern register, with the stakeholder who raised it; IDs are never renumbered or reused | Pass | Meets the criterion; see the sections of [SA-001]. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Prose and table cells are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register matches the registry row for this type. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms follow [DICT-001] (follower, follow, log in, mock service, pop-up, target account). |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | No change of language since the first version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in for S01 reads English and knows the IT domain; open to challenge by S01 in the run summary. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out on first use. |
## Overall Verdict
Go — Every Mandatory criterion passes; S01 to S03 classified, CN-001 to CN-008 traced to Business Case objectives.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None; no Fail and no condition. | S01 | - |
---
[SA-001]: ../../stakeholder-analysis.md
[QC-SA-001]: ../../../framework/qc/artifacts/qc-stakeholder-analysis.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+75
View File
@@ -0,0 +1,75 @@
# Review of PP-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-003 |
| CrossReference | [PP-001], [QC-PP-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
---
## Artifact Under Review
- Instance reviewed: [PP-001]
- Checklist used: [QC-PP-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: none (the stand-in for S01 reads English and the IT domain)
- Mode: autonomous, not independent (reviewer is AI as stand-in for S01)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The plan states its start date, end date and the constraint it must fit | Pass | Meets the criterion; see the sections of [PP-001]. |
| 2 | Every milestone or gateway is listed once with its document, decision date and owner | Pass | Meets the criterion; see the sections of [PP-001]. |
| 3 | Every decision date lies inside the plan's window and is consistent with the dates in the linked `MIL-*` document | Pass | Meets the criterion; see the sections of [PP-001]. |
| 4 | Every in-scope item of the Business Case is delivered at a named gateway (scope coverage) | Pass | Meets the criterion; see the sections of [PP-001]. |
| 5 | Dependencies between gateways are stated, acyclic and consistent with the schedule order | Pass | Meets the criterion; see the sections of [PP-001]. |
| 6 | The plan states what happens to later gateways and to the end date when a gateway is No-Go | Pass | No-Go stops later phases; S01 decides any move of the end date. |
| 7 | Owners, reviewers and escalation roles use Stakeholder Analysis IDs and match the governance RACI | N-A | The project has no governance document; every owner is S01, a Stakeholder Analysis ID. No RACI to match. |
| 8 | Planning assumptions are listed with their source, and a changed baseline is recorded with its reason | Pass | Meets the criterion; see the sections of [PP-001]. |
| 9 | Plan risks are listed with impact and a mitigation, and trace to Business Case risks where they come from there | Pass | Meets the criterion; see the sections of [PP-001]. |
| 10 | Open issues are listed, and none contradicts a statement elsewhere in the plan | Pass | Meets the criterion; see the sections of [PP-001]. |
| 11 | Each gateway's main deliverable is stated and matches the deliverable of its `MIL-*` document | Pass | Meets the criterion; see the sections of [PP-001]. |
| 12 | Gateways that deliver user stories name them, and those that do not say why | Pass | Meets the criterion; see the sections of [PP-001]. |
| 13 | The schedule view (table, Gantt) and the dependency view agree with each other | Pass | Meets the criterion; see the sections of [PP-001]. |
| 14 | Each gateway is linked to its issue-tracker milestone, or marked as not yet synced | Pass | Meets the criterion; see the sections of [PP-001]. |
| 15 | The plan is a singleton: one Project Plan per project, changes recorded in Version History | Pass | Meets the criterion; see the sections of [PP-001]. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Prose and table cells are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register matches the registry row for this type. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms follow [DICT-001] (follower, follow, log in, mock service, pop-up, target account). |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | No change of language since the first version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in for S01 reads English and knows the IT domain; open to challenge by S01 in the run summary. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out on first use. |
## Overall Verdict
Go — Every Mandatory criterion passes or is N-A with a stated reason.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None; no Fail and no condition. | S01 | - |
---
[PP-001]: ../../project-plan.md
[QC-PP-001]: ../../../framework/qc/artifacts/qc-project-plan.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+68
View File
@@ -0,0 +1,68 @@
# Review of DICT-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-004 |
| CrossReference | [DICT-001], [QC-DICT-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
---
## Artifact Under Review
- Instance reviewed: [DICT-001]
- Checklist used: [QC-DICT-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: none (the stand-in for S01 reads English and the IT domain)
- Mode: autonomous, not independent (reviewer is AI as stand-in for S01)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | Every row has a PO term, its language, an IT term and a definition | Pass | Meets the criterion; six rows, each complete. |
| 2 | Each PO term maps to exactly one IT term and the reverse (no synonyms) | Pass | Meets the criterion; six rows, each complete. |
| 3 | Every Domain Model concept has a row, and the Domain Model uses its PO term | N-A | The project has no Domain Model; it models no use cases ([PP-001]). |
| 4 | The Operation Contracts, Sequence Diagrams, Design Class Diagrams and ERD use the IT term, not the PO term | N-A | No OC, SD, DCD or ERD exists in this project. |
| 5 | Definitions are written in the PO language and are one sentence | Pass | Meets the criterion; six rows, each complete. |
| 6 | "Used as PO term in" and "Used as IT term in" name artifact types that exist in the project | Pass | Meets the criterion; six rows, each complete. |
| 7 | The dictionary's `Language` and `Domain` rows, and the language of every row, match the PO language and domain in the project registry | Pass | Meets the criterion; six rows, each complete. |
| 8 | The dictionary rows are in ascending order of the PO term (case-insensitive, by the alphabet of the PO language) | Pass | follow, follower, log in, mock service, pop-up, target account: ascending. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Prose and table cells are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register matches the registry row for this type. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms follow [DICT-001] (follower, follow, log in, mock service, pop-up, target account). |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | No change of language since the first version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in for S01 reads English and knows the IT domain; open to challenge by S01 in the run summary. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out on first use. |
## Overall Verdict
Go — Mandatory criteria pass; 3 and 4 are N-A because the artifacts they check do not exist.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None; no Fail and no condition. | S01 | - |
---
[DICT-001]: ../../dictionary.md
[QC-DICT-001]: ../../../framework/qc/artifacts/qc-dictionary.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+66
View File
@@ -0,0 +1,66 @@
# Review of MIL-001
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-005 |
| CrossReference | [MIL-001], [QC-MIL-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
---
## Artifact Under Review
- Instance reviewed: [MIL-001]
- Checklist used: [QC-MIL-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: none (the stand-in for S01 reads English and the IT domain)
- Mode: autonomous, not independent (reviewer is AI as stand-in for S01)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Prose and table cells are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register matches the registry row for this type. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms follow [DICT-001] (follower, follow, log in, mock service, pop-up, target account). |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | No change of language since the first version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in for S01 reads English and knows the IT domain; open to challenge by S01 in the run summary. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out on first use. |
## Overall Verdict
Go — Every Mandatory criterion passes.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None; no Fail and no condition. | S01 | - |
---
[MIL-001]: ../../milestones/mil-001-project-setup.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+66
View File
@@ -0,0 +1,66 @@
# Review of MIL-002
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-006 |
| CrossReference | [MIL-002], [QC-MIL-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
---
## Artifact Under Review
- Instance reviewed: [MIL-002]
- Checklist used: [QC-MIL-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: none (the stand-in for S01 reads English and the IT domain)
- Mode: autonomous, not independent (reviewer is AI as stand-in for S01)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Prose and table cells are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register matches the registry row for this type. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms follow [DICT-001] (follower, follow, log in, mock service, pop-up, target account). |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | No change of language since the first version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in for S01 reads English and knows the IT domain; open to challenge by S01 in the run summary. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out on first use. |
## Overall Verdict
Go — Every Mandatory criterion passes.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None; no Fail and no condition. | S01 | - |
---
[MIL-002]: ../../milestones/mil-002-follower-bot.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+66
View File
@@ -0,0 +1,66 @@
# Review of MIL-003
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-007 |
| CrossReference | [MIL-003], [QC-MIL-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
---
## Artifact Under Review
- Instance reviewed: [MIL-003]
- Checklist used: [QC-MIL-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: none (the stand-in for S01 reads English and the IT domain)
- Mode: autonomous, not independent (reviewer is AI as stand-in for S01)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Prose and table cells are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register matches the registry row for this type. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms follow [DICT-001] (follower, follow, log in, mock service, pop-up, target account). |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | No change of language since the first version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in for S01 reads English and knows the IT domain; open to challenge by S01 in the run summary. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out on first use. |
## Overall Verdict
Go — Every Mandatory criterion passes.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None; no Fail and no condition. | S01 | - |
---
[MIL-003]: ../../milestones/mil-003-readme-and-screenshots.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+66
View File
@@ -0,0 +1,66 @@
# Review of MIL-004
## Metadata
| Key | Value |
| --- | --- |
| ID | RC-008 |
| CrossReference | [MIL-004], [QC-MIL-001], [QC-LANG-001] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
---
## Artifact Under Review
- Instance reviewed: [MIL-004]
- Checklist used: [QC-MIL-001]
- Scope: full review
- Language and domain: en / it
- Language reviewer: none (the stand-in for S01 reads English and the IT domain)
- Mode: autonomous, not independent (reviewer is AI as stand-in for S01)
## Checklist Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | A concrete deliverable is defined for every gate | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 3 | Dependencies on other milestones are explicitly mapped | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 5 | Milestone owner and approving reviewer are identified | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
| 6 | Milestone has a defined target date consistent with project constraints | Pass | Deliverable, checkable Go/No-Go rows, dependency, objective trace, S01 owner and reviewer, and a date inside the plan window are present. |
## Language and Domain Results
| # | Criterion | Status | Evidence/Notes |
| --- | --- | --- | --- |
| 1 | The Metadata table has a `Language` row and a `Domain` row, and neither is a placeholder | Pass | `Language` is `en` and `Domain` is `it` in Metadata. |
| 2 | `Language` is a BCP 47 code and `Domain` is a value from the registry's domain list | Pass | `en` is a BCP 47 code; `it` is in the registry domain list. |
| 3 | The content (prose and table cells) is written in the stated language | Pass | Prose and table cells are English. |
| 4 | The register matches the one the registry gives for the artifact type | Pass | Register matches the registry row for this type. |
| 5 | Domain terms are the PO terms of the domain's dictionary, with no synonyms | Pass | PO terms follow [DICT-001] (follower, follow, log in, mock service, pop-up, target account). |
| 6 | Metadata keys, section headings, IDs and statuses are in English | Pass | Metadata keys, headings, IDs and statuses are English. |
| 7 | No translated twin (`<name>.<language>.md`) exists beside the document | Pass | No translated twin exists in `docs/`. |
| 8 | A change of language or domain since the previous accepted version has a Version History row and was reviewed again | Pass | No change of language since the first version. |
| 9 | A reviewer competent in the domain, and in the language, has confirmed that the domain terms are used correctly | Pass | The stand-in for S01 reads English and knows the IT domain; open to challenge by S01 in the run summary. |
| 10 | Abbreviations are spelled out on first use, in the stated language | Pass | Abbreviations are spelled out on first use. |
## Overall Verdict
Go — Every Mandatory criterion passes.
## Action Items
| Action | Owner | Due |
| --- | --- | --- |
| None; no Fail and no condition. | S01 | - |
---
[MIL-004]: ../../milestones/mil-004-wiki.md
[QC-MIL-001]: ../../../framework/qc/artifacts/qc-milestones-gateways.md
[QC-LANG-001]: ../../../framework/qc/artifacts/qc-language-domain.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+75
View File
@@ -0,0 +1,75 @@
# Traceability Matrix
## Metadata
| Key | Value |
| --- | --- |
| ID | TM-001 |
| CrossReference | [BC-001], [SA-001], [PP-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [DICT-001], [RC-001], [RC-002], [RC-003], [RC-004], [RC-005], [RC-006], [RC-007], [RC-008] |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Proposed | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
---
## Purpose
Tracks backward/forward links between artifact instances so that the Business Case's
cross-artifact traceability success criterion is measurable. A row is added or
updated whenever an artifact instance is created or reviewed.
## Traceability Table
| Artifact Instance | Type | Language | Domain | Upstream (Backward Link) | Downstream (Forward Link) | Last Reviewed (RC-ID) |
| --- | --- | --- | --- | --- | --- | --- |
| [BC-001] | BC | en | it | - | [SA-001], [PP-001] | [RC-001] |
| [SA-001] | SA | en | it | [BC-001] | [PP-001] | [RC-002] |
| [PP-001] | PP | en | it | [BC-001], [SA-001] | [MIL-001], [MIL-002], [MIL-003], [MIL-004] | [RC-003] |
| [DICT-001] | DICT | en | it | [BC-001] | - | [RC-004] |
| [MIL-001] | MIL | en | it | [PP-001] | - | [RC-005] |
| [MIL-002] | MIL | en | it | [PP-001], [MIL-001] | - | [RC-006] |
| [MIL-003] | MIL | en | it | [PP-001], [MIL-002] | - | [RC-007] |
| [MIL-004] | MIL | en | it | [PP-001], [MIL-003] | - | [RC-008] |
## Concern Coverage
| Concern (CN-ID) | Views that answer it | Decisions (ADR) | Quality check (TP) | Status |
| --- | --- | --- | --- | --- |
| CN-001 | [MIL-002] | - | - | Gap |
| CN-002 | [MIL-001], [MIL-002] | - | - | Gap |
| CN-003 | [MIL-002] | - | - | Gap |
| CN-004 | [MIL-001], [MIL-003] | - | - | Gap |
| CN-005 | [MIL-001] | - | - | Gap |
| CN-006 | [MIL-001] | - | - | Gap |
| CN-007 | [MIL-002] | - | - | Gap |
| CN-008 | [MIL-004] | - | - | Gap |
## Open Inconsistencies
| # | Views | Inconsistency | Found in (RC-ID) | Status | Resolved in |
| --- | --- | --- | --- | --- | --- |
## Coverage Notes
No design views (use case, domain model, design class diagram) exist: the project models none, as [PP-001] states. A concern is `Gap` until the milestone that answers it is done. `-` in Upstream means foundational, in Downstream that nothing is built on it yet, and in Last Reviewed that no review record exists yet.
---
[BC-001]: ../business-case.md
[SA-001]: ../stakeholder-analysis.md
[PP-001]: ../project-plan.md
[DICT-001]: ../dictionary.md
[MIL-001]: ../milestones/mil-001-project-setup.md
[MIL-002]: ../milestones/mil-002-follower-bot.md
[MIL-003]: ../milestones/mil-003-readme-and-screenshots.md
[MIL-004]: ../milestones/mil-004-wiki.md
[RC-001]: ./reviews/rc-001-bc.md
[RC-002]: ./reviews/rc-002-sa.md
[RC-003]: ./reviews/rc-003-pp.md
[RC-004]: ./reviews/rc-004-dict.md
[RC-005]: ./reviews/rc-005-mil-001.md
[RC-006]: ./reviews/rc-006-mil-002.md
[RC-007]: ./reviews/rc-007-mil-003.md
[RC-008]: ./reviews/rc-008-mil-004.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
+86
View File
@@ -0,0 +1,86 @@
# Stakeholder Analysis
## Metadata
| Key | Value |
| --- | --- |
| ID | SA-001 |
| CrossReference | [BC-001] |
| Language | en |
| Domain | it |
## Version History
| Date | Status | Author | Reviewer | Change | Commit |
| --- | --- | --- | --- | --- | --- |
| 2026-11-04 | Deprecated | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Initial version | [4cd695e] |
| 2026-11-04 | Accepted | Jens Tirsvad Nielsen | S01 (AI as stand-in) | Accepted on RC-002 (Go)<br>Mode: autonomous, not independent | [4cd695e] |
---
## Purpose
Identify who is affected by the Instagram follower bot repository and what each needs, so the plan, the README and the wiki serve them. The method is a power/interest grid; each concern is mapped to a FURPS+ attribute.
## Stakeholder Summary Table
| ID | Name | Role/Title | Organization | Power Level | Interest Level | Quadrant | Primary Concern (Business Language) |
| --- | --- | --- | --- | --- | --- | --- | --- |
| S01 | Jens Tirsvad Nielsen | Course participant, Product Owner, developer and reviewer | Tirsvad | HIGH | HIGH | Manage Closely | A working, tested solution to the Day 52 assignment that proves the skill |
| S02 | Udemy coursists | Fellow course participants | Udemy course community | LOW | HIGH | Keep Informed | Readable, runnable code with the assignment's function names, and README instructions to run it |
| S03 | GitHub viewers | Repository browsers looking for ideas | Public | LOW | LOW | Monitor | A clear repository description, topics and README, and no runtime dependencies beyond need |
## Power/Interest Classification Rationale
- **Manage Closely (S01):** decides scope, builds and reviews everything.
- **Keep Informed (S02):** cannot change the project but depends on its readability and run instructions.
- **Monitor (S03):** browse occasionally; their needs are met by a good README, description and topics.
## Primary Concerns and FURPS+ Mapping
| Concern ID | Stakeholder | Concern | FURPS+ attribute |
| --- | --- | --- | --- |
| CN-001 | S01 | The bot follows the followers of a target account on the mock service | Functionality |
| CN-002 | S01 | Tokens and credentials never enter the repository | Functionality (security) |
| CN-003 | S02 | Code is readable and uses the assignment's names `InstaFollower`, `login`, `find_followers`, `follow` | Usability |
| CN-004 | S02 | Run and test instructions work from a fresh clone | Usability |
| CN-005 | S03 | Repository has a description, topics and a README | Usability |
| CN-006 | S03 | No runtime dependencies beyond Selenium | Supportability |
| CN-007 | S01 | Tests run without a browser or network | Reliability |
| CN-008 | S02 | The wiki explains what each lecture step teaches, in English, Danish and Bahasa Malaysia | Usability |
## Communication Requirements
| ID | Channel | Frequency | Deliverable | Phase / Milestone |
| --- | --- | --- | --- | --- |
| CM-001 | Chat summary | Per run | Merged pull requests, review verdicts, stand-in decisions | All milestones |
| CM-002 | README | Per release | Run and test instructions | MIL-003 |
| CM-003 | Wiki (en, da, ms) | Per release | Lecture steps and learning notes | MIL-004 |
| CM-004 | Repository page | Once | Description and topics | MIL-001 |
## Conflicting Interests and Mitigations
| Conflict | Stakeholders | Mitigation |
| --- | --- | --- |
| S02 wants the code to run against Instagram; the safe path is the mock | S01, S02 | Default to the Share-a-Naan mock; document that the real site risks a ban and is not supported |
| S03 wants no dependencies; Selenium is required | S03, S01 | Selenium is the only runtime dependency; dev tools are optional extras |
## Traceability Analysis
### Business Goal Alignment
| Stakeholder | Concern | Business Case objective |
| --- | --- | --- |
| S01 | CN-001 | Objective 1, 2 ([BC-001]) |
| S01 | CN-002 | Objective 3 ([BC-001]) |
| S01 | CN-007 | Objective 4 ([BC-001]) |
| S02 | CN-003, CN-004 | Objective 1, 5 ([BC-001]) |
| S02 | CN-008 | Objective 6 ([BC-001]) |
| S03 | CN-005, CN-006 | Objective 7 ([BC-001]) |
## Sign-Off
Pending review by S01 (AI as stand-in in autonomous mode).
---
[BC-001]: ./business-case.md
[4cd695e]: https://git.tirsystem.com/Tirsvad-Udemy-100-days-of-code/052-instagram-followers/commit/4cd695e8db91dd3f01f69e097cdf02098de2c144
Submodule
+1
Submodule framework added at 1bb460c27d
+25
View File
@@ -0,0 +1,25 @@
[build-system]
requires = ["setuptools>=68"]
build-backend = "setuptools.build_meta"
[project]
name = "instagram-followers"
version = "0.1.0"
description = "Day 52 of 100 Days of Code: a Selenium bot that follows the followers of a target account on the Share-a-Naan mock service."
readme = "README.md"
requires-python = ">=3.13"
license = { file = "LICENSE" }
dependencies = ["selenium>=4.20"]
[project.optional-dependencies]
dev = ["pytest>=8"]
[project.scripts]
instagram-followers = "instagram_followers.main:main"
[tool.setuptools.packages.find]
where = ["src"]
[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["src"]