[ { "check": "M1-repo-name-guard", "path": "packages/bus/src/broker.mjs", "old": " if (Object.hasOwn(b.projects ?? {}, a.name) && a.repo !== a.name) fail('project-name-is-repo');\n", "new": "", "test": "packages/bus/tests/threads.test.mjs", "killer": "project.create refuses a repository name without its matching repo before any write" }, { "check": "M2-repo-name-scope", "path": "packages/bus/src/broker.mjs", "old": "Object.hasOwn(b.projects ?? {}, a.name) && a.repo !== a.name", "new": "a.repo !== a.name", "test": "packages/bus/tests/threads.test.mjs", "killer": "project.create keeps unrelated names with and without a repository" }, { "check": "M3-resolver-repository-hint", "path": "packages/cli/src/thread.mjs", "old": " if (repository) throw new CliError(`${JSON.stringify(ref)} is a repository in the business file, not a thread project yet; mosaic project create ${ref} --repo ${ref} makes one`, 2);\n", "new": "", "test": "packages/cli/tests/project-name-repo.test.mjs", "killer": "threads project resolution explains a business repository and falls back if its file cannot load" }, { "check": "M4-create-repository-hint", "path": "packages/cli/src/project.mjs", "old": " if (error.code === 'project-name-is-repo')", "new": " if (false)", "test": "packages/cli/tests/project-name-repo.test.mjs", "killer": "project create prints the repository-name refusal and exits two without writing" }, { "check": "M5-http-conflict", "path": "packages/webui/src/bus.mjs", "old": " 'project-name-is-repo': 409,\n", "new": "", "test": "packages/webui/tests/project-name-repo.test.mjs", "killer": "a repository-name project refusal is an HTTP conflict" } ]