thumbgate 1.16.8 → 1.16.10

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate-marketplace",
3
- "version": "1.16.8",
3
+ "version": "1.16.10",
4
4
  "owner": {
5
5
  "name": "Igor Ganapolsky",
6
6
  "email": "ig5973700@gmail.com"
@@ -13,7 +13,7 @@
13
13
  "source": "npm",
14
14
  "package": "thumbgate"
15
15
  },
16
- "version": "1.16.8",
16
+ "version": "1.16.10",
17
17
  "author": {
18
18
  "name": "Igor Ganapolsky"
19
19
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "thumbgate",
3
3
  "description": "Type 👍 or 👎 on any agent action. ThumbGate captures it, distills a lesson, and blocks the pattern from repeating. One thumbs-down = the agent physically cannot make that mistake again. 33 pre-action checks, budget enforcement, self-protection, and NIST/SOC2 compliance tags.",
4
- "version": "1.16.8",
4
+ "version": "1.16.10",
5
5
  "author": {
6
6
  "name": "Igor Ganapolsky"
7
7
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.16.8",
3
+ "version": "1.16.10",
4
4
  "description": "ThumbGate — 👍👎 feedback that teaches your AI agent. Thumbs down a mistake, it never happens again.",
5
5
  "homepage": "https://thumbgate-production.up.railway.app",
6
6
  "transport": "stdio",
package/README.md CHANGED
@@ -261,13 +261,13 @@ The free tier gives you 3 lifetime feedback captures and 1 auto-promoted prevent
261
261
 
262
262
  Pro ($19/mo or $149/yr) lifts those caps and adds history-aware lesson recall, lesson search, DPO export, and a personal dashboard. Team ($49/seat/mo) adds a shared hosted lesson DB, org dashboard, and shared enforcement across the org. Pro and Team include `open_feedback_session`, `append_feedback_context`, and `finalize_feedback_session` for structured multi-turn feedback capture.
263
263
 
264
- **Best first paid motion for teams:** the **Workflow Hardening Sprint** — qualify one repeated failure before committing to a full rollout. **[Start intake →](https://usethumbgate.com/?utm_source=github&utm_medium=readme&utm_campaign=team_rollout#workflow-sprint-intake)**
264
+ **Best first paid motion for teams:** the **Workflow Hardening Sprint** — qualify one repeated failure before committing to a full rollout. **[Start intake →](https://thumbgate-production.up.railway.app/?utm_source=github&utm_medium=readme&utm_campaign=team_rollout#workflow-sprint-intake)**
265
265
 
266
266
  **Best first technical motion:** install the CLI-first and let `init` wire hooks for the agent you already use.
267
267
 
268
- **Paid path for individual operators:** [ThumbGate Pro](https://usethumbgate.com/pro?utm_source=github&utm_medium=readme&utm_campaign=pro_page) is the self-serve side lane for a personal dashboard and export-ready evidence.
268
+ **Paid path for individual operators:** [ThumbGate Pro](https://thumbgate-production.up.railway.app/checkout/pro?utm_source=github&utm_medium=readme&utm_campaign=pro_page) is the self-serve side lane for a personal dashboard and export-ready evidence.
269
269
 
270
- **[Start free](https://usethumbgate.com/?utm_source=github&utm_medium=readme)** · **[See Pro](https://usethumbgate.com/pro?utm_source=github&utm_medium=readme)** · **[Team Sprint intake](https://usethumbgate.com/?utm_source=github&utm_medium=readme#workflow-sprint-intake)**
270
+ **[Start free](https://thumbgate-production.up.railway.app/?utm_source=github&utm_medium=readme)** · **[See Pro](https://thumbgate-production.up.railway.app/checkout/pro?utm_source=github&utm_medium=readme)** · **[Team Sprint intake](https://thumbgate-production.up.railway.app/?utm_source=github&utm_medium=readme#workflow-sprint-intake)**
271
271
 
272
272
  ---
273
273
 
@@ -360,9 +360,9 @@ Every Changeset is tied to the exact `main` merge commit and generates Verificat
360
360
 
361
361
  ---
362
362
 
363
- **Popular buyer questions:** **[AI search topical presence](https://usethumbgate.com/guides/ai-search-topical-presence?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Relational knowledge and AI recommendations](https://usethumbgate.com/guides/relational-knowledge-ai-recommendations?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Stop repeated AI agent mistakes](https://usethumbgate.com/guides/stop-repeated-ai-agent-mistakes?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Browser automation safety](https://usethumbgate.com/guides/browser-automation-safety?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Native messaging host security](https://usethumbgate.com/guides/native-messaging-host-security?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Autoresearch agent safety](https://usethumbgate.com/guides/autoresearch-agent-safety?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Cursor guardrails](https://usethumbgate.com/guides/cursor-agent-guardrails?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Codex CLI guardrails](https://usethumbgate.com/guides/codex-cli-guardrails?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Gemini CLI memory + enforcement](https://usethumbgate.com/guides/gemini-cli-feedback-memory?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)**
363
+ **Popular buyer questions:** **[AI search topical presence](https://thumbgate-production.up.railway.app/guides/ai-search-topical-presence?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Relational knowledge and AI recommendations](https://thumbgate-production.up.railway.app/guides/relational-knowledge-ai-recommendations?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Stop repeated AI agent mistakes](https://thumbgate-production.up.railway.app/guides/stop-repeated-ai-agent-mistakes?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Browser automation safety](https://thumbgate-production.up.railway.app/guides/browser-automation-safety?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Native messaging host security](https://thumbgate-production.up.railway.app/guides/native-messaging-host-security?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Autoresearch agent safety](https://thumbgate-production.up.railway.app/guides/autoresearch-agent-safety?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Cursor guardrails](https://thumbgate-production.up.railway.app/guides/cursor-agent-guardrails?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Codex CLI guardrails](https://thumbgate-production.up.railway.app/guides/codex-cli-guardrails?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)** · **[Gemini CLI memory + enforcement](https://thumbgate-production.up.railway.app/guides/gemini-cli-feedback-memory?utm_source=github&utm_medium=readme&utm_campaign=buyer_questions)**
364
364
 
365
- **[Workflow Hardening Sprint](https://usethumbgate.com/?utm_source=github&utm_medium=readme&utm_campaign=top_cta#workflow-sprint-intake)** · **[Live Dashboard](https://usethumbgate.com/dashboard?utm_source=github&utm_medium=readme&utm_campaign=top_cta)**
365
+ **[Workflow Hardening Sprint](https://thumbgate-production.up.railway.app/?utm_source=github&utm_medium=readme&utm_campaign=top_cta#workflow-sprint-intake)** · **[Live Dashboard](https://thumbgate-production.up.railway.app/dashboard?utm_source=github&utm_medium=readme&utm_campaign=top_cta)**
366
366
 
367
367
  ---
368
368
 
@@ -2,13 +2,13 @@
2
2
  "mcpServers": {
3
3
  "thumbgate": {
4
4
  "command": "npx",
5
- "args": ["--yes", "--package", "thumbgate@1.16.8", "thumbgate", "serve"]
5
+ "args": ["--yes", "--package", "thumbgate@1.16.10", "thumbgate", "serve"]
6
6
  }
7
7
  },
8
8
  "hooks": {
9
9
  "preToolUse": {
10
10
  "command": "npx",
11
- "args": ["--yes", "--package", "thumbgate@1.16.8", "thumbgate", "gate-check"]
11
+ "args": ["--yes", "--package", "thumbgate@1.16.10", "thumbgate", "gate-check"]
12
12
  }
13
13
  }
14
14
  }
@@ -201,7 +201,7 @@ const {
201
201
  finalizeSession: finalizeFeedbackSession,
202
202
  } = require('../../scripts/feedback-session');
203
203
 
204
- const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.16.8' };
204
+ const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.16.10' };
205
205
  const COMMERCE_CATEGORIES = [
206
206
  'product_recommendation',
207
207
  'brand_compliance',
@@ -7,7 +7,7 @@
7
7
  "npx",
8
8
  "--yes",
9
9
  "--package",
10
- "thumbgate@1.16.8",
10
+ "thumbgate@1.16.10",
11
11
  "thumbgate",
12
12
  "serve"
13
13
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.16.8",
3
+ "version": "1.16.10",
4
4
  "description": "Self-improving agent governance: type thumbs-up or thumbs-down on any AI agent action. ThumbGate turns every mistake into a prevention rule and blocks the pattern from repeating. One thumbs-down, never again. 33 pre-action checks, budget enforcement, and self-protection for Claude Code, Cursor, Codex, Gemini CLI, and Amp.",
5
5
  "homepage": "https://thumbgate-production.up.railway.app",
6
6
  "repository": {
@@ -217,6 +217,7 @@
217
217
  "scripts": {
218
218
  "postinstall": "node bin/postinstall.js || true",
219
219
  "start": "node src/api/server.js",
220
+ "numbers:generate": "node scripts/generate-numbers-page.js",
220
221
  "changeset": "changeset",
221
222
  "changeset:version": "changeset version && node scripts/sync-version.js",
222
223
  "changeset:status": "changeset status",
@@ -237,6 +238,8 @@
237
238
  "gtm:aiventyx": "node scripts/aiventyx-marketplace-plan.js",
238
239
  "gtm:chatgpt": "node scripts/chatgpt-gpt-revenue-pack.js",
239
240
  "gtm:codex": "node scripts/codex-marketplace-revenue-pack.js",
241
+ "gtm:linkedin": "node scripts/linkedin-workflow-hardening-pack.js",
242
+ "gtm:reddit": "node scripts/reddit-dm-workflow-hardening-pack.js",
240
243
  "sales:pipeline": "node scripts/sales-pipeline.js",
241
244
  "social:prepare": "node scripts/social-pipeline.js prepare",
242
245
  "social:post": "node scripts/social-pipeline.js post",
@@ -305,7 +308,7 @@
305
308
  "test:hosted-config": "node --test tests/hosted-config.test.js",
306
309
  "test:operational-summary": "node --test tests/operational-summary.test.js",
307
310
  "test:operational-dashboard": "node --test tests/operational-dashboard.test.js",
308
- "test:operator-artifacts": "node --test tests/operator-artifacts.test.js tests/claude-workflow-hardening-pack.test.js tests/gemini-cli-demand-pack.test.js tests/chatgpt-gpt-revenue-pack.test.js",
311
+ "test:operator-artifacts": "node --test tests/operator-artifacts.test.js tests/revenue-pack-utils.test.js tests/claude-workflow-hardening-pack.test.js tests/gemini-cli-demand-pack.test.js tests/chatgpt-gpt-revenue-pack.test.js",
309
312
  "test:operator-key-auth": "node --test tests/api-operator-key-auth.test.js",
310
313
  "test:cloudflare-sandbox": "node --test tests/cloudflare-dynamic-sandbox.test.js tests/cloudflare-sandbox-api.test.js",
311
314
  "test:mcp-config": "node --test tests/mcp-config.test.js",
@@ -347,7 +350,7 @@
347
350
  "test:training-export": "node --test tests/training-export.test.js tests/databricks-export.test.js",
348
351
  "test:deployment": "node --test tests/deployment.test.js tests/deploy-policy.test.js tests/publish-decision.test.js tests/changeset-check.test.js tests/release-notes.test.js tests/sonarcloud-workflow.test.js tests/package-boundary.test.js tests/public-package-boundary.test.js tests/revenue-observability-workflow.test.js",
349
352
  "test:operational-integrity": "node --test tests/operational-integrity.test.js tests/sync-branch-protection.test.js",
350
- "test:workflow": "node --test tests/workflow-contract.test.js tests/social-marketing-assets.test.js tests/social-pipeline.test.js tests/positioning-contract.test.js tests/docs-claim-hygiene.test.js tests/thumbgate-scope.test.js tests/workflow-runs.test.js tests/workflow-sprint-intake.test.js tests/gtm-revenue-loop.test.js tests/aiventyx-marketplace-plan.test.js tests/cursor-marketplace-revenue-pack.test.js tests/codex-marketplace-revenue-pack.test.js tests/codex-plugin-revenue-pack.test.js tests/gemini-cli-demand-pack.test.js tests/chatgpt-gpt-revenue-pack.test.js tests/autonomous-sales-agent.test.js tests/sales-pipeline.test.js tests/reddit-dm-outreach.test.js tests/enterprise-story.test.js tests/ralph-loop.test.js tests/ralph-mode-ci.test.js tests/guide-conversion-path.test.js",
353
+ "test:workflow": "node --test tests/workflow-contract.test.js tests/social-marketing-assets.test.js tests/social-pipeline.test.js tests/positioning-contract.test.js tests/docs-claim-hygiene.test.js tests/thumbgate-scope.test.js tests/workflow-runs.test.js tests/workflow-sprint-intake.test.js tests/gtm-revenue-loop.test.js tests/customer-discovery-sprint.test.js tests/revenue-pack-utils.test.js tests/aiventyx-marketplace-plan.test.js tests/cursor-marketplace-revenue-pack.test.js tests/codex-marketplace-revenue-pack.test.js tests/codex-plugin-revenue-pack.test.js tests/gemini-cli-demand-pack.test.js tests/linkedin-workflow-hardening-pack.test.js tests/chatgpt-gpt-revenue-pack.test.js tests/mcp-directory-revenue-pack.test.js tests/autonomous-sales-agent.test.js tests/reddit-dm-workflow-hardening-pack.test.js tests/sales-pipeline.test.js tests/reddit-dm-outreach.test.js tests/github-outreach.test.js tests/enterprise-story.test.js tests/ralph-loop.test.js tests/ralph-mode-ci.test.js tests/guide-conversion-path.test.js",
351
354
  "test:sales-pipeline": "node --test tests/sales-pipeline.test.js",
352
355
  "test:billing": "node --test tests/billing.test.js tests/stripe-sync-product-images.test.js",
353
356
  "test:cli": "node --test tests/analytics-report.test.js tests/codex-self-heal.test.js tests/creator-campaigns.test.js tests/cli.test.js tests/codex-bridge-script.test.js tests/dependabot-changeset.test.js tests/dispatch-brief.test.js tests/feedback-normalize.test.js tests/install-mcp.test.js tests/pr-manager.test.js tests/pro-local-dashboard.test.js tests/published-cli.test.js tests/revenue-status.test.js tests/stripe-live-status.test.js",
@@ -601,7 +604,7 @@
601
604
  "node": ">=18.18.0"
602
605
  },
603
606
  "dependencies": {
604
- "@anthropic-ai/sdk": "^0.90.0",
607
+ "@anthropic-ai/sdk": "0.92.0",
605
608
  "@google/genai": "1.49.0",
606
609
  "@huggingface/transformers": "^4.1.0",
607
610
  "@lancedb/lancedb": "^0.27.2",
@@ -1065,20 +1065,20 @@ function buildDemoGeneratedViewSpec(viewName) {
1065
1065
  }
1066
1066
  if (viewName === 'workflow-rollout') {
1067
1067
  base.components = [
1068
- { type: 'hero', title: 'Generated Workflow Rollout View', description: 'Turn funnel, attribution, and predictive data into a constrained operator dashboard for team rollout.' },
1068
+ { type: 'hero', title: 'Generated Workflow Rollout View', description: 'Turn funnel, attribution, and predictive data into a constrained operator dashboard for team rollout. Demo mode shows sample structure only and waits for hosted evidence before showing paid signals.' },
1069
1069
  { type: 'stat_grid', title: 'Rollout pipeline', items: [
1070
- { label: 'Workflow sprint leads', value: '4', note: 'intake-first hosted funnel' },
1071
- { label: 'Qualified leads', value: '2', note: 'ready for proof-backed rollout' },
1072
- { label: 'Booked revenue', value: '$128.00', note: '1 paid order' },
1073
- { label: 'Team propensity', value: 'medium', note: 'score 0.54' }
1070
+ { label: 'Workflow sprint leads', value: 'Sample', note: 'connect hosted funnel for live intake counts' },
1071
+ { label: 'Qualified leads', value: 'Sample', note: 'proof-backed rollout data appears after intake review' },
1072
+ { label: 'Booked revenue', value: 'Awaiting evidence', note: 'demo mode omits paid numbers until hosted analytics load' },
1073
+ { label: 'Team propensity', value: 'Sample', note: 'score loads from hosted predictive analytics' }
1074
1074
  ] },
1075
1075
  { type: 'list', title: 'Top acquisition sources', emptyMessage: 'No sources.', items: [
1076
- { title: 'producthunt', subtitle: 'captured acquisition source', badge: '3 leads' },
1077
- { title: 'website', subtitle: 'captured acquisition source', badge: '1 lead' }
1076
+ { title: 'producthunt', subtitle: 'example acquisition source', badge: 'sample only' },
1077
+ { title: 'website', subtitle: 'example acquisition source', badge: 'sample only' }
1078
1078
  ] },
1079
1079
  { type: 'list', title: 'Next rollout moves', emptyMessage: 'No rollout moves.', items: [
1080
- { title: 'Double down on reach_vb', subtitle: 'Best creator opportunity from predictive revenue scoring.', badge: '+$31.00' },
1081
- { title: 'Qualify pending sprint leads', subtitle: 'More leads than qualified workflows today.', badge: '4 total' }
1080
+ { title: 'Load hosted conversion signals', subtitle: 'Use authenticated funnel and revenue data before prioritizing paid rollout moves.', badge: 'evidence gate' },
1081
+ { title: 'Qualify pending sprint leads', subtitle: 'Promote real workflow owners only after intake and proof review exist.', badge: 'proof-first' }
1082
1082
  ] }
1083
1083
  ];
1084
1084
  return base;
@@ -1086,20 +1086,20 @@ function buildDemoGeneratedViewSpec(viewName) {
1086
1086
  base.components = [
1087
1087
  { type: 'hero', title: 'Generated Team Reliability Review', description: 'A constrained hosted view assembled from approved dashboard components.' },
1088
1088
  { type: 'stat_grid', title: 'Team snapshot', items: [
1089
- { label: 'Active agents', value: '5', note: 'of 8 registered agents' },
1090
- { label: 'Org adherence', value: '92.4%', note: 'rolling 24h view' },
1091
- { label: 'Team propensity', value: 'medium', note: 'score 0.54' },
1092
- { label: 'Forecast revenue', value: '$128.00', note: 'opportunity $49.00' }
1089
+ { label: 'Active agents', value: 'Sample', note: 'connect your workspace for live counts' },
1090
+ { label: 'Org adherence', value: 'Sample', note: 'rolling view loads from your own telemetry' },
1091
+ { label: 'Team propensity', value: 'Sample', note: 'score loads from hosted predictive analytics' },
1092
+ { label: 'Forecast revenue', value: 'Awaiting evidence', note: 'demo mode never invents forecast dollars' }
1093
1093
  ] },
1094
1094
  { type: 'list', title: 'Highest-risk agents', emptyMessage: 'No risky agents.', items: [
1095
- { title: 'claude-reviewer', subtitle: 'checkout-flow · fix/stripe-timeout', badge: '67.5% adherence' },
1096
- { title: 'codex-second-pass', subtitle: 'dashboard · feat/team-rollout', badge: '74.2% adherence' }
1095
+ { title: 'claude-reviewer', subtitle: 'example workflow · sample branch', badge: 'sample only' },
1096
+ { title: 'codex-second-pass', subtitle: 'example workflow · sample branch', badge: 'sample only' }
1097
1097
  ] },
1098
1098
  { type: 'list', title: 'Predictive watchlist', emptyMessage: 'No anomalies.', items: [
1099
1099
  { title: 'pricing_resistance', subtitle: 'Price sensitivity dominates current loss reasons.', badge: 'warning' },
1100
1100
  { title: 'creator_underperformance', subtitle: 'Creator reach_vb is generating intent without revenue conversion.', badge: 'warning' }
1101
1101
  ] },
1102
- { type: 'callout', title: 'Commercial signal', body: 'Pro propensity is high and Team propensity is medium. Workflow sprint leads currently total 4.', tone: 'warning' }
1102
+ { type: 'callout', title: 'Commercial signal', body: 'Demo mode keeps commercial numbers gated until hosted analytics and proof-backed workflow data are available.', tone: 'warning' }
1103
1103
  ];
1104
1104
  return base;
1105
1105
  }
@@ -1499,8 +1499,8 @@ function loadDemo() {
1499
1499
  var teaserHtml = demoData.map(renderResult).join('');
1500
1500
  var upgradeBanner = '<div style="margin-bottom:12px;padding:12px 16px;background:linear-gradient(90deg,rgba(184,92,45,0.14),rgba(184,92,45,0.06));border:1px solid rgba(184,92,45,0.35);border-radius:10px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;">' +
1501
1501
  '<div style="color:#ddd;font-size:14px;">' +
1502
- '<span style="color:#ffb98a;font-weight:700;">Live demo data below.</span> ' +
1503
- 'Point ThumbGate at your own feedback to see <em>your</em> gates, lessons, and team signals no signup required.' +
1502
+ '<span style="color:#ffb98a;font-weight:700;">Sample demo data below.</span> ' +
1503
+ 'Point ThumbGate at your own feedback to see <em>your</em> gates, lessons, and team signals. Paid and revenue fields stay hidden until hosted evidence loads.' +
1504
1504
  '</div>' +
1505
1505
  '<a href="/go/pro?utm_source=dashboard_live" rel="noopener" ' +
1506
1506
  'style="flex:none;background:#b85c2d;color:#fff;padding:8px 18px;border-radius:8px;text-decoration:none;font-weight:700;font-size:13px;white-space:nowrap;">Go Pro — $19/mo</a>' +
package/public/index.html CHANGED
@@ -123,10 +123,84 @@ __GA_BOOTSTRAP__
123
123
  "description": "Annual Pro for individual operators who want personal enforcement proof, the local dashboard, and proof-ready exports",
124
124
  "url": "https://thumbgate-production.up.railway.app/checkout/pro?plan_id=pro&billing_cycle=annual&landing_path=%2F"
125
125
  }
126
+ ],
127
+ "potentialAction": [
128
+ {
129
+ "@type": "InstallAction",
130
+ "name": "Install ThumbGate Free",
131
+ "target": {
132
+ "@type": "EntryPoint",
133
+ "urlTemplate": "https://thumbgate-production.up.railway.app/guide",
134
+ "actionPlatform": [
135
+ "https://schema.org/DesktopWebPlatform"
136
+ ]
137
+ }
138
+ },
139
+ {
140
+ "@type": "BuyAction",
141
+ "name": "Start ThumbGate Pro",
142
+ "target": {
143
+ "@type": "EntryPoint",
144
+ "urlTemplate": "https://thumbgate-production.up.railway.app/checkout/pro?plan_id=pro&landing_path=%2F",
145
+ "actionPlatform": [
146
+ "https://schema.org/DesktopWebPlatform"
147
+ ]
148
+ },
149
+ "expectsAcceptanceOf": {
150
+ "@type": "Offer",
151
+ "name": "Pro Monthly",
152
+ "price": "19",
153
+ "priceCurrency": "USD",
154
+ "url": "https://thumbgate-production.up.railway.app/checkout/pro?plan_id=pro&landing_path=%2F"
155
+ }
156
+ },
157
+ {
158
+ "@type": "CommunicateAction",
159
+ "name": "Start Workflow Hardening Sprint intake",
160
+ "target": {
161
+ "@type": "EntryPoint",
162
+ "urlTemplate": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake",
163
+ "actionPlatform": [
164
+ "https://schema.org/DesktopWebPlatform"
165
+ ]
166
+ }
167
+ }
126
168
  ]
127
169
  }
128
170
  </script>
129
171
 
172
+ <script type="application/ld+json">
173
+ {
174
+ "@context": "https://schema.org",
175
+ "@type": "Service",
176
+ "name": "ThumbGate Workflow Hardening Sprint",
177
+ "serviceType": "AI-agent workflow hardening sprint",
178
+ "provider": {
179
+ "@type": "Organization",
180
+ "name": "ThumbGate",
181
+ "url": "https://thumbgate-production.up.railway.app"
182
+ },
183
+ "url": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake",
184
+ "description": "Founder-led workflow hardening for one AI-agent workflow that needs approval boundaries, rollback safety, and rollout proof before wider team rollout.",
185
+ "offers": {
186
+ "@type": "Offer",
187
+ "name": "Workflow Hardening Sprint intake",
188
+ "url": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake"
189
+ },
190
+ "potentialAction": {
191
+ "@type": "CommunicateAction",
192
+ "name": "Book a workflow hardening intake",
193
+ "target": {
194
+ "@type": "EntryPoint",
195
+ "urlTemplate": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake",
196
+ "actionPlatform": [
197
+ "https://schema.org/DesktopWebPlatform"
198
+ ]
199
+ }
200
+ }
201
+ }
202
+ </script>
203
+
130
204
  <script type="application/ld+json">
131
205
  {
132
206
  "@context": "https://schema.org",
@@ -211,10 +285,10 @@ __GA_BOOTSTRAP__
211
285
  },
212
286
  {
213
287
  "@type": "Question",
214
- "name": "Why does the ChatGPT ads rollout matter to ThumbGate?",
288
+ "name": "When should I use Pro versus the Workflow Hardening Sprint?",
215
289
  "acceptedAnswer": {
216
290
  "@type": "Answer",
217
- "text": "OpenAI began testing ads in ChatGPT in the US on February 9, 2026, and Digiday reported CPC bidding on April 21, 2026. As conversational AI becomes a monetized discovery surface, teams need a cleaner boundary between AI advice and risky execution. ThumbGate is that pre-action check layer."
291
+ "text": "Start with the setup guide if you only need the local path. Choose Pro after one real blocked repeat when you want your own dashboard, DPO export, and proof-ready exports. Choose the Workflow Hardening Sprint when one workflow owner needs approval boundaries, rollback safety, and rollout proof before wider rollout."
218
292
  }
219
293
  },
220
294
  {
@@ -461,7 +535,13 @@ __GA_BOOTSTRAP__
461
535
  .btn-pro:hover { opacity: 0.85; }
462
536
  .btn-team { display: block; text-align: center; padding: 10px; background: rgba(74,222,128,0.14); color: var(--green); border: 1px solid rgba(74,222,128,0.4); border-radius: 8px; text-decoration: none; font-size: 14px; font-weight: 600; transition: border-color 0.15s, transform 0.15s; }
463
537
  .btn-team:hover { border-color: var(--green); transform: translateY(-1px); }
538
+ .team-intake-panel { max-width: 900px; margin: 24px auto 0; padding: 22px; border: 1px solid rgba(74,222,128,0.28); border-radius: 12px; background: rgba(74,222,128,0.055); box-shadow: inset 0 1px 0 rgba(74,222,128,0.08); }
539
+ .team-intake-panel-head { display: flex; justify-content: space-between; gap: 16px; align-items: flex-start; margin-bottom: 16px; }
540
+ .team-intake-panel h3 { margin: 0 0 6px; font-size: 18px; color: var(--text); }
541
+ .team-intake-panel p { margin: 0; color: var(--text-dim); font-size: 13px; line-height: 1.55; }
542
+ .team-intake-badge { flex-shrink: 0; padding: 6px 10px; border: 1px solid rgba(74,222,128,0.35); border-radius: 999px; color: var(--green); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; }
464
543
  .team-form { max-width: 860px; margin: 24px auto 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
544
+ .team-intake-panel .team-form { max-width: none; margin: 0; }
465
545
  .team-form .full { grid-column: 1 / -1; }
466
546
  .team-form input, .team-form textarea { width: 100%; background: var(--bg-card); border: 1px solid var(--border); border-radius: 10px; padding: 12px 14px; color: var(--text); font-size: 14px; font-family: inherit; }
467
547
  .team-form textarea { min-height: 120px; resize: vertical; }
@@ -523,6 +603,8 @@ __GA_BOOTSTRAP__
523
603
  .seo-grid { grid-template-columns: 1fr; }
524
604
  .autoresearch-grid { grid-template-columns: 1fr; }
525
605
  .pricing-grid { grid-template-columns: 1fr; }
606
+ .team-intake-panel-head { display: block; }
607
+ .team-intake-badge { display: inline-block; margin-bottom: 10px; }
526
608
  .team-form { grid-template-columns: 1fr; }
527
609
  .hero { padding: 72px 0 56px; }
528
610
  .hero-actions { flex-direction: column; }
@@ -1082,7 +1164,7 @@ __GA_BOOTSTRAP__
1082
1164
  <!-- HOW IT WORKS -->
1083
1165
  <section class="how-it-works" id="how-it-works">
1084
1166
  <div class="container">
1085
- <div class="section-label">New in v1.16.8</div>
1167
+ <div class="section-label">New in v1.16.10</div>
1086
1168
  <h2 class="section-title">Three steps to stop repeated AI failures</h2>
1087
1169
  <div class="steps">
1088
1170
  <div class="step">
@@ -1317,24 +1399,34 @@ __GA_BOOTSTRAP__
1317
1399
  <div class="section-label">Team Pilot</div>
1318
1400
  <h2 class="section-title">Start with one repo, one workflow, one repeat failure</h2>
1319
1401
  <p style="color:var(--text-dim);max-width:720px;margin:0 auto 16px;">This is the fastest path to first paid value for teams. Start with one workflow, one owner, and one blocker. The intake is designed to prove that ThumbGate reduces review churn, rollout risk, or repeated agent mistakes before a wider rollout.</p>
1320
- <details style="max-width:860px;margin:0 auto;">
1321
- <summary style="cursor:pointer;color:var(--green);font-size:16px;font-weight:600;text-align:center;padding:16px;border:1px solid rgba(74,222,128,0.3);border-radius:12px;list-style:none;">Open Team Pilot Intake Form →</summary>
1322
- <form class="team-form" action="/v1/intake/workflow-sprint" method="POST" style="margin-top:16px;">
1323
- <input type="hidden" name="ctaId" value="workflow_sprint_intake">
1324
- <input type="hidden" name="ctaPlacement" value="team_pricing">
1325
- <input type="hidden" name="planId" value="team">
1326
- <input type="email" name="email" placeholder="you@company.com" required>
1327
- <input type="text" name="company" placeholder="Company">
1328
- <input type="text" name="workflow" placeholder="Workflow to harden (e.g. deploy approvals, migrations, PR review)" required>
1329
- <input type="text" name="owner" placeholder="Workflow owner" required>
1330
- <input type="text" name="runtime" placeholder="Current agent/runtime (Claude Code, Codex, Cursor, Gemini...)" required>
1331
- <textarea class="full" name="blocker" placeholder="What repeat mistake, rollout blocker, or team handoff failure keeps happening?" required></textarea>
1332
- <textarea class="full" name="note" placeholder="Optional context: team size, repos involved, target rollout date, or what you need to prove internally."></textarea>
1333
- <div class="full">
1334
- <button type="submit" class="btn-team">Start Team Pilot Intake</button>
1402
+ <div class="team-intake-panel">
1403
+ <div class="team-intake-panel-head">
1404
+ <div>
1405
+ <h3>Tell us the workflow. Get a proof plan.</h3>
1406
+ <p>The highest-fit Team buyer is already feeling one repeated failure. Capture it here instead of making them click through a hidden form.</p>
1407
+ </div>
1408
+ <span class="team-intake-badge">30-minute intake</span>
1335
1409
  </div>
1336
- </form>
1337
- </details>
1410
+ <form id="team-pilot-intake-form" class="team-form" action="/v1/intake/workflow-sprint" method="POST" data-team-intake-form>
1411
+ <input type="hidden" name="ctaId" value="workflow_sprint_intake">
1412
+ <input type="hidden" name="ctaPlacement" value="team_visible_intake">
1413
+ <input type="hidden" name="planId" value="team">
1414
+ <input type="hidden" name="utmSource" value="website">
1415
+ <input type="hidden" name="utmMedium" value="visible_team_intake">
1416
+ <input type="hidden" name="utmCampaign" value="workflow_hardening_sprint">
1417
+ <input type="hidden" name="page" value="/#workflow-sprint-intake">
1418
+ <input type="email" name="email" placeholder="you@company.com" autocomplete="email" required>
1419
+ <input type="text" name="company" placeholder="Company">
1420
+ <input type="text" name="workflow" placeholder="Workflow to harden (e.g. deploy approvals, migrations, PR review)" required>
1421
+ <input type="text" name="owner" placeholder="Workflow owner" required>
1422
+ <input type="text" name="runtime" placeholder="Current agent/runtime (Claude Code, Codex, Cursor, Gemini...)" required>
1423
+ <textarea class="full" name="blocker" placeholder="What repeat mistake, rollout blocker, or team handoff failure keeps happening?" required></textarea>
1424
+ <textarea class="full" name="note" placeholder="Optional context: team size, repos involved, target rollout date, or what you need to prove internally."></textarea>
1425
+ <div class="full">
1426
+ <button type="submit" class="btn-team">Start Team Pilot Intake</button>
1427
+ </div>
1428
+ </form>
1429
+ </div>
1338
1430
  </div>
1339
1431
  </section>
1340
1432
 
@@ -1365,8 +1457,8 @@ __GA_BOOTSTRAP__
1365
1457
  <div class="faq-a">No. The ThumbGate GPT is the ChatGPT entrypoint for checking proposed actions, capturing thumbs-up/down lessons, and getting setup help. Use it for advice and checkpointing; hard enforcement still runs locally where the agent executes after <code>npx thumbgate init</code>.</div>
1366
1458
  </div>
1367
1459
  <div class="faq-item">
1368
- <div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">Why does the ChatGPT ads rollout matter to ThumbGate?</div>
1369
- <div class="faq-a">OpenAI began testing ads in ChatGPT in the US on February 9, 2026, and Digiday reported CPC bidding on April 21, 2026. That makes trust and measurement more important around AI-assisted decisions. ThumbGate gives teams a hard boundary between conversational discovery and risky local execution, so a suggested action still has to pass a real check before it runs. <a href="/guides/chatgpt-ads-trust" style="color:var(--cyan);text-decoration:underline;">Read the full positioning guide</a>.</div>
1460
+ <div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">When should I use Pro versus the Workflow Hardening Sprint?</div>
1461
+ <div class="faq-a">Start with the <a href="/guide" style="color:var(--cyan);text-decoration:underline;">setup guide</a> if you only need the local path. Choose Pro after one real blocked repeat when you want your own dashboard, DPO export, and proof-ready exports. Choose the <a href="#workflow-sprint-intake" style="color:var(--cyan);text-decoration:underline;">Workflow Hardening Sprint</a> when one workflow owner needs approval boundaries, rollback safety, and rollout proof before wider rollout.</div>
1370
1462
  </div>
1371
1463
  <div class="faq-item">
1372
1464
  <button class="faq-q" type="button" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">How do we keep high-risk autonomous runs off the host?</button>
@@ -1442,7 +1534,7 @@ __GA_BOOTSTRAP__
1442
1534
  <a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
1443
1535
  <a href="/blog">Blog</a>
1444
1536
  </div>
1445
- <span class="footer-copy">© 2026 Max Smith KDP LLC · MIT License · v1.16.8</span>
1537
+ <span class="footer-copy">© 2026 Max Smith KDP LLC · MIT License · v1.16.10</span>
1446
1538
  </div>
1447
1539
  </footer>
1448
1540
 
@@ -1527,6 +1619,32 @@ function sendFirstPartyTelemetry(eventType, props) {
1527
1619
  }).catch(function() {});
1528
1620
  }
1529
1621
 
1622
+ function initializeTeamIntakeTelemetry() {
1623
+ document.querySelectorAll('[data-team-intake-form]').forEach(function(form) {
1624
+ var started = false;
1625
+ function readHidden(name) {
1626
+ var input = form.querySelector('input[name="' + name + '"]');
1627
+ return input ? input.value : null;
1628
+ }
1629
+ form.addEventListener('input', function() {
1630
+ if (started) return;
1631
+ started = true;
1632
+ sendFirstPartyTelemetry('workflow_sprint_intake_started', {
1633
+ ctaId: readHidden('ctaId'),
1634
+ ctaPlacement: readHidden('ctaPlacement'),
1635
+ planId: readHidden('planId') || 'team',
1636
+ });
1637
+ });
1638
+ form.addEventListener('submit', function() {
1639
+ sendFirstPartyTelemetry('workflow_sprint_intake_submit_attempted', {
1640
+ ctaId: readHidden('ctaId'),
1641
+ ctaPlacement: readHidden('ctaPlacement'),
1642
+ planId: readHidden('planId') || 'team',
1643
+ });
1644
+ });
1645
+ });
1646
+ }
1647
+
1530
1648
  function resolvePricingClickTier(el) {
1531
1649
  if (el.classList.contains('btn-install-hero')) return 'install';
1532
1650
  if (el.classList.contains('btn-install-link')) return 'install';
@@ -1661,13 +1779,15 @@ function copyInstall(el) {
1661
1779
  { selector: '.price-card.pro .btn-pro', ctaId: 'pricing_pro_monthly', ctaPlacement: 'pricing', planId: 'pro' },
1662
1780
  { selector: '.hero-actions .btn-pro-page', ctaId: 'hero_go_pro', ctaPlacement: 'hero', planId: 'pro' },
1663
1781
  { selector: '.sticky-cta .btn-pro', ctaId: 'sticky_go_pro', ctaPlacement: 'sticky_cta', planId: 'pro' },
1664
- { selector: '.price-card.team .btn-team', ctaId: 'team_workflow_sprint', ctaPlacement: 'pricing', planId: 'team' }
1782
+ { selector: '.price-card.team .btn-team', ctaId: 'team_workflow_sprint', ctaPlacement: 'pricing', planId: 'team' },
1783
+ { selector: '#team-pilot-intake-form', ctaId: 'workflow_sprint_intake', ctaPlacement: 'team_visible_intake', planId: 'team' }
1665
1784
  ]
1666
1785
  });
1667
1786
  })();
1668
1787
  </script>
1669
1788
  <script>
1670
1789
  initializeBuyerIntentForms();
1790
+ initializeTeamIntakeTelemetry();
1671
1791
 
1672
1792
  async function handleProTrial() {
1673
1793
  var buyerIntent = globalThis.ThumbGateBuyerIntent;
@@ -5,10 +5,10 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <meta name="generator" content="ThumbGate">
7
7
  <meta name="author" content="Igor Ganapolsky">
8
- <title>ThumbGate — The Numbers | Live First-Party Data</title>
9
- <meta name="description" content="ThumbGate's live operational numbers: active pre-action checks, AI agent actions blocked, estimated LLM tokens and dollars saved, and the Bayes error rate of our intervention scorer. First-party data, regenerated on every release.">
8
+ <title>ThumbGate — The Numbers | First-Party Data Snapshot</title>
9
+ <meta name="description" content="ThumbGate's generated first-party operational snapshot: active pre-action checks, AI agent actions blocked, estimated LLM tokens and dollars saved, and the Bayes error rate of the intervention scorer.">
10
10
  <meta property="og:title" content="ThumbGate — The Numbers">
11
- <meta property="og:description" content="Live first-party operational metrics: checks, blocks, token savings, and scorer calibration. Regenerated on every release.">
11
+ <meta property="og:description" content="Generated first-party operational metrics: gates, blocks, token savings, and scorer calibration.">
12
12
  <meta property="og:type" content="website">
13
13
  <meta property="og:url" content="https://thumbgate-production.up.railway.app/numbers">
14
14
  <meta name="twitter:card" content="summary_large_image">
@@ -25,9 +25,9 @@
25
25
  "alternateName": "thumbgate",
26
26
  "applicationCategory": "DeveloperApplication",
27
27
  "operatingSystem": "Cross-platform, Node.js >=18.18.0",
28
- "softwareVersion": "1.12.2",
28
+ "softwareVersion": "1.16.10",
29
29
  "url": "https://thumbgate-production.up.railway.app/numbers",
30
- "dateModified": "2026-04-20",
30
+ "dateModified": "2026-05-03",
31
31
  "creator": {
32
32
  "@type": "Person",
33
33
  "name": "Igor Ganapolsky",
@@ -57,10 +57,10 @@
57
57
  "https://www.linkedin.com/in/igorganapolsky"
58
58
  ]
59
59
  },
60
- "dateModified": "2026-04-20",
61
- "datePublished": "2026-04-20",
60
+ "dateModified": "2026-05-03",
61
+ "datePublished": "2026-05-03",
62
62
  "keywords": [
63
- "AI agent checks",
63
+ "AI agent gates",
64
64
  "LLM token savings",
65
65
  "prevention rules",
66
66
  "Bayes error rate",
@@ -70,7 +70,7 @@
70
70
  {
71
71
  "@type": "PropertyValue",
72
72
  "name": "active_gates",
73
- "value": 52
73
+ "value": 37
74
74
  },
75
75
  {
76
76
  "@type": "PropertyValue",
@@ -80,12 +80,12 @@
80
80
  {
81
81
  "@type": "PropertyValue",
82
82
  "name": "actions_warned",
83
- "value": 455
83
+ "value": 0
84
84
  },
85
85
  {
86
86
  "@type": "PropertyValue",
87
87
  "name": "estimated_hours_saved",
88
- "value": "113.8"
88
+ "value": "0.0"
89
89
  },
90
90
  {
91
91
  "@type": "PropertyValue",
@@ -101,7 +101,7 @@
101
101
  {
102
102
  "@type": "PropertyValue",
103
103
  "name": "bayes_error_rate",
104
- "value": 0.015
104
+ "value": 0
105
105
  }
106
106
  ]
107
107
  }
@@ -189,34 +189,34 @@
189
189
 
190
190
  <main class="container">
191
191
  <h1>The Numbers</h1>
192
- <p class="subtitle">Live first-party operational data from the ThumbGate runtime. No surveys, no projections — counts pulled from the same local scripts that power the CLI and dashboard.</p>
193
- <div class="freshness">Updated: 2026-04-20 · Version 1.12.2</div>
192
+ <p class="subtitle">Generated first-party operational data from the ThumbGate runtime. No surveys or projections — this page is a release-time snapshot produced by the same local scripts that power the CLI and dashboard.</p>
193
+ <div class="freshness">Updated: 2026-05-03 · Version 1.16.10</div>
194
194
 
195
- <h2>Check enforcement</h2>
195
+ <h2>Gate enforcement</h2>
196
196
  <div class="stats-grid">
197
197
  <div class="stat-card">
198
- <div class="stat-label">Active checks</div>
199
- <div class="stat-value">52</div>
200
- <div class="stat-sub">33 manual · 19 auto-promoted</div>
201
- <a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/check-stats.js">source: check-stats.js</a>
198
+ <div class="stat-label">Active gates</div>
199
+ <div class="stat-value">37</div>
200
+ <div class="stat-sub">36 manual · 1 auto-promoted</div>
201
+ <a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/gate-stats.js">source: gate-stats.js</a>
202
202
  </div>
203
203
  <div class="stat-card">
204
204
  <div class="stat-label">Actions blocked</div>
205
205
  <div class="stat-value">0</div>
206
- <div class="stat-sub">repeat AI mistakes prevented at the check</div>
207
- <a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/check-stats.js">source: check-stats.js</a>
206
+ <div class="stat-sub">repeat AI mistakes prevented at the gate</div>
207
+ <a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/gate-stats.js">source: gate-stats.js</a>
208
208
  </div>
209
209
  <div class="stat-card">
210
210
  <div class="stat-label">Actions warned</div>
211
- <div class="stat-value">455</div>
211
+ <div class="stat-value">0</div>
212
212
  <div class="stat-sub">soft interventions; not blocks</div>
213
- <a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/check-stats.js">source: check-stats.js</a>
213
+ <a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/gate-stats.js">source: gate-stats.js</a>
214
214
  </div>
215
215
  <div class="stat-card">
216
- <div class="stat-label">Top blocked check</div>
216
+ <div class="stat-label">Top blocked gate</div>
217
217
  <div class="stat-value" style="font-size:1.1rem;">local-only-git-writes (0 blocks)</div>
218
218
  <div class="stat-sub">highest-occurrence prevention rule</div>
219
- <a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/check-stats.js">source: check-stats.js</a>
219
+ <a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/gate-stats.js">source: gate-stats.js</a>
220
220
  </div>
221
221
  </div>
222
222
 
@@ -224,9 +224,9 @@
224
224
  <div class="stats-grid">
225
225
  <div class="stat-card">
226
226
  <div class="stat-label">Estimated hours saved</div>
227
- <div class="stat-value">113.8</div>
227
+ <div class="stat-value">0.0</div>
228
228
  <div class="stat-sub">~15 min per blocked mistake × blocks+warns</div>
229
- <a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/check-stats.js">source: check-stats.js</a>
229
+ <a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/gate-stats.js">source: gate-stats.js</a>
230
230
  </div>
231
231
  <div class="stat-card">
232
232
  <div class="stat-label">Estimated LLM dollars saved</div>
@@ -242,9 +242,9 @@
242
242
  </div>
243
243
  <div class="stat-card">
244
244
  <div class="stat-label">Scorer Bayes error</div>
245
- <div class="stat-value">1.5%</div>
245
+ <div class="stat-value">0.0%</div>
246
246
  <div class="stat-sub">irreducible error given current feature set</div>
247
- <a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/bayes-optimal-check.js">source: bayes-optimal-check.js</a>
247
+ <a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/bayes-optimal-gate.js">source: bayes-optimal-gate.js</a>
248
248
  </div>
249
249
  </div>
250
250
 
@@ -253,18 +253,18 @@
253
253
  <p><strong>Where the numbers come from.</strong> This page is regenerated from local scripts — no survey data, no hand-edited figures, no third-party attribution. Every number on this page is produced by code in the public <a href="https://github.com/IgorGanapolsky/ThumbGate">ThumbGate repo</a>.</p>
254
254
  <ul>
255
255
  <li><strong>Active checks</strong> — union of shipped default rules and the auto-promotion ledger (auto).</li>
256
- <li><strong>Actions blocked/warned</strong> — sum of <code>occurrences</code> across checks with the corresponding action.</li>
256
+ <li><strong>Actions blocked/warned</strong> — sum of <code>occurrences</code> across gates with the corresponding action.</li>
257
257
  <li><strong>Hours saved</strong> — conservative 15-minute/incident estimate for debugging a repeated AI mistake × (blocks + warns).</li>
258
258
  <li><strong>Dollars saved</strong> — blended per-call token estimate (2k input + 600 output) × blocks × 2026-04-15 Anthropic + OpenAI list prices. See <code>scripts/token-savings.js</code> for the full price snapshot.</li>
259
259
  <li><strong>Bayes error rate</strong> — irreducible classifier error of the current risk scorer given its feature set. High values mean "add features, don't tune thresholds."</li>
260
260
  </ul>
261
- <p style="margin-top:12px;">Last auto-promotion: auto-entity-funnel-metric-roi on 2026-04-17. Regenerated on every release via <code>npm run numbers:generate</code> and on a weekly cadence.</p>
261
+ <p style="margin-top:12px;">Last auto-promotion: none. Regenerated on every release via <code>npm run numbers:generate</code> and on a weekly cadence.</p>
262
262
  </div>
263
263
 
264
264
  <div class="cta">
265
265
  <a href="https://www.npmjs.com/package/thumbgate">Install ThumbGate — npx thumbgate init</a>
266
- <div class="footer-note">Prefer the raw feed? See <a href="https://github.com/IgorGanapolsky/ThumbGate">GitHub</a> or run <code>npm run check:stats</code> locally.</div>
267
- <div class="footer-note">Generated at 2026-04-20T21:45:34.500Z UTC.</div>
266
+ <div class="footer-note">Prefer the raw feed? See <a href="https://github.com/IgorGanapolsky/ThumbGate">GitHub</a> or run <code>npm run gate:stats</code> locally.</div>
267
+ <div class="footer-note">Generated at 2026-05-03T16:23:03.917Z UTC.</div>
268
268
  </div>
269
269
  </main>
270
270
  </body>