You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A full audit of the merged #110 implementation found correctness/acceptance gaps that mean #110 should not remain completed yet.
Blocker
The canonical concept normalization collapses distinct hero settings into the same public SettingId.canonical_concept() maps any key containing Damage to ability.damage and any key containing Healing to ability.healing, regardless of whether the definition is actually ability-targeted. The reviewed catalog contains distinct hero-level settings such as damageDealt% / damageReceived% and healingDealt% / healingReceived%. These therefore become the same canonical identity for the same Team/Hero target kind and the same Percent domain. That violates Define the canonical typed settings schema and hero applicability model #109/Build the canonical typed Workshop settings catalog #110's locale-independent setting concept identity contract (which explicitly uses concepts such as hero.damageDealt) and makes definitions_by_id() ambiguous in a way target shape cannot resolve.
validate_catalog() does not catch this because it only reports a repeated (SettingId, SettingTargetKind) when the value domains differ; same-domain semantic collisions silently pass.
Major
The duplicate/stale table validation cannot observe the duplicates it claims to validate.definitions() consumes table::entries(), while entries() already filters duplicate paths with first-wins semantics. The subsequent paths.insert() duplicate check in validate_catalog() is therefore unable to see a duplicate path or compare the hand-written and generated definitions for equivalence/conflict. This does not satisfy Build the canonical typed Workshop settings catalog #110's acceptance criterion that generation/checking detect stale/duplicate semantic tables rather than silently permitting parallel sources of truth.
The precedence documentation is reversed relative to the implementation.entries() says generated export entries take precedence, but it iterates ENTRIES.iter().chain(GENERATED_ENTRIES.iter()) and keeps the first path, so hand-written entries take precedence. The PR summary says existing parser/emitter precedence is preserved; the code does preserve hand-written-first behavior, but the durable code comment currently states the opposite.
CI being green does not cover these semantic failure modes. #110 is being reopened so the canonical identity/data contract can be repaired before another release.
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
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
workshop-catalog-gen checkVerification
cargo fmt --all -- --checkcargo clippy --workspace --all-targets --locked -- -D warningscargo test --workspace --all-targets --lockedcargo run --locked -p workshop-rs --bin workshop-catalog-gen -- checkgit diff --checkFixes #110