refactor!: nitra/mt стає репозиторієм специфікації - #58
Merged
Conversation
…ла в mt-rust і mt-js Фаза 3 розділення репозиторію (фази 1-2 завершені раніше): - Реалізація (crates/, relay/, packages/, docs/adr, mt/ dogfood-дані, CI збірки бінарників) переїхала в github.com/nitra/mt-rust (daa1b22). - npm-клієнт @7n/mt (колишній npm/, без docs) переїхав у github.com/nitra/mt-js (2f30f9c). - nitra/mt лишається чистою специфікацією: колишній npm/docs став top-level docs/ (index.md — точка входу), layers/ (рушій шарової документації) без змін. Що зроблено в цьому репозиторії: - git rm стара docs/adr (124 файли, переїхала в mt-rust) + git mv npm/docs → docs. - git rm crates/, relay/, packages/, mt/, npm/, Cargo.toml/.lock, .cargo/, deny.toml, .mt.json — від реалізації тут нічого не лишилось. - Врятовано тест канонічної специфікації: npm/lib/tests/docs.test.mjs → tests/docs.test.mjs, ADR-перевірку прибрано (ADR більше не тут), корінь корпусу — docs/. - У перенесеній docs/: виправлено $schema-шлях у layers.json, прибрано сирітські doc-files-доки (index.md-frontmatter на npm/index.js, stryker.config.md, vitest.config.md) — джерела виїхали разом із npm/. - Кореневий package.json: workspaces → ["layers"], прибрано start-скрипт і @7n/rules-lang-rust. - vitest.config.mjs: прибрано Rust globalSetup. - CI: видалено .github/workflows/npm-publish.yml (публікація — окрема майбутня задача в mt-js/mt-rust). - Конфіги (knip.json, eslint.config.js, .n-rules.json, .v8rignore, .cspell.json, hk.pkl, .gitignore) підчищені від шляхів на видалені npm/crates/relay/packages/target; .cursor/rules/n-rust.mdc видалено разом із @-include у CLAUDE.md/AGENTS.md. - Новий README.md: вхід у специфікацію (docs/index.md) і мапа трьох репозиторіїв (mt / mt-rust / mt-js). - docs/adr/ лишено порожнім (.gitkeep) — цей репозиторій продовжує вести власний ADR-журнал рішень щодо специфікації. Перевірено: bun install, bunx vitest run (11 файлів, 97 тестів), bun ./layers/lib/cli.mjs status docs (корпус знайдено, шари fresh), bunx oxlint / bunx eslint . / bunx jscpd . чисто. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ісля мерджу) Корінь монорепо лишається workspace-роутом (workspaces: ["layers"]), але package.json тепер публікується сам як @7n/mt: name/description/publishConfig, files: ["docs", "README.md"] — тарбол містить лише специфікацію + README. Відновлено .github/workflows/npm-publish.yml (release-publish job, модельований на історичному) — тригери push на main по docs/**+package.json, bunx n-cursor release + JS-DevTools/npm-publish з OIDC/provenance, без Rust/платформних підпакетів. README і CHANGELOG.md пояснюють перехід (≤0.28.0 — CLI, історія в nitra/mt-js; ≥0.29.0 — специфікація). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…rs як вкладений пакет n-cursor release визначає isMonorepoRoot за наявністю workspaces у кореневому package.json і завжди пропускає корінь, якщо цей список непорожній — з workspaces: ["layers"] @7n/mt ніколи б не отримав bump/tag/release. Прибрано поле workspaces; layers/ лишається окремим пакетом (npm/bun-семантика без workspace-лінкування), встановлюється власним bun install --cwd layers. Доданий pretest-скрипт запускає це перед vitest (bun run test автоматично тригерить pretest), тож layers/lib/*.mjs резолвить свої залежності (@7n/llm-lib тощо) з layers/node_modules. - package.json: видалено workspaces; files доповнено CHANGELOG.md (вимога changelog/consistency-правила для публікованого пакета); scripts.pretest. - knip.json: додано stryker.config.mjs (новий канонічний baseline для кореня, test-правило більше не пропускає корінь) до entry воркспейсу ".". - stryker.config.mjs (корінь): канонічний baseline, згенерований npx @7n/rules lint test. - bun.lock / layers/bun.lock: перегенеровано без workspace-лінку; layers отримав власний lockfile. Rego-фікстура поза репо (release.mjs, isolated git repo) підтвердила: без workspaces getMonorepoPackageRootDirs повертає лише ['.'], isMonorepoRoot стає false, release() бампає корінь 0.28.0 → 0.29.0 (minor, за .changes/ файлом), оновлює CHANGELOG.md, комітить і тегує @7n/mt@0.29.0 — вкладений layers/package.json (0.2.0) при цьому не зачіпається. Верифіковано: bunx vitest run (11 файлів, 97 тестів), bun ./layers/lib/cli.mjs status docs, bunx oxlint, bunx eslint ., bunx jscpd ., bunx knip --no-config-hints (без нових порушень vs baseline), npx @7n/rules lint --no-fix (лише передіснуючий docs/-контент-борг), npm pack --dry-run (docs/** + README.md + CHANGELOG.md + package.json). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4 tasks
vitaliytv
added a commit
that referenced
this pull request
Jul 23, 2026
…ії (#60) Продовження #58/#59: репо вже spec-only, тепер прибрано інфраструктурні хвости, що лишилися неузгодженими після переїзду. Видалення: - .n-rules.json: rules worktree/image-compress → disable-rules (обидва безпечно вимикаються — `lint --no-fix`/`lint ga --no-fix` пройшли чисто без них; підтверджено офіційним полем схеми `disable-rules`, а не просто вилученням з `rules`). Причина: `n-worktree.mdc` документує `npx @7n/mt worktree create/list/remove/prune` — цієї команди в spec-пакеті `@7n/mt` більше нема (CLI переїхав у nitra/mt-js, непублікований); `image-compress` — у docs/ немає жодного растрового чи SVG-файлу, канон з нульовим застосуванням. - .cursor/rules/n-worktree.mdc, .cursor/rules/n-image-compress.mdc — видалені як канонічні файли вимкнених правил (орфановані, ніде більше не застосовуються). - CLAUDE.md, AGENTS.md — прибрано `@`-імпорти/пункти на видалені n-worktree.mdc/n-image-compress.mdc (обидва файли позначені "генерується автоматично через npx @7n/rules, не редагуй вручну"; bare-sync навмисно не запускався за умовами задачі — без нього ці два файли не самосинхронізуються, тож ручна правка тут єдиний спосіб уникнути dangling-імпорту на видалений файл; наступний реальний sync дасть еквівалентний результат). - .agents/skills/source-command-{n-coverage-fix,n-fix-tests,n-fix, n-start-check,n-worktree}/SKILL.md — застарілі дзеркала, що вказували на неіснуючі `.cursor/skills/n-*/SKILL.md` (ці скіли ніколи не існували в .cursor/skills/, .claude/commands/, .pi/skills/ цього репо; n-worktree теж вказував на неіснуючий `.cursor/skills/n-worktree/SKILL.md` — окремо від рішення про правило "worktree", сам скіл-мірор був мертвий). Додано source-command-n-brainstorming/SKILL.md — єдиний скіл, якого бракувало в .agents-дзеркалі порівняно з .claude/commands, .cursor/skills, .pi/skills (тепер усі чотири локації симетричні: adr-normalize, brainstorming, lint, llm-patch, publish-telegram, taze). - .codex/hooks/capture-decisions.log, normalize-decisions.log, .normalize-state — рантайм лог/стейт-файли, помилково закомічені; вміст логів посилається на шляхи іншого локального проекту (/Users/vitaliytv/www/vitaliytv/7n/...), що підтверджує випадковість коміту. Додано .gitignore-записи для .codex/hooks/*.log, .normalize-state, .normalize.lock (за аналогією з уже наявними .claude/hooks/-записами). Залишено: - Скіл `taze` — оновлює npm/bun-залежності репо (включно з @7n/rules, на якому тримається сам лінт), тобто підтримує інструмент лінтування, а не є "функціональністю коду" поза межами документації. Опційна Rust/cargo-гілка в n-taze/SKILL.md — узагальнена, умовна ("якщо є Cargo.toml"), не прив'язана до конкретного видаленого коду цього репо. Невирішена невідповідність (звіт, без правки): - .cursor/skills/{n-adr-normalize,n-lint,n-taze}/SKILL.md досі містять у preflight-блоці `<!-- n-rules:worktree:start/end -->` команду `npx @7n/mt worktree create ...`. Це package-шаблонований контент (worktree-only skills, main.json → worktree: true, поза контролем .n-rules.json цього репо) — регенерується лише bare `npx @7n/rules`, який заборонено запускати за умовами задачі. Ручна правка цього блоку ризикована: наступний реальний sync або перезапише її назад, або дасть непередбачуваний результат — тому лишено як є з explicit флагом тут і в PR. Верифікація: `npx @7n/rules lint --no-fix`, `lint ga --no-fix`, `lint --full --no-fix` — усі exit 0. 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.
Що це
Фаза 3 розділення репозиторію
nitra/mtна три:nitra/mt-rust(daa1b22)nitra/mt-js(2f30f9c)@7n/mt(колишнійnpm/без docs), платформні пакети запінені на опублікованій0.28.0nitra/mt(цей репозиторій)docs/) + рушій шарової документації (layers/), яким вона побудованаФази 1-2 (винесення реалізації й npm-клієнта) вже завершені в цільових репозиторіях. Цей PR перетворює
nitra/mtна spec-only репозиторій.Зміни
docs/adr(124 файли, переїхала в mt-rust) видалена;npm/docs(колишня специфікація протоколу) стала top-leveldocs/— вхідdocs/index.md, вміст перенесено без змін (byte-exact, усі<!-- layers:... -->маркери й CRC збережено).crates/,relay/,packages/,mt/(dogfood-дані), рештаnpm/(bin/lib/types/index.js/package.json/…),Cargo.toml/Cargo.lock/.cargo/,deny.toml,.mt.json.npm/lib/tests/docs.test.mjs→tests/docs.test.mjs, адаптовано під новий корінь корпусу (docs/), ADR-перевірку прибрано (ADR-и цього репозиторію тепер про специфікацію, а не про стару реалізацію).docs/:layers.json$schemaвиправлено на новий відносний шлях; сирітські doc-files-доки (stryker.config.md,vitest.config.md, frontmatterdocs/index.md), що документували видаленіnpm/-файли, прибрано.package.json:workspaces→["layers"], прибраноstart-скрипт і@7n/rules-lang-rust.vitest.config.mjs: прибрано RustglobalSetup(збиравmt-scannerперед тестами)..github/workflows/npm-publish.yml— публікація з цього репозиторію не ведеться (spec-пакети — окрема майбутня задача).knip.json,eslint.config.js,.n-rules.json,.v8rignore,.cspell.json,hk.pkl,.gitignoreпідчищені від шляхів на видаленіnpm//crates//relay//packages//target/;.cursor/rules/n-rust.mdcвидалено разом з@-include уCLAUDE.md/AGENTS.md.README.md: опис специфікації, вхід уdocs/index.md, мапа трьох репозиторіїв.docs/adr/лишено порожнім (.gitkeep) — репозиторій продовжує вести власний ADR-журнал рішень щодо специфікації (правилоadrактивне).package.jsonстає публікованим пакетом@7n/mt(комітba9b2d4): знятоprivate, доданоpublishConfig.access: "public",repository/homepage/bugs/license/author/keywords,files: ["docs", "README.md"]; відновлено.github/workflows/npm-publish.yml(checkout→setup-bun-deps→setup-node→bunx n-cursor release→JS-DevTools/npm-publish); новий розділ уREADME.mdпро npm-пакет; новий кореневийCHANGELOG.md.workspacesіз кореня (коміт106a436):n-cursor releaseпропускав корінь, поки вpackage.jsonбув непорожнійworkspaces(деталі — розділ нижче).layers/лишається окремим пакетом без workspace-лінкування, встановлюється власнимbun install --cwd layers; доданийscripts.pretest(bun install --cwd layers) автоматично тригериться передbun run test.filesдоповненоCHANGELOG.md(вимога changelog/consistency-правила для публікованого пакета).knip.jsonіbun.lock/layers/bun.lockпідлаштовані під non-workspace layout.Test plan
bun install— воркспейсиnpm/relay/crates/mt-napiприбрані без помилокbunx vitest run— 11 файлів, 97 тестів, усі зеленіbun ./layers/lib/cli.mjs status docs— корпус знайдено, усі шариfreshbunx oxlint— чистоbunx eslint .— чистоbunx jscpd .— 0 дублікатівnpx @7n/rules lint doc-files --no-fix— чистоgit grep -l "npm/docs"— лише історичний запис уdocs/log.md(журнал змін документації, посилається на видалений шлях тесту)npm takeover:
@7n/mtстає специфікацією (0.29.0)Коміт
ba9b2d4готує publish-канал: наступний реліз з цього репозиторію публікує@7n/mt@0.29.0, де вміст пакета — сама специфікація (docs/+README.md+CHANGELOG.md), а не CLI.@7n/mt≤ 0.28.0 (CLI) лишається в npm-історії як є; код CLI живе вnitra/mt-jsі наразі не публікується.Release-обмеження вирішено (коміт
106a436)Емпірично було виявлено, що
bunx n-cursor releaseпропускає корінь, поки в кореневомуpackage.jsonлишається непорожнійworkspaces(fixture-прогінrelease()підтвердив: зworkspaces: ["layers"]корінь ігнорується незалежно від наявних change-файлів).Вирішено цим PR: корінь більше не оголошує
workspaces;layers/ставиться вкладеним пакетом черезbun install --cwd layers(і автоматично — черезpretestпередbun run test). Повторний fixture-прогінrelease()(ізольований git-репозиторій поза цим репо, package.json безworkspaces+ change-файл) підтвердив: корінь тепер розглядається, версія бампається0.28.0→0.29.0(minor, за.changes/-файлом),CHANGELOG.mdоновлюється, коміт і тег@7n/mt@0.29.0створюються; вкладенийlayers/package.jsonпри цьому не зачіпається. Реліз@7n/mt@0.29.0відбудеться автоматично в CI (npm-publish.yml→bunx n-cursor release→JS-DevTools/npm-publish) після мерджу цього PR уmain.Верифікація (коміт
ba9b2d4)bun pm pack --dry-run/npm pack --dry-run— тарбол7n-mt-0.28.0.tgz, 44 файли: увесьdocs/**(включно зdocs/adr/.gitkeep) +README.md+package.json, нічого зайвого (безlayers/, без конфігів)bunx vitest run— 11 файлів, 97 тестів, усі зеленіbunx oxlint— чисто (exit 0)npx @7n/rules lint --no-fix— exit 1, але всі 11 cspell + 3 markdownlint порушення в НЕзмінених файлахdocs/architecture/*,docs/overview/*,docs/roadmap.en.md(передіснуючий борг, обумовлений у задачі як прийнятний); у 4 змінених файлах (package.json,README.md,CHANGELOG.md,.github/workflows/npm-publish.yml) порушень немаВерифікація (коміт
106a436)bunx vitest run— 11 файлів, 97 тестів, усі зелені (layers-тести резолвлять залежності зlayers/node_modules, встановленого окремимbun install --cwd layers)bun run test(без попередньогоbun install --cwd layers) —pretestавтоматично встановлює залежностіlayers/, даліvitest runзеленийbun ./layers/lib/cli.mjs status docs— корпус знайдено, усі шариfreshbunx oxlint,bunx eslint .— чистоbunx jscpd .— 0 дублікатівbunx knip --no-config-hints— ідентично baseline (3 pre-existing unused devDependencies + 2 unused exports), без нових знахідок; перевірено і безlayers/node_modules(CI-подібний стан) — теж чистоnpx @7n/rules lint --no-fix— той самий передіснуючий docs/-контент-борг (11 cspell + 3 markdownlint), без нових порушеньnpm pack --dry-run— тарболdocs/**+README.md+CHANGELOG.md+package.json(45 файлів;CHANGELOG.mdдодався уfilesчерез вимогу changelog/consistency-правила для публікованого кореневого пакета)release()(@nitra/cursorrules/release/release.mjs, ізольований git-репозиторій поза цим репо) — див. розділ вищеМердж у
mainтригеритьnpm-publish.yml, який зробить реліз@7n/mt@0.29.0.🤖 Generated with Claude Code