Defensibility moats + viral growth loops - #2
Merged
Merged
Conversation
Compiles YAML Playbooks into an executable state machine. Stateful,
guardrail-aware, observable composition of skills/instructions/tools
is the orchestration moat — individual skills are commodities, the
runtime is not.
- src/lib/runtime/types.ts: CompiledPlaybook, StepOutcome, RunResult;
adapter interfaces for skill/tool/instruction invocation, memory,
tracer, guardrail middleware, telemetry sink
- src/lib/runtime/compile.ts: parses YAML actions
(skill:<slug> | tool:<name> | instruction) into CompiledStep with
on_error and retry policies
- src/lib/runtime/expr.ts: restricted expression evaluator for `when`
clauses — ${path} interpolation + ==, !=, contains, &&, ||, !, ();
no JS eval
- src/lib/runtime/run.ts: executor with conditional gating,
retry+backoff, pre/post guardrail middleware, in-memory default
store, OTel-compatible tracer hook, telemetry emission compatible
with Phase 2 ingestion
- scripts/run-playbook.mjs + npm playbook:run with --mock or
--gateway (AI gateway env)
- tests/runtime.test.mjs: 6 cases (compile+run, conditional skip,
abort vs continue, retry, guardrail block, expression evaluator)
Skill invocation is delegated via adapter so production wiring can
route to SkillForge / MCP without runtime changes.
Integrations become first-class packages alongside skills/playbooks/ souls/guardrails. Telemetry per action invocation creates the data flywheel that ranks skills by real workspace effectiveness — a moat no one-prompt clone can replicate without traffic. - content/schemas/integration.schema.json + 4 seed integrations (github, slack, linear, datadog) with side_effect taxonomy - scripts/validate-content.mjs: validates "integration" type - src/lib/integrations/registry.ts: typed loader, action executor with OAuth/api-key auth, scope enforcement, destructive-action protection, path interpolation, JSON body splitting; helper buildToolInvoker bridges into the Phase 3 Playbook runtime via tool:<slug>.<action_id> - src/routes/api/integrations.$slug.install.ts: OAuth authorize URL + api_key install instructions endpoint - supabase migration: integration_installations (per workspace, unique by slug, RLS) + integration_action_runs (anonymized telemetry per action invocation) - tests/integrations.test.mjs: 7 cases (load seed, OAuth path/body split, destructive guard, scope enforcement, api_key header, runtime bridge, missing path param)
Adds 4 proprietary verticalized Souls calibrated against the Phase 1 adversarial harness. Each Soul encodes regulator-specific wording, do/dont lists, and tone defaults that one-prompt clones can't easily reproduce. - content/souls/fintech-compliance.yaml: SEC/FINRA/PCI-DSS/CFPB - content/souls/healthcare-hipaa.yaml: Safe Harbor + red-flag escalation - content/souls/soc2-auditor.yaml: TSC-mapped findings, independence - content/souls/k8s-sre.yaml: blast-radius first, reversible remediation - scripts/build-soul-finetune-dataset.mjs: emits JSONL pairing each Soul with adversarial cases that share its tags, producing fine-tuning seed data (data-team pipeline plugs in via --source=db)
Adds Ed25519 signing + offline verification on top of the existing release bundle builder. Air-gapped enterprise can vendor the bundle plus SIGNING_PUBLIC_KEY.pem and verify integrity without internet — something a fork cannot offer without owning the signing key. - scripts/sign-release-bundle.mjs: signs every artifact in dist/release with SIGNING_PRIVATE_KEY env, writes <file>.sig + SIGNATURES.json manifest + SIGNING_PUBLIC_KEY.pem - scripts/verify-release-bundle.mjs: offline verifier; checks public-key fingerprint matches manifest, then sha256 + Ed25519 signature per file - npm release:sign, release:verify - tests/release-signing.test.mjs: round-trip, tampered-file detection, wrong-key rejection (3 cases)
Two compounding viral loops monetised via a single payouts ledger: 1. Referral 12-month window — author A refers author B with ?ref=@A; when B sells a premium package, A receives 10% of revenue for 12 months from B's signup. 2. Package lineage — fork attribution survives forever; upstream authors receive their bps cut every time a descendant sells. - supabase migration: referral_codes, referrals (12mo expires_at), package_lineage (fork/adaptation/translation/derivative with rev_share_bps), revenue_share_payouts ledger (RLS scoped to payee) - src/lib/growth/revenue-split.ts: pure split function returning PayoutLine[] for platform/author/referral/lineage; bps math, expired referral skipped, self-referrals skipped, lineage takes from author - src/lib/growth/lineage.ts: ancestry walk with depth cap and cycle protection - tests/growth-revenue-split.test.mjs: 7 cases (defaults, referral active/expired, lineage single/chain, self-edge guard, ancestry)
Two SEO/viral surfaces: 1. Trust badge — shields.io-style SVG served at GET /api/badges/trust/<slug>.svg with 5-min edge cache. Authors embed in READMEs/PR comments; every impression is a backlink and a social proof anchor. Color buckets follow Phase 2 badgeColor() (green ≥85, yellow ≥70, orange ≥50, red below). Gracefully degrades to a gray "—" badge on DB error. 2. /compare/<slug-a>-vs-<slug-b> — programmatic SEO landing pages auto-generated from the registry: trust score, adversarial pass rate, 7d installs, descriptions, deep links to each package, and a copy-paste badge snippet. One indexable URL per pair. - src/lib/badges/trust-badge.ts: pure SVG renderer (no external font), XSS-escapes label, includes adversarial variant per vertical - src/routes/api/badges.trust.$slug.svg.ts - src/routes/compare.$pair.tsx - tests/trust-badge.test.mjs: 5 cases (score, missing, color buckets, XSS escape, adversarial variant)
Standalone CLI in cli/ published as the "super-agent" npm package. Drops Anthropic-compatible SKILL.md (or each agent's local format) into the cwd so Claude Code, Cursor, Continue, or Cline picks the skill up without any login or platform account. - cli/super-agent.mjs: install/list/search/info commands; multi- target writer (.claude, .cursor, .continue, .cline); falls back to a synthesized SKILL.md when the export endpoint is unavailable; anonymized telemetry POST is opt-out via SUPER_AGENT_TELEMETRY=0 - cli/package.json + README.md: bin entry "super-agent" makes `npx super-agent install code-reviewer` work directly after publish - tests/cli-install.test.mjs: 4 smoke tests (help, unknown command, missing slug, bin declaration) Distribution mechanic: zero-friction install is the top-of-funnel. Telemetry per install feeds Phase 2 / Phase 4 ranking signal.
Two public surfaces that turn the registry's trust + telemetry data into viral growth loops with concrete financial incentives. Bounties - supabase: skill_bounties (vertical, reward, trust+adversarial thresholds, deadline, status) + bounty_submissions (unique per package, snapshot scores at submission) - src/lib/growth/bounties.ts: pure checkEligibility() returning typed reason codes (BOUNTY_NOT_OPEN, DEADLINE_PASSED, TRUST_BELOW, ADVERSARIAL_BELOW, VERTICAL_MISMATCH, OK) - src/routes/bounties.tsx: public board sorted by reward, deep-link to submission page, "post a bounty" CTA - RLS: public bounties readable; submissions readable by submitter or bounty poster Leaderboard - supabase: materialized view affiliate_leaderboard_30d joining referrals + revenue_share_payouts over 30d - rankLeaderboard(): activations × earnings score with earnings tiebreak; topN cap - src/routes/leaderboard.tsx: public ranking with handle lookup, prompts visitors to grab their referral link - tests/bounties.test.mjs: 7 cases (eligibility happy + each failure reason; leaderboard ranking + topN)
Wires the new growth tables into existing flows and adds the operational scaffolding promised in the PR description. Referral capture - src/routes/signup.tsx and login.tsx: captureRefFromUrl() on mount, claimReferral() on successful session, clearStoredRef() after a confirmed claim. First-touch attribution preserved. Fork + lineage - src/lib/skills/fork.functions.ts: forkPackage server fn copies the latest version into a new draft owned by the caller and writes package_lineage so the upstream author shares revenue forever; on lineage-insert failure the new package is rolled back. Schema reconciliation - supabase/migrations/20260513040000_referral_lineage.sql rewritten as additive: keeps existing public.referrals + referral_rewards untouched, just adds revshare_expires_at + revshare_bps columns and creates package_lineage + revenue_share_payouts. - supabase/migrations/20260513050000_bounties_leaderboard.sql: affiliate_leaderboard_30d now joins on referrer_id (matches existing schema). Cron + recompute - supabase/migrations/20260513060000_refresh_cron.sql: pg_cron schedules — skill_performance_daily every 15 min, affiliate_leaderboard_30d hourly, recompute_trust_scores() nightly at 03:17 UTC. Trust Score formula mirrors the TS computeTrustScore() so on-DB and in-app numbers agree. CI + env - .github/workflows/test.yml: runs the 10 new test files on every PR (plain node:test + --experimental-strip-types for TS-source). - .env.example: documents SIGNING_PRIVATE_KEY, SIGNING_PUBLIC_KEY, TELEMETRY_SALT, AI gateway, and CLI overrides.
Fills the gaps referenced from the bounties board + adds visible
lineage attribution on package pages so the viral revenue-share
loops have user-facing surfaces, not just DB rows.
- src/lib/growth/bounties.functions.ts: postBounty + submitToBounty
server fns; submit auto-evaluates against package_trust_scores and
uses checkEligibility() to return typed reason codes; optimistic
atomic claim transitions skill_bounties.status from open→claimed
- src/routes/bounties.new.tsx: post form (title, brief, vertical,
reward USD, trust + adversarial thresholds, optional deadline)
- src/routes/bounties.\$id.tsx: detail page + slug-based submission;
surfaces rejection reasons; respects closed bounties
- src/components/lineage/LineageCard.tsx: client component that
renders parent attribution ("Fork of X, upstream gets 5% of sales")
and descendant fork count, with deep links — drops in on any
package page
- package.json: npm test aggregates plain + --experimental-strip-types
suites (test:plain + test:ts); 54/54 green
Four additional viral surfaces, each driving its own loop. Skill of the Week - supabase migration: skill_of_the_week table + pick_skill_of_the_week() PL/pgSQL that scores by trust × adversarial × ln(installs_7d + 1) with a 1.25× novelty bonus for first-time winners; pg_cron picks Mondays 14:00 UTC; idempotent ON CONFLICT (week_starting) - src/routes/skill-of-the-week.tsx: current winner card with trust / adv / installs stats, trust badge link, prefilled Twitter intent; scrollable past-winners list /use-case programmatic SEO - src/lib/seo/use-cases.ts: 8 curated buyer-intent entries across security, fintech, healthcare, devops, general - src/routes/use-case.\$vertical.\$task.tsx: ranks top 10 published skills overlapping required tags by trust score; recommends souls and integrations; ships an npx super-agent install snippet - src/routes/use-cases.tsx: index of all use cases by vertical Skill collections - supabase migration: skill_collections (slug, curator_share_bps, cover_emoji, is_public) + skill_collection_items + followers; RLS scoped to curator for writes and public-readability - src/routes/collections.\$slug.tsx: ordered list with curator notes, ?from_collection= attribution param, shell snippet to bulk-install via npx super-agent install Author tipping (1-click) - supabase migration: author_tip_intents with Stripe intent linkage + status enum; package_tip_totals view for "❤ \$N tipped" badges - src/lib/growth/tips.functions.ts: createTipIntent server fn with self-tip guard, unpublished-package guard, audit-friendly insert - src/components/tips/TipAuthorButton.tsx: \$1/\$5/\$25 quick tips, optional 280-char note, dispatches sas:tip-intent-created event for the existing Stripe.js handler to pick up - 100% to the author by design — viral signal > platform fee npm test still 54/54.
The line 'HIPAA Safe Harbor: redact identifiers by default' was parsed
as a YAML mapping ({ 'HIPAA Safe Harbor': 'redact identifiers...' })
instead of a string, failing schema validation (/values/1 must be
string). Quoting all four values makes intent explicit.
The remaining 8 validate-content failures (skills with fewer than 2
examples) predate this PR — see PR description.
CI fix - Eight security skills had a single example each; schema requires minItems: 2 and the validate workflow was failing as soon as any content/** file changed in a PR. Added a plausible second example to each of: cloud-misconfig-auditor, dependency-vuln-auditor, disk-image-forensics, incident-response-triage, osint-investigator, owasp-code-audit, prompt-injection-tester, recon-attack-surface. Validator now passes: 27 packages + 10 adversarial cases ✓. Shareable run page (in-progress viral feature) - supabase migration: shared_runs table with share_token, view_count, redacted flag, public-read RLS - src/lib/runs/shared.functions.ts: createSharedRun server fn — prompt-injection-guarded, package_not_published guard, anonymous allowed; returns share_token for the URL - src/routes/run.\$slug.tsx: prompt → output renderer with rotating watermark, ?token= replay, view-counter increment, clipboard share-link copy, CLI install CTA, signup CTA for full output
7 tasks
6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements the 6-phase defensibility plan that emerged from the repo audit, plus 4 viral growth features. Each phase ships as one commit with tests.
Defensibility (Phases 1-6 + injection guard)
content/adversarial/,src/lib/adversarial/): proprietary case catalog across 5 verticals (security, fintech, healthcare, devops, general) + severity-weighted scorer + CLInpm run eval:adversarial. Supabase migration addsadversarial_cases+adversarial_runswith RLS.src/lib/trust/): Ed25519 release signing with canonical-JSON hashing, anonymized execution telemetry endpoint (/api/telemetry), transparent 8-dimension Trust Score, materialized perf view.src/lib/security/): 7-category detector (override, role hijack, tool injection, exfil, encoding evasion, policy bypass, prompt leak) integrated intouploads.server.ts. Rejects ≥ high, fences + neutralizes the rest, audits everything toupload_injection_audit.src/lib/runtime/): YAML → state machine with conditional gating, retry/backoff, pre/post guardrail middleware, restricted expression evaluator (no JS eval), telemetry emission. CLInpm run playbook:run.content/integrations/,src/lib/integrations/): integrations as first-class packages with seeds for GitHub/Slack/Linear/Datadog, side-effect taxonomy (read/write/destructive, destructive blocked by default), OAuth/api-key auth + scope enforcement, bridges into the Playbook runtime viatool:<slug>.<action>.content/souls/): proprietary Souls for fintech compliance, HIPAA, SOC 2 auditor, K8s SRE; fine-tune dataset extractor stub.scripts/sign-release-bundle.mjs,verify-release-bundle.mjs): Ed25519-signed release artifacts with offline verifier — unblocks air-gapped enterprise.Viral growth (4 features)
src/lib/growth/): 12-month referral window paying 10% to the referrer; forks pay a bps cut upstream forever viapackage_lineage; singlerevenue_share_payoutsledger./compare(src/lib/badges/,src/routes/compare.$pair.tsx): shields.io-style badge served at/api/badges/trust/<slug>.svg(5-min edge cache) — embeddable in any README/PR. Programmatic SEO compare pages auto-generated per skill pair.npx super-agent install(cli/): one-line install for Claude Code, Cursor, Continue, Cline. No login for public packages; opt-out telemetry feeds Phase 2 ingestion.src/routes/bounties.tsx,leaderboard.tsx): companies post bounties with trust/adversarial thresholds; auto-awarded when a submission qualifies. 30-day affiliate leaderboard ranks referrers byactivations × earnings.Test plan
node --test tests/adversarial-harness.test.mjs— 3/3node --test tests/trust.test.mjs— 2/2node --experimental-strip-types --test tests/prompt-injection-guard.test.mjs— 10/10node --experimental-strip-types --test tests/runtime.test.mjs— 6/6node --experimental-strip-types --test tests/integrations.test.mjs— 7/7node --test tests/release-signing.test.mjs— 3/3node --experimental-strip-types --test tests/growth-revenue-split.test.mjs— 7/7node --experimental-strip-types --test tests/trust-badge.test.mjs— 5/5node --test tests/cli-install.test.mjs— 4/4node --experimental-strip-types --test tests/bounties.test.mjs— 7/720260513000000→20260513050000) in orderSIGNING_PRIVATE_KEY/SIGNING_PUBLIC_KEY/TELEMETRY_SALTin prodcli/to npm assuper-agentpackage_trust_scores+affiliate_leaderboard_30dmaterialized viewreferral_codesandpackage_lineageinto existing signup + fork UI flows/compare/<a>-vs-<b>,/bounties,/leaderboardNotes
validate:contentare unrelated to this PR; the adversarial validator code path passes cleanly.Generated by Claude Code