Install
npm install -g @sffmc/safety @sffmc/memory @sffmc/runtime @sffmc/cognitionWhat changed (EN)
Maintenance release. No breaking changes. No new dependencies.
25+ fixes covering config gaps, security, health checks, docs drift, and stale references. Recommend upgrade for everyone, especially on multi-user systems (mkdir mode fix) and v0.14.5/v0.14.7/v0.14.8 holdouts.
Configuration gaps (v0.14.5 overstated "21 values configurable")
- Sandbox pump cadence now reads
WorkflowExtendedConfig—sandbox.tshad inlineconst SLOW_MS = 50; const FAST_WINDOW = 50shadowinggetSandboxSlowMs()/getSandboxFastWindow(). Now user YAML overrides take effect. FlushManagerdebounce readsgetFlushDebounceMs()— constructor takes optionaldebounceMsparameter.WorkflowPersistencefsync readsgetFsyncCoalesceMs()—scheduleFsync()no longer uses local const.SAFE_REPETITION_LIMITexported from@sffmc/utilities—safety/rules.tsimports it (no more duplicateconst SAFE_REGEX_LIMIT = 25).
Security
- All 5 mkdir calls in
persistence.tsnow usemode: 0o700— runtime data dir no longer readable by other users on multi-user systems. Brings runtime in line with memory/dream/checkpoint which already do since v0.12.1. migrateLegacyDataPaths()removed — exported but never wired. Canonical path stays uppercaseSFFMC/for backward compatibility.- 5 new redaction patterns —
cloud-credentialrule expanded: GitHub fine-grained PAT (github_pat_*), GitHub OAuth/user/scope tokens (gho_*/ghu_*/ghs_*/ghr_*), GitLab PAT (glpat-*), Discord bot tokens (d_*prefix), Stripe live keys (sk_live_*,rk_live_*), and JWTs (three base64url segments). redactSecrets()MAX_CONTENT_BYTES = 1 MiBguard — returns unchanged with{ oversize: true }so callers can chunk-stream.
Health plugin (v0.15.0 stale-string cleanup)
checkCompositeStructureno longer hardcodes "3 composites" — usesexpectedComposites.length.checkExtraOptInrefactored — was looking for deletedpackages/extra/.checkChangelogCurrencynow also verifiesCHANGELOG.ru.md(bilingual).
Audit scripts
audit-load-order.py: error messageexpected 14→expected 5.check-cleanroom.sh: removed dead EXCLUDE_PATTERNS for deletedpackages/compose/,packages/agentic/,shared/(all dissolved in v0.15.0 P-1).
Docs drift (8 fixes)
dynamic-workflow.md: "12 hours wall-clock" → "1 hour" (×3 refs). "Direct MCP bindings planned" → "available since v0.14.0".bin/sffmc(bash) help: "13 packages / 13-check" → "5 / 9-check" (v0.15.1 fixed PowerShell only).CONTRIBUTING.md: v0.15.1 → v0.15.3.docs/install.md:SFFMC_VERSION=v0.15.0→v0.15.3(×2 refs).CHANGELOG.md: stale "v0.14.7" refs → "v0.14.9" (×2; v0.14.7 never released).
Internal hygiene
- Stale references to internal planning files cleaned up across source files and one utility. No behavior change.
Что изменилось (RU)
Maintenance-релиз. Ломающих изменений нет. Новых зависимостей нет.
25+ исправлений: конфигурационные разрывы, безопасность, health-проверки, дрейф документации, устаревшие ссылки. Рекомендуем обновиться всем, особенно на многопользовательских системах (фикс mkdir mode) и пользователям v0.14.5/v0.14.7/v0.14.8.
Конфигурационные разрывы (v0.14.5 завышал «21 значение настраивается»)
- Sandbox pump cadence теперь читает
WorkflowExtendedConfig—sandbox.tsимел inlineconst SLOW_MS = 50; const FAST_WINDOW = 50, затеняющиеgetSandboxSlowMs()/getSandboxFastWindow(). YAML-переопределения пользователя вступают в силу. - Дебаунс
FlushManagerчитаетgetFlushDebounceMs()— конструктор принимает необязательный параметрdebounceMs. - Fsync в
WorkflowPersistenceчитаетgetFsyncCoalesceMs()—scheduleFsync()больше не использует локальную константу. SAFE_REPETITION_LIMITэкспортирован из@sffmc/utilities—safety/rules.tsимпортирует.
Безопасность
- Все 5 вызовов
mkdirвpersistence.tsиспользуютmode: 0o700— runtime data-каталог больше не читаем другими пользователями. Приводит runtime в соответствие с memory/dream/checkpoint с v0.12.1. migrateLegacyDataPaths()удалена — экспортировалась, но никогда не подключалась. Канонический путь остаётся uppercaseSFFMC/для обратной совместимости.- 5 новых паттернов редактирования —
cloud-credentialрасширен: GitHub fine-grained PAT (github_pat_*), GitHub OAuth/user/scope (gho_*/ghu_*/ghs_*/ghr_*), GitLab PAT (glpat-*), Discord bot-токены (префиксd_*), Stripe live (sk_live_*,rk_live_*) и JWT (три base64url-сегмента). - Защита
redactSecrets()поMAX_CONTENT_BYTES = 1 МиБ— возвращает неизменённым с{ oversize: true }, чтобы вызывающий код мог разделить на чанки.
Health-плагин
checkCompositeStructureбольше не хардкодит «3 композита».checkExtraOptInрефакторен — искал удалённыйpackages/extra/.checkChangelogCurrencyтеперь проверяет иCHANGELOG.ru.md(билинг).
Audit-скрипты
audit-load-order.py: сообщениеexpected 14→expected 5.check-cleanroom.sh: удалены мёртвые EXCLUDE_PATTERNS дляpackages/compose/,packages/agentic/,shared/.
Дрейф документации
dynamic-workflow.md: «12 hours wall-clock» → «1 hour» (×3). «Direct MCP bindings planned» → «available since v0.14.0».bin/sffmc(bash) help: «13 packages / 13-check» → «5 / 9-check».CONTRIBUTING.md: v0.15.1 → v0.15.3.docs/install.md:SFFMC_VERSION=v0.15.0→v0.15.3(×2).CHANGELOG.md: устаревшие «v0.14.7» → «v0.14.9» (×2).
Внутренняя гигиена
- Устаревшие ссылки на внутренние плановые файлы зачищены в исходниках и одной утилите. Изменений в поведении нет.
See CHANGELOG.md (English) or CHANGELOG.ru.md (Russian) for full release notes.