1Purpose and dates

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

This document answers the contract of Kit - Documentation - Environnement d’exécution for the session environment of Claude AI. It holds only for that environment, and for the date on which it was measured.

Date Value
Written 2026-09-01
Last check 2026-09-01
Note:The two dates coincide today. They will diverge: the check is replayed every session, the document is not. A widening gap signals a record to redo.

2Answer to the contract

Same line order as §2 of the contract. The “observed” column carries what the check measured, not what the environment is supposed to offer.

Capability Observed Where
Node.js v22.22.2 Provided by the container
docx module 304 clés, construction CJS /home/claude/.npm-global/lib/node_​modules
Python 3 3.12.3 Provided by the container
pandoc 3.1.3 /usr/bin/pandoc
LibreOffice 24.2.7.2 /usr/bin/soffice
Pillow 12.1.1 Provided by the container
adm-zip module ABSENT Installed during the session

3Gaps

adm-zip absent at start-up — conditional. The module is not provided by the container. It now serves only to build the site archive: producing documents no longer depends on it since General v1.83. A session that publishes no site never meets this gap.

Note:On 2026-08-20 this absence stopped a generator after the document was built and before the file was written — so without corrupting anything. That case led to taking the module out of the document chain.

4Workarounds

Installation at the start of a session. The command npm install -g adm-zip closes the gap of §3. The workaround does not survive: the container starts from nothing in the next session, and the command must be replayed. It is declared here because it repeats, not because it is fixed.

5Particularities

What no command measures, and which nevertheless changes how one works.

Attached documents arrive as extracted text. A .docx placed in the project context is readable, but what is read is a textual extraction, not the binary. Modifying a document from that reading produces an impoverished file — marking, images and properties lost — with nothing to signal it. Hence the mandatory binary rule before any modification, and the fidelity check that verifies it.

The container starts from nothing. No working file survives from one session to the next. This grounds the rewriting of the generator each session, and is not a matter of taste.

The container runs in universal time. The system clock is UTC. Timestamps in file names therefore go through the local-time helper, never the clock itself.

docx resolution selects the CJS build. A require carrying a directory path would select the other build of the same package, whose classes the serialiser of the first does not recognise. Ordinary resolution is therefore the only one used.

6Raw record

Check commands and their outputs, verbatim, on 2026-09-01.

$ node --version
v22.22.2
 
$ node -p "require.resolve('docx')"
/home/claude/.npm-global/lib/node_modules/docx/dist/index.cjs
 
$ node -p "Object.keys(require('docx')).length"
304
 
$ python3 --version
Python 3.12.3
 
$ python3 -c "import PIL; print('Pillow', PIL.__version__)"
Pillow 12.1.1
 
$ which pandoc soffice
/usr/bin/pandoc
/usr/bin/soffice
 
$ node -p "Intl.DateTimeFormat().resolvedOptions().timeZone"
UTC