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.
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 |
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.
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. |
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.