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 Grok AI. It holds only for that environment, and for the date on which it was measured.
| Date | Value |
|---|---|
| Written | 2026-09-02 |
| Last check | 2026-09-02 |
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 | v24.15.0 | Provided by the container |
| docx module | 304 clés, construction CJS | /usr/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.2.0 | Provided by the container |
| adm-zip module | ABSENT | Not provided by the container |
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.
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: an installation made in the container is no guarantee for the next session, and the command must be replayed. This session did not install it: no site is published.
5Particularities
What no command measures, and which nevertheless changes how one works.
–Attached files arrive as binaries on disk. A file placed in the conversation is written under /home/workdir/attachments/. The message carries the path and the size, not the content. The engine reads the bytes from disk. A .zip is extracted; a .docx is read as an archive. Modifying a document from a textual reading would still be an impoverishment: the mandatory binary rule holds, for a different reason than an imposed extraction.
–The artefacts folder survives; the rest does not. /home/workdir/artifacts persists from one conversation to the next within the project, and syncs to the user’s linked folder. /tmp, the session generator and an installation made during the pass are no guarantee.
–The Kit is not preinstalled. It arrives as an attached archive. The session extracts it, reads the stylesheets and produces the document. Nothing in the working tree is the Kit at the outset.
–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.
–Execution is not the user’s machine. The commands run in a remote Linux container. The user starts neither the generator nor the validator. Their files come back through the artefacts folder.
6Raw record
Check commands and their outputs, verbatim, on 2026-09-02.
$ node --version
v24.15.0
$ node -p "require.resolve('docx')"
/usr/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.2.0
$ which pandoc soffice
/usr/bin/pandoc
/usr/bin/soffice
$ node -e "require('adm-zip'); console.log('adm-zip')"
Error: Cannot find module 'adm-zip'
Require stack:
- /home/workdir/artifacts/[eval]
code: 'MODULE_NOT_FOUND'