Evidence you already have, in the shape an auditor asks for.
BetaMost of what an auditor asks for, your TillDev products already record: who signs in with a second factor, whether alerts reach someone, how fast vulnerabilities are fixed, whether backups were restored. TillShield reads those records over a period, judges thirty controls from them, maps each control to the criteria of the frameworks you follow, and keeps snapshots that cannot be changed afterwards.
Frameworks and how they are named
Every control maps to all three frameworks. Choose the ones you follow under Frameworks you follow on the page, or with tilldev shield compliance frameworks set; that only changes which criteria are listed and exported.
| Framework | Edition | Publisher | How it is named |
|---|---|---|---|
| SOC 2 | Trust Services Criteria (2017, revised points of focus 2022) | AICPA | Criteria are named by identifier only; their text belongs to the AICPA and is not reproduced. |
| ISO/IEC 27001 | 2022, clauses and Annex A | ISO and IEC | Clauses and controls are named by number only; the standard’s text belongs to ISO and IEC and is not reproduced. |
| NIST Cybersecurity Framework | 2.0 | NIST | A work of the US government. Subcategories are named by identifier. |
Criteria are given by their identifiers, and the descriptions are TillDev’s own words. Frameworks whose licence does not allow use in a paid product are not included.
The controls
Each control states its objective, the facts it was judged on, and where they came from. A criterion takes the worst status among the controls that support it.
| Status | Means |
|---|---|
| Pass | The records show the control working over the period. |
| Attention | Working in part, or the evidence is thin: an untriaged backlog, a stale feed, an attested control nobody has attested yet. |
| Fail | The records show it not working: two-factor sign-in not required, a critical vulnerability past its due date, a backup that missed its recovery point. |
| Unknown | The evidence could not be read just now. Never shown as a pass. |
| Not in use | The product that would evidence it is not in use, such as TillArk for backups or TillForge for source control. |
| Excluded | Taken out of scope with a reason. Its facts are still collected and kept. |
| Control | Area | Evidence | Criteria |
|---|---|---|---|
| Two-factor sign-in access-mfa | Access | Products | SOC 2: CC6.1 · ISO/IEC 27001: A.5.17, A.8.5 · NIST Cybersecurity Framework: PR.AA-03 |
| Access review access-review | Access | Products | SOC 2: CC6.2, CC6.3 · ISO/IEC 27001: A.5.15, A.5.18 · NIST Cybersecurity Framework: PR.AA-01, PR.AA-05 |
| Least privilege access-privileged | Access | Products | SOC 2: CC6.3 · ISO/IEC 27001: A.5.3, A.8.2 · NIST Cybersecurity Framework: PR.AA-05 |
| Audit trail monitoring-audit-trail | Monitoring and detection | Products | SOC 2: CC7.2 · ISO/IEC 27001: A.8.15 · NIST Cybersecurity Framework: PR.PS-04 |
| Security detection monitoring-detection | Monitoring and detection | Products | SOC 2: CC7.2 · ISO/IEC 27001: A.8.16 · NIST Cybersecurity Framework: DE.CM-03, DE.CM-09 |
| Detection testing monitoring-detection-tested | Monitoring and detection | Products, or attested | SOC 2: CC4.1 · ISO/IEC 27001: A.8.16 · NIST Cybersecurity Framework: ID.IM-02 |
| Finding triage monitoring-triage | Monitoring and detection | Products | SOC 2: CC7.3 · ISO/IEC 27001: A.5.25 · NIST Cybersecurity Framework: DE.AE-02, RS.MA-02 |
| Threat intelligence monitoring-threat-intel | Monitoring and detection | Products | SOC 2: CC7.1 · ISO/IEC 27001: A.5.7 · NIST Cybersecurity Framework: ID.RA-02, DE.AE-07 |
| Fix-by dates vulns-sla | Vulnerability management | Products | SOC 2: CC7.1 · ISO/IEC 27001: A.8.8 · NIST Cybersecurity Framework: ID.RA-01, PR.PS-02 |
| Known-exploited vulnerabilities vulns-exploited | Vulnerability management | Products | SOC 2: CC7.1 · ISO/IEC 27001: A.8.8 · NIST Cybersecurity Framework: ID.RA-01, ID.RA-05 |
| Configuration posture vulns-posture | Vulnerability management | Products, or attested | SOC 2: CC7.1 · ISO/IEC 27001: A.8.9 · NIST Cybersecurity Framework: PR.PS-01, ID.RA-01 |
| Independent testing vulns-pentest | Vulnerability management | Products, or attested | SOC 2: CC4.1 · ISO/IEC 27001: A.5.35, A.8.8 · NIST Cybersecurity Framework: ID.IM-02 |
| Vulnerability disclosure vulns-disclosure | Vulnerability management | Products, or attested | SOC 2: CC2.3 · ISO/IEC 27001: A.8.8 · NIST Cybersecurity Framework: ID.RA-08 |
| Reviewed changes change-source | Change management | Products, or attested | SOC 2: CC8.1 · ISO/IEC 27001: A.8.4, A.8.32 · NIST Cybersecurity Framework: PR.PS-06, ID.RA-07 |
| Approved deploys change-deploy | Change management | Products, or attested | SOC 2: CC8.1 · ISO/IEC 27001: A.8.31, A.8.32 · NIST Cybersecurity Framework: PR.PS-06, ID.RA-07 |
| Code and dependency scanning change-scanning | Change management | Products, or attested | SOC 2: CC7.1, CC8.1 · ISO/IEC 27001: A.8.25, A.8.28 · NIST Cybersecurity Framework: PR.PS-06, ID.RA-01 |
| Build provenance change-provenance | Change management | Products, or attested | SOC 2: CC8.1 · ISO/IEC 27001: A.8.25 · NIST Cybersecurity Framework: PR.PS-06, ID.RA-09 |
| Backups resilience-backups | Backup and recovery | Products, or attested | SOC 2: A1.2 · ISO/IEC 27001: A.8.13 · NIST Cybersecurity Framework: PR.DS-11 |
| Restore testing resilience-restores | Backup and recovery | Products, or attested | SOC 2: A1.3, CC7.5 · ISO/IEC 27001: A.5.30, A.8.13 · NIST Cybersecurity Framework: PR.DS-11, RC.RP-03 |
| Incident handling incidents-handling | Incident response | Products | SOC 2: CC7.3, CC7.4 · ISO/IEC 27001: A.5.26 · NIST Cybersecurity Framework: RS.MA-01, RS.MA-03 |
| On-call cover incidents-oncall | Incident response | Products, or attested | SOC 2: CC7.4 · ISO/IEC 27001: A.5.24 · NIST Cybersecurity Framework: RS.MA-01, GV.RR-02 |
| Secrets management data-secrets | Data and devices | Products, or attested | SOC 2: CC6.1 · ISO/IEC 27001: A.5.17, A.8.24 · NIST Cybersecurity Framework: PR.AA-01, PR.DS-01 |
| Endpoint monitoring data-endpoints | Data and devices | Products, or attested | SOC 2: CC6.8 · ISO/IEC 27001: A.8.1, A.8.7 · NIST Cybersecurity Framework: DE.CM-09, ID.AM-01 |
| Security policy governance-policy | Governance | Attested | SOC 2: CC5.3 · ISO/IEC 27001: 5.2, A.5.1 · NIST Cybersecurity Framework: GV.PO-01, GV.PO-02 |
| Risk assessment governance-risk | Governance | Attested | SOC 2: CC3.1, CC3.2 · ISO/IEC 27001: 6.1.2, 8.2 · NIST Cybersecurity Framework: ID.RA-05 |
| Security awareness governance-training | Governance | Attested | SOC 2: CC1.4, CC2.2 · ISO/IEC 27001: A.6.3 · NIST Cybersecurity Framework: PR.AT-01 |
| Personnel screening governance-screening | Governance | Attested | SOC 2: CC1.4 · ISO/IEC 27001: A.6.1 · NIST Cybersecurity Framework: GV.RR-04 |
| Supplier review governance-suppliers | Governance | Attested | SOC 2: CC9.2 · ISO/IEC 27001: A.5.19, A.5.22 · NIST Cybersecurity Framework: GV.SC-06, GV.SC-07 |
| Business continuity governance-continuity | Governance | Attested | SOC 2: A1.3, CC9.1 · ISO/IEC 27001: A.5.29, A.5.30 · NIST Cybersecurity Framework: ID.IM-04, RC.RP-01 |
| Incident response plan governance-incident-plan | Governance | Attested | SOC 2: CC7.4 · ISO/IEC 27001: A.5.24 · NIST Cybersecurity Framework: ID.IM-04 |
The period
Controls are judged over a period: the last 90 days unless you pick dates, and at most 366 days. The end date is included and is never later than now. Counts such as vulnerabilities fixed on time, restores tested and production deploys approved cover the period; settings such as whether two-factor sign-in is required are read as they are now.
Attestations and exclusions
Some evidence lives outside TillDev: a policy the board approved, a risk assessment, training records, supplier reviews. A member attests to it with a statement, an optional reference to where it is kept, and how long it stays valid (default 365 days, at most 731). Governance controls pass on a valid attestation; a product control can be attested only where the product holds no record either way, and an attestation never turns a failing control into a pass. An attestation lapses at the end of its validity and can be revoked, never edited; revoked ones stay on record.
A control that does not apply to you can be excluded with a reason (10 to 500 characters). It shows as excluded, and its facts and your reason go into every snapshot, so the auditor sees both.
Snapshots an auditor can check
A snapshot freezes every control, its facts, attestation and exclusion over a period. One is taken each month over the default period the first time anyone opens the page that month, and you can take one for any period. Snapshots cannot be changed or deleted from the dashboard, the CLI or the API, and the database lets the application only add them. The digest chain below makes any change detectable regardless.
Each snapshot is numbered, and its digest is the SHA-256 of its canonical JSON: the body without digest, keys sorted, no whitespace. Each records the digest of the one before it, so changing or removing one breaks every link after it. The page and tilldev shield compliance snapshots recompute the whole chain each time. The JSON export says tilldev.compliance.snapshot/1, and anyone can check it without TillDev:
// Node 20 or later, no dependencies
import { createHash } from 'node:crypto'
import { readFileSync } from 'node:fs'
const canonical = (v) =>
v === null || typeof v !== 'object'
? JSON.stringify(v ?? null)
: Array.isArray(v)
? `[${v.map(canonical).join(',')}]`
: `{${Object.keys(v).filter((k) => v[k] !== undefined).sort().map((k) => `${JSON.stringify(k)}:${canonical(v[k])}`).join(',')}}`
const { digest, ...body } = JSON.parse(readFileSync(process.argv[2], 'utf8'))
console.log(createHash('sha256').update(canonical(body)).digest('hex') === digest ? 'digest holds' : 'digest does not match')The Markdown export is the same snapshot laid out for a reader: the period, a summary, each control with its facts and criteria, and the digest.
From the CLI and the API
Shield → Compliance shows all of this. Owners and admins only.
tilldev shield compliance # every control over the last 90 days
tilldev shield compliance --from 2026-01-01 --to 2026-06-30
tilldev shield compliance show access-mfa # facts, criteria and attestations for one control
tilldev shield compliance criteria soc2 # each criterion with the worst status of its controls
tilldev shield compliance frameworks set soc2,iso27001
tilldev shield compliance attest governance-policy \
--statement "Information security policy v4, approved by the board on 2026-03-12" \
--reference POL-004 --days 365
tilldev shield compliance exclude data-endpoints --reason "No staff devices: managed cloud desktops only"
tilldev shield compliance snapshot --from 2026-01-01 --to 2026-06-30
tilldev shield compliance snapshots # newest first, and whether the chain holds
tilldev shield compliance export 4 --format md --out q2-evidence.md
tilldev shield compliance export 4 --out q2-evidence.json
tilldev shield compliance verify q2-evidence.json # recomputes the digest offlineThe API is GET /api/v1/shield/compliance with from and to, plus /shield/compliance/attestations, /exclusions, /snapshots and /settings. See the API reference.