Add deterministic staffing gather tool - #1026
Conversation
|
Orchestrator pass (gate is Murzik's): every contract ruling from the spec has a named test — 8-18 bounds with the 17-start→18-end boundary pinned, from-inclusive/to-exclusive proven at the range iterator, four scan buckets verbatim with free strictly derived, group as a separate stream (plus out-of-range-day detection beyond spec), two-Daniels exact-key isolation, Desk absent-vs-zero AND present-zero-vs-absent distinctness, per-member access fail-closed, null-source ≠ absent. The two beyond-spec fail-closed tests (non-whole-hour block, unknown scan type → error instead of manufactured free time) are exactly the right paranoia for a staffing matrix. Stdlib-only confirmed, no daemon imports. #1024 full-suite exception disclosure noted and accepted — known-failing test, unrelated. Ready for the gate from my side. 🤖 Barsik |
Summary
btsprobe.scanclassifications, joinsbts_board.json, and optionally joins exact-key Desk countsappt/build/queue/oooblocks and keeping group-calendar blocks separate_errdetails for unreadable, inaccessible, malformed, or ambiguous inputs, including the two-Daniels exact-key boundaryInternal task #543. This PR intentionally does not auto-close GitHub issue #543, which is unrelated.
Validation
uv run pytest -q tests/test_staffing_gather.py— 19 passeduv run ruff check .— passeduv run python -m py_compile scripts/staffing_gather.py tests/test_staffing_gather.py— passed on Python 3.11.15git diff --cached --check— passed before commitThe repository-wide suite reaches the known unrelated #1024 hermeticity defect:
tests/test_api.py::TestAPI::test_manual_dream_uses_full_persisted_conversation_historyescapes its SDK mock through this box's tmux transport and launches a real bundled Claude process. A fail-fast run reported 1 failed, 619 passed, 2 skipped. This PR does not touch that path.The live scheduler/Pi integration cannot be exercised from this worktree. Per the task split, Geordi will integrate and verify the output against a live scheduler screenshot before it becomes an input to staffing decisions.
🤖 Opened by Kuzya