Skip to content

v3.12.7 - The Recurring Task Learns to Surface

Latest

Choose a tag to compare

@RMANOV RMANOV released this 27 Jun 10:12
· 143 commits to main since this release

Recurring task copies now spawn into the active board where you can actually see them, and the tool surface holds firm against OpenAI-compatible clients. This release pairs two user-facing fixes (recurring visibility, FastMCP schema compat) with a corrupt-preview self-repair on the bridge and two new drift guards.

Highlights

  • Recurring copies land in a visible active section. build_new_task now picks each spawned copy's section by due date via the new active_section_for_due helper — today for a due-today copy, next otherwise — instead of inheriting the source template's section. Generated recurrences no longer vanish into a hidden/template lane (recurring_tasks.py; tests/test_recurring_tasks.py).
  • FastMCP tool schemas stay OpenAI-client compatible. New _patch_missing_parameter_properties in fastmcp_compat.py re-derives any parameter FastMCP (~2.1) drops from parameters.properties while still listing it in required — notably a title param. Without this, OpenAI-compatible clients reject the entire tool list before the model can run. Conservative per-parameter schema inference; FastMCP-generated schemas otherwise left untouched. Regression test added.
  • Corrupt kanban_payload.json self-repairs on pull. db_utils.ensure_kanban_payload_parseable() is a parse-or-regenerate guard wired into bridge_pull and the worker pull_only path (the only pull path with no export behind it). Valid file → untouched; missing → no-op; corrupt → regenerated from the freshly loaded transport payload. Never raises, never blocks sync, never deletes, transport never touched. A fresh-DB restore recovers the full 540,408-char description even when a truncated preview sits in the bridge dir (completes SPEC e401c69d).
  • OpenAI-compat schema regression now covers all 8 public servers. The former task_server-only check is parametrized over server/session/task/bridge/collab/entity/intel/unified: top-level type=object, no top-level oneOf/anyOf/allOf/enum/not, and every required name present in properties (tests/test_server_imports.py).
  • Surface-contract snapshot guard (D0). Snapshots console scripts, per-server live mcp.list_tools() tool names, and claim-sensitive file presence into tests/fixtures/surface_contract_snapshot.json, failing on any drift with a precise add/remove/rename diff. Deterministic, network-free regeneration via tests/test_surface_contract_guard.py --regenerate.
  • Chore: .claude/ (local Claude worktrees/config) added to .gitignore.

Notes

No migrations or breaking API changes — fixes plus new test/drift guards on the 3.x line. Full suite reported 1086 passing at merge.