Skip to content

chore(specs): gardener checkbox sync - #1138

Merged
Dumbris merged 4 commits into
mainfrom
claude/spec-gardener
Sep 7, 2026
Merged

Dumbris merged 4 commits into
mainfrom
claude/spec-gardener

Conversation

@Dumbris

@Dumbris Dumbris commented Aug 31, 2026 •

Copy link
Copy Markdown
Member

Pull Request

Description

Automated spec-gardener run (2026-08-31): 6 checkbox ticks applied, 1 un-tick candidate proposed (NOT applied), across 3 specs with confirmed ticks. Ran scripts/check-spec-evidence.py across all 70 specs (65 unresolved, 1 removed, 29 relocated-informational, 140 possibly-built), then fanned out verification across 10 parallel research passes (grouped by spec), each applying this repo's tick test: state the promised behaviour, cite file:line, confirm it's real (not a stub/comment/unwired component/skipped test), and default to not-ticking when uncertain. Only - [ ]/- [x] checkbox characters in specs/*/tasks.md were changed, plus the required ROADMAP.md regeneration — no task prose, no other files.

Note: claude/spec-gardener had been fully merged since the last gardener run (PR #999), so this run restarted the branch from the latest main (force-with-lease push of already-merged history, per the gardener's merged-PR restart rule) before doing any new work.

Update (2026-09-07): a subsequent scheduled gardener run restarted this branch again from a newer main (which had since merged PR #1204/#1202, the spec-058 mcp-go v1.0.0 upgrade) and ticked 19 additional tasks in specs/058-mcp-2026-upgrade/tasks.md — see the dedicated section below. All other content in this description is from the original 2026-08-31 run and still accurate for the specs it covers.

Testing

  • I have tested these changes locally (diff is checkbox-only + regenerated ROADMAP.md; verified with git diff that no other content changed)
  • I have added/updated tests that prove my fix is effective or my feature works — N/A, this PR only edits spec tracking checkboxes
  • All existing tests pass — no application code was touched; each ticked task was independently verified against real, passing tests/code cited below

Applied ticks — 2026-08-31 run

Spec / Task File:Line Decisive code
001-code-execution T071 internal/server/mcp_code_scripts_test.go:462-490 TestCodeExecutionDisabledStub_AcceptsScript — disabled flag swaps in a stub tool (no call_tools capability), equivalent to excluding the live tool from tools/list
001-code-execution T072 internal/server/mcp_code_scripts_test.go:500-531 TestCodeExecution_DisabledGateCoversEveryDispatch — asserts every dispatch path returns a "disabled" error when enable_code_execution=false
001-code-execution T073 internal/server/code_execution_hotreload_test.go:39-56 TestBuildCodeExecutionTool_FollowsCurrentConfig — enabling the flag returns the live (non-stub) tool
001-code-execution T074 internal/server/code_execution_options_test.go:162-187 TestRESTCodeExecOmittedOptionsKeepConfigDefaults — asserts Zero(options.TimeoutMs) etc. when options are omitted, confirming config defaults apply
010-release-notes-generator T021 docs/release-notes-generation.md:104-116 "Release notes are automatically included when available: File placed in DMG root..." — documents the actual flat-file mechanism (task's literal releases/ directory wording is stale; the shipped design is flat-file and it's fully documented)
017-activity-cli-commands T055 docs/cli/activity-commands.md (668 lines) Full dedicated activity-commands doc exists (different file than the task's literal docs/cli-management-commands.md cite, same promised behaviour: documenting the activity CLI commands)

Applied ticks — 2026-09-07 run (058-mcp-2026-upgrade, T001-T019)

The 2026-09-07 gardener run restarted the branch after PR #1204 ("feat(058): adopt mcp-go v1.0.0, pinned inert on both protocol hops") and PR #1202 ("docs(058): implementation plan for the MCP 2026-07-28 upgrade") merged to main, and found the following tasks in specs/058-mcp-2026-upgrade/tasks.md already satisfied by that landed work. Spot-verified against the current tree:

Task File:Line Decisive code
T001 go.mod github.com/mark3labs/mcp-go v1.0.0
T002-T007 bench/mcpcall_test.go, internal/server/mcp_routing_test.go, internal/upstream/listtools_logging_test.go, internal/upstream/manager_prompts_test.go, internal/upstream/managed/prompts_test.go, internal/upstream/core/prompts_test.go All sites swapped from NewTestStreamableHTTPServer to the servertest package
T008 CI/build go build ./..., go build -tags server, go vet ./..., go vet -tags server ./... all exit 0
T009 internal/server/protocol_era_test.go Wire-capture test: unpinned client still negotiates 2025-11-25
T010 internal/upstream/core/protocol_pin_test.go Wire-capture test: upstream initialize still requests 2025-11-25
T011 internal/server/server.go:2535 func clientFacingStreamableOptions() []server.StreamableHTTPOption — applied at all 5 NewStreamableHTTPServer sites (e.g. line 949)
T012 internal/upstream/core/connection_lifecycle.go Upstream handshake pinned to mcp.LATEST_LEGACY_PROTOCOL_VERSION
T013-T014 internal/server/era_harness_test.go forEachEra helper; a deliberately mis-pinned era fails the assertion
T015-T016 internal/hash/schema_ref_test.go, internal/hash/hash.go:150 draft07RefPrefix = "#/definitions/" — NormalizeJSON canonicalizes #/definitions/ to #/$defs/
T017-T018 internal/server/content_forward_test.go, internal/server/content_forward.go, internal/server/mcp_routing.go Result fields copied explicitly instead of assigning the embedded envelope wholesale
T019 specs/058-mcp-2026-upgrade/tasks.md checkpoint note Frozen tool-surface goldens confirmed byte-identical (task itself records this was checked, not regenerated)

All 19 are Phase 1/2 foundational tasks (get the mcp-go v1.0.0 bump compiling and prove it's wire-inert) — genuinely gating work for the rest of spec 058, which remains largely unstarted (19/81, 23%).

Proposed un-ticks (NOT applied)

Spec / Task Currently Evidence for absence
026-pii-detection T074 [x] Task promises CLI unit tests for JSON/YAML output carrying sensitive-data-detection fields. cmd/mcpproxy/activity_cmd_test.go has TestActivityListCommand_JSONOutput, but its mock activity fixture has no sensitive_data_detection/has_sensitive_data fields — no test (JSON or YAML) asserts detection data survives output formatting. The adjacent implementation task (T079, pass-through of the raw activity map in JSON/YAML mode) does appear to work, but the specific test T074 promises was not found anywhere in the repo. A human should confirm this is genuinely missing before un-ticking.

Dropped by verification (2026-08-31 run)

200 candidates were investigated and dropped (i.e., left as-is) across 10 parallel verification passes. Full detail:

001-code-execution (13 possibly-built dropped)

  • T020, T032, T033, T034: mock-upstream / chained-failure / nested-input integration tests never written (existing tests use flat inputs or don't wire two mock servers)
  • T051, T052: no test passes nested objects/arrays as JS input; nested-array result coverage exists but only incidentally inside an unrelated modern-JS-syntax test — too indirect to tick
  • T079: ExecutionID UUID generation is real but no test asserts uniqueness/format
  • T080: truncated_code/tools_called/duration_ms log fields never implemented (only execution_id is)
  • T092: a real e2e CLI test exists (cmd/mcpproxy/integration_test.go, TestIntegration_CodeExecStandaloneMode) but is gated by an integration build tag never invoked by any script/CI — unwired
  • T093, T095, T096: no test for --file flag, JS-syntax-error exit code, or timeout behavior
  • T094: only --input tested; --input-file has zero coverage

001-oas-endpoint-documentation (6 possibly-built dropped)

  • T013, T014, T015: handleGetSecretRefs/handleGetConfigSecrets/handleMigrateSecrets still have zero swag @Summary/@Router annotations
  • T025, T026, T027: code_exec.go ServeHTTP and handleSSEEvents/HEAD /events still have zero swag annotations

001-update-version-display (6 possibly-built dropped)

  • T012: version menu item exists but no test exercises setupMenu/versionItem
  • T019: immediate pre-ticker startup check exists in code but untested
  • T020: check interval is now 24h (daily), not 4h as the task describes — no ticker-firing test either; task superseded by a design change
  • T024: e2e script never asserts .data.update exists
  • T028: only a narrow "disable clears stale nudge" test exists, not general visibility-toggle coverage
  • T029: "Check for Updates" menu item was removed (confirmed via grep) but no test asserts its absence

003-tool-annotations-webui (3 possibly-built dropped)

  • T046: no SessionsTable.vue exists anywhere; Dashboard only links to /sessions
  • T050: getToolCalls() has no sessionId parameter
  • T058: no sessions.created/updated/closed SSE events exist; only status/ping are emitted

004-management-health-refactor (9 possibly-built dropped)

  • T022, T069: no CLI E2E test for upstream restart / bulk --all restart (only service-layer unit tests exist, a different layer than specified)
  • T039: doctor_cmd_test.go has only unit tests, no true E2E against a live daemon
  • T083: no logHTTPRequest symbol anywhere
  • T085: container log streaming was deliberately disabled entirely ("we intentionally do NOT stream container logs"), contradicting the task's "stderr only" framing
  • T086, T087: no redactToken/sanitizeAuthHeader functions exist; existing sanitizer tests cover unrelated GitHub-token patterns
  • T091: no REST endpoint mapping table exists in docs/cli-management-commands.md
  • T092: plan.md states an intent to add an architecture diagram but no diagram was ever added

006-oauth-extra-params (8 possibly-built dropped)

  • T039: extra OAuth params still printed raw in auth_cmd.go; maskExtraParams/maskOAuthSecret exist but are wired only into transport logging, not the status display
  • T040: no redirect URI field anywhere in the auth status output
  • T042: token expiry is shown but no "last refresh" field exists anywhere in the repo
  • T043, T044: no configuration/provider/scopes preview printed before the OAuth call or before opening the browser
  • T045: CLI never prints a generated authorization URL (only a static provider endpoint) before login
  • T046: post-success message is a generic "authentication successful" line, not a verification summary
  • T054: doctor diagnostics gives a prose hint only, no example JSON config snippet

007-oauth-e2e-testing (5 possibly-built dropped)

  • T080, T082: same gaps as 006-T045/T039 — no auth-URL preview, no status-field masking
  • T084: zero grant_type/provider_url/scope structured logging fields in connection.go
  • T086: no discovery-endpoint reachability check in diagnostics
  • T088: auth_cmd_test.go never exercises displayAuthStatusPretty or asserts printed text

008-oauth-token-refresh (6 possibly-built dropped)

  • T020–T023, T027: zero correlation-related code in config.go, discovery.go, persistent_token_store.go, managed/client.go; CreateOAuthConfig still takes no context param
  • T026: the named handleOAuthAuthorization function itself has no correlation-id logging (only its sibling handleOAuthAuthorizationWithResult does) — a genuinely unfinished half, not a rename

009-proactive-oauth-refresh (21 possibly-built dropped)

All 21 (T011, T031–T034, T041, T044, T045, T054, T060, T062, T067–T071, T074, T076–T078, T082) independently re-verified absent: no OAuth SSE event types in contracts.ts, only mock stubs for TriggerOAuthLogout (no real tests), no --all logout flag, no distinct oauthExpired/isAuthenticated/oauthError computed properties or badges (the UI evolved toward a unified signInState/health-badge model that deliberately collapses these), no logout confirmation dialog, no FormatRelativeTime function, no token-expiration/5-minute-warning/EXPIRED display elements, and verify-oas-coverage.sh is still broken (self-contradictory coverage output, exit 1).

026-pii-detection (3 possibly-built dropped, 1 un-tick candidate — see above)

  • T104, T108, T109: no E2E test for custom detection patterns, no sensitive-data scenarios in test-api-e2e.sh, no SSE-emission test for detections

010/011/012/014/016/017/019/021 (assorted, 13 dropped)

  • 011-resource-auto-detect T033: no "resource" diagnostic in doctor_cmd.go
  • 014-cli-output-formatting T035: doctor_cmd.go is the one CLI command never migrated to internal/cli/output
  • 016-activity-log-backend T035: handleExportActivity (json/csv) has zero test coverage
  • 017-activity-cli-commands T028, T029, T035, T037, T041, T047: no ULID validation, show's table-formatting code never invoked by any test, no distinct invalid-ID-format handling, summary logic lives inline in the HTTP handler rather than as a storage method, summary's table-printing code never invoked by a test, no export path validation
  • 017 T059/T060: CI-process tasks, not statically verifiable
  • 019-activity-webui T046: ActivityWidget.vue exists but is never imported into Dashboard.vue — unwired
  • 021-request-id-logging T030: only the API-param path is tested; no test exercises the CLI --request-id flag itself

028-agent-tokens / 029-mcpproxy-teams / 040-server-ux (6 dropped)

  • 028 T023: token_cmd_test.go tests list/create behaviorally but revoke/regenerate only structurally (flags/args, no success/not-found assertions)
  • 029 T020: server-edition Linux matrix entries in release.yml are still commented out
  • 040 T016–T019: native macOS import flow has no preview/checkbox step, no per-server failure breakdown, no NSOpenPanel browse button, no timeout override on the import request

042-telemetry-tier2 (12 possibly-built dropped)

  • T009: roundtrip test covers only 3 of 4 tier2 config fields
  • T028, T035, T036, T037: wiring is real (surface/builtin-tool/upstream-call telemetry counters, privacy scrubbing) but no test drives it through the actual handler/proxied call and asserts the counter or privacy guarantee end-to-end
  • T054, T056: error-category wiring is real but untested for the specific failure scenario
  • T057: ErrCatOAuthTokenExpired defined but never referenced anywhere; no registry accessor added to the OAuth coordinator
  • T073: doctor→telemetry wiring is real but untested
  • T076, T077: no CLI-level test for telemetry show-payload (TestShowPayloadPrintsValidJSON/no-network-call guarantee)
  • T083: docs/features/telemetry.md is missing DO_NOT_TRACK/CI env var docs, the heartbeat schema link, and the ID-rotation policy section

044-diagnostics-taxonomy (10 possibly-built dropped)

  • T004: no go:generate directive or codegen tool anywhere in internal/diagnostics/
  • T019: only the unrelated in-memory telemetry counter named RecordFixAttempt exists; nothing writes fix attempts to the activity log
  • T034: test-diagnostics-e2e.sh never spawns a real broken-stdio server against a live daemon
  • T045: check-errors-docs-links.sh exists but isn't wired into run-all-tests.sh
  • T083: no test exercises dry-run + 429 rate-limit together
  • T090: stdio_show_last_logs fixer is still an explicit stub string
  • T162: the diagnostics-sub-object test is real but lives in a different package (internal/telemetry/payload_phase_h_test.go) than an HTTP-handler-level test
  • T201, T202: docs/architecture.md never mentions internal/diagnostics/; server-scoped /diagnostics and /diagnostics/fix endpoints (which do exist in code) are undocumented
  • T203: docs/errors/README.md is still hand-maintained/stale; no generator produces it

044-retention-telemetry-v3 (3 possibly-built dropped)

  • T003: docs/features/telemetry.md never got the "Environment Classification"/"Activation Tracking"/"Launch Source" sections
  • T063: same doc never covers env_kind/env_markers/activation/autostart_enabled/bucketing despite the underlying code being real
  • T069: no recorded quickstart-verification results artifact exists anywhere

056/057/073/076/077/083/096/097 (assorted CI-gate and doc tasks, 9 dropped)

  • 056-output-schema-validation T019: test-api-e2e.sh never extended with outputSchema/policy-decision assertions
  • 057-in-proxy-profiles T022: 2 of 3 required doc updates (CLAUDE.md, README.md) still missing
  • 073-activity-size-retention T012: activity_max_size_mb documented only in docs/features/activity-log.md, not in docs/configuration.md as the task requires
  • 076-deterministic-tool-scanner T023: gofmt -l still flags 5 files including the package the task names; the gofmt/goimports step was never actually run
  • 077-scanner-simplification T040: manual quickstart scenarios have no recorded PASS/FAIL results
  • 077 T041, 083-discovery-profiler T041, 097-stored-scripts T014: go test -race ./internal/... / ./bench/... gates fail in this sandbox purely on tiktoken-vocab-fetch 403 Forbidden (blocked egress) and one shellwrap test tripped by the sandbox's own HTTPS_PROXY — environment-caused, not code defects, but per "when uncertain, don't tick" these stay unticked since the literal gate isn't green here
  • 096-batched-call-tools T016: the specific quickstart smoke-check (REST code/exec against the e2e everything-server) has no recorded evidence of having been run, even though the underlying call_tools feature is implemented

098-tools-preflight (1 dropped, flagged for reconsideration)

  • T032: the prior gardener run (PR chore(specs): gardener checkbox sync #999) dropped this because ./scripts/test-api-e2e.sh appeared unrunnable outside a workflow_call-only reusable workflow. This run actually executed it locally and it passed cleanly (63 passed / 0 failed / 2 skipped), along with golangci-lint (0 issues), make swagger-verify, go run ./cmd/generate-types (no diff), and both edition builds + server-edition race tests. The prior blocking rationale is disproven. The only non-green gate is go test -race ./internal/..., which fails solely on the same tiktoken-network/sandbox-HTTPS_PROXY artifacts described above — not a code defect. Left unticked per "when uncertain, don't tick," but a human may reasonably conclude this should be ticked on a machine with normal network access; flagging explicitly rather than deciding it here.

102-schema-deferred (RELOCATED, no un-tick — confirms current tick is correct)

  • T021: cited internal/server/mcp_direct_scope_test.go never existed, but the equivalent test lives in internal/server/mcp_direct_catalog_publish_test.go (comment explicitly says "Spec 102 T021") — correctly left ticked.

RELOCATED findings confirming existing ticks are correct (23 items, no action)

The following UNRESOLVED/REMOVED findings from the checker were all confirmed relocated, not missing — equivalent code/tests exist under renamed or consolidated files — and were correctly left ticked:

  • 001-oas-endpoint-documentation T003/T005/T006/T007 → types consolidated into internal/contracts/types.go
  • 005-rest-management-integration T013/T014/T015/T037 → consolidated into internal/management/service.go
  • 009-proactive-oauth-refresh T005 → fields live in internal/contracts/types.go
  • 011-resource-auto-detect T039 → mock-OAuth E2E test under a different filename
  • 012-docusaurus-docs-site T067 → confirmed still a templated doc-link-format placeholder, pervasively used
  • 016-activity-log-backend T017/T026 → real coverage exists under different filenames (e2e_test.go, activity_service_test.go)
  • 028-agent-tokens T011/T028/T034/T036 → scope-enforcement, agent-metadata, and frontend token-API tests/functions all exist under renamed files
  • 029-mcpproxy-teams T009 → teams_register.go renamed to serveredition_register.go (Teams→ServerEdition rename), still functional
  • 040-server-ux T002 → PATCH-endpoint tests exist in patch_server_test.go/server_config_patch_test.go
  • 042-telemetry-tier2 T050/T051/T052/T061/T062/T063/T070/T078 → all real, under renamed files (startup_outcome.go, telemetry.go methods, notice_test.go, etc.)
  • 044-retention-telemetry-v3 T052/T053 → installer-pending and macOS AutoStartService wrappers exist at different paths
  • 047-cpu-hotpath-fix T029 → handleServersChanged in frontend/src/stores/servers.ts matches the task's own "or equivalent path" hedge
  • 090-tray-glance-v2 T024/T032 → TestGetRecentSessions_OrdersByLastActivityBeforeTruncation and the .jsonl fixture both confirmed present; checker's "never existed" was a false positive

Notes

  • ROADMAP.md was regenerated via python3 scripts/gen-roadmap.py after each checkbox-sync commit, per the pre-commit staleness check.
  • The claude/spec-gardener branch was reset to the tip of main twice (2026-08-31 and again 2026-09-07) via force-with-lease pushes of already-merged history, per the gardener's merged-PR restart rule, since it carried no unmerged work beyond main at either point.
  • Out-of-scope observation for human awareness (not a formal un-tick candidate, since the checker didn't flag it): while investigating 008-oauth-token-refresh T026, a verification pass noticed tryHTTPOAuthStrategy — the function 008-T025 (already ticked, not in this run's scope) claims to have updated — does not exist anywhere in the current codebase. Worth a look in a future run.

Cap: 40 applied ticks per run — 2026-08-31 found 6, 2026-09-07 found 19, both well under the cap.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 31, 2026 •

Copy link
Copy Markdown

Deploying mcpproxy-docs with  Cloudflare Pages  Cloudflare Pages

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

View logs

@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!

@github-actions

github-actions Bot commented Aug 31, 2026 •

Copy link
Copy Markdown
Contributor

📦 Build Artifacts

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

Available Artifacts

  • archive-darwin-amd64 (29 MB)
  • archive-darwin-arm64 (26 MB)
  • archive-linux-amd64 (17 MB)
  • archive-linux-arm64 (16 MB)
  • archive-windows-amd64 (29 MB)
  • archive-windows-arm64 (26 MB)
  • frontend-dist-pr (0 MB)
  • installer-dmg-darwin-amd64 (23 MB)
  • installer-dmg-darwin-arm64 (21 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 34086845443 --repo smart-mcp-proxy/mcpproxy-go

Note: Artifacts expire in 14 days.

@Dumbris
Dumbris force-pushed the claude/spec-gardener branch from 987649a to cef81c7 Compare September 7, 2026 05:26
@Dumbris
Dumbris marked this pull request as ready for review September 7, 2026 06:50
@Dumbris
Dumbris merged commit b2a1cdb into main Sep 7, 2026
43 checks passed
@Dumbris
Dumbris deleted the claude/spec-gardener branch September 7, 2026 06:50
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