Skip to content

📝 docs: глава recurrence — повторювані задачі (шаблон + інстанси) - #56

Merged
vitaliytv merged 2 commits into
mainfrom
claude/recurring-tasks-scheduling-719bc7
Jul 22, 2026
Merged

📝 docs: глава recurrence — повторювані задачі (шаблон + інстанси)#56
vitaliytv merged 2 commits into
mainfrom
claude/recurring-tasks-scheduling-719bc7

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Що змінено

Нова глава архітектури npm/docs/architecture/recurrence.md — механізм повторюваних задач для 0.3.0-draft, плюс перехресні оновлення (зміст, глосарій overview, CLI/mt cleanup/довідник ключів operations, журнал log, change-файл, словник cspell).

Навіщо

ОАГ ациклічний, resolved — термінальний, артефакти immutable: «виконайся за розкладом ще раз» у графі не виражалось. Розглянуто три варіанти (freshness/TTL fact, періодичний mt invalidate, шаблон + інстанси) — обрано шаблон + інстанси; відхилені альтернативи зафіксовано у главі з причинами.

Механізм (коротко для ревʼю)

  • Шаблон — мутабельна директорія .mt/templates/<name>/ (task.md без created_at/parent, a.md/h.md, recurrence.md, опційні deps/); не вузол, scan не бачить, правка діє з наступної матеріалізації.
  • Розклад: повноцінний 5-польний cron schedule (обчислюється в tz) або інтервальний every (90m), відв'язаний від календаря; рівно одне з двох, fail closed. Хвилина — свідома нижня межа гранулярності (fenced-коміт + точність wake).
  • Інстанс — звичайний кореневий вузол mt/<name>-YYYYMMDD-hhmm/, матеріалізований планувальником (wake-логіка orchestrator-а, cron-fallback) одним fenced atomic commit; детермінований id від occurrence → ідемпотентність, гонка хостів вирішується штатним fenced publish. Нових derived-станів немає.
  • Стан планувальника derived: нові опційні поля template:/occurrence: у task.md інстанса; останнє спрацювання — сканом, жодних лічильників.
  • Політики: overlap: skip | chain | parallel (chain = auto-dep на попередній інстанс — серіалізація + потік даних через штатний deps/), catchup: collapse | all, retention keep через mt cleanup (kill-архів; failed/unresolvable не чіпає).
  • CLI: mt template list|run; конфіг-ключ templates_dir.

Ревʼюеру

  • Це зміна тільки документації (канон 0.3.0-draft), коду немає; change-файл npm/.changes/260722-0643.md (patch/Added).
  • Свідомо НЕ закомічено побічні артефакти лінт-прогону в робочому дереві: авто-створений fix-вузол mt/lint-fix-text-cspell-fix-32b15f71/ (порушення виправлено інлайн) і дописаний лінтом node_executor у .mt.json (ця точка розширення видалена з архітектури за runtime.md).
  • Roadmap milestone для реалізації свідомо не призначено — окреме рішення.

🤖 Generated with Claude Code

vitaliytv and others added 2 commits July 22, 2026 06:57
…анси

ОАГ ациклічний і resolved термінальний — повторюваність у графі не
виражалась. Новий механізм: мутабельний шаблон у .mt/templates/<name>/
(не вузол), планувальник у wake-логіці матеріалізує на кожне спрацювання
звичайний кореневий вузол mt/<name>-YYYYMMDD-hhmm/ одним fenced commit
(детермінований id → ідемпотентність, гонка хостів — штатним publish).
Розклад: повний 5-польний cron (schedule, tz) або інтервальний every,
відв'язаний від календаря; політики overlap/catchup/keep; CLI
mt template list|run. Стан планувальника derived (template:/occurrence:
у task.md інстансів). Відхилені альтернативи зафіксовано у главі.

Перехресно: зміст (index), глосарій (overview), CLI/cleanup/довідник
ключів (operations), журнал (log), change-файл, словник cspell.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…боргу)

Період паузи не породжує «пропущених» спрацювань: catchup надолужує
простій системи, пауза — свідоме рішення людини. Після ввімкнення відлік
з нуля (schedule — найближчий cron, every — від моменту ввімкнення,
derived з git-історії recurrence.md — лічильників немає).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vitaliytv
vitaliytv merged commit 0092986 into main Jul 22, 2026
2 of 4 checks passed
vitaliytv added a commit that referenced this pull request Jul 22, 2026
…eslint

Латентні фейли з main після n-taze бампу (b6329ce): mixin-пакети
@7n/rules-{ci-github,lang-js,lang-rust} принесли нові policy, які
першими вилізли на PR #56.

- lint-repo.yml (canon-snippet ga/lint_repo_yml) + lint-rust.yml
  (rust/lint_rust_yml; прибрано paths-глоби на відсутні
  rustfmt.toml/clippy.toml — ga/workflows unmatched-paths-glob);
  rustfmt/clippy локально чисті
- lint-js.yml, npm-publish.yml, .vscode/settings.json — приведено
  до canon-snippet автофіксом
- knip.json: mixin-пакети в ignoreDependencies (використовуються
  n-rules runtime-ом, у коді не імпортуються)
- vitest.config.mjs: pool forks (test/vitest-config-pool-forks)
- eslint.config.js: grandfather sonarjs/cognitive-complexity для
  трьох legacy-команд (порушення існували до появи гейта
  n-rules lint js; рефакторинг — окрема задача)
- .licensee.json: ISC у allowlist (власні пакети репо);
  relay/package.json: відсутнє поле license (ISC) + change-файл

Перевірено локально: lint ga/js/repo-wide --no-fix, knip, eslint,
oxlint, cargo fmt --check, clippy -D warnings — усі чисті.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant