BABUNI.DEV

BattleReport / Development journal

BattleReport: Development journal

BattleReport — narrative development history

The starting question: what actually happened in my fight?

BattleReport begins from a different impulse than a group damage meter. The emphasis is one character's experience: what damage did they deal, what hit them, what did they avoid, what resources were used and recovered, and what effects appeared? The original phrase “Get to know your fights” articulates that intention better than an elaborate performance claim.

The interface exposes details of a current or completed fight and keeps a rolling set of history. It uses old Vanilla combat information as a limited source of observations, not a magic explanation for every mechanical outcome. A heal entry, a power gain and a sampled health increase might overlap. A damage tick isn't a cast. Those distinctions are inseparable from the project's identity as a tool for learning about combat rather than simply admiring large numbers.

Babuni.dev's creative direction is primary. We can observe the resulting implementations in Git but cannot attribute every earlier Lua line or proposed technique to a particular assistant without another source.

October 26 — turning the project into a portfolio-ready record

Commits on October 26 credited Babuni.dev in the manifest and README, added a short documentation scaffold, and linked it from the README. This audit expands those notes into a substantive concept, exact source architecture, interface design, data semantics, decisions and verification roadmap.

The editorial work also checked the release metadata and found the README's older account-name links. Those are being replaced by links to the actual current babunidev v1.6.5 release and asset while the valuable preexisting GUIDE is kept intact. The slash-command alias description is corrected to show both /breport and /battlereport.

User contribution: the original concept and creative authority, reflected in the project's historical README and implementation choices. AI contribution in this documentation session: reading source and Git history, interpreting changes, recovering test/release provenance, improving documentation and committing Markdown. No code, test fixtures, migration helper or client records were changed.

Current verification: exact Git files and release metadata, followed by post-commit link/blob checks. Not performed: running WoW, executing Python/PowerShell test scripts, downloading and comparing the release archive or handling personal SavedVariables.

September 18 — a general name, and protecting saved memories

The rename commit 4cea3d42 changed Octo Battle Report into Battle Report, version 1.6.5, and standardized names through TOC, Lua modules, slash commands and UI. Per-character SavedVariables changed from OctoBattleReportDB to BattleReportDB.

Because the product is a record of personal history, breaking SavedVariables would undermine its purpose. The repository gained Upgrade-SavedData.ps1, a helper that checks the old/new TOCs, creates backups, copies data without executing saved Lua and refuses to overwrite existing new data. A PowerShell fixture test modeled that migration with synthetic directories and Unicode values.

A GitHub v1.6.5 release was published on September 18, with a ZIP and SHA256SUMS file. Its release notes report successful syntax, packaging and relevant fixture/regression checks; that is historical reported verification, not an independent test run in this October session. Live-client validation remains an open item.

A related constraint is Nampower. If its server spell events are already enabled, BattleReport can correlate accepted cast requests with confirmation and identify certain item triggers. Otherwise it relies on named cast-time completions and must not pretend to catch every instant ability, channel or proc.

September 11 — deciding where a fight actually begins

Commit 486ddc7c, “Release 1.6.4: record only during combat,” revised a more fundamental rule. Earlier code buffered some events immediately before combat entry and allowed a brief grace period after exit. This could catch an opener but also admit falling damage, mana expenditure or other events not really belonging to the combat segment.

The new code uses strict combat boundaries. PLAYER_REGEN_DISABLED begins, PLAYER_REGEN_ENABLED closes immediately, and events are only accepted to start a report if the player is already flagged in combat. Thus an opening spell cast before the combat flag appears can be absent from the report—even if the player considers it part of the encounter.

That tradeoff deserves explicit preservation in the portfolio. The current implementation's limitation isn't simply an accidental omission: it follows a dated change of direction in how battle ownership is defined. The repository doesn't include a full conversation explaining why the creator preferred the revision, so this narrative doesn't invent one.

September 9 — the quick report learns where it belongs

Commit 483c0898 released version 1.6.3 with movable quick reports and parser fixes. The temporary prompt gained a separate persisted position from the ordinary launcher. When the player drags the quick report, its expiration is paused; releasing it restarts the hold interval.

This refinement turns a potentially intrusive animation into a more adaptable interaction. The UI needed to handle animation, saved locations and cleanup reliably on an interface built for old WoW APIs. Parser updates around the same period reflect the difficulty of compiling old combat-log global strings and distinguishing accepted casts from related effects.

September 8 — fixing what “versus average” should mean

Commit 9c62c604 introduced a small but important statistical design refinement. If the just-finished encounter is included in an average before it is compared against that average, the benchmark changes as a result of the thing being measured. The source instead captures a compact baseline at combat entry, using only previous eligible fights.

That snapshot is attached to the report and persists through later Average resets. When there is no prior sample the UI can state No baseline instead of inventing a zero comparison. The result is a more honest way to notice what was unusual about the fight.

The UI also refuses simplistic judgement. Damage and healing dealt can be shown favorably when higher; taken damage favorably when lower. Duration, resources spent and healing received use neutral deltas, because a longer fight or a larger heal received is not necessarily evidence of worse play. Those choices are source-visible, not invented creator dialogue.

September 7, 2026 — already a working-shaped architecture in the first commit

The first substantial committed state, b7cced77 (“Release Octo Battle Report 1.3.1”), arrived on September 7, 2026. It contained more than a quick experiment: five Lua modules, a detailed player GUIDE, a README, early screenshots, and a Python test harness that could run old-style Lua with mocked World of Warcraft frames.

The division was deliberate at the code level. Core owns report lifecycle and aggregation, Average computes per-fight summaries, Resources observes player-health and active-power changes, Parser compiles the old client's localized combat message formats, and UI presents the data in a dark movable panel. The TOC persisted state per character and limited reports to the newest 100 fights.

The earliest tree does not reveal which private conversations, discarded UI sketches or debugging sessions led to that first uploaded snapshot. A later journal should resist treating the upload as proof the entire system was created in a single uninterrupted session.

September 7 — the report starts coming to the player

A later commit on the same date, b5e0c545, added an optional animated quick report. After a recorded fight, a launcher can show three sampled facts, fade in and pulse, then return to its ordinary position after around twelve seconds. The checkbox makes that prompt a user choice; it doesn't disable recording or the full report.

This is a noticeable shift from passive analysis to gentle invitation. The player doesn't have to remember to open a large statistics window: the addon offers a quick glimpse that may provoke a question worth investigating. At the same time it needs to be polite. Re-entering combat, hiding the launcher, or logging out must dismiss the prompt cleanly. The code and test history show attention to these transitions rather than an endlessly persistent overlay.

What the next development entry should preserve

A real test session should compare a single fight with its log, observe a health/resource change, try one identifiable weapon/item proc and document the differences between recorded cast modes. It should also verify old-data migration on backups and the quick report's drag/cleanup flow in a true client.

The project's artistic interest is that it treats the boundaries of knowledge as a design problem: there is the event the client reported, the number the UI derives, and the player's interpretation. Making those distinct is part of what transformed a personal combat notebook into a thoughtfully designed analysis tool.

Document information

Creator and creative director: Babuni.dev.
Method: retrospective based on live README, GUIDE, five Lua source modules, dated Git diffs, regression/migration scripts and GitHub release metadata. Prepared October 26, 2026. Original creative conversations not available in this material have not been fabricated.

View source