thumbgate 1.28.3 → 1.29.1
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-plugin/plugin.json +1 -1
- package/.well-known/llms.txt +18 -10
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +5 -2
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/forge/forge.yaml +3 -3
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/bin/cli.js +8 -8
- package/bin/postinstall.js +4 -13
- package/config/github-about.json +5 -4
- package/config/post-deploy-marketing-pages.json +6 -6
- package/docs/integrations/grafana/README.md +109 -0
- package/docs/integrations/grafana/thumbgate-revenue-evidence-dashboard.json +1930 -0
- package/openapi/openapi.yaml +240 -5
- package/package.json +59 -19
- package/public/agent-manager.html +10 -11
- package/public/agents-cost-savings.html +2 -2
- package/public/assets/brand/thumbgate-logo-transparent.svg +6 -11
- package/public/assets/brand/thumbgate-mark-inline-v3.svg +11 -10
- package/public/assets/brand/thumbgate-mark.svg +10 -11
- package/public/blog/inside-your-boundary.html +114 -0
- package/public/blog/process-over-outcome-gates.html +119 -0
- package/public/blog.html +296 -402
- package/public/brand/thumbgate-mark.svg +5 -9
- package/public/codex-enterprise.html +2 -2
- package/public/compare.html +12 -3
- package/public/diagnostic.html +79 -29
- package/public/guide.html +4 -4
- package/public/index.html +1088 -2098
- package/public/install.html +3 -3
- package/public/js/buyer-intent.js +33 -18
- package/public/numbers.html +2 -2
- package/public/pricing.html +268 -408
- package/public/pro.html +4 -4
- package/scripts/billing.js +456 -126
- package/scripts/buyer-paths.js +102 -0
- package/scripts/cli-feedback.js +5 -3
- package/scripts/commercial-offer.js +18 -10
- package/scripts/external-customer-audit.js +881 -0
- package/scripts/feedback-loop.js +49 -15
- package/scripts/gates-engine.js +123 -1
- package/scripts/grafana-revenue-evidence.js +856 -0
- package/scripts/jsonl-window.js +89 -0
- package/scripts/lesson-embedding-index.js +3 -7
- package/scripts/meta-agent-loop.js +20 -2
- package/scripts/observability-env.js +139 -0
- package/scripts/observability-setup.js +55 -0
- package/scripts/plausible-domain-config.js +4 -0
- package/scripts/provider-live-evidence.js +1290 -0
- package/scripts/provider-payment-reconciler.js +442 -0
- package/scripts/provider-revenue-evidence.js +249 -0
- package/scripts/rate-limiter.js +1 -5
- package/scripts/revenue-action-eligibility.js +414 -0
- package/scripts/revenue-evidence-remediation.js +694 -0
- package/scripts/revenue-offer-system.js +709 -0
- package/scripts/sales-pipeline.js +1117 -0
- package/scripts/seo-gsd.js +8 -4
- package/scripts/stripe-credentials.js +37 -0
- package/scripts/stripe-revenue-catalog-audit.js +363 -0
- package/scripts/stripe-revenue-catalog.js +164 -0
- package/scripts/telemetry-analytics.js +23 -3
- package/scripts/vector-store.js +83 -7
- package/scripts/workflow-intake-queue.js +483 -0
- package/scripts/workflow-sentinel.js +4 -2
- package/src/api/server.js +521 -114
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
3
|
"description": "One 👎 becomes a hard rule the agent cannot bypass. Captures thumbs-down feedback, distills it into PreToolUse Pre-Action Checks, enforced across every future Claude Code session.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.29.1",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky",
|
|
7
7
|
"email": "ig5973700@gmail.com",
|
package/.well-known/llms.txt
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
# ThumbGate —
|
|
1
|
+
# ThumbGate — Self-Improving Firewall for Your AI Agents
|
|
2
2
|
# https://thumbgate.ai
|
|
3
3
|
# https://github.com/IgorGanapolsky/ThumbGate
|
|
4
4
|
# https://www.npmjs.com/package/thumbgate
|
|
5
5
|
|
|
6
|
-
> ThumbGate
|
|
7
|
-
> risky commands, file edits, deploys, payments,
|
|
8
|
-
> actions before execution.
|
|
9
|
-
>
|
|
6
|
+
> ThumbGate is the self-improving firewall that prevents expensive AI mistakes
|
|
7
|
+
> before they happen. It checks risky commands, file edits, deploys, payments,
|
|
8
|
+
> API calls, and other agent actions before execution. Explicit feedback becomes
|
|
9
|
+
> reviewable local lessons; relevant lessons are re-ranked for each proposed
|
|
10
|
+
> action; repeated negative patterns can promote from warning to blocking gates;
|
|
11
|
+
> stale auto-promoted gates expire; and stale lessons archive. ThumbGate improves
|
|
12
|
+
> the external control layer without changing model weights.
|
|
13
|
+
|
|
14
|
+
## Store story
|
|
15
|
+
|
|
16
|
+
ThumbGate: the self-improving firewall for AI agents. Every approval teaches it what to allow, block, or escalate next time. Self-improving under your control—not silent policy rewrite. Hermes Mobile is the control surface; ThumbGate is the learning safety layer inside it.
|
|
10
17
|
|
|
11
18
|
## What ThumbGate solves
|
|
12
19
|
|
|
@@ -19,11 +26,12 @@
|
|
|
19
26
|
|
|
20
27
|
## How it works
|
|
21
28
|
|
|
22
|
-
1.
|
|
23
|
-
2. ThumbGate
|
|
24
|
-
3.
|
|
25
|
-
4.
|
|
26
|
-
5.
|
|
29
|
+
1. A developer records explicit feedback with the action and outcome context
|
|
30
|
+
2. ThumbGate stores the feedback as a reviewable local lesson
|
|
31
|
+
3. Relevant lessons are re-ranked for the proposed action
|
|
32
|
+
4. Repeated negative patterns can promote from warning to blocking gates
|
|
33
|
+
5. PreToolUse hooks return allow, warn, or deny before the next matching action
|
|
34
|
+
6. Stale auto-promoted gates expire and stale lessons archive
|
|
27
35
|
|
|
28
36
|
## Agentic development cycle fit
|
|
29
37
|
|
package/README.md
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
</a>
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
|
-
**AI coding agents repeat mistakes — and one wrong tool call can wipe a directory, leak a key, or push broken code
|
|
9
|
+
**Self-Improving Firewall for Your AI Agents.** AI coding agents repeat mistakes — and one wrong tool call can wipe a directory, leak a key, or push broken code.
|
|
10
10
|
|
|
11
11
|
ThumbGate is the local-first Pre-Action Checks engine for AI coding agents. It runs in the PreToolUse hook on your machine: it evaluates a proposed tool call and logs the decision before tool execution. It **hard-blocks detected secret leaks and two direct self-disable command classes by default** — commands that terminate the ThumbGate gate process or enable its bypass environment override. Other high-risk classes, including destructive deletes (`rm -rf`), force-push, fetch-and-run, direct guardrail-file edits, off-scope edits, and deploys, **warn and log by default**. Set `THUMBGATE_STRICT_ENFORCEMENT=1` to preserve deny decisions for every matched blocking rule. Works across configured Claude Code, Cursor, Codex, Gemini, Amp, Cline, and OpenCode integrations. No server is required on the local enforcement path. (Regulated-industry policy templates are roadmap directions, not shipped compliance claims.)
|
|
12
12
|
|
|
13
|
-
Accepted feedback is stored as local lessons. Repeated concrete failures can become prevention rules that
|
|
13
|
+
Accepted feedback is stored as local lessons. Repeated concrete failures can become prevention rules that promote from warnings to blocking gates; relevant lessons are re-ranked for each proposed action; stale auto-promoted gates expire; and stale lessons archive. The firewall improves from operations without retraining the model.
|
|
14
14
|
|
|
15
15
|
<p align="center">
|
|
16
16
|
<img src="docs/media/thumbgate-demo.gif" alt="ThumbGate gating an AI agent's dangerous commands (rm -rf, force-push, chmod 777) in real time — flagging them by default and hard-blocking under strict mode, while letting safe commands through" width="820" />
|
|
@@ -561,6 +561,7 @@ Every Changeset is tied to the exact `main` merge commit and generates Verificat
|
|
|
561
561
|
- **[Perplexity Command Center](docs/PERPLEXITY_MAX_COMMAND_CENTER.md)** — AI-search visibility + lead discovery
|
|
562
562
|
- **[ThumbGate Bench](docs/THUMBGATE_BENCH.md)** — Reliability benchmark and ProgramBench-style cleanroom proof lane
|
|
563
563
|
- **[Manus AI Skill](skills/thumbgate/SKILL.md)** — ThumbGate integration for Manus AI agents
|
|
564
|
+
- **Grafana Cloud revenue evidence** — The npm package includes a PII-free aggregate exporter and importable Loki dashboard. Generate the dashboard locally with `thumbgate-revenue-evidence --dashboard --out thumbgate-revenue-evidence-dashboard.json`. Snapshot preparation is dry-run by default; network delivery requires both `--send` and `THUMBGATE_GRAFANA_ZERO_SPEND_CONFIRMED=1`. Dashboard observations never promote clicks, checkout starts, or intakes into payment or customer claims. Repository operators can use the full [Grafana integration guide](docs/integrations/grafana/README.md).
|
|
564
565
|
|
|
565
566
|
---
|
|
566
567
|
|
|
@@ -626,6 +627,8 @@ Pro ($19/mo or $149/yr) is for individual operators and adds history-aware lesso
|
|
|
626
627
|
- [**ThumbGate for Federal Agencies**](docs/FEDERAL.md) — pilot-ready posture, NIST 800-53 control mapping, OMB M-24-10 / EO 14110 alignment. Landing page: [thumbgate.ai/federal](https://thumbgate.ai/federal).
|
|
627
628
|
- [First Dollar Playbook](docs/FIRST_DOLLAR_PLAYBOOK.md) — turning one painful workflow into the next booked pilot
|
|
628
629
|
- [Commercial Truth](docs/COMMERCIAL_TRUTH.md) — pricing, claims, what we don't say
|
|
630
|
+
- [Sales Pipeline Evidence Contract](docs/SALES_PIPELINE_EVIDENCE.md) — stage-specific receipts, audits, and verified-revenue rules
|
|
631
|
+
- [Revenue Offer Ladder](docs/REVENUE_OFFER_LADDER.md) — productized diagnostic, sprint, recurring, and Enterprise economics without traction inflation
|
|
629
632
|
- [Goal Contracts](docs/GOAL_CONTRACTS.md) — evidence-before-done contracts for multi-agent handoffs
|
|
630
633
|
- [Changeset Strategy](docs/CHANGESET_STRATEGY.md) — release notes and version bump enforcement
|
|
631
634
|
- [Release Confidence](docs/RELEASE_CONFIDENCE.md) — changesets, version checks, proof lanes
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"thumbgate": {
|
|
4
4
|
"command": "npx",
|
|
5
|
-
"args": ["--yes", "--package", "thumbgate@1.
|
|
5
|
+
"args": ["--yes", "--package", "thumbgate@1.29.1", "thumbgate", "serve"]
|
|
6
6
|
}
|
|
7
7
|
},
|
|
8
8
|
"hooks": {
|
|
9
9
|
"preToolUse": {
|
|
10
10
|
"command": "npx",
|
|
11
|
-
"args": ["--yes", "--package", "thumbgate@1.
|
|
11
|
+
"args": ["--yes", "--package", "thumbgate@1.29.1", "thumbgate", "gate-check"]
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -9,12 +9,12 @@ version: "1"
|
|
|
9
9
|
skills:
|
|
10
10
|
thumbgate-gate-check:
|
|
11
11
|
description: "ThumbGate PreToolUse gate — blocks known-bad tool calls"
|
|
12
|
-
command: "npx --yes --package thumbgate@
|
|
12
|
+
command: "npx --yes --package thumbgate@1.29.1 thumbgate gate-check"
|
|
13
13
|
trigger: pre_tool_use
|
|
14
14
|
|
|
15
15
|
thumbgate-feedback:
|
|
16
16
|
description: "ThumbGate feedback capture — logs user prompt context"
|
|
17
|
-
command: "npx --yes --package thumbgate@
|
|
17
|
+
command: "npx --yes --package thumbgate@1.29.1 thumbgate hook-auto-capture"
|
|
18
18
|
trigger: user_prompt
|
|
19
19
|
|
|
20
20
|
mcp:
|
|
@@ -23,6 +23,6 @@ mcp:
|
|
|
23
23
|
args:
|
|
24
24
|
- "--yes"
|
|
25
25
|
- "--package"
|
|
26
|
-
- "thumbgate@
|
|
26
|
+
- "thumbgate@1.29.1"
|
|
27
27
|
- "thumbgate"
|
|
28
28
|
- "serve"
|
|
@@ -305,7 +305,7 @@ const {
|
|
|
305
305
|
finalizeSession: finalizeFeedbackSession,
|
|
306
306
|
} = require('../../scripts/feedback-session');
|
|
307
307
|
|
|
308
|
-
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.
|
|
308
|
+
const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.29.1' };
|
|
309
309
|
const COMMERCE_CATEGORIES = [
|
|
310
310
|
'product_recommendation',
|
|
311
311
|
'brand_compliance',
|
package/bin/cli.js
CHANGED
|
@@ -131,7 +131,7 @@ function upgradeNudge() {
|
|
|
131
131
|
const pricingUrl = pricingUrlFor('cli_upgrade_nudge', COMMAND || 'general');
|
|
132
132
|
const diagnosticUrl = diagnosticUrlFor('cli_upgrade_nudge', COMMAND || 'general');
|
|
133
133
|
process.stderr.write(
|
|
134
|
-
'\n
|
|
134
|
+
'\n Enterprise entry: $499 Enterprise Workflow Gate for one workflow\n' +
|
|
135
135
|
` ${diagnosticUrl}\n` +
|
|
136
136
|
`\n Solo side lane: Pro — ${PRO_PRICE_LABEL}\n` +
|
|
137
137
|
' Removes solo caps; adds personal recall, dashboard proof, exports, and managed adapters.\n' +
|
|
@@ -143,8 +143,8 @@ function diagnostic() {
|
|
|
143
143
|
const intakeUrl = diagnosticUrlFor('cli_diagnostic', COMMAND || 'diagnostic');
|
|
144
144
|
const checkoutUrl = diagnosticCheckoutUrlFor('cli_diagnostic', COMMAND || 'diagnostic');
|
|
145
145
|
console.log('');
|
|
146
|
-
console.log(' ThumbGate Workflow
|
|
147
|
-
console.log('
|
|
146
|
+
console.log(' ThumbGate Enterprise Workflow Gate — $499');
|
|
147
|
+
console.log(' ------------------------------------------');
|
|
148
148
|
console.log(' Use this when one repeated AI-agent workflow failure is already costing');
|
|
149
149
|
console.log(' review time, release confidence, customer trust, or money.');
|
|
150
150
|
console.log('');
|
|
@@ -1500,8 +1500,8 @@ function stats() {
|
|
|
1500
1500
|
console.log(` Repeated Failures detected: ${payload.negatives}`);
|
|
1501
1501
|
console.log(` Estimated Operational Loss: $${payload.revenueAtRisk}`);
|
|
1502
1502
|
console.log(' Action Required: Run "npx thumbgate rules" to generate guardrails.');
|
|
1503
|
-
console.log(' Strategic Recommendation: if this is a shared workflow problem, start the Workflow
|
|
1504
|
-
console.log('
|
|
1503
|
+
console.log(' Strategic Recommendation: if this is a shared workflow problem, start with the $499 Enterprise Workflow Gate.');
|
|
1504
|
+
console.log(' Enterprise entry: https://thumbgate.ai/pricing');
|
|
1505
1505
|
console.log(' Solo side lane: npx thumbgate pro');
|
|
1506
1506
|
} else {
|
|
1507
1507
|
console.log('\n✅ System is currently high-reliability. No immediate revenue loss detected.');
|
|
@@ -1629,7 +1629,7 @@ function pro() {
|
|
|
1629
1629
|
console.log(' - Personal recall: search lessons, rules, and proof');
|
|
1630
1630
|
console.log(' - Local Pro dashboard: your own browser dashboard for search, gates, and DPO export');
|
|
1631
1631
|
console.log(' - Managed adapters: Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode');
|
|
1632
|
-
console.log(' -
|
|
1632
|
+
console.log(' - Enterprise Workflow Gate: $499 for one supported workflow; hosted team sync and org dashboard are not GA');
|
|
1633
1633
|
console.log(' - Commercial truth doc: source of truth for traction, pricing, and proof claims');
|
|
1634
1634
|
console.log('\nLinks:');
|
|
1635
1635
|
console.log(` Buy Pro : ${PRO_CHECKOUT_URL}`);
|
|
@@ -3144,7 +3144,7 @@ function help() {
|
|
|
3144
3144
|
console.log(' break-glass --reason="..." Short TTL recovery if gates over-fire');
|
|
3145
3145
|
console.log(' brain [--write] Build the agent-readable context brain (lessons + rules + gates)');
|
|
3146
3146
|
console.log(' pro ThumbGate Pro (dashboard, exports, sync)');
|
|
3147
|
-
console.log(' diagnostic $499 Workflow
|
|
3147
|
+
console.log(' diagnostic $499 Enterprise Workflow Gate for one repeated team failure');
|
|
3148
3148
|
console.log(' subscribe <email> Get the 5-min setup guide + weekly tips by email');
|
|
3149
3149
|
console.log('');
|
|
3150
3150
|
console.log('More:');
|
|
@@ -3289,7 +3289,7 @@ const SUBCOMMAND_HELP = {
|
|
|
3289
3289
|
stats: 'Usage: npx thumbgate stats\n\nShow gate enforcement statistics: blocked/warned counts, active gates, time saved.',
|
|
3290
3290
|
trial: 'Usage: npx thumbgate trial\n\nShow Pro trial status, remaining days, and upgrade path.',
|
|
3291
3291
|
pro: 'Usage: npx thumbgate pro [--activate <key>]\n\nLaunch the local Pro dashboard or activate a Pro license key.',
|
|
3292
|
-
diagnostic: 'Usage: npx thumbgate diagnostic\n\nShow the $499 Workflow
|
|
3292
|
+
diagnostic: 'Usage: npx thumbgate diagnostic\n\nShow the $499 Enterprise Workflow Gate fit-check and checkout paths for teams with one repeated AI-agent workflow failure.',
|
|
3293
3293
|
subscribe: 'Usage: npx thumbgate subscribe <email>\n\nSubscribe to the 5-minute setup guide + trial reminders.',
|
|
3294
3294
|
lessons: 'Usage: npx thumbgate lessons [--query="..."] [--limit=N]\n\nSearch the lesson database (Pro feature).',
|
|
3295
3295
|
search: 'Usage: npx thumbgate search <query>\n\nSearch ThumbGate knowledge base (Pro feature).',
|
package/bin/postinstall.js
CHANGED
|
@@ -12,27 +12,18 @@ const isQuiet = process.env.THUMBGATE_NO_NUDGE === '1' || process.env.npm_config
|
|
|
12
12
|
|
|
13
13
|
if (isCI || isQuiet) process.exit(0);
|
|
14
14
|
|
|
15
|
-
const {
|
|
16
|
-
PRO_MONTHLY_PAYMENT_LINK,
|
|
17
|
-
PRO_PRICE_LABEL,
|
|
18
|
-
TEAM_PRICE_LABEL,
|
|
19
|
-
} = require('../scripts/commercial-offer');
|
|
20
|
-
|
|
21
|
-
// Tracked click-through path: /go/pro → /checkout/pro → Stripe.
|
|
22
|
-
// This captures UTM attribution in our funnel before handing off to Stripe.
|
|
23
|
-
const PRO_CTA_URL = 'https://thumbgate.ai/go/pro?utm_source=npm&utm_medium=postinstall&utm_campaign=first_dollar';
|
|
24
|
-
const WORKFLOW_SPRINT_URL = 'https://thumbgate.ai/#workflow-sprint-intake';
|
|
25
15
|
const DASHBOARD_URL = 'https://thumbgate.ai/dashboard?utm_source=npm&utm_medium=postinstall&utm_campaign=dashboard_nudge';
|
|
16
|
+
const MANAGED_GATE_URL = 'https://thumbgate.ai/diagnostic?utm_source=npm&utm_medium=postinstall&utm_campaign=managed_workflow_gate';
|
|
26
17
|
|
|
27
18
|
process.stderr.write(`
|
|
28
19
|
╭─────────────────────────────────────────────────────╮
|
|
29
|
-
│ ThumbGate installed —
|
|
20
|
+
│ ThumbGate installed — full features for 7 days. │
|
|
30
21
|
│ │
|
|
31
22
|
│ Start now: npx thumbgate init │
|
|
32
23
|
│ Updates: npx thumbgate subscribe you@company.com│
|
|
33
24
|
│ │
|
|
34
25
|
│ Free after trial: 3 rules, 2 captures/day. │
|
|
35
|
-
│
|
|
26
|
+
│ Need a hard gate built for you? $499 one-time. │
|
|
36
27
|
╰─────────────────────────────────────────────────────╯
|
|
37
28
|
|
|
38
29
|
Trial unlocks: unlimited rules, lesson search, DPO export,
|
|
@@ -41,6 +32,6 @@ process.stderr.write(`
|
|
|
41
32
|
npx thumbgate subscribe you@company.com
|
|
42
33
|
|
|
43
34
|
Dashboard: ${DASHBOARD_URL}
|
|
44
|
-
|
|
35
|
+
Managed workflow gate: ${MANAGED_GATE_URL}
|
|
45
36
|
|
|
46
37
|
`);
|
package/config/github-about.json
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
"repo": "IgorGanapolsky/ThumbGate",
|
|
3
3
|
"repositoryUrl": "https://github.com/IgorGanapolsky/ThumbGate",
|
|
4
4
|
"homepageUrl": "https://thumbgate.ai",
|
|
5
|
-
"githubDescription": "ThumbGate Pre-Action Checks
|
|
6
|
-
"metaDescription": "ThumbGate is the local pre-action governance runtime for AI coding agents (Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, OpenCode): accepted 👍 thumbs-up and 👎 thumbs-down feedback becomes history-aware local lessons; repeated failures can become prevention rules. PreToolUse checks flag and log risky tool calls, hard-block detected secret leaks, and block matching actions in strict mode. Pro is for individual operators; Enterprise rollout is scoped after intake.",
|
|
5
|
+
"githubDescription": "ThumbGate Pre-Action Checks self-improve from ranked lessons and repeated failures, hard-block detected secret leaks, and block matches in strict mode.",
|
|
7
6
|
"topics": [
|
|
8
7
|
"thumbgate",
|
|
9
8
|
"pre-action-checks",
|
|
@@ -21,6 +20,8 @@
|
|
|
21
20
|
"gemini",
|
|
22
21
|
"amp",
|
|
23
22
|
"opencode",
|
|
24
|
-
"thompson-sampling"
|
|
25
|
-
|
|
23
|
+
"thompson-sampling",
|
|
24
|
+
"self-improving-agents"
|
|
25
|
+
],
|
|
26
|
+
"metaDescription": "Stop AI agent mistakes before they cost you. Self-serve is $19/mo; the $499 Diagnostic installs one hard, test-backed safety gate for a supported AI-agent workflow in two business days."
|
|
26
27
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"pages": [
|
|
5
5
|
{
|
|
6
6
|
"route": "/",
|
|
7
|
-
"sentinel": "
|
|
7
|
+
"sentinel": "Stop AI agent mistakes before they cost you",
|
|
8
8
|
"description": "Home page hero (lifeblood — never regress)"
|
|
9
9
|
},
|
|
10
10
|
{
|
|
@@ -14,17 +14,17 @@
|
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
"route": "/checkout/pro",
|
|
17
|
-
"sentinel": "
|
|
17
|
+
"sentinel": "Required so the checkout has attributable buyer intent and your receipt can be recovered.",
|
|
18
18
|
"mustNotContain": [
|
|
19
|
-
"
|
|
19
|
+
"Optional. Stripe can collect your email on the secure checkout page."
|
|
20
20
|
],
|
|
21
21
|
"userAgent": "curl/8.0.0",
|
|
22
|
-
"description": "Pro checkout interstitial must
|
|
22
|
+
"description": "Pro checkout interstitial must require attributable buyer email before Stripe"
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
"route": "/diagnostic",
|
|
26
|
-
"sentinel": "Workflow
|
|
27
|
-
"description": "
|
|
26
|
+
"sentinel": "Enterprise Workflow Gate",
|
|
27
|
+
"description": "Managed gate checkout and fit-check page for high-intent warm traffic"
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
"route": "/dashboard",
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Grafana Cloud revenue evidence
|
|
2
|
+
|
|
3
|
+
ThumbGate can prepare a PII-free revenue-control snapshot for Grafana Cloud Logs and an importable dashboard. The integration is dry-run by default and does not make a network request unless `--send` is present.
|
|
4
|
+
|
|
5
|
+
## Evidence model
|
|
6
|
+
|
|
7
|
+
- Payment and booked-revenue panels come only from the provider-aware revenue target controller.
|
|
8
|
+
- A Stripe charge reaches those panels only after the live Stripe audit reconciles its external payer, paid Checkout Session, ThumbGate-only line items, and refund-adjusted net amount; `sales:reconcile-payment -- --provider stripe` then records the provider proof in the canonical sales pipeline before a fresh target-control snapshot is generated.
|
|
9
|
+
- Stripe attribution is bound to the versioned exact-offer catalog: immutable price ID, product ID, integer amount, currency, cadence, and interval. Product names are not evidence. The separate read-only catalog audit also checks live/test mode, price and product active states, and the exact public Payment Link URL plus single-offer mapping.
|
|
10
|
+
- Grafana receives only the catalog version and aggregate expected, verified, and drift counts. It never receives the price/product rows or public checkout URLs. A clean catalog proves checkout configuration, not a purchase.
|
|
11
|
+
- Funnel panels are labeled **observed**. Page views, CTA clicks, checkout starts, and intakes do not prove a payment or customer.
|
|
12
|
+
- `observedDiagnosticCheckoutStarts` counts only a valid email-backed POST that the server accepts immediately before issuing the external diagnostic Payment Link redirect. It is stronger than a page click but still is not payment evidence.
|
|
13
|
+
- `completeWorkflowSprintIntakes` means the required form fields are present.
|
|
14
|
+
- A workflow lead is lifecycle-qualified only when its stored status is `qualified`, `named_pilot`, `proof_backed_run`, or `paid_team`.
|
|
15
|
+
- `observedIntakeCloseQueueAvailable` distinguishes an attached, authenticated operator queue from a missing queue. `observedApprovalReadyIntakeCount` is the aggregate count of reviewed intakes whose close packet passed the evidence gates. `observedDiscoveryReadyIntakeCount` is the aggregate count of new intakes with a bounded discovery reply awaiting approval. Neither counter authorizes outreach, proves buyer intent, or proves payment.
|
|
16
|
+
- Buyer identity, raw lead rows, customer rows, email addresses, and arbitrary metadata are never copied into the Grafana snapshot.
|
|
17
|
+
- Close-packet drafts, approval tokens, checkout URLs, and primary actions are also excluded; Grafana is a wake-up signal, while the authenticated operator queue remains the decision surface.
|
|
18
|
+
|
|
19
|
+
The current claim boundary is embedded in every log line and the dashboard:
|
|
20
|
+
|
|
21
|
+
> Aggregate operational evidence only. A dashboard row does not prove a payment, customer, revenue, or target outcome beyond the provider-verified source snapshot.
|
|
22
|
+
|
|
23
|
+
## Zero-spend and secret boundary
|
|
24
|
+
|
|
25
|
+
The previously reviewed Grafana activation PDF is the documented basis for a 14-day trial that moves to a limited free-forever plan, with upgrading optional. Reconfirm that boundary in the current account before any send or schedule. Keep this integration within the free plan and do not add paid capacity.
|
|
26
|
+
|
|
27
|
+
Use the Loki endpoint, user ID, and access-policy token shown by the Grafana Cloud connection tile. Keep them in a secret store or deployment environment; never commit them or pass the token on the command line.
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
export THUMBGATE_GRAFANA_LOKI_URL='https://logs-prod-XXX.grafana.net/loki/api/v1/push'
|
|
31
|
+
export THUMBGATE_GRAFANA_LOKI_USER_ID='...'
|
|
32
|
+
export THUMBGATE_GRAFANA_LOKI_TOKEN='...'
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The sender accepts only HTTPS `grafana.net` hosts on the standard HTTPS port and the exact `/loki/api/v1/push` path. Redirects are rejected. A send also requires the operator to confirm the free-plan boundary:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
export THUMBGATE_GRAFANA_ZERO_SPEND_CONFIRMED=1
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Setting environment variables does not itself send data. `--send` is the separate action-time switch.
|
|
42
|
+
|
|
43
|
+
## Prepare a snapshot without network access
|
|
44
|
+
|
|
45
|
+
The hosted billing and Stripe catalog inputs may be omitted. Missing inputs remain explicitly unattached rather than appearing as verified zeroes. If supplied, only fixed aggregate counters are selected; raw rows and buyer identity are discarded.
|
|
46
|
+
|
|
47
|
+
To populate the intake action panels, generate the billing evidence from the authenticated operator summary with `include_intake_queue=1`. Do not expose that authenticated response directly to Grafana: the exporter selects only queue availability, `approvalReadyTotal`, and `discoveryReadyTotal`, then discards close/discovery packets, primary actions, buyer data, and approval tokens.
|
|
48
|
+
|
|
49
|
+
First create a fresh read-only Stripe catalog audit. The command uses `STRIPE_SECRET_KEY` or a managed local key file, retrieves only the reviewed prices and Payment Links, never prints the key, and exits `2` on missing credentials or drift:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm run stripe:catalog-audit -- \
|
|
53
|
+
--out /tmp/thumbgate-stripe-catalog-audit.json
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
thumbgate-revenue-evidence \
|
|
58
|
+
--target /absolute/path/to/revenue-target-control.json \
|
|
59
|
+
--remediation /absolute/path/to/revenue-evidence-remediation.json \
|
|
60
|
+
--billing /absolute/path/to/hosted-billing-aggregate.json \
|
|
61
|
+
--stripe-catalog /tmp/thumbgate-stripe-catalog-audit.json \
|
|
62
|
+
--out /tmp/thumbgate-grafana-revenue-evidence.json
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Expected status: `prepared_not_sent`.
|
|
66
|
+
|
|
67
|
+
Repository contributors can run the dedicated fail-closed and privacy regressions with:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npm run test:grafana-revenue-evidence
|
|
71
|
+
npm run test:external-customer-audit
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Generate and import the dashboard
|
|
75
|
+
|
|
76
|
+
The repository includes [thumbgate-revenue-evidence-dashboard.json](./thumbgate-revenue-evidence-dashboard.json). Regenerate it with:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
thumbgate-revenue-evidence \
|
|
80
|
+
--dashboard \
|
|
81
|
+
--out docs/integrations/grafana/thumbgate-revenue-evidence-dashboard.json
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Import the JSON in Grafana and select the stack's Loki datasource when prompted for `${DS_LOKI}`. Dashboard import is a separate external action and is not performed by the script.
|
|
85
|
+
|
|
86
|
+
## Send after explicit authorization
|
|
87
|
+
|
|
88
|
+
After the three credential variables and zero-spend confirmation are present, the operator can explicitly send one aggregate snapshot:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
thumbgate-revenue-evidence \
|
|
92
|
+
--target /absolute/path/to/revenue-target-control.json \
|
|
93
|
+
--remediation /absolute/path/to/revenue-evidence-remediation.json \
|
|
94
|
+
--billing /absolute/path/to/hosted-billing-aggregate.json \
|
|
95
|
+
--stripe-catalog /tmp/thumbgate-stripe-catalog-audit.json \
|
|
96
|
+
--send
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
The command returns only the HTTP status, Grafana hostname, and payload digest. It never prints the access-policy token.
|
|
100
|
+
|
|
101
|
+
For continuous operation, schedule this exact command only after a successful one-shot send, retain the free-plan guard, and regenerate the source evidence on every run. Do not replay a stale snapshot as if it were current.
|
|
102
|
+
|
|
103
|
+
## Official references
|
|
104
|
+
|
|
105
|
+
- [Send OTLP data to Grafana Cloud](https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/)
|
|
106
|
+
- [OTLP format considerations](https://grafana.com/docs/grafana-cloud/send-data/otlp/otlp-format-considerations/)
|
|
107
|
+
- [Grafana dashboard HTTP API](https://grafana.com/docs/grafana/latest/developer-resources/api-reference/http-api/dashboard/)
|
|
108
|
+
- [Grafana HTTP API authentication](https://grafana.com/docs/grafana/latest/developer-resources/api-reference/http-api/authentication/)
|
|
109
|
+
- [Grafana Cloud usage limits](https://grafana.com/docs/grafana-cloud/cost-management-and-billing/manage-invoices/understand-your-invoice/usage-limits/)
|