Your AI Is "In Production." That Doesn't Mean It's Production-Ready. StackRail has published the AI Production Readiness Framework (APRF), a vendor-neutral, gated methodology for determining whether an AI application is safe to operate in production. Unlike maturity scores, APRF uses mandatory pass/fail checks that block releases if any fail, and capability is measured by the weakest pillar rather than an average. The framework covers eight domains including security, safety, data, model lifecycle, agents, reliability, cost, and governance. Stop shipping LLM features like landing pages. APRF is a gated, machine-readable production readiness framework—with code, YAML gates, and CI you can wire up this week. Most teams ship an LLM feature the same way they ship a landing page: merge the PR, watch the demo, celebrate. Then reality shows up. None of those failures look like "the model wasn't smart enough." They look like production systems without production gates. This post is the developer cut of that argument—plus the parts you can implement: allowlists, approval gates, YAML policy, CI, and a machine-readable attestation. Canonical version lives on StackRail: Your AI Is "In Production." That Doesn't Mean It's Production-Ready. https://stackrail.io/articles/ai-in-production-not-production-ready/ NIST AI RMF tells you how to think about risk. ISO/IEC 42001 tells you how to manage an AI system. SOC 2 tells auditors how to trust your company . Useful. Necessary. Incomplete for the engineer on call. The question that actually decides whether you sleep at night is simpler: Can this AI application safely operate in production? That's the question behind the AI Production Readiness Framework APRF — a vendor-neutral working draft published by StackRail https://stackrail.io/aprf/ . It's not a certification. It's not a partner network. It's not a 0–100 "readiness score" you put in a board deck. It's a gated methodology: mandatory checks either pass or they block you. Recommended controls never average into the gate. If you've ever been sold an "AI maturity score," you already know the failure mode: APRF forbids that trade. vanity score = mean all controls ❌ averages away a missing kill switch gate result = ALL mandatory checks.pass ✅ one fail = blocked capability = min pillar levels ✅ weakest pillar wins Mandatory checks are pass/fail . Failures are blockers . Capability attainment is the minimum across pillars — not a mean. You never publish a single overall percentage. If that sounds strict: good. Production is strict. +---------------------------+ +----------------------------------+ | Demo Path | | APRF Path | +---------------------------+ +----------------------------------+ +---------------+ +----------------------+ | Prompt works | | Pin APRF version | +-------+-------+ +----------+-----------+ | | v v +---------------+ +----------------------+ | Merge PR | | Run mandatory checks | +-------+-------+ +----------+-----------+ | | v v +-------------------------+ +----------------------+ | Ship in production | | All gates pass? | +-------------------------+ +-----+-----------+----+ | | No | | Yes | | v v +----------------+ +----------------+ | Block release | | Attest & ship | +----------------+ +--------+-------+ | v +----------------+ | Observe & drill| +----------------+ | Piece | What you get | |---|---| | 8 domains | Security, safety, data, model lifecycle, agents, reliability, cost, governance | | 27 pillars | Focused control areas under those domains | | Core Profile | 40 gates for Tier‑2 customer-facing AI | | Regulated Profile | 61 gates for Tier‑3 / regulated systems | | Lenses | Extra mandatories for RAG, Agents, Voice, Coding agents | | Spec + attestation | Machine-readable JSON + downloadable self-attestation | | Crosswalks | NIST AI RMF, ISO 42001, OWASP LLM Top 10, SOC 2, AWS WA, SLSA — informative only | Machine-readable source of truth: https://stackrail.io/aprf/spec/ https://stackrail.io/aprf/spec/ APRF doesn't congratulate you. It asks Core + Agents lens territory : | Gate | Requirement paraphrased | Artifact you should have | |---|---|---| TOL-M1 | Tool calls authorized server-side, not by model output alone | Gateway authz tests + deny logs | TOL-M2 | Per-agent tool allowlist; unknown tools denied | Allowlist config + negative tests | TOL-M3 | High-impact tools behind approval / dual control / policy | Impact inventory + bypass tests | HUM-M1 | High-impact actions inventoried and gated | Gate wiring evidence | AGN- / cost gates | Step budgets, kill switch, spend ceilings | Configs, drills, billing alerts | If you can't demonstrate those with artifacts , you don't get a soft yellow score. You get gate fail . User │ │ Natural language goal ▼ Agent Runtime │ │ proposed tool + args ▼ Tool Gateway │ ├─ Validate allowlist ├─ Validate JSON Schema │ ├── Invalid? │ └──► DENY logged │ └── Valid │ ├── High-impact? │ │ │ ├── Yes → Request approval │ │ │ │ │ ├── Denied → Stop │ │ └── Approved → Execute tool │ │ │ └── No → Execute with scoped credentials │ ▼ Tool CRM / Shell / Deploy │ ▼ Sanitized result │ ▼ Agent Runtime You don't need to "adopt APRF" as a religion on day one. Wire the same ideas into your stack. js import { z } from "zod"; const tools = { search docs: { impact: "read", schema: z.object { query: z.string .min 1 .max 500 } , run: async { query }: { query: string } = searchDocs query , }, update crm contact: { impact: "write", schema: z.object { contactId: z.string .uuid , fields: z.record z.string .max 200 .refine f = Object.keys f .length <= 10, "too many fields", , } , run: async args: { contactId: string; fields: Record