diff --git a/site/src/layouts/RedirectLayout.astro b/site/src/layouts/RedirectLayout.astro new file mode 100644 index 0000000..bc6edcb --- /dev/null +++ b/site/src/layouts/RedirectLayout.astro @@ -0,0 +1,57 @@ +--- +// Standalone redirect stub for the retired augur site. The marketing and docs +// content now live on the CorvidLabs hub, so every route here meta-refreshes to +// its hub equivalent and declares the hub URL as canonical. Kept dependency-free +// (no Header/Footer/tokens) so it can't link back into the retired pages. +interface Props { + title: string + destination: string +} +const { title, destination } = Astro.props +--- + + + + + + + + + {title} + + + +
+

This site has moved.

+

The augur site now lives on the CorvidLabs hub. You're being redirected automatically.

+ This site has moved to CorvidLabs → +
+ + diff --git a/site/src/lib/hub.ts b/site/src/lib/hub.ts new file mode 100644 index 0000000..11780e6 --- /dev/null +++ b/site/src/lib/hub.ts @@ -0,0 +1,3 @@ +// Destinations on the CorvidLabs hub that supersede this retired site. +export const HUB_MARKETING = 'https://corvidlabs.github.io/corvidlabs-site/augur/' +export const HUB_DOCS = 'https://corvidlabs.github.io/corvidlabs-site/augur/docs/' diff --git a/site/src/pages/404.astro b/site/src/pages/404.astro index bc702f4..39d87b8 100644 --- a/site/src/pages/404.astro +++ b/site/src/pages/404.astro @@ -1,18 +1,5 @@ --- -import BaseLayout from '../layouts/BaseLayout.astro' -import Button from '../components/Button.astro' -import { base } from '../lib/path' +import RedirectLayout from '../layouts/RedirectLayout.astro' +import { HUB_MARKETING } from '../lib/hub' --- - -
-

404

-

No verdict for this page.

-

- The page you're looking for doesn't exist. Try the docs or head back home. -

-
- - -
-
-
+ diff --git a/site/src/pages/docs/[...slug].astro b/site/src/pages/docs/[...slug].astro index 1a5c4c5..b584882 100644 --- a/site/src/pages/docs/[...slug].astro +++ b/site/src/pages/docs/[...slug].astro @@ -1,17 +1,17 @@ --- import { getCollection } from 'astro:content' -import DocsLayout from '../../layouts/DocsLayout.astro' +import RedirectLayout from '../../layouts/RedirectLayout.astro' +import { HUB_DOCS } from '../../lib/hub' export async function getStaticPaths() { const entries = await getCollection('docs') return entries .filter(e => e.slug !== 'index') - .map(entry => ({ params: { slug: entry.slug }, props: { entry } })) + .map(entry => ({ params: { slug: entry.slug }, props: { slug: entry.slug } })) } -const { entry } = Astro.props -const { Content } = await entry.render() +const { slug } = Astro.props +// Preserve deep links: map each retired doc slug to its hub docs equivalent. +const destination = `${HUB_DOCS}${slug}/` --- - - - + diff --git a/site/src/pages/docs/index.astro b/site/src/pages/docs/index.astro index e7e6644..73c81e8 100644 --- a/site/src/pages/docs/index.astro +++ b/site/src/pages/docs/index.astro @@ -1,10 +1,5 @@ --- -import { getEntry } from 'astro:content' -import DocsLayout from '../../layouts/DocsLayout.astro' -const entry = await getEntry('docs', 'index') -if (!entry) throw new Error('docs/index entry not found') -const { Content } = await entry.render() +import RedirectLayout from '../../layouts/RedirectLayout.astro' +import { HUB_DOCS } from '../../lib/hub' --- - - - + diff --git a/site/src/pages/index.astro b/site/src/pages/index.astro index ea10500..39d87b8 100644 --- a/site/src/pages/index.astro +++ b/site/src/pages/index.astro @@ -1,246 +1,5 @@ --- -import BaseLayout from '../layouts/BaseLayout.astro' -import Badge from '../components/Badge.astro' -import Button from '../components/Button.astro' -import Terminal from '../components/Terminal.astro' -import Verdict from '../components/Verdict.astro' -import Callout from '../components/Callout.astro' -import { base } from '../lib/path' -import fs from 'node:fs' -import path from 'node:path' -import { fileURLToPath } from 'node:url' - -// Read the released version from the CHANGELOG at build time so the hero badge -// never drifts behind a release (same source as the header). -const changelog = fs.readFileSync( - path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../CHANGELOG.md'), - 'utf-8', -) -const VERSION = `v${changelog.match(/##\s*\[v?([0-9][^\]\s]*)\]/)?.[1] ?? '0.0.0'}` - -const signals = [ - { name: 'sensitivity', catches: 'Touches secrets, auth, crypto, payments, migrations, infra, CI, or dependency manifests.' }, - { name: 'test-gap', catches: 'Code changed with no test in the changeset, or, with coverage, the uncovered fraction of changed lines.' }, - { name: 'churn', catches: 'Hot files that change constantly are fragile.' }, - { name: 'coupling', catches: "A file's usual co-change partner is absent from the change." }, - { name: 'diff-shape', catches: 'Large single-file edits are harder to review.' }, - { name: 'ownership', catches: 'Bus-factor (single author) or diffuse ownership (many authors).' }, - { name: 'incident', catches: "The file's own history of reverts / hotfixes." }, - { name: 'codeowners', catches: "A changed file with no declared owner in the repo's CODEOWNERS." }, -] +import RedirectLayout from '../layouts/RedirectLayout.astro' +import { HUB_MARKETING } from '../lib/hub' --- - -
- -
-
-
-
- 🔮 {VERSION} · no API key · no LLM -

Graded trust
for code changes.

-

`augur` reads a diff and tells you how risky it is, and whether a human should look, as a deterministic, scriptable verdict: proceed, review, or block.

-
- - - -
-
- - -
-

Build it: swift build -c release · macOS & Linux · Swift 6 · git

-

Colored, TTY-aware output: --color auto|always|never, honors NO_COLOR; piped & JSON stay plain.

-
-
- Running augur check on a working-tree change: it returns a REVIEW verdict at risk 35 of 100 because the edited file matches the sensitive 'secrets' category. -
-
-
-
- -
-
-
    -
  • 3
    verdicts
    proceed · review · block
  • -
  • 8
    signals
    all from git + the filesystem
  • -
  • 0
    API keys
    no LLM in the core, ever
  • -
  • 0
    third-party deps
    AugurKit is Foundation-only
  • -
-
-
- -
-
-
-

Why it exists

-

Agents made code cheap.
The scarce resource is now trust.

-

`augur` turns the senior-engineer instinct ("this part is fine, that part needs a careful look") into a deterministic artifact both humans and agents can act on.

-
- - -

The missing primitive. Humans can't hand-review the volume agents produce, and agents have no native sense of "I'm out of my depth here, escalate." `augur` is that primitive: language-agnostic, CI-agnostic, requiring no API key and no LLM.

-
- -
    -
  • - -

    Humans triage

    -

    Spend review attention on the risky 10% of a 40-file PR. `augur` sorts the files riskiest-first and tells you exactly which signal fired.

    -
  • -
  • - -

    Agents gate

    -

    augur gate exits non-zero so an agent escalates to a human instead of merging blind. Drop it in a CI step or an agent loop.

    -
  • -
  • - -

    Deterministic & grounded

    -

    Every signal is derived from git history and the filesystem. No model, no network. A history calibration reports whether a score is guessing or grounded.

    -
  • -
-
-
- -
-
-
-

Eight signals, one verdict.

- Read the signal reference -
-

Each signal is a pure function over the change surface and git history, contributing a documented weight to a transparent blend. No opaque numbers.

-
    - {signals.map(s => ( -
  • -
    {s.name}
    -

    {s.catches}

    -
  • - ))} -
-
-
- -
-
-
-

Trust pipeline

-

augur scores the risk.
attest records the trust.

-

A verdict from `augur` is ephemeral: it lives for one CI run and is gone. Its sibling attest makes it durable: a signed-or-unsigned provenance note, keyed to the commit SHA, of who or what reviewed a change and at what confidence. They compose over a pipe and never link to each other.

-
-
-
augur check --json | attest sign --from-augur -   {'# record the trust'}
-attest verify --policy .attest.json               {'# gate on it'}
-
-
- -
-
-
- -
-
-

Stop merging on vibes.
Get a verdict.

-

Build augur and run your first risk assessment in under a minute.

-
- - augur check --range main..HEAD -
-
- - -
-
-
- -
-
- - +