From 636287356595823b92b731481ad803b475a71a6f Mon Sep 17 00:00:00 2001 From: mohammed naji Date: Tue, 2 Jun 2026 22:13:08 +0400 Subject: [PATCH] docs: add rename guidance for legacy branding Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- README.md | 6 +++++ docs/mcp-registry/server.json | 2 +- docs/reference/cli-and-mcp.md | 2 ++ tests/unit/mcp-registry-metadata.test.ts | 13 ++++++++++ tests/unit/rebrand-surface.test.ts | 32 +++++++++++++++++++++++- 5 files changed, 53 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bf86c902..98331509 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,12 @@ Madar is deterministic local context compilation. It complements agents and IDE --- +## Rename and migration + +Madar is the current project name and package. If you arrived from older `graphify-ts` links, listings, or git remotes, use `@lubab/madar`, `https://github.com/mohanagy/madar`, and `git@github.com:mohanagy/madar.git`. Any remaining `graphify-ts` mentions in this repository are historical migration context only. + +--- + ## Who Madar is for - Teams using AI coding agents on medium-to-large TypeScript/Node repos where broad exploration creates cost, latency, privacy, or wrong-file-edit risk. diff --git a/docs/mcp-registry/server.json b/docs/mcp-registry/server.json index 61d50e6f..b2be16c1 100644 --- a/docs/mcp-registry/server.json +++ b/docs/mcp-registry/server.json @@ -53,7 +53,7 @@ ], "_meta": { "io.modelcontextprotocol.registry/publisher-provided": { - "notes": "Public npm package plus local graph artifact install flow.", + "notes": "Public npm package plus local graph artifact install flow. Madar is the renamed continuation of `graphify-ts`; use `@lubab/madar` and `https://github.com/mohanagy/madar` as the canonical package and repository.", "source": "docs/mcp-registry/server.json" } } diff --git a/docs/reference/cli-and-mcp.md b/docs/reference/cli-and-mcp.md index afe74603..35e4298d 100644 --- a/docs/reference/cli-and-mcp.md +++ b/docs/reference/cli-and-mcp.md @@ -45,6 +45,8 @@ npm run registry:validate The official MCP Registry hosts metadata, not Madar code or your local graph artifact. Madar's registry entry points back to the public npm package and the same local-first runtime flow: run `madar generate .` to create `out/graph.json`, then start the local stdio server with `npx @lubab/madar serve --stdio out/graph.json`, or let `madar install` write that wiring for you. +If you still discover older `graphify-ts` links or listings, Madar is the current project name. Use `https://github.com/mohanagy/madar` and `@lubab/madar` as the canonical repository and package surfaces. + Private registry usage stays out of scope for the public Madar listing because the official MCP Registry only accepts public package sources. Keep private or self-hosted registry workflows separate from this metadata file. ## MCP tools diff --git a/tests/unit/mcp-registry-metadata.test.ts b/tests/unit/mcp-registry-metadata.test.ts index 657385d3..0cf96170 100644 --- a/tests/unit/mcp-registry-metadata.test.ts +++ b/tests/unit/mcp-registry-metadata.test.ts @@ -44,6 +44,12 @@ interface RegistryManifest { $schema?: string name?: string description?: string + _meta?: { + 'io.modelcontextprotocol.registry/publisher-provided'?: { + notes?: string + source?: string + } + } repository?: { id?: string source?: string @@ -70,6 +76,7 @@ describe('MCP Registry metadata', () => { const npmPackage = registryManifest.packages?.[0] const graphPathArgument = npmPackage?.packageArguments?.find((entry) => entry.valueHint === 'graph_path') const toolProfile = npmPackage?.environmentVariables?.find((entry) => entry.name === 'MADAR_TOOL_PROFILE') + const publisherNotes = registryManifest._meta?.['io.modelcontextprotocol.registry/publisher-provided'] expect(registryManifest.$schema).toContain('static.modelcontextprotocol.io/schemas/') expect(registryManifest.name).toBe('io.github.mohanagy/madar') @@ -108,6 +115,10 @@ describe('MCP Registry metadata', () => { default: 'core', }) expect(toolProfile?.choices).toEqual(expect.arrayContaining(['core', 'full'])) + expect(publisherNotes?.source).toBe('docs/mcp-registry/server.json') + expect(publisherNotes?.notes).toContain('Madar is the renamed continuation of `graphify-ts`') + expect(publisherNotes?.notes).toContain('`@lubab/madar`') + expect(publisherNotes?.notes).toContain('`https://github.com/mohanagy/madar`') }) it('exposes a repeatable local validation command for the checked-in registry metadata', () => { @@ -164,6 +175,8 @@ describe('MCP Registry metadata', () => { expect(reference).toContain('npm run registry:validate') expect(reference).toContain('The official MCP Registry hosts metadata, not Madar code or your local graph artifact.') expect(reference).toContain('Private registry usage stays out of scope for the public Madar listing') + expect(reference).toContain('If you still discover older `graphify-ts` links or listings, Madar is the current project name.') + expect(reference).toContain('`https://github.com/mohanagy/madar`') expect(releaseDoc).toContain('npm run registry:validate') }) }) diff --git a/tests/unit/rebrand-surface.test.ts b/tests/unit/rebrand-surface.test.ts index 13c60a4d..7d72c4f3 100644 --- a/tests/unit/rebrand-surface.test.ts +++ b/tests/unit/rebrand-surface.test.ts @@ -24,6 +24,21 @@ function readText(path: string): string { const LEGACY_BRAND = ['g', 'r', 'a', 'p', 'h', 'i', 'f', 'y'].join('') const LEGACY_OUT_DIR = `${LEGACY_BRAND}-out` +const RENAME_NOTE_HEADING = '## Rename and migration' + +function stripRenameNote(text: string): string { + const headingIndex = text.indexOf(RENAME_NOTE_HEADING) + if (headingIndex === -1) { + return text + } + + const nextHeadingIndex = text.indexOf('\n## ', headingIndex + RENAME_NOTE_HEADING.length) + if (nextHeadingIndex === -1) { + return text.slice(0, headingIndex) + } + + return `${text.slice(0, headingIndex)}${text.slice(nextHeadingIndex + 1)}` +} describe('rebrand surface', () => { it('keeps only the madar command and removes compatibility packaging scripts', () => { @@ -86,8 +101,23 @@ describe('rebrand surface', () => { } }) - it('removes legacy branding from the main docs', () => { + it('documents the canonical Madar rename path for users arriving from legacy links', () => { const readme = readText('README.md') + const headingIndex = readme.indexOf(RENAME_NOTE_HEADING) + + expect(headingIndex).toBeGreaterThanOrEqual(0) + + const renameSection = readme.slice(headingIndex, readme.indexOf('\n## ', headingIndex + RENAME_NOTE_HEADING.length)) + + expect(renameSection).toContain('`graphify-ts`') + expect(renameSection).toContain('`@lubab/madar`') + expect(renameSection).toContain('`https://github.com/mohanagy/madar`') + expect(renameSection).toContain('`git@github.com:mohanagy/madar.git`') + expect(stripRenameNote(readme)).not.toContain(LEGACY_BRAND) + }) + + it('removes legacy branding from the main docs', () => { + const readme = stripRenameNote(readText('README.md')) const gettingStarted = readText('docs/tutorials/getting-started.md') const capabilityMatrix = readText('docs/language-capability-matrix.md') const releaseDoc = readText('docs/release.md')