thumbgate 1.27.19 → 1.28.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.
- package/.claude/commands/dashboard.md +15 -0
- package/.claude/commands/thumbgate-blocked.md +27 -0
- package/.claude/commands/thumbgate-dashboard.md +15 -0
- package/.claude/commands/thumbgate-doctor.md +30 -0
- package/.claude/commands/thumbgate-guard.md +36 -0
- package/.claude/commands/thumbgate-protect.md +30 -0
- package/.claude/commands/thumbgate-rules.md +30 -0
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +63 -45
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/gcp/dfcx-webhook-gate.js +295 -0
- package/adapters/letta/README.md +41 -0
- package/adapters/letta/thumbgate-letta-adapter.js +133 -0
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/adapters/policy-engine/ethicore-guardian-client.js +68 -0
- package/adapters/policy-engine/thumbgate-policy-engine-adapter.js +260 -0
- package/bench/observability-eval-suite.json +26 -0
- package/bin/cli.js +52 -9
- package/bin/dashboard-cli.js +7 -0
- package/bin/postinstall.js +14 -23
- package/commands/dashboard.md +15 -0
- package/commands/thumbgate-dashboard.md +15 -0
- package/config/entitlement-public-keys.json +6 -0
- package/config/gates/default.json +1 -1
- package/config/github-about.json +2 -2
- package/config/merge-quality-checks.json +3 -0
- package/package.json +233 -100
- package/public/about.html +159 -0
- package/public/agent-manager.html +179 -0
- package/public/agents-cost-savings.html +153 -0
- package/public/ai-malpractice-prevention.html +818 -0
- package/public/assets/brand/github-social-preview.png +0 -0
- package/public/assets/brand/thumbgate-icon-512.png +0 -0
- package/public/assets/brand/thumbgate-icon-pro-512.png +0 -0
- package/public/assets/brand/thumbgate-icon-team-512.png +0 -0
- package/public/assets/brand/thumbgate-logo-1200x360.png +0 -0
- package/public/assets/brand/thumbgate-logo-transparent.svg +28 -0
- package/public/assets/brand/thumbgate-mark-inline-v3.svg +18 -0
- package/public/assets/brand/thumbgate-mark-pro.svg +23 -0
- package/public/assets/brand/thumbgate-mark-team.svg +26 -0
- package/public/assets/brand/thumbgate-mark.svg +21 -0
- package/public/assets/brand/thumbgate-wordmark.svg +20 -0
- package/public/assets/claude-thumbgate-statusbar.svg +8 -0
- package/public/assets/codex-thumbgate-statusbar-test.svg +9 -0
- package/public/assets/legal-intake-control-flow.svg +66 -0
- package/public/blog.html +12 -9
- package/public/brand/thumbgate-mark.svg +19 -0
- package/public/brand/thumbgate-og.svg +16 -0
- package/public/chatgpt-app.html +330 -0
- package/public/codex-enterprise.html +123 -0
- package/public/codex-plugin.html +5 -5
- package/public/compare.html +10 -10
- package/public/dashboard.html +1 -1
- package/public/diagnostic.html +345 -0
- package/public/federal.html +2 -2
- package/public/guide.html +14 -14
- package/public/index.html +81 -70
- package/public/install.html +193 -0
- package/public/js/buyer-intent.js +672 -0
- package/public/learn.html +4 -17
- package/public/numbers.html +2 -2
- package/public/pricing.html +392 -0
- package/public/pro.html +2 -2
- package/scripts/action-receipts.js +324 -0
- package/scripts/activation-quickstart.js +187 -0
- package/scripts/agent-operations-planner.js +621 -0
- package/scripts/agent-reward-model.js +13 -0
- package/scripts/ai-component-inventory.js +367 -0
- package/scripts/async-eval-observability.js +236 -0
- package/scripts/audit.js +65 -0
- package/scripts/aws-blocks-guardrails.js +272 -0
- package/scripts/bayes-optimal-gate.js +6 -1
- package/scripts/classifier-routing.js +130 -0
- package/scripts/cli-feedback.js +17 -1
- package/scripts/commercial-offer.js +3 -3
- package/scripts/dashboard-chat.js +332 -0
- package/scripts/entitlement.js +250 -0
- package/scripts/export-databricks-bundle.js +5 -0
- package/scripts/export-dpo-pairs.js +6 -0
- package/scripts/export-hf-dataset.js +5 -0
- package/scripts/feedback-aggregate.js +281 -0
- package/scripts/feedback-sanitizer.js +105 -0
- package/scripts/gates-engine.js +15 -3
- package/scripts/hook-stop-anti-claim.js +301 -0
- package/scripts/imperative-detector.js +85 -0
- package/scripts/install-shim.js +87 -0
- package/scripts/intervention-policy.js +13 -0
- package/scripts/mcp-oauth.js +293 -0
- package/scripts/noop-detect.js +285 -0
- package/scripts/parallel-workflow-orchestrator.js +293 -0
- package/scripts/plan-gate.js +243 -0
- package/scripts/plausible-domain-config.js +99 -0
- package/scripts/pr-manager.js +9 -22
- package/scripts/pro-local-dashboard.js +198 -0
- package/scripts/qa-scenario-planner.js +136 -0
- package/scripts/repeat-metric.js +137 -0
- package/scripts/risk-scorer.js +6 -0
- package/scripts/secret-fixture-tokens.js +61 -0
- package/scripts/secret-redaction.js +166 -0
- package/scripts/self-harness-optimizer.js +141 -0
- package/scripts/self-healing-check.js +193 -0
- package/scripts/self-protection.js +90 -0
- package/scripts/seo-gsd.js +2 -2
- package/scripts/silent-failure-cluster.js +531 -0
- package/scripts/statusline-cache-read.js +57 -0
- package/scripts/sync-telemetry-from-prod.js +374 -0
- package/scripts/thompson-sampling.js +11 -2
- package/scripts/tool-contract-validator.js +76 -0
- package/scripts/trajectory-scorer.js +63 -0
- package/scripts/verify-marketing-pages-deployed.js +212 -0
- package/scripts/visitor-journey.js +172 -0
- package/src/api/server.js +81 -10
- package/.claude-plugin/marketplace.json +0 -85
- package/adapters/chatgpt/openapi.yaml +0 -1707
|
@@ -0,0 +1,193 @@
|
|
|
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
|
+
__GOOGLE_SITE_VERIFICATION_META__
|
|
7
|
+
<title>Install ThumbGate | Live agent guardrails for Claude, Cursor, Codex, and VS Code</title>
|
|
8
|
+
<meta name="description" content="Install ThumbGate from npm, VS Code Marketplace, Open VSX, GitHub Release, or MCP Registry. See what is live now, what is pending, and when to buy the Workflow Hardening Diagnostic.">
|
|
9
|
+
<meta property="og:title" content="Install ThumbGate">
|
|
10
|
+
<meta property="og:description" content="Proof-backed install paths for ThumbGate agent guardrails, plus the paid diagnostic path for one repeated workflow failure.">
|
|
11
|
+
<meta property="og:type" content="website">
|
|
12
|
+
<meta property="og:url" content="__APP_ORIGIN__/install">
|
|
13
|
+
<meta property="og:image" content="/og.png">
|
|
14
|
+
<link rel="canonical" href="__APP_ORIGIN__/install">
|
|
15
|
+
<link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="__APP_ORIGIN__/llm-context.md">
|
|
16
|
+
<link rel="icon" type="image/png" href="/thumbgate-icon.png">
|
|
17
|
+
<link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg">
|
|
18
|
+
<script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.js"></script>
|
|
19
|
+
__GA_BOOTSTRAP__
|
|
20
|
+
<script type="application/ld+json">
|
|
21
|
+
{
|
|
22
|
+
"@context": "https://schema.org",
|
|
23
|
+
"@type": "SoftwareApplication",
|
|
24
|
+
"name": "ThumbGate",
|
|
25
|
+
"applicationCategory": "DeveloperApplication",
|
|
26
|
+
"operatingSystem": "macOS, Windows, Linux",
|
|
27
|
+
"softwareVersion": "1.27.20",
|
|
28
|
+
"description": "Local-first pre-action gates and feedback capture for AI coding agents.",
|
|
29
|
+
"url": "__APP_ORIGIN__/install",
|
|
30
|
+
"downloadUrl": "https://www.npmjs.com/package/thumbgate",
|
|
31
|
+
"offers": {
|
|
32
|
+
"@type": "Offer",
|
|
33
|
+
"price": "0",
|
|
34
|
+
"priceCurrency": "USD",
|
|
35
|
+
"availability": "https://schema.org/InStock"
|
|
36
|
+
},
|
|
37
|
+
"sameAs": [
|
|
38
|
+
"https://www.npmjs.com/package/thumbgate",
|
|
39
|
+
"https://open-vsx.org/extension/igorganapolsky/thumbgate",
|
|
40
|
+
"https://marketplace.visualstudio.com/items?itemName=igorganapolsky.thumbgate",
|
|
41
|
+
"https://github.com/IgorGanapolsky/ThumbGate/releases/tag/v1.27.20"
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
</script>
|
|
45
|
+
<style>
|
|
46
|
+
*, *::before, *::after { box-sizing: border-box; }
|
|
47
|
+
:root {
|
|
48
|
+
--bg: #090b0f;
|
|
49
|
+
--surface: #11151c;
|
|
50
|
+
--line: #27313d;
|
|
51
|
+
--text: #f1f5f9;
|
|
52
|
+
--muted: #9ba8b6;
|
|
53
|
+
--cyan: #22d3ee;
|
|
54
|
+
--green: #4ade80;
|
|
55
|
+
--amber: #fbbf24;
|
|
56
|
+
--red: #fb7185;
|
|
57
|
+
--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, Roboto, sans-serif;
|
|
58
|
+
}
|
|
59
|
+
body { margin: 0; font-family: var(--font); background: var(--bg); color: var(--text); line-height: 1.55; }
|
|
60
|
+
a { color: inherit; }
|
|
61
|
+
.container { max-width: 1120px; margin: 0 auto; padding: 0 24px; }
|
|
62
|
+
nav { border-bottom: 1px solid rgba(39, 49, 61, 0.9); background: rgba(9, 11, 15, 0.92); position: sticky; top: 0; z-index: 10; backdrop-filter: blur(12px); }
|
|
63
|
+
nav .container { min-height: 68px; display: flex; align-items: center; justify-content: space-between; gap: 18px; }
|
|
64
|
+
.brand { display: inline-flex; align-items: center; gap: 10px; text-decoration: none; font-weight: 900; }
|
|
65
|
+
.brand img { width: 28px; height: 28px; }
|
|
66
|
+
.brand span { color: var(--cyan); }
|
|
67
|
+
.nav-links { display: flex; gap: 16px; align-items: center; flex-wrap: wrap; }
|
|
68
|
+
.nav-links a { color: var(--muted); text-decoration: none; font-size: 13px; }
|
|
69
|
+
.nav-links a:hover { color: var(--text); }
|
|
70
|
+
.nav-cta, .btn-primary, .btn-secondary {
|
|
71
|
+
display: inline-flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
justify-content: center;
|
|
74
|
+
min-height: 44px;
|
|
75
|
+
border-radius: 8px;
|
|
76
|
+
padding: 0 18px;
|
|
77
|
+
font-weight: 800;
|
|
78
|
+
text-decoration: none;
|
|
79
|
+
border: 1px solid transparent;
|
|
80
|
+
}
|
|
81
|
+
.nav-cta, .btn-primary { background: var(--cyan); color: #06121a; }
|
|
82
|
+
.btn-secondary { background: rgba(17, 21, 28, 0.82); color: var(--text); border-color: var(--line); }
|
|
83
|
+
header { padding: 72px 0 44px; }
|
|
84
|
+
.eyebrow { display: inline-flex; padding: 7px 11px; border: 1px solid rgba(34, 211, 238, 0.28); border-radius: 999px; color: var(--cyan); background: rgba(34, 211, 238, 0.1); font-size: 12px; font-weight: 900; letter-spacing: 0.06em; text-transform: uppercase; }
|
|
85
|
+
h1 { margin: 18px 0 16px; max-width: 880px; font-size: clamp(36px, 6vw, 60px); line-height: 1.02; letter-spacing: -0.04em; }
|
|
86
|
+
.lede { margin: 0; max-width: 760px; color: var(--muted); font-size: 18px; }
|
|
87
|
+
.actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 26px; }
|
|
88
|
+
.proof-strip { margin-top: 28px; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; }
|
|
89
|
+
.proof { border: 1px solid var(--line); border-radius: 8px; background: var(--surface); padding: 13px; }
|
|
90
|
+
.proof strong { display: block; font-size: 14px; }
|
|
91
|
+
.proof span { display: block; margin-top: 3px; color: var(--muted); font-size: 12px; }
|
|
92
|
+
section { border-top: 1px solid var(--line); padding: 50px 0; }
|
|
93
|
+
h2 { margin: 0 0 12px; font-size: 30px; line-height: 1.12; letter-spacing: -0.03em; }
|
|
94
|
+
.section-lede { margin: 0 0 22px; max-width: 760px; color: var(--muted); }
|
|
95
|
+
.grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
|
|
96
|
+
.card { border: 1px solid var(--line); border-radius: 8px; background: var(--surface); padding: 18px; }
|
|
97
|
+
.card h3 { margin: 0 0 8px; color: var(--cyan); font-size: 17px; }
|
|
98
|
+
.card p { margin: 0 0 12px; color: var(--muted); font-size: 14px; }
|
|
99
|
+
.card a { color: var(--cyan); text-decoration: none; font-weight: 800; }
|
|
100
|
+
pre { margin: 10px 0 0; overflow-x: auto; border: 1px solid var(--line); border-radius: 8px; background: #05070a; padding: 12px; color: #d7f9ff; font-size: 13px; }
|
|
101
|
+
.status-list { display: grid; gap: 10px; }
|
|
102
|
+
.status { display: grid; grid-template-columns: 120px 1fr; gap: 14px; border: 1px solid var(--line); border-radius: 8px; background: var(--surface); padding: 14px; }
|
|
103
|
+
.badge { display: inline-flex; justify-content: center; align-items: center; height: 28px; border-radius: 999px; font-size: 12px; font-weight: 900; }
|
|
104
|
+
.live { color: #062112; background: var(--green); }
|
|
105
|
+
.pending { color: #251802; background: var(--amber); }
|
|
106
|
+
.blocked { color: #2b080f; background: var(--red); }
|
|
107
|
+
.status strong { display: block; }
|
|
108
|
+
.status span { color: var(--muted); font-size: 14px; }
|
|
109
|
+
.cta-band { border: 1px solid rgba(34, 211, 238, 0.32); border-radius: 8px; background: linear-gradient(180deg, rgba(34, 211, 238, 0.1), rgba(17, 21, 28, 0.95)); padding: 24px; }
|
|
110
|
+
.cta-band p { color: var(--muted); margin: 0 0 16px; max-width: 760px; }
|
|
111
|
+
footer { color: var(--muted); padding: 38px 0 70px; text-align: center; font-size: 13px; }
|
|
112
|
+
footer a { color: var(--cyan); text-decoration: none; }
|
|
113
|
+
@media (max-width: 820px) {
|
|
114
|
+
.proof-strip, .grid { grid-template-columns: 1fr; }
|
|
115
|
+
.status { grid-template-columns: 1fr; }
|
|
116
|
+
nav .container { align-items: flex-start; flex-direction: column; padding-top: 16px; padding-bottom: 16px; }
|
|
117
|
+
}
|
|
118
|
+
</style>
|
|
119
|
+
</head>
|
|
120
|
+
<body>
|
|
121
|
+
<nav>
|
|
122
|
+
<div class="container">
|
|
123
|
+
<a class="brand" href="/"><img src="/assets/brand/thumbgate-mark.svg" alt="" aria-hidden="true">Thumb<span>Gate</span></a>
|
|
124
|
+
<div class="nav-links">
|
|
125
|
+
<a href="/guide">Guide</a>
|
|
126
|
+
<a href="/learn">Learn</a>
|
|
127
|
+
<a href="/pricing">Pricing</a>
|
|
128
|
+
<a href="/diagnostic" class="nav-cta">Diagnostic</a>
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
</nav>
|
|
132
|
+
<header>
|
|
133
|
+
<div class="container">
|
|
134
|
+
<span class="eyebrow">Install paths verified for v1.27.20</span>
|
|
135
|
+
<h1>Install the agent guardrail before the next repeated mistake costs real money.</h1>
|
|
136
|
+
<p class="lede">ThumbGate is live on the surfaces developers already use: npm, VS Code Marketplace, Open VSX, GitHub Release assets, and MCP Registry. If the risky workflow is already customer-visible, start with the Workflow Hardening Diagnostic instead of another generic install.</p>
|
|
137
|
+
<div class="actions">
|
|
138
|
+
<a class="btn-primary" href="#install">Install now</a>
|
|
139
|
+
<a class="btn-secondary" href="/diagnostic?utm_source=install_page&utm_medium=owned_page&utm_campaign=marketplace_distribution">Harden one workflow</a>
|
|
140
|
+
</div>
|
|
141
|
+
<div class="proof-strip" aria-label="Verified live distribution surfaces">
|
|
142
|
+
<div class="proof"><strong>npm</strong><span>thumbgate@1.27.20</span></div>
|
|
143
|
+
<div class="proof"><strong>VS Code</strong><span>Marketplace version live</span></div>
|
|
144
|
+
<div class="proof"><strong>Open VSX</strong><span>Antigravity-compatible path</span></div>
|
|
145
|
+
<div class="proof"><strong>MCP Registry</strong><span>1.27.20 is latest</span></div>
|
|
146
|
+
<div class="proof"><strong>GitHub Release</strong><span>VSIX, MCPB, Codex zip</span></div>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
</header>
|
|
150
|
+
<section id="install">
|
|
151
|
+
<div class="container">
|
|
152
|
+
<h2>Choose the install path that matches your agent.</h2>
|
|
153
|
+
<p class="section-lede">Use the local CLI path for immediate enforcement. Use marketplace installs where your editor supports them. Use the diagnostic path when you need a human-reviewed gate map for one risky workflow.</p>
|
|
154
|
+
<div class="grid">
|
|
155
|
+
<article class="card"><h3>CLI and MCP-compatible agents</h3><p>Fastest path for Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, OpenCode, and local MCP-compatible agents.</p><pre><code>npx -y thumbgate@1.27.20 doctor
|
|
156
|
+
npx -y thumbgate@1.27.20 doctor --fix</code></pre></article>
|
|
157
|
+
<article class="card"><h3>Claude Desktop</h3><p>Use the npm-backed MCP server today. The Claude Desktop `.mcpb` directory submission packet is prepared separately.</p><pre><code>claude mcp add thumbgate -- npx --yes --package thumbgate thumbgate serve</code></pre></article>
|
|
158
|
+
<article class="card"><h3>Cursor</h3><p>The public Cursor Marketplace listing is not live yet. Use the CLI wiring while the dashboard submission is resolved.</p><pre><code>npx -y thumbgate@1.27.20 init --agent cursor</code></pre></article>
|
|
159
|
+
<article class="card"><h3>Codex</h3><p>Use the local adapter now. Public Codex self-serve plugin publishing is not open yet, so the GitHub Release asset is the distribution proof.</p><pre><code>npx -y thumbgate@1.27.20 init --agent codex</code></pre></article>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
</section>
|
|
163
|
+
<section>
|
|
164
|
+
<div class="container">
|
|
165
|
+
<h2>Verified public surfaces.</h2>
|
|
166
|
+
<p class="section-lede">These are the surfaces safe to claim in public copy right now. Pending surfaces are listed so buyers do not get sent to dead marketplace pages.</p>
|
|
167
|
+
<div class="status-list">
|
|
168
|
+
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://www.npmjs.com/package/thumbgate">npm package</a></strong><span>`thumbgate@1.27.20` is the canonical runtime install.</span></div></div>
|
|
169
|
+
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://marketplace.visualstudio.com/items?itemName=igorganapolsky.thumbgate">VS Code Marketplace</a></strong><span>Marketplace version-list API includes `1.27.20`.</span></div></div>
|
|
170
|
+
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://open-vsx.org/extension/igorganapolsky/thumbgate">Open VSX</a></strong><span>Public registry latest version is `1.27.20`; use this path for VS Code-compatible IDEs that consume Open VSX.</span></div></div>
|
|
171
|
+
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://registry.modelcontextprotocol.io/v0/servers?search=thumbgate">MCP Registry</a></strong><span>Public search returns `io.github.IgorGanapolsky/thumbgate` version `1.27.20` as latest.</span></div></div>
|
|
172
|
+
<div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://github.com/IgorGanapolsky/ThumbGate/releases/tag/v1.27.20">GitHub Release</a></strong><span>Includes VSIX, Claude Desktop `.mcpb`, Claude review zip, and Codex plugin zip assets.</span></div></div>
|
|
173
|
+
<div class="status"><span class="badge pending">PENDING</span><div><strong>Claude Desktop directory</strong><span>Official MCPB form is reachable; submission needs account/email/file-upload approval.</span></div></div>
|
|
174
|
+
<div class="status"><span class="badge blocked">BLOCKED</span><div><strong>Cursor public Marketplace</strong><span>Public listing returns "Marketplace Plugin Not Found"; dashboard requires sign-in to inspect or resubmit.</span></div></div>
|
|
175
|
+
<div class="status"><span class="badge pending">PENDING</span><div><strong>Codex public directory</strong><span>OpenAI docs say public plugin publishing and self-serve management are coming soon.</span></div></div>
|
|
176
|
+
</div>
|
|
177
|
+
</div>
|
|
178
|
+
</section>
|
|
179
|
+
<section>
|
|
180
|
+
<div class="container">
|
|
181
|
+
<div class="cta-band">
|
|
182
|
+
<h2>When install is not enough, buy the diagnostic.</h2>
|
|
183
|
+
<p>If one AI-agent workflow already touches customers, money, production, outbound messages, browser automation, or deploy approvals, a generic install is not enough. The Workflow Hardening Diagnostic maps the repeated failure, the block/warn/human-review split, and the proof receipt that should exist before the action runs.</p>
|
|
184
|
+
<div class="actions">
|
|
185
|
+
<a class="btn-primary" href="/diagnostic?utm_source=install_page&utm_medium=owned_page&utm_campaign=workflow_hardening_diagnostic">Start the $499 diagnostic</a>
|
|
186
|
+
<a class="btn-secondary" href="/guide">Read the setup guide</a>
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
</section>
|
|
191
|
+
<footer><div class="container"><p>Commercial claims stay pinned to <a href="/llm-context.md">LLM context</a>, <a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/COMMERCIAL_TRUTH.md">commercial truth</a>, and <a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md">verification evidence</a>.</p></div></footer>
|
|
192
|
+
</body>
|
|
193
|
+
</html>
|