Repository navigation
fix: write timeline files in place, drop RestSharp, add a fixture for every encounter - #30
Merged
Merged
Conversation
…ent directory The timeline and statistics were written to the current directory first and then moved, so two runs with the same output name overwrote each other. They are now written next to the target and moved over it, so a timeline that cannot be written completely never replaces a good one. The old file is no longer deleted up front. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- New DpsReportClient: multipart upload, URL-encoded token, readable errors from dps.report (rate limit, unsupported log, html error pages) instead of crashing on an unexpected answer - The upload service collected links in a plain List from Parallel.ForEach (a race); it now uses Parallel.ForEachAsync, a thread-safe collection, a stable order and reports how many logs failed - Boss filter ids are compared case-insensitively - Remove RestSharp 106 from the solution - Tests for the client and the filter Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
- 14 new anonymized real-log fixtures (the encounters that had none); the existing ones were rebuilt so that every mechanic is covered by a kept player - expected_columns.json holds the expected value of every column of every fixture, calculated from the raw json by make_expected_columns.py - BossMechanicsTests checks all columns, that every definition has a fixture and that the renamed mechanics show up in their fixture - trim_ei_json.py: choose players that cover all mechanics, anonymize player names inside target names (e.g. "Slubling 2 <character>") Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
danifischer
added a commit
that referenced
this pull request
Nov 12, 2026
Resolved the conflicts with the changes on master: - TimelineCreator: kept the json based BuildTimelineFile and took over the atomic write of the output file (temporary file next to the target, then move) from #30 - TimelineCreatorTests: master's plain xUnit assertions, adapted to the single output file - MechanicsTableBuilderTests: stays deleted, the html builders are gone - TimelineDataBuilderTests: converted from FluentAssertions to xUnit assertions Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The three cleanup items from the list, in three commits.
1. Timeline files are no longer written via the current directory (
fix(logic))TimelineCreatorwroteindex.html/statistics.htmlinto the current directory first and then moved them, so two runs with the same output name overwrote each other (a new test with 8 parallel builds fails 3/3 on the old code). The files are now written next to the target and moved over it (a timeline that cannot be written completely never replaces a good one; the old file is no longer deleted up front).2. RestSharp is gone (
fix(app))DpsReportUploadServiceused RestSharp 106. NewDpsReportClientonHttpClient:ListfromParallel.ForEach(race); nowParallel.ForEachAsync, a thread-safe collection, a stable output order, and a summary of how many logs failed0x3c4eworks)3. A fixture for every raid encounter (
test)14 new anonymized real-log fixtures for the encounters that had none, so all 24 definitions are covered.
expected_columns.jsonholds the expected value of every column of every fixture, calculated from the raw json bymake_expected_columns.py(a second implementation of the counting).BossMechanicsTestschecks all columns, that every definition has a fixture, and that the renamed mechanics show up. Misspelling a mechanic inmechanics.json(tried on Xera, which had no fixture before) makes it fail.trim_ei_json.pynow keeps players that cover every mechanic, and removes player names inside target names ("Slubling 2 "); a check over all fixtures against the character and account names of the 157 source logs finds no real nameConeandEcho PUare 0 for everyone; they never happened in 8 real logsNot in this PR
ParsingTest.csandplan.mdbelong to itmechanics.local.jsonfor your own encountersTest plan
WriteHtmlFilemakes the parallel test fail 3/3🤖 Generated with Claude Code