From the 2026-06-09 Architecture Review. Recommendation strength: Speculative.
Files
src/codeforerunner/tasks.json
src/codeforerunner/tasks.py (Python Task Registry accessor)
bin/install.js:32, 407-420 (Node reader: loadTaskSkillSlugs / slugsFromTasksJson)
Problem
The Node installer must read the Task Registry standalone (no Python available at curl | bash time), so two implementations parse tasks.json independently with no shared contract. Each test suite (test_tasks.py, tests/install.test.js) passes on its own while the schema can drift — a field added on the Python side is silently ignored or mis-assumed on the Node side.
Solution
Add a tasks.schema.json that both readers validate against in CI. The schema — not either parser — becomes the cross-language interface of the Task Registry.
Benefits
- Seam: schema drift is caught at the seam, in CI, before it lands on main.
- No new runtime coupling between Node and Python; the standalone-installer constraint is preserved.
From the 2026-06-09 Architecture Review. Recommendation strength: Speculative.
Files
src/codeforerunner/tasks.jsonsrc/codeforerunner/tasks.py(Python Task Registry accessor)bin/install.js:32, 407-420(Node reader:loadTaskSkillSlugs/slugsFromTasksJson)Problem
The Node installer must read the Task Registry standalone (no Python available at
curl | bashtime), so two implementations parsetasks.jsonindependently with no shared contract. Each test suite (test_tasks.py,tests/install.test.js) passes on its own while the schema can drift — a field added on the Python side is silently ignored or mis-assumed on the Node side.Solution
Add a
tasks.schema.jsonthat both readers validate against in CI. The schema — not either parser — becomes the cross-language interface of the Task Registry.Benefits