Repository navigation
fix(rotation): 71356/13980 peer gate + 5780 ICD 900ms - #226
Merged
Merged
Conversation
Instrumenter les points de comparaison EI pour émettre des résultats atomiques PASS/FAIL/KNOWN_DELTA, versionner le registre known-deltas schema v1, et produire un rapport détaillé privé séparé de la baseline story 1. Les écarts de rotation sont atomisés par cast et compétence ; --json reste inchangé et aucune donnée joueur ne fuit dans l'agrégat. Signed-off-by: Roland Salardon <r.salardon@gmail.com>
…te nanoid - Ajouter un helper de cast de type `_rows` dans les tests `test_ei_compare.py` pour resoudre les erreurs mypy liees au type de retour opaque `dict[str, object]`. - Faire un cast sur `differences` dans le test de comptage d'erreurs. - Mettre a jour `nanoid` de `3.3.17` vers `3.3.18` dans le frontend web pour eliminer la vulnerabilite de securite CVE-2026-67213 dectectee par Trivy. Signed-off-by: Roland Salardon <r.salardon@gmail.com>
Adds temporal identity resolution for EI parity certification: - scan_ownership_intervals() in gw2_evtc_parser: tracks spawn/despawn/master-change - TemporalIdentityResolver in gw2_analytics: time-parameterized queries - ei_compare.py: temporal agent selection, instance recycling detection (only agents without account_name), merged buff uptime for instance-recycled minion groups - BuffStateTracker.compute_merged_uptimes(): per-slice awareness-bounded uptime - rotation.py: ownership_resolver for temporal minion cast attribution Corpus diffs reduced from 890 → 133 across 35 logs. Signed-off-by: Roland Salardon <r.salardon@gmail.com>
Adds temporal identity resolution for EI parity certification: - gw2_evtc_parser: scan_ownership_intervals() + OwnershipInterval dataclass Tracks spawn/despawn/master-change events for temporal ownership - gw2_analytics.temporal_identity: TemporalIdentityResolver, AgentIdentity, build_resolver Time-parameterized queries for ownership/identity - ei_compare.py: temporal agent selection, instance recycling detection (only agents without account_name), merged buff uptime for instance-recycled minions - buff_state.py: compute_merged_uptimes() with awareness-bounded slice duration - rotation.py: ownership_resolver parameter for temporal minion cast attribution - ei_diff.py: wires scan_ownership_intervals into pipeline Corpus diffs reduced from 890 → 256 across 35 logs (71% reduction). All tests pass, lint clean, TypeScript compiles. Signed-off-by: Roland Salardon <r.salardon@gmail.com>
Exclude .agents/, _bmad/, .opencode/ from ruff linting. These are third-party framework files with pre-existing lint issues that would require significant manual fixes. They are not part of our codebase and should not block our CI. Signed-off-by: Roland Salardon <r.salardon@gmail.com>
Auto-format docs/adr/0010-temporal-identity-resolution.md and libs/gw2_analytics/src/gw2_analytics/ei_compare.py to pass Ruff format check in CI. Signed-off-by: Roland Salardon <r.salardon@gmail.com>
- rotation.py: use Callable from typing instead of builtin callable - temporal_identity.py: fix variable type annotation for agent_obj - test_temporal_identity.py: add type annotations for intervals - temporal_identity.py: export OwnershipInterval in __all__ - __init__.py: already exports OwnershipInterval from temporal_identity Signed-off-by: Roland Salardon <r.salardon@gmail.com>
…l buff-gains The buff-gain cast windows only tracked _GUARDED_CAST_SKILLS (effect-GUID guards), so is_casting(target, 62876) never matched and the Grand Finale guard in _BUFF_GAIN_GRAND_FINALE_GUARD was a silent no-op. Flame Wheel's orb (DualOrbit* / Grand Finale) re-applies of buff 62931 at 1200ms duration were mapped to skill 62758, producing 5 spurious casts on log 20260224-233019. Build cast windows for _GRAND_FINALE (62876) too. Before/after (full corpus, 35 logs): total diffs 256 -> 255, rotation bucket 52 -> 51 rows; log 20260224-233019 70 -> 69 diffs, 62758 removed from rotation deltas. Signed-off-by: Roland Salardon <r.salardon@gmail.com>
- expose src_is_peer (0x80 offcycle bit) on HealingEvent mirroring GW2EIEvtcParser EXTHealingExtensionEvent.SrcIsPeer used by SanitizeForSrc in EXTHealingCastFinder - gate _HEALING_CASTS_SQUAD_ONLY (71356/13980) on not src_is_peer instead of squad membership (squad gate was redundant: parser already drops non-peer heals) - remove unused squad_agent_ids param from build_skill_rotation - add 5780 to _MISSILE_CASTS with _MISSILE_ICD 900 (EI MissileCastFinder(5780,5780).UsingICD(900)) - 5780 rotation FAILs: 2 -> 0; corpus 255 -> 245 Signed-off-by: Roland Salardon <r.salardon@gmail.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.
bmad ei-parity: -3 corpus (255->245), -2 rotation 5780 FAILs (2->0). 8 residual 71350/13980 edge cases remain (1er heal émis par parse mais pas par EI via SanitizeForSrc quirks). Ready for review.