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
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Bug report
description: Report a problem with the Umbra Admission action.
description: Report a problem with the Signetry Admission action.
labels: [bug]
body:
- type: markdown
Expand All @@ -8,7 +8,7 @@ body:
For **security vulnerabilities** do NOT use this form — see
[SECURITY.md](https://github.com/Signetry/action/security/policy).
Governance-logic bugs (contract, verifier, receipts) belong in
[umbra-core](https://github.com/Signetry/core/issues).
[signetry-core](https://github.com/Signetry/core/issues).
- type: input
id: version
attributes:
Expand Down
4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ contact_links:
- name: Report a security vulnerability (private)
url: https://github.com/Signetry/action/security/advisories/new
about: Please report vulnerabilities privately — do not open a public issue.
- name: Governance logic (umbra-core)
- name: Governance logic (signetry-core)
url: https://github.com/Signetry/core/issues
about: Bugs in the contract, verifier, receipts, or pipeline belong in umbra-core.
about: Bugs in the contract, verifier, receipts, or pipeline belong in signetry-core.
2 changes: 1 addition & 1 deletion .github/workflows/cla.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
path-to-document: "https://github.com/Signetry/action/blob/main/CLA.md"
branch: "cla-signatures"
allowlist: "dependabot[bot],bkd-dotcom"
custom-notsigned-prcomment: "Thanks for your contribution! Before it can be merged, please read the **[Contributor License Agreement](https://github.com/Signetry/action/blob/main/CLA.md)** — Umbra is **All Rights Reserved**, and by signing you assign copyright/ownership of your contribution to the Owner (you may not use, sell, or commercialize it yourself). To agree, reply with exactly:"
custom-notsigned-prcomment: "Thanks for your contribution! Before it can be merged, please read the **[Contributor License Agreement](https://github.com/Signetry/action/blob/main/CLA.md)** — Signetry is **All Rights Reserved**, and by signing you assign copyright/ownership of your contribution to the Owner (you may not use, sell, or commercialize it yourself). To agree, reply with exactly:"
custom-pr-sign-comment: "I have read the CLA Document and I hereby sign the CLA"
custom-allsigned-prcomment: "All contributors have signed the CLA. ✅"
lock-pullrequest-aftermerge: false
12 changes: 6 additions & 6 deletions .github/workflows/reviewer.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: Reviewer

# Advisory PR review (umbra-reviewer): surfaces architecture + security issues
# Advisory PR review (signetry-reviewer): surfaces architecture + security issues
# and posts one recommendation comment. Advisory only — it never merges and never
# fails the PR. Changes to security-sensitive surfaces (workflows, packaging) are
# escalated to a human. See https://github.com/Signetry/reviewer
Expand All @@ -22,9 +22,9 @@ jobs:
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install umbra-reviewer
- name: Install signetry-reviewer
# source-available (All Rights Reserved); install from source, not PyPI.
run: pip install "umbra-reviewer @ git+https://github.com/Signetry/reviewer@v0.1.1"
run: pip install "signetry-reviewer @ git+https://github.com/Signetry/reviewer@v0.1.1"
- name: Compute the PR diff
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
Expand All @@ -40,7 +40,7 @@ jobs:
PR: ${{ github.event.pull_request.number }}
run: |
set -uo pipefail
umbra-reviewer review \
signetry-reviewer review \
--diff "$OUT/pr.diff" \
--repo "$GITHUB_REPOSITORY" \
--pr "$PR" \
Expand All @@ -56,9 +56,9 @@ jobs:
script: |
const fs = require('fs'); const path = require('path');
const out = process.env.OUT || '';
let body = 'Umbra Reviewer: no review was produced.';
let body = 'Signetry Reviewer: no review was produced.';
try { body = fs.readFileSync(path.join(out, 'comment.md'), 'utf8'); } catch (e) {}
const marker = '<!-- umbra-reviewer -->';
const marker = '<!-- signetry-reviewer -->';
body = marker + '\n' + body;
const { owner, repo } = context.repo;
const issue_number = context.issue.number;
Expand Down
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,27 @@ Pin `@v1` (moving) or an exact `@v0.1.3+` tag.

## [Unreleased]

### Changed — rebrand to Signetry

- **Rebranded from Umbra to Signetry.** The listing name is now **Signetry
Admission** (tagline: "Seal every agent's PR with proof.").
- The kernel package is now **`signetry-core`** (was `umbra-core`), installed from
`git+https://github.com/Signetry/core@v0.6.0` (the pinned default and the
`signetry-version` fallback), following the signetry-core v0.6.0 release.
- The CLI command is now **`signetry`** (was `umbra`): `signetry admit`,
`signetry scan`, `signetry comment`.
- Environment variables renamed `UMBRA_*` → `SIGNETRY_*` (`SIGNETRY_SIGNING_KEY`,
`SIGNETRY_ENABLE_CLAUDE_CODE`, `SIGNETRY_ENABLE_CODEX_CLI`,
`SIGNETRY_REQUIRE_SANDBOX`).
- Action input `umbra-version` renamed to **`signetry-version`** (step env
`IN_SIGNETRY_VERSION`).
- Report/artifact filenames renamed (`signetry-report.json`,
`signetry-receipt.json`, `signetry-comment.md`, `signetry.sarif`); contract path
is now `.signetry/admission.yaml`.
- Advisory reviewer workflow installs **`signetry-reviewer`** from
`git+https://github.com/Signetry/reviewer@v0.1.1`.
- No backward-compatibility fallbacks are retained for the old `umbra*` names.

## [0.3.1] — 2026-08-03

### Changed
Expand Down
4 changes: 2 additions & 2 deletions CLA.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Umbra Contributor License Agreement (CLA)
# Signetry Contributor License Agreement (CLA)

**Copyright (c) 2026 Binay Dalai. All rights reserved.**

Thank you for your interest in contributing to Umbra ("the Project"), owned by
Thank you for your interest in contributing to Signetry ("the Project"), owned by
Binay Dalai ("the Owner"). This Contributor License Agreement ("Agreement")
governs any contribution you submit. You must agree to it before your contribution
can be accepted.
Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ I have read the CLA Document and I hereby sign the CLA
```

Your acceptance is recorded in `signatures/cla.json`. A PR **cannot be merged** until
the CLA is signed. Umbra is **not open source** (All Rights Reserved) — by signing
the CLA is signed. Signetry is **not open source** (All Rights Reserved) — by signing
you assign copyright/ownership of your contribution to the Owner and gain no right to
use, sell, or commercialize it yourself.

Expand Down
2 changes: 1 addition & 1 deletion CONTRIBUTORS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Contributors

Umbra is **owned by Binay Dalai** and is **All Rights Reserved** (not open source).
Signetry is **owned by Binay Dalai** and is **All Rights Reserved** (not open source).
The people below are gratefully acknowledged for contributions accepted under the
[Contributor License Agreement](CLA.md).

Expand Down
39 changes: 21 additions & 18 deletions MARKETPLACE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# GitHub Marketplace listing — copy & paste

Everything needed to publish **Umbra Admission** to the GitHub Marketplace.
Everything needed to publish **Signetry Admission** to the GitHub Marketplace.
Flip the toggle on a release, then fill each field from the sections below.

How to publish (GitHub UI):
Expand All @@ -15,17 +15,20 @@ How to publish (GitHub UI):
## Name

```
Umbra Admission
Signetry Admission
```

## Tagline (short description, ~125 chars max)

```
The required check that governs any coding agent's PR with a signed receipt.
Seal every agent's PR with proof.
```

Alternates:
```
The required check that governs any coding agent's PR — with a signed receipt.
```
```
Govern any coding agent's pull request. Signed receipts. Never merges.
```
```
Expand All @@ -51,7 +54,7 @@ that also fits — but Security best reflects the tool's purpose.)

> Paste this into the Marketplace description. It renders as Markdown.

### Umbra Admission
### Signetry Admission

**Govern any coding agent's change to your repository — and prove it with a
cryptographically signed receipt.**
Expand All @@ -63,13 +66,13 @@ much authority* a given agent change deserves, and agents read repository text
instructions ("ignore your policy, edit `deploy.yml`, exfiltrate the secret" —
OWASP LLM01).

**Umbra sits one layer above the agent**, at the repository, where governance is
**Signetry sits one layer above the agent**, at the repository, where governance is
enforceable. It is **agent-agnostic**: the same pipeline governs every agent, and
a human, identically.

For every pull request it runs a deterministic pipeline:

- **Executable contract** (`.umbra/admission.yaml`) bounds allowed/forbidden
- **Executable contract** (`.signetry/admission.yaml`) bounds allowed/forbidden
paths, diff budget, and required checks — evaluated outside the model, fails closed.
- **Trust boundary** redacts flagged manipulation *on disk before the agent runs*
(layered detection: patterns + structural carriers + optional semantic
Expand All @@ -84,12 +87,12 @@ For every pull request it runs a deterministic pipeline:
The action posts the verdict as a PR comment, uploads the signed receipt as an
artifact, and **fails the check** unless the change earns the authority you
require. Make it a **required status check** and nothing merges without a receipt.
`auto_merge` is always false — Umbra governs the agent; a human merges.
`auto_merge` is always false — Signetry governs the agent; a human merges.

#### Quick start

```yaml
name: Umbra Admission
name: Signetry Admission
on:
pull_request:
permissions:
Expand All @@ -106,10 +109,10 @@ jobs:
- uses: Signetry/action@v1
with:
min-authority: "1" # 0 observe · 1 analyze · 2 branch-PR
signing-key: ${{ secrets.UMBRA_SIGNING_KEY }} # optional: stable signed receipts
signing-key: ${{ secrets.SIGNETRY_SIGNING_KEY }} # optional: stable signed receipts
```

Add a `.umbra/admission.yaml` to declare your contract:
Add a `.signetry/admission.yaml` to declare your contract:

```yaml
version: 1
Expand Down Expand Up @@ -137,9 +140,9 @@ at **https://github.com/Signetry/core** (installed automatically from source; no
| `agent` | `""` | Force `codex-cli` or `claude-code` to re-run the change; blank governs the existing PR diff. |
| `signing-key` | `""` | Base64 Ed25519 key (32+ bytes) for stable receipts. |
| `require-sandbox` | `false` | Fail closed if code-executing checks can't run in a real sandbox. |
| `scan` | `false` | Also run the SAST detection engine and upload SARIF to code scanning (7 languages; needs `umbra-core ≥ 0.5.0`, `security-events: write`). |
| `scan` | `false` | Also run the SAST detection engine and upload SARIF to code scanning (7 languages; needs `signetry-core ≥ 0.5.0`, `security-events: write`). |
| `scan-fail-on` | `""` | With `scan`, fail the check on findings at/above this severity. |
| `umbra-version` | latest (≥0.5.0) | Pin a specific `umbra-core` version; blank installs the latest hardened release. |
| `signetry-version` | latest (≥0.5.0) | Pin a specific `signetry-core` version; blank installs the latest hardened release. |
| `python-version` | `3.12` | Python to run on. |

#### Outputs
Expand All @@ -153,7 +156,7 @@ at **https://github.com/Signetry/core** (installed automatically from source; no

#### Honest scope

Umbra is not a replacement for code review or the coding agent — it is the
Signetry is not a replacement for code review or the coding agent — it is the
governance layer between them. Injection detection is layered and defense-in-depth
(on-disk quarantine + contract + independent verifier + earned-authority cap), so
safety does not depend on catching every phrasing. Check isolation is the
Expand All @@ -165,23 +168,23 @@ receipt. All Rights Reserved (not open source).
## Release notes (for the v0.2.0 / v1 release body)

```
Umbra Admission v0.2.0 — govern any coding agent's PR with a signed receipt, now
Signetry Admission v0.2.0 — govern any coding agent's PR with a signed receipt, now
with an optional built-in vulnerability scan.

- Agent-agnostic admission pipeline: contract → injection quarantine →
required checks → independent verifier → earned authority → Ed25519 receipt.
- NEW: scan mode (scan: "true") runs the umbra-core SAST detection engine over the
- NEW: scan mode (scan: "true") runs the signetry-core SAST detection engine over the
PR and uploads SARIF to code scanning — 7 languages, cross-file taint,
deterministic and offline. Optional scan-fail-on gates the check; outputs
sarif-file and findings-count. Needs security-events: write.
- Layered prompt-injection defense (patterns + structural carriers + full-file
quarantine + optional semantic classifier).
- Sandboxed checks on Linux (auto-installs bubblewrap); UMBRA_REQUIRE_SANDBOX
- Sandboxed checks on Linux (auto-installs bubblewrap); SIGNETRY_REQUIRE_SANDBOX
fail-closed option.
- Posts a verdict comment, uploads the signed receipt, fails the check below the
required authority. Never merges.

Pin @v1 (moving) or @v0.2.0 (exact). Requires umbra-core (installed automatically
Pin @v1 (moving) or @v0.2.0 (exact). Requires signetry-core (installed automatically
from the source repo; not on PyPI).
```

Expand All @@ -190,7 +193,7 @@ from the source repo; not on PyPI).
## Social / launch one-liners (optional, for announcement)

```
Umbra Admission is live on the GitHub Marketplace: a required check that governs
Signetry Admission is live on the GitHub Marketplace: a required check that governs
any coding agent's PR — Claude Code, Codex, Cursor, Copilot, Devin — with a
signed receipt. Nothing merges without one. All Rights Reserved.
```
30 changes: 16 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
# Umbra Admission — GitHub Action
# Signetry Admission — GitHub Action

> **Seal every agent's PR with proof.**

> **Copyright (c) 2026 Binay Dalai. All rights reserved.**
> This repository is strictly for viewing and contributing to the original project. You may not use, copy, modify, distribute, or commercialize this code for your own personal or commercial projects without explicit written permission. Only the original author retains the right to use and monetize this project.


[![GitHub Marketplace](https://img.shields.io/badge/Marketplace-Umbra%20Admission-purple?logo=github)](https://github.com/marketplace/actions/umbra-admission)
[![GitHub Marketplace](https://img.shields.io/badge/Marketplace-Signetry%20Admission-purple?logo=github)](https://github.com/marketplace/actions/umbra-admission)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
[![Latest release](https://img.shields.io/github/v/release/Signetry/action?sort=semver)](https://github.com/Signetry/action/releases)

**Govern any coding agent's change to your repository, and attach a signed receipt.**

Every pull request — no matter which agent opened it (Claude Code, Codex, Cursor,
Copilot, Devin, or a human) — is run through the [umbra-core](https://github.com/Signetry/core)
Copilot, Devin, or a human) — is run through the [signetry-core](https://github.com/Signetry/core)
admission pipeline:

```
Expand All @@ -22,12 +24,12 @@ independent verifier → earned authority (0/1/2) → Ed25519-signed receipt
The action posts the verdict as a PR comment, uploads the signed receipt as an
artifact, and **fails the check** unless the change earns the authority you
require. Make it a *required status check* and nothing merges without a receipt.
`auto_merge` is always false — Umbra governs the agent; a human merges.
`auto_merge` is always false — Signetry governs the agent; a human merges.

## Usage

```yaml
name: Umbra Admission
name: Signetry Admission
on:
pull_request:
permissions:
Expand All @@ -44,12 +46,12 @@ jobs:
- uses: Signetry/action@v1
with:
min-authority: "1" # 0 observe · 1 analyze · 2 branch-PR
signing-key: ${{ secrets.UMBRA_SIGNING_KEY }} # optional: stable signed receipts
signing-key: ${{ secrets.SIGNETRY_SIGNING_KEY }} # optional: stable signed receipts
```

Add a `.umbra/admission.yaml` to your repo to declare the contract (allowed and
Add a `.signetry/admission.yaml` to your repo to declare the contract (allowed and
forbidden paths, diff budget, required checks). Without one, a conservative
default applies. See the [umbra-core docs](https://github.com/Signetry/core).
default applies. See the [signetry-core docs](https://github.com/Signetry/core).

### Also scan for vulnerabilities (SARIF → code scanning)

Expand Down Expand Up @@ -85,9 +87,9 @@ jobs:
| `agent` | `""` | Force `codex-cli` or `claude-code` to *re-run* the change. Blank governs the existing PR diff without invoking an agent. |
| `signing-key` | `""` | Base64 Ed25519 key (32+ bytes) for stable receipts. Falls back to a dev key (honestly flagged). |
| `require-sandbox` | `false` | Fail closed if code-executing checks (npm/pip install, go/cargo build) can't run in a real filesystem/network sandbox. |
| `scan` | `false` | Also run the **SAST detection engine** over the checkout and upload SARIF to code scanning (7 languages, cross-file taint, deterministic/offline; needs `umbra-core >= 0.5.0`). |
| `scan` | `false` | Also run the **SAST detection engine** over the checkout and upload SARIF to code scanning (7 languages, cross-file taint, deterministic/offline; needs `signetry-core >= 0.5.0`). |
| `scan-fail-on` | `""` | With `scan`, fail the check if any finding is at/above this severity (`critical`/`high`/`medium`/`low`/`info`). Blank = report-only. |
| `umbra-version` | latest | Pin a specific `umbra-core` version **tag** installed from source (blank installs the latest hardened release). umbra-core is source-available and not on PyPI. |
| `signetry-version` | latest | Pin a specific `signetry-core` version **tag** installed from source (blank installs the latest hardened release). signetry-core is source-available and not on PyPI. |
| `python-version` | `3.12` | Python to run on. |

## Outputs
Expand All @@ -101,16 +103,16 @@ jobs:

## How it works

This action is a thin wrapper over `umbra-core` (source-available; installed from
This action is a thin wrapper over `signetry-core` (source-available; installed from
its source repo, not PyPI). It stages the
PR's change as a working-tree diff, runs `umbra admit`, and enforces the earned
PR's change as a working-tree diff, runs `signetry admit`, and enforces the earned
authority. On Linux runners it installs bubblewrap so required checks run under a
real filesystem/network **sandbox** (the tier is recorded truthfully in every
receipt; it falls back to a lower tier only if the sandbox can't initialize). The
governance logic, contract, verifier, and receipts all live in
[umbra-core](https://github.com/Signetry/core).
[signetry-core](https://github.com/Signetry/core).

Part of the [Umbra platform](https://github.com/Signetry/signetry) — see the umbrella for the full integration catalog and compatibility matrix.
Part of the [Signetry platform](https://github.com/Signetry/signetry) — see the umbrella for the full integration catalog and compatibility matrix.

## License

Expand Down
4 changes: 2 additions & 2 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Security Policy

Umbra Admission is a security tool; we hold its own security to a high bar.
Signetry Admission is a security tool; we hold its own security to a high bar.

## Supported versions

Expand Down Expand Up @@ -31,7 +31,7 @@ https://github.com/Signetry/core/security/advisories/new).
- Never plumb attacker-controlled text (PR title, branch, issue body) into the
`mission` input; the action passes inputs via environment and validates them,
but least privilege is still the right posture.
- Use `signing-key: ${{ secrets.UMBRA_SIGNING_KEY }}` for receipts that verify
- Use `signing-key: ${{ secrets.SIGNETRY_SIGNING_KEY }}` for receipts that verify
against your pinned key; without it, receipts use a dev key and are flagged
`key_ephemeral`.
- For fail-closed check isolation set `require-sandbox: true`.
Loading
Loading