Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
433 commits
Select commit Hold shift + click to select a range
e1b3e7a
legal: P1.COMP2 — privacy notice draft + Stripe DPA execution tracker
lexwhiting Apr 14, 2026
1394bb7
legal: P1.COMP2 audit-check fix — add Vercel to subprocessor list
lexwhiting Apr 14, 2026
616430e
legal: P1.COMP2 — Stripe DPA status updated to "in effect via SSA"
lexwhiting Apr 15, 2026
9e4338f
legal: P1.COMP2 spec-diff — privacy notice DPA status language aligned
lexwhiting Apr 15, 2026
8345e07
legal: P1.COMP2 hostile review — §3.1 factual corrections against act…
lexwhiting Apr 15, 2026
0cb6062
test: P1.COMP2 test close-out — regression guards for privacy notice …
lexwhiting Apr 15, 2026
33e7374
content: P1.MKT1 second addendum — honest framing across all public-f…
lexwhiting Apr 15, 2026
122e490
docs: P1.INTL1 decoupling status — reflect shipped P2.INTL2 + Sandeep…
lexwhiting Apr 15, 2026
efb03b8
cli: scaffold @settlegrid/cli package with add command stub
lexwhiting Apr 15, 2026
940ae84
cli: P2.1 spec-diff fixes — extend root tsconfig, explicit exit, merg…
lexwhiting Apr 15, 2026
ccb13a7
cli: P2.1 hostile-review fixes — gate CLI execution, harden tests
lexwhiting Apr 15, 2026
23fde03
cli: P2.1 coverage expansion — addCommand unit tests + add-stub smoke…
lexwhiting Apr 15, 2026
9bf275e
cli: add repo type detection for settlegrid add
lexwhiting Apr 15, 2026
97e70d6
cli: P2.2 spec-diff fixes — strict dependency/language/fixture/resolv…
lexwhiting Apr 15, 2026
cd48d57
cli: P2.2 hostile-review fixes — path-traversal, hostile JSON, symlin…
lexwhiting Apr 15, 2026
5be4fef
cli: P2.2 coverage expansion — exports.default / string bin / symlink…
lexwhiting Apr 15, 2026
2ba0111
cli: implement jscodeshift transforms for add command
lexwhiting Apr 15, 2026
8628e85
cli: P2.3 spec-diff fixes — support app.route(…).verb(h) chain syntax
lexwhiting Apr 15, 2026
c316800
cli: P2.3 hostile-review fixes — init anchor, write errors, non-fn ha…
lexwhiting Apr 15, 2026
d4c41f6
cli: P2.3 coverage expansion — early returns, parse errors, invoke me…
lexwhiting Apr 15, 2026
7b6021a
cli: add GitHub PR creation to settlegrid add
lexwhiting Apr 15, 2026
efd834f
cli: P2.4 spec-diff fixes — Omit type, helper extraction, 3 missing D…
lexwhiting Apr 15, 2026
5a2961e
cli: P2.4 hostile-review fixes — patch line counts, error clarity, re…
lexwhiting Apr 15, 2026
eab8dfc
cli: P2.4 coverage expansion — --no-pr, non-GitHub origin, fork poll …
lexwhiting Apr 15, 2026
1e56fb0
cli: smoke-test settlegrid add against 3 real MCP repos
lexwhiting Apr 15, 2026
772abd0
cli: P2.5 spec-diff fixes — license-verified targets, broader mtime s…
lexwhiting Apr 15, 2026
10706cc
cli: P2.5 hostile-review fixes — sandboxed cwd, target validation, SD…
lexwhiting Apr 15, 2026
b70f991
cli: P2.5 coverage expansion — smoke helper unit tests + --json spawn…
lexwhiting Apr 15, 2026
628a844
mcp: add template manifest Zod schema + JSON Schema export
lexwhiting Apr 15, 2026
0e9e332
mcp: P2.6 spec-diff fixes — strict shape + test path fidelity
lexwhiting Apr 16, 2026
af81f21
mcp: P2.6 hostile review — XSS/SSRF URL hardening + pricing finite/in…
lexwhiting Apr 16, 2026
b219906
mcp: P2.6 test close-out — 7 new tests + postbuild integration suite
lexwhiting Apr 16, 2026
26ab9b1
scripts: add build-registry that emits public/registry.json
lexwhiting Apr 16, 2026
72cd0cc
scripts: P2.7 spec-diff — non-strict warnings + script value fix
lexwhiting Apr 16, 2026
92db873
scripts: P2.7 hostile review — duplicate slugs, stale cleanup, flag g…
lexwhiting Apr 16, 2026
a194ac1
scripts: P2.7 test close-out — 5 new coverage tests (15 total)
lexwhiting Apr 16, 2026
8ac626b
templates: polish 20 canonical templates for gallery launch
lexwhiting Apr 16, 2026
501217e
templates: P2.8 spec-diff — preserve Original README with Upstream API
lexwhiting Apr 16, 2026
c619be1
templates: P2.8 hostile review — conditional Original README, dead im…
lexwhiting Apr 16, 2026
0296c34
templates: P2.8 test close-out — 6 new coverage tests (14 total)
lexwhiting Apr 16, 2026
594e9c6
web: ship /templates gallery SSG backed by registry.json
lexwhiting Apr 16, 2026
6668437
web: P2.9 spec-diff — match spec API signatures, OG image, deploy CTA…
lexwhiting Apr 16, 2026
b44e86f
web: P2.9 hostile review — client-side filtering + registry guard
lexwhiting Apr 16, 2026
f2f9407
web: P2.9 test close-out — 6 new coverage tests (16 total)
lexwhiting Apr 16, 2026
78fa5d6
web: add Meilisearch-backed search to gallery
lexwhiting Apr 16, 2026
e0c0429
web: P2.10 spec-diff — indexer task summary + client env.ts imports
lexwhiting Apr 16, 2026
cf17591
web: P2.10 hostile review — filter injection, XSS, error handling, ro…
lexwhiting Apr 16, 2026
c2a738a
web: P2.10 test close-out — 4 new coverage tests (16 total)
lexwhiting Apr 16, 2026
715bc3c
db,scripts: add mcp_shadow_index schema + multi-source crawler
lexwhiting Apr 16, 2026
8403bae
db,scripts: P2.11 spec-diff — DESC index + COALESCE upsert
lexwhiting Apr 16, 2026
db5943b
db,scripts: P2.11 hostile review — PyPI single fetch, DB conn cleanup…
lexwhiting Apr 16, 2026
608bd8e
db,scripts: P2.11 test close-out — 6 new coverage tests (14 total)
lexwhiting Apr 16, 2026
7d963d0
fix(seo): resolve soft 404s + add missing availability to offers
lexwhiting Apr 16, 2026
1c2b413
fix: resolve Vercel build failure + pre-existing type errors
lexwhiting Apr 16, 2026
9b42384
web: ship /mcp/[owner]/[repo] shadow directory SSG
lexwhiting Apr 16, 2026
c756851
web: P2.12 spec-diff — JSON-LD fix, template cross-ref, owner nav
lexwhiting Apr 16, 2026
56d9a0b
web: P2.12 hostile review — JSON-LD XSS fix, deterministic query, cle…
lexwhiting Apr 16, 2026
0d62b6d
web: P2.12 test close-out — 4 new coverage tests (11 total)
lexwhiting Apr 16, 2026
ee9293a
ci: add template quality gate workflow
lexwhiting Apr 16, 2026
727959e
ci: P2.13 spec-diff — extract parseChangedTemplateDirs + fixture tests
lexwhiting Apr 16, 2026
fdf4a20
ci: P2.13 hostile review — fail-loud git, slug safety, workflow harde…
lexwhiting Apr 16, 2026
a30a14f
ci: P2.13 test close-out — DI for execSync + git-throw regression guard
lexwhiting Apr 16, 2026
9dfc5c8
gate: add Phase 2 audit gate (P2.14) — 4 PASS / 16 DEFER / 0 FAIL
lexwhiting Apr 16, 2026
3607dbd
gate: P2.14 spec-diff — tighten 8 checks against literal prompt-card …
lexwhiting Apr 17, 2026
48994b4
gate: P2.14 hostile review — 11 fixes for false-positives, crash safe…
lexwhiting Apr 17, 2026
62006d7
gate: P2.14 test close-out — extract 2 state machines + parametric re…
lexwhiting Apr 17, 2026
9cbf8e0
proxy: add unified-adapter dispatch path behind feature flag (P2.K1)
lexwhiting Apr 17, 2026
af69da6
gate: reconcile check 9 with P2.K1 spec — fix package name + decouple…
lexwhiting Apr 17, 2026
65d6ba8
proxy: P2.K1 spec-diff — split dispatch path tag for fall-through obs…
lexwhiting Apr 17, 2026
bc39f0e
proxy: P2.K1 hostile review — equivalence preservation + defensive cl…
lexwhiting Apr 17, 2026
7e0c31b
proxy: P2.K1 test close-out — extract dispatch verdict + parametric e…
lexwhiting Apr 17, 2026
016457d
proxy: migrate 13 lib/*-proxy.ts files into adapter classes
lexwhiting Apr 17, 2026
d334f36
proxy: P2.K2 spec-diff — add verify() + build402Response() adapter me…
lexwhiting Apr 17, 2026
99ab9db
proxy: P2.K2 hostile review — 4 fixes + 28 regression tests
lexwhiting Apr 17, 2026
14d9c19
proxy: P2.K2 test close-out — coverage fill for adapter migration
lexwhiting Apr 17, 2026
2e8f3c3
proxy: snapshot test for legacy vs unified dispatch equivalence
lexwhiting Apr 17, 2026
5058976
proxy: P2.K3 spec-diff — expand snapshot test to 3 equivalence levels
lexwhiting Apr 17, 2026
adfa7b9
proxy: P2.K3 hostile review — case-insensitive opt-out + 3 cleanups
lexwhiting Apr 17, 2026
a1473be
proxy: P2.K3 test close-out — extract + test countK3TestCases helper
lexwhiting Apr 17, 2026
979a100
sdk: add typed MeterContext + lifecycle API stubs
lexwhiting Apr 17, 2026
f119283
sdk: P2.K4 spec-diff — widen sg.wrap second arg to accept MeterContext
lexwhiting Apr 17, 2026
4ede254
sdk: P2.K4 hostile review — attach .code to stub throws + tighten docs
lexwhiting Apr 17, 2026
793061e
sdk: P2.K4 test close-out — pin exports + cover remaining gaps
lexwhiting Apr 17, 2026
e0f8a08
ai-sdk: add @settlegrid/ai-sdk Vercel AI SDK adapter
lexwhiting Apr 17, 2026
5edd177
ai-sdk: P2.FMT1 spec-diff — hard peer dep on ai + structural v5 compa…
lexwhiting Apr 17, 2026
ba9d558
ai-sdk: P2.FMT1 hostile review — header-injection defense + 3 cleanups
lexwhiting Apr 17, 2026
dce4c06
ai-sdk: P2.FMT1 test close-out — coverage fill (19 new tests)
lexwhiting Apr 17, 2026
9182141
mastra: add @settlegrid/mastra adapter (P2.FMT2)
lexwhiting Apr 17, 2026
ebf5011
mastra: P2.FMT2 spec-diff — fix Mastra createTool execute shape
lexwhiting Apr 17, 2026
c990c89
mastra: P2.FMT2 hostile review — whitespace trim + proxy defense + co…
lexwhiting Apr 17, 2026
32b9f99
mastra: P2.FMT2 test close-out — coverage fill (20 new tests)
lexwhiting Apr 17, 2026
5c77bb7
cursor/langchain/n8n: rebrand to @settlegrid/* + add wrap helpers (P2…
lexwhiting Apr 17, 2026
04a5bf9
cursor/langchain/n8n: P2.FMT3 spec-diff — no gaps
lexwhiting Apr 17, 2026
b89b941
cursor/langchain/n8n: P2.FMT3 hostile review — injection table + arra…
lexwhiting Apr 17, 2026
b36ea29
cursor/langchain/n8n: P2.FMT3 test close-out — gate 15 PASS recorded
lexwhiting Apr 17, 2026
80a449c
cursor/langchain/n8n: P2.FMT3 spec-diff re-audit — propagate rename t…
lexwhiting Apr 17, 2026
787a3cd
cursor/langchain/n8n: P2.FMT3 hostile review II — fail-fast + init-wi…
lexwhiting Apr 17, 2026
4f75698
cursor/langchain/n8n: P2.FMT3 coverage close-out — 100% wrap.ts coverage
lexwhiting Apr 17, 2026
076a89f
n8n: add Invoke Tool operation to SettleGrid node (P2.FMT4)
lexwhiting Apr 17, 2026
d14e3ce
n8n: P2.FMT4 spec-diff — no code gaps; gate check 16 updated to match…
lexwhiting Apr 17, 2026
a82c3f5
n8n: P2.FMT4 hostile review — credential validation (fail-fast on mis…
lexwhiting Apr 17, 2026
a3e33c1
n8n: P2.FMT4 test close-out — 100% branch coverage on new invoke code
lexwhiting Apr 17, 2026
9d38bbc
n8n: P2.FMT4 spec-diff re-audit — rename invokeMethod/invokeArgs to s…
lexwhiting Apr 17, 2026
be4833a
n8n: P2.FMT4 hostile review II — mutation / status validation / apiKe…
lexwhiting Apr 17, 2026
0ac70d1
n8n: P2.FMT4 test close-out — 100% branch coverage on all new FMT4 code
lexwhiting Apr 17, 2026
12ff6b3
web: add /compare/nevermined counter-positioning page (P2.MKT1)
lexwhiting Apr 17, 2026
6d3fc09
web: P2.MKT1 spec-diff — add missing Nevermined advantage for positio…
lexwhiting Apr 17, 2026
8861efc
web: P2.MKT1 hostile review — a11y + claim precision
lexwhiting Apr 17, 2026
4b7c627
web: P2.MKT1 test close-out — content-integrity suite for /compare/ne…
lexwhiting Apr 17, 2026
068719e
web: P2.MKT1 spec-diff re-audit — make every cited claim one-click ve…
lexwhiting Apr 17, 2026
8512817
web: P2.MKT1 hostile review II — URL safety + canonical GitHub URLs +…
lexwhiting Apr 17, 2026
7f92c95
web: P2.MKT1 test close-out — extract helpers for real unit coverage
lexwhiting Apr 18, 2026
e4e3b82
mcp+web: P2.RAIL1 — extract Stripe behind RailAdapter interface
lexwhiting Apr 18, 2026
c1c61c3
mcp+web: P2.RAIL1 spec-diff — document billing-routes + dashboard-ite…
lexwhiting Apr 18, 2026
9cba8db
mcp+web: P2.RAIL1 hostile review — resumability + metadata-override d…
lexwhiting Apr 18, 2026
9b86b93
mcp: P2.RAIL1 test close-out — 100% coverage on new rail code
lexwhiting Apr 18, 2026
eff4d00
mcp+web: P2.RAIL1 spec-diff re-audit — route all in-scope Stripe clie…
lexwhiting Apr 18, 2026
75e8aeb
mcp+web: P2.RAIL1 hostile review II — defensive validation + URL enco…
lexwhiting Apr 18, 2026
aa1823b
mcp+web: P2.RAIL1 test close-out — 100% coverage on rails module + re…
lexwhiting Apr 18, 2026
095f200
feat(billing): wire Stripe Tax for SaaS subscription VAT/GST compliance
lexwhiting Apr 18, 2026
c0ef687
feat(billing): P2.TAX1 audit close-out — E2E subscribe tests + ledger…
lexwhiting Apr 18, 2026
e52acd0
feat(billing): P2.TAX1 spec-diff re-audit — collect billing address B…
lexwhiting Apr 18, 2026
23218e3
feat(billing): P2.TAX1 hostile review II — force address, sum fallbac…
lexwhiting Apr 18, 2026
1447e71
feat(billing): P2.TAX1 test close-out — 100% coverage on new tax code…
lexwhiting Apr 18, 2026
d1a3ba0
docs(legal): P2.COMP1 — OFAC compliance program + AUP + incident resp…
lexwhiting Apr 18, 2026
bec3041
docs(legal): P2.COMP1 spec-diff re-audit — fill spec-literal gaps
lexwhiting Apr 18, 2026
b238ef4
docs(legal): P2.COMP1 hostile review — factual corrections + honest i…
lexwhiting Apr 18, 2026
66ee50d
docs(legal): P2.COMP1 test close-out — content-integrity suite + fixe…
lexwhiting Apr 18, 2026
59189c1
docs(intl): P2.INTL1 — country tracker + Stripe-unsupported-corridor …
lexwhiting Apr 18, 2026
09ee80f
docs+feat(intl): P2.INTL1 spec-diff re-audit — runnable backfill scri…
lexwhiting Apr 18, 2026
5039d9f
docs+feat(intl): P2.INTL1 hostile review — sanctions coordination, ra…
lexwhiting Apr 18, 2026
f732b17
docs+feat(intl): P2.INTL1 test close-out — 100% coverage-where-possib…
lexwhiting Apr 18, 2026
67db5a0
feat(phase-gates): P2.INTL2 — wire gate check 21 + close out audit chain
lexwhiting Apr 18, 2026
75db440
docs+feat(intl): P2.INTL2 spec-diff re-audit — plug 404 in claimed-dr…
lexwhiting Apr 18, 2026
fe8e6c8
docs+feat(intl): P2.INTL2 hostile review — plug unclaimed 404 + extra…
lexwhiting Apr 18, 2026
181a19c
docs+feat(intl): P2.INTL2 test close-out — full coverage, build green…
lexwhiting Apr 18, 2026
cd6c5c3
feat(audit): fix all 14 findings from producer+consumer end-to-end fl…
lexwhiting Apr 18, 2026
2ff7a4a
fix(publish): UPDATE path preserves existing status through gate failure
lexwhiting Apr 18, 2026
17d1af9
scripts: add comprehensive template-audit harness for 1,022-template …
lexwhiting Apr 19, 2026
5c76461
scripts/template-audit: expand ambient types to avoid TSC false posit…
lexwhiting Apr 19, 2026
d52e3da
open-source-servers: cull 140 broken/unmeterable templates (1022 → 882)
lexwhiting Apr 19, 2026
1af6cb6
open-source-servers: add 73 Templater-generated templates (P3.2 scale…
lexwhiting Apr 19, 2026
083885b
scripts/template-audit: P3.2 spec-diff — backfill template.json + run…
lexwhiting Apr 19, 2026
b074d69
scripts/template-audit: P3.2 hostile — harden backfill + expand stub
lexwhiting Apr 19, 2026
f9f7a52
scripts/template-audit: P3.2 tests — export backfill helpers + 44-tes…
lexwhiting Apr 19, 2026
e0470c5
open-source-servers: add 4 P3.3-retry-salvaged templates + rebuild re…
lexwhiting Apr 19, 2026
ea5c1b4
admin: P3.4 scaffold — Templater cost + quality dashboard
lexwhiting Apr 19, 2026
df4bea0
admin: P3.4 hostile — harden snapshot validation + sync-script tests
lexwhiting Apr 19, 2026
7aed388
admin: P3.4 tests — error-boundary contract test for loadAllRuns
lexwhiting Apr 19, 2026
aebb204
admin: P3.4 spec-diff — 401/403 semantics + ui/ primitives
lexwhiting Apr 20, 2026
89d1473
admin: P3.4 hostile round 2 — sync-script correctness + ops visibility
lexwhiting Apr 20, 2026
3385c6f
admin: P3.4 tests — main() CLI + exit-code regression
lexwhiting Apr 20, 2026
d057027
scripts: add directory submission packet builder
lexwhiting Apr 20, 2026
da35d55
scripts: P3.7 spec-diff — field renames + README preservation
lexwhiting Apr 20, 2026
6372dc6
scripts: P3.7 hostile — security + correctness + edge-case fixes
lexwhiting Apr 20, 2026
9db2299
scripts: P3.7 tests — coverage on main() CLI + error paths
lexwhiting Apr 20, 2026
4a99f88
learn: launch Academy with lesson 1 - pricing your MCP server
lexwhiting Apr 21, 2026
f0484b5
learn: P3.8 spec-diff — H3 structure + editorial polish pass
lexwhiting Apr 21, 2026
4e027cc
learn: P3.8 hostile — JSON-LD XSS fix + OG fallback + earned CTA
lexwhiting Apr 21, 2026
a8418ed
learn: P3.8 tests — cover blog-posts helpers used by academy
lexwhiting Apr 21, 2026
3456968
learn: add Academy lessons 2-5
lexwhiting Apr 21, 2026
c547931
learn: P3.9 spec-diff — blog-link floor + SEO keyword alignment
lexwhiting Apr 21, 2026
9b788e4
learn: P3.9 hostile — lesson 3 claim integrity + case-study framing
lexwhiting Apr 21, 2026
e4e6279
learn: add Academy landing page and RSS feed
lexwhiting Apr 21, 2026
b7a2941
learn: P3.10 spec-diff — Academy card prominence
lexwhiting Apr 21, 2026
9deb2ea
learn: P3.10 hostile — RSS auto-discovery + XML 1.0 compliance
lexwhiting Apr 21, 2026
3e162c6
learn: P3.10 tests — fill coverage gaps on feed-builder branches
lexwhiting Apr 21, 2026
827d468
ci: add template CI pipeline with Renovate + codemods
lexwhiting Apr 21, 2026
c06dab4
ci: P3.11 spec-diff — scope Renovate to templates + document App install
lexwhiting Apr 21, 2026
8df9c33
ci: P3.11 hostile — narrow transforms + binder guards + timeout
lexwhiting Apr 21, 2026
784bf5e
ci: P3.11 tests — fill coverage gaps on empty-src + error paths
lexwhiting Apr 21, 2026
9bd4cac
gate: P3.12 scaffold — phase-3 audit gate (9 PASS / 13 DEFER / 5 FAIL)
lexwhiting Apr 21, 2026
67ca033
gate: P3.12 spec-diff — fix verify coverage gaps + add prereqs section
lexwhiting Apr 22, 2026
191946f
gate: P3.12 hostile — paranoid review + 11 correctness fixes
lexwhiting Apr 22, 2026
c2a3fd6
gate: P3.12 tests — 51 new vitest cases on phase-3-verify helpers
lexwhiting Apr 22, 2026
e846353
gate: P3.12 follow-up — fix 4 wrong prompt-ID references in verify
lexwhiting Apr 22, 2026
056240b
feat(kernel): P3.K1 scaffold — wire MPP adapter with detect/envelope/…
lexwhiting Apr 22, 2026
1bf3f1d
feat(kernel): P3.K1 spec-diff — close gaps against the original card
lexwhiting Apr 22, 2026
0d09564
feat(kernel): P3.K1 hostile — paranoid review + 6 correctness fixes
lexwhiting Apr 22, 2026
44f4b83
feat(kernel): P3.K1 tests — fill coverage gaps + regenerate gate log
lexwhiting Apr 22, 2026
a0946fa
feat(kernel): P3.K2 scaffold — wire L402 adapter with Voltage backend…
lexwhiting Apr 22, 2026
2233b51
feat(kernel): P3.K2 spec-diff — close 4 gaps against the original card
lexwhiting Apr 23, 2026
4fd11eb
feat(kernel): P3.K2 hostile — paranoid review + 7 correctness fixes
lexwhiting Apr 23, 2026
bd45383
feat(kernel): P3.K2 tests — fill coverage gaps + regenerate gate log
lexwhiting Apr 23, 2026
b3eff12
gate: P3.12 follow-up — discover tests in adapter __tests__ subdirs
lexwhiting Apr 23, 2026
cfcd401
gate: P3.12 follow-up tests — round out helper coverage
lexwhiting Apr 23, 2026
da1faf7
feat(client): P3.K3 scaffold — @settlegrid/client buyer-side SDK
lexwhiting Apr 23, 2026
5fb70c7
feat(client): P3.K3 spec-diff — close 5 gaps against the original card
lexwhiting Apr 23, 2026
6f4bf17
feat(client): P3.K3 hostile — paranoid review + 13 correctness fixes
lexwhiting Apr 23, 2026
b24965c
feat(client): P3.K3 tests — fill coverage gaps + regenerate gate log
lexwhiting Apr 24, 2026
504e4e5
feat(kernel): P3.K4 scaffold — per-rail pricing + unified ledger + to…
lexwhiting Apr 24, 2026
79cfcaf
feat(kernel): P3.K4 spec-diff — close 2 gaps + document 9 deviations
lexwhiting Apr 24, 2026
9a213fa
feat(kernel): P3.K4 hostile — paranoid review + 13 correctness fixes
lexwhiting Apr 24, 2026
73de086
feat(kernel): P3.K4 tests — fill coverage gaps + regenerate gate log
lexwhiting Apr 24, 2026
ae63893
fix(adapter): P3.K5 scaffold — DRAIN keccak-256 correction
lexwhiting Apr 24, 2026
340ff2e
fix(adapter): P3.K5 spec-diff — close 2 gaps against the original card
lexwhiting Apr 24, 2026
6255688
fix(adapter): P3.K5 hostile — close 3 parser-boundary findings
lexwhiting Apr 24, 2026
ed70997
fix(adapter): P3.K5 tests — fill coverage gaps + regenerate gate log
lexwhiting Apr 24, 2026
f43f5de
feat(kernel): P3.K6 scaffold — pre-execution authorization gate
lexwhiting Apr 24, 2026
9cea70d
feat(kernel): P3.K6 spec-diff — close 3 gaps against the original card
lexwhiting Apr 24, 2026
436cdf5
feat(kernel): P3.K6 hostile — 5 paranoid-review fixes
lexwhiting Apr 24, 2026
ad2afdc
fix(kernel): P3.K6 tests — fill coverage gaps + regenerate gate log
lexwhiting Apr 24, 2026
5ef6c38
feat(rails): Stripe account-type router + eligibility pre-check + wai…
lexwhiting Apr 25, 2026
6ceb17e
feat(rails): Stripe Connect reconciliation + ledger drift detection
lexwhiting Apr 25, 2026
9fcdcfe
feat(rails): payout schedule config + chargeback velocity monitoring
lexwhiting Apr 25, 2026
abef401
feat(sdk-python): P3.PYTHON1 — Python SDK core 1:1 port
lexwhiting Apr 25, 2026
dc13379
test(sdk-python): full test parity + PEP 517 + CI matrix
lexwhiting Apr 26, 2026
5474652
chore(sdk-python): P3.PYTHON2 spec-diff fixes — pytest-mock + build/t…
lexwhiting Apr 26, 2026
0c6833a
fix(sdk-python): P3.PYTHON2 hostile-review fixes
lexwhiting Apr 26, 2026
3c0eab6
test(sdk-python): P3.PYTHON2 R4 — close last 6 coverage gaps
lexwhiting Apr 26, 2026
eb32de1
feat(sdk-python): settlegrid-langchain adapter package
lexwhiting Apr 26, 2026
4372a6f
fix(sdk-python): P3.PYTHON3 spec-diff fixes — 3 deviations closed
lexwhiting Apr 26, 2026
5bc20a6
test(sdk-python-langchain): P3.PYTHON3 hostile review of spec-diff fixes
lexwhiting Apr 26, 2026
dfe6022
chore(sdk-python-langchain): P3.PYTHON3 R4 — full pipeline verification
lexwhiting Apr 26, 2026
1d687db
feat(sdk-python): llamaindex, crewai, pydantic-ai adapters
lexwhiting Apr 26, 2026
9a8bfec
fix(sdk-python-{llamaindex,pydantic-ai}): hostile review — dispatch p…
lexwhiting Apr 26, 2026
e72a3ec
test(sdk-python-{llamaindex,crewai,pydantic-ai}): close coverage gaps…
lexwhiting Apr 26, 2026
99b9ee2
feat(sdk-python): dspy + smolagents adapter packages
lexwhiting Apr 26, 2026
15694f8
fix(sdk-python-dspy): P3.PYTHON5 spec-diff — pin canonical PyPI name …
lexwhiting Apr 26, 2026
46865e4
feat(adapter): Mastercard Verifiable Intent detection stub
lexwhiting Apr 26, 2026
ef5c005
fix(adapter): P3.PROT1 spec-diff — expose buildChallenge() no-arg for…
lexwhiting Apr 26, 2026
994f813
fix(P3.PROT1): hostile-review findings — breadcrumb 404, dead export,…
lexwhiting Apr 26, 2026
cd2c013
test(P3.PROT1): close coverage gaps to ~100% on mastercard-vi adapter
lexwhiting Apr 26, 2026
bfd8e8a
feat(directory): cursor.directory submission packet
lexwhiting Apr 26, 2026
24893aa
fix(P3.13): spec-diff — submission.md described wrong cursor.director…
lexwhiting Apr 26, 2026
7b310cd
fix(P3.13): hostile review — broken refs, glob negation, fabricated h…
lexwhiting Apr 26, 2026
0db0037
test(P3.13): pin hostile-review findings on the cursor.directory packet
lexwhiting Apr 26, 2026
85dd401
fix(sdk-python): meter() must thread consumerId/toolId/keyId — every …
lexwhiting Apr 26, 2026
ad8fc03
style(sdk-python): rename test method to satisfy ruff N802
lexwhiting Apr 26, 2026
667f79a
docs: Phase 4 handoff note for next session
lexwhiting Apr 26, 2026
2b81e85
telemetry: wire 8-event funnel across gallery, CLI, SDK
lexwhiting Apr 26, 2026
c67d2ba
content: draft launch blog post (founder rewrite required)
lexwhiting Apr 26, 2026
0216352
content: Show HN draft + response kit
lexwhiting Apr 26, 2026
c102729
content: demo video + Loom walkthrough scripts
lexwhiting Apr 26, 2026
dbb2097
content: X launch thread draft
lexwhiting Apr 27, 2026
878beaa
content: second-batch outreach generator (100 hand-sent emails)
lexwhiting Apr 28, 2026
0a8faab
launch: war room runbook, dashboard, and smoke script
lexwhiting Apr 28, 2026
8339378
interviews: template + scheduling pipeline for launch week
lexwhiting Apr 28, 2026
42b95fb
decisions: ADR-004 Cursor extension build-or-skip
lexwhiting Apr 28, 2026
2431fab
docs(launch): align Show HN + blog post with settlement-layer positio…
lexwhiting Apr 28, 2026
26a253f
feat(x402): public facilitator at facilitator.settlegrid.ai
lexwhiting Apr 28, 2026
8062e5c
chore(x402): founder-task prep — Vercel rewrite, DNS runbook, smoke s…
lexwhiting Apr 28, 2026
f177ce8
fix(db): hotfix prod schema drift — add is_premium, premium_price_cen…
lexwhiting Apr 29, 2026
5f615c3
fix(db): coerce Date params to ISO timestamptz in raw sql template li…
lexwhiting Apr 29, 2026
6b7b59d
fix(mcp): return 405 for GET to /api/mcp instead of opening a doomed …
lexwhiting Apr 29, 2026
3536abf
fix(vercel): drop "//" comment field — vercel.json schema rejects unk…
lexwhiting Apr 29, 2026
a2ebcba
trigger: fresh deploy after Vercel build settings changes
lexwhiting Apr 29, 2026
c69a58f
fix(deps): declare @settlegrid/{client,langchain,mcp,rails} as worksp…
lexwhiting Apr 29, 2026
0a6945b
fix(build): resolve 3 ESLint errors blocking next build on Vercel
lexwhiting Apr 29, 2026
72de879
fix(build): extract non-handler exports out of route.ts files
lexwhiting Apr 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
88 changes: 88 additions & 0 deletions .github/workflows/chargeback-velocity.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
name: Chargeback velocity (daily)

# P3.RAIL3 — runs scripts/chargeback-velocity.ts daily at 08:30 UTC
# (just after the reconciliation cron clears at 08:00 UTC). Tiers
# every connected account green/yellow/red and:
# - inserts a chargeback_alerts row for non-green tiers
# - sends a developer-facing email (rate-limited yellow 7d / red 24h)
# - flips developers.onboarding_paused = true on red tier
#
# Hostile posture (per audit):
# (a) idempotent payout-schedule update (handled in
# packages/rails/src/stripe.ts — see updatePayoutSchedule)
# (b) low-sample-size guard via --min-charges (default 10)
# (c) auto-pause is reversible via the founder admin UI
# (d) email rate-limit per (developer, tier)
#
# Auto-push of any outputs is OFF (nothing to push — DB-only side
# effects). Workflow_dispatch is allowed for ad-hoc runs.

on:
schedule:
- cron: '30 8 * * *'
workflow_dispatch:
inputs:
developer_id:
description: 'Run for a single developer (UUID). Empty → all developers.'
required: false
default: ''
dry_run:
description: 'Skip Stripe / DB / email side effects.'
required: false
default: 'false'
type: boolean

permissions:
contents: read

concurrency:
group: chargeback-velocity
cancel-in-progress: false

jobs:
run:
runs-on: ubuntu-latest
timeout-minutes: 15
env:
DATABASE_URL: ${{ secrets.RECONCILE_DATABASE_URL }}
STRIPE_RECONCILE_KEY: ${{ secrets.STRIPE_RECONCILE_KEY }}
RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1

- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- run: npm ci

- name: Build @settlegrid/rails
run: npm --workspace @settlegrid/rails run build

- name: Run chargeback velocity
# workflow_dispatch inputs are bound via env vars (not ${{ }}
# template substitution) so a malicious dispatcher can't
# inject shell metacharacters via the developer_id field.
env:
INPUT_DEVELOPER_ID: ${{ github.event.inputs.developer_id }}
INPUT_DRY_RUN: ${{ github.event.inputs.dry_run }}
run: |
set -euo pipefail
ARGS=()
if [[ -n "${INPUT_DEVELOPER_ID:-}" ]]; then
# Hostile-review fix: the loose regex `^[0-9a-f-]{36}$`
# accepts e.g. 36 dashes. Require the canonical UUID
# 8-4-4-4-12 layout instead.
if ! [[ "${INPUT_DEVELOPER_ID}" =~ ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$ ]]; then
echo "Invalid developer_id: ${INPUT_DEVELOPER_ID}" >&2
exit 2
fi
ARGS+=(--developer-id "${INPUT_DEVELOPER_ID}")
fi
if [[ "${INPUT_DRY_RUN:-false}" == "true" ]]; then
ARGS+=(--dry-run)
fi
npx tsx scripts/chargeback-velocity.ts "${ARGS[@]}"
28 changes: 28 additions & 0 deletions .github/workflows/index-registry.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
name: Index Registry to Meilisearch

on:
push:
branches: [main]
paths:
- 'apps/web/public/registry.json'
workflow_dispatch:

jobs:
index:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- run: npm ci

- name: Index registry to Meilisearch
env:
MEILI_URL: ${{ secrets.MEILI_URL }}
MEILI_MASTER_KEY: ${{ secrets.MEILI_MASTER_KEY }}
run: npx tsx scripts/meilisearch/index-registry.ts
115 changes: 115 additions & 0 deletions .github/workflows/python-sdk-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
name: Python SDK CI

on:
push:
branches: [main]
paths:
- 'packages/sdk-python/**'
- '.github/workflows/python-sdk-ci.yml'
pull_request:
paths:
- 'packages/sdk-python/**'
- '.github/workflows/python-sdk-ci.yml'

# H9 hostile fix — least-privilege explicit permissions (default for new
# repos, but stating it here makes the contract explicit and survives
# org-level default changes).
permissions:
contents: read

# Cancel in-progress runs when a new commit lands on the same ref —
# avoids burning CI minutes on superseded commits.
concurrency:
group: python-sdk-ci-${{ github.ref }}
cancel-in-progress: true

defaults:
run:
working-directory: packages/sdk-python

jobs:
test:
name: test (py${{ matrix.python-version }} / ${{ matrix.os }})
runs-on: ${{ matrix.os }}
# H8 hostile fix — bound CI duration; a hung pytest used to be able
# to consume 6h of CI time silently before getting killed.
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
python-version: ['3.10', '3.11', '3.12']
steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
cache-dependency-path: packages/sdk-python/pyproject.toml

- name: Install dev dependencies
run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"

- name: Verify no transitive-dep conflicts
run: pip check

- name: Lint (ruff)
run: ruff check settlegrid tests

- name: Type check (mypy)
run: mypy settlegrid

- name: Tests + coverage
run: pytest --cov=settlegrid --cov-report=xml --cov-report=term --cov-fail-under=90

- name: Upload coverage report
if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.12'
uses: actions/upload-artifact@v4
with:
name: coverage-xml
path: packages/sdk-python/coverage.xml
if-no-files-found: error

build:
name: build wheel + sdist + smoke install
runs-on: ubuntu-latest
needs: test
timeout-minutes: 10
steps:
- uses: actions/checkout@v4

- name: Set up Python 3.10
uses: actions/setup-python@v5
with:
python-version: '3.10'

- name: Install build backend
run: |
python -m pip install --upgrade pip
pip install build twine

- name: Build wheel + sdist
run: python -m build

- name: twine check
run: twine check dist/*

- name: Smoke install in fresh venv
run: |
python -m venv /tmp/smoke
/tmp/smoke/bin/pip install --upgrade pip
/tmp/smoke/bin/pip install dist/*.whl
/tmp/smoke/bin/pip check
/tmp/smoke/bin/python -c "import settlegrid; print(settlegrid.SDK_VERSION)"
/tmp/smoke/bin/python -c "from settlegrid import SettleGrid, Wrapper, Invocation, InvalidKeyError, RateLimitedError, KeyValidationResult, MeterResult"

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: sdk-python-dist
path: packages/sdk-python/dist/
if-no-files-found: error
144 changes: 144 additions & 0 deletions .github/workflows/stripe-reconcile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
name: Stripe reconciliation (daily)

# P3.RAIL2 — Reconciles the SettleGrid unified ledger against Stripe
# Balance Transactions + Connect Transfers for the previous UTC
# calendar day. Reports drift to data/reconciliation/stripe/{date}.json,
# posts a one-line summary to Slack/Discord, and opens a rate-limited
# GitHub issue when drift breaches the configured threshold (1% / 100
# bps by default). The orchestrator caps GitHub issues at one per
# 24h via .reconcile-state.json, so a 24h Stripe outage that produces
# 24 daily drift reports opens AT MOST one issue.
#
# Hostile-lens posture:
# (a) Schedule is FIXED at 08:00 UTC — well after Stripe's UTC-day
# window closes, so the run sees a complete day.
# (b) Workflow runs on the default branch only and uses the
# repository's default GITHUB_TOKEN scopes. No third-party
# actions handle secrets.
# (c) workflow_dispatch input is allowed for ad-hoc backfills,
# but the script validates --date through the same
# utcDayBounds() guard the cron path uses.
# (d) The job commits its outputs (data/reconciliation/stripe/*
# and data/reconciliation/.reconcile-state.json) so the
# audit trail lives in git, not action artifacts.

on:
schedule:
# Daily 08:00 UTC. Verifier check 17 expects this exact cron string.
- cron: '0 8 * * *'
workflow_dispatch:
inputs:
date:
description: 'UTC calendar day to reconcile (YYYY-MM-DD). Empty → yesterday UTC.'
required: false
default: ''
dry_run:
description: 'Skip DB / Stripe / disk / webhook calls.'
required: false
default: 'false'
type: boolean

permissions:
# `contents: write` is reserved for the opt-in auto-push step
# (gated by vars.RECONCILE_AUTO_PUSH). When the variable is unset,
# the step is skipped and the token is unused.
contents: write
issues: write

concurrency:
# One reconciliation at a time. A 2nd manual run while a cron run is
# in flight queues rather than racing the state file.
group: stripe-reconciliation
cancel-in-progress: false

jobs:
reconcile:
runs-on: ubuntu-latest
timeout-minutes: 15
env:
DATABASE_URL: ${{ secrets.RECONCILE_DATABASE_URL }}
# Per spec: use a Stripe restricted key with
# rak_balance_transaction_read + rak_transfer_read scopes only.
# Repo secret name = STRIPE_RECONCILE_KEY (rotate independently
# of the platform STRIPE_SECRET_KEY).
STRIPE_RECONCILE_KEY: ${{ secrets.STRIPE_RECONCILE_KEY }}
SLACK_RECONCILE_WEBHOOK: ${{ secrets.SLACK_RECONCILE_WEBHOOK }}
DISCORD_RECONCILE_WEBHOOK: ${{ secrets.DISCORD_RECONCILE_WEBHOOK }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RECONCILE_REPO_SLUG: ${{ github.repository }}
steps:
- uses: actions/checkout@v4
with:
# Auto-push is opt-in (see step below). Default checkout is
# shallow; deepen only if we actually intend to push.
fetch-depth: 1

- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- run: npm ci

- name: Build @settlegrid/rails
run: npm --workspace @settlegrid/rails run build

- name: Run reconciliation
# Bind workflow_dispatch inputs to env vars instead of pasting
# them via `${{ ... }}` template substitution. The `${{ }}`
# form is expanded by GitHub BEFORE the shell sees it, so a
# malicious `date: 2026-04-23 && rm -rf /` would inject. The
# env-var form passes the value through `process.env` and the
# shell's quoting; safe.
env:
INPUT_DATE: ${{ github.event.inputs.date }}
INPUT_DRY_RUN: ${{ github.event.inputs.dry_run }}
run: |
set -euo pipefail
ARGS=()
if [[ -n "${INPUT_DATE:-}" ]]; then
# Reject anything but YYYY-MM-DD up-front so we never feed
# an unvalidated string to the script even on a misconfigured
# input. The script also re-validates via utcDayBounds.
if ! [[ "${INPUT_DATE}" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
echo "Invalid date input: ${INPUT_DATE}" >&2
exit 2
fi
ARGS+=(--date "${INPUT_DATE}")
fi
if [[ "${INPUT_DRY_RUN:-false}" == "true" ]]; then
ARGS+=(--dry-run)
fi
npx tsx scripts/reconcile-stripe.ts "${ARGS[@]}"

- name: Upload reconciliation report
if: ${{ github.event.inputs.dry_run != 'true' }}
uses: actions/upload-artifact@v4
with:
name: stripe-reconciliation-${{ github.run_id }}
path: data/reconciliation/
retention-days: 90
if-no-files-found: warn

- name: Commit reconciliation report and state (opt-in)
# Auto-push is OPT-IN via the `RECONCILE_AUTO_PUSH` repo
# variable. Default-off because pushing data files to the
# default branch triggers Vercel rebuilds on every nightly
# run, which burns the deploy budget. Operators who need an
# in-git audit trail can set
# `vars.RECONCILE_AUTO_PUSH=true` in the repo's "Variables"
# tab; the commit-and-push path will then run.
if: ${{ github.event.inputs.dry_run != 'true' && vars.RECONCILE_AUTO_PUSH == 'true' }}
env:
REF_NAME: ${{ github.ref_name }}
run: |
set -euo pipefail
if [[ -z "$(git status --porcelain data/reconciliation/)" ]]; then
echo "No reconciliation changes to commit."
exit 0
fi
git config user.name 'settlegrid-bot'
git config user.email 'bot@settlegrid.dev'
git add data/reconciliation/
git commit -m "chore(reconcile): nightly Stripe reconciliation $(date -u +%Y-%m-%d)"
git push origin "HEAD:${REF_NAME}"
Loading
Loading