redact-secret · Report
Environment secret key (tr_ENV_ / tr_ENV_sk_)
tr_ + dev|stg|prod|preview + _sk_ + 24 [0-9A-Za-z] (additional), or tr_<env>_ + 24 or legacy 20 (root); pk_<env>_ public keys are not secrets.
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
^tr_(?:dev|stg|prod|preview)_(?:sk_[0-9A-Za-z]{24}|[0-9A-Za-z]{24}|[0-9A-Za-z]{20})$
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-28ADDITIONAL_API_KEY_PATTERN in the published SDK core, the webapp customAlphabet([0-9a-zA-Z], 24) generator and the legacy 20-byte root generator at trigger.dev@4.0.0 (re-checked 2026-09-28): provider code (ruling R1): tr_ + one of dev|stg|prod|preview + _sk_ + exactly 24 [0-9A-Za-z] for an additional key, tr_<env>_ + 24 for a current root key and tr_<env>_ + 20 for a legacy root key; the docs corroborate the prefixes
- triggerdotdev/trigger.dev @ c2b7a72180bbb2dcbc31caa8539e0ca8f8e9e9b8: packages/core/src/v3/apiKeys.tsprovider-documentation · last read 2026-09-28 · latest outcome read · supports provider code (ruling R1): tr_ + one of dev|stg|prod|preview + _sk_ + exactly 24 [0-9A-Za-z] for an additional key, tr_<env>_ + 24 for a current root key and tr_<env>_ + 20 for a legacy root key; the docs corroborate the prefixes
Provider documented ·
field-prefix· current · observed 2026-09-28prefix: tr_ + dev|stg|prod|preview + _ (root) or + _sk_ (additional)
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/trigger-dev.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports prefix: tr_ + dev|stg|prod|preview + _ (root) or + _sk_ (additional)
- triggerdotdev/trigger.dev @ c2b7a72180bbb2dcbc31caa8539e0ca8f8e9e9b8: packages/core/src/v3/apiKeys.tsprovider-documentation · last read 2026-09-28 · latest outcome read · supports ADDITIONAL_API_KEY_PATTERN
- trigger.dev/docs/apikeysprovider-documentation · last read 2026-09-28 · latest outcome read · supports prefix: tr_ + dev|stg|prod|preview + _ (root) or + _sk_ (additional)
Provider documented ·
field-env-slugs· current · observed 2026-09-28env-slugs: exactly dev, stg, prod and preview (the EnvSlug union) (tr_test_ and tr_staging_ are outside the union and back a prefix twin.)
- triggerdotdev/trigger.dev @ c2b7a72180bbb2dcbc31caa8539e0ca8f8e9e9b8: packages/core/src/v3/apiKeys.tsprovider-documentation · last read 2026-09-28 · latest outcome read · supports env-slugs: exactly dev, stg, prod and preview (the EnvSlug union)
Provider documented ·
field-body· current · observed 2026-09-28body: exactly 24 [0-9A-Za-z] (additional and current root); exactly 20 for a legacy root
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports R1 · #issuecomment-5852413851
- triggerdotdev/trigger.dev @ 0b35cc35e053bc4a38cbe80ff4d7d543e8cca7d3: apps/webapp/app/models/api-key.server.tsprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports legacy root, length 20
- triggerdotdev/trigger.dev @ c2b7a72180bbb2dcbc31caa8539e0ca8f8e9e9b8: apps/webapp/app/utils/apiKeys.tsprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports customAlphabet, length 24
Provider documented ·
field-separators· current · observed 2026-09-28separators: _ only, at the fixed positions; none inside the body; no checksum
- triggerdotdev/trigger.dev @ c2b7a72180bbb2dcbc31caa8539e0ca8f8e9e9b8: packages/core/src/v3/apiKeys.tsprovider-documentation · last read 2026-09-28 · latest outcome read · supports separators: _ only, at the fixed positions; none inside the body; no checksum
Unresolved ·
field-boundary· current · observed 2026-09-28boundary: a key glued to an identifier on either side ([A-Za-z0-9_-]) is not claimed (Backs the glue twins.)
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/trigger-dev.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports implementation notes
Provider documented ·
field-public-key· current · observed 2026-09-28public-key: pk_<env>_ + 20 is the public key; the server classifies pk_ as public (Benign controls outside a credential-named assignment; a pk_ value in the secret-key position is a prefix twin.)
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/trigger-dev.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports excluded shapes
Unresolved ·
field-organization-token· current · observed 2026-09-28organization-token: tr_oat_ organization access tokens exist, with no found generator (Not claimed; no fixture asserts silence on tr_oat_.)
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/trigger-dev.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports T0: length and alphabet unknown
Provider documented ·
field-jwt-siblings· current · observed 2026-09-28jwt-siblings: tr_uat_ delegated tokens and public access tokens are JWTs that stay with the jwt family (No fixture of this family carries a JWT.)
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports R7 · #issuecomment-5871306275
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/trigger-dev.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports jwt-siblings: tr_uat_ delegated tokens and public access tokens are JWTs that stay with the jwt family
Tool corroborated ·
field-peer-lag· current · observed 2026-09-28peer-lag: no rule in trufflehog 3.97.4 or gitleaks 8.30.1 (Both pinned peers are silent on the whole family.)
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports no trigger rule
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectorsscanner-rule-source · last read 2026-09-29 · latest outcome read · supports no trigger detector directory
Unresolved ·
listed-references· current · observed 2026-09-28The legacy contract lists 12 references without stating which property each supports.
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/README.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
- github.com/redact-secret/redact-secret-benchmarks/issues/434issue-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/904issue-or-discussion · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/trigger-dev.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- triggerdotdev/trigger.dev @ 0b35cc35e053bc4a38cbe80ff4d7d543e8cca7d3: apps/webapp/app/models/api-key.server.tsprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- triggerdotdev/trigger.dev @ c2b7a72180bbb2dcbc31caa8539e0ca8f8e9e9b8: apps/webapp/app/services/personalAccessToken.server.tsprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- triggerdotdev/trigger.dev @ c2b7a72180bbb2dcbc31caa8539e0ca8f8e9e9b8: packages/core/src/v3/apiKeys.tsprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- triggerdotdev/trigger.dev @ c2b7a72180bbb2dcbc31caa8539e0ca8f8e9e9b8other · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- triggerdotdev/trigger.dev @ c2b7a72180bbb2dcbc31caa8539e0ca8f8e9e9b8: apps/webapp/app/utils/apiKeys.tsprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- trigger.dev/docs/apikeysprovider-documentation · 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.
- redact-secret/redact-secret @ 8b6a5fde52ecb4dfce13f09c7a947062d21483c7: docs/audits/evidence/860/trigger-dev.mdproject-research-note · last read 2026-09-28 · latest outcome read · supports Final research evidence recorded by the legacy dossier
- triggerdotdev/trigger.dev @ 0b35cc35e053bc4a38cbe80ff4d7d543e8cca7d3: apps/webapp/app/models/api-key.server.tsprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports Cited by the legacy dossier research for this family
- triggerdotdev/trigger.dev @ c2b7a72180bbb2dcbc31caa8539e0ca8f8e9e9b8other · last read 2026-09-28 · latest outcome read · supports Cited by the legacy dossier research for this family
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.
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/trigger-dev.mdprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a source for this family in the legacy taxonomy
- trigger.dev/docs/apikeysprovider-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
- Shape
tr_+ one ofdev,stg,prod,preview+_(root key) or_sk_(additional key, allowed since 2026-08-25), then an alphanumeric body of exactly 24 characters; legacy root keys (up to v4.0.0) have exactly 20. No checksum.- Basis
- T1. The additional-key grammar is a regex in the published SDK core; the root and legacy grammars are generator code (R1); the docs corroborate the prefixes. Legacy 20-byte roots are kept because lookup is by value and no statement says they stopped authenticating.
- Issuance
- not attempted.
- Contract in core
- detector-families.md.
In this benchmark
- Fixtures
- 50
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
50 fixtures: 18 expect a redaction, 32 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 18 | 0 | 0 | 0 |
| T2Tool-corroborated | 24 | 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 | 50 | 16 | 2 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rulesNo rule maps to it | 50 | 12 | 0 | 0 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 50 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabledNo rule maps to it | 50 | 18 | 0 | 0 |
Looks like it, but isn't
- Collisions
pk_<env>_+ 20 is the public key and must stay benign. Env slugs outside the four (tr_test_,tr_staging_) are not in the provider's union.
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 |
|---|---|---|
trigger-dev-token-actions-envtrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-bare-prosetrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-bearer-headertrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-chat-pastetrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-compose-envtrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-configure-sdktrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-curl-trigger-tasktrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-dotenvtrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-dotenv-localtrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-exporttrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-json-api-keytrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-json-tokentrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-k8s-secrettrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-key-shape-baretrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-key-shape-quotedtrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-key-shape-unicode-crlftrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-sdk-kwargtrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-x-api-key-headertrigger-dev · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
trigger-dev-token-actions-secret-referencetrigger-dev · templated-reference | Must not flagT3 · Project policy | Quiet |
trigger-dev-token-additional-body-23-twintrigger-dev · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-additional-body-25-twintrigger-dev · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-digest-encoded-valuetrigger-dev · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
trigger-dev-token-ellipsis-placeholdertrigger-dev · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
trigger-dev-token-env-reference-referencetrigger-dev · templated-reference | Must not flagT3 · Project policy | Quiet |
trigger-dev-token-hyphen-in-body-twintrigger-dev · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-identifier-near-misstrigger-dev · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
trigger-dev-token-key-guidance-prosetrigger-dev · prose-mention | Must not flagT3 · Project policy | Quiet |
trigger-dev-token-label-prosetrigger-dev · benign-lookalike | Must not flagT3 · Project policy | Quiet |
trigger-dev-token-leading-glue-s-twintrigger-dev · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-leading-glue-x-twintrigger-dev · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-masktrigger-dev · benign-lookalike | Must not flagT3 · Project policy | Quiet |
trigger-dev-token-prefix-onlytrigger-dev · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
trigger-dev-token-project-ref-public-idtrigger-dev · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
trigger-dev-token-public-key-bare-public-idtrigger-dev · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
trigger-dev-token-public-key-html-public-idtrigger-dev · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
trigger-dev-token-public-key-prefix-twintrigger-dev · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-referencetrigger-dev · benign-lookalike | Must not flagT3 · Project policy | Quiet |
trigger-dev-token-root-body-19-twintrigger-dev · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-root-body-21-twintrigger-dev · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-root-body-22-twintrigger-dev · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-root-body-23-twintrigger-dev · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-root-body-25-twintrigger-dev · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-short-bodytrigger-dev · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
trigger-dev-token-sk-body-21-twintrigger-dev · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-trailing-glue-twintrigger-dev · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-truncated-near-misstrigger-dev · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
trigger-dev-token-underscore-in-body-twintrigger-dev · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-unknown-env-twintrigger-dev · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-uppercase-prefix-twintrigger-dev · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
trigger-dev-token-x-run-placeholdertrigger-dev · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
Sources
Documentation and code
- trigger.dev/docs/apikeys
- github.com/redact-secret/redact-secret/blob/270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262/docs/audits/evidence/860/trigger-dev.md
- github.com/triggerdotdev/trigger.dev/tree/c2b7a72180bbb2dcbc31caa8539e0ca8f8e9e9b8
- github.com/triggerdotdev/trigger.dev/blob/0b35cc35e053bc4a38cbe80ff4d7d543e8cca7d3/apps/webapp/app/models/api-key.server.ts
Research log
- redact-secret/redact-secret#860Research issue
- redact-secret/redact-secret#904Research issue
- redact-secret/redact-secret-benchmarks#434Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/860/trigger-dev.md