This page says what the panel may do to the document you have open, where the file goes, what the engine keeps and for how long, and how the API decides who may call it. Everything here is read off the code that runs.
The last section is the list of things that are not built. If you are the one signing this off, read that one.
A Word transfer is started in Word and lands in InDesign, so the write is remote and the target is a document that may hold unsaved work. That is the case the panel asks about first.
The convert route creates a fresh InDesign document. Convert into the open document is a setting, and it is off by default. Tick it and your template’s own styles win: the panel will not overwrite a style that already exists. Since 0.8.0 it also leaves your page margins, page setup, masters, page numbering and your own text frames alone.
Before a convert the panel closes the documents it made, matched by a label it wrote on them — never one of yours. Since 0.8.0 it no longer writes that label on your template, and a labelled document that has a file on disk and unsaved changes is left open and named in the log instead of closed. If other documents are open it says so in the log and leaves them alone.
One never sees a file at all. One uploads the Word file. The third, new in 0.8.0, sends InDesign’s own ePub export to be finished.
The Word add-in reads your open document through Word’s own API and sends a harvest of text, numbers
and measurements. Nothing on this route parses a .docx. Figures travel as a separate
upload, and the engine refuses a harvest with binary smuggled inside it.
<name>-raw.epub), the page geometry
(<name>.layout-facts.json) and the report (<name>.dinno-report.html
and .json).Settings → Engine names the target. Each surface has the setting, and each shows which engine it reached.
dev. Local is an engine on your machine over plain
HTTP; a custom URL is whatever you point it at.
The expiries below exist so an always-on container does not sit on document imagery. They are memory hygiene, not a retention policy — and they are the only clocks there are.
Its file name, a SHA-256 of its bytes, and its structure — counts of blocks, tables and figures — and the text itself while a run is in flight. A Word-transfer session holds the document name and the harvest for as long as the engine process runs.
A colleague cannot pull your plan when the engine knows who you are: a plan is stamped with its owner, and a different signed-in user is refused. With no identity — which is what the gate turned off means — a plan has no owner, and anyone who can reach the engine and knows the plan’s id can fetch it.
Figures and slide rasters sit in the engine’s memory keyed by the document’s SHA-256, with the
compiled plan beside them. All of it is swept on /healthz, which the container’s
liveness probe calls every 30 seconds — so it expires even when nobody is converting.
One file of pairings: who paired which plugin on which machine, when it was created, when it was last used, whether it is revoked. Where the engine hosts sign-in, a user list as well.
Document content touches disk in two places: a chunked upload’s parts and the file they are joined into, in a temporary folder deleted when the request returns; and an ePub job’s folder.
The raw EPUB, the page geometry, any whole-page PDFs, the finished EPUB, its report and the
gate’s output, in one folder per job. It is deleted once the job is an hour old and not running,
swept on /healthz and whenever a new job starts.
Until then the finished EPUB and the report download by the job’s random id, which with sign-in enforcement off is all it takes.
Your .docx, and your plugin’s tokens. The engine keeps a refresh token’s identifier,
not the token, and an access token is checked by its signature so there is nothing to look up.
Access tokens last 8 hours and refresh tokens 30 days; the InDesign panel renews its own.
A password, where the engine hosts sign-in, is kept as a PBKDF2-SHA512 derivation at 210,000 iterations.
The run log. The panel writes it to its own data folder as it works — fresh each session, the previous one kept beside it. Settings → Diagnostics shows the path and has a “Save a copy…” button.
It stays on your machine unless you attach it to a report — or unless the co-pilot is switched on,
in which case /mcp can read its tail; since 0.8.0 only a co-pilot paired to your own
account, never an anonymous one.
Each ePub export also leaves its working copy — a copy of every document of the book, a new
.indb, Dinno’s styles for the ePub, the page geometry and the finishing report —
in a dinno-epub-<time> folder in the panel’s temporary folder. Nothing deletes
these yet, so disk use grows with every export.
For the Dinno team’s support, the InDesign panel, Word and PowerPoint send the engine their warning and error lines — the first line only, at most 300 characters — and a few status facts: the refusal you saw, how long a send waited, whether you are paired.
File paths, document names, e-mail addresses, tokens and codes are removed first, on your machine and again on the engine. Ordinary lines are never sent, and the panel sends nothing while a run is working in InDesign.
The gate denies by default. Every path is protected unless its first segment is on a short open list — plus the site’s own pages and assets, which sit at the root and are matched one segment deep only.
healthz, pair, downloads, idp,
connect — and the two sign-in callbacksYou cannot gate the door people
authenticate through.addinThe two Office task panes. Office fetches them with no
credential of ours, so only built pane assets are staged there.guide-assets and imgThe guides’ figures, and this
site’s own. Public artwork; nothing else is staged under either.mcpOpen by decision. What that costs is in
Not built yet.The first version listed the protected prefixes, so the next endpoint anyone added shipped unauthenticated and no test failed. Listing what is open inverts the failure: forgetting a route locks it, which is noisy, instead of opening it, which is silent.
off touches nothing. warn validates every request and logs the ones it would have rejected — that log, not a date, is what says the field is ready. require answers 401 with a reason the plugins turn into a re-pair prompt.
A mode the engine does not recognise runs off and says so loudly. /healthz
reports the effective mode, never the raw string.
You do not have to take any of that on trust. Ask the engine serving this page what it is doing:
Read off an engine started in warn with a configured signing key. The Azure engines today answer off and ephemeral: enforcement, and signing in with your PeopleCert account (Microsoft Entra ID), are planned for 1.0, and the signing key’s own vault is prepared and switched off. The engine behind this page answers the same question about itself, and its answer is the one that counts.
The plugin shows an eight-character code — drawn from an alphabet with no look-alike characters, live for ten minutes, usable once — and you approve it on the engine’s own page, where you are signed in.
The plugin API allows any origin, because its callers are a panel and a task pane holding a bearer token rather than a cookie. The site half of pairing — peek, approve, my devices, revoke — refuses every origin, so a page open in your browser cannot approve a code, list your devices or revoke one.
Starting a pairing is anonymous by design. Nothing is minted until you approve the code on the engine’s own page.
Since 0.8.0 the panel’s, Word’s and PowerPoint’s logs no longer record the live pairing
code. An invitation link carries its code after #, which a browser never sends to the
server; links in the old form still work.
require. The gate looks the pairing up on
every protected request, so under require the plugin’s next call is refused at once and it
asks to pair again. Under warn nothing is refused at all, so a revoke does not reach the
device until the mode changes.A conversion that half worked is the dangerous outcome, because it looks finished. The report is built so that it cannot.
The report heads them “N defect(s) — named, not swallowed” and lists each by code, with a sample and a count. A region whose text did not fit is marked sealed, in the same sentence in the panel and in the pane: the content is preserved and editable, it did not fit the reserved pages.
Terminal states carry no checkmark and no progress figure, deliberately — a partial run must not read as success, and it must not read as total failure either. “Completed with defects” is treated as the common case and gets the most structure, not the least.
The measured full-book run composes 387 pages from 363 Word pages and says why: every section opens on its own page, and 51 of 80 start on a Word page the previous section still occupies.
Six further gaps — cover art, 306 decorative shapes, headers and footers among them — are listed with their measures rather than left to be discovered.
Two pages out of the measured run: one generated, one held.
The gate and the pairing above are built. Enforcing them, with sign-in through your PeopleCert account (Microsoft Entra ID), is planned for 1.0. This is the part to read before approving an upload.
require would stop every
designer’s panel. The Azure engines run it off, so every protected route answers without a
token, and their signing key is temporary, so a restart invalidates every token they issued. A vault for that
key is prepared and switched off; turning both on belongs to 1.0./mcp is authless in this phase, with its own
connector clients. The InDesign panel answers it only if the designer switched the co-pilot on in
Settings, which is off by default.
Sign-in enforcement and the rest of the hardening are on the roadmap under 1.0, not dated yet; retention and service limits are listed there as directions. If something here is wrong, or a gap needs to move up the list, say so — that is how the list gets shorter.