GenAI workflow
- Specification
- Reviewed architecture plan
- Tests first, generation in small steps
- Check that a test fails when the code is broken
- Review of every diff
- Green CI on Linux, Windows and macOS before merge
- REVIEW.md and DECISIONS.md updated
How this portfolio is run: Scrum (backlog, sprints, reviews, metrics), risk management and the GenAI workflow.
Sprints 1 to 145 done; the rest is a forecast, in the order agreed with Charles on 6 October 2026. Two-week sprints in the plan; actual dates are those of the commits.
What is left to do, in sprint order. Each project is estimated in points (3, 5, 8 or 13) before being split into stories at the start of its sprint.
| Project | Estimate | Planned sprints | State |
|---|---|---|---|
| Osmose, a tactical RPG | 728 | S45-S60+S64-S219 | In progress |
| Documentation assistant (RAG) | 10 | S61-S62 | In progress |
Each sprint starts with a goal and ends with a review: what was delivered, the tests, what was found along the way. The full report is in the sprint's file (in French).
Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 219Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 218Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 217Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 216Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 215Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 214Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 213Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 212Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 211Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 210Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 209Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 208Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 207Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 206Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 205Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 204Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 203Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 202Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 201Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 200Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 199Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 198Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 197Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 196Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 195Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 194Ten classes replace the Mage, the Guard and the Sentinel: 220 classes in all, 3 choices at 30, 2 at 50, 2 at 100, delivered in waves of 4, 7 and 10 classes (D96).
Report of sprint 193the Talents tab becomes Specialisation, a tree read from left to right that divides: 3 choices at 30, 2 choices each at 50, a last evolution at 100 (D95).
Report of sprint 192the Talents tab becomes Specialisation, a tree read from left to right that divides: 3 choices at 30, 2 choices each at 50, a last evolution at 100 (D95).
Report of sprint 191the Talents tab becomes Specialisation, a tree read from left to right that divides: 3 choices at 30, 2 choices each at 50, a last evolution at 100 (D95).
Report of sprint 190compounds consume their parents, on Charles's decision of 2 November 2026 (D94).
Report of sprint 189compounds consume their parents, on Charles's decision of 2 November 2026 (D94).
Report of sprint 188compounds consume their parents, on Charles's decision of 2 November 2026 (D94).
Report of sprint 187the Elements and Path pages in place of the Talents page, designed by the game designer (projects/rpg/docs/elements-specialisations.md, v3) and approved by Charles: three tiers at 30, 50 and 100 (D93).
the Elements and Path pages in place of the Talents page, designed by the game designer (projects/rpg/docs/elements-specialisations.md, v3) and approved by Charles: three tiers at 30, 50 and 100 (D93).
the Elements and Path pages in place of the Talents page, designed by the game designer (projects/rpg/docs/elements-specialisations.md, v3) and approved by Charles: three tiers at 30, 50 and 100 (D93).
the Elements and Path pages in place of the Talents page, designed by the game designer (projects/rpg/docs/elements-specialisations.md, v3) and approved by Charles: three tiers at 30, 50 and 100 (D93).
the Elements and Path pages in place of the Talents page, designed by the game designer (projects/rpg/docs/elements-specialisations.md, v3) and approved by Charles: three tiers at 30, 50 and 100 (D93).
Charles's feedback on 1.0.176 (1 November), quick wins before the Elements and Specialisation pages: an inventory one can read and sort, an item picked from its slot, a pet one can see (D92).
Report of sprint 181Charles's feedback on 1.0.157 (30 October), before the specialisations: moving from one map to the next is no longer marked by a wall of trees (D87; projects/rpg/docs/graphisme/s165-retours-30-oct.md).
Charles's feedback on 1.0.172 (31 October): the forest is no longer flat, the puddles look good, the rings on the maps' edges are gone (D90).
Report of sprint 179Charles's feedback on 1.0.157 (30 October), before the specialisations: the world loses its chequerboard look (D87; projects/rpg/docs/graphisme/s165-retours-30-oct.md).
Charles's feedback on 1.0.157 (30 October), before the specialisations: the tree is walked with buttons, touchpad and keyboard, and its window gets its frame (D87; projects/rpg/docs/arbre-lisible.md §7, projects/rpg/docs/graphisme/s164-arbre-maquette.md).
Charles's feedback on 1.0.157 (30 October), before the specialisations: the talent tree unfolds in full, with no crossing link, and zooms (D87; projects/rpg/docs/arbre-lisible.md §7, projects/rpg/docs/graphisme/s164-arbre-maquette.md).
Charles's feedback on 1.0.157 (30 October), before the specialisations: the bestiary can be searched, points to the map, the items and my spells, and tells its families' story (D87, D88; projects/rpg/docs/bestiaire-encyclopedie.md).
Charles's feedback on 1.0.165 (31 October): the Characteristics tab fits its window without scrolling, and the world map's regions take natural shapes, true to their maps (D89).
Report of sprint 174Charles's feedback on 1.0.165 (31 October): a test character that has everything, to test everything, and players' names only on hovering them, the guild above the name (D89).
Report of sprint 173Charles's feedback on 1.0.157 (30 October), before the specialisations: each monster has its portrait rendered from its model, shown large on its sheet (D87, D88; projects/rpg/docs/graphisme/s165-retours-30-oct.md, projects/rpg/docs/bestiaire-encyclopedie.md).
Charles's feedback on 1.0.157 (30 October), before the specialisations: the bestiary gives structured data in a three-column window (D87; projects/rpg/docs/graphisme/s165-retours-30-oct.md, projects/rpg/docs/bestiaire-encyclopedie.md).
Charles's feedback on 1.0.162 (30 October), before the specialisations: the world map's sea comes alive (D88; projects/rpg/docs/graphisme/s165-retours-30-oct.md).
Charles's feedback on 1.0.162 (30 October), before the specialisations: the world map shows each map's real scenery, photographed in the game (D88; projects/rpg/docs/graphisme/s165-retours-30-oct.md).
Charles's feedback on 1.0.157 (30 October), before the specialisations: the world map gets its landmarks and legend, and the bestiary unfolds in five tiers (D87; projects/rpg/docs/graphisme/s165-retours-30-oct.md, projects/rpg/docs/bestiaire-encyclopedie.md).
Charles's feedback on 1.0.157 (30 October), before the specialisations: the quest sheet reads at a glance and the world map becomes an atlas (D87; projects/rpg/docs/graphisme/s165-retours-30-oct.md).
Charles's feedback on 1.0.157 (30 October), before the specialisations: the 211 items, recipes included, become tiles in relief (D87; projects/rpg/docs/graphisme/s165-retours-30-oct.md).
Charles's feedback on 1.0.157 (30 October), before the specialisations: the quest tracker and the Menus panel fold away, the quest log gets its icons (D87; projects/rpg/docs/graphisme/s165-retours-30-oct.md).
the graphic overhaul Charles asked for on 30 October, before the specialisations: the trades get their icons and the talent tree loses its noise (D86; the graphic designer's mock-ups in projects/rpg/docs/graphisme/s163-icones-arbre.md and s164-arbre-maquette.md, the game designer's structure of the tree in projects/rpg/docs/arbre-lisible.md).
the graphic overhaul Charles asked for on 30 October, before the specialisations: every spell has its icon in relief, readable in each of its states (D86; the graphic designer's mock-ups in projects/rpg/docs/graphisme/s163-icones-arbre.md and s164-arbre-maquette.md, the game designer's structure of the tree in projects/rpg/docs/arbre-lisible.md).
a hero of a single element no longer clears hordes alone, before the specialisations are tuned on top of it (D85, the game designer's decision in projects/rpg/docs/suite-apres-d69.md, §12).
Osmose after S151, designed by the game designer (v8 of projects/rpg/docs/suite-apres-d69.md, §12) and taken with its recommendations (D83).
a graphic overhaul of Osmose's interface asked for by Charles after S156, slipped in before the 45-60 groundwork (D84).
Report of sprint 160a graphic overhaul of Osmose's interface asked for by Charles after S156, slipped in before the 45-60 groundwork (D84).
Report of sprint 159a graphic overhaul of Osmose's interface asked for by Charles after S156, slipped in before the 45-60 groundwork (D84).
Report of sprint 158a graphic overhaul of Osmose's interface asked for by Charles after S156, slipped in before the 45-60 groundwork (D84).
Report of sprint 157Osmose after S151, designed by the game designer (v8 of projects/rpg/docs/suite-apres-d69.md, §12) and taken with its recommendations (D83).
Osmose after S151, designed by the game designer (v8 of projects/rpg/docs/suite-apres-d69.md, §12) and taken with its recommendations (D83).
Osmose after S151, designed by the game designer (v8 of projects/rpg/docs/suite-apres-d69.md, §12) and taken with its recommendations (D83).
Osmose after S151, designed by the game designer (v8 of projects/rpg/docs/suite-apres-d69.md, §12) and taken with its recommendations (D83).
Osmose after S151, designed by the game designer (v8 of projects/rpg/docs/suite-apres-d69.md, §12) and taken with its recommendations (D83).
the talent tree as a real tree (trunk, element pairs, play styles), from Charles's answers to the questionnaire and the game designer's rulings (projects/rpg/docs/talents-arbre-questions.md, D82).
the talent tree as a real tree (trunk, element pairs, play styles), from Charles's answers to the questionnaire and the game designer's rulings (projects/rpg/docs/talents-arbre-questions.md, D82).
the talent tree as a real tree (trunk, element pairs, play styles), from Charles's answers to the questionnaire and the game designer's rulings (projects/rpg/docs/talents-arbre-questions.md, D82).
the talent tree as a real tree (trunk, element pairs, play styles), from Charles's answers to the questionnaire and the game designer's rulings (projects/rpg/docs/talents-arbre-questions.md, D82).
the talent tree as a real tree (trunk, element pairs, play styles), from Charles's answers to the questionnaire and the game designer's rulings (projects/rpg/docs/talents-arbre-questions.md, D82).
the talent tree as a real tree (trunk, element pairs, play styles), from Charles's answers to the questionnaire and the game designer's rulings (projects/rpg/docs/talents-arbre-questions.md, D82).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
the talent tree shared by all classes, designed by the game designer (v3 of projects/rpg/docs/talents-arbre.md and projects/rpg/docs/elements.md) and approved by Charles (D80).
the talent tree shared by all classes, designed by the game designer (v3 of projects/rpg/docs/talents-arbre.md and projects/rpg/docs/elements.md) and approved by Charles (D80).
the talent tree shared by all classes, designed by the game designer (v3 of projects/rpg/docs/talents-arbre.md and projects/rpg/docs/elements.md) and approved by Charles (D80).
the talent tree shared by all classes, designed by the game designer (v3 of projects/rpg/docs/talents-arbre.md and projects/rpg/docs/elements.md) and approved by Charles (D80).
the talent tree shared by all classes, designed by the game designer (v3 of projects/rpg/docs/talents-arbre.md and projects/rpg/docs/elements.md) and approved by Charles (D80).
the talent tree shared by all classes, designed by the game designer (v3 of projects/rpg/docs/talents-arbre.md and projects/rpg/docs/elements.md) and approved by Charles (D80).
the talent tree shared by all classes, designed by the game designer (v3 of projects/rpg/docs/talents-arbre.md and projects/rpg/docs/elements.md) and approved by Charles (D80).
the talent tree shared by all classes, designed by the game designer (v3 of projects/rpg/docs/talents-arbre.md and projects/rpg/docs/elements.md) and approved by Charles (D80).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after S121, designed by the game designer (v7 of projects/rpg/docs/suite-apres-d69.md, §11) and approved by Charles (D79).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D74).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D74).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D74).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D74).
Charles's feedback after trying build 1.0.92 (D77).
Report of sprint 117Charles's feedback after trying build 1.0.92 (D77).
Report of sprint 116Charles's feedback after trying build 1.0.92 (D77, D78).
Report of sprint 115Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D74).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D74).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D74).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D74).
a trade for every piece of equipment, designed by the game designer (v6 of projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D76).
a trade for every piece of equipment, designed by the game designer (v6 of projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D76).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D74).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D74).
Charles's feedback after trying sprint 102 (D75).
Report of sprint 106Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D74).
Charles's feedback after trying sprint 102 (D75).
Report of sprint 104Charles's feedback after trying sprint 102 (D75).
Report of sprint 103Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D74).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71 to D73).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71, D72).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71, D72).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71, D72).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71).
Osmose after D69, designed by the game designer (projects/rpg/docs/suite-apres-d69.md) and approved by Charles (D71).
the game designer's design, started by Charles (D69): the bees and the moles, each with its lesson.
Report of sprint 94the game designer's design, started by Charles (D69): the frogs and the crabs, each with its lesson.
Report of sprint 93the game designer's design, started by Charles (D69): the mushrooms and the zombies, each with its lesson.
Report of sprint 92the game designer's design, started by Charles (D69): the boars and the wolves, each with its lesson.
Report of sprint 91the game designer's design, started by Charles (D69): a passive, leap and swap engine so that each family plays differently.
Report of sprint 90Charles's request (D65): the start of the main quest and side quests in every zone.
Report of sprint 89Charles's request (D65): quests and their journal.
Report of sprint 88Charles's request (D68): an end-of-fight window as in the games of the genre, and money earned.
Report of sprint 87Charles's feedback (D67): rooms one stands in, and a building at the way in.
Report of sprint 86Charles's feedback (D67): seeing the maps on the world map, changing maps without aiming, lighter maps.
Report of sprint 85Charles's request (D65): talking to the players of the same map.
Report of sprint 84Charles's feedback (D66): changing maps as in the games of the genre.
Report of sprint 83Charles's feedback (D66): a deck that saves, is built with the mouse and is shared.
Report of sprint 82Charles's request (D65): keys made by a trade, or dropped rarely.
Report of sprint 81Charles's request (D65): a dungeon per family, three rooms, entered with a key.
Report of sprint 80Charles's feedback (D65): remembered sign-in, the fallen leave the board, the round counter.
Report of sprint 79Charles's request (D64): a timeline showing the current round, a fight started with a right click, no offline play for the player.
Report of sprint 78Charles's request (D64): zone maps of 48 × 32 cells, ways without compass points.
Report of sprint 77Charles's request (D63): a fields zone of 5 × 5 maps, with bees and moles.
Report of sprint 76Charles's request (D63): a lake zone of 5 × 5 maps, with frogs and crabs.
Report of sprint 75Charles's request (D63): a second zone of 5 × 5 maps, the mouldy woods, with mushrooms and zombies.
Report of sprint 74Charles's request (D63): the woods' second family: wolves, all five roles.
Report of sprint 73Charles's request (D63): monsters arrive: visible groups that wander, a fight on a click, and the boar family.
Report of sprint 72Charles's request (D63): a world map showing the world seen from the sky, as one big map.
Report of sprint 71Charles's request (D63): a world made of linked maps: a zone is a grid of 5 × 5 maps, the woods first.
Report of sprint 70Charles's request (D62): an Escape menu, a discreet side bar of icons, windows opened by their keys, sounds, and freer movement outside fights.
Report of sprint 69Charles's request (D62): twelve spells chosen to play with, in two numbered rows, with their keys.
Report of sprint 68Charles's request (D62): each class has four spells per element and eight neutral ones, five at level 1 then one every five levels, each with its icon.
Report of sprint 67Charles's request (D62): characteristics named after their element, one colour and one effect each, common base numbers, and the freedom to spend one's points again.
Report of sprint 66Charles's request (D61): a readable spells screen (element colour, normal and critical damage ranges, a card on hover) and an inventory as in the games of the genre (the character surrounded by its slots, tabs, a grid of items).
Report of sprint 65Charles's request (D61), after trying the game: characteristics that count as in the games of the genre (10 points = +2 damage in their element), critical hits, a spell about every five levels, and a full characteristics sheet.
Report of sprint 64Charles's request (D57): on each project page, a "How the pieces fit together" diagram, like Osmose's, when the project has at least three pieces that talk to each other.
Report of sprint 63Charles's request (D58): answer from the retrieved passages, each sentence cited down to the file and line, and say when the sources hold no answer.
Report of sprint 62Charles's request (D58): find, in technical documentation, the passages that answer a question, and measure how well they are found.
Report of sprint 61Large linked zones, a camera that follows the player, and the world map.
Report of sprint 60The 14 equipment slots, items and sets, the inventory in pages and loot from fights.
Report of sprint 59Experience and levels 1 to 100, and the spending of characteristic and spell points, checked by the server.
Report of sprint 58Hovering a fighter or a spell tells everything, the turn order is a timeline, and each element has its visual effects.
Report of sprint 57The Sentinel, the Guard and the Mage with about twenty spells each, on at least two elements, balanced by simulation.
Report of sprint 56Summons, spells with ranks unlocked by level, and characteristics in the damage formula.
Report of sprint 55Four elements and their resistances, and spell effects: heal, shield, push and pull, effects over time, areas.
Report of sprint 54a full-screen creation screen, with several colours and build, and the choice of a free pack of separable parts.
Report of sprint 53when it opens, the game shows the server choice then a visual list of characters, as in Dofus.
Report of sprint 52a launcher that comes down to signing in: it updates the game by itself, remembers the account, lets the player sign up, and starts the game.
Report of sprint 51a Rust (Tauri) launcher that logs the player in, updates the game by downloading only the changed files, then starts it; the executables for the three systems; the project page.
Report of sprint 50a first welcome map with no monsters, where you walk around and talk to three NPCs.
Report of sprint 49a customisable character creation screen, validated and saved by the server.
Report of sprint 48the ASP.NET Core server for accounts and characters, and the game's login screen.
Report of sprint 47the sprint 45 combat playable in a Godot 4 C# client, on an isometric map made of Kenney's free sprites, exported for the three systems.
Report of sprint 46first of the six tactical RPG sprints (D54): the combat rules in a deterministic C# library, later shared by the Godot client and the server, tested without an engine.
Report of sprint 45Charles's request (D53): on each project page, a summary for someone who is not a developer (an HR person, for instance): what the project is, what it is for, what it shows of Charles's skills, in three short sentences, in a collapsible box at the top of the page.
Report of sprint 44Charles's request (D52): a small orientation gizmo in the topology viewer, x in red, y in green and z in blue, turning with the camera, to know where one is looking and relate it to the height axis.
Report of sprint 43Charles's decision (D51): fix the bottleneck that the SQL project's measurements revealed. lib-c counts edges by sorting three keys per triangle with qsort, an indirect call per comparison: 45 ms of sorting for 24 ms of reading on 262,144 triangles. A linear-time radix sort, measured before and after, without changing a single result.
Charles's review (D50): on the standing torus, the Reeb graph's loop is born at one saddle and closes at the other, while the persistence diagram keeps its two loops up to infinity. Both are right but look at different things (sublevel sets, level sets). Compute extended persistence, which pairs the classes that never die too, and show on the project page the saddle-to-saddle pair of the Reeb graph's loop.
Report of sprint 41Charles's requests (D49): the computing times of persistence and of the Reeb graph, with what a GPU would bring, and the 32 MB file limit explained; the G-maps course corrected; the number of projects and points up to date everywhere, and a burndown counted in delivered stories.
Report of sprint 40Charles's review (D49): the persistence diagram is not clear. Make it readable without knowing persistence: a barcode beside the scatter plot, each pair tied to its two vertices on the mesh, and a guided explanation that follows the height threshold.
Report of sprint 39Charles's request (D48): on the topology viewer, the Reeb graph of the height, computed by the C++ code: each component of each level set shrunk to a point, nodes at the critical points, as many loops as the genus on a closed orientable surface, drawn inside the mesh and flat.
Report of sprint 38Charles's request (D48): on the topology viewer, the persistence diagram of the height, computed by the C++ code: every component, handle or cavity is born at one critical point and dies at another, and the distance to the diagonal tells real features from noise.
Report of sprint 37Charles's request: on the topology viewer, a filtration by height, like ParaView's Elevation filter, and the critical points of the height (minima, saddles, maxima), computed by the C++ code with discrete Morse theory.
Report of sprint 36finishing touches Charles asked for after sprint 34: an interface for the Ada crossroads whose logic stays the Ada program's, what each technology does on every project page, and project management pages that say the portfolio is delivered.
Report of sprint 35second ray tracer sprint (D45): visitors render their own mesh, the work is spread over every core, they adjust the light and the materials and save the image.
Report of sprint 34first of the two ray tracer sprints (D45): a tested C++ engine that renders the common-thread meshes, compiled to WebAssembly and usable online on the project page.
Report of sprint 33two views of the dashboard (Projects and Results) in Angular, on the same JSON API as the React dashboard, tested with Jest and Cypress, and a measured comparison of both frameworks on the project page.
Report of sprint 32second sprint of the react project: a 3D viewer in the dashboard, colouring the common-thread meshes by their Gaussian curvature computed by the topologie C++ code in WebAssembly, then the project page with its screenshots.
Report of sprint 31first of the two sprints of the react project: a React and TypeScript dashboard reading a static JSON API produced by the site build (projects, sprints, measured results), in French and English, in the site's colours, published with the site.
Report of sprint 30second sprint of the parallele project: the same curvature in CUDA on the GeForce GTX 1660, in double precision (within 1e-12 of sequential) and in single precision (error measured), then rigorous benchmarks of every version, shown on the project page.
Report of sprint 29first of the two sprints of the parallele project: the Gaussian curvature of a mesh (angle defect and mixed Voronoi area) computed in sequential C++, with OpenMP on every core and with OpenCL on the graphics card or the processor, with results identical to those of the topologie project.
Report of sprint 28second sprint of the viewer (qt project): pick a vertex or a face to read its local properties, save the view as an image, and ship the application ready to install on Windows, Linux and macOS.
Report of sprint 27first of the two viewer sprints (qt project): a Qt 6 desktop application in C++ that opens a mesh with the portfolio's C library, shows it in OpenGL and displays its topology computed by the topologie project; Windows, Linux and macOS.
Report of sprint 26last of the three roguelike sprints (D32): the game in a Godot 4 window in C#, on the same rules library, with ranked runs on the score API; Windows, Linux and macOS builds by the CI, screenshots on the project page.
Report of sprint 25second of the three roguelike sprints (D32): an ASP.NET Core score API, with accounts and JWT tokens, EF Core and PostgreSQL, which draws the seed of each ranked run (R6) and computes the score itself by replaying the run with the rules library.
Report of sprint 24first of the three roguelike sprints (D32): the game rules in a deterministic C# library, later shared by the Godot client and the score API, playable now in the terminal; a run is recorded (seed and actions) and replays identically, the basis of score checking in sprint 24.
Report of sprint 23the morpion project rewrites a game from my studies: tic-tac-toe against an AI that never loses (minimax), in Python, playable in the terminal then on the project page; the tests prove the AI unbeatable by trying every possible game.
Report of sprint 22the bataille project rewrites a game from my studies: the card game War, in Ada, with types that rule out impossible cards and contract-checked piles; the project page shows what 100,000 simulated games say.
Report of sprint 21the aventure project rewrites from scratch a game from my studies (the original, written by two, is not reused): “The lab at night”, a text adventure in which a PhD student locked in the lab must find the USB stick holding the thesis and get out, in French or English, playable in the terminal then in the browser.
Report of sprint 20the naval project rewrites a game from my studies: battleship against the computer, with its model in plain, tested Java and its interface in JavaFX; the project page shows screenshots, made headless by the application itself.
Report of sprint 19on the othello project page, the visitor plays against the AI: the C engine and AI of sprint 17, compiled to WebAssembly, behind a board usable with the mouse, touch and keyboard.
Report of sprint 18the othello project rewrites a game from my studies: an exact and fast engine in C (the board in two 64-bit integers), validated by counting the possible games, and an alpha-beta minimax AI, playable in the terminal; sprint 18 will bring it to the browser.
Report of sprint 17the ml project's PointNet leaves training: exported to ONNX and checked identical to the PyTorch model, it classifies the meshes sent to the API (POST /v1/mesh/classify, without PyTorch in the image), and its results are shown on the project page.
the gcartes project explains generalised maps, the subject of my thesis: a small library builds and checks 2D G-maps, and the project page becomes a short course, with an unfolded cube whose darts, links and orbits can be walked, then a quiz.
Report of sprint 15on the latex project page, the visitor edits an article presenting this portfolio and sees the rendering update while typing, as in Overleaf; diagnostics and the outline lead to the right line.
Report of sprint 14the latex project reads a useful subset of LaTeX (structure, lists, tables, mathematics, references, citations, notes) into a tree whose every node knows its line and column, and renders it as safe HTML, formulas by KaTeX; errors become located diagnostics rather than a failure.
Report of sprint 13Maille handles meshes (torus, sphere, cylinder) and computes their topological invariants; on the project page, the visitor writes a program and sees its syntax tree, type and value, computed in the browser.
Report of sprint 12the langage project defines “Maille”, a small functional language: a Flex/Bison parser in C produces the syntax tree, an OCaml interpreter infers its types (Hindley-Milner) and evaluates it. Meshes enter the language in sprint 12, with the demo on the site.
Report of sprint 11the sql project stores in PostgreSQL real performance measurements of the portfolio's libraries (lib-c and topologie, in WebAssembly), analyses them with views, window functions and justified indexes, and the same database can be queried in the browser.
Report of sprint 10the ada project simulates a traffic-light crossroads whose dangerous states cannot be written: typing rules them out, contracts and the SPARK proof guarantee the rest.
Report of sprint 9the ml project trains, on 3D shapes generated by the code, a baseline model (scikit-learn) and a PointNet (PyTorch), tracked in MLflow, reproducible with DVC, and the CI fails if the accuracy falls below the threshold.
Report of sprint 8the fastapi project runs in Docker next to the site (docker compose up) and also returns the topological invariants computed in C++.
lib-c reads STL, so that 3D-printing models can be dropped into the demos; the fastapi project starts and serves lib-c over HTTP.
Report of sprint 6on the 3D topology page, a visitor turns a mesh coloured by its curvature and reads its invariants, computed by the C++ code compiled to WebAssembly.
Report of sprint 5projects/topologie/ computes in C++ the invariants of a mesh (components, boundaries, orientability, genus) and its discrete curvature, reusing lib-c's reader.
lib-c reads OBJ and PLY without memory leaks, and a visitor tries it on the project page, compiled to WebAssembly.
Report of sprint 3a recruiter opens the page of any project; the C library has its skeleton tested on three operating systems.
Report of sprint 2the portfolio is online, bilingual, tested and deployed automatically.
Report of sprint 1| Sprint | Committed | Delivered |
|---|---|---|
| 1 | 8 | 8 |
| 2 | 5 | 5 |
| 3 | 6 | 5 |
| 4 | 8 | 8 |
| 5 | 5 | 5 |
| 6 | 5 | 5 |
| 7 | 5 | 5 |
| 8 | 6 | 6 |
| 9 | 5 | 5 |
| 10 | 5 | 5 |
| 11 | 5 | 5 |
| 12 | 3 | 3 |
| 13 | 5 | 5 |
| 14 | 3 | 3 |
| 15 | 5 | 5 |
| 16 | 7 | 7 |
| 17 | 5 | 5 |
| 18 | 3 | 3 |
| 19 | 5 | 5 |
| 20 | 5 | 5 |
| 21 | 3 | 3 |
| 22 | 3 | 3 |
| 23 | 5 | 5 |
| 24 | 5 | 5 |
| 25 | 3 | 3 |
| 26 | 6 | 6 |
| 27 | 7 | 7 |
| 28 | 6 | 6 |
| 29 | 7 | 7 |
| 30 | 7 | 7 |
| 31 | 6 | 6 |
| 32 | 8 | 8 |
| 33 | 5 | 5 |
| 34 | 3 | 3 |
| 35 | 5 | 5 |
| 36 | 4 | 4 |
| 37 | 4 | 4 |
| 38 | 4 | 4 |
| 39 | 3 | 3 |
| 40 | 6 | 6 |
| 41 | 5 | 5 |
| 42 | 2 | 2 |
| 43 | 1 | 1 |
| 44 | 2 | 2 |
| 45 | 5 | 5 |
| 46 | 5 | 5 |
| 47 | 5 | 5 |
| 48 | 3 | 3 |
| 49 | 3 | 3 |
| 50 | 5 | 5 |
| 51 | 3 | 3 |
| 52 | 3 | 3 |
| 53 | 3 | 3 |
| 54 | 3 | 3 |
| 55 | 3 | 3 |
| 56 | 3 | 3 |
| 57 | 3 | 3 |
| 58 | 3 | 3 |
| 59 | 3 | 3 |
| 60 | 3 | 3 |
| 61 | 5 | 5 |
| 62 | 5 | 5 |
| 63 | 5 | 5 |
| 64 | 3 | 3 |
| 65 | 3 | 3 |
| 66 | 3 | 3 |
| 67 | 3 | 3 |
| 68 | 3 | 3 |
| 69 | 3 | 3 |
| 70 | 3 | 3 |
| 71 | 3 | 3 |
| 72 | 3 | 3 |
| 73 | 3 | 3 |
| 74 | 3 | 3 |
| 75 | 3 | 3 |
| 76 | 3 | 3 |
| 77 | 3 | 3 |
| 78 | 3 | 3 |
| 79 | 3 | 3 |
| 80 | 5 | 5 |
| 81 | 3 | 3 |
| 82 | 5 | 5 |
| 83 | 3 | 3 |
| 84 | 3 | 3 |
| 85 | 4 | 4 |
| 86 | 5 | 5 |
| 87 | 3 | 3 |
| 88 | 3 | 3 |
| 89 | 3 | 3 |
| 90 | 5 | 5 |
| 91 | 3 | 3 |
| 92 | 3 | 3 |
| 93 | 3 | 3 |
| 94 | 5 | 5 |
| 95 | 5 | 5 |
| 96 | 3 | 3 |
| 97 | 3 | 3 |
| 98 | 3 | 3 |
| 99 | 5 | 5 |
| 100 | 3 | 3 |
| 101 | 5 | 5 |
| 102 | 5 | 5 |
| 103 | 3 | 3 |
| 104 | 5 | 5 |
| 105 | 5 | 5 |
| 106 | 3 | 3 |
| 107 | 3 | 3 |
| 108 | 3 | 3 |
| 109 | 5 | 5 |
| 110 | 3 | 3 |
| 111 | 5 | 5 |
| 112 | 3 | 3 |
| 113 | 3 | 3 |
| 114 | 3 | 3 |
| 115 | 4 | 4 |
| 116 | 5 | 5 |
| 117 | 5 | 5 |
| 118 | 3 | 3 |
| 119 | 5 | 5 |
| 120 | 5 | 5 |
| 121 | 5 | 5 |
| 122 | 3 | 3 |
| 123 | 3 | 3 |
| 124 | 5 | 5 |
| 125 | 3 | 3 |
| 126 | 3 | 3 |
| 127 | 3 | 3 |
| 128 | 3 | 3 |
| 129 | 5 | 5 |
| 130 | 5 | 5 |
| 131 | 5 | 5 |
| 132 | 3 | 3 |
| 133 | 3 | 3 |
| 134 | 5 | 5 |
| 135 | 3 | 3 |
| 136 | 5 | 5 |
| 137 | 5 | 5 |
| 138 | 5 | 5 |
| 139 | 3 | 3 |
| 140 | 5 | 5 |
| 141 | 3 | 3 |
| 142 | 4 | 4 |
| 143 | 4 | 4 |
| 144 | 5 | 5 |
| 145 | 5 | 5 |
| 146 | 6 | 5 |
| 147 | 5 | 5 |
| 148 | 5 | 5 |
| 149 | 5 | 5 |
| 150 | 4 | 4 |
| 151 | 4 | 2 |
| 152 | 3 | 3 |
| 153 | 5 | 5 |
| 154 | 3 | 3 |
| 155 | 5 | 5 |
| 156 | 5 | 4 |
| 157 | 5 | 5 |
| 158 | 5 | 5 |
| 159 | 5 | 5 |
| 160 | 6 | 6 |
| 161 | 3 | 3 |
| 162 | 5 | 5 |
| 163 | 4 | 4 |
| 164 | 6 | 6 |
| 165 | 4 | 4 |
| 166 | 6 | 6 |
| 167 | 6 | 6 |
| 168 | 5 | 5 |
| 169 | 4 | 4 |
| 170 | 4 | 4 |
| 171 | 6 | 6 |
| 172 | 5 | 5 |
| 173 | 4 | 4 |
| 174 | 5 | 5 |
| 175 | 6 | 6 |
| 176 | 6 | 6 |
| 177 | 6 | 6 |
| 178 | 6 | 6 |
| 179 | 9 | 9 |
| 180 | 4 | 4 |
| 181 | 5 | 5 |
| 182 | 5 | 5 |
| 183 | 5 | 5 |
| 184 | 4 | 4 |
| 185 | 5 | 4 |
| 186 | 5 | 5 |
| 187 | 5 | 4 |
| 188 | 4 | 3 |
| 189 | 4 | 4 |
| 190 | 5 | 5 |
| 191 | 7 | 7 |
| 192 | 4 | 4 |
| 193 | 5 | 5 |
| 194 | 5 | 5 |
| 195 | 7 | 7 |
| 196 | 4 | 0 |
| 197 | 5 | 0 |
| 198 | 6 | 0 |
| 199 | 5 | 0 |
| 200 | 5 | 0 |
| 201 | 6 | 0 |
| 202 | 5 | 0 |
| 203 | 3 | 0 |
| 204 | 6 | 0 |
| 205 | 5 | 0 |
| 206 | 5 | 0 |
| 207 | 4 | 0 |
| 208 | 5 | 0 |
| 209 | 4 | 0 |
| 210 | 4 | 0 |
| 211 | 5 | 0 |
| 212 | 4 | 0 |
| 213 | 4 | 0 |
| 214 | 6 | 0 |
| 215 | 5 | 0 |
| 216 | 4 | 0 |
| 217 | 4 | 0 |
| 218 | 4 | 0 |
| 219 | 6 | 0 |
| Sprint | Left |
|---|---|
| 0 | 177 |
| 1 | 169 |
| 2 | 164 |
| 3 | 159 |
| 4 | 151 |
| 5 | 146 |
| 6 | 141 |
| 7 | 136 |
| 8 | 130 |
| 9 | 125 |
| 10 | 120 |
| 11 | 115 |
| 12 | 112 |
| 13 | 107 |
| 14 | 104 |
| 15 | 99 |
| 16 | 92 |
| 17 | 87 |
| 18 | 84 |
| 19 | 79 |
| 20 | 74 |
| 21 | 71 |
| 22 | 68 |
| 23 | 63 |
| 24 | 58 |
| 25 | 55 |
| 26 | 49 |
| 27 | 42 |
| 28 | 36 |
| 29 | 29 |
| 30 | 22 |
| 31 | 16 |
| 32 | 8 |
| 33 | 3 |
| 34 | 9 |
| 35 | 4 |
| 36 | 8 |
| 37 | 4 |
| 38 | 9 |
| 39 | 6 |
| 40 | 5 |
| 41 | 2 |
| 42 | 1 |
| 43 | 2 |
| 44 | 26 |
| 45 | 21 |
| 46 | 16 |
| 47 | 11 |
| 48 | 8 |
| 49 | 5 |
| 50 | 9 |
| 51 | 6 |
| 52 | 3 |
| 53 | 24 |
| 54 | 21 |
| 55 | 23 |
| 56 | 20 |
| 57 | 17 |
| 58 | 14 |
| 59 | 11 |
| 60 | 18 |
| 61 | 13 |
| 62 | 8 |
| 63 | 9 |
| 64 | 6 |
| 65 | 15 |
| 66 | 12 |
| 67 | 9 |
| 68 | 6 |
| 69 | 21 |
| 70 | 18 |
| 71 | 15 |
| 72 | 12 |
| 73 | 9 |
| 74 | 6 |
| 75 | 3 |
| 76 | 6 |
| 77 | 3 |
| 78 | 20 |
| 79 | 17 |
| 80 | 12 |
| 81 | 17 |
| 82 | 12 |
| 83 | 9 |
| 84 | 15 |
| 85 | 14 |
| 86 | 9 |
| 87 | 6 |
| 88 | 3 |
| 89 | 19 |
| 90 | 14 |
| 91 | 11 |
| 92 | 8 |
| 93 | 5 |
| 94 | 54 |
| 95 | 49 |
| 96 | 46 |
| 97 | 51 |
| 98 | 48 |
| 99 | 43 |
| 100 | 45 |
| 101 | 49 |
| 102 | 58 |
| 103 | 55 |
| 104 | 50 |
| 105 | 45 |
| 106 | 42 |
| 107 | 39 |
| 108 | 39 |
| 109 | 34 |
| 110 | 31 |
| 111 | 26 |
| 112 | 23 |
| 113 | 20 |
| 114 | 32 |
| 115 | 28 |
| 116 | 23 |
| 117 | 18 |
| 118 | 15 |
| 119 | 10 |
| 120 | 5 |
| 121 | 62 |
| 122 | 59 |
| 123 | 56 |
| 124 | 51 |
| 125 | 48 |
| 126 | 45 |
| 127 | 42 |
| 128 | 39 |
| 129 | 34 |
| 130 | 29 |
| 131 | 24 |
| 132 | 21 |
| 133 | 18 |
| 134 | 47 |
| 135 | 44 |
| 136 | 39 |
| 137 | 34 |
| 138 | 29 |
| 139 | 26 |
| 140 | 21 |
| 141 | 18 |
| 142 | 14 |
| 143 | 10 |
| 144 | 34 |
| 145 | 29 |
| 146 | 24 |
| 147 | 19 |
| 148 | 14 |
| 149 | 9 |
| 150 | 5 |
| 151 | 27 |
| 152 | 24 |
| 153 | 19 |
| 154 | 16 |
| 155 | 11 |
| 156 | 28 |
| 157 | 23 |
| 158 | 18 |
| 159 | 13 |
| 160 | 12 |
| 161 | 9 |
| 162 | 14 |
| 163 | 10 |
| 164 | 64 |
| 165 | 60 |
| 166 | 54 |
| 167 | 56 |
| 168 | 51 |
| 169 | 47 |
| 170 | 43 |
| 171 | 37 |
| 172 | 41 |
| 173 | 37 |
| 174 | 32 |
| 175 | 26 |
| 176 | 20 |
| 177 | 14 |
| 178 | 17 |
| 179 | 8 |
| 180 | 9 |
| 181 | 28 |
| 182 | 23 |
| 183 | 18 |
| 184 | 14 |
| 185 | 10 |
| 186 | 18 |
| 187 | 35 |
| 188 | 32 |
| 189 | 28 |
| 190 | 23 |
| 191 | 16 |
| 192 | 138 |
| 193 | 133 |
| 194 | 128 |
| 195 | 121 |
Two scales: projects in points (3, 5, 8 or 13, revised when the scope changes, as the roguelike went from 8 to 13 points), stories in points from 1 to 4. Observed capacity: 4.1 story points per sprint on average, from 1 to 8; each sprint's commitment follows that capacity, and 592 of the 593 committed points were delivered. At the planned pace, the 121 points left fit in sprints 146 to 219.
At the end of each sprint, three questions: what worked, what the AI got wrong, what to change in the next sprint. Charles writes the answers in the sprint's file, and the decisions they lead to go to DECISIONS.md. The sprint files
| Risk | Matrix | Mitigation | Outcome | ||||
|---|---|---|---|---|---|---|---|
| R1 | Claude quota too low | 3 | 2 | 6 | Short sessions, precise CLAUDE.md, temporary upgrade to Max | Did not happen badly enough to block: every sprint was delivered; each session resumes from the sprint and decision files. | |
| R2 | Scope creep | 3 | 3 | 9 | MoSCoW prioritisation, project order revised with Charles (6 October), Spring and ASP.NET dropped from scope, "Could" projects can be dropped | Happened, and was steered: Spring and ASP.NET dropped (D25), two games added (D31, D32), Bootstrap replaced by the ray tracer (D45), then, after delivery, the Ada crossroads interface, the technology roles and the topology height (D46, D47: 9 more points, from 170 to 179), then persistence and the Reeb graph (D48: 8 more points, 187 in all), then the persistence review, the computing times and the G-maps course (D49: 9 more points, 196 in all), then extended persistence (D50: 5 more points, 201 in all), then lib-c's edge counting (D51: 2 more points, 203 in all), then the viewer's orientation gizmo (D52: 1 more point, 204 in all), then the plain-language summaries (D53: 2 more points, 206 in all), then a tactical RPG in the style of Dofus (D54: 26 more points, 232 in all, six sprints), then, after Charles tried the game, the launcher, the server choice and character creation redone (D55: 9 more points, 241 in all, three sprints), then, after a second questionnaire, elements, effects, classes, progression, equipment and world (D56: 24 more points, 265 in all, eight sprints), then an architecture diagram on each project page (D57: 5 more points, 270 in all, one sprint), then a documentation assistant with RAG, Osmose paused for it (D58: 10 more points, 280 in all, two sprints), then the diagrams moved ahead of Osmose's return (D59, no extra points), then, after Charles tried the game, characteristics, spells and inventory redone (D61: 6 more points, 286 in all, two sprints), then, after a second try, elements, spells, deck, menus and movement (D62: 12 more points, 298 in all, four sprints), then a world in zones of 5 × 5 maps, a map seen from the sky and eight monster families (D63: 18 more points, 316 in all, six sprints), then, after Charles tried the world, larger maps, the current round's timeline and the right-click fight (D64: 6 more points, 322 in all, two sprints), then, after a try of sprint 78, the feedback, dungeons, the locksmith's trade, the proximity chat and quests (D65: 20 more points, 342 in all, six sprints), then, after a try of sprint 80, the deck and moving from one map to the next (D66: 8 more points, 350 in all, two sprints), then clearer maps and real dungeons (D67: 8 more points, 358 in all, two sprints), then the icons, a discreet chat, movable windows and the end of the fight (D68: 4 more points, 362 in all, one sprint), then monster families that each play differently, with passives, leaps, swaps and weaknesses (D69: 17 more points, 379 in all, five sprints), then, after a try of sprint 93, character names, the test account and the windows in a fight (D70: 2 more points, 381 in all, within sprint 94), then the sequel designed by the game designer: loot and initiative, Shards, gathering and crafting trades, playing together and the end of chapter 1 (D71: 52 more points, 433 in all, fourteen sprints), then item icons, the trades window and a resource every 5 levels (D72: 6 more points, 439 in all, two sprints), then life carried between fights and the baker (D73: 7 more points, 446 in all, one sprint), then a thread through the quests, Clairval on twelve maps, the tutorial and a minimap (D74: 13 more points, 459 in all, three sprints), then, after trying sprint 102, a harvest one can see, a real living village and following a quest on screen (D75: 11 more points, 470 in all, three sprints), then a trade for every piece of equipment, with the jeweller and the cobbler (D76: 5 more points, 475 in all, one sprint), then, after a try of build 1.0.92, consumables out of fights only, a livelier village, the quest journal and item cards with their right click (D77: 13 more points, 488 in all, three sprints), then life in a heart and the turns left on the spells (D78: 1 more point, 489 in all, within sprint 115), then the sequel designed by the game designer after playing together: finishing multiplayer, friends and travel, a slice of chapter 2 and guilds (D79: 62 more points, 551 in all, sixteen sprints), then the talent tree shared by all classes, with compound elements, Light and Darkness, support and the glyph left by a missed spell (D80: 32 more points, 583 in all, eight sprints), then, after the playtest of sprint 144, a friends window and a menus panel in the style of Dofus and Lightning taken out of the spells' filter without its talent (D81: 2 more points, 585 in all, within sprint 144), then the talent tree as a real tree, from Charles's answers to the game designer's questionnaire: a trunk, element pairs, play styles, its window and its explanations (D82: 29 more points, 614 in all, six sprints), then what follows S151, designed by the game designer: contracts, a bestiary, achievements, a guild that serves, the 45-60 groundwork, specialisations and the Ice braid (D83: 40 more points, 654 in all, ten sprints), then, after S156, a graphic overhaul of the interface: a theme and icons with depth, the achievements and guild windows with the guild's applications, achievements that reward, in quest chains and in dungeons (D84: 21 more points, 675 in all, four sprints), then, after measuring the 45-60 groundwork, diminishing returns on element points before the specialisations (D85: 5 more points, 680 in all, one sprint), then, at Charles's request, spell and trade icons in relief and a talent tree that reads like a tree (D86: 20 more points, 700 in all, four sprints), then, after playing 1.0.157, items and quests in relief, an illustrated world map, a bestiary as a hunting log, a zoomable tree and a less blocky world (D87: 48 more points, 748 in all, eleven sprints instead of two), then, after 1.0.162, a world map photographed in the game and monsters' portraits (D88: 10 more points, 758 in all, two sprints), then, after 1.0.165, a complete test character, players' names on hover, the Characteristics tab without scrolling and regions with natural shapes (D89: 9 more points, 767 in all, two sprints), then, after 1.0.172, relief in the forests, nicer puddles and map edges without rings (D90: 6 more points, 773 in all, one sprint), then, in the same sprint, a mount seen and faster, and no healing at full life (D91: 3 more points, 776 in all, no extra sprint), then, after 1.0.176, readable inventory tabs, sorting, picking an item from its slot and a pet that follows (D92: 5 more points, 781 in all, one sprint), then the Elements and Path pages in place of the Talents page, with three tiers at 30, 50 and 100, element pairs and trios one creates and a path per class, replacing D83's specialisations and Ice braid (D93: 21 more points, 802 in all, three sprints), each time with Charles and in sprints of their own, delaying nothing but guilds, moved from S137 to S145 (D80), and what D83 planned, moved from S157-S161 to S161-S165 (D84), then from S162-S165 to S163-S166 (D85), then from S163-S166 to S167-S170 (D86), then from S167-S170 to S176-S179 (D87), then from S176-S179 to S178-S181 (D88), then from S178-S181 to S180-S183 (D89), then from S179-S183 to S180-S184 (D90), then from S181-S184 to S182-S185 (D92), before D93 replaced those four sprints with seven, S182-S188. Then, after 1.0.183, compounds that consume their parents, twelve spells per trio and a new Elements page (D94: 13 more points, 815 in all, three sprints), moving the paths from S187-S188 to S190-S191. Then a specialisation tree that divides, 3 choices at 30, 2 at 50 and an evolution at 100, instead of 3 straight lines (D95: 8 more points, 823 in all, two sprints), turning the paths into S190-S193. Then ten classes instead of three, 220 in all and a last rank that divides, in three waves with a decision by Charles at 4, 7 and 10 classes (D96: 123 more points, 946 in all, 26 sprints, and 15 points of margin left unplanned), replacing the Mage planned in S193. Then 3 points in S195 to bring the Core suite down to 20,000 fights, which S193 did not hold (D97: 949 in all, no new sprint, 12 points of margin). | |
| R3 | Incorrect or unsafe AI code | 3 | 3 | 9 | Tests first, check that a test fails when the code is broken, fuzzing, SPARK proof, blocking CI, REVIEW.md | Happened in every sprint, without reaching the site: the defects found by tests and reviews are in the REVIEW.md files, with their fixes. | |
| R4 | No GPU available | 2 | 2 | 4 | OpenCL and CPU versions, precomputed results | Partly happened: no NVIDIA OpenCL under WSL (PoCL instead), CUDA through Docker on the GTX 1660, measurements committed for the GPU-less CI. | |
| R5 | Free hosting offers change | 2 | 2 | 4 | Static demos, optional back ends | Did not happen: the site is static on GitHub Pages; the APIs only run locally with Docker Compose. | |
| R6 | Personal data or secrets published | 1 | 3 | 3 | Automatic CI scan, environment variables | The scan blocked a deployment over a public npm maintainer's address in a package-lock; no private data was published. | |
| R7 | Build failure on one OS | 2 | 2 | 4 | Linux, Windows, macOS CI matrix from the first commit | Happened several times (MSVC, Qt on Windows, Clang on macOS), always caught by the matrix before going live. | |
| R8 | Lack of time or burnout | 2 | 3 | 6 | Two buffer sprints, one project in progress at a time | Did not happen: the two spare sprints were not needed. Sprints 35 to 219 are not delays: they are requests added after delivery, estimated and planned like the others (D46, D47, D48, D49, D50, D51, D52, D53, D54, D55, D56, D57, D58, D59, D61, D62, D63, D64, D65, D66, D67, D68, D69, D70, D71, D72, D73, D74, D75, D76, D77, D78, D79, D80, D81, D82, D83, D84, D85, D86, D87, D88, D89, D90, D91, D92, D93, D94, D95, D96, D97). | |
| R9 | 3D models without distribution rights | 2 | 3 | 6 | Synthetic meshes generated by code; third-party models shown locally only | Avoided: only meshes generated by code are published; models found online stay in local demos. |