📝 docs: глава recurrence — повторювані задачі (шаблон + інстанси) - #56
Merged
Conversation
…анси ОАГ ациклічний і 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
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Що змінено
Нова глава архітектури
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 не бачить, правка діє з наступної матеріалізації.schedule(обчислюється вtz) або інтервальнийevery(90m), відв'язаний від календаря; рівно одне з двох, fail closed. Хвилина — свідома нижня межа гранулярності (fenced-коміт + точність wake).mt/<name>-YYYYMMDD-hhmm/, матеріалізований планувальником (wake-логіка orchestrator-а, cron-fallback) одним fenced atomic commit; детермінований id від occurrence → ідемпотентність, гонка хостів вирішується штатним fenced publish. Нових derived-станів немає.template:/occurrence:у task.md інстанса; останнє спрацювання — сканом, жодних лічильників.overlap: skip | chain | parallel(chain = auto-dep на попередній інстанс — серіалізація + потік даних через штатнийdeps/),catchup: collapse | all, retentionkeepчерезmt cleanup(kill-архів;failed/unresolvableне чіпає).mt template list|run; конфіг-ключtemplates_dir.Ревʼюеру
npm/.changes/260722-0643.md(patch/Added).mt/lint-fix-text-cspell-fix-32b15f71/(порушення виправлено інлайн) і дописаний лінтомnode_executorу.mt.json(ця точка розширення видалена з архітектури за runtime.md).🤖 Generated with Claude Code