@kryptosai/mcp-observatory 0.20.3 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/COMMERCIAL.md +67 -0
  2. package/PRIVACY.md +52 -0
  3. package/README.md +100 -4
  4. package/TERMS.md +30 -0
  5. package/dist/src/checks/resources.js +9 -19
  6. package/dist/src/checks/resources.js.map +1 -1
  7. package/dist/src/checks/security-rules.js.map +1 -1
  8. package/dist/src/checks/security.js +33 -14
  9. package/dist/src/checks/security.js.map +1 -1
  10. package/dist/src/checks/tools-invoke.js.map +1 -1
  11. package/dist/src/checks/tools.js.map +1 -1
  12. package/dist/src/ci-issue.js +3 -1
  13. package/dist/src/ci-issue.js.map +1 -1
  14. package/dist/src/cli.js +48 -1
  15. package/dist/src/cli.js.map +1 -1
  16. package/dist/src/commands/ci-report.js +4 -0
  17. package/dist/src/commands/ci-report.js.map +1 -1
  18. package/dist/src/commands/enterprise-report.d.ts +12 -0
  19. package/dist/src/commands/enterprise-report.js +192 -0
  20. package/dist/src/commands/enterprise-report.js.map +1 -0
  21. package/dist/src/commands/init-ci.d.ts +31 -0
  22. package/dist/src/commands/init-ci.js +238 -0
  23. package/dist/src/commands/init-ci.js.map +1 -0
  24. package/dist/src/commands/scan.js +4 -0
  25. package/dist/src/commands/scan.js.map +1 -1
  26. package/dist/src/commands/score.js +2 -0
  27. package/dist/src/commands/score.js.map +1 -1
  28. package/dist/src/commands/telemetry.js +47 -2
  29. package/dist/src/commands/telemetry.js.map +1 -1
  30. package/dist/src/commands/test.js +11 -5
  31. package/dist/src/commands/test.js.map +1 -1
  32. package/dist/src/commercial.d.ts +5 -0
  33. package/dist/src/commercial.js +46 -0
  34. package/dist/src/commercial.js.map +1 -0
  35. package/dist/src/reporters/common.d.ts +16 -0
  36. package/dist/src/reporters/common.js +76 -0
  37. package/dist/src/reporters/common.js.map +1 -1
  38. package/dist/src/reporters/html.js +20 -0
  39. package/dist/src/reporters/html.js.map +1 -1
  40. package/dist/src/reporters/markdown.js +14 -2
  41. package/dist/src/reporters/markdown.js.map +1 -1
  42. package/dist/src/reporters/pr-comment.js +18 -1
  43. package/dist/src/reporters/pr-comment.js.map +1 -1
  44. package/dist/src/reporters/terminal.js +9 -1
  45. package/dist/src/reporters/terminal.js.map +1 -1
  46. package/dist/src/runner.js +1 -1
  47. package/dist/src/runner.js.map +1 -1
  48. package/dist/src/telemetry.d.ts +27 -0
  49. package/dist/src/telemetry.js +57 -3
  50. package/dist/src/telemetry.js.map +1 -1
  51. package/dist/src/types.d.ts +5 -0
  52. package/dist/src/validate.js +48 -5
  53. package/dist/src/validate.js.map +1 -1
  54. package/docs/architecture.md +32 -0
  55. package/docs/certification-campaign-template.md +181 -0
  56. package/docs/certification-distribution.md +129 -0
  57. package/docs/compatibility.md +164 -0
  58. package/docs/decisions.md +23 -0
  59. package/docs/demo.svg +59 -0
  60. package/docs/directory-listing-copy.md +78 -0
  61. package/docs/distribution-launch.md +76 -0
  62. package/docs/enterprise-outreach-playbook.md +83 -0
  63. package/docs/feishu-lark-mcp.md +65 -0
  64. package/docs/known-issues.md +27 -0
  65. package/docs/mcp-safety-report-latest.md +85 -0
  66. package/docs/project-case-study.md +106 -0
  67. package/docs/proof.md +68 -0
  68. package/docs/publish-readiness.md +77 -0
  69. package/package.json +33 -18
  70. package/schemas/diff-artifact.schema.json +62 -66
  71. package/schemas/run-artifact.schema.json +107 -142
@@ -0,0 +1,106 @@
1
+ # MCP Observatory Case Study
2
+
3
+ ## One-Line Summary
4
+
5
+ MCP Observatory is CI/security infrastructure for production MCP servers.
6
+
7
+ ## Problem
8
+
9
+ MCP servers are becoming dependencies for AI agents. Teams need to know whether those servers still start, expose usable tools, keep schemas stable, avoid obvious security footguns, and behave consistently as agents depend on them.
10
+
11
+ ## Product
12
+
13
+ MCP Observatory provides:
14
+
15
+ - CLI checks for MCP servers
16
+ - MCP server mode so agents can inspect other MCP servers
17
+ - GitHub Action integration
18
+ - PR comments and commit status checks
19
+ - JSON, Markdown, HTML, JUnit, SARIF, and PR-comment reports
20
+ - schema drift detection
21
+ - record/replay/verify workflows
22
+ - health score badges
23
+ - static enterprise reports
24
+ - telemetry intelligence for product and account-level learning
25
+
26
+ ## Architecture
27
+
28
+ The project is a TypeScript/Node CLI with modular command handlers, MCP adapters, check runners, reporters, artifact schemas, and a GitHub Action wrapper. A Cloudflare Worker handles hosted artifact upload pilots, and a separate telemetry Worker stores private aggregate usage events in D1.
29
+
30
+ ## Technical Proof
31
+
32
+ As of June 19, 2026:
33
+
34
+ - 10k+ source lines in `src`
35
+ - 40 test files
36
+ - 321 passing tests
37
+ - npm package published
38
+ - GitHub Action available
39
+ - MCP server mode available
40
+ - telemetry export and company intelligence tooling available
41
+
42
+ ## Traction Snapshot
43
+
44
+ Safe public and aggregate signals:
45
+
46
+ - 10,278 telemetry events
47
+ - 7,211 telemetry sessions
48
+ - 5,368 external sessions after separating internal activity
49
+ - 582 GitHub clones and 175 unique cloners in the visible June 2026 traffic window
50
+ - 104 npm downloads during June 11-17, 2026
51
+
52
+ These are early signals. Public social proof is still limited and should be improved through the certification campaign.
53
+
54
+ ## Security And Privacy Posture
55
+
56
+ The project includes:
57
+
58
+ - telemetry opt-out controls
59
+ - privacy disclosure
60
+ - security policy
61
+ - token-based hosted artifact upload
62
+ - private-network rejection for hosted scans
63
+ - sanitized public reporting policy
64
+
65
+ Public claims should use aggregate metrics and accepted public integrations, not raw telemetry.
66
+
67
+ ## Commercial Path
68
+
69
+ The free OSS wedge is local testing and public repo CI. Paid value is production/private use:
70
+
71
+ - hosted CI history
72
+ - private repo reporting
73
+ - recurring security reports
74
+ - certification
75
+ - support
76
+ - fleet visibility
77
+ - enterprise review
78
+
79
+ Current pilot anchors:
80
+
81
+ - Team: starts at `$299/month`
82
+ - Business: starts at `$999/month`
83
+ - Enterprise: starts at `$3k/month`
84
+ - Strategic: `$250k+/year`
85
+
86
+ ## Job-Opportunity Value
87
+
88
+ This project demonstrates ability across:
89
+
90
+ - AI infrastructure
91
+ - developer tooling
92
+ - security tooling
93
+ - MCP ecosystem work
94
+ - CI/CD integrations
95
+ - telemetry and product analytics
96
+ - commercialization and enterprise packaging
97
+
98
+ It is strongest as a portfolio asset when paired with public proof: accepted external PRs, badges in other repos, directory listings, and a short demo.
99
+
100
+ ## Next Milestones
101
+
102
+ 1. Publish latest package with `init-ci`.
103
+ 2. Open first certification PR wave.
104
+ 3. Capture accepted PRs as public proof.
105
+ 4. Publish recurring MCP safety reports.
106
+ 5. Convert serious users into paid pilots.
package/docs/proof.md ADDED
@@ -0,0 +1,68 @@
1
+ # MCP Observatory Proof
2
+
3
+ MCP Observatory is early, but it is already a working MCP testing/security stack rather than a landing page.
4
+
5
+ ## Current Public Surface
6
+
7
+ - npm package: `@kryptosai/mcp-observatory`
8
+ - GitHub Action: `KryptosAI/mcp-observatory/action@main`
9
+ - CLI command count: scan, test, record, replay, verify, diff, watch, suggest, serve, lock, history, init-ci, ci-report, enterprise-report, score, badge, cloud
10
+ - Test suite: 321 passing tests across 40 test files as of June 19, 2026
11
+ - GitHub traffic snapshot: 582 clones and 175 unique cloners in the visible June 2026 traffic window
12
+ - npm downloads snapshot: 104 downloads for June 11-17, 2026
13
+
14
+ ## Safe Aggregate Telemetry Snapshot
15
+
16
+ Internal telemetry is used for product analytics and account-level outreach. Public reporting uses only aggregate or sanitized data.
17
+
18
+ As of the latest local export on June 19, 2026:
19
+
20
+ - 10,278 telemetry events
21
+ - 7,211 unique sessions
22
+ - 5,368 external sessions after separating internal/personal activity
23
+ - 2,434 external CI sessions
24
+ - 128 attributed company/org sessions
25
+ - top external commands: `serve`, `run`, `diff`, `test`, `scan`, `history`
26
+
27
+ Raw emails, hostnames, private URLs, tokens, and response bodies are not published.
28
+
29
+ ## Product Proof
30
+
31
+ MCP Observatory can:
32
+
33
+ - install as an npm CLI
34
+ - run as an MCP server
35
+ - test local-process and HTTP MCP targets
36
+ - run in GitHub Actions
37
+ - post PR comments
38
+ - generate JSON, Markdown, HTML, JUnit, SARIF, and PR-comment reports
39
+ - generate health badges
40
+ - record/replay/verify MCP sessions
41
+ - detect schema drift
42
+ - run lightweight MCP security checks
43
+ - create static enterprise reports from artifacts
44
+
45
+ ## Certification Proof
46
+
47
+ The certification campaign is designed to create public proof through accepted maintainer PRs.
48
+
49
+ Accepted third-party integrations will be tracked here:
50
+
51
+ | Repo | PR | Check Added | Badge Added | Status |
52
+ | --- | --- | --- | --- | --- |
53
+ | _pending_ | | | | |
54
+
55
+ ## Commercial Proof
56
+
57
+ Current paid positioning is pilot-first:
58
+
59
+ - Team Pilot: starts at `$299/month`
60
+ - Business Pilot: starts at `$999/month`
61
+ - Enterprise Pilot: starts at `$3k/month`
62
+ - Strategic Accounts: custom, `$250k+/year`
63
+
64
+ Paid value is production use: hosted reporting, private repo CI history, security reports, certification, support, fleet visibility, and enterprise review.
65
+
66
+ ## Claims Policy
67
+
68
+ Use public proof for public claims. Company-domain telemetry signals are private and should only be used internally for outreach unless a customer gives permission or there is independent public evidence.
@@ -0,0 +1,77 @@
1
+ # Publish And Distribution Readiness
2
+
3
+ Use this checklist before a commercialization push. The goal is to increase distribution and start paid conversations without locking the project into a permanent licensing or product shape.
4
+
5
+ ## Release Gate
6
+
7
+ Run:
8
+
9
+ ```bash
10
+ npm run lint
11
+ npm run typecheck
12
+ npm run build
13
+ npm test
14
+ npm run validate:artifacts
15
+ npm audit --json
16
+ ```
17
+
18
+ Confirm:
19
+
20
+ - GitHub Action target scans support `deep`, `security`, and baseline drift failure.
21
+ - `schemas/run-artifact.schema.json` and `schemas/diff-artifact.schema.json` validate current artifacts.
22
+ - HTTP target examples use env references instead of inline tokens.
23
+ - Security findings appear in artifact evidence as structured `findings`.
24
+ - Hosted upload is available through `mcp-observatory cloud upload <artifact>` when `MCP_OBSERVATORY_CLOUD_TOKEN` is set.
25
+
26
+ Known audit note:
27
+
28
+ - `npm audit` may report `undici <=6.26.0` through the `npm@11.17.0` package bundled under `@semantic-release/npm`. `npm audit fix` updates the fixable `@actions/http-client` path, but the remaining `undici` copy is bundled inside npm release tooling and is not part of MCP Observatory runtime dependencies or the packed npm artifact. Recheck after npm publishes a newer package.
29
+
30
+ ## Public Distribution
31
+
32
+ - Merge the health/commercialization PR.
33
+ - Update the GitHub repo homepage to the README or commercial page.
34
+ - Publish npm only after the release gate is green.
35
+ - Refresh MCP directory listings with: “MCP Observatory helps teams test, secure, and monitor MCP servers before agents depend on them.”
36
+ - Include “free for local OSS use; paid for hosted reporting, private repo CI, security reports, production monitoring, certification, support, and fleet visibility.”
37
+ - Link production users to `COMMERCIAL.md` and `william@banksey.com`.
38
+ - Submit or refresh listings on Glama, PulseMCP, Smithery, and relevant awesome-MCP lists with the tags: security, developer tools, CI/CD, testing, observability, schema drift.
39
+ - Use the certification distribution loop to open helpful PRs against popular MCP server repos and convert accepted PRs into proof points.
40
+ - Link public proof, the safety report, and directory listing copy from launch/outreach materials.
41
+
42
+ ## Sales Operating Loop
43
+
44
+ 1. Export telemetry rows privately.
45
+ 2. Run:
46
+
47
+ ```bash
48
+ npx tsx scripts/telemetry-company-intelligence.ts --input telemetry-events.jsonl --out-dir reports
49
+ ```
50
+
51
+ 3. Review `reports/telemetry-company-intelligence.html`.
52
+ 4. Contact the top 25 high-confidence company/org candidates.
53
+ 5. For large or strategic domains, quote Strategic only and ask for a security/procurement path.
54
+ 6. Use hosted artifact upload or static enterprise reports before building a full SaaS dashboard.
55
+
56
+ ## Hosted Upload
57
+
58
+ CLI:
59
+
60
+ ```bash
61
+ export MCP_OBSERVATORY_CLOUD_TOKEN="pilot-token"
62
+ export MCP_OBSERVATORY_ORG="customer.com"
63
+ npx @kryptosai/mcp-observatory cloud upload .mcp-observatory/runs/<run>.json
64
+ ```
65
+
66
+ Worker:
67
+
68
+ - `POST /api/v1/artifacts` stores a run artifact behind bearer-token auth.
69
+ - `GET /api/v1/artifacts/:org` returns the org artifact index behind the same auth.
70
+ - Hosted scans reject localhost/private-network targets; use local CLI for internal MCP servers.
71
+
72
+ ## What Not To Do Yet
73
+
74
+ - Do not change the MIT license until paid signal demands it.
75
+ - Do not hard-paywall existing local OSS checks.
76
+ - Do not build a full dashboard before a buyer asks for dashboard workflows.
77
+ - Do not publish raw telemetry emails or individual PII in public materials.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kryptosai/mcp-observatory",
3
- "version": "0.20.3",
4
- "description": "Test your MCP servers for breaking changes. Checks capabilities, invokes tools, detects schema drift between versions.",
3
+ "version": "0.22.0",
4
+ "description": "Test, secure, and monitor MCP servers before agents depend on them.",
5
5
  "mcpName": "io.github.KryptosAI/mcp-observatory",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -31,7 +31,11 @@
31
31
  "files": [
32
32
  "dist/src",
33
33
  "README.md",
34
+ "COMMERCIAL.md",
35
+ "PRIVACY.md",
36
+ "TERMS.md",
34
37
  "LICENSE",
38
+ "docs",
35
39
  "schemas"
36
40
  ],
37
41
  "scripts": {
@@ -43,11 +47,15 @@
43
47
  "prepack": "npm run build",
44
48
  "proof:refresh": "tsx scripts/refresh-proof-artifacts.ts",
45
49
  "release:prep": "node scripts/release.mjs",
50
+ "certification:pr-body": "tsx scripts/print-certification-pr-body.ts",
46
51
  "typecheck": "tsc --noEmit -p tsconfig.json",
47
52
  "test": "vitest run",
48
53
  "validate:artifacts": "tsx scripts/validate-artifacts.ts",
49
54
  "verify:packed-install": "node scripts/verify-packed-install.mjs",
50
- "smoke": "npm run cli -- run --target tests/fixtures/sample-target-config.json && npm run cli -- diff tests/fixtures/sample-run-a.json tests/fixtures/sample-run-b.json"
55
+ "smoke": "npm run cli -- run --target tests/fixtures/sample-target-config.json && npm run cli -- diff tests/fixtures/sample-run-a.json tests/fixtures/sample-run-b.json",
56
+ "telemetry:export": "tsx scripts/export-telemetry-d1.ts",
57
+ "telemetry:intelligence": "tsx scripts/telemetry-company-intelligence.ts --input telemetry-exports/events-flat-full.json --out-dir reports",
58
+ "telemetry:external": "tsx scripts/telemetry-company-intelligence.ts --input telemetry-exports/events-flat-full.json --out-dir reports"
51
59
  },
52
60
  "keywords": [
53
61
  "mcp",
@@ -66,31 +74,38 @@
66
74
  "vcr",
67
75
  "mcp-testing",
68
76
  "security",
77
+ "mcp-security",
69
78
  "ci-cd",
79
+ "mcp-ci",
70
80
  "github-action",
81
+ "production-monitoring",
82
+ "enterprise",
83
+ "enterprise-report",
84
+ "feishu",
85
+ "lark",
71
86
  "schema-drift"
72
87
  ],
73
88
  "dependencies": {
74
- "@modelcontextprotocol/sdk": "^1.27.1",
89
+ "@modelcontextprotocol/sdk": "^1.29.0",
75
90
  "ci-info": "^4.4.0",
76
- "commander": "14.0.2",
91
+ "commander": "15.0.0",
77
92
  "update-notifier": "^7.3.1",
78
- "zod": "4.1.12"
93
+ "zod": "4.4.3"
79
94
  },
80
95
  "devDependencies": {
81
- "@eslint/js": "9.39.1",
96
+ "@eslint/js": "10.0.1",
82
97
  "@semantic-release/changelog": "^6.0.3",
83
98
  "@semantic-release/git": "^10.0.1",
84
- "@types/node": "24.10.1",
85
- "@typescript-eslint/eslint-plugin": "8.46.3",
86
- "@typescript-eslint/parser": "8.46.3",
87
- "ajv": "8.17.1",
88
- "eslint": "9.39.1",
89
- "globals": "16.5.0",
90
- "semantic-release": "^25.0.3",
91
- "tsx": "4.20.6",
92
- "typescript": "5.9.3",
93
- "typescript-eslint": "8.46.3",
94
- "vitest": "4.0.8"
99
+ "@types/node": "25.9.3",
100
+ "@typescript-eslint/eslint-plugin": "8.61.1",
101
+ "@typescript-eslint/parser": "8.61.1",
102
+ "ajv": "8.20.0",
103
+ "eslint": "10.5.0",
104
+ "globals": "17.6.0",
105
+ "semantic-release": "^25.0.5",
106
+ "tsx": "4.22.4",
107
+ "typescript": "6.0.3",
108
+ "typescript-eslint": "8.61.1",
109
+ "vitest": "4.1.9"
95
110
  }
96
111
  }
@@ -19,113 +19,109 @@
19
19
  "removed"
20
20
  ],
21
21
  "properties": {
22
- "artifactType": {
23
- "const": "diff"
24
- },
25
- "schemaVersion": {
26
- "const": "1.0.0"
27
- },
28
- "gate": {
29
- "$ref": "#/definitions/gate"
30
- },
31
- "baseRunId": {
32
- "type": "string"
33
- },
34
- "headRunId": {
35
- "type": "string"
36
- },
37
- "createdAt": {
38
- "type": "string"
39
- },
40
- "summary": {
41
- "$ref": "#/definitions/diffSummary"
42
- },
22
+ "artifactType": { "const": "diff" },
23
+ "schemaVersion": { "const": "1.0.0" },
24
+ "gate": { "$ref": "#/definitions/gate" },
25
+ "baseRunId": { "type": "string" },
26
+ "headRunId": { "type": "string" },
27
+ "createdAt": { "type": "string" },
28
+ "summary": { "$ref": "#/definitions/diffSummary" },
43
29
  "regressions": {
44
30
  "type": "array",
45
- "items": {
46
- "$ref": "#/definitions/diffEntry"
47
- }
31
+ "items": { "$ref": "#/definitions/diffEntry" }
48
32
  },
49
33
  "recoveries": {
50
34
  "type": "array",
51
- "items": {
52
- "$ref": "#/definitions/diffEntry"
53
- }
35
+ "items": { "$ref": "#/definitions/diffEntry" }
54
36
  },
55
37
  "unchanged": {
56
38
  "type": "array",
57
- "items": {
58
- "$ref": "#/definitions/diffEntry"
59
- }
39
+ "items": { "$ref": "#/definitions/diffEntry" }
60
40
  },
61
41
  "added": {
62
42
  "type": "array",
63
- "items": {
64
- "$ref": "#/definitions/diffEntry"
65
- }
43
+ "items": { "$ref": "#/definitions/diffEntry" }
66
44
  },
67
45
  "removed": {
68
46
  "type": "array",
69
- "items": {
70
- "$ref": "#/definitions/diffEntry"
71
- }
47
+ "items": { "$ref": "#/definitions/diffEntry" }
48
+ },
49
+ "schemaDrift": {
50
+ "type": "array",
51
+ "items": { "$ref": "#/definitions/schemaDriftEntry" }
52
+ },
53
+ "responseChanges": {
54
+ "type": "array",
55
+ "items": { "$ref": "#/definitions/responseChangeEntry" }
72
56
  }
73
57
  },
74
58
  "definitions": {
75
- "gate": {
76
- "type": "string",
77
- "enum": ["pass", "fail"]
78
- },
59
+ "gate": { "type": "string", "enum": ["pass", "fail"] },
79
60
  "checkStatus": {
80
61
  "type": "string",
81
62
  "enum": ["pass", "fail", "partial", "unsupported", "flaky", "skipped"]
82
63
  },
83
64
  "checkId": {
84
65
  "type": "string",
85
- "enum": ["tools", "prompts", "resources"]
66
+ "enum": [
67
+ "tools",
68
+ "prompts",
69
+ "resources",
70
+ "tools-invoke",
71
+ "security",
72
+ "security-lite",
73
+ "conformance",
74
+ "schema-quality"
75
+ ]
86
76
  },
87
77
  "diffEntry": {
88
78
  "type": "object",
89
79
  "additionalProperties": false,
90
80
  "required": ["id", "capability", "message"],
91
81
  "properties": {
92
- "id": {
93
- "$ref": "#/definitions/checkId"
94
- },
95
- "capability": {
96
- "$ref": "#/definitions/checkId"
97
- },
98
- "fromStatus": {
99
- "$ref": "#/definitions/checkStatus"
100
- },
101
- "toStatus": {
102
- "$ref": "#/definitions/checkStatus"
103
- },
104
- "message": {
105
- "type": "string"
82
+ "id": { "$ref": "#/definitions/checkId" },
83
+ "capability": { "$ref": "#/definitions/checkId" },
84
+ "fromStatus": { "$ref": "#/definitions/checkStatus" },
85
+ "toStatus": { "$ref": "#/definitions/checkStatus" },
86
+ "message": { "type": "string" }
87
+ }
88
+ },
89
+ "schemaDriftEntry": {
90
+ "type": "object",
91
+ "additionalProperties": false,
92
+ "required": ["capability", "name", "changes"],
93
+ "properties": {
94
+ "capability": { "$ref": "#/definitions/checkId" },
95
+ "name": { "type": "string" },
96
+ "changes": {
97
+ "type": "array",
98
+ "items": { "type": "string" }
106
99
  }
107
100
  }
108
101
  },
102
+ "responseChangeEntry": {
103
+ "type": "object",
104
+ "additionalProperties": false,
105
+ "required": ["capability", "name", "change"],
106
+ "properties": {
107
+ "capability": { "$ref": "#/definitions/checkId" },
108
+ "name": { "type": "string" },
109
+ "change": { "type": "string" }
110
+ }
111
+ },
109
112
  "diffSummary": {
110
113
  "type": "object",
111
114
  "additionalProperties": false,
112
- "required": [
113
- "regressions",
114
- "recoveries",
115
- "unchanged",
116
- "added",
117
- "removed",
118
- "gate"
119
- ],
115
+ "required": ["regressions", "recoveries", "unchanged", "added", "removed", "gate"],
120
116
  "properties": {
121
117
  "regressions": { "type": "integer", "minimum": 0 },
122
118
  "recoveries": { "type": "integer", "minimum": 0 },
123
119
  "unchanged": { "type": "integer", "minimum": 0 },
124
120
  "added": { "type": "integer", "minimum": 0 },
125
121
  "removed": { "type": "integer", "minimum": 0 },
126
- "gate": {
127
- "$ref": "#/definitions/gate"
128
- }
122
+ "schemaDriftCount": { "type": "integer", "minimum": 0 },
123
+ "responseChangeCount": { "type": "integer", "minimum": 0 },
124
+ "gate": { "$ref": "#/definitions/gate" }
129
125
  }
130
126
  }
131
127
  }