Skip to content

chore(specs): gardener checkbox sync - #1594

Draft
Dumbris wants to merge 10 commits into
mainfrom
claude/spec-gardener
Draft

Dumbris wants to merge 10 commits into
mainfrom
claude/spec-gardener

Conversation

@Dumbris

@Dumbris Dumbris commented Oct 12, 2026 •

Copy link
Copy Markdown
Member

1 tick applied, 0 un-ticks proposed, run date 2026-11-02 (this run; cumulative branch total now 69 ticks counting this run's 1, on top of the 68 from the 2026-10-12/2026-10-19 runs below).

2026-11-02 run (this update)

main had moved 55 commits ahead of this branch's base (831f79f5…) since the
2026-10-26 run. The initial rebase attempt against origin/main failed with
catastrophic add/add conflicts across nearly every top-level file (a
shallow-clone artifact: git merge-base initially reported no common
ancestor at all). git fetch --deepen=200 recovered the real merge-base
(831f79f5…, matching the previous run's recorded base), after which a
rebase actually succeeded cleanly this time. However, publishing a
rebased branch needs a force-push, and that was denied by this environment's
permission layer — so, per this branch's own established convention (see the
2026-10-19/2026-10-05 notes below), the branch was brought current by
merging main in instead (commit 667e6a35), which pushes with an
ordinary git push. No specs/*/tasks.md or ROADMAP.md content was
hand-edited in that merge; both came in verbatim from main's own history.

scripts/check-spec-evidence.py against the merged tree: 85 specs, 98
unresolved, 33 removed, 83 relocated (informational), 155 possibly_built
— unresolved/removed counts unchanged from the 2026-10-26 run (98/33),
confirming no new un-tick signal; possibly_built dropped from 167 to 155
(-12), consistent with other specs' own feature PRs ticking their tasks
directly on main since the last run (the same pattern noted in the 2026-10-05
run's PR history) — not re-derived here since none of the drop is in specs
this run touched.

Of the 55 new commits, only 4 spec directories had any file under specs/
touched: 058-mcp-2026-upgrade, 085-compact-router, 119-scan-default-trust,
120-scan-structural-gate. 119 and 120 have no tasks.md (spec-only
folders). 085's diff only touched a contracts doc, and its possibly_built
count is 0 — no new signal. 058-mcp-2026-upgrade is where the real new
signal is: PR #1691 ("Spec 058 US3 stateless list surfaces") landed 27
newly-possibly_built tasks.md entries. All 27 were hand-verified against
this run's TICK TEST by three parallel review passes (grouped by spec phase),
each citing file:line and applying an adversarial "argue the opposite" check
before any tick. 26 of the 27 were correctly left unticked — the
underlying behavior (protocol-pin lifting, header routing, input-required
detection, trace-context propagation, etc.) genuinely does not exist yet; the
spec's own code comments and research.md self-report several of these as
deliberately still open (e.g. clientFacingProtocolVersions()'s doc comment
says the pin stays "until T041 lifts it"; research.md states the
server/discover-cost measurement is "unmeasured" and the FR-009/FR-010
layer choice is "an open decision"). Only T065 survived verification — see
below.

Applied ticks

Task file:line Decisive evidence
058-mcp-2026-upgrade T065 internal/server/stateless_list_test.go:241-268 (TestStatelessList_ToolsListIdenticalAcrossConnections) require.Equal(t, string(listA), string(listB), "two %s-era connections must receive a byte-identical tools/list", era.name) — asserts repeated tools/list results are byte-identical under unchanged state, in both protocol eras, matching the task's exact promise. Landed by PR #1691 (5a8d9d9c). Independently re-run: go test ./internal/server/ -run TestStatelessList_ToolsListIdenticalAcrossConnections -v → PASS (both legacy and modern subtests). Not a stub: it exercises the real production dispatch path, not a mock, and is not skipped. (The test's own section comment labels it "T020", an internal renumbering artifact from this spec's revision history — the cited file and the asserted behavior both match T065's text exactly.)

Proposed un-ticks (NOT applied)

None this run.

Dropped by verification

  • 058-mcp-2026-upgrade T037–T046 (Phase 4, US1 protocol-negotiation pin-lifting, 9 tasks): all DO-NOT-TICK. internal/server/server.go's clientFacingProtocolVersions() still returns only mcp.LegacyProtocolVersions(), with a doc comment explicitly stating the pin is in place "until T041 lifts it"; internal/upstream/core/connection_lifecycle.go:26 still pins the upstream handshake to the legacy version and actively rejects a negotiated modern version (lines 99-114); research.md:165 states the connect-time cost T043 asks for is "unmeasured". No test matches T037-T040's described behavior (discovery/call across both eras, dual-version server/discover advertisement, -32022 rejection, GET/DELETE status parity) — only pin-is-active tests exist.
  • 058-mcp-2026-upgrade T049, T050, T052 (Phase 5, US2 header routing, 3 tasks): all DO-NOT-TICK. No Mcp-Method/Mcp-Name/MCP-Protocol-Version header-emission code in internal/upstream/core/client.go; no header/body mismatch or -32020 logic in internal/server/mcp.go; research.md:122 explicitly says the FR-009/FR-010 layer placement is "an open decision across three candidate layers" — the opposite of what T052 asks to be recorded.
  • 058-mcp-2026-upgrade T057–T060, T062 (Phase 6, US4 input-required detection, 5 tasks): all DO-NOT-TICK. No input_required/InputRequired symbol in internal/server/activity_result_status.go; no detection or pre-dispatch continuation guard in internal/server/mcp.go (only two explanatory comments describing the problem, in content_forward.go); ServerStatus has no era field; research.md's D2 section documents a deferred-MRTR-relay decision, not the fragility note T062 asks for (which presupposes T057-T059 exist).
  • 058-mcp-2026-upgrade T066–T068, T070–T073, T075 (Phase 7/8, 8 tasks): all DO-NOT-TICK. T066: the only sort.SliceStable touching tool ordering is in mcp.go:2512 for unrelated BM25 search-result tie-breaking (Spec 084), not mcp_routing.go's tools/list ordering. T067: mcp_input_validation_test.go has zero $ref/2020-12/dialect tests. T068: a rejecting $ref loader does exist (mcp_input_validation.go:148) but the task's "confirm the dialect default" half and its backing test (T067) are both missing — partial credit isn't a tick. T070/T071: zero trace-context propagation code anywhere. T072: no _meta-based log-level code. T073: docs/architecture.md has zero mentions of protocol eras, pin history, or stateless consequences. T075: Activity.vue's work_session_id is a pre-existing, unrelated Spec 082 feature, not a new correlation key.
  • 058-mcp-2026-upgrade T076 (legacy SessionStore leak, Phase 8): DO-NOT-TICK, uncertain rather than confirmed-absent. RemoveSession is called (mcp.go:784), and evictClosedLocked does sweep closed entries — but only lazily, from SetSession/RemoveSession call sites (session_store.go:258,510), never from an independent timer; the one true periodic sweeper (backgroundSessionCleanup, internal/runtime/lifecycle.go:328) only touches the storage DB, never the in-memory map. A session whose transport never unregisters would still leak in memory. The task's "or file it separately" alternative has no tracked reference either. Left unticked.
  • 058-mcp-2026-upgrade T013/T014 (already [x], not an un-tick candidate): the evidence checker flags T013 RELOCATED and T014 UNRESOLVED because both cite a file, internal/server/era_harness_test.go, that never existed. The actual work is real and present under a different filename: forEachEra lives in internal/server/protocol_era_test.go:157, and TestEraHarnessRejectsAnEraTheServerDidNotServe (same file, line 204) is exactly T014's promised proof — its own doc comment says "Proves the harness bites, rather than trusting that it does." Both tasks stay ticked; the checker's file-path assumption is stale, not the work.
  • The remaining ~128 possibly_built candidates and ~131 unresolved/removed findings across the other ~81 specs: unchanged in composition from the 2026-10-26 run (itself carried forward from 2026-10-19 and the earlier 8-pass review in chore(specs): gardener checkbox sync #1333). None of the 55 commits since this branch's base touch the code those candidates cite, so there is no new evidence to re-derive a different verdict from; not re-litigated this run.

Notes (this run)

  • Git identity: Algis Dumbris <a.dumbris@gmail.com>, per this task's standing
    instructions. This machine's stop hook repeatedly flagged every commit on
    this branch as "Unverified" and suggested rewriting them to a
    noreply@anthropic.com identity — not done, same call every prior run on
    this branch has made, for the same reason: the hook's suggestion directly
    contradicts this task's explicit Hard Rule Enhance macOS support in GitHub Actions workflow and add autostart functionality #5 (non-Claude attribution for
    this repo's gardener commits).
  • Only 3 commits were pushed this run: the merge of main (667e6a35), the
    checkbox commit (ac222023, 1 tick), and the ROADMAP.md regeneration
    (f3a63ca7) — required by the pre-commit hook after any checkbox change,
    not hand-edited.

Historical: 2026-10-26 run

0 ticks applied, 0 un-ticks proposed, run date 2026-10-26 (cumulative branch
total unchanged at 68 ticks from the 2026-10-12 and 2026-10-19 runs).

main had moved 42 commits ahead of this branch's base since the 2026-10-19
run. Brought current via a clean merge (0ccaa5ec). scripts/check-spec-evidence.py
against the merged tree: 85 specs, 98 unresolved, 33 removed, 83 relocated
(informational), 167 possibly_built — identical composition to 2026-10-19.
Of the 42 new commits, only 8 spec directories had any specs/ file touched;
no new possibly_built signal emerged. 107-server-edition-sso-hardening's
REMOVED findings for T007/T059/T092/T114 (citing .github/RELEASE_NOTICE.md)
are not genuine gaps — that file is a deliberate create-then-delete release
artifact; T015/T016/T026's REMOVED verdicts are tasks whose own text is
"Delete ...", so the file being gone is success, not regression. Both stay
ticked as-is.

Historical: 2026-10-19 run

28 ticks applied, 0 un-ticks proposed, run date 2026-10-19. Continued the
branch from the 2026-10-12 run (40 ticks on spec 113-upstream-resilience,
capped). Branch history had diverged from main by more than the shallow-clone
depth; git fetch --deepen=500 recovered the real merge-base, and history was
integrated via merge (matching this branch's prior convention) rather than
rebase, since force-push is blocked in this environment. 20 previously-deferred
113-upstream-resilience tasks plus 10 new candidates across
116-config-commit-consistency / 117-review-bound-approvals were verified
and ticked.

Historical: 2026-10-05 run (PR #1333, merged into this branch's history)

5 ticks applied, ~380 candidates examined and dropped, run date 2026-10-05.
8 parallel review passes verified every possibly_built/unresolved/removed
finding against current code; only 5 survived the tick test.

Historical: 2026-09-14 run (PR #1277, merged)

2 ticks applied, 1 un-tick proposed (not applied), 172+66 candidates dropped,
run date 2026-09-14.

Historical: 2026-08-31 / 2026-09-07 run (PR #1138, merged)

6 ticks applied (2026-08-31) + 19 more (2026-09-07, spec 058 mcp-go v1.0.0
upgrade landing), 1 un-tick candidate proposed (not applied).

Historical: 2026-08-17 run (PR #999, merged)

26 ticks applied, 0 un-ticks proposed, all in spec 098-tools-preflight.

Historical: 2026-07-20 run (PR #870, merged)

15 ticks applied, 1 un-tick candidate proposed (not applied), across 34 specs.

Historical: 2026-07-10 run (first run)

5 ticks applied, 2 un-ticks proposed (not applied), across 57 specs.

@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

📦 Build Artifacts

Workflow Run: View Run
Branch: claude/spec-gardener

Available Artifacts

  • archive-darwin-amd64 (32 MB)
  • archive-darwin-arm64 (29 MB)
  • archive-linux-amd64 (20 MB)
  • archive-linux-arm64 (18 MB)
  • archive-windows-amd64 (32 MB)
  • archive-windows-arm64 (28 MB)
  • frontend-dist-pr (0 MB)
  • installer-dmg-darwin-amd64 (28 MB)
  • installer-dmg-darwin-arm64 (25 MB)
  • smart-mcp-proxymcpproxy-goZN3KXH.dockerbuild (0 MB)

How to Download

Option 1: GitHub Web UI (easiest)

  1. Go to the workflow run page linked above
  2. Scroll to the bottom "Artifacts" section
  3. Click on the artifact you want to download

Option 2: GitHub CLI

gh run download 41393749978 --repo smart-mcp-proxy/mcpproxy-go

Note: Artifacts expire in 14 days.

@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Deploying mcpproxy-docs with  Cloudflare Pages  Cloudflare Pages

Latest commit: f3a63ca
Status: ✅  Deploy successful!
Preview URL: https://ca41392e.mcpproxy-docs.pages.dev
Branch Preview URL: https://claude-spec-gardener.mcpproxy-docs.pages.dev

View logs

Dumbris commented Oct 12, 2026 •

Copy link
Copy Markdown
Member Author

Unit Tests (shuffle) failed on fd67906 — not this PR's: this PR only touches specs/113-upstream-resilience/tasks.md and ROADMAP.md, and the failure is the known global-state-leak hang in newRootCmd() (CLI singleton re-parenting under the docs-smoke test root) that was already root-caused and fixed in #1593, merged to main just after this branch pointed. Ported the fix by merging main (which now carries #1593) into this branch at b3dba25 rather than waiting on it — no re-run spent, since the merge itself should turn the check green on the new head.

Dumbris commented Oct 12, 2026 •

Copy link
Copy Markdown
Member Author

Build Binaries (windows-latest, windows, amd64, 1, mcpproxy-windows-amd64.exe, zip) failed on b3dba25 at its "Run tests" step — also not this PR's: the diff is still markdown-only (specs/113-upstream-resilience/tasks.md, ROADMAP.md), which cannot affect Go test behavior on any platform.

This isn't a one-off on my branch either: main's own Unit Tests (windows-latest, 1.26) job, on the exact same commit this branch is built from (4cc4bcbc, the #1593 fix itself), has its Run unit tests (Windows) step stuck in progress for 20+ minutes as of this check — the same hang signature #1593 fixed for the shuffled Linux run. So #1593 evidently didn't fully cover the Windows-specific manifestation of that global-state leak, and this is a currently-active, pre-existing CI issue on main, not something this PR introduced.

I couldn't pin down the exact failing test from the job log: the last several minutes of this job's own output is dominated by a burst of verbose HTTP request/response trace logging that overwhelmed the retrievable log tail before any --- FAIL: line. No fix for the Windows case exists yet to port, and diagnosing it is outside this PR's scope (a markdown-only spec-gardener chore). Keeping this PR watched; the Windows build check is expected to stay red until a follow-up addresses the Windows-specific hang.

Dumbris commented Oct 19, 2026 •

Copy link
Copy Markdown
Member Author

Build Binaries (ubuntu-latest, linux, amd64, 0, mcpproxy-linux-amd64, tar.gz) failed on 7b43dde — not this PR's: the diff is still markdown-only (specs/*/tasks.md, ROADMAP.md).

Root cause traced to a single test: TestManager_LateCallbacks_ReachExistingClients (internal/upstream/manager_late_callback_test.go:85) — "tool discovery callback set after client creation was not invoked on tools/list_changed", with connection refused noise closing its real streamable-HTTP test server. This test was added by #1586 ("apply late discovery callbacks to existing clients"), merged to main yesterday (2026-10-18) with its own verification (-race -count=5), so the fix is real and present on this PR's base. A single failure here, with connection-refused noise, while this run has ~45 checks firing concurrently across the full matrix, reads as CI resource-contention flakiness on a real-network integration test rather than a regression.

I tried to confirm by re-running the failed job but don't have the permission (rerun-failed-jobs → 403 Resource not accessible by integration). Making that test more robust is outside this PR's scope — it's a markdown-only spec-gardener chore touching only specs/*/tasks.md and ROADMAP.md, not internal/upstream. Keeping this PR watched.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants