Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -192,5 +192,8 @@ jobs:
- name: Type check
run: npx tsc --noEmit

- name: Site tests
run: npm run test:site

- name: Build
run: npm run build
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Changelog

## 0.2.0-beta.1 - 2026-05-25

- declare the repository beta release line across the runtime, site package, and default user-agent strings
- keep the supported deployment scope constrained to the verified container image plus external Postgres path
- preserve the onboarding, observability, and verification docs as the authoritative operator surface for beta use
16 changes: 8 additions & 8 deletions OVERVIEW.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@

This repository contains two distinct surfaces:

- `guard-rail-engine/` is the runtime. It is the container-first Rust service that enforces route and policy rules, persists audit and replay data, and exposes the operational endpoints used in the pilot deployment.
- `guard-rail-engine/` is the runtime. It is the container-first Rust service that enforces route and policy rules, persists audit and replay data, and exposes the operational endpoints used in the beta deployment.
- `app/` is the marketing site. It presents the product story, but it is not part of the control plane and does not participate in request enforcement.

That split matters operationally: the landing page can change independently of the runtime, while the runtime remains the source of truth for request handling, policy enforcement, and execution records.

## Current Product Shape

Guard Rail is a policy enforcement runtime for internal API traffic. The current implementation is centered on a pilot deployment that evaluates a request before forwarding it to an upstream API.
Guard Rail is a beta policy enforcement runtime for internal API traffic. The current implementation is centered on a beta deployment that evaluates a request before forwarding it to an upstream API.

The runtime currently exposes these surfaces:
- route execution for `POST /v1/execute/{route_id}`-style traffic
Expand All @@ -20,7 +20,7 @@ The runtime currently exposes these surfaces:
- audit logging and audit persistence for every execution
- replay capture and replay persistence for later investigation
- readiness and metrics endpoints for health and operations
- admin and maintenance commands for the pilot deployment path
- admin and maintenance commands for the beta deployment path

The important boundary is that Guard Rail governs the request path, not the upstream application itself.

Expand All @@ -37,7 +37,7 @@ That model reflects the current runtime shape:
- config is mounted in from disk
- secrets are injected through the environment

This is the deployment path the docs and verification package are aligned to. Other packaging choices may exist in the repo, but they are not the recommended pilot path.
This is the deployment path the docs and verification package are aligned to. Other packaging choices may exist in the repo, but they are not the recommended beta path.

## Request Flow

Expand Down Expand Up @@ -68,25 +68,25 @@ Every execution is recorded so operators can reconstruct what happened, why a re

### Replay

Replay artifacts capture the request context needed for later analysis and verification. In the current pilot posture, replay is an operational record, not a productized end-user workflow.
Replay artifacts capture the request context needed for later analysis and verification. In the current beta posture, replay is an operational record, not a productized end-user workflow.

### Runtime Health

Readiness and metrics are part of the current operational contract. They exist so the runtime can be deployed behind a proxy/LB and observed like a production service, even though the product itself is still in pilot posture.
Readiness and metrics are part of the current operational contract. They exist so the runtime can be deployed behind a proxy/LB and observed like a production service, even though the product itself is still in beta posture.

## Data and Operations

The operator-facing docs are split by concern:

- `guard-rail-engine/deploy/container/DATA_OPERATIONS.md` covers cleanup, backup, restore, and rollback.
- `guard-rail-engine/deploy/observability/` covers metrics, alerts, dashboards, and runbooks.
- `guard-rail-engine/deploy/verification/README.md` covers the pilot verification suite and its expected scenarios.
- `guard-rail-engine/deploy/verification/README.md` covers the beta verification suite and its expected scenarios.

Those documents are the authoritative operational references for the current runtime posture.

## Verification-Backed Position

This repo should be described as a verified pilot runtime, not as a roadmap-era platform promise.
This repo should be described as a verified beta runtime, not as a roadmap-era platform promise.

That means the docs should stay aligned with what is actually covered by the current deployment and verification package:
- containerized runtime deployment
Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# Guard Rail

Guard Rail is a policy enforcement runtime for internal API traffic. It sits between trusted clients and upstream APIs, evaluates requests against route and policy definitions, and either forwards the request or blocks it with an auditable verdict.
Guard Rail is a beta policy enforcement runtime for internal API traffic. It sits between trusted clients and upstream APIs, evaluates requests against route and policy definitions, and either forwards the request or blocks it with an auditable verdict.

The repo has two user-facing parts:
- `guard-rail-engine/` for the Rust runtime
- `app/` for the marketing site, which is separate from the runtime

## Blessed deployment path
## Blessed beta deployment path

The supported pilot deployment is:
The supported beta deployment is:

`container image + external Postgres + reverse proxy/LB`

Expand All @@ -22,7 +22,7 @@ The runtime is not positioned as a standalone VM install, a Docker Compose produ

## What the runtime does

The engine currently covers the pilot-grade request flow:
The engine currently covers the beta runtime request flow:
- route lookup and method checks
- request authentication and authorization surfaces
- policy evaluation before forwarding
Expand All @@ -32,7 +32,7 @@ The engine currently covers the pilot-grade request flow:

## Docs

Start here for pilot onboarding:
Start here for beta onboarding:
- Pilot onboarding: [guard-rail-engine/deploy/onboarding/README.md](guard-rail-engine/deploy/onboarding/README.md)
- Quickstart: [guard-rail-engine/deploy/onboarding/quickstart.md](guard-rail-engine/deploy/onboarding/quickstart.md)
- API reference: [guard-rail-engine/deploy/onboarding/api-reference.md](guard-rail-engine/deploy/onboarding/api-reference.md)
Expand All @@ -47,6 +47,6 @@ Use these repo-native docs for supported operator workflows:

## Current scope

Guard Rail is focused on the runtime and its pilot deployment story. It is intentionally not framed here as a full SaaS platform, management console, or multi-environment control plane.
Guard Rail is focused on the runtime and its beta deployment story. It is intentionally not framed here as a full SaaS platform, management console, or multi-environment control plane.

For runtime surfaces and repo-local evaluation, start with the pilot onboarding docs above.
For runtime surfaces and repo-local evaluation, start with the beta onboarding docs above.
8 changes: 4 additions & 4 deletions app/components/hero.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export function Hero() {
<div className="inline-flex items-center gap-2 px-3.5 py-1.5 border border-cyan/30 bg-cyan/5 rounded-full mb-8 sm:mb-10 w-fit">
<span className="w-1.5 h-1.5 bg-cyan rounded-full pulse-dot" style={{ boxShadow: "0 0 8px var(--cyan)" }} />
<span className="font-mono text-[10px] tracking-[0.15em] uppercase text-cyan">
Verified pilot runtime for internal APIs
Verified beta runtime for internal APIs
</span>
</div>

Expand All @@ -29,7 +29,7 @@ export function Hero() {

<p className="text-[17px] sm:text-[19px] text-white/55 leading-[1.65] font-light max-w-[480px] mb-9 sm:mb-11">
A policy enforcement runtime that inspects requests before they reach
upstream APIs. Built for the current pilot deployment path and the
upstream APIs. Built for the current beta deployment path and the
operational controls that go with it.
</p>

Expand All @@ -46,7 +46,7 @@ export function Hero() {
(e.currentTarget as HTMLElement).style.boxShadow = "none";
}}
>
Request Pilot Access
Request Beta Access
<svg width="14" height="14" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M7 17L17 7M17 7H7M17 7v10" />
</svg>
Expand Down Expand Up @@ -113,7 +113,7 @@ export function Hero() {
style={{ background: "rgba(12,12,16,0.7)" }}
>
<span className="w-1.5 h-1.5 rounded-full flex-shrink-0 bg-cyan" style={{ boxShadow: "0 0 6px var(--cyan)" }} />
<span className="text-white/60">Pilot-verified runtime path</span>
<span className="text-white/60">Beta-verified runtime path</span>
</div>
</div>
</div>
Expand Down
4 changes: 2 additions & 2 deletions app/components/nav.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ export function Nav() {
href="#pilot-contact"
className="border border-white/20 px-3 py-2 font-mono text-[10px] font-bold tracking-[0.1em] text-white uppercase no-underline transition-all duration-300 hover:bg-white hover:text-black sm:px-5 sm:py-2.5 sm:text-[11px]"
>
<span className="sm:hidden">Access</span>
<span className="hidden sm:inline">Get Access</span>
<span className="sm:hidden">Beta</span>
<span className="hidden sm:inline">Get Beta Access</span>
</a>
</div>
</nav>
Expand Down
4 changes: 2 additions & 2 deletions app/components/pricing.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ export function Pricing() {
href="#pilot-contact"
className="font-mono text-[11px] font-bold tracking-[0.12em] uppercase px-3.5 py-3.5 text-center no-underline block transition-all duration-300 border border-white/15 text-white/50 hover:border-white/40 hover:text-white"
>
Start Pilot
Start Beta
</a>
</div>

Expand Down Expand Up @@ -221,7 +221,7 @@ export function Pricing() {
href={docsUrl}
className="font-mono text-[12px] tracking-[0.1em] uppercase text-white/70 border border-white/15 px-5 py-3 no-underline hover:text-white hover:border-white/40 transition-all duration-200"
>
Pilot Docs
Beta Docs
</a>
</div>
</div>
Expand Down
2 changes: 1 addition & 1 deletion app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ export default function Home() {

{/* ── Corner Tag ── */}
<div className="hidden sm:block fixed right-7 bottom-6 z-50 font-mono text-[9px] tracking-[0.2em] uppercase text-white/25 mix-blend-difference">
Pilot / Policy Runtime
Beta / Policy Runtime
</div>

<Nav />
Expand Down
2 changes: 1 addition & 1 deletion guard-rail-engine/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion guard-rail-engine/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "guard-rail-engine"
version = "0.1.0"
version = "0.2.0-beta.1"
edition = "2024"

[[bin]]
Expand Down
2 changes: 1 addition & 1 deletion guard-rail-engine/config/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ policies_dir: "./config/policies/"

forwarding:
default_timeout_ms: 5000
user_agent: "GuardRail/0.1.0"
user_agent: "GuardRail/0.2.0-beta.1"

logging:
level: "info"
Expand Down
2 changes: 1 addition & 1 deletion guard-rail-engine/deploy/container/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ policies_dir: "/etc/guard-rail-engine/policies/"

forwarding:
default_timeout_ms: 5000
user_agent: "GuardRail/0.1.0"
user_agent: "GuardRail/0.2.0-beta.1"

logging:
level: "info"
Expand Down
2 changes: 1 addition & 1 deletion guard-rail-engine/examples/pilot-demo/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ policies_dir: "./examples/pilot-demo/policies/"

forwarding:
default_timeout_ms: 3000
user_agent: "GuardRailDemo/0.1.0"
user_agent: "GuardRailDemo/0.2.0-beta.1"

logging:
level: "info"
Expand Down
4 changes: 2 additions & 2 deletions guard-rail-engine/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ fn default_timeout() -> u64 {
}

fn default_user_agent() -> String {
"GuardRail/0.1.0".to_string()
"GuardRail/0.2.0-beta.1".to_string()
}

#[derive(Debug, Clone, Deserialize)]
Expand Down Expand Up @@ -591,7 +591,7 @@ rate_limit: {}
let config = AppConfig::load(tmp.path()).unwrap();
assert_eq!(config.server.request_body_limit_bytes, 1_048_576);
assert_eq!(config.forwarding.default_timeout_ms, 5000);
assert_eq!(config.forwarding.user_agent, "GuardRail/0.1.0");
assert_eq!(config.forwarding.user_agent, "GuardRail/0.2.0-beta.1");
assert_eq!(config.logging.level, "info");
assert_eq!(config.logging.format, "json");
assert_eq!(config.database.max_connections, 10);
Expand Down
Loading
Loading