atlasent-systems-inc/AtlaSent Gate
Enforce real-time authorization gates on deployments and critical CI/CD actions with cryptographic audit trails
View on GitHubTrust Signals
- Scorecard Score
- not yet scored
- Maintenance Recency
- Activelast commit Jul 10, 2026
- License
- Apache 2.0
Pinned Snippet
uses: atlasent-systems-inc/atlasent-action@e27ce5611b64a74d7b1a5860b4cdc5778ec27135 # v1.3.0tags can be moved; commit SHAs can't. why a SHA?
Inputs
| name | description | required | default |
|---|---|---|---|
| action | Protected action type (e.g., production.deploy, database.migration.apply, hr.employee.offboard). See the AtlaSent catalog for all 19 built-in types. Used for single-eval path; ignored when evaluations or policy-sync is set. | no | — |
| actor | Actor identity (defaults to github.actor). Used for single-eval path. | no | ${{ github.actor }} |
| target-id | Target resource being acted on (service name, artifact id, etc). Threaded into both top-level target_id and context.target_id so policies can gate on what is being deployed, not just who is deploying. | no | — |
| artifact-digest | SHA-256 digest of the artifact being deployed (e.g. sha256:<image-or-plan-hash>). Sent to evaluate as the canonical top-level execution_payload_hash, which the runtime binds into the permit. Re-presented at verify time as payload_hash — a permit issued for one artifact and presented for another fails with PAYLOAD_MISMATCH. Supply the SAME digest to the gate step and to the verify-permit step at the execution boundary so a workflow cannot evaluate one artifact and execute another. | no | — |
| verify-permit | Set "true" to run VERIFY-ONLY mode: re-verify an existing permit at the execution boundary (immediately before the protected step), independent of the gate that issued it. Requires permit-token; also pass action, actor, environment, and artifact-digest so the runtime re-binds the execution context. Fails closed on any missing / modified / expired / replayed / denied / context-mismatched permit. Outputs verified / verify-outcome / verify-error-code. | no | false |
| permit-token | The permit token to re-verify (required in verify-permit mode). Typically the permit-token output of an earlier gate step, passed to the deploy step. | no | — |
| mode | Single-eval execution model (ignored on batch / policy-sync / verify-permit / release / vqp / governance paths). - "enforce" (default): evaluate → verify → CONSUME the single-use permit in THIS step, then output verified=true. Best for a one-step gate. - "evaluate-only": ISSUE a permit but do NOT verify or consume it. For the two-step EXECUTION-BOUNDARY pattern: this step issues the permit (outputs decision + permit-token UNCONSUMED + permit-issued=true, verified=false); a later `verify-permit: true` step re-verifies and consumes it at the deploy step (the real cryptographic boundary). You MUST gate the protected step on that later step's `verified == 'true'` — never on this step's decision. | no | enforce |
| environment | Environment (defaults to live for main branch, test otherwise) | no | — |
| api-url | AtlaSent API URL base. Set to your Supabase project URL ending in /functions/v1 (e.g. https://<ref>.supabase.co/functions/v1). If not set, falls back to the ATLASENT_BASE_URL env var, then https://api.atlasent.io. NOTE: the api.atlasent.io apex 404s unless a custom domain is verified — always set this or ATLASENT_BASE_URL for self-hosted or pilot deployments. | no | — |
| fail-on-deny | Deprecated in V1 pilot mode: deny/hold/escalate always fail closed regardless of this value. | no | true |
| context | JSON context to include in the evaluation (optional). Used for single-eval path. Values here override anything the action derives automatically (e.g. an explicit `approvals` count wins over PR-review-derived approvals). | no | {} |
| approvals-from | Where the `context.approvals` count comes from on the single-eval path. - "pr-reviews" (default): count distinct reviewers whose latest PR review is APPROVED, derived from the GitHub API, and inject as context.approvals + context.approving_reviewers. Lets the `allow-2-approvals-change-window` policy template work out of the box. Requires GITHUB_TOKEN (set `env: GITHUB_TOKEN` to your token secret). - "none": do not derive approvals; supply them via the `context` input. Best-effort and fail-open-to-zero: any API failure yields 0 approvals, which denies a count-gated deploy (the fail-closed direction). | no | pr-reviews |
| evaluations | JSON array of evaluation requests for batch mode, e.g. [{"action":"production.deploy","actor":"alice"}]. When set, single-eval inputs (action, actor, context) are ignored. | no | — |
| wait-for-id | Evaluation ID to block on until it reaches a terminal state (allow/deny). Used with hold/escalate decisions that require async approval. | no | — |
| wait-timeout-ms | Maximum milliseconds to wait for a terminal decision when wait-for-id is set (default: 600000 = 10 min). | no | 600000 |
| v2-batch | Enable the /v1-evaluate/batch endpoint for batch evaluations (default: false, falls back to sequential /v1-evaluate loop). | no | false |
| v2-streaming | Enable Server-Sent Events stream for wait-for-id polling (default: false, falls back to HTTP polling). | no | false |
| financial-governance | Enable financial governance advisory ("advisory" or "") | no | "" |
| financial-action-value | Dollar value of the financial action being evaluated | no | "" |
| financial-action-currency | Currency code for the financial action value | no | USD |
| receipt-signing-key-id | Key ID recorded in the evidence receipt for rotation tracking. Paired with the ATLASENT_RECEIPT_SIGNING_SECRET Actions secret so offline verifiers know which key to use. Omit if you do not rotate signing keys or do not need signed receipts. | no | "" |
| policy-sync | When "true", run in policy sync mode: read a JSON bundle file and post it to v1-policy-sync. CI fails when the run is rejected or invalid. Cannot be combined with the evaluations or action inputs. | no | false |
| policy-bundle | Path to the policy bundle JSON file, relative to the repository root. Must be a JSON array of policy entries: [{name, body, description?, tags?}]. Required when policy-sync is "true". | no | — |
| policy-source | Source label written into the sync run record (defaults to "github-action"). | no | github-action |
| policy-dry-run | When "true" (default), submit as a dry-run to preview the diff without applying. Set to "false" on the default branch to apply changes live. | no | true |
| insights-org-id | Organization ID for behavior insights campaign evaluation. When set, the action runs a campaign evaluate call after a successful authorization (best-effort: never blocks or reverses the gate decision). | no | — |
| insights-subject-id | Subject ID for insights evaluation. Defaults to the actor value. | no | — |
| insights-session-count | Number of sessions for the subject, used by session_count trigger campaigns. | no | "" |
| release-mode | When "register-and-verify", run as a POST-deploy step against the atlasent-control-plane release-verification surface: 1. POST /v1/release/candidates (register the candidate) 2. POST /v1/release/candidates/:id/verify/runtime 3. POST /v1/release/candidates/:id/verify/deploy Mutually exclusive with the evaluate/policy-sync paths. | no | "" |
| control-plane-url | atlasent-control-plane base URL (release-mode only). | no | — |
| control-plane-token | Bearer token for the control-plane. Either set this input or the ATLASENT_CP_TOKEN env var. Distinct from ATLASENT_API_KEY (which authenticates against the runtime). Required when release-mode is set. | no | — |
| release-target-runtime-url | URL of the deployed atlasent-api runtime to probe (release-mode only). | no | — |
| release-repo | Repository identifier registered with the candidate. Defaults to the current repository. | no | — |
| release-commit-sha | Commit SHA registered with the candidate. Defaults to the current commit SHA. | no | — |
| release-image-digest | Optional image digest (e.g. sha256:...) registered with the candidate. | no | — |
| release-semver | Optional semver string registered with the candidate. | no | — |
| release-environment | preview | staging | production. Required when release-mode is set. | no | — |
| release-fail-on-verify | When "true" (default), fail the step if either verify/runtime or verify/deploy returns failed/error. | no | true |
| governance-agents | Comma-separated list of constrained advisory governance-agent slugs to run against the current change. Cannot be combined with policy-sync, evaluations, action, or release-mode inputs. | no | "" |
| governance-change-id | Governed change UUID to attach findings to. Required when governance-agents is set. | no | "" |
| governance-artifact-file | Optional path to a JSON file mapping agent slug to a pre-built artifact. | no | "" |
| governance-fail-on-severity | Minimum severity (info|low|medium|high|blocker) that fails the step. Findings are advisory by default. | no | "" |
| governance-fail-on-blocker | Shortcut for governance-fail-on-severity: blocker. | no | false |
| slack-webhook | Slack Incoming Webhook URL. When set, the action posts an informational Block Kit message to this URL whenever the deploy gate returns deny, hold, or escalate. This is outbound notification only — no interactive approval buttons. For in-flow approvals, use the AtlaSent Slack Approval Bot instead (configured in the AtlaSent console). Best-effort: webhook failures are logged as warnings and never block or alter the gate decision. | no | "" |
| pr-comment-on-deny | When "true" (default), post a comment to the pull request when the gate returns deny, hold, or escalate and a PR number is detected in the workflow context. Requires: permissions: pull-requests: write in the workflow, and GITHUB_TOKEN must be available. Best-effort: comment failures are logged as warnings and never block or alter the gate decision. Set to "false" to suppress PR comments. | no | true |
| evidence-bundle | When set to "true" or a regime identifier, call POST /v1/orgs/{orgId}/evidence-exports after a successful authorization gate. Accepted values: 'false' | 'true' | 'soc2_type_ii' | 'hipaa' | 'gdpr' | no | false |
| evidence-bundle-days | Lookback window in days for the evidence bundle (default: 90). | no | 90 |
| vqp-snapshot-id | UUID of the VQP snapshot to re-derive and audit. Mutually exclusive with evaluate, policy-sync, release-mode, governance-agents, and trajectory-verify. | no | "" |
| vqp-supabase-url | Supabase project URL for the VQP edge functions. Required when vqp-snapshot-id is set. | no | "" |
| vqp-service-role-key | Supabase service role key. Required when vqp-snapshot-id is set. | no | "" |
| vqp-rerun | When "true", re-run the AI engine on the re-derived prompt to detect score drift. | no | false |
| vqp-fail-on-drift | When "true" (default), fail the job if hash_match=false or verdict_changed=true. | no | true |
| trajectory-verify | When "true", run in trajectory-verify mode: call POST /v1/trajectory-verify at this CI step and fail if on_trajectory=false. Use as an intermediate step before each critical execution unit in the authorized trajectory. Requires trajectory-permit-id and trajectory-step-id from the upstream evaluate step that returned an authorized_trajectory. Mutually exclusive with policy-sync, governance-agents, release-mode, and vqp-snapshot-id. | no | false |
| trajectory-permit-id | Authorized transition spec ID from the upstream AtlaSent evaluate step (evaluation-id output). Required when trajectory-verify is "true". | no | "" |
| trajectory-step-id | Step ID within the trajectory being verified. Must match a step_id in the authorized_trajectory. Required when trajectory-verify is "true". | no | "" |
| trajectory-step-name | Human-readable step name written to the job summary and audit log. Optional. | no | "" |
| trajectory-halt-on-deviation | When "true" (default), fail the CI job immediately when on_trajectory=false. Set to "false" to surface deviation outputs without failing — useful for dry-run or advisory monitoring pipelines. | no | true |
Outputs
| name | description |
|---|---|
| decision | The evaluation decision (allow/deny/hold/escalate). Set for single-eval path only. |
| permit-token | The permit token. On the default (enforce) path it is already consumed by v1-verify-permit (audit reference only). In evaluate-only mode it is UNCONSUMED — pass it to a later verify-permit step to re-verify and consume it at the execution boundary. Single-eval path only. |
| evaluation-id | The evaluation ID for audit trail. Single-eval path only. |
| proof-hash | The cryptographic proof hash. Single-eval path only. |
| risk-score | The numeric risk score from the Decision response. Empty string when the evaluator did not return a risk assessment. Single-eval path only. |
| verified | "true" when evaluate=allow AND verify-permit=true for ALL evaluations; "false" otherwise (fail-closed). Set on both single and batch paths, and in verify-permit (boundary) mode. |
| permit-issued | "true" when a permit was minted on the single-eval path. In evaluate-only mode this is "true" while verified is "false" (issued but not consumed — re-verify at the execution boundary). "false" on non-allow or when no permit was minted. Do NOT gate a deploy on this — gate on verified. |
| verify-outcome | Coarse verification outcome from the last permit verification (verified / mismatch / expired / revoked / replay_blocked / invalid). Set on the single-eval and verify-permit (boundary) paths. Empty when verification did not run. |
| verify-error-code | Precise runtime verify wire code when verification failed (e.g. PAYLOAD_MISMATCH, ENVIRONMENT_MISMATCH, PERMIT_EXPIRED, PERMIT_ALREADY_USED, MISSING_PERMIT). Empty on success. Lets a workflow distinguish WHY a permit was rejected. |
| decisions | JSON array of per-item decision results for the batch path. Each item: {decision, verified, evaluationId, permitToken, reasons, verifyOutcome}. |
| batch-id | Batch identifier for batch evaluations (either the server-assigned batchId or loop-<ts> for the sequential fallback). |
| financial-governance-advice | JSON advisory output from financial governance assessment |
| chain-entry | v1.1 immutable audit chain entry (JSON) |
| snapshot | Decision snapshot (JSON) |
| audit-hash | SHA-256 audit chain hash |
| evidence-receipt | Signed per-decision authorization receipt (JSON). HMAC-SHA256 signed when ATLASENT_RECEIPT_SIGNING_SECRET is set as an Actions secret. null on denial. |
| evidence-bundle | Full compliance evidence bundle (JSON, v1 envelope). null on denial. |
| sync-run-id | The policy sync run ID returned by v1-policy-sync. |
| sync-status | Terminal status of the sync run (completed, rejected, failed, error). |
| sync-diff | Human-readable diff summary, e.g. "+3 added, ~1 updated, -2 removed". |
| sync-summary | JSON {added, updated, removed, status}. |
| insights-fired | JSON array of behavior insights campaigns that fired for the subject. |
| insights-skipped | JSON array of behavior insights campaigns that were skipped, with reasons. |
| release-candidate-id | Candidate ID returned by POST /v1/release/candidates (release-mode only). |
| release-runtime-status | Outcome status of the runtime verification: passed | failed | partial | error. |
| release-deploy-status | Outcome status of the deploy verification: passed | failed | partial | error. |
| release-runtime-result | Full JSON result of the runtime verification. |
| release-deploy-result | Full JSON result of the deploy verification. |
| governance-findings-count | Total number of findings emitted across all invoked governance agents. |
| governance-highest-severity | Highest severity emitted across all findings (info|low|medium|high|blocker). |
| governance-evaluations | JSON array of evaluation summaries per agent. |
| governance-findings | JSON array of all findings across all invoked agents. |
| evidence-bundle-sha256 | SHA-256 hex digest of the generated compliance evidence bundle. |
| evidence-bundle-id | Evidence export record ID returned by POST /v1/orgs/{orgId}/evidence-exports. |
| vqp-hash-match | "true" when the re-derived SHA-256 hash matches the stored prompt_hash (vqp-verify mode only). |
| vqp-score-delta | Numeric score delta between rerun and original snapshot scores (vqp-verify mode only). |
| vqp-verdict-changed | "true" when the verdict flipped between the original snapshot and the AI rerun (vqp-verify mode only). |
| vqp-audit-id | Audit log entry ID written by v1-verify-vqp for this re-derivation run (vqp-verify mode only). |
| trajectory-on-trajectory | "true" when the current step is on the authorized trajectory; "false" on deviation (trajectory-verify mode only). |
| trajectory-deviation-type | Deviation type on deviation: step_not_on_trajectory | step_out_of_sequence | forbidden_state_reached | required_step_skipped | time_limit_exceeded | constraint_violation | trajectory_expired. Empty string when on trajectory (trajectory-verify mode only). |
| trajectory-fidelity-score | Fidelity score [0-1] representing how closely execution tracks the authorized trajectory so far (trajectory-verify mode only). |
| trajectory-compliance-artifact-id | Compliance comparison artifact ID produced when trajectory execution completes. Empty string mid-execution (trajectory-verify mode only). |