monitor MCP 0.3.0: deployment-insights leg + lint leg (closes two Claude-only matrix gaps on Codex) - #14
Open
sethconvex wants to merge 1 commit into
Open
monitor MCP 0.3.0: deployment-insights leg + lint leg (closes two Claude-only matrix gaps on Codex)#14sethconvex wants to merge 1 commit into
sethconvex wants to merge 1 commit into
Conversation
…ttern rules) Leg 5 polls `npx convex insights` on the served cadence (default 10 min, CONVEX_MONITOR_INSIGHTS_INTERVAL_MS/-CMD seams for tests), snapshot-diffs against the previous poll, and emits kind `occ` with only the NEW write-conflict / read-limit lines plus the fix playbook. Hard-gated to cloud non-anonymous CONVEX_DEPLOYMENTs, silent on any poll failure. Leg 6 ports the Claude plugin's 12 PreToolUse hard-deny lint rules (convex-backend-skill hooks/convex-lint.mjs) into a pure module (convex-lint-rules.mjs) and runs them on a debounced convex/*.ts watch — Codex can't intercept a write before disk, so the pattern surfaces as the next event instead (kind `lint_error`), per-file signature dedupe, pre-existing findings baselined silently at first arm. Plugin 0.4.6 → 0.4.7. Tests: 23 rule unit tests + 10 new integration scenarios (fire/dedupe/baseline for both legs); 45/45 pass. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Two new legs in
fix_errors_automatically, closing two of the three Claude-only rows in the plugin capability matrix (docs: /ai/plugins):occ): pollsnpx convex insightson the served cadence (default 600s, tunable from the anteater's monitors.json without a plugin release), snapshot-diffs, and surfaces only NEW OCC write-conflict / read-limit findings with the fix playbook. Self-guards: only cloud, non-anonymousCONVEX_DEPLOYMENT; silent on any poll failure. Same semantics as the Claudeconvex-occ-insightsshell monitor (first poll = silent baseline).lint_error): the Claude plugin's 12 PreToolUse hard-deny rules (convex-backend-skillhooks/convex-lint.mjs), ported to a pure moduleconvex-lint-rules.mjs, run on a debouncedconvex/*.tswatch. Codex has no pre-tool-use hook to block the write, so the anti-pattern surfaces as the next event seconds after it lands — before aconvex devpush cycle is wasted. Per-file signature dedupe; pre-existing findings are baselined silently on first arm (hook parity: only new writes fire).Server 0.2.1 → 0.3.0, plugin 0.4.6 → 0.4.7. Tool name and input schema unchanged (no review-triggering surface change).
Tests
lint-rules.test.mjs(new): 23 unit cases — every rule fires on its target pattern, plus false-positive discipline (JS array.filter,"use node"+ crypto, wrapped httpAction, non-convex paths,_generated/,.d.tsall stay clean).test.mjs: 10 new integration scenarios (lint fire / dedupe / pre-existing baseline; insights baseline→new-line fire, playbook note, anonymous-deployment self-guard). 45/45 pass.Notes
convex-agentscontent — port changes there first.specToConfignow also captures rawintervalSecByKind(additive; older specs unaffected).lintservedOnly kind in content/machinery/monitors.json + KIND_ALIASES so the machinery drift gate tracks coverage.🤖 Generated with Claude Code