PDX-508 Tier 5: structural/load-affecting validators (bridge-verified)#214
Merged
Merged
Conversation
…alidator RCA: Nine structural check types referenced by existing rules were unregistered, so the local validator silently skipped them and its score could diverge from the Quality Hub API for tests with malformed SetValues/UiAssert structure, bad funcCall ids, wrong binding-parameter order, variable uiConnectionName, or unknown root attributes. Fix: Implement backend-faithful validators for validFuncCallId, rootAttributes, setValuesStructure, namedValueName, namedValueValue, uiAssertHallucinatedGeneratedParameters, uiAssertMissingArguments, bindingParameterOrder, and uiConnectionNameLiteral; register in VALIDATOR_REGISTRY. Six are single first-offender violations; validFuncCallId / the two UiAssert checks / bindingParameterOrder emit one violation with count (capped at 5 for funcCall) to preserve weighted-deduction score parity. Adds 19 parity tests and docs.
…ot load) RCA: Tier 5 ported UI-BINDING-ORDER-001 as critical/weight 10, but a wrong UI binding parameter order produces an 'Unknown control' error at RUNTIME — the test case still loads. The severity taxonomy classifies a runtime failure as major, not load-blocking critical. With the PDX-509 validity bridge live, a critical is surfaced into issues[] and flips is_valid; a corpus scan caught this firing on a real test case, wrongly marking it invalid. Fix: Set UI-BINDING-ORDER-001 severity=major, weight=5 (matching the recorded taxonomy call) so it scores/surfaces as a runtime defect without gating is_valid. Update the firing test to assert major. The Quality Hub backend should make the same change to preserve score parity.
…lid files RCA: A full AllPOCProjects corpus sweep (with the PDX-509 bridge live) showed two Tier 5 criticals flipping is_valid on real, loadable test cases. SETVALUES-VALUE -001 flagged an empty <namedValue name="value"/> — which intentionally sets the field to blank — and empty structural slots in an unused QEditor row. SETVALUES- STRUCTURE-001 flagged a data-driven SetValues that reads from Excel/CSV (declared in <parameterValueSources>) and therefore carries an empty <value class= "valueList"/> with no inline <namedValues>. Both patterns load fine, so the rules were false-positives over-gating validity. Fix: SETVALUES-VALUE-001 now treats the QEditor structural slots (valuePath, value, valueScope) as blankable and only flags a non-structural namedValue with no value. SETVALUES-STRUCTURE-001 exempts a SetValues that declares <parameterValueSources>. Re-swept all 651 corpus files: zero Tier 5 criticals fire. Added regression tests for empty value, blank row, and data-driven SetValues.
Quality Orchestrator🟢 LOW · 🧪 Tests to Run · Running 1 of 55 tests
▶ Run commandnpx vitest run \
unit/mcp/bestPracticesEngine.test.ts⚡ quality-orchestrator · |
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.
PDX-508 Tier 5 — structural / load-affecting validators (bridge-verified)
Ports the 9 remaining Tier 5 check types to the local validator, then hardens them against the PDX-509 validity bridge using a full
AllPOCProjectscorpus sweep (651 real test cases). The bridge makescriticalviolations gateis_valid, so any mis-scoped critical would wrongly mark real files invalid — this PR finds and fixes those before shipping.New validators (9)
validFuncCallId(FUNCCALL-VALID-001),rootAttributes(RENDER-ROOT-001),setValuesStructure(SETVALUES-STRUCTURE-001),namedValueName(SETVALUES-NAME-001),namedValueValue(SETVALUES-VALUE-001),uiAssertHallucinatedGeneratedParameters(UI-ASSERT-STRUCT-002),uiAssertMissingArguments(ASSERT-STRUCT-001),bindingParameterOrder(UI-BINDING-ORDER-001),uiConnectionNameLiteral(UI-CONN-LITERAL-001).Bridge-verification fixes (corpus-driven)
UI-BINDING-ORDER-001critical → major/5. Wrong binding order errors at runtime (the test loads), so it's a runtime defect, not load-blocking. As a critical it was flippingis_validon a real file.SETVALUES-VALUE-001no longer flags an empty<namedValue name="value"/>(blanks the field) or empty structural slots in an unused QEditor row — these are valid Provar patterns.SETVALUES-STRUCTURE-001exempts a data-driven SetValues that reads from Excel/CSV (declares<parameterValueSources>, no inline<namedValues>).Verification
is_validgate (was 8 before the fixes).🤖 Generated with Claude Code