Section 03: test-disposition.md integration (governing decision/bug ref) + dual-backend spec coverage.
Goal
test-disposition.md integration (governing decision/bug ref) + dual-backend spec coverage.
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
- test-disposition.md integration: a per-backend skip is a disposition CLAIM — its reason MUST reference a governing decision artifact or BUG-XX-NNN (never an untracked skip). Update state.sh disposition scan + the disposition reason-regex to recognize the keyed form; reviewers flag an untracked per-backend skip identically to #skip.
- Dual-backend spec coverage: a spec test file exercising the attribute (one eval-only test verified under interp + skipped under llvm, one llvm-only inverse, one both-backend control). This file is the plan-wide functional acceptance probe.