The Déjà system, documented for review.
Reference document for security architects, implementation engineers, audit-firm technologists, and CISOs evaluating Déjà for production deployment at firms operating under SOC 2 Type II, ISO 27001, NYDFS Part 500, DORA, or SR 11-7. Organized for lookup, not for narrative reading. Sections marked "draft" are in active development and will be expanded as production observations and formal review processes mature. Everything else is anchored to the DSR/1.0 specification, the Schema Deduction Engine architectural proof, and the platform's security posture. Audit firms — firms such as KPMG, Deloitte, EY, PwC, BDO, Grant Thornton, or independent — verify receipts offline using dsr-verifier-cli; this page documents the system that produces them.
The vocabulary the system operates on.
Every term in this document is defined here. Definitions are intentionally minimal — the deeper mechanics live in dedicated sections. Use this section as a lookup index.
products table at the database layer. Cryptographically isolated from other vaults via tenant-scoped signing keys. Every receipt belongs to exactly one vault. Cross-vault queries are forbidden at the storage layer.R0, R1, R1-L, R1-N, R2-F, R2-R. Determines retention policy, downstream delivery rules, and which signature fields are mandatory. See Appendix A for full taxonomy.[0, 1] computed from eight independent factors (W1–W8). Threshold for attribution: 0.80. High-confidence threshold: 0.90. The score is fully decomposable — every receipt carries the per-factor breakdown.UPGNode is keyed on PR ID and stores the typed SchemaDelta extracted from that PR.Entities, relationships, and invariants.
Déjà persists a small number of entities. The data model is deliberately narrow — most artifacts of the attribution pipeline (raw diffs, error payloads, intermediate computation) are processed in-memory and discarded after extraction.
| Entity | Purpose | Mutability |
|---|---|---|
| vaults | Tenant container; aliased as products | Update permitted on metadata only |
| receipts | Signed attribution events (DSR/1.0) | Immutable post-issuance |
| upg_nodes | Schema delta + graph edges per merged PR | Append-only |
| attribution_events | All attribution attempts (incl. failures) | Append-only |
| audit_log | System event log, gate failures, operator actions | Append-only · enforced at DB layer |
Key invariants. The data model enforces several invariants below the application layer — they cannot be violated even by a privileged operator:
- All tables are vault-scoped. Cross-tenant queries are forbidden at the storage layer via row-level security policies.
- The
audit_logtable is append-only. UPDATE and DELETE permissions are revoked at the role level; the schema enforces this via triggers. - Every receipt's
signaturefield is computed at issuance and never mutated. Modifying any signed field invalidates the signature and is detectable offline by the verifier CLI. - The
upg_nodes.schema_deltafield is the only persisted artifact of a PR diff. The raw diff content is discarded after extraction.
products table and the conceptual Vault are the same entity. The naming reflects an early product-management framing that has since standardized on Vault for customer-facing surfaces. Internal schema continues to use products for migration safety.How signal data is made refactor-stable.
The normalization engine transforms raw error signals into stable, comparable artifacts. Without normalization, a refactor that moves a function or renames a parameter would change the fingerprint of every error originating from that function — destroying the join between error signals and UPG nodes.
Normalization happens in three phases, each producing a canonical artifact:
KeyError, TypeError, SchemaValidationError, NullPointerException, and others. The taxonomy is fixed and versioned — new types require a DSR spec MINOR bump.{uuid}, {int}, {string}. The result is the message template — what the error looks like across all instances.(function_name, file_path) — line numbers are intentionally excluded so the fingerprint survives source-line drift.The fingerprint is the SHA-256 of the canonical concatenation of these three artifacts:
// Fingerprint computation. Stable across refactors and line-number drift.
export class FingerprintEngine {
static hash(signal: { errorType: string; messageTemplate: string; stackFrames: string[] }): Fingerprint {
const canonical = [
signal.errorType, // canonical taxonomy
signal.messageTemplate, // variables stripped
signal.stackFrames.join(' :: '), // (fn_name, file_path) pairs
].join(' || ');
return {
algo: 'SHA-256',
value: sha256(canonical), // hex-encoded
canonical_form_version: 'v1', // bumped on taxonomy changes
};
}
}Two errors that look textually different but reduce to the same canonical form share a fingerprint. This is the key property that makes attribution work across refactor cycles.
Five gates. One failure halts the receipt.
Before any receipt is issued, the validation orchestrator runs five trust gates sequentially. The composition is strict AND: a single gate failure halts attribution and logs the failure reason to the audit ledger. No receipt is issued. No customer-facing alert fires.
| Gate | Job | Failure semantics |
|---|---|---|
| File Gate | Files touched by PR are in dependency path of crashing service | Halt; log FILE_GATE_NO_EDGE |
| Rate Gate | Regression rate drops after the PR window | Halt; log RATE_GATE_NO_DROP |
| Infra Gate | Rules out infra noise and deploy artifacts | Halt; log INFRA_GATE_NOISE_DETECTED |
| Feature Flag Gate | Correlates rollout flags to incident exposure | Halt; log FF_GATE_NO_CORRELATION |
| Duration Gate | Confirms fix stability over a 72h window | Halt; log DURATION_GATE_REOPEN |
The full gate composition logic and code path is documented in The Engine, §06 Trust Gates.
From webhook fire to receipt delivery.
An incident moves through seven terminal states. Five of them produce a receipt (R0 ingestion always fires; R1-class receipts fire conditionally). One produces an audit log entry only.
| State | Trigger | Output |
|---|---|---|
| INGESTED | Webhook received, signal parsed | R0 receipt |
| FINGERPRINTED | SHA-256 computed; UPG candidates identified | internal state |
| SCORED | CCS computed against best UPG candidate | internal state |
| ATTRIBUTED | CCS ≥ 0.80, all gates passed | R1 receipt |
| LOW_CONFIDENCE | 0.60 ≤ CCS < 0.80; ambiguous attribution | R1-L receipt |
| BELOW_THRESHOLD | CCS < 0.60; no candidate above low-confidence floor | R1-N receipt |
| GATE_FAILED | One gate returned pass: false | audit log only |
sde_cross_service_receipts (Attribution: covers R0, R1, R1-L, R1-N) and sde_resolution_receipts (Resolution: covers R2-class subtypes) — distinguished at the data level via a classification field (HIGH_CONFIDENCE_DEDUCTION, ATTRIBUTED, BELOW_THRESHOLD) and gate-result fields rather than as separate tables. The dsr-verifier-cli projects the database representation back into the canonical DSR/1.0 receipt format, so audit firms verifying receipts offline see the spec-correct view. Future receipt subtypes (RV verification, RE export, RG governance) are spec-defined and will be introduced as separate materializations as the system matures. See Receipt Types for the full subtype taxonomy.Timing characteristics are aspirational targets governed by service-level objectives, not hard guarantees. Production benchmarks accumulate in §08 as deployments mature. Current targets:
- Webhook ingest → fingerprint: < 30 seconds (target)
- Fingerprint → attribution: < 10 seconds (target)
- Attribution → delivery: < 5 seconds (target)
Thirteen providers, three readiness tiers.
Integrations are categorized by readiness: Live (production-validated), Beta (functional, undergoing validation), and Q3–Q4 2026 (specification-complete, build pending). Authentication mode and webhook payload requirements are documented per provider in the standalone Docs page.
| Provider | Category | Status | Auth |
|---|---|---|---|
| Datadog | Observability | Live | API key |
| Sentry | Error tracking | Live | OAuth + DSN |
| GitHub | VCS / PR events | Live | App install |
| Slack | Outbound delivery | Live | OAuth bot |
| PagerDuty | Incident lifecycle | Live | API key |
| New Relic | Observability | Beta | API key |
| GitLab | VCS / PR events | Beta | Project token |
| Jira Service Management | Ticket linking | Beta | OAuth |
| ServiceNow | ITSM linking | Beta | OAuth |
| Splunk | SIEM / logs | Q3–Q4 2026 | HEC token |
| Dynatrace | APM | Q3–Q4 2026 | API token |
| Honeycomb | Observability | Q3–Q4 2026 | API key |
| AppDynamics | APM | Q3–Q4 2026 | OAuth |
The 13 first-party integrations cover the bulk of customer environments. Indirect coverage of an additional 700+ tools is achieved via aggregator hubs — primarily PagerDuty's event source library and Splunk On-Call's webhook intake. See the Integrations Directory for the full list.
The deja.yaml reference. Documentation in progress
deja.yaml reference is in active development and the field set is not yet stable. This section will document the full configuration surface, defaults, and validation rules once the schema is locked.- →Top-level
deja.yamlschema — vault, integrations, channels, retention, and policy blocks - →Vault provisioning — region selection, signing key rotation, isolation policy
- →Retention policy — per-receipt-class retention horizons and configurable overrides
- →Channel routing — which receipt classes deliver to which Slack / PagerDuty / email destinations
- →Webhook authentication — per-provider HMAC and shared-secret configuration
- →Validation rules — schema validation errors, deprecation warnings, and migration paths
Latency, throughput, and scaling boundaries. Documentation in progress
- →Webhook ingestion latency — p50, p95, p99 per provider, per region
- →Attribution latency — signal arrival to receipt issuance, end-to-end
- →Throughput characteristics — sustained webhook rate per vault, burst tolerance
- →UPG query performance — graph traversal cost as PR volume grows
- →Storage growth — receipt and audit-log durable footprint per active vault
- →Scaling boundaries — vault-count and receipt-rate thresholds at which deployment topology must change
Failure modes and recovery. Documentation in progress
- →Webhook ingestion failures — provider downtime, signature verification failures, replay handling
- →AST parsing failures — malformed diffs, unsupported syntax, language-specific edge cases
- →Trust gate failures — covered conceptually in §04; this section will cover operational diagnosis
- →Storage layer failures — database unavailability, signature key rotation failures
- →Cross-region replication — eventual-consistency boundaries for multi-region deployments
- →Recovery procedures — operator runbook for each failure class
Adversaries, surfaces, mitigations. Documentation in progress
- →Tenant isolation boundary — cryptographic and database-level separation between vaults
- →Webhook authentication and replay — HMAC verification, nonce handling, clock-skew tolerance
- →Receipt forgery prevention — signature scheme, key rotation, fields-signed canonicalization
- →Insider threat (Déjà operators) — append-only audit log, signed-fields immutability
- →Supply-chain exposure — dependency review, build provenance, deployment integrity
- →Compliance exposure scenarios — what an attacker would need to do to invalidate a regulator-facing receipt
Posture, certifications, and architecture.
This section is a brief reference. The full security architecture lives on the Security page, including the zero-retention diagram, subprocessor table, and data-handling commitments.
fields_signed array is part of the signed payload — modifying any signed field invalidates the signature, which is detectable offline by the verifier CLI.How the spec evolves without breaking auditors.
Déjà's spec evolution policy is conservative by design. Receipts may be verified months or years after issuance, often by auditors using a verifier CLI version different from the one that produced them. Backward compatibility is treated as a regulatory commitment, not an engineering preference.
MAJOR.MINOR scheme. DSR/1.0 is the current version. MINOR versions are forward- and backward-compatible; new fields may be added but existing fields cannot be removed or repurposed.dsr-verifier-cli is forward-compatible: a v0.9 CLI verifies receipts produced by v0.9 or any later MINOR version. Major version changes (DSR/2.0) require explicit operator action and a CLI upgrade.Common issues and diagnoses. Documentation in progress
- →Webhook authentication failures — HMAC mismatches, signature verification, clock skew
- →Trust gate failure diagnosis — reading the audit ledger, interpreting failure codes
- →Receipt verification failures — verifier CLI return codes and remediation steps
- →Integration-specific issues — provider-by-provider known issues and workarounds
- →UPG node misses — diagnosing why a known PR is not appearing as an attribution candidate
- →Channel delivery failures — Slack token expiry, PagerDuty rate limiting, email bounces
What Déjà deliberately does not do. Documentation in progress
- →Déjà is not a logging platform. It does not store, search, or retain log content.
- →Déjà is not an APM. It does not collect spans, traces, or runtime metrics.
- →Déjà is not an alerting tool. It produces receipts and delivers them to channels, but does not page on-call.
- →Déjà does not store source code. It processes webhook diffs in-memory and discards them after schema extraction.
- →Déjà does not do anomaly detection or pattern learning. The CCS is computed from named factors, not learned weights.
- →Déjà is not a substitute for incident management. It augments existing tools (PagerDuty, FireHydrant, incident.io); it does not replace them.
Alphabetical reference of every term.
[0, 1] from eight weighted factors. Threshold 0.80; high-confidence 0.90.R0, R1, R1-L, R1-N, R2-F, R2-R. See Appendix A.products table. Cryptographically isolated.dsr-verifier-cli — open-source tool that verifies receipt signatures offline. Forward-compatible across MINOR DSR versions.Reference tables, taxonomies, status codes.
| Class | Name | Trigger | Retention |
|---|---|---|---|
| R0 | Ingestion | Webhook successfully received and parsed | Configurable; Enterprise tier only |
| R1 | Attribution | CCS ≥ 0.80, all gates pass | Configurable per tier |
| R1-L | Low-confidence attribution | 0.60 ≤ CCS < 0.80; exception receipt | Configurable; Standard tier and above |
| R1-N | Negative attribution | CCS < 0.60; no PR above low-confidence floor | Configurable; Standard tier and above |
| R2-F | Fix-confirmed | Fingerprint resolution observed in graph | Configurable |
| R2-R | Recurrence | Same fingerprint re-fires post-fix | Configurable |
| Code | Meaning |
|---|---|
| 0 | Verified. Signature matches; receipt is authentic and untampered. |
| 1 | Signature mismatch. One or more fields_signed have been modified post-issuance. |
| 2 | Fingerprint inconsistency. The receipt's fingerprint does not match its declared canonical form. |
| 3 | Schema validation failed. Receipt is missing a required field or has a malformed type. |
| 4 | Unsupported DSR version. The receipt is signed under a MAJOR version this CLI does not support. |
| 5 | Signing key not found. The signing key referenced by the receipt is not in the local trust store. |
- →
KeyError— Field-access failure; primary signal for W1 schema overlap. - →
TypeError— Type mismatch; strong signal for W4 error type match. - →
SchemaValidationError— Explicit schema validator failure; strongest W4 signal. - →
NullPointerException— Null dereference; W4-eligible. - →
UndefinedReferenceError— Symbol not found in scope; W4-eligible. - →
SerializationError— Encode/decode failure across schema boundary; W1 + W4 eligible.
The full taxonomy is versioned with the DSR specification. New error types added in MINOR versions are backward-compatible.