0%

Section 02: Test runner gates the skip per active backend; gated backend reports SKIPPED not FAILED.

Goal

Test runner gates the skip per active backend; gated backend reports SKIPPED not FAILED.

Implementation Sketch

Grammar/parse: reuse the existing keyed-attribute parsing that backs #compile_fail(code:, message:, line:, column:) (ExpectedError in ori_ir/src/ast/items/function.rs). AST: a ori_ir-local backend enum (ori_ir must not depend on oric’s runner Backend). Runner: oric/src/test/runner/mod.rs already carries config.backend (Backend::Interpreter | Backend::LLVM) — gate there. Disposition: .claude/rules/test-disposition.md — a per-backend skip still references a governing decision/bug, never untracked.

Spec References

ori_ir/src/ast/items/function.rs (TestDef.skip_reason + ExpectedError keyed-attr); oric/src/test/runner/mod.rs (Backend enum + config.backend); .claude/rules/test-disposition.md; .claude/rules/tests.md §Negative Testing / Attributes.

Work Items

  • TDD-first: runner test — a test with backend=llvm skip runs+counts under Interpreter and reports SkippedUnchanged (not Failed) under LLVM; the inverse for backend=interpreter.
  • Gate in the runner (oric/src/test/runner): when config.backend matches a test’s skip_backends entry, report SKIPPED with the reason instead of executing/failing. The runner already knows config.backend (Backend::Interpreter vs Backend::LLVM).