Chained
Every change to the audit record lands in the activity log in the same transaction, linked to the entry before it by hash. Alter an entry after the fact and verification fails at that entry.
activity_log · prev_hash → row_hash
Stetfolio is the internal audit platform where every change is chained, every sign-off is sealed, and every conclusion leads back to its evidence — from the audit universe to the board pack.
stet /stɛt/ verb — the proofreader's mark for let the original stand.
sha256 ········
sha256 ········
§ 02 Why it exists
Audit work is judged twice. Once when it's done — and again, months later, when someone asks you to prove it. Stetfolio is built for the second time.
Every change to the audit record lands in the activity log in the same transaction, linked to the entry before it by hash. Alter an entry after the fact and verification fails at that entry.
activity_log · prev_hash → row_hash
A sign-off stores a hash of exactly what was signed. Changing the work afterwards means reopening it with a reason, which voids the sign-off in plain sight instead of overwriting it.
REV-02 · SHA-256 · VOIDED, NOT DELETED
Findings cite the procedure and evidence behind them. Issued reports carry the hash of their own bytes. Export the whole file — workpapers, evidence, hashes, voided sign-offs — as one archive.
ENG-2026-014 · AUDIT FILE · SHA-256 PER FILE
§ 03 The record
This is a real SHA-256 hash chain, computed in your browser. It works on the same principle as Stetfolio's activity log: each entry's hash covers its own content and the hash of the entry before it.
Six events from one procedure. Every link verifies.
§ 04 Workflow
01
Map every auditable unit, score it on your own model, and see coverage against each unit's audit frequency. Whoever scores an assessment can't approve it.
02
Build the annual plan from risk, check it against real team capacity, and roll it forward over years. Once the plan is approved, every move carries a reason.
03
Programs come from your library; procedures get rich workpapers and evidence that's scanned before anyone opens it. A readiness list says what's missing before you submit.
04
Preparer and reviewer are never the same person. Open review notes hold the review until they're cleared, and every sign-off is sealed with a hash of what it covers.
05
Condition, criteria, cause, effect and recommendation, rated on your own scale. Management responds from the portal; finalising locks the finding into the record.
06
Your Word template, your approval chain. The issued PDF carries the hash of its own bytes, and issuing it creates the management actions.
07
Owners post updates, attach evidence and ask for more time. You verify and grade the fix. Aging, reminders and escalation run on their own.
§ 05 Copilot
The copilot drafts findings, executive summaries, control-test tie-outs, planning memos and walkthrough narratives from the record, with a source for every field. When the evidence isn't there, it says so instead of guessing.
The record doesn't support a finding yet, so the copilot abstains rather than guess.
Logged as ABSTAINED · reason kept on the interaction
⌘K Ask
Ask in plain language. Counts come from the database, not the model, and every answer links to what it counted.
§ 06 The whole function
A coverage matrix of units by year, projected from frequency, last audit and risk, and checked against real capacity.
Chargeable hours after holidays and leave, week by week. Over-allocation shows up before it happens.
Saved tests run on a schedule against your controls. A breach opens an alert that a person decides on.
Benford, duplicates, gaps, thresholds and SQL. Each run is frozen and hashed, and its exceptions become findings.
The request is the sample: rows are items, columns are documents. Files find their row by name.
Rate all 15 principles of the 2024 Standards. The conformance statement is sealed with a content hash.
Upload a real .docx with merge tags and loops. Unknown tags are refused before anything is issued.
Rename objects, rating scales and fields to match your methodology. Every screen follows.
Risks link to controls, and control tests run through the same procedure engine. An ineffective control raises its finding in the same transaction.
§ 07 For the business
Document requests, observations to answer and actions to update, in plain language, on a phone. Business owners see only what's theirs.
Good morning, Ivy.
Two things need you this week.
Revenue sample — documents
Asked by A. Rahman · due 14 Oct
4 of 6 received5 of 6 received
Respond to observation F-02
Due 21 Oct
Write a responseFiles are scanned before anyone opens them.
§ 08 Platform
Every screen runs on a published API, and the server enforces every rule. The build fails if an acceptance criterion loses its test.
curl "$STETFOLIO_API/findings?engagement_id=$ENG" \
-H "Authorization: Bearer ak_…"
# 200 OK
{
"data": [{
"ref_code": "F-02",
"title": "Reconciling items not escalated",
"status": "FINAL",
"rating": 4,
"ai_interaction_id": "…"
}],
"page": { "next_cursor": null, "has_more": false }
}
import { createHmac, timingSafeEqual } from "node:crypto";
// Every delivery is signed: HMAC-SHA256 over the raw body, sent as "sha256=<hex>".
export function verify(rawBody, presented, secret) {
const expected = "sha256=" + createHmac("sha256", secret).update(rawBody).digest("hex");
return presented.length === expected.length &&
timingSafeEqual(Buffer.from(presented), Buffer.from(expected));
}
POST /scim/v2/Users
Authorization: Bearer scim_…
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "[email protected]",
"name": { "givenName": "Aisha", "familyName": "Rahman" },
"active": true
}
# Groups map to roles; deactivation in your IdP removes access here.
§ 09 What changes
§ 10 Questions
Short answers here. The walkthrough goes deeper.
No. The copilot is off until an admin turns it on for your workspace, and every AI control disappears while it's off. When it's on, you choose the model provider, including one you host yourself, and every draft is logged with its sources.
Yes. Stetfolio runs on Postgres, S3-compatible storage, ClamAV and Gotenberg, and signs people in through your identity provider over OIDC or SAML 2.0.
Import your audit universe and your open issues from CSV. Every import runs as a dry run first, lists the errors row by row, and then commits all or nothing. A setup guide takes you through the rest.
Rename objects to match your methodology, define your own rating scales and custom fields, keep work programs in a library, and issue reports from your own Word templates.
Only what's theirs: the documents requested from them, the observations they need to answer and the actions they own, in a separate portal written in plain language.
Every workspace is isolated in the database with row-level security, and restricted audits are visible only to the people on their access list. Evidence is scanned for malware before anyone can open it.
They have to reopen it with a reason. Reopening voids the sign-offs that covered the work — they stay on the record, struck through — and the change lands in the hash-chained activity log.
Yes. Export any audit as one archive — workpapers, evidence, hashes and voided sign-offs — and reach everything else through the REST API.
Put your next audit on a record you can defend. Thirty minutes on a demo workspace, one audit end to end:
Or write to [email protected]
fol. 11 · this page's text · sha256 ········