| 1 | # JavaScript — operational: экосистема, сборка, тесты, угрозы |
| 2 | |
| 3 | **Назначение:** **операционный слой** мира **`software.javascript`** после fundamentals: npm/lockfile, semver, статический анализ, бандлеры, тест‑раннеры, базовая модель угроз (XSS, CSP, динамический код). Не заменяет спецификацию языка — см. карточки `kb-javascript-*` в фазе fundamentals в `index-knowledge-javascript-cluster-v1.md`. |
| 4 | |
| 5 | **Порядок загрузки:** `status-javascript-v1.md` → `playbook-javascript-operational-v1.md` → этот файл (после прохождения fundamentals по вопросу или в фазе B full pass). |
| 6 | |
| 7 | --- |
| 8 | |
| 9 | ## Provenance |
| 10 | |
| 11 | - source_refs: `npm:docs`; `nodejs.org` / `bun.sh` / `deno.land`; `cheatsheetseries.owasp.org` (XSS — ориентир); `kb:internal` synthesis 2026-05-10; supersedes раздел tooling из `kb-javascript-runtime-tooling-and-security-baseline-v1.md` |
| 12 | - created_at: 2026-05-10 |
| 13 | - updated_at: 2026-05-10 |
| 14 | |
| 15 | ## Metadata |
| 16 | |
| 17 | - card_id: kb-javascript-operational-ecosystem-v1 |
| 18 | - world: software.javascript |
| 19 | - layer: operational (kb) |
| 20 | - tags: node, npm, tooling, security, csp, ci |
| 21 | - status: active |
| 22 | |
| 23 | ## Epistemic Linkage |
| 24 | |
| 25 | - epistemic_basis: inference + fact |
| 26 | - confidence: high для lockfile+semver; medium для матрицы конкретного бандлера |
| 27 | |
| 28 | ## Core Unit |
| 29 | |
| 30 | - **context:** проект выходит за пределы «одного скрипта в HTML». |
| 31 | - **signal:** «сломалось после minor», audit CI, CSP ломает инлайн, флейки тестов из-за таймеров. |
| 32 | - **action:** зафиксировать lockfile, политику audit, минимальный security baseline. |
| 33 | - **outcome:** воспроизводимые сборки и снижение типовых supply-chain/XSS ошибок конфигурации. |
| 34 | |
| 35 | ### 1. npm, lockfile, semver |
| 36 | |
| 37 | - **Fact:** диапазон версий в `package.json` **не** фиксирует дерево; lockfile фиксирует разрешённое дерево при том же менеджере и дисциплине вроде `npm ci`. |
| 38 | - **Heuristic:** **приложения** коммитят lockfile; библиотеки — по политике пакета (часто только `package.json`). |
| 39 | - **Uncertainty:** при конфликте `peerDependencies` смотреть отчёт установщика конкретной версии. |
| 40 | - **Confidence:** high |
| 41 | |
| 42 | ### 2. ESLint / Prettier и дисциплина стиля |
| 43 | |
| 44 | - **Fact:** линтер ловит класс ошибок и опасные паттерны, но **не** заменяет тесты на семантику языка. |
| 45 | - **Heuristic:** правила async/import‑организации включать после согласования — массовые автофиксы несут риск семантических регрессий. |
| 46 | - **Confidence:** high |
| 47 | |
| 48 | ### 3. Транспиляция и бандлеры |
| 49 | |
| 50 | - **Fact:** esbuild/swc/Rollup/webpack/Vite решают граф модулей и совместимость целей; артефакты могут различаться картами кода и транзитивными лицензиями инструментов. |
| 51 | - **Heuristic:** supply chain и лицензии — отдельная политика организации; KB фиксирует класс риска. |
| 52 | - **Confidence:** medium |
| 53 | |
| 54 | ### 4. Тестирование: Vitest / Jest / `node:test` |
| 55 | |
| 56 | - **Fact:** раннер задаёт окружение модулей и моки времени/сети; влияет на флейки порядка задач. |
| 57 | - **Heuristic:** изолировать глобальное состояние и таймеры; `useFakeTimers` — с пониманием взаимодействия с microtasks. |
| 58 | - **Confidence:** high |
| 59 | |
| 60 | ### 5. Базовые web‑угрозы (XSS, CSP) |
| 61 | |
| 62 | - **Fact:** XSS часто связан со склейкой HTML без экранирования, а не «с JS как языком». |
| 63 | - **Heuristic:** CSP и отказ от `unsafe-inline` — осознанно; **CSP не заменяет** корректное экранирование в HTML‑контекстах на сервере/шаблоне. |
| 64 | - **Confidence:** high как ориентир |
| 65 | |
| 66 | ### 6. Динамический код: `eval`, `new Function` |
| 67 | |
| 68 | - **Fact:** компиляция строк в код расширяет blast radius при вводе пользователя или компрометации конфигов. |
| 69 | - **Heuristic:** по умолчанию deny без threat model; REPL и исключения — изолировать. |
| 70 | - **Confidence:** high |
| 71 | |
| 72 | ## Operationalization (сводка слоя) |
| 73 | |
| 74 | - **first_adoption_task:** включить `npm audit` / эквивалент в CI как **сигнал**, не как единственную гарантию. |
| 75 | - **validation_check:** `node -p process.versions` согласован между dev и CI. |
| 76 | - **success_criterion:** lockfile приложения под версионированием; нет «случайного» его отсутствия. |
| 77 | |
| 78 | ## Lifecycle |
| 79 | |
| 80 | - supersedes: kb-javascript-runtime-tooling-and-security-baseline-v1 (содержимое tooling/security перенесено сюда; движки — в `kb-javascript-ecmascript-and-modules-v1.md` § реализации) |
| 81 | - superseded_by: — |
| 82 | - deprecation_reason: — |
| 83 | |
| 84 | |