fix(mcp): restore the stale compatibility status for supported-but-behind clients#1407
fix(mcp): restore the stale compatibility status for supported-but-behind clients#1407minion1227 wants to merge 2 commits into
Conversation
…hind clients classifyMcpClientVersion can return "stale", and LATEST_RECOMMENDED_MCP_VERSION (0.6.0) exists to mark a client that is at/above the minimum (0.5.0) but behind the latest recommended. The classifier was collapsed to a flat "current" in the 0.4.0 release (JSONbored#265), which was only safe because that release set MINIMUM === LATEST_RECOMMENDED (the stale band was empty). JSONbored#745 bumped LATEST_RECOMMENDED to 0.6.0 and reopened the [0.5.0, 0.6.0) band without restoring the stale arm, so every supported-but-behind client (e.g. 0.5.x) is misclassified as "current". This silently under-reports the `staleEvents` MCP-adoption counter (src/types.ts, surfaced on the operator dashboard), since auto-classified events could never be stale. Restore the original comparison against LATEST_RECOMMENDED_MCP_VERSION so a version in [minimum, latest) classifies as "stale". Update the three existing assertions that encoded the buggy "current" output and add both-arm coverage (0.5.x → stale, 0.6.0+ → current).
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
JSONbored
left a comment
There was a problem hiding this comment.
Closing this, and I won't be approving its CI run — here's why.
This account is permanently blocked from contributing to our repositories — for plagiarism. You filed two copies of another contributor's open work as your own:
- #1377 was an identical copy of kiannidev's #1376 (same source change, tests reworded to disguise the lift), filed ~90 minutes later on the same issue.
- #1378 was a byte-identical copy of kiannidev's #1373, filed ~2 hours later on the same issue.
That's two strikes, and lifting another contributor's diff is a hard line for us. Our Code of Conduct now states it explicitly: plagiarism and reward-farming result in a permanent block from contributing, across JSONbored/gittensory, JSONbored/metagraphed, and JSONbored/awesome-claude.
Because the account is blocked, there's no merit review to run here — I'm not going to approve the workflow just to evaluate a PR that closes regardless. Closed and labeled slop as enforcement of the ban. This decision is final.
What & why
classifyMcpClientVersioncan return"stale", andLATEST_RECOMMENDED_MCP_VERSION(0.6.0) exists precisely to mark a client that is at/above the minimum (0.5.0) but
behind the latest recommended. That arm was lost in the 0.4.0 release (#265), which
collapsed the classifier to a flat
"current". That was only safe because #265 also setMINIMUM_SUPPORTED === LATEST_RECOMMENDED, so the[minimum, latest)stale band wasempty and unreachable.
#745 later bumped
LATEST_RECOMMENDED_MCP_VERSIONto 0.6.0 and reopened the[0.5.0, 0.6.0)band without restoring the stale arm. As a result, everysupported-but-behind client (e.g. any
0.5.x) is misclassified as"current".Impact
This silently under-reports the
staleEventsMCP-adoption counter (src/types.ts,surfaced on the operator dashboard): auto-classified telemetry events could never land in
the
stalebucket, so the dashboard reports zero stale adoption even when behind-versionclients are actively connecting. It's a metrics-correctness regression, not a
user-facing crash — which is why it went unnoticed.
The fix
Restore the original comparison against
LATEST_RECOMMENDED_MCP_VERSIONinsrc/services/mcp-compatibility.ts. After the existingminimumchecks pass, a versionin
[minimum, latest)classifies as"stale";>= lateststays"current":