Skip to content

HermitCrab conformance: verify blocked_by labels against the trace in the dead-rule gate #552

Open

Description

@johnml1135

Summary

The conformance suite's dead-rule gate credits a rule as exercised whenever an expected-failure word names it in blocked_by. It never checks that the rule actually blocked the word. A wrong or stale label therefore counts as coverage.

FailureRuleAttributor.WordLevelFailureRuleIds is documented as upgrading those labels to verified, but it has no callers.

This is a proposal. #480 is adding two weaker steps:

  • the gate fails when a label is not a rule id in the fixture's grammar;
  • the docs say that blocked_by is asserted, not verified.

This issue tracks the stronger step: verify each label against the parse trace.

Who is affected: maintainers of the HermitCrab conformance suite (#480) and its PanGloss port.

Done when:

  • the gate requires the trace to attribute each word's failure to the rule named in blocked_by;
  • the gate keeps an explicit, reviewed exemption list for words whose failure cannot be attributed from the trace (the attributor's doc names zimed);
  • a mutated label fails the gate.
Code, on #480 at b49433d
  • CoverageReport.cs:113-114 adds every word.BlockedBy id to the exercised set, with no check.
  • FailureRuleAttributor.cs:66 defines WordLevelFailureRuleIds. The only reference outside its own file is a string in OwnedSymbolKeyTests.cs:132.
  • At that head, all 108 blocked_by labels name real rule ids in their fixture grammars, so no label is wrong today.

Activity

  1. johnml1135 commented on Oct 23, 2026

    @johnml1135
    CollaboratorAuthor

    PanGloss has nothing to port this to. I checked sillsdev/PanGloss at 14975991 (v0.10.0): pg-conformance-fixtures parses blocked_by from words.yaml and validates its shape (unique strings, expect_fail: true required, not allowed in variants), but nothing consumes the labels. There is no dead-rule gate, no rules.csv or dead-rules-allowed.tsv, and no coverage credit for blocked_by. So no PanGloss change, PR or merge was made, and no labels needed exemptions or were found wrong there.

    Consequence for this issue: the verification gate is machine-only, and PanGloss's shared fixtures carry the same unverified labels without anything reading them. #480 now fails the gate on labels that are not grammar rule ids (49ba481); trace verification (this issue) is not implemented.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    • Status
      🆕 New

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions