thumbgate 1.28.4 → 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.
Files changed (65) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.well-known/llms.txt +18 -10
  3. package/.well-known/mcp/server-card.json +1 -1
  4. package/README.md +5 -2
  5. package/adapters/claude/.mcp.json +2 -2
  6. package/adapters/forge/forge.yaml +3 -3
  7. package/adapters/mcp/server-stdio.js +1 -1
  8. package/adapters/opencode/opencode.json +1 -1
  9. package/bin/cli.js +8 -8
  10. package/bin/postinstall.js +4 -13
  11. package/config/github-about.json +5 -4
  12. package/config/post-deploy-marketing-pages.json +6 -6
  13. package/docs/integrations/grafana/README.md +109 -0
  14. package/docs/integrations/grafana/thumbgate-revenue-evidence-dashboard.json +1930 -0
  15. package/openapi/openapi.yaml +240 -5
  16. package/package.json +59 -19
  17. package/public/agent-manager.html +10 -11
  18. package/public/agents-cost-savings.html +2 -2
  19. package/public/assets/brand/thumbgate-logo-transparent.svg +6 -11
  20. package/public/assets/brand/thumbgate-mark-inline-v3.svg +11 -10
  21. package/public/assets/brand/thumbgate-mark.svg +10 -11
  22. package/public/blog/inside-your-boundary.html +114 -0
  23. package/public/blog/process-over-outcome-gates.html +119 -0
  24. package/public/blog.html +296 -402
  25. package/public/brand/thumbgate-mark.svg +5 -9
  26. package/public/codex-enterprise.html +2 -2
  27. package/public/compare.html +12 -3
  28. package/public/diagnostic.html +79 -29
  29. package/public/guide.html +4 -4
  30. package/public/index.html +1088 -2098
  31. package/public/install.html +3 -3
  32. package/public/js/buyer-intent.js +33 -18
  33. package/public/numbers.html +2 -2
  34. package/public/pricing.html +268 -408
  35. package/public/pro.html +4 -4
  36. package/scripts/billing.js +456 -126
  37. package/scripts/buyer-paths.js +102 -0
  38. package/scripts/cli-feedback.js +2 -2
  39. package/scripts/commercial-offer.js +18 -10
  40. package/scripts/external-customer-audit.js +881 -0
  41. package/scripts/feedback-loop.js +26 -0
  42. package/scripts/gates-engine.js +123 -1
  43. package/scripts/grafana-revenue-evidence.js +856 -0
  44. package/scripts/jsonl-window.js +89 -0
  45. package/scripts/lesson-embedding-index.js +3 -7
  46. package/scripts/meta-agent-loop.js +20 -2
  47. package/scripts/observability-env.js +139 -0
  48. package/scripts/observability-setup.js +55 -0
  49. package/scripts/plausible-domain-config.js +4 -0
  50. package/scripts/provider-live-evidence.js +1290 -0
  51. package/scripts/provider-payment-reconciler.js +442 -0
  52. package/scripts/provider-revenue-evidence.js +249 -0
  53. package/scripts/rate-limiter.js +1 -5
  54. package/scripts/revenue-action-eligibility.js +414 -0
  55. package/scripts/revenue-evidence-remediation.js +694 -0
  56. package/scripts/revenue-offer-system.js +709 -0
  57. package/scripts/sales-pipeline.js +1117 -0
  58. package/scripts/seo-gsd.js +8 -4
  59. package/scripts/stripe-credentials.js +37 -0
  60. package/scripts/stripe-revenue-catalog-audit.js +363 -0
  61. package/scripts/stripe-revenue-catalog.js +164 -0
  62. package/scripts/telemetry-analytics.js +23 -3
  63. package/scripts/vector-store.js +83 -7
  64. package/scripts/workflow-intake-queue.js +483 -0
  65. 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.28.4",
4
+ "version": "1.29.1",
5
5
  "author": {
6
6
  "name": "Igor Ganapolsky",
7
7
  "email": "ig5973700@gmail.com",
@@ -1,12 +1,19 @@
1
- # ThumbGate — Stop AI agents before they make costly mistakes.
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 prevents expensive AI mistakes before they happen. It checks
7
- > risky commands, file edits, deploys, payments, API calls, and other agent
8
- > actions before execution. 👎 Thumbs down becomes a history-aware lesson and
9
- > a Pre-Action Check; 👍 thumbs up reinforces safe patterns.
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. Agent makes a mistake developer gives thumbs-down
23
- 2. ThumbGate captures context and infers a structured lesson
24
- 3. Recurring failures get promoted to prevention rules
25
- 4. PreToolUse hooks block the pattern before it executes again
26
- 5. Thompson Sampling adapts gate confidence over time
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
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.28.4",
3
+ "version": "1.29.1",
4
4
  "description": "ThumbGate — 👍👎 feedback that teaches your AI agent. Thumbs down a mistake, it never happens again.",
5
5
  "homepage": "https://thumbgate.ai",
6
6
  "transport": "stdio",
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 flag or block matching tool calls according to policy.
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.28.4", "thumbgate", "serve"]
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.28.4", "thumbgate", "gate-check"]
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@1.28.4 thumbgate gate-check"
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@1.28.4 thumbgate hook-auto-capture"
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@1.28.4"
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.28.4' };
308
+ const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.29.1' };
309
309
  const COMMERCE_CATEGORIES = [
310
310
  'product_recommendation',
311
311
  'brand_compliance',
@@ -7,7 +7,7 @@
7
7
  "npx",
8
8
  "--yes",
9
9
  "--package",
10
- "thumbgate@1.28.4",
10
+ "thumbgate@1.29.1",
11
11
  "thumbgate",
12
12
  "serve"
13
13
  ],
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 Team rollout: start with the $499 Workflow Hardening Diagnostic\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 Hardening Diagnostic');
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 Hardening Sprint.');
1504
- console.log(' Team intake: https://thumbgate.ai/#workflow-sprint-intake');
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(' - Team rollout path: Enterprise adds shared hosted lessons, org visibility, workflow proof');
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 Hardening Diagnostic for one repeated team failure');
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 Hardening Diagnostic intake and checkout paths for teams with one repeated AI-agent workflow failure.',
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).',
@@ -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 — 7-day Pro trial is live.
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
- Pro ($19/mo): unlimited everything.
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
- Keep Pro: ${PRO_CTA_URL}
35
+ Managed workflow gate: ${MANAGED_GATE_URL}
45
36
 
46
37
  `);
@@ -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 derive rules from repeated failures, flag risky tool calls, hard-block detected secret leaks, and block matches in strict mode.",
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": "Catch AI agents before they spend money",
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": "Optional. Stripe can collect your email on the secure checkout page.",
17
+ "sentinel": "Required so the checkout has attributable buyer intent and your receipt can be recovered.",
18
18
  "mustNotContain": [
19
- "Required for your Stripe receipt and checkout recovery link."
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 not require email before Stripe"
22
+ "description": "Pro checkout interstitial must require attributable buyer email before Stripe"
23
23
  },
24
24
  {
25
25
  "route": "/diagnostic",
26
- "sentinel": "Workflow Hardening Diagnostic",
27
- "description": "Workflow Hardening Diagnostic intake page for high-intent warm traffic"
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/)