thumbgate 1.29.2 β†’ 1.31.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 (111) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.well-known/mcp/server-card.json +1 -1
  3. package/README.md +54 -16
  4. package/adapters/claude/.mcp.json +2 -2
  5. package/adapters/forge/forge.yaml +3 -3
  6. package/adapters/mcp/server-stdio.js +143 -14
  7. package/adapters/opencode/opencode.json +1 -1
  8. package/bench/observability-eval-suite.json +2 -2
  9. package/bin/cli.js +154 -36
  10. package/config/evals/generation-quality-golden.json +95 -0
  11. package/config/evals/rag-answer-quality-golden.json +91 -0
  12. package/config/evals/retrieval-hybrid-ablation.json +66 -0
  13. package/config/evals/retrieval-ranking-golden.json +522 -0
  14. package/config/gates/default.json +217 -50
  15. package/config/mcp-allowlists.json +215 -185
  16. package/config/model-tiers.json +7 -2
  17. package/config/post-deploy-marketing-pages.json +26 -1
  18. package/glama.json +6 -0
  19. package/package.json +94 -11
  20. package/public/architecture.html +130 -0
  21. package/public/assets/diagrams/agent-integration.png +0 -0
  22. package/public/assets/diagrams/before-after.svg +22 -0
  23. package/public/assets/diagrams/decision.svg +36 -0
  24. package/public/assets/diagrams/feedback-pipeline.png +0 -0
  25. package/public/assets/diagrams/hero-thumbs.svg +68 -0
  26. package/public/assets/diagrams/loop.svg +40 -0
  27. package/public/assets/diagrams/plugin-topology.png +0 -0
  28. package/public/assets/diagrams/pre-action-gate-loop.svg +59 -0
  29. package/public/assets/diagrams/self-improving-thumbs-loop.svg +105 -0
  30. package/public/assets/diagrams/stack.svg +18 -0
  31. package/public/assets/diagrams/thumbgate-architecture.png +0 -0
  32. package/public/case-studies.html +151 -0
  33. package/public/compare.html +1 -0
  34. package/public/dashboard.html +126 -28
  35. package/public/eval-scorecard.html +195 -0
  36. package/public/eval-scorecard.json +18 -0
  37. package/public/evaluations.html +168 -0
  38. package/public/index.html +143 -13
  39. package/public/numbers.html +3 -2
  40. package/public/pricing.html +143 -30
  41. package/public/whitepaper.html +189 -0
  42. package/scripts/a-plus-evidence-scorecard.js +303 -0
  43. package/scripts/activation-quickstart.js +1 -0
  44. package/scripts/agent-outcome-monitor.js +71 -1
  45. package/scripts/async-eval-observability.js +36 -11
  46. package/scripts/audit-trail.js +37 -1
  47. package/scripts/auto-promote-gates.js +149 -34
  48. package/scripts/billing.js +3 -1
  49. package/scripts/claude-feedback-sync.js +3 -2
  50. package/scripts/cli-feedback.js +13 -7
  51. package/scripts/colbert-style-maxsim.js +236 -0
  52. package/scripts/cross-encoder-reranker.js +359 -126
  53. package/scripts/dashboard-chat.js +350 -17
  54. package/scripts/document-intake.js +283 -7
  55. package/scripts/eval-quality-suite.js +204 -0
  56. package/scripts/feedback-aggregate.js +5 -2
  57. package/scripts/feedback-loop.js +359 -189
  58. package/scripts/feedback-paths.js +32 -13
  59. package/scripts/feedback-quality.js +53 -0
  60. package/scripts/filesystem-search.js +17 -7
  61. package/scripts/gates-engine.js +98 -4
  62. package/scripts/generate-case-study-outreach.js +253 -0
  63. package/scripts/generate-eval-scorecard.js +276 -0
  64. package/scripts/growth-campaigns.js +183 -0
  65. package/scripts/harness-tool-names.js +70 -0
  66. package/scripts/hook-runtime.js +10 -3
  67. package/scripts/jsonl-watcher.js +1 -0
  68. package/scripts/lesson-db.js +16 -5
  69. package/scripts/lesson-embedding-index.js +67 -20
  70. package/scripts/lesson-embedding-maintenance.js +177 -0
  71. package/scripts/lesson-inference.js +23 -4
  72. package/scripts/lesson-reranker.js +55 -9
  73. package/scripts/lesson-retrieval.js +375 -32
  74. package/scripts/lesson-search.js +48 -11
  75. package/scripts/llm-client.js +304 -15
  76. package/scripts/mcp-config.js +26 -5
  77. package/scripts/mcp-oauth.js +37 -2
  78. package/scripts/model-eval.js +308 -0
  79. package/scripts/model-tier-router.js +593 -0
  80. package/scripts/parallel-workflow-orchestrator.js +86 -22
  81. package/scripts/pragmatic-hybrid-search.js +379 -0
  82. package/scripts/published-cli.js +11 -1
  83. package/scripts/rag-document-pipeline.js +461 -0
  84. package/scripts/rag-structured-output.js +441 -0
  85. package/scripts/ragas-style-metrics.js +351 -0
  86. package/scripts/refresh-proof-pack.js +261 -0
  87. package/scripts/request-envelope.js +178 -0
  88. package/scripts/rerank-pipeline.js +370 -0
  89. package/scripts/rerank-quality-eval.js +155 -0
  90. package/scripts/retrieval-hybrid-ablation.js +120 -0
  91. package/scripts/retrieval-quality-tier.js +118 -0
  92. package/scripts/risk-scorer.js +144 -15
  93. package/scripts/secret-scanner.js +395 -4
  94. package/scripts/self-distill-agent.js +7 -1
  95. package/scripts/self-healing-check.js +25 -0
  96. package/scripts/skill-packs.js +183 -0
  97. package/scripts/slow-loop.js +72 -0
  98. package/scripts/statusline-links.js +1 -1
  99. package/scripts/statusline-local-stats.js +1 -1
  100. package/scripts/statusline.sh +8 -1
  101. package/scripts/telemetry-analytics.js +13 -1
  102. package/scripts/thumbgate-bench.js +13 -0
  103. package/scripts/thumbgate-search.js +98 -6
  104. package/scripts/tier-budget-guard.js +186 -0
  105. package/scripts/tool-kpi-tracker.js +124 -0
  106. package/scripts/tool-registry.js +95 -1
  107. package/scripts/vector-store.js +108 -4
  108. package/scripts/verify-marketing-pages-deployed.js +85 -3
  109. package/server.json +44 -0
  110. package/smithery.yaml +17 -0
  111. package/src/api/server.js +424 -99
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.29.2",
3
+ "version": "1.31.0",
4
4
  "description": "ThumbGate Pre-Action Checks self-improve from ranked lessons and repeated failures, hard-block detected secret leaks, and block matches in strict mode.",
5
5
  "homepage": "https://thumbgate.ai",
6
6
  "repository": {
@@ -28,6 +28,7 @@
28
28
  "scripts/agent-memory-lifecycle.js",
29
29
  "scripts/agent-readiness-plan.js",
30
30
  "scripts/agent-readiness.js",
31
+ "scripts/a-plus-evidence-scorecard.js",
31
32
  "scripts/agent-operations-planner.js",
32
33
  "scripts/agent-reasoning-traces.js",
33
34
  "scripts/agent-reward-model.js",
@@ -53,6 +54,7 @@
53
54
  "scripts/bot-detection.js",
54
55
  "scripts/build-metadata.js",
55
56
  "scripts/classifier-routing.js",
57
+ "scripts/colbert-style-maxsim.js",
56
58
  "scripts/cross-encoder-reranker.js",
57
59
  "scripts/chatgpt-ads-readiness-pack.js",
58
60
  "scripts/claude-feedback-sync.js",
@@ -83,6 +85,11 @@
83
85
  "scripts/deepseek-v4-runtime-guardrails.js",
84
86
  "scripts/docker-sandbox-planner.js",
85
87
  "scripts/document-intake.js",
88
+ "scripts/rag-document-pipeline.js",
89
+ "scripts/ragas-style-metrics.js",
90
+ "scripts/skill-packs.js",
91
+ "scripts/lesson-embedding-maintenance.js",
92
+ "scripts/retrieval-hybrid-ablation.js",
86
93
  "scripts/document-workflow-governance.js",
87
94
  "scripts/durability/step.js",
88
95
  "scripts/evolution-state.js",
@@ -91,6 +98,7 @@
91
98
  "scripts/explore.js",
92
99
  "scripts/export-databricks-bundle.js",
93
100
  "scripts/entitlement.js",
101
+ "scripts/eval-quality-suite.js",
94
102
  "config/entitlement-public-keys.json",
95
103
  "scripts/external-customer-audit.js",
96
104
  "scripts/stripe-revenue-catalog.js",
@@ -114,6 +122,7 @@
114
122
  "scripts/grafana-revenue-evidence.js",
115
123
  "scripts/gate-stats.js",
116
124
  "scripts/gate-templates.js",
125
+ "scripts/harness-tool-names.js",
117
126
  "scripts/gates-engine.js",
118
127
  "scripts/gemini-embedding-policy.js",
119
128
  "scripts/growth-campaigns.js",
@@ -159,6 +168,7 @@
159
168
  "scripts/meta-agent-loop.js",
160
169
  "scripts/model-access-eligibility.js",
161
170
  "scripts/model-migration-readiness.js",
171
+ "scripts/model-tier-router.js",
162
172
  "scripts/multimodal-retrieval-plan.js",
163
173
  "scripts/native-messaging-audit.js",
164
174
  "scripts/natural-language-harness.js",
@@ -197,9 +207,15 @@
197
207
  "scripts/rate-limiter.js",
198
208
  "scripts/reasoning-efficiency-guardrails.js",
199
209
  "scripts/repeat-metric.js",
210
+ "scripts/rerank-pipeline.js",
211
+ "scripts/rerank-quality-eval.js",
212
+ "scripts/request-envelope.js",
213
+ "scripts/retrieval-quality-tier.js",
214
+ "scripts/tier-budget-guard.js",
200
215
  "scripts/revenue-action-eligibility.js",
201
216
  "scripts/revenue-evidence-remediation.js",
202
217
  "scripts/reward-hacking-guardrails.js",
218
+ "scripts/model-eval.js",
203
219
  "scripts/risk-scorer.js",
204
220
  "scripts/rlaif-self-audit.js",
205
221
  "scripts/rubric-engine.js",
@@ -223,6 +239,7 @@
223
239
  "scripts/single-use-credential-gate.js",
224
240
  "scripts/skill-generator.js",
225
241
  "scripts/skill-rag-router.js",
242
+ "scripts/slow-loop.js",
226
243
  "scripts/slo-alert-engine.js",
227
244
  "scripts/spec-gate.js",
228
245
  "scripts/stripe-credentials.js",
@@ -249,6 +266,7 @@
249
266
  "scripts/tool-contract-validator.js",
250
267
  "scripts/tool-registry.js",
251
268
  "scripts/task-outcomes.js",
269
+ "scripts/tool-kpi-tracker.js",
252
270
  "scripts/upstream-contribution-engine.js",
253
271
  "scripts/user-profile.js",
254
272
  "scripts/validate-workflow-contract.js",
@@ -313,6 +331,13 @@
313
331
  "public/learn.html",
314
332
  "public/lessons.html",
315
333
  "public/numbers.html",
334
+ "public/assets/diagrams/",
335
+ "public/whitepaper.html",
336
+ "public/evaluations.html",
337
+ "public/eval-scorecard.html",
338
+ "public/eval-scorecard.json",
339
+ "public/case-studies.html",
340
+ "public/architecture.html",
316
341
  "public/partner-intake.html",
317
342
  "public/pricing.html",
318
343
  "public/pro.html",
@@ -324,7 +349,15 @@
324
349
  "public/brand/",
325
350
  "public/js/",
326
351
  "skills/thumbgate/SKILL.md",
327
- "src/"
352
+ "src/",
353
+ "scripts/generate-eval-scorecard.js",
354
+ "scripts/refresh-proof-pack.js",
355
+ "scripts/generate-case-study-outreach.js",
356
+ "scripts/rag-structured-output.js",
357
+ "scripts/pragmatic-hybrid-search.js",
358
+ "server.json",
359
+ "glama.json",
360
+ "smithery.yaml"
328
361
  ],
329
362
  "scripts": {
330
363
  "canary:snapshot": "node scripts/gate-decision-canary.js --snapshot",
@@ -427,7 +460,7 @@
427
460
  "social:prospect:bluesky": "node scripts/social-bluesky-prospecting.js",
428
461
  "social:prospect:bluesky:dry": "node scripts/social-bluesky-prospecting.js --dry-run",
429
462
  "social:reply-publish:bluesky:dry": "node scripts/social-reply-monitor-bluesky.js --publish-approved --dry-run",
430
- "test": "npm run test:python && npm run test:schema && npm run test:loop && npm run test:dpo && npm run test:kto && npm run test:api && npm run test:proof && npm run test:e2e && npm run test:rlaif && npm run test:attribution && npm run test:quality && npm run test:intelligence && npm run test:training-export && npm run test:deployment && npm run test:operational-integrity && npm run test:workflow && npm run test:grafana-revenue-evidence && npm run test:billing && npm run test:billing-setup && npm run test:cli && npm run test:watcher && npm run test:autoresearch && npm run test:ops && npm run test:session-analyzer && npm run test:tessl && npm run test:canary && npm run test:gates && npm run test:evoskill && npm run test:gates-hardening && npm run test:workers && npm run test:social-analytics && npm run test:memalign && npm run test:xmemory-lite && npm run test:filesystem-search && npm run test:platform-limits && npm run test:post-video && npm run test:post-everywhere-instagram && npm run test:post-everywhere-channels && npm run test:obsidian-export && npm run test:lesson-db && npm run test:lesson-rotation && npm run test:memory-dedup && npm run test:feedback-quality && npm run test:sync-version && npm run test:release-window && npm run test:check-congruence && npm run test:tool-registry && npm run test:repeat-metric && npm run test:noop-detect && npm run test:action-receipts && npm run test:feedback-to-rules && npm run test:memory-firewall && npm run test:memory-scope-readiness && npm run test:belief-update && npm run test:hosted-config && npm run test:operational-summary && npm run test:operational-dashboard && npm run test:operator-artifacts && npm run test:operator-key-auth && npm run test:cloudflare-sandbox && npm run test:mcp-config && npm run test:mcp-tool-annotations && npm run test:mcp-oauth && npm run test:mcp-oauth-flow && npm run test:plan-gate && npm run test:ai-component-inventory && npm run test:verification-evidence && npm run test:pulse && npm run test:semantic-layer && npm run test:data-pipeline && npm run test:optimize-context && npm run test:principle-extractor && npm run test:analytics-window && npm run test:funnel-analytics && npm run test:experiment-tracker && npm run test:build-metadata && npm run test:context-engine && npm run test:hf-papers && npm run test:marketing-experiment && npm run test:seo-gsd && npm run test:verify-run && npm run test:entitlement && npm run test:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:imperative-detector && npm run test:audit-pr-bot-contamination && npm run test:stripe-bootstrap-saas-catalog && npm run test:postinstall && npm run test:funnel-invariants && npm run test:cli-telemetry && npm run test:pro-parity && npm run test:model-tier-router && npm run test:computer-use-firewall && npm run test:skill-exporter && npm run test:statusline && npm run test:statusline-cache-aggregate && npm run test:public-repo-hygiene && npm run test:no-internal-orchestration-leaks && npm run test:evolution && npm run test:org-dashboard && npm run test:multi-hop-recall && npm run test:synthetic-dpo && npm run test:thumbgate-skill && npm run test:learn-hub && npm run test:feedback-fallback && npm run test:metaclaw && npm run test:server-lock && npm run test:control-tower && npm run test:pii-scanner && npm run test:data-governance && npm run test:lesson-inference && npm run test:semantic-dedup && npm run test:fs-utils && npm run test:cli-schema && npm run test:explore && npm run test:lesson-reranker && npm run test:lesson-retrieval && npm run test:lesson-semantic-retrieval && npm run test:cross-encoder && npm run test:reflector-agent && npm run test:feedback-session && npm run test:feedback-history-distiller && npm run test:hallucination-detector && npm run test:history-distiller && npm run test:predictive-insights && npm run test:predictive-credible-range && npm run test:prove-predictive-insights && npm run test:statusbar-cli && npm run test:generate-instagram-card && npm run test:instagram-thumbgate-post && npm run test:publish-instagram-thumbgate && npm run test:lesson-synthesis && npm run test:lesson-canonical && npm run test:background-governance && npm run test:memory-migration && npm run test:prompt-dlp && npm run test:ephemeral-store && npm run test:agent-security && npm run test:skill-progressive && npm run test:per-step-scoring && npm run test:weekly-auto-post && npm run test:social-post-hourly && npm run test:social-quality-gate && npm run test:a2ui-engine && npm run test:gate-satisfy && npm run test:money-watcher && npm run test:budget && npm run test:quick-start && npm run test:utm && npm run test:product-feedback && npm run test:feedback-root-consolidator && npm run test:engagement-audit && npm run test:install-growth-automation && npm run test:publish-thumbgate-launch && npm run test:reconcile-thumbgate-campaign && npm run test:reddit-publisher && npm run test:schedule-thumbgate-campaign && npm run test:social-reply-monitor && npm run test:sync-launch-assets && npm run test:ai-search-visibility && npm run test:perplexity && npm run test:xss-checkout-escape && npm run test:security-scanner && npm run test:llm-client && npm run test:managed-lesson-agent && npm run test:self-distill && npm run test:meta-agent && npm run test:harness-selector && npm run test:thumbgate-bench && npm run test:seo-guides && npm run test:enforcement-loop && npm run test:cli-agent-experience && npm run test:bot-detection && npm run test:checkout-archived-product-guard && npm run test:postgres-guard && npm run test:checkout-bot-guard && npm run test:checkout-pro-confirmation-gate && npm run test:pricing-page-telemetry && npm run test:session-health && npm run test:session-episodes && npm run test:spec-gate && npm run test:decision-trace && npm run test:dashboard-insights && npm run test:telemetry-tracked-link-slug && npm run test:prompt-eval && npm run test:gate-coherence && npm run test:gate-eval && npm run test:high-roi && npm run test:public-static-assets && npm run test:token-savings && npm run test:numbers-page && npm run test:workflow-gate-checkpoint && npm run test:lesson-export-import && npm run test:landing-page-claims && npm run test:competitive-positioning-marketing && npm run test:medium-weekly && npm run test:dashboard-deeplink-e2e && npm run test:public-package-parity && npm run test:token-savings-dashboard && npm run test:cursor-wiring && npm run test:pretooluse-injection && npm run test:recent-corrective-context && npm run test:durability-step && npm run test:mailer && npm run test:brand-assets && npm run test:enforcement-teeth && npm run test:bayes-optimal-gate && npm run test:swarm-coordinator && npm run test:session-report && npm run test:agent-reasoning-traces && npm run test:judge-reward && npm run test:llm-behavior-monitor && npm run test:prompting-os && npm run test:single-use-credential-gate && npm run test:structured-prompt-driven && npm run test:require-evidence-gate && npm run test:rule-validator && npm run test:bluesky-atproto && npm run test:social-reply-monitor-bluesky && npm run test:bluesky-delete-replies && npm run test:architect-kit-memory-bridge && npm run test:sonar-review-hotspots && npm run test:actionable-remediations && npm run test:gemini-embedding-policy && npm run test:agent-design-governance && npm run test:public-core-boundary && npm run test:hook-stop-verify-deploy && npm run test:hook-stop-anti-claim && npm run test:stop-hook-json-contract && npm run test:plausible-server-events && npm run test:activation-tracker && npm run test:activation-onboarding && npm run test:unified-revenue-rollup && npm run test:conversion-rate-stats && npm run test:external-customer-audit && npm run test:telemetry-export && npm run test:stripe-checkout-diagnostic && npm run test:stripe-business-identity-probe && npm run test:revenue-observability-doctor && npm run test:jsonl-window && npm run test:observability-env && npm run test:public-bundle-ratchet && npm run test:pack-runtime-integrity && npm run test:hook-self-protection && npm run test:self-protect-enforcement && npm run test:never-bypass-branch-protection && npm run test:stripe-payment-link-update && npm run test:ci-cd-hygiene-audit && npm run test:verify-marketing-pages-deployed && npm run test:install-email-capture && npm run test:install-shim && npm run test:hook-runtime-subcommands && npm run test:implementation-notes && npm run test:daily-block-cap && npm run test:free-to-paid-conversion-units && npm run test:metrics-real-endpoint && npm run test:cli-trial-and-help && npm run test:cost-cli && npm run test:silent-failure-cluster && npm run test:proof:truth && node --test tests/adaptive-reliability.test.js && npm run test:mcp-oauth-reviewer && npm run test:dfcx-gate && npm run test:dfcx-gate-server && npm run test:vertex-scorer && npm run test:dashboard-chat && npm run test:gitar-integration && npm run test:secret-redaction && npm run test:discoverable-skills && npm run test:discoverable-skill-skills && npm run test:sync-telemetry && npm run test:leak-scanner && npm run test:team-sync && npm run test:eval-rag && npm run test:async-eval-observability && npm run test:letta-adapter && npm run test:policy-engine-adapter && npm run test:tool-contract-validator && npm run test:check-update && npm run test:hermes-gate && npm run test:memory-provider-enforcement-bridge && npm run test:publisher-credential-guards && npm run test:reddit-browser-notification-watch && npm run test:payment-rails && npm run test:service-checkout-price-integrity && npm run test:cursor-marketplace-doctor && npm run test:plugin-hooks-manifest && npm run test:okara-money-promo-automation",
463
+ "test": "npm run test:python && npm run test:schema && npm run test:loop && npm run test:dpo && npm run test:kto && npm run test:api && npm run test:proof && npm run test:e2e && npm run test:rlaif && npm run test:attribution && npm run test:quality && npm run test:intelligence && npm run test:training-export && npm run test:deployment && npm run test:operational-integrity && npm run test:workflow && npm run test:proof-pack-cadence && npm run test:grafana-revenue-evidence && npm run test:billing && npm run test:billing-setup && npm run test:cli && npm run test:watcher && npm run test:autoresearch && npm run test:ops && npm run test:session-analyzer && npm run test:tessl && npm run test:canary && npm run test:gates && npm run test:evoskill && npm run test:gates-hardening && npm run test:workers && npm run test:social-analytics && npm run test:memalign && npm run test:xmemory-lite && npm run test:filesystem-search && npm run test:platform-limits && npm run test:post-video && npm run test:post-everywhere-instagram && npm run test:post-everywhere-channels && npm run test:obsidian-export && npm run test:lesson-db && npm run test:lesson-rotation && npm run test:memory-dedup && npm run test:feedback-quality && npm run test:sync-version && npm run test:release-window && npm run test:check-congruence && npm run test:tool-registry && npm run test:repeat-metric && npm run test:noop-detect && npm run test:action-receipts && npm run test:feedback-to-rules && npm run test:memory-firewall && npm run test:memory-scope-readiness && npm run test:belief-update && npm run test:hosted-config && npm run test:operational-summary && npm run test:operational-dashboard && npm run test:operator-artifacts && npm run test:operator-key-auth && npm run test:cloudflare-sandbox && npm run test:mcp-config && npm run test:mcp-tool-annotations && npm run test:mcp-oauth && npm run test:mcp-oauth-flow && npm run test:plan-gate && npm run test:ai-component-inventory && npm run test:verification-evidence && npm run test:pulse && npm run test:semantic-layer && npm run test:data-pipeline && npm run test:optimize-context && npm run test:principle-extractor && npm run test:analytics-window && npm run test:funnel-analytics && npm run test:experiment-tracker && npm run test:build-metadata && npm run test:context-engine && npm run test:hf-papers && npm run test:marketing-experiment && npm run test:seo-gsd && npm run test:verify-run && npm run test:entitlement && npm run test:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:imperative-detector && npm run test:audit-pr-bot-contamination && npm run test:stripe-bootstrap-saas-catalog && npm run test:postinstall && npm run test:funnel-invariants && npm run test:cli-telemetry && npm run test:pro-parity && npm run test:model-tier-router && npm run test:computer-use-firewall && npm run test:skill-exporter && npm run test:statusline && npm run test:statusline-cache-aggregate && npm run test:public-repo-hygiene && npm run test:no-internal-orchestration-leaks && npm run test:evolution && npm run test:org-dashboard && npm run test:multi-hop-recall && npm run test:synthetic-dpo && npm run test:thumbgate-skill && npm run test:learn-hub && npm run test:feedback-fallback && npm run test:metaclaw && npm run test:server-lock && npm run test:control-tower && npm run test:pii-scanner && npm run test:data-governance && npm run test:lesson-inference && npm run test:semantic-dedup && npm run test:fs-utils && npm run test:cli-schema && npm run test:explore && npm run test:lesson-reranker && npm run test:lesson-retrieval && npm run test:lesson-semantic-retrieval && npm run test:cross-encoder && npm run test:reflector-agent && npm run test:feedback-session && npm run test:feedback-history-distiller && npm run test:hallucination-detector && npm run test:history-distiller && npm run test:predictive-insights && npm run test:predictive-credible-range && npm run test:prove-predictive-insights && npm run test:statusbar-cli && npm run test:generate-instagram-card && npm run test:instagram-thumbgate-post && npm run test:publish-instagram-thumbgate && npm run test:lesson-synthesis && npm run test:lesson-canonical && npm run test:background-governance && npm run test:memory-migration && npm run test:prompt-dlp && npm run test:ephemeral-store && npm run test:agent-security && npm run test:skill-progressive && npm run test:per-step-scoring && npm run test:weekly-auto-post && npm run test:social-post-hourly && npm run test:social-quality-gate && npm run test:a2ui-engine && npm run test:gate-satisfy && npm run test:money-watcher && npm run test:budget && npm run test:quick-start && npm run test:utm && npm run test:product-feedback && npm run test:feedback-root-consolidator && npm run test:engagement-audit && npm run test:install-growth-automation && npm run test:publish-thumbgate-launch && npm run test:reconcile-thumbgate-campaign && npm run test:reddit-publisher && npm run test:schedule-thumbgate-campaign && npm run test:social-reply-monitor && npm run test:sync-launch-assets && npm run test:ai-search-visibility && npm run test:perplexity && npm run test:xss-checkout-escape && npm run test:security-scanner && npm run test:llm-client && npm run test:managed-lesson-agent && npm run test:self-distill && npm run test:meta-agent && npm run test:harness-selector && npm run test:thumbgate-bench && npm run test:seo-guides && npm run test:enforcement-loop && npm run test:cli-agent-experience && npm run test:bot-detection && npm run test:checkout-archived-product-guard && npm run test:postgres-guard && npm run test:checkout-bot-guard && npm run test:checkout-pro-confirmation-gate && npm run test:pricing-page-telemetry && npm run test:session-health && npm run test:session-episodes && npm run test:spec-gate && npm run test:decision-trace && npm run test:dashboard-insights && npm run test:telemetry-tracked-link-slug && npm run test:prompt-eval && npm run test:gate-coherence && npm run test:gate-eval && npm run test:high-roi && npm run test:public-static-assets && npm run test:token-savings && npm run test:numbers-page && npm run test:workflow-gate-checkpoint && npm run test:lesson-export-import && npm run test:landing-page-claims && npm run test:competitive-positioning-marketing && npm run test:medium-weekly && npm run test:dashboard-deeplink-e2e && npm run test:public-package-parity && npm run test:token-savings-dashboard && npm run test:cursor-wiring && npm run test:pretooluse-injection && npm run test:recent-corrective-context && npm run test:durability-step && npm run test:mailer && npm run test:brand-assets && npm run test:enforcement-teeth && npm run test:bayes-optimal-gate && npm run test:swarm-coordinator && npm run test:session-report && npm run test:agent-reasoning-traces && npm run test:judge-reward && npm run test:llm-behavior-monitor && npm run test:prompting-os && npm run test:single-use-credential-gate && npm run test:structured-prompt-driven && npm run test:require-evidence-gate && npm run test:rule-validator && npm run test:bluesky-atproto && npm run test:social-reply-monitor-bluesky && npm run test:bluesky-delete-replies && npm run test:architect-kit-memory-bridge && npm run test:sonar-review-hotspots && npm run test:actionable-remediations && npm run test:gemini-embedding-policy && npm run test:agent-design-governance && npm run test:public-core-boundary && npm run test:hook-stop-verify-deploy && npm run test:hook-stop-anti-claim && npm run test:stop-hook-json-contract && npm run test:plausible-server-events && npm run test:activation-tracker && npm run test:activation-onboarding && npm run test:unified-revenue-rollup && npm run test:conversion-rate-stats && npm run test:external-customer-audit && npm run test:telemetry-export && npm run test:stripe-checkout-diagnostic && npm run test:stripe-business-identity-probe && npm run test:revenue-observability-doctor && npm run test:jsonl-window && npm run test:observability-env && npm run test:glama-mcp && npm run test:prove-glama-mcp && npm run test:public-bundle-ratchet && npm run test:pack-runtime-integrity && npm run test:hook-self-protection && npm run test:self-protect-enforcement && npm run test:never-bypass-branch-protection && npm run test:stripe-payment-link-update && npm run test:ci-cd-hygiene-audit && npm run test:verify-marketing-pages-deployed && npm run test:install-email-capture && npm run test:install-shim && npm run test:hook-runtime-subcommands && npm run test:implementation-notes && npm run test:daily-block-cap && npm run test:free-to-paid-conversion-units && npm run test:metrics-real-endpoint && npm run test:cli-trial-and-help && npm run test:cost-cli && npm run test:silent-failure-cluster && npm run test:proof:truth && node --test tests/adaptive-reliability.test.js && npm run test:mcp-oauth-reviewer && npm run test:dfcx-gate && npm run test:dfcx-gate-server && npm run test:vertex-scorer && npm run test:dashboard-chat && npm run test:gitar-integration && npm run test:secret-redaction && npm run test:discoverable-skills && npm run test:discoverable-skill-skills && npm run test:sync-telemetry && npm run test:leak-scanner && npm run test:team-sync && npm run test:rag-pipeline && npm run test:autonomous-reliability && npm run test:eval-rag && npm run test:async-eval-observability && npm run test:letta-adapter && npm run test:policy-engine-adapter && npm run test:tool-contract-validator && npm run test:check-update && npm run test:hermes-gate && npm run test:memory-provider-enforcement-bridge && npm run test:publisher-credential-guards && npm run test:reddit-browser-notification-watch && npm run test:payment-rails && npm run test:service-checkout-price-integrity && npm run test:cursor-marketplace-doctor && npm run test:plugin-hooks-manifest && npm run test:okara-money-promo-automation && npm run test:retrieval-window && npm run test:risk-quality && npm run test:eval-mining && npm run test:state-backup && npm run test:eval-golden && npm run test:task-scope-lease && npm run test:evaluations-page && npm run test:agent-install-paths && npm run test:mcp-gate-check && npm run test:adapter-pins && npm run test:secret-egress && npm run test:harness-tool-names && npm run test:feedback-reward && npm run test:capability-wiring",
431
464
  "test:python": "python3 -m pytest tests/*.py",
432
465
  "test:check-update": "node --test tests/check-update.test.js",
433
466
  "test:hook-stop-verify-deploy": "node --test tests/hook-stop-verify-deploy.test.js",
@@ -478,9 +511,11 @@
478
511
  "eval:feedback-quality": "python3 scripts/feedback_quality_eval.py",
479
512
  "eval:classifier": "python3 scripts/eval_gate_classifier.py",
480
513
  "eval:rag": "node scripts/eval-rag.js",
481
- "test:eval-rag": "node --test tests/eval-rag.test.js",
514
+ "eval:quality": "node scripts/eval-quality-suite.js",
515
+ "test:eval-quality": "node --test tests/ragas-style-metrics.test.js tests/retrieval-ranking-eval.test.js tests/ir-metrics.test.js",
516
+ "test:eval-rag": "node --test tests/eval-rag.test.js tests/retrieval-hybrid-ablation.test.js",
482
517
  "eval:async-observability": "node scripts/async-eval-observability.js",
483
- "test:async-eval-observability": "node --test tests/async-eval-observability.test.js",
518
+ "test:async-eval-observability": "node --test tests/async-eval-observability.test.js tests/rag-answer-metrics.test.js",
484
519
  "test:decision-trace": "node --test tests/decision-trace.test.js",
485
520
  "test:feedback-fallback": "node --test tests/feedback-fallback.test.js",
486
521
  "test:metaclaw": "node --test tests/metaclaw-features.test.js",
@@ -566,7 +601,7 @@
566
601
  "test:training-export": "node --test tests/training-export.test.js tests/databricks-export.test.js",
567
602
  "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/packed-feedback-retrieval-e2e.test.js tests/packed-provider-payment-reconciler-e2e.test.js tests/packed-revenue-remediation-e2e.test.js",
568
603
  "test:operational-integrity": "node --test tests/operational-integrity.test.js tests/sync-branch-protection.test.js",
569
- "test:workflow": "node --test tests/parallel-workflow.test.js tests/workflow-contract.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/workflow-intake-queue.test.js tests/revenue-pack-utils.test.js tests/apollo-acquisition.test.js tests/sales-pipeline.test.js tests/provider-payment-reconciler.test.js tests/reddit-dm-outreach-evidence.test.js tests/gtm-sales-evidence-commands.test.js tests/revenue-action-eligibility.test.js tests/revenue-evidence-remediation.test.js tests/gtm-revenue-action-eligibility.test.js tests/revenue-offer-ladder.test.js tests/revenue-offer-system.test.js tests/buyer-paths.test.js tests/github-outreach.test.js tests/enterprise-story.test.js tests/guide-conversion-path.test.js tests/buyer-intent-revenue-assist.test.js",
604
+ "test:workflow": "node --test tests/parallel-workflow.test.js tests/parallel-workflow-public.test.js tests/workflow-contract.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/workflow-intake-queue.test.js tests/revenue-pack-utils.test.js tests/apollo-acquisition.test.js tests/sales-pipeline.test.js tests/provider-payment-reconciler.test.js tests/reddit-dm-outreach-evidence.test.js tests/gtm-sales-evidence-commands.test.js tests/revenue-action-eligibility.test.js tests/revenue-evidence-remediation.test.js tests/gtm-revenue-action-eligibility.test.js tests/revenue-offer-ladder.test.js tests/revenue-offer-system.test.js tests/buyer-paths.test.js tests/github-outreach.test.js tests/enterprise-story.test.js tests/guide-conversion-path.test.js tests/buyer-intent-revenue-assist.test.js && node --test tests/eval-proof-pack-pages.test.js && npm run test:proof-pack-cadence",
570
605
  "test:revenue-evidence-remediation": "node --test tests/revenue-evidence-remediation.test.js",
571
606
  "test:grafana-revenue-evidence": "node --test tests/grafana-revenue-evidence.test.js",
572
607
  "test:sales-pipeline": "node --test tests/sales-pipeline.test.js tests/provider-payment-reconciler.test.js tests/reddit-dm-outreach-evidence.test.js tests/gtm-sales-evidence-commands.test.js",
@@ -655,10 +690,13 @@
655
690
  "test:control-tower": "node --test tests/control-tower.test.js",
656
691
  "test:pii-scanner": "node --test tests/pii-scanner.test.js",
657
692
  "test:data-governance": "node --test tests/data-governance.test.js",
658
- "test:lesson-inference": "node --test tests/conversation-context.test.js tests/lesson-inference.test.js tests/lesson-prompt-shape.test.js",
693
+ "test:lesson-inference": "node --test tests/conversation-context.test.js tests/lesson-inference.test.js tests/lesson-prompt-shape.test.js tests/lesson-stats-review-origin.test.js",
659
694
  "test:lesson-retrieval": "node --test tests/lesson-retrieval.test.js",
660
- "test:lesson-semantic-retrieval": "node --test tests/lesson-semantic-retrieval.test.js",
695
+ "test:lesson-semantic-retrieval": "node --test tests/lesson-semantic-retrieval.test.js tests/lesson-embedding-maintenance.test.js",
661
696
  "test:cross-encoder": "node --test tests/cross-encoder-reranker.test.js",
697
+ "test:colbert-maxsim": "node --test tests/colbert-style-maxsim.test.js",
698
+ "test:rerank-pipeline": "node --test tests/rerank-pipeline.test.js",
699
+ "eval:rerank": "node scripts/rerank-quality-eval.js",
662
700
  "test:reflector-agent": "node --test tests/reflector-agent.test.js",
663
701
  "test:public-core-boundary": "node --test tests/public-core-boundary.test.js",
664
702
  "test:feedback-session": "node --test tests/feedback-session.test.js",
@@ -696,6 +734,7 @@
696
734
  "social:publish:latest-release-article": "node scripts/social-analytics/publish-latest-release-article.js",
697
735
  "social:publish:latest-release-fallbacks": "node scripts/social-analytics/publish-latest-release-fallbacks.js",
698
736
  "social:verify:latest-release": "node scripts/social-analytics/verify-latest-release-posts.js",
737
+ "social:verify:marketing-agent": "node scripts/social-analytics/verify-marketing-agent-campaign.js",
699
738
  "social:schedule:campaign": "node scripts/social-analytics/schedule-thumbgate-campaign.js",
700
739
  "social:install:growth": "node scripts/social-analytics/install-growth-automation.js",
701
740
  "social:reconcile:campaign": "node scripts/social-analytics/reconcile-thumbgate-campaign.js",
@@ -807,9 +846,10 @@
807
846
  "test:dashboard-page-clickability": "playwright test tests/e2e/dashboard-page-clickability.spec.js",
808
847
  "test:agent-manager-page-clickability": "playwright test tests/e2e/agent-manager-page-clickability.spec.js",
809
848
  "test:pricing-page-clickability": "playwright test tests/e2e/pricing-page-clickability.spec.js",
810
- "test:proof:truth": "node --test tests/knowledge-entropy.test.js tests/mcp-wiring-doctor.test.js tests/sequence-guard.test.js tests/slopsquat-guard.test.js tests/slopsquat-stress.test.js tests/truth-and-proof.test.js tests/wire-proof-gate.test.js tests/adaptive-reliability.test.js tests/coderabbit-patterns.test.js",
849
+ "test:proof:truth": "node --test tests/knowledge-entropy.test.js tests/mcp-wiring-doctor.test.js tests/sequence-guard.test.js tests/slopsquat-guard.test.js tests/slopsquat-stress.test.js tests/truth-and-proof.test.js tests/wire-proof-gate.test.js tests/adaptive-reliability.test.js tests/coderabbit-patterns.test.js && npm run test:capability-wiring && npm run test:colbert-maxsim && npm run test:rerank-pipeline && npm run test:eval-quality && npm run test:llm-gateway && npm run test:request-envelope && npm run test:a-plus-evidence",
811
850
  "build:grok-plugin": "node scripts/build-grok-plugin.js",
812
851
  "feedback:ingest": "node scripts/ingest-manual-feedback.js",
852
+ "feedback:slow-loop": "node -e \"console.log(JSON.stringify(require('./scripts/slow-loop').runSlowLoop(), null, 2))\"",
813
853
  "verify-proof": "node scripts/require-proof.js",
814
854
  "test:mcp-oauth-reviewer": "node --test tests/mcp-oauth-reviewer.test.js",
815
855
  "test:dashboard-chat": "node --test tests/dashboard-chat.test.js",
@@ -838,7 +878,49 @@
838
878
  "observability:setup": "node scripts/observability-setup.js",
839
879
  "observability:doctor": "node scripts/revenue-observability-doctor.js",
840
880
  "test:jsonl-window": "node --test tests/jsonl-window.test.js",
841
- "test:observability-env": "node --test tests/observability-env.test.js"
881
+ "test:observability-env": "node --test tests/observability-env.test.js",
882
+ "test:retrieval-window": "node --test tests/lesson-retrieval-recency-window.test.js",
883
+ "eval:risk": "node scripts/eval-risk-model.js",
884
+ "test:risk-quality": "node --test tests/risk-model-quality.test.js tests/model-eval.test.js",
885
+ "state:backup": "node scripts/state-backup.js",
886
+ "state:backup:verify": "node scripts/state-backup.js --verify",
887
+ "state:restore": "node scripts/state-backup.js --restore",
888
+ "test:state-backup": "node --test tests/state-backup.test.js",
889
+ "eval:mine": "node scripts/mine-eval-set.js",
890
+ "eval:baseline": "node scripts/eval-baseline.js",
891
+ "test:eval-golden": "node --test tests/gate-golden-set.test.js",
892
+ "test:eval-mining": "node --test tests/mine-eval-set.test.js tests/eval-baseline.test.js",
893
+ "test:task-scope-lease": "node --test tests/task-scope-lease.test.js",
894
+ "eval-scorecard:generate": "node scripts/generate-eval-scorecard.js",
895
+ "proof-pack:refresh": "node scripts/refresh-proof-pack.js --write",
896
+ "proof-pack:refresh:check": "node scripts/refresh-proof-pack.js --check",
897
+ "proof-pack:schedule": "node scripts/schedule-manager.js install --label proof-pack-scorecard --spec 'daily 06:15' --command 'npm run proof-pack:refresh' --workingDirectory .",
898
+ "outreach:case-study": "node scripts/generate-case-study-outreach.js",
899
+ "test:proof-pack-cadence": "node --test tests/refresh-proof-pack.test.js tests/case-study-outreach.test.js",
900
+ "test:evaluations-page": "node --test tests/evaluations-page.test.js",
901
+ "prove:rag": "node scripts/prove-rag-pipeline.js",
902
+ "test:rag-pipeline": "node --test tests/rag-document-pipeline.test.js tests/rag-structured-output.test.js tests/rag-stage-contracts.test.js tests/prove-rag-pipeline.test.js tests/ir-metrics.test.js tests/retrieval-ranking-eval.test.js tests/pragmatic-hybrid-search.test.js",
903
+ "eval:ranking": "node scripts/retrieval-ranking-eval.js",
904
+ "test:ir-metrics": "node --test tests/ir-metrics.test.js tests/retrieval-ranking-eval.test.js",
905
+ "test:pragmatic-hybrid": "node --test tests/pragmatic-hybrid-search.test.js",
906
+ "explore:reliability": "node scripts/autonomous-reliability-explorer.js --seed=1 --iterations=12",
907
+ "test:autonomous-reliability": "node --test tests/autonomous-reliability-explorer.test.js tests/prove-reliability.test.js",
908
+ "prove:reliability": "node scripts/prove-reliability.js",
909
+ "explore:reliability:ci": "node scripts/prove-reliability.js --seed=42 --iterations=10",
910
+ "test:glama-mcp": "node --test tests/glama-mcp-start-contract.test.js",
911
+ "prove:glama-mcp": "node scripts/prove-glama-mcp-start.js",
912
+ "test:prove-glama-mcp": "node --test tests/prove-glama-mcp-start.test.js",
913
+ "test:agent-install-paths": "node --test tests/agent-install-paths.test.js",
914
+ "test:mcp-gate-check": "node --test tests/mcp-gate-check-tool.test.js",
915
+ "test:adapter-pins": "node --test tests/adapter-version-pins.test.js",
916
+ "test:secret-egress": "node --test tests/secret-egress-gate.test.js",
917
+ "test:harness-tool-names": "node --test tests/harness-tool-names.test.js",
918
+ "test:feedback-reward": "node --test tests/feedback-reward-score.test.js",
919
+ "test:capability-wiring": "node --test tests/capability-wiring-ratchet.test.js",
920
+ "test:llm-gateway": "node --test tests/llm-gateway-provider.test.js",
921
+ "test:request-envelope": "node --test tests/request-envelope.test.js",
922
+ "test:a-plus-evidence": "node --test tests/a-plus-evidence-scorecard.test.js",
923
+ "score:a-plus": "node scripts/a-plus-evidence-scorecard.js"
842
924
  },
843
925
  "keywords": [
844
926
  "mcp",
@@ -899,6 +981,7 @@
899
981
  "apache-arrow": "^18.1.0",
900
982
  "better-sqlite3": "^12.9.0",
901
983
  "dotenv": "^17.4.2",
984
+ "js-yaml": "4.3.0",
902
985
  "playwright-core": "^1.59.1",
903
986
  "protobufjs": "^8.7.1",
904
987
  "stripe": "^22.2.0"
@@ -922,7 +1005,7 @@
922
1005
  "@changesets/changelog-github": "^0.7.0",
923
1006
  "@changesets/cli": "^2.31.0",
924
1007
  "@playwright/test": "^1.60.0",
925
- "c8": "^11.0.0",
1008
+ "c8": "^12.0.0",
926
1009
  "undici": "^8.5.0"
927
1010
  },
928
1011
  "hotfix": "gate-check-bypass-2026-06-03"
@@ -0,0 +1,130 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <meta name="generator" content="ThumbGate">
7
+ <meta name="author" content="Igor Ganapolsky">
8
+ <title>ThumbGate Architecture Diagrams β€” Pre-Action Gate Loop</title>
9
+ <meta name="description" content="Architecture diagrams for ThumbGate: system map, feedback pipeline, agent integration, and pre-action gate loop. The same visuals used in the open-source README, published on thumbgate.ai.">
10
+ <meta property="og:title" content="ThumbGate Architecture Diagrams">
11
+ <meta property="og:description" content="System architecture, feedback pipeline, agent integration, and pre-action gate loop β€” the visual proof pack for buyers and reviewers.">
12
+ <meta property="og:type" content="article">
13
+ <meta property="og:url" content="https://thumbgate.ai/architecture">
14
+ <link rel="canonical" href="https://thumbgate.ai/architecture">
15
+ <link rel="icon" type="image/png" href="/thumbgate-icon.png">
16
+ <script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.js"></script>
17
+ <script type="application/ld+json">
18
+ {
19
+ "@context": "https://schema.org",
20
+ "@type": "TechArticle",
21
+ "headline": "ThumbGate Architecture Diagrams",
22
+ "description": "System architecture, feedback pipeline, agent integration, and pre-action gate loop diagrams for the ThumbGate Reliability Gateway.",
23
+ "url": "https://thumbgate.ai/architecture",
24
+ "dateModified": "2026-07-29",
25
+ "author": { "@type": "Person", "name": "Igor Ganapolsky", "url": "https://github.com/IgorGanapolsky" }
26
+ }
27
+ </script>
28
+ <style>
29
+ :root {
30
+ --bg:#0b0f14; --panel:#111823; --border:#1e2a3a; --text:#e6edf3;
31
+ --muted:#8b98a5; --cyan:#39c5cf;
32
+ }
33
+ * { margin:0; padding:0; box-sizing:border-box; }
34
+ body { background:var(--bg); color:var(--text); font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; line-height:1.65; }
35
+ nav { padding:1rem 2rem; border-bottom:1px solid var(--border); display:flex; gap:1.25rem; flex-wrap:wrap; align-items:center; }
36
+ nav a { color:var(--muted); text-decoration:none; font-size:0.9rem; }
37
+ nav a:hover { color:var(--cyan); }
38
+ nav .brand { color:var(--text); font-weight:700; }
39
+ .container { max-width:980px; margin:0 auto; padding:2.5rem 1.5rem 4rem; }
40
+ h1 { font-size:2rem; margin-bottom:0.4rem; }
41
+ h2 { font-size:1.3rem; margin:2.4rem 0 0.75rem; color:var(--cyan); }
42
+ .subtitle { color:var(--muted); font-size:1.05rem; margin-bottom:1.5rem; }
43
+ figure { background:var(--panel); border:1px solid var(--border); border-radius:12px; padding:1rem; margin:1rem 0 1.75rem; }
44
+ figure img { width:100%; height:auto; display:block; border-radius:8px; background:#050816; }
45
+ figcaption { color:var(--muted); font-size:0.9rem; margin-top:0.75rem; }
46
+ .grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:1rem; margin:1.25rem 0; }
47
+ .card { background:var(--panel); border:1px solid var(--border); border-radius:10px; padding:1rem 1.1rem; }
48
+ .card h3 { font-size:1rem; margin-bottom:0.35rem; }
49
+ .card p { color:var(--muted); font-size:0.92rem; }
50
+ a.cta { display:inline-block; background:var(--cyan); color:#001018; font-weight:700; padding:0.7rem 1rem; border-radius:8px; text-decoration:none; margin:0.5rem 0.75rem 0.5rem 0; }
51
+ a.secondary { color:var(--cyan); }
52
+ .footer-note { color:var(--muted); font-size:0.85rem; margin-top:2.5rem; text-align:center; }
53
+ .footer-note a { color:var(--cyan); text-decoration:none; }
54
+ </style>
55
+ </head>
56
+ <body>
57
+ <nav>
58
+ <a class="brand" href="/">ThumbGate</a>
59
+ <a href="/whitepaper">White paper</a>
60
+ <a href="/architecture">Architecture</a>
61
+ <a href="/eval-scorecard">Scorecard</a>
62
+ <a href="/evaluations">Evaluations</a>
63
+ <a href="/case-studies">Case studies</a>
64
+ <a href="/numbers">Numbers</a>
65
+ <a href="/pricing">Pricing</a>
66
+ </nav>
67
+ <main class="container">
68
+ <h1>Architecture diagrams</h1>
69
+ <p class="subtitle">The same system diagrams that ship in the open-source README, published here so buyers and reviewers do not need GitHub to see how PreToolUse enforcement, feedback, and promotion fit together.</p>
70
+
71
+ <div class="grid">
72
+ <div class="card">
73
+ <h3>Local-first enforcement</h3>
74
+ <p>No LLM on the block/allow path. Deterministic rules first; local semantic recall only when needed.</p>
75
+ </div>
76
+ <div class="card">
77
+ <h3>Feedback β†’ rules</h3>
78
+ <p>Thumbs-down becomes a reviewable lesson, then a prevention rule that fires before the next tool call.</p>
79
+ </div>
80
+ <div class="card">
81
+ <h3>Multi-agent surface</h3>
82
+ <p>One gate layer across Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, and MCP.</p>
83
+ </div>
84
+ </div>
85
+
86
+ <h2>System architecture</h2>
87
+ <figure>
88
+ <img src="/assets/diagrams/thumbgate-architecture.png" alt="ThumbGate architecture: agent layer, hooks, MCP tools, gate engine, governance, security, feedback memory, and orchestration" width="1200" height="800" loading="eager">
89
+ <figcaption>Agents β†’ hooks β†’ MCP tools β†’ gate engine (match / verdict / reasoning / stats), with governance, secret scanning, feedback promotion, and orchestration around the decision path.</figcaption>
90
+ </figure>
91
+
92
+ <h2>Feedback pipeline (session 1 β†’ session 2)</h2>
93
+ <figure>
94
+ <img src="/assets/diagrams/feedback-pipeline.png" alt="Sequence diagram: agent mistake, thumbs-down capture, rule promotion, next session blocked" width="1200" height="700" loading="lazy">
95
+ <figcaption>Session 1 captures a thumbs-down; the lesson is promoted; session 2 blocks the repeat before execution.</figcaption>
96
+ </figure>
97
+
98
+ <h2>Pre-action gate loop</h2>
99
+ <figure>
100
+ <img src="/assets/diagrams/pre-action-gate-loop.svg" alt="Pre-action gate loop: capture, remember, rank, gate" width="900" height="400" loading="lazy">
101
+ <figcaption>Capture feedback β†’ remember locally β†’ rank and promote β†’ gate the next tool call.</figcaption>
102
+ </figure>
103
+
104
+ <h2>Agent integration</h2>
105
+ <figure>
106
+ <img src="/assets/diagrams/agent-integration.png" alt="ThumbGate agent integration map across coding agents and MCP" width="1200" height="700" loading="lazy">
107
+ <figcaption>How ThumbGate attaches to coding agents and MCP tool surfaces without putting a remote model on the enforcement path.</figcaption>
108
+ </figure>
109
+
110
+ <h2>Plugin topology</h2>
111
+ <figure>
112
+ <img src="/assets/diagrams/plugin-topology.png" alt="ThumbGate plugin topology across IDE and CLI surfaces" width="1200" height="700" loading="lazy">
113
+ <figcaption>Where plugins and marketplace packages sit relative to the local gate runtime.</figcaption>
114
+ </figure>
115
+
116
+ <h2>Related proof surfaces</h2>
117
+ <p>
118
+ <a class="cta" href="/whitepaper">How we know it works</a>
119
+ <a class="cta" href="/eval-scorecard">Eval scorecard</a>
120
+ <a class="secondary" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/diagrams/thumbgate_architecture.mmd">Mermaid sources on GitHub β†’</a>
121
+ </p>
122
+
123
+ <p class="footer-note">
124
+ Source diagrams live in <code>docs/diagrams/</code> and are mirrored here for production serving.
125
+ Also see <a href="/evaluations">ML evaluations</a> and
126
+ <a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md">verification evidence</a>.
127
+ </p>
128
+ </main>
129
+ </body>
130
+ </html>
@@ -0,0 +1,22 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 300" role="img" aria-labelledby="t d">
2
+ <title id="t">Before and after ThumbGate</title>
3
+ <desc id="d">Without ThumbGate the same mistake repeats. With ThumbGate one thumbs-down becomes a local pre-action gate that can refresh or expire.</desc>
4
+ <rect width="960" height="300" rx="24" fill="#0a0a0b"/>
5
+ <g font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif">
6
+ <!-- WITHOUT -->
7
+ <rect x="36" y="36" width="420" height="228" rx="22" fill="#1a1012" stroke="#f87171" stroke-width="2.5"/>
8
+ <text x="246" y="78" text-anchor="middle" fill="#f87171" font-size="16" font-weight="900" letter-spacing="1.5">WITHOUT THUMBGATE</text>
9
+ <text x="246" y="130" text-anchor="middle" fill="#f5f5f7" font-size="28" font-weight="800">πŸ”₯ force-push Β· bad shell</text>
10
+ <text x="246" y="172" text-anchor="middle" fill="#e5e7eb" font-size="18">You clean it up…</text>
11
+ <text x="246" y="204" text-anchor="middle" fill="#e5e7eb" font-size="18">…and the agent does it again.</text>
12
+ <text x="246" y="240" text-anchor="middle" fill="#9ca3af" font-size="14">time Γ— trust Γ— risk Γ— token burn</text>
13
+
14
+ <!-- WITH -->
15
+ <rect x="504" y="36" width="420" height="228" rx="22" fill="#0c1a14" stroke="#4ade80" stroke-width="2.5"/>
16
+ <text x="714" y="78" text-anchor="middle" fill="#4ade80" font-size="16" font-weight="900" letter-spacing="1.5">WITH THUMBGATE</text>
17
+ <text x="714" y="130" text-anchor="middle" fill="#f5f5f7" font-size="32" font-weight="900">πŸ‘Ž once</text>
18
+ <text x="714" y="172" text-anchor="middle" fill="#e5e7eb" font-size="18">Rule saved locally</text>
19
+ <text x="714" y="204" text-anchor="middle" fill="#e5e7eb" font-size="18">Next attempt is gated</text>
20
+ <text x="714" y="240" text-anchor="middle" fill="#9ca3af" font-size="14">one correction β†’ local gate (auto-promoted gates expire)</text>
21
+ </g>
22
+ </svg>
@@ -0,0 +1,36 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 300" role="img" aria-labelledby="t d">
2
+ <title id="t">Which ThumbGate path to pick</title>
3
+ <desc id="d">Free try, Pro solo, $499 diagnostic, sprint after intake.</desc>
4
+ <rect width="960" height="300" fill="#0a0a0b"/>
5
+ <g font-family="system-ui,sans-serif">
6
+ <text x="480" y="36" text-anchor="middle" fill="#f5f5f7" font-size="17" font-weight="800">Pick the path that matches the pain</text>
7
+ <!-- Free -->
8
+ <rect x="28" y="58" width="210" height="210" rx="16" fill="#161618" stroke="#333"/>
9
+ <text x="133" y="95" text-anchor="middle" fill="#9ca3af" font-size="12" font-weight="700">SOLO TRY</text>
10
+ <text x="133" y="130" text-anchor="middle" fill="#f5f5f7" font-size="22" font-weight="900">Free</text>
11
+ <text x="133" y="160" text-anchor="middle" fill="#9ca3af" font-size="13">npx thumbgate init</text>
12
+ <text x="133" y="190" text-anchor="middle" fill="#e5e7eb" font-size="13">Catch one repeat</text>
13
+ <text x="133" y="230" text-anchor="middle" fill="#4ade80" font-size="12" font-weight="700">prove it works</text>
14
+ <!-- Pro -->
15
+ <rect x="258" y="58" width="210" height="210" rx="16" fill="#07151a" stroke="#22d3ee" stroke-width="2"/>
16
+ <text x="363" y="95" text-anchor="middle" fill="#22d3ee" font-size="12" font-weight="700">SELF-SERVE</text>
17
+ <text x="363" y="130" text-anchor="middle" fill="#f5f5f7" font-size="22" font-weight="900">Pro $19/mo</text>
18
+ <text x="363" y="160" text-anchor="middle" fill="#9ca3af" font-size="13">Unlimited solo</text>
19
+ <text x="363" y="190" text-anchor="middle" fill="#e5e7eb" font-size="13">Dashboard Β· exports</text>
20
+ <text x="363" y="230" text-anchor="middle" fill="#22d3ee" font-size="12" font-weight="700">checkout today</text>
21
+ <!-- Diagnostic $499 - HIGHLIGHT -->
22
+ <rect x="488" y="58" width="220" height="210" rx="16" fill="#0d1b14" stroke="#4ade80" stroke-width="2.5"/>
23
+ <text x="598" y="95" text-anchor="middle" fill="#4ade80" font-size="12" font-weight="700">ONE WORKFLOW Β· PAY TODAY</text>
24
+ <text x="598" y="130" text-anchor="middle" fill="#f5f5f7" font-size="22" font-weight="900">$499</text>
25
+ <text x="598" y="160" text-anchor="middle" fill="#9ca3af" font-size="13">Diagnostic</text>
26
+ <text x="598" y="190" text-anchor="middle" fill="#e5e7eb" font-size="13">Map block / warn / review</text>
27
+ <text x="598" y="230" text-anchor="middle" fill="#4ade80" font-size="12" font-weight="700">not Enterprise</text>
28
+ <!-- Sprint -->
29
+ <rect x="728" y="58" width="204" height="210" rx="16" fill="#161618" stroke="#333"/>
30
+ <text x="830" y="95" text-anchor="middle" fill="#9ca3af" font-size="12" font-weight="700">IMPLEMENT</text>
31
+ <text x="830" y="130" text-anchor="middle" fill="#f5f5f7" font-size="22" font-weight="900">$1,500</text>
32
+ <text x="830" y="160" text-anchor="middle" fill="#9ca3af" font-size="13">Hardening Sprint</text>
33
+ <text x="830" y="190" text-anchor="middle" fill="#e5e7eb" font-size="13">Wire + prove gates</text>
34
+ <text x="830" y="230" text-anchor="middle" fill="#fbbf24" font-size="12" font-weight="700">after scope</text>
35
+ </g>
36
+ </svg>
@@ -0,0 +1,68 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 360" role="img" aria-labelledby="title desc">
2
+ <title id="title">ThumbGate: thumbs up and thumbs down become pre-action gates</title>
3
+ <desc id="desc">Two large thumbs icons feeding a gate that decides ALLOW, WARN, or DENY before an AI agent tool call runs.</desc>
4
+ <defs>
5
+ <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
6
+ <stop offset="0%" stop-color="#0a1018"/>
7
+ <stop offset="100%" stop-color="#111a28"/>
8
+ </linearGradient>
9
+ <linearGradient id="gate" x1="0" y1="0" x2="1" y2="1">
10
+ <stop offset="0%" stop-color="#22d3ee"/>
11
+ <stop offset="100%" stop-color="#4ade80"/>
12
+ </linearGradient>
13
+ <filter id="glow">
14
+ <feDropShadow dx="0" dy="0" stdDeviation="12" flood-color="#22d3ee" flood-opacity="0.35"/>
15
+ </filter>
16
+ <filter id="soft">
17
+ <feDropShadow dx="0" dy="10" stdDeviation="14" flood-color="#000" flood-opacity="0.4"/>
18
+ </filter>
19
+ </defs>
20
+ <rect width="640" height="360" rx="24" fill="url(#bg)"/>
21
+
22
+ <!-- Brand line -->
23
+ <text x="32" y="42" fill="#22d3ee" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="12" font-weight="800" letter-spacing="2">THUMBGATE</text>
24
+ <text x="32" y="68" fill="#f5f7fb" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="22" font-weight="800">Named for the signal. Built for the gate.</text>
25
+
26
+ <!-- Big thumbs up -->
27
+ <g filter="url(#soft)" transform="translate(48, 100)">
28
+ <rect width="150" height="190" rx="24" fill="#0d1f18" stroke="#4ade80" stroke-width="2.5"/>
29
+ <circle cx="75" cy="78" r="54" fill="#4ade80" opacity="0.12"/>
30
+ <g transform="translate(35, 35) scale(2.1)" fill="none" stroke="#4ade80" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round">
31
+ <path d="M7 22V13a2 2 0 0 1 2-2h2.5l3.2-7.2A2.5 2.5 0 0 1 17 2.5 3.5 3.5 0 0 1 20.5 6v5H28a3 3 0 0 1 3 3.4l-1.6 9A3 3 0 0 1 26.5 26H9a2 2 0 0 1-2-2z"/>
32
+ <path d="M7 13H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h3"/>
33
+ </g>
34
+ <text x="75" y="158" text-anchor="middle" fill="#4ade80" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="28" font-weight="900">πŸ‘</text>
35
+ <text x="75" y="182" text-anchor="middle" fill="#9db8ad" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13" font-weight="700">good pattern</text>
36
+ </g>
37
+
38
+ <!-- Big thumbs down -->
39
+ <g filter="url(#soft)" transform="translate(220, 100)">
40
+ <rect width="150" height="190" rx="24" fill="#1f1014" stroke="#ff6480" stroke-width="2.5"/>
41
+ <circle cx="75" cy="78" r="54" fill="#ff6480" opacity="0.12"/>
42
+ <g transform="translate(35, 40) scale(2.1)" fill="none" stroke="#ff6480" stroke-width="2.6" stroke-linecap="round" stroke-linejoin="round">
43
+ <path d="M7 2v9a2 2 0 0 0 2 2h2.5l3.2 7.2A2.5 2.5 0 0 0 17 21.5 3.5 3.5 0 0 0 20.5 18v-5H28a3 3 0 0 0 3-3.4l-1.6-9A3 3 0 0 0 26.5-2H9a2 2 0 0 0-2 2z" transform="translate(0 6)"/>
44
+ <path d="M7 11H4a2 2 0 0 1-2-2V0a2 2 0 0 1 2-2h3" transform="translate(0 6)"/>
45
+ </g>
46
+ <text x="75" y="158" text-anchor="middle" fill="#ff8a9a" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="28" font-weight="900">πŸ‘Ž</text>
47
+ <text x="75" y="182" text-anchor="middle" fill="#b899a0" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="13" font-weight="700">never again</text>
48
+ </g>
49
+
50
+ <!-- Arrow into gate -->
51
+ <path d="M385 195 H420" stroke="#22d3ee" stroke-width="4" stroke-linecap="round"/>
52
+ <path d="M410 185 L425 195 L410 205" fill="none" stroke="#22d3ee" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
53
+
54
+ <!-- Gate panel -->
55
+ <g filter="url(#glow)" transform="translate(440, 90)">
56
+ <rect width="168" height="210" rx="24" fill="#0c1622" stroke="url(#gate)" stroke-width="3"/>
57
+ <text x="84" y="42" text-anchor="middle" fill="#22d3ee" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="12" font-weight="800" letter-spacing="1.5">PRE-ACTION GATE</text>
58
+ <!-- mini shield / gate -->
59
+ <path d="M84 68 C64 76 56 88 56 108 C56 128 72 142 84 148 C96 142 112 128 112 108 C112 88 104 76 84 68 Z" fill="none" stroke="#8cf5d1" stroke-width="4"/>
60
+ <text x="84" y="118" text-anchor="middle" fill="#e7fbff" font-family="-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif" font-size="18" font-weight="900">TG</text>
61
+ <rect x="22" y="168" width="46" height="24" rx="12" fill="rgba(86,227,159,0.12)" stroke="#56e39f"/>
62
+ <text x="45" y="184" text-anchor="middle" fill="#56e39f" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="10" font-weight="800">ALLOW</text>
63
+ <rect x="74" y="168" width="42" height="24" rx="12" fill="rgba(255,209,102,0.12)" stroke="#ffd166"/>
64
+ <text x="95" y="184" text-anchor="middle" fill="#ffd166" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="10" font-weight="800">WARN</text>
65
+ <rect x="122" y="168" width="42" height="24" rx="12" fill="rgba(255,100,124,0.12)" stroke="#ff647c"/>
66
+ <text x="143" y="184" text-anchor="middle" fill="#ff647c" font-family="ui-monospace,SFMono-Regular,Menlo,monospace" font-size="10" font-weight="800">DENY</text>
67
+ </g>
68
+ </svg>