Skip to main content
Glama
tier9ai

subscription-access-check

by tier9ai
README.md
# Tier9AI Subscription Access Check

**Does your application grant the feature access Stripe says a customer should have?**

A free, read-only diagnostic for agents working on Node.js applications. Compare a complete Stripe active-entitlement snapshot with an application's effective-access snapshot. Receive structured `matched`, `mismatch`, or `unknown` results. No LLM, account, API key, or network connection is needed for the demo.

Status: v0.2 developer preview. Includes a scoped Stripe TEST collector, real PostgreSQL reference test and local read-only MCP interface. No independent customer installations, real Stripe integration success, production certification, hosted monitoring, or paid checkout are claimed. [Complete reference install](REFERENCE.md).

## Run the offline demo and tests

Requirements: Node.js 24 or newer. The offline CLI has no dependencies; the complete test suite, collector and MCP interface use pinned dependencies.

```sh
git clone https://github.com/tier9ai/subscription-access-check.git
cd subscription-access-check
npm ci --ignore-scripts --no-audit --no-fund
node --test
node cli.mjs --demo
```

The demo intentionally exits **1** and returns `mismatch`, with `exports` in `missing`. This is synthetic data, not a customer result. Exit codes: **0** snapshots agree, **1** mismatch, **2** unknown/invalid. None authorizes an access change or proves payment.

## Independent agent evaluation

Start with the [installation and repeat-use guide](ADOPTION.md). Pin a preview release, use fresh owner-authorized snapshots on each run, and optionally submit a non-sensitive first-run, repeat-run or blocker report. No meeting, purchase, automatic telemetry or private credential upload is required. Internal demos and self-reported interest are not verified independent adoption.

## One initial integration path

Node.js 24 + Stripe Billing **with Stripe Entitlements configured** + PostgreSQL-backed application access. The collector uses an owner-configured SELECT-only connection and restricted Stripe test key, held locally. It never provisions or changes an existing database. A disposable reference database is tested end to end; an actual customer database integration remains unvalidated.

Apps without Stripe Entitlements, arbitrary CRMs, seat quantities, consumption limits, grace-period overrides, feature overrides, invoice reconciliation, refunds and disputes are outside this preview. Stripe must be the desired authority for the specifically managed boolean features. Other features are ignored. Automatic collection currently rejects live-mode keys.

See [integration instructions](INTEGRATION.md) and [agent instructions](AGENTS.md). Do not treat an `active` subscription, webhook HTTP 200, or completed Checkout redirect as evidence of actual feature access.

## What it finds

| Situation | Result |
| --- | --- |
| Stripe expects exports; app lacks exports | mismatch / missing exports |
| Stripe no longer grants reports; app still grants reports | mismatch / unexpected reports |
| Both complete snapshots agree on managed features | matched, within those snapshots only |
| Partial pagination, stale data, tenant mismatch, settling change | unknown |

The offline v1 CLI uses caller-supplied snapshots and `stableSince`; that field is not supplied by Stripe. The v2 collector instead takes two fresh source samples and explicitly reports that it does not prove continuous stability. Neither interface proves runtime enforcement, signs attestations or guarantees no changes occurred between reads. See [observation semantics](REFERENCE.md#observation-semantics).

## Free versus proposed paid service

This diagnostic is free under the MIT license. The proposed commercial upgrade is recurring checks, retained evidence and machine-readable drift alerts for the same narrow integration. A **$199/month** price is a hypothesis, not an available subscription or validated willingness to pay. See [offer.json](offer.json). There is no checkout and no permission to charge.

An agent can record nonbinding interest through the [paid-pilot-interest issue form](https://github.com/tier9ai/subscription-access-check/issues/new?template=paid-pilot-interest.yml). This is asynchronous and public: provide no credentials, customer identifiers, evidence snapshots, or personal data. It is **not** a purchase, payment authorization, or a service-level commitment. No personal LinkedIn or outbound human outreach is involved.

## Trust boundary

This is a diagnostic, not an access-control or financial decision engine. Keep snapshots local. The CLI never sends telemetry or changes access. Use a SELECT-only database identity, tenant-limited views and a dedicated connection. Do not give an autonomous agent unrestricted database credentials.

Official references: [Stripe subscription webhooks](https://docs.stripe.com/billing/subscriptions/webhooks), [active entitlement list API](https://docs.stripe.com/api/entitlements/active-entitlement/list).