Files
ArtPlayer/scripts/documentation/README.md
T

5.3 KiB

Documentation generation and translation

Run from the repository root with Node from .node-version and Yarn Classic 1.22.22. The old build-llm.js and trans-docs.js paths remain checked JS CLI adapters. These tools do not change player APIs or published declarations.

Commands and outputs

yarn build:llm
yarn check:llm
yarn trans:docs
yarn trans:docs --remote
yarn trans:docs --validate refactor/.cache/translations/draft-EXAMPLE
yarn trans:docs --apply refactor/.cache/translations/draft-EXAMPLE
yarn typecheck:docs-tools
node --test test/documentation-pipeline.test.js

build:llm is now offline and deterministic. It preserves complete source text (LF-normalized) from English Markdown, the actual editor declaration list, examples and the VAST declaration notices. It writes the existing docs/llms.txt path plus docs/llms.manifest.json with source/output SHA-256 fingerprints. check:llm checks without writing; CI checks it and ci:build regenerates it after editor declarations. Regenerate after changing any input. Content presence does not prove API correctness, example playback or English coverage; SITE-04 and EX-03 still own those reviews. Unloaded legacy WebSR declarations are not included simply because they remain on disk.

trans:docs now only reports a local plan by default. Only --remote imports dotenv, reads DEEPSEEK_API_KEY and calls the existing DeepSeek endpoint/model. It writes a unique ignored draft directory, never the live English documents. Its scope remains index, advanced, component and start; adding plugin translation is separate work. Remote requests may incur provider charges. CI never calls them.

Review the draft's prose and diff before applying it. If prose needs editing, edit the draft then run --validate: it verifies structure and source/target fingerprints and records the edited draft hashes. It cannot judge translation quality. --apply checks all fingerprints and structure again before replacing the selected English files. Unselected pages remain. Rebuild site assets, the LLM bundle and the documentation site after applying reviewed translations.

This intentionally replaces the old destructive default, which removed the English directory before the first request. Existing automation that intended remote translation must explicitly select --remote, review, then --apply. No actual remote translation or paid service acceptance was performed for this migration; local tests inject responses or use a loopback HTTP server.

Ownership and failure behavior

Module Responsibility
cli.ts Argument dispatch; offline default; remote credential boundary
corpus.ts Ordered source inventory and deterministic output/manifest
markdown.ts Protected block placeholders, structural validation, bounded chunks
remote.ts Request/body timeout, bounded retry, response validation and cancellation
translation.ts Draft state, worker cancellation/join, fingerprint validation and apply/rollback
files.ts LF reads, hashes, owned paths and adjacent temporary-file replacement

Draft state advances incomplete -> complete -> applied; a failed request or invalid response leaves a failed draft for diagnosis. One worker failure aborts the shared signal and waits for every worker before returning. HTTP 429/5xx and transport failures have bounded retries; invalid/empty JSON and authorization fail without retrying. The per-attempt timeout covers body reading too. Every timer is cleared and rejected HTTP bodies are cancelled.

Code, inline code, HTML, links and structural Markdown tokens must survive. Fenced blocks and directives are restored from local originals, not model text. An invalid result is rejected instead of heuristically inserting code fences. Unusual Markdown or a chunk boundary may be rejected; inspect the retained draft and improve protection rather than weakening validation. This is not a Markdown sanitizer or proof that prose preserves meaning.

Apply preflights the whole set, rechecks each write, uses adjacent temporary files and rolls back completed writes on caught failures, preserving original bytes. A concurrent edit prevents rollback of that file, producing an aggregate error instead of overwriting the other writer. This is not a multi-file crash transaction: backups live in process memory, and power loss or forced process termination can leave a partial apply. Commit existing English changes before applying, keep the draft, and inspect Git diff after any failure. Path validation rejects traversal and existing junctions/symlinks outside the owned root; it is not a defense against hostile concurrent filesystem mutation.

No new dependencies were added: use the root's pinned TypeScript 5.9.3, markdown-it types 14.1.2, glob 13.0.6 and dotenv 17.2.4. For follow-up maintenance, start from the responsible module, rerun its filesystem/request regressions, strict docs-tools types and root lint, then regenerate/check the source bundle and site inventory. Browser/player testing is needed when a change also affects page content or runtime, not as a substitute for these tool failure tests.