[loop-generated] [bug] 10 pre-existing test failures on main block all commits — unhashable dict key #1114

Closed
opened 2026-03-23 18:13:10 +00:00 by Timmy · 1 comment
Owner

Pre-existing test failures on main (10 tests)

All failures share the same root cause: cannot use 'tuple' as a dict key (unhashable type: 'dict')

Affected tests:

  1. tests/test_smoke.py::TestFeaturePages::test_tools - /tools returns 500
  2. tests/test_smoke.py::TestNo500::test_no_500[/tools] - /tools returns 500
  3. tests/dashboard/test_round4_fixes.py::test_tools_page_returns_200 - /tools returns 500
  4. tests/dashboard/test_round4_fixes.py::test_tools_page_shows_agent_capabilities - /tools returns 500
  5. tests/dashboard/test_calm.py::test_create_task - /calm/tasks returns 500
  6. tests/dashboard/test_calm.py::test_reorder_later_tasks - /calm/tasks/reorder returns 500
  7. tests/dashboard/test_calm.py::test_complete_now_task_promotes_next_and_later - 500
  8. tests/dashboard/test_calm.py::test_reorder_promote_later_to_next - 500
  9. tests/dashboard/test_calm.py::test_defer_now_task_promotes_next_and_later - 500
  10. tests/dashboard/test_calm.py::test_start_task_demotes_current_now_and_promotes_to_now - 500

Root cause

Somewhere in the tools page rendering or calm task routes, a dict is being used as a key in another dict or set, causing TypeError: unhashable type: 'dict'.

Impact

These failures block ALL commits via pre-commit hooks (which run tox -e unit). No code can be committed until these are fixed.

Introduced by

Likely PR #1111 (Paperclip integration) — the app.py changes or the new research dependency chain.

## Pre-existing test failures on main (10 tests) All failures share the same root cause: `cannot use 'tuple' as a dict key (unhashable type: 'dict')` ### Affected tests: 1. `tests/test_smoke.py::TestFeaturePages::test_tools` - /tools returns 500 2. `tests/test_smoke.py::TestNo500::test_no_500[/tools]` - /tools returns 500 3. `tests/dashboard/test_round4_fixes.py::test_tools_page_returns_200` - /tools returns 500 4. `tests/dashboard/test_round4_fixes.py::test_tools_page_shows_agent_capabilities` - /tools returns 500 5. `tests/dashboard/test_calm.py::test_create_task` - /calm/tasks returns 500 6. `tests/dashboard/test_calm.py::test_reorder_later_tasks` - /calm/tasks/reorder returns 500 7. `tests/dashboard/test_calm.py::test_complete_now_task_promotes_next_and_later` - 500 8. `tests/dashboard/test_calm.py::test_reorder_promote_later_to_next` - 500 9. `tests/dashboard/test_calm.py::test_defer_now_task_promotes_next_and_later` - 500 10. `tests/dashboard/test_calm.py::test_start_task_demotes_current_now_and_promotes_to_now` - 500 ### Root cause Somewhere in the tools page rendering or calm task routes, a dict is being used as a key in another dict or set, causing `TypeError: unhashable type: 'dict'`. ### Impact These failures block ALL commits via pre-commit hooks (which run `tox -e unit`). No code can be committed until these are fixed. ### Introduced by Likely PR #1111 (Paperclip integration) — the `app.py` changes or the new research dependency chain.
claude self-assigned this 2026-03-23 18:14:12 +00:00
Collaborator

PR created: http://143.198.27.163:3000/rockachopa/Timmy-time-dashboard/pulls/1120

Root cause: Starlette changed TemplateResponse from TemplateResponse(name, context) to TemplateResponse(request, name, context). The old calling convention passed a dict as the name arg; Jinja2 tried to use it as a tuple cache key, causing TypeError: unhashable type: dict.

Fix: Updated 7 old-style TemplateResponse calls in routes/tools.py and routes/calm.py to the new signature. All 10 failing tests now pass (3247 passed total).

PR created: http://143.198.27.163:3000/rockachopa/Timmy-time-dashboard/pulls/1120 **Root cause:** Starlette changed `TemplateResponse` from `TemplateResponse(name, context)` to `TemplateResponse(request, name, context)`. The old calling convention passed a dict as the `name` arg; Jinja2 tried to use it as a tuple cache key, causing `TypeError: unhashable type: dict`. **Fix:** Updated 7 old-style `TemplateResponse` calls in `routes/tools.py` and `routes/calm.py` to the new signature. All 10 failing tests now pass (3247 passed total).
Sign in to join this conversation.
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Rockachopa/Timmy-time-dashboard#1114