1Purpose

This document is a translation in substance. The reference is the original document in French; extensions and changes are always made there.

The Kit presents itself as independent from the artificial intelligence that runs it. It is not: its chain assumes tools, a directory layout and behaviours that it does not provide. This document states what it requires.

It names no engine. Each engine writes its own record alongside, answering the contract of §2 line by line and declaring what it lacks. The contract belongs to the Kit and holds everywhere; the record belongs to the engine, and only it can measure it.

Note:A record ages, and that is intended. An environment that shifts shows in the gap between two records. It is also why the check in §5 is replayed every session rather than read from a document.

2Execution contract

Each line names a capability, the use the chain makes of it, and what falls away without it. The order of the lines is fixed: it is what makes two records comparable.

Capability Use Without it Degree
Node.js Runs the stylesheets and the generators. Nothing is produced. Required
docx module Builds the document and serialises it. No document. Required
Python 3 Extraction, checking and rendering tools. No checks, no cover sheet. Required
pandoc Converts a document into a web page, and reads the Cover Sheet. No web page. Conditional
LibreOffice Converts a document into PDF. The site publishes without PDFs. Conditional
zip Produces the project archive when projectShareable is true in the Registry. The pass stops: the link announced by projectZip.downloadUrl would point at a missing archive. Required if projectShareable is true
Pillow Composes the cover sheet PNG. No rendered cover sheet. Conditional
adm-zip module Builds the site archive. The site generates without an archive. Conditional
Note:No external module is required to produce a document since General v1.83: the fingerprint is verified by reading the archive’s central directory, without a library. adm-zip now serves only site publication.

3Degrees of requirement

Three degrees, and they govern what to do when a capability is missing.

–Required: the chain stops. There is no honest degraded version of a document: without the building engine there is not a poorer document, there is no document.

–Conditional: one output disappears, the rest comes out. A site without PDFs beats no site. The omitted output is declared.

–Tolerated: a workaround exists and is declared with its cost. Installing at the start of a session is one: it does not survive.

Note:Produce what you can as long as what you produce stays right. The distinction is not one of severity but of nature: a missing conditional capability removes an output, a missing required one makes the result wrong. A document with an empty body opens without warning and passes the validator — Quality Control §3.14.

4Rules independent of the engine

They follow from the contract and hold in any environment. Their home is elsewhere; they are recalled here because a record answers them.

–Single resolution: every file in one chain resolves the building module the same way. Two instances produce a valid and empty document. General Reference §1.3.

–Resolution order: ordinary resolution, then the root declared in KIT_NODE_MODULES, then the one the package tool reports. No path is written in advance.

–Local timestamp: file names carry Luxembourg time, never the container’s. Only the Registry deployment stamp is in universal time.

–Rewritten generator: no generation script survives from one session to the next. Each session starts from the active stylesheet and its Reference.

5Session opening check

Before any generation, the engine replays the check below and declares its result. This is not an invitation: it is the zeroth link of the validation chain, and it precedes the first check of Quality Control §3.13.

node --version
node -p "require.resolve('docx')"
node -p "Object.keys(require('docx')).length"
python3 --version
python3 -c "import PIL; print('Pillow', PIL.__version__)"
which pandoc soffice
node -e "require('adm-zip'); console.log('adm-zip')"

The declaration precedes generation, never the reverse. The engine announces what it will produce and what it will not. Discovering an absence at the end of a pass is discovering it too late.

–A required capability is missing: stop, naming the capability and the command that installs it.

–A conditional capability is missing: the corresponding output is announced absent, and the pass continues.

–A workaround is applied: it is declared in the pass output and carried into the engine’s record.

6Format of a record

An engine record carries the engine prefix and the Documentation category — Naming Convention §2. It has six sections, in this order.

# Section Content
1 Purpose and dates Which environment, date of writing and date of last check. The gap between them informs.
2 Answer to the contract The table of §2, same line order, with what is observed and where.
3 Gaps What is missing, and which degree of §3 it matches.
4 Workarounds What is done about it, and what it costs.
5 Particularities What is not in the contract yet changes how one works.
6 Raw record Commands and outputs, verbatim. The evidence for section 2.
Note:Section 5 is the one no other engine can write in its place. It carries what no command measures: how an attached file reaches the engine, what survives a session, what is lost.

7What the Kit does not guarantee

Two assumptions fall outside the contract because the Kit endures them without being able to impose them. They belong in each engine’s record, section 5.

–Persistence between sessions. Nothing guarantees that an environment recovers its state. This is what grounds the §5 check and the rewriting of the generator.

–The form of an attached file. An engine may deliver a document as a binary or as extracted text. In the second case, modifying an existing document from what is read produces an impoverished file with nothing to signal it — hence the mandatory binary rule.