Client Onboarding & Integration Guide
How your institution evaluates DISCINTEL during early access, prepares its own governance model, and checks the evidence without having to take our word for it.
Open DISCINTEL1. Before you start
These four points shape everything else in the guide.
- Early access is an evaluation, not a production service. DISCINTEL is free during early access and features may change. The Terms of Service and Privacy Policy are drafts that are not yet in effect.
- You evaluate on a sample institution. Every Business workspace runs ACME Financial Services, a fictional institution with simulated approvers, a simulated sanctions list and a simulated payment rail. No real money moves and none of your systems are called.
- Each sign-in has its own workspace. Colleagues who sign up get separate workspaces; there is no shared team workspace yet. Plan the evaluation so each person runs the exercises on their own.
- Don't upload real customer or personal data. Use the sample, or de-identified files, until a data processing agreement is in place.
2. What's available today
Everything marked available can be tested in your workspace now. Everything marked not yet available is designed but not built or connected, and has no committed date.
| Capability | Status | Notes |
|---|---|---|
| Governed action lifecycle: decision, approvals, single-use admission, receipt, observed outcome, closure | Available now | Decisions, approvals, admissions, tool-gate verdicts and closure are issued by the server, not your browser |
| Approver decisions: approve, request changes (back to the requester for a new revision) or reject (final), each with a recorded reason; approvals lapse after 72 hours unless the obligation sets another period | Available now | Approvers are simulated personas in the sample |
| Evidence-bound research: public sources fetched by the server, hashed evidence, claims that must quote their evidence, synthesis and a completion check that re-verifies every hash | Available, limited | Public pages only (text, HTML, JSON, XML up to 2 MB; no PDF yet). Private sources are pasted as text after a Security Administrator approves access. Research never authorizes an action |
| Jurisdiction control: a payment, claim or purchase order is blocked unless both its tool and its governance domain allow the jurisdiction where it takes effect; a domain's jurisdictions change only through a governed action approved by the CFO and the Security Administrator | Available now | Checked by the workspace itself on decisions, tool calls and execution admission, whatever the runtime governor's mode. US, EU, UK and CN in the sample |
| Regulatory context: DORA and NIS2 events that apply to a decision in the EU or a member state, shown on the decision and recorded with it | Available, limited | Context only: it never changes a decision and is not legal advice. A dated, hashed snapshot of EU DORA and NIS2 events; other frameworks not yet included |
| File intake: upload, drag and drop, camera, paste | Available now | PDF, CSV, Excel, JSON and images up to 50 MB, each fingerprinted with SHA-256 on arrival |
| Governed administration: roles, break-glass, retention, suspending and reinstating agents, agent environments, enabling and disabling tools | Available now | Every change is proposed, approved and evidenced like any other action |
| Hash-linked evidence log, in-app verification and Inspector reconstruction | Available now | |
| Claim settlements (sample Claims domain): approval on cumulative exposure per claim and payee over 30 days, so splitting a settlement can't evade a limit | Available now | Thresholds are illustrative; the payment rail and observer are simulated |
| Policy comparison: a policy compared with the workspace's payment-release rules, with each rule marked match or gap | Available, limited | Text, Word (.docx) and PDF policies with selectable text, read in your browser; scanned PDFs can't be read. Payment release only; fixed text rules, not AI. Unreadable sentences are listed, not guessed. Changes nothing the workspace enforces |
| Evidence packages as JSON: whole institution (NAIC mapping) or a single action | Available now | Verifiable offline with the script in section 7 |
| NAIC AI Risk Evaluation Supplement (v5.0 exposure draft) mapping | Available, limited | Decision support only; not a regulatory filing or certification |
| Production and Test environments | Available, limited | Test is a label checked on every action, not a separate system or data store |
| Runtime governor: a second, independent check on each tool use | Available, limited | Shadow mode: its verdict is recorded beside each decision but never changes the outcome |
| Guided tours: 11 walk-throughs of the real screens, ten for the Business workspace and one for the Personal space | Available now | Built from the sample institution; open from Your account → Guided tours or at /tours.html. Available in Spanish and French, and a signed-in person resumes where they left off |
| Legal Intelligence: a matter's sources are retrieved by the server; the Legal Intelligence agent drafts a research memo and a legal-to-code traceability table from that evidence only; the server checks every quote word for word; each cited source is a link to the retrieved page; a licensed attorney reviews every draft | Available, limited | Public sources and provided text only; confidential client material is not supported. Jurisdictions: US federal, North Carolina, South Carolina, Colorado, EU. The agent cannot file, send, sign or give a final opinion, and no action it asks for is executed. Counsel review is self-attested; DISCINTEL cannot verify a licence. A draft is for attorney review, not legal advice |
| Handoffs: a blocked or held settlement reaches a named owner, who acknowledges it within four business hours or it escalates, and records what was done | Available now | DISCINTEL records the outcome the institution reports; it does not judge it |
| Agent revalidation: an agent whose version changed is revalidated before it acts on a consumer-facing effect | Available now | A Security Administrator other than the requester records the revalidation, with a note; the approver is simulated in the sample |
| Language: the app and the guided tours in Spanish and French; chat understands requests in either | Available, limited | Translations are awaiting native-speaker review. An amount that could be read two ways, or one not in US dollars, is asked about, not guessed. These guides are in English only |
| Loading your own institution, people, agents, tools and policies | Not yet available | Prepare with the worksheet in section 5 |
| Shared team workspace with real approvers | Not yet available | Approvers are simulated today |
| Single sign-on with your identity provider; user provisioning | Not yet available | Sign-in today is passkey, or email and password |
| API access for your agents and systems | Not yet available | The server API serves the DISCINTEL app's own sign-in; no client credentials are issued |
| Distributing a research summary as its own governed action (decision, approval, sandbox send) | Not yet available | Designed; research results stay in the workspace today |
| Data source connectors: SharePoint, OneDrive, Google Drive, Box, databases, approved APIs | Not yet available | Listed in the app under Connect Source as planned |
| Execution on your systems; independent outcome observation | Not yet available | The payment rail and the observer are simulated |
3. Onboarding, step by step
Plan on about an hour for one evaluator to get from sign-up to a verified evidence package.
- Create the account. Go to app.getdiscintel.com and choose Create free account. Use a passkey (Face ID, Touch ID or Windows Hello) if you can; there's nothing to phish. Verify your email, then choose Business.
- Initialize the sample institution. On first visit choose Initialize sample institution. It loads the institution's records, records its own setup as the first evidence events, and starts the sample request with a 48-payment wire file. You act as Olivia Carter, Treasury Manager, a demo persona.
- Confirm you're saving to the server. The status chip in the top bar should read Persisted · Netlify. If it doesn't, see Troubleshooting.
- Record a baseline. In Reports & Assurance, generate the NAIC evidence package and run the verifier from section 7 on it. Its last lines read Record this head: <sequence>:<hash>. Keep that line, and the package, somewhere outside DISCINTEL, such as your evaluation file. It's how you'll show later that the log only grew.
- Run the evaluation checklist. Work through section 4. Each exercise names what you should see.
- Exercise administration. Follow at least one play in the Admin playbook, for example suspending and reinstating an agent, so your control owners see that changes to governance are themselves governed.
- Export and verify again. Generate a new NAIC package and an action package, and run the verifier on them, checking the new NAIC package against your baseline as shown in Checking the log only grew.
- Map your institution. Fill in the worksheet in section 5 with your risk and technology owners. It is the input for a pilot once your own records can be loaded.
4. Evaluation checklist
Each exercise tests one control. The expected result is what the sample produces. If you see something else, note the evidence sequence number from TrustDNA Evidence and tell us.
| # | Do this | Expect | Control tested |
|---|---|---|---|
| 1 | After initializing, read the analysis of the sample file in Chat & Actions | 48 payments analyzed; two exceptions held out (a duplicate payment and a changed beneficiary account), leaving a clean batch of 46 | Files are fingerprinted, and analysis uses no authority |
| 2 | Submit for governance evaluation | ASK: $455,900 across 46 payments needs Manager, Dual and CFO approval, bound to the file, agent, tool and environment | Server-issued decision with every check listed |
| 3 | Record the three approvals, then request execution admission | Admitted once; a receipt; an observed outcome of CONFIRMED; Closure · CLOSED · server-evaluated | Single-use admission; receipt kept separate from outcome |
| 4 | On another action, choose Simulate: replay admission | The replay is refused and recorded | An admission works once |
| 5 | In Objects & Data, choose Simulate: modify this file on a bound file | The decision stops applying; re-evaluation is required | Decisions are bound to file hashes |
| 6 | Switch the agent, or the environment, on an evaluated action | Decision and approvals stop applying; re-authorization is required | A material change invalidates authority |
| 7 | Select an agent without the screening grant and ask for a sanctions check | Sanctions screening was not run, with the reason, recorded under that agent's name | Having a tool isn't permission to use it |
| 8 | Run Simulate: rail rejects, then Simulate: short settlement | A failed execution that needs a new admission; a MISMATCH outcome that stays open as an exception | Closure requires a matching observed outcome |
| 9 | Withdraw an action after evaluation, before execution | Decision retired, approvals and admission invalidated, action DISCARDED | Nothing executes after withdrawal |
| 10 | Disable the payment tool through Administration, then try to execute | No dependent action can be admitted while the tool is disabled | Revocation takes effect immediately |
| 11 | Inspector → Reconstruct and verify | Every link recomputes; the action traces file → request → decision → approvals → admission → receipt → outcome | End-to-end reconstruction |
| 12 | On a request awaiting approval, choose Reject or request changes → Request changes with a reason, then try to re-evaluate the same revision | Refused until a new revision is saved; the old approvals no longer count | An approver's "no" can't be bypassed by resubmitting |
| 13 | In Research, retrieve a URL on a private network (for example an intranet host) | Refused: the host resolves to a non-public address. The refusal is recorded | The server can't be used to reach internal systems |
| 14 | Record a FACT claim whose quote isn't in the evidence | Refused: the quote does not appear word for word; recorded as CLAIM_REJECTED | No unsupported facts |
| 15 | Start research that asks for Connected private sources | Waits at Authorization required with an access request a Security Administrator (not the requester) must decide | Private data needs separate human authorization |
5. Mapping your institution
DISCINTEL models governance as 19 record types in five groups. Today a workspace holds only the sample institution, so this worksheet is preparation: it is what your own deployment would be built from once loading your records is available.
| Group | Record types | What you gather | Typical owner |
|---|---|---|---|
| Identity | Institution, Governance domain, Principal, Organization role, Agent identity | The legal entity and its jurisdictions; business domains (for example Treasury, Procurement, Compliance) and the environments each allows; the people who request and approve; roles, and the pairs one person must never hold together; each AI agent's purpose, owner, version, consequence class and environments | Risk, compliance, HR systems |
| Capability | Tool, Governed object | Every system an agent can call: its type (HTTP API, MCP server, internal service, enterprise application), owner, consequence class, allowed environments and which agents may invoke it. The kinds of files and data agents act on, and their sensitivity | Technology and data owners |
| Authority | Authority grant, Delegation, Obligation, Revocation event | For each agent, the effects it may cause (for example prepare a payment, release a payment, read the vendor master, screen sanctions) with scope and amount limits. Approval thresholds, dual-approval rules, outcome-verification and evidence requirements | Policy owners, first line |
| Action | Governed action, Decision, Approval, Execution admission, Execution receipt, Observed outcome | Nothing to gather: these are produced as agents act. Decide which system reports receipts and which independent source confirms outcomes | Operations |
| Evidence | Evidence event, Retention policy | The minimum retention for each record class, and who may change it | Records management, legal |
Consequence classes
Every agent and tool carries one, from A (low) to D (regulated or financial). Assign it from the worst thing the agent or tool could do, not the usual case.
Questions to settle before a pilot
- Which single, bounded workflow will the pilot govern, and which agent performs it?
- Who approves, and what thresholds trigger each approval?
- Which system executes, and what does its receipt contain?
- Which independent source confirms the outcome: a ledger, a statement, a downstream record?
- Which environments does the workflow run in, and must Test be physically separate from Production for you?
- Who reviews the evidence packages, and how often?
6. How integration works
This flow runs end to end in the sample today, with the payment rail and the observer simulated. Connecting it to your own agents and systems is designed but not yet available: no client credentials or connectors are issued.
Integration points
| Point | Direction | What crosses | Status |
|---|---|---|---|
| Proposal and decision | Your agent → DISCINTEL | The proposed effect, amount, targets, agent, tool, environment and the hashes of the material files; back comes the verdict with every check | Not yet available |
| Approvals | Your approvers → DISCINTEL | Signatures recorded by the server, with segregation of duties enforced | Not yet available |
| Admission and tool gate | Your system ↔ DISCINTEL | A single-use admission your system presents before acting; DISCINTEL validates and consumes it in one step | Not yet available |
| Receipt and observed outcome | Your system and an independent source → DISCINTEL | What the executor says happened, and separately what was observed | Not yet available |
| Material files | You → DISCINTEL | Uploaded or pasted files, fingerprinted on arrival | Available now |
| Research sources | Public web → DISCINTEL | Pages you name are fetched by the DISCINTEL server, never from your network; only public addresses, ports 80 and 443, up to 2 MB. Each is stored with its hash | Available, limited |
| Data sources | Your repositories → DISCINTEL | Objects retrieved under the agent's authority and purpose. Connecting a source never grants use of everything in it | Not yet available |
| Evidence export | DISCINTEL → you | Sealed JSON packages, verifiable offline | Available now |
The admission contract
The server enforces these rules today. They are what a connected system would rely on.
- A decision is bound to the file hashes, agent, tool, environment and tool status it was made on. A change to any of them retires it.
- Admission re-checks everything: the decision is still effective, approvals are complete, files are unchanged, the agent and environment are unchanged, and the tool is active and permitted for that agent.
- An admission works once, expires after five minutes and is bound to a hash of the exact request. A replay, or any change to the request, is refused and recorded.
- Withdrawal is possible up to execution and invalidates the decision, approvals and admission together.
- Closure is evaluated by the server. An action closes only when the observed outcome matches the request and the evidence trail is complete.
- A receipt is a claim; an outcome is evidence. Only an observed outcome confirms that what was approved is what happened.
7. Verifying evidence yourself
You shouldn't have to trust DISCINTEL's own screen. Every evidence package can be checked on any machine with Node.js 18 or later, using only built-in cryptography and no network access.
What a package contains
| Field | Meaning |
|---|---|
package_type | NAIC_AIRES_V5_MAPPING (the whole institution) or ACTION_EVIDENCE (one action) |
chain_head | Sequence number and hash of the newest evidence event when the package was made |
verification | The most recent in-app verification and its checks |
items, systems | NAIC packages: each item's status and the records behind it; each AI system's tools and outcomes |
records | The governance records in scope, grouped by record type |
evidence_events | The evidence events in scope, each with sequence, prev_hash and event_hash |
limitations | What the package can't show, stated inside the package |
package_hash | SHA-256 seal over everything above |
How the hashes are computed
Canonical JSON means object keys sorted, keys beginning with an underscore left out, and no whitespace. Then:
event_hash = SHA-256( prev_hash + canonical(event without event_hash) )
prev_hash = event_hash of the previous event (64 zeros for the first event)
package_hash = SHA-256( canonical(package without package_hash) )
file hash = SHA-256( the file's exact bytes )
Run the verifier
Download the script, or copy it below and save it as verify-discintel-package.mjs, then run it on a package, optionally followed by original files you uploaded and still hold:
node verify-discintel-package.mjs discintel_naic_v5_<time>.json payments.csv
It checks the seal, recomputes every event hash, checks each link, requires an institution package to run unbroken from the first event, and matches your files to the fingerprints recorded when you provided them. For an institution package it ends by printing the head to record. It exits with 0 when everything passes and 1 when anything fails.
#!/usr/bin/env node
// Independently verify a DISCINTEL evidence package (NAIC or action package).
// Usage:
// node verify-discintel-package.mjs <package.json> [file-you-provided ...]
// node verify-discintel-package.mjs <package.json> --since <earlier-package.json>
// node verify-discintel-package.mjs <package.json> --expect-head <sequence>:<event_hash>
// Needs Node 18 or later. Uses only Node's built-in crypto; sends nothing anywhere.
import { readFileSync } from "node:fs";
import { createHash } from "node:crypto";
import { basename } from "node:path";
// Canonical JSON, identical to DISCINTEL's: keys sorted, keys starting with "_" dropped, undefined as null.
const canon = (v) => Array.isArray(v) ? "[" + v.map(canon).join(",") + "]"
: v && typeof v === "object" ? "{" + Object.keys(v).filter((k) => !k.startsWith("_")).sort()
.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}"
: JSON.stringify(v === undefined ? null : v);
const sha256 = (data) => createHash("sha256").update(data).digest("hex");
const ZERO = "0".repeat(64);
const usage = () => { console.error("usage: node verify-discintel-package.mjs <package.json> [file ...] [--since <earlier-package.json>] [--expect-head <sequence>:<event_hash>]"); process.exit(2); };
// Arguments: the package, then any mix of files and options.
const args = process.argv.slice(2), files = [], expect = [];
let pkgPath = null;
for (let i = 0; i < args.length; i++) {
const a = args[i];
if (a === "--expect-head") {
const m = /^(\d+):([0-9a-f]{64})$/i.exec(args[++i] || "");
if (!m) { console.error("--expect-head needs <sequence>:<64-character event_hash>, as printed under 'Record this head'"); process.exit(2); }
expect.push({ sequence: Number(m[1]), event_hash: m[2].toLowerCase(), from: "--expect-head" });
} else if (a === "--since") {
const p = args[++i]; if (!p) usage();
const old = JSON.parse(readFileSync(p, "utf8"));
if (!old.chain_head) { console.error(`${basename(p)} has no chain_head to compare against`); process.exit(2); }
expect.push({ sequence: old.chain_head.sequence, event_hash: old.chain_head.event_hash, from: basename(p) });
} else if (a.startsWith("--")) usage();
else if (!pkgPath) pkgPath = a; else files.push(a);
}
if (!pkgPath) usage();
const pkg = JSON.parse(readFileSync(pkgPath, "utf8"));
let failed = 0;
const report = (ok, msg) => { console.log((ok ? "PASS " : "FAIL ") + msg); if (!ok) failed++; };
// 1. Package seal: SHA-256 of the canonical package without its own package_hash.
const { package_hash, ...body } = pkg;
report(sha256(canon(body)) === package_hash, `package seal ${String(package_hash).slice(0, 16)}… (${pkg.package_type}, generated ${pkg.generated_at})`);
// 2. Every evidence event: its hash recomputes from its own content and the previous event's hash.
const evs = [...(pkg.evidence_events || [])].sort((a, b) => a.sequence - b.sequence);
let bad = 0;
for (const e of evs) { const { event_hash, ...rest } = e; if (sha256(String(e.prev_hash) + canon(rest)) !== event_hash) bad++; }
report(bad === 0, `event hashes: ${evs.length - bad} of ${evs.length} recompute`);
// 3. Links: where consecutive sequences are both present, each prev_hash equals the event before it.
let links = 0, broken = 0;
for (let i = 1; i < evs.length; i++) if (evs[i].sequence === evs[i - 1].sequence + 1) { links++; if (evs[i].prev_hash !== evs[i - 1].event_hash) broken++; }
const full = evs.length > 0 && evs[0].sequence === 1 && evs[0].prev_hash === ZERO && links === evs.length - 1;
report(broken === 0, `chain links: ${links - broken} of ${links} consecutive links match` + (full ? " (complete chain from genesis)" : pkg.package_type === "ACTION_EVIDENCE" ? " (an action package carries only that action's events)" : ""));
// 4. An institution (NAIC) package carries the whole log: it must run unbroken from genesis to the head it names.
if (pkg.package_type === "NAIC_AIRES_V5_MAPPING") report(full, `complete log: ${evs.length} events from sequence 1 with no gaps`);
if (full && pkg.chain_head) {
const last = evs.at(-1);
report(pkg.chain_head.sequence === last.sequence && pkg.chain_head.event_hash === last.event_hash, `chain head sequence ${pkg.chain_head.sequence} matches the last event`);
}
// 5. Optional: an earlier head must still be in this log, unchanged, at the same sequence. An honest log only grows.
for (const x of expect) {
const label = `earlier head ${x.sequence}:${x.event_hash.slice(0, 16)}… (from ${x.from})`;
if (!full) { report(false, `${label}: not checked. Compare against an institution (NAIC) package, which carries the whole log`); continue; }
const e = evs.find((v) => v.sequence === x.sequence);
if (!e) report(false, `${label}: this log has only ${evs.length} events, so it is shorter than the log that head came from`);
else if (e.event_hash !== x.event_hash) report(false, `${label}: sequence ${x.sequence} here is ${e.event_hash.slice(0, 16)}…, so this is not the same log. If DISCINTEL told you your workspace moved, check its continuity statement; otherwise, contact DISCINTEL`);
else report(true, `${label} is still in this log, unchanged, ${evs.length - x.sequence} events later`);
}
// 6. Optional: files you still hold match the fingerprints recorded when they were provided.
const objs = (pkg.records && pkg.records.GovernedObject) || [];
for (const f of files) {
const h = sha256(readFileSync(f));
const hit = objs.find((o) => o.content_hash === h);
report(!!hit, `${basename(f)} sha256 ${h.slice(0, 16)}… ` + (hit ? `matches ${hit.record_id} (${hit.filename})` : "matches no file in this package"));
}
if (full && pkg.chain_head) console.log(`\nRecord this head: ${pkg.chain_head.sequence}:${pkg.chain_head.event_hash}\nCheck later packages with: --expect-head ${pkg.chain_head.sequence}:${pkg.chain_head.event_hash}`);
if (!expect.length) console.log("\nNOTE These checks prove the package is internally consistent. To show the log wasn't rebuilt wholesale, check it\n against a head you recorded earlier, with --since <earlier package> or --expect-head <sequence>:<hash>.");
console.log(failed ? `\n${failed} check(s) FAILED. See the FAIL lines above.` : "\nAll checks passed.");
process.exit(failed ? 1 : 0);
Checking the log only grew
On its own, a package can only prove it is internally consistent: nothing in it was edited, reordered or removed after it was sealed. It can't rule out a log rebuilt from scratch. An honest log only grows, so the head you recorded earlier must still be in every later package, unchanged, at the same sequence number. Check that with either option:
node verify-discintel-package.mjs <new NAIC package>.json --since <baseline package>.json
node verify-discintel-package.mjs <new NAIC package>.json --expect-head 284:dc377a80…
The second form takes the full line you recorded (the example hash is shortened here). Both work only with institution (NAIC) packages, because an action package carries only that action's events.
| Result | Meaning |
|---|---|
| is still in this log, unchanged, N events later | The log grew from your baseline without changing anything before it |
| is shorter than the log that head came from | The new package has fewer events than your baseline. A log should never shrink |
| this is not the same log | The event at that sequence number differs: the log was rebuilt or replaced |
If your workspace moves
If DISCINTEL ever has to move your workspace to new storage, the new log starts again at sequence 1, and the check above will report this is not the same log. Before that happens we'll send you a continuity statement: the old log's final head, the new log's first event, the date and the reason. Keep it with your baseline. A different log with no statement is a question to raise with us.
8. Security and data handling
| Area | Today |
|---|---|
| Sign-in | Auth0, with passkeys supported. Every request to the server carries a signed token that is checked every time |
| Isolation | Each account's Business workspace is stored separately; no other account can read it |
| Hosting and location | Netlify hosts the app, its server function and its storage. The runtime governor runs on Fly.io in US East (Virginia), behind Cloudflare's proxy. DISCINTEL and its providers process data in the United States |
| Encryption | TLS in transit |
| Outbound requests | Research retrieval is the only feature that fetches from the internet. The server refuses private, loopback, link-local and reserved addresses (including cloud metadata), ports other than 80 and 443, and URLs with credentials; it connects only to the address it checked and re-checks every redirect |
| AI processing | Approvals, decisions and the evidence log are produced by deterministic rules you can inspect. The only feature that sends content to an AI model provider is Legal Intelligence. When it runs, the sources for the matter go to Anthropic's API to draft a research memo. It runs only where a model key is configured. |
| Tracking | No advertising or analytics scripts |
| Evidence | Hash-linked and append-only within a live workspace. Deleting the account deletes the whole workspace, including its log; packages you downloaded remain yours |
| Deletion | Email privacy@getdiscintel.com from the account's address |
| Contracts | Terms and Privacy Policy are drafts, not yet in effect. A data processing agreement isn't offered yet |
For full detail, read the Privacy Policy draft, and see the questions security teams ask first in section 9.
9. Security questions, answered
The questions security teams ask first, with today's answers. Where the answer is no, it says so.
| Question | Answer today |
|---|---|
| Do you have a SOC 2 report or ISO 27001 certification? | No. Neither has been started. |
| Has the service had an independent penetration test? | No. |
| Will you sign a data processing agreement? | Not yet. Until one is in place, keep real customer and personal data out of your workspace |
| Where is our data stored and processed? | In the United States. Netlify hosts the app, the server function and the workspace storage, in its US East (Ohio) region. The runtime governor and its audit log run on Fly.io in US East (Virginia); it receives the identifiers, effect, amount, environment and class of each check, and research source addresses, never file contents or payee names |
| Who are your subprocessors? | Auth0 (Okta, Inc.) for sign-in; Anthropic, PBC for Legal Intelligence drafts only, where a model key is configured (Anthropic Ireland, Limited for customers in the European Economic Area); Netlify, Inc. for hosting, server functions and storage; Fly.io, Inc. for hosting the runtime governor; Cloudflare, Inc. for DNS and as the proxy in front of the runtime governor. Details are in the Privacy Policy draft |
| Is our data encrypted? | In transit, with TLS. At rest, workspace records are held in Netlify's managed storage; DISCINTEL doesn't hold separate encryption keys for them |
| Who at DISCINTEL can see our workspace? | DISCINTEL is founder-operated during early access. The founder, as operator of the hosting account, can technically read stored records; this is done only to investigate a problem with your workspace. The app's own Founder dashboard lists each account (email, sign-in method, dates) with how often its users opened each screen and used each control, and the number of records in a workspace by kind, never workspace contents |
| Can research reach our internal network? | No. The server fetches only from public addresses, checks every address a host name resolves to, connects to the address it checked, and re-checks each redirect. Private sources can only be pasted in, after a Security Administrator approves access |
| Is our content sent to an AI model? | No. Decisions come from deterministic rules you can inspect |
| How do users sign in? | Through Auth0, with passkeys, which are phishing-resistant, or email and password. Single sign-on with your identity provider isn't available yet |
| How are changes to the service controlled? | Every release goes through a pull request. Before merging, the automated tests and a check that stored authority matches the canonical records must pass, and the hosting provider's checks must succeed. Each deploy is scanned for exposed secrets |
| Do you have tested backups and a restore procedure? | Not yet. A rehearsed rollback and a timed restore are planned before any production use |
| Will you notify us of a security incident? | Yes, directly by email. There is no contractual notification period yet |
| How do we report a vulnerability? | Email privacy@getdiscintel.com |
| How do we delete our data? | Email privacy@getdiscintel.com from the account's address. Deleting the account deletes the whole workspace, including its evidence log |
Send full questionnaires to privacy@getdiscintel.com.
10. Known limitations
Better you read these here than find them yourself.
- The sample institution, its approvers, its sanctions list and its payment rail are fictional or simulated.
- In the sample, execution receipts and observed outcomes are written by the app in your browser, because the rail and the observer are simulated there, so they are only as trustworthy as that session. Decisions, approvals, admissions, tool-gate verdicts and closure are server-issued.
- Test and Production share one workspace, evidence log and sign-in. Test separates trial actions by label only.
- The runtime governor is optional. Where it is enabled, it runs in one of two modes: shadow, which records its verdict without changing the outcome, or enforce, where its stricter verdict applies. Production runs in shadow mode.
- Legal Intelligence drafts are for attorney review. The quote check proves a quote is in the cited source; it does not check the proposition's wording, the memo's analysis or whether a provision is fully covered. Drafts depend on a language model and can take minutes.
- Spanish and French cover the app screens, chat and guided tours; the guides, the terms and the privacy policy are English only, and the translations await native-speaker review.
- Research fetches public text, HTML, JSON and XML only; PDFs and pages that need a sign-in can't be retrieved. Paste the relevant text instead.
- A private-source label on pasted text records what an approved person said the text is; DISCINTEL can't verify where pasted text came from.
- Research access requests and approvals are decided by simulated personas in the sample, like every other approval.
- The NAIC mapping is decision support. It shows what your records evidence; it isn't a filing or a certification.
- Packages mark a file INCOMPLETE where its bytes weren't retained. Its fingerprint still is, so a copy you hold can still be matched.
11. Troubleshooting
| You see | Do |
|---|---|
| No verification email | Check spam or junk; you can keep evaluating while you wait |
| Sign in to continue or Your session ended | Sign in again; your workspace is where you left it |
| The status chip doesn't say Persisted | Saving… clears on its own. Save failed: choose the chip to see which record and why. Read-only: your access can view records but not change them |
| A decision stopped applying | Something material changed: the file, agent, environment or tool. Re-evaluate against the current context |
| Environment … is not registered there | The agent, tool or domain doesn't allow the environment you're in. Switch it in Action context, or change the agent's environments through Administration |
| The verifier reports this is not the same log | See If your workspace moves. With no continuity statement from us, contact us before relying on the package |
| The verifier fails the package seal | The file changed after download; even reformatting it in an editor does that. Download it again |
| A file you hold matches nothing in the package | Check it's the exact file you uploaded; re-saving or converting it changes its bytes |
12. Getting help
Questions, feedback, evaluation results and pilot discussions: legal@getdiscintel.com. Privacy requests, security questionnaires and security reports: privacy@getdiscintel.com. When you report a result, include the evidence sequence number from TrustDNA Evidence.