Skip to content

Follow-up: MCP/skill shared-core extraction + remaining #29 server robustness (deferred from the #22-#31 dev cycle) #33

Description

@dmartinezIPA

The dev cycle that closed #22-#28 (and #24) landed the correctness fixes and the highest-value, lowest-risk server fixes, but deferred the larger MCP/skill refactor because it is a big change to two untested 1000+ line files and is a maintainability improvement rather than a correctness bug. Tracking the remainder here.

From #30 (MCP/skill drift) — NOT yet done

The full shared-core extraction (pull ~450 lines of duplicated pure logic into skill/survey_query.py, imported by the server and vendored two-file by the skill) is outstanding. One of the seven divergences was fixed in the cycle: the ASCII-only tokenizer is now Unicode/accent-insensitive in BOTH copies. The remaining six behavioral divergences still stand:

  • survey-filter case sensitivity (MCP insensitive, skill sensitive)
  • form-name fallback (skill falls back to questions.json; MCP lookup_var/get_gate_chain don't)
  • data-detected sentinels printed by MCP, not by the skill
  • opposite choices-source preference
  • gate resolution ("always asked" wrong on MCP for group-gated vars)
  • nested-repeat count-var resolution differs

From #29 (server robustness) — partially done

Done this cycle: config-entry startup crash guard (#29.2), keep-old-data-on-failed-reload (#29.3), Unicode tokenizer (#29.4).
Still outstanding:

From #31 (public-flip) — partially done

Done: mcp/ -> mcp_server/ rename, doc contradictions, requirements bounds, CI, .mcp.json.example. Still outstanding: pyproject.toml + package restructure (removes the sys.path hacks), and the git-history codename-squash decision before flipping public.

Recommend tackling the #30 extraction as its own focused pass (with the dual-surface parity test from the original plan), since it touches the two files with zero existing coverage.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions