redact-secret · Report
Deployment, project and admin key (hex body)
An optional prod:/dev: + cloud name or preview:/project: + two slugs lead, the deployment or instance name, one |, then 01 + an even 74–96 lowercase hex body; the whole key is the credential. The cloud eyJ2 deploy-key body is issuance-gated and not claimed.
Research record
3 events in the review history: 2 observed, 1 reviewed. Latest: observed on 2026-09-28 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.
Format
What it looks like
- Descriptive pattern
^(?:(?:prod|dev):[a-z]+-[a-z]+-[0-9]+|(?:preview|project):[a-z0-9][a-z0-9-]{0,62}:[a-z0-9][a-z0-9-]{0,62}|[a-z0-9][a-z0-9-]{0,62})\|01(?:[0-9a-f]{2}){36,47}$
Parts are shown as recorded. Evidence classes belong to the facts below; no class is assigned to a part.
Format facts
Provider documented ·
provider-source· current · observed 2026-09-28convex-backend 032e81e: format_admin_key / split_admin_key / remove_type_prefix, ADMIN_KEY_VERSION = 1, encrypt_proto + const_hex::encode (re-checked 2026-09-28): provider code (ruling R1): an optional prod:/dev: + cloud name or preview:/project: + two slugs lead, the deployment or instance name, exactly one |, then 01 + lowercase hex whose even length 74–96 is derived from the generator (29-byte envelope plus a 8–19-byte AdminKey proto); the docs show the typed leads and the | join
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: crates/common/src/types/admin_key.rsprovider-documentation · last read 2026-09-28 · latest outcome read · supports provider code (ruling R1): an optional prod:/dev: + cloud name or preview:/project: + two slugs lead, the deployment or instance name, exactly one |, then 01 + lowercase hex whose even length 74–96 is derived from the generator (29-byte envelope plus a 8–19-byte AdminKey proto); the docs show the typed leads and the | join
Provider documented ·
field-join· current · observed 2026-09-28join: {name}|{encrypted}: the name, exactly one |, then the encrypted body; the whole string is the credential
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: crates/common/src/types/admin_key.rsprovider-documentation · last read 2026-09-28 · latest outcome read · supports format_admin_key, split_admin_key on the first |
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports R1 · #issuecomment-5852413851
Provider documented ·
field-typed-lead· current · observed 2026-09-28typed-lead: optional prod: or dev: + a cloud name [a-z]+-[a-z]+-[0-9]+, or preview: / project: + <team-slug>:<project-slug>
- docs.convex.dev/cli/deploy-key-typesprovider-documentation · last read 2026-09-28 · latest outcome read · supports every typed key shown as <type>:<name-or-slugs>|…, truncated
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: npm-packages/convex/src/cli/lib/extractDeploymentNameForWorkOS.tsprovider-documentation · last read 2026-09-28 · latest outcome read · supports cloud name /^[a-z]+-[a-z]+-\d+$/
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: npm-packages/convex/src/cli/lib/deployment.tsprovider-documentation · last read 2026-09-28 · latest outcome read · supports isDeploymentKey /^(dev|prod):.*\|/, isProjectKey /^project:.*\|/
Provider documented ·
field-untyped-name· current · observed 2026-09-28untyped-name: an untyped (admin) key leads with the instance or deployment name, bounded to [a-z0-9][a-z0-9-]{0,62} (The default name is provider code; the character class and 63-byte bound are the handoff's project policy. A name outside it is an accepted false negative, so no fixture asserts silence on one.)
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: self-hosted/docker-build/read_credentials.shprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports default instance name convex-self-hosted
- redact-secret/redact-secret @ 54fe385f718c884d7e3dde6b9756e2d70999ca91: docs/audits/evidence/860/convex.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports the class and bound are project policy
Unresolved ·
field-slugs· current · observed 2026-09-28slugs: preview:/project: team and project slugs bounded to [a-z0-9][a-z0-9-]{0,62} each
- redact-secret/redact-secret @ 54fe385f718c884d7e3dde6b9756e2d70999ca91: docs/audits/evidence/860/convex.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports no source states the slug grammar
Provider documented ·
field-body-version· current · observed 2026-09-28body-version: the hex body starts 01 (ADMIN_KEY_VERSION = 1)
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: crates/keybroker/src/broker.rsprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports ADMIN_KEY_VERSION: u8 = 1
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: crates/keybroker/src/encryptor.rsprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports version byte first
Provider documented ·
field-body-alphabet· current · observed 2026-09-28body-alphabet: lowercase hex [0-9a-f]
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: crates/keybroker/src/encryptor.rsprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports const_hex::encode
Provider documented ·
field-body-length· current · observed 2026-09-28body-length: even, 74 to 96 hex characters (37–48 bytes: a 29-byte envelope plus an 8–19-byte proto) (Derived from the generator, not stated. Positives carry 74, 76 and 96; the twins carry 72, 98 and an odd length.)
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: crates/keybroker/src/broker.rsprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports issue_key sets issued_s and an identity; instance_name is None
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: crates/keybroker/src/encryptor.rsprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports version + 12-byte nonce + ciphertext + 16-byte tag
- redact-secret/redact-secret @ 54fe385f718c884d7e3dde6b9756e2d70999ca91: docs/audits/evidence/860/convex.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports derived facts, not stated ones
Unresolved ·
field-cloud-body· current · observed 2026-09-28cloud-body: the current cloud deploy-key body begins eyJ2; its alphabet, padding and length are unknown (Issuance-gated. No fixture asserts a finding or silence on an eyJ2 body.)
- docs.convex.dev/cli/deploy-key-typesprovider-documentation · last read 2026-09-28 · latest outcome read · supports truncated eyJ2...0= examples
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports R4: a truncated example fixes the prefix only · #issuecomment-5871306275
Provider documented ·
field-non-secrets· current · observed 2026-09-28non-secrets: CONVEX_DEPLOYMENT=<type>:<name> selectors, https://<name>.convex.cloud / .convex.site URLs and bare deployment names are public
- docs.convex.dev/cli/deploy-key-typesprovider-documentation · last read 2026-09-28 · latest outcome read · supports non-secrets: CONVEX_DEPLOYMENT=<type>:<name> selectors, https://<name>.convex.cloud / .convex.site URLs and bare deployment names are public
- redact-secret/redact-secret @ 54fe385f718c884d7e3dde6b9756e2d70999ca91: docs/audits/evidence/860/convex.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports excluded shapes
Provider documented ·
field-transport· current · observed 2026-09-28transport: CONVEX_DEPLOY_KEY and CONVEX_SELF_HOSTED_ADMIN_KEY environment variables; sent as Authorization: Convex <key>
- docs.convex.dev/cli/deploy-key-typesprovider-documentation · last read 2026-09-28 · latest outcome read · supports transport: CONVEX_DEPLOY_KEY and CONVEX_SELF_HOSTED_ADMIN_KEY environment variables; sent as Authorization: Convex <key>
- redact-secret/redact-secret @ 54fe385f718c884d7e3dde6b9756e2d70999ca91: docs/audits/evidence/860/convex.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports role and blast radius
Tool corroborated ·
field-peer-lag· current · observed 2026-09-28peer-lag: no rule in trufflehog 3.97.4 or gitleaks 8.30.1
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports no convex rule
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectorsscanner-rule-source · last read 2026-09-29 · latest outcome read · supports no convex detector directory
Unresolved ·
listed-references· current · observed 2026-09-28The legacy contract lists 15 references without stating which property each supports.
- docs.convex.dev/cli/deploy-key-typesprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: crates/common/src/types/admin_key.rsprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: npm-packages/convex/src/cli/lib/extractDeploymentNameForWorkOS.tsprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: crates/keybroker/src/broker.rsprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: crates/keybroker/src/encryptor.rsprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: npm-packages/convex/src/cli/lib/deployment.tsprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: self-hosted/docker-build/read_credentials.shprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88other · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- redact-secret/redact-secret @ 54fe385f718c884d7e3dde6b9756e2d70999ca91: docs/audits/evidence/860/convex.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- redact-secret/redact-secret @ 54fe385f718c884d7e3dde6b9756e2d70999ca91: docs/audits/evidence/860/tier-b-rerank.mdproject-research-note · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract · #issuecomment-5852413851
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract · #issuecomment-5871306275
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/redact-secret/redact-secret-benchmarks/issues/436issue-or-discussion · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/redact-secret/redact-secret/issues/912issue-or-discussion · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
Provider documented ·
dossier-research· current · observed 2026-09-28Legacy dossier research (verdict ready, tier T1) cited 3 sources; the dossier does not attribute sources to individual properties.
- docs.convex.dev/cli/deploy-key-typesprovider-documentation · last read 2026-09-28 · latest outcome read · supports Cited by the legacy dossier research for this family
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88other · last read 2026-09-28 · latest outcome read · supports Cited by the legacy dossier research for this family
- redact-secret/redact-secret @ 8b6a5fde52ecb4dfce13f09c7a947062d21483c7: docs/audits/evidence/860/convex.mdproject-research-note · last read 2026-09-28 · latest outcome read · supports Final research evidence recorded by the legacy dossier
Provider documented ·
taxonomy-sources· current · observed 2026-09-28The legacy taxonomy lists 2 sources for this family. The taxonomy records no date; the dossier researchedAt is used as the observed-at date.
- docs.convex.dev/cli/deploy-key-typesprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a source for this family in the legacy taxonomy
- get-convex/convex-backend @ 032e81e264a8b23b8d566d8f83f773d2bfbedb88: crates/common/src/types/admin_key.rsprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a source for this family in the legacy taxonomy
Open questions
No open question is recorded for this revision.
Benchmark dossier notes
- Basis
- T1 for the type lead, separator and hex body from provider code in
get-convex/convex-backend(key format, keybroker encryptor with version byte 1, nonce and tag, CLI regexes); the hex length band is derived from the generator (R1), not stated. The docs page shows truncated typed examples. - Issuance
- not attempted; structure-only check for the cloud body is the highest-value one named in the Tier B re-rank.
- Contract in core
- detector-families.md; handoff and issuance research linked below.
In this benchmark
- Fixtures
- 41
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
41 fixtures: 16 expect a redaction, 25 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 16 | 0 | 0 | 0 |
| T2Tool-corroborated | 17 | 0 | 0 | 0 |
| T3Project policy | 8 | 0 | 0 | 0 |
Every scanner on the same fixtures
In run order. Counts are what each scanner recorded on this family's fixtures, whichever rules it has; a scanner with no rule for the family has nothing to report on it.
| Scanner | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| flare-redactRuntime library · 1.6.1 · Published npm package · secrets-only (pii, generic_assignment disabled) · JavaScript engineNo rule maps to it | 41 | 16 | 0 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rulesNo rule maps to it | 41 | 16 | 0 | 0 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 41 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabledNo rule maps to it | 41 | 16 | 0 | 0 |
Benchmark dossier questions
- Open caveat
- Hex-body keys only. The cloud eyJ2 body (Base64 alphabet, padding, length) is ISSUANCE-GATED (R4; still gated after the 2026-09-28 issuance research); needs a structure-only issuance check.
Looks like it, but isn't
- Collisions
CONVEX_DEPLOYMENT=dev:<name>and*.convex.cloudURLs are public selectors with no|. The pre-0.16.0 bare legacy key has no anchor. The name-onlybearer-tokenpartial span was a generic defect, fixed under #918. #919 later made the exact namesCONVEX_DEPLOY_KEYandCONVEX_SELF_HOSTED_ADMIN_KEYa contextual finding, so a gatedeyJ2body under those names is redacted. A preview deployment key can also readpreview:<branch-name>|with a name up to 40 characters (:and|mapped to_); that can fall outside the bounded class and is an accepted false negative (issuance research).
Scanner rules for this family
No peer rule maps to this family
None of the reviewed peer scanners has a rule that can match a credential of this family.
None mapped
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
convex-deployment-key-actions-deployconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-bare-proseconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-bearer-headerconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-chat-pasteconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-compose-self-hostedconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-curl-authorization-convexconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-dotenvconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-exportconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-json-api-keyconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-json-tokenconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-key-shape-bareconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-key-shape-quotedconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-key-shape-unicode-crlfconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-mcp-envconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-sdk-kwargconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-x-api-key-headerconvex · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
convex-deployment-key-actions-secret-referenceconvex · templated-reference | Must not flagT3 · Project policy | Quiet |
convex-deployment-key-adjective-animal-placeholderconvex · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
convex-deployment-key-body-72-twinconvex · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
convex-deployment-key-body-98-twinconvex · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
convex-deployment-key-body-variable-referenceconvex · templated-reference | Must not flagT3 · Project policy | Quiet |
convex-deployment-key-deployment-selector-public-idconvex · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
convex-deployment-key-deployment-urls-public-idconvex · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
convex-deployment-key-digest-after-pipe-encoded-valueconvex · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
convex-deployment-key-docs-name-and-key-placeholderconvex · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
convex-deployment-key-double-separator-twinconvex · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
convex-deployment-key-g-in-body-twinconvex · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
convex-deployment-key-key-guidance-proseconvex · prose-mention | Must not flagT3 · Project policy | Quiet |
convex-deployment-key-label-proseconvex · benign-lookalike | Must not flagT3 · Project policy | Quiet |
convex-deployment-key-maskconvex · benign-lookalike | Must not flagT3 · Project policy | Quiet |
convex-deployment-key-odd-length-body-twinconvex · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
convex-deployment-key-prefix-onlyconvex · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
convex-deployment-key-prod-selector-public-idconvex · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
convex-deployment-key-referenceconvex · benign-lookalike | Must not flagT3 · Project policy | Quiet |
convex-deployment-key-short-bodyconvex · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
convex-deployment-key-space-before-separator-twinconvex · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
convex-deployment-key-table-cell-near-missconvex · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
convex-deployment-key-trailing-glue-twinconvex · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
convex-deployment-key-underscore-name-twinconvex · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
convex-deployment-key-uppercase-hex-byte-twinconvex · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
convex-deployment-key-version-02-twinconvex · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
Sources
Documentation and code
- docs.convex.dev/cli/deploy-key-types
- github.com/get-convex/convex-backend/blob/032e81e264a8b23b8d566d8f83f773d2bfbedb88/crates/common/src/types/admin_key.rs
- github.com/get-convex/convex-backend/tree/032e81e264a8b23b8d566d8f83f773d2bfbedb88
Research log
- redact-secret/redact-secret#860Research issue
- redact-secret/redact-secret#912Research issue
- redact-secret/redact-secret-benchmarks#436Research issue
- redact-secret/redact-secret#1012Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/860/convex.md