From 03b373ed137d7e95397a0411af22e1041f2a7b3e Mon Sep 17 00:00:00 2001 From: Sin-Kang Date: Sun, 30 Aug 2026 19:39:57 +0900 Subject: [PATCH 1/3] feat: apply DevsLab OSS identity to editor-ruler --- .gitignore | 1 + README.ko.md | 6 + README.md | 6 + docs/assets/brand/oss-brand.json | 10 ++ docs/assets/brand/project-lockup.svg | 1 + docs/assets/brand/project-mark.svg | 1 + docs/assets/brand/readme-header.png | Bin 0 -> 10291 bytes package.json | 1 + packages/editor-ruler-ckeditor5/README.ko.md | 6 + packages/editor-ruler-ckeditor5/README.md | 6 + packages/editor-ruler-froala/README.ko.md | 6 + packages/editor-ruler-froala/README.md | 6 + packages/editor-ruler-summernote/README.ko.md | 6 + packages/editor-ruler-summernote/README.md | 6 + packages/editor-ruler-tiptap/README.ko.md | 6 + packages/editor-ruler-tiptap/README.md | 6 + packages/editor-ruler/README.ko.md | 6 + packages/editor-ruler/README.md | 6 + scripts/check-brand-assets.mjs | 103 +++++++++++++++++ site/apple-touch-icon.png | Bin 3113 -> 1420 bytes site/favicon.ico | Bin 502 -> 15086 bytes site/favicon.svg | 13 +-- site/index.html | 107 +++++++++++++----- site/og.png | Bin 73027 -> 14879 bytes 24 files changed, 267 insertions(+), 42 deletions(-) create mode 100644 docs/assets/brand/oss-brand.json create mode 100644 docs/assets/brand/project-lockup.svg create mode 100644 docs/assets/brand/project-mark.svg create mode 100644 docs/assets/brand/readme-header.png create mode 100644 scripts/check-brand-assets.mjs diff --git a/.gitignore b/.gitignore index 4a10523..b96713c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ node_modules/ dist/ coverage/ .pages/ +.playwright-cli/ *.log .DS_Store .idea/ diff --git a/README.ko.md b/README.ko.md index 1549744..9dacf9a 100644 --- a/README.ko.md +++ b/README.ko.md @@ -1,5 +1,11 @@ # editor-ruler +

+ editor-ruler — DevsLab 오픈소스 +

+ +**DevsLab 오픈소스** · [OSS 브랜드 가이드](https://devslab.kr/brand/open-source/) · Registry O01 + [![npm](https://img.shields.io/npm/v/%40devslab%2Feditor-ruler)](https://www.npmjs.com/package/@devslab/editor-ruler) [![CI](https://github.com/devslab-kr/editor-ruler/actions/workflows/ci.yml/badge.svg)](https://github.com/devslab-kr/editor-ruler/actions/workflows/ci.yml) ![TypeScript](https://img.shields.io/badge/TypeScript-Ready-3178C6?logo=typescript&logoColor=white) diff --git a/README.md b/README.md index ad789be..91fa592 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # editor-ruler +

+ editor-ruler — Open source by DevsLab +

+ +**Open source by [DevsLab](https://devslab.kr/)** · [OSS brand guide](https://devslab.kr/brand/open-source/) · Registry O01 + [![npm](https://img.shields.io/npm/v/%40devslab%2Feditor-ruler)](https://www.npmjs.com/package/@devslab/editor-ruler) [![CI](https://github.com/devslab-kr/editor-ruler/actions/workflows/ci.yml/badge.svg)](https://github.com/devslab-kr/editor-ruler/actions/workflows/ci.yml) ![TypeScript](https://img.shields.io/badge/TypeScript-Ready-3178C6?logo=typescript&logoColor=white) diff --git a/docs/assets/brand/oss-brand.json b/docs/assets/brand/oss-brand.json new file mode 100644 index 0000000..6289b55 --- /dev/null +++ b/docs/assets/brand/oss-brand.json @@ -0,0 +1,10 @@ +{ + "schemaVersion": 1, + "source": "https://github.com/devslab-kr/oss-brand/releases/tag/v0.1.1", + "release": "v0.1.1", + "guide": "https://devslab.kr/brand/open-source/", + "registryId": "O01", + "project": "editor-ruler", + "glyphConcept": "measured rail with a movable stop", + "relationship": "parent identity for editor adapters" +} diff --git a/docs/assets/brand/project-lockup.svg b/docs/assets/brand/project-lockup.svg new file mode 100644 index 0000000..74435c1 --- /dev/null +++ b/docs/assets/brand/project-lockup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/assets/brand/project-mark.svg b/docs/assets/brand/project-mark.svg new file mode 100644 index 0000000..200cac1 --- /dev/null +++ b/docs/assets/brand/project-mark.svg @@ -0,0 +1 @@ +editor-ruler \ No newline at end of file diff --git a/docs/assets/brand/readme-header.png b/docs/assets/brand/readme-header.png new file mode 100644 index 0000000000000000000000000000000000000000..174dca7f1934e89a311fa847d007bafae608bff7 GIT binary patch literal 10291 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 7a32bfa..56351f8 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "verify": "pnpm check:versions && pnpm build && pnpm typecheck && pnpm test", "sync:versions": "node scripts/sync-versions.mjs", "check:versions": "node scripts/sync-versions.mjs --check", + "check:brand": "node scripts/check-brand-assets.mjs", "build:pages": "node scripts/build-pages.mjs", "changeset": "changeset" }, diff --git a/packages/editor-ruler-ckeditor5/README.ko.md b/packages/editor-ruler-ckeditor5/README.ko.md index 7c4288f..f2c5529 100644 --- a/packages/editor-ruler-ckeditor5/README.ko.md +++ b/packages/editor-ruler-ckeditor5/README.ko.md @@ -1,5 +1,11 @@ # @devslab/editor-ruler-ckeditor5 +

+ editor-ruler — DevsLab 오픈소스 +

+ +**DevsLab 오픈소스** · [OSS 브랜드 가이드](https://devslab.kr/brand/open-source/) · Registry O01 + [![npm](https://img.shields.io/npm/v/%40devslab%2Feditor-ruler-ckeditor5)](https://www.npmjs.com/package/@devslab/editor-ruler-ckeditor5) **[문서 & 라이브 데모](https://devslab-kr.github.io/editor-ruler/)** · [English](README.md) diff --git a/packages/editor-ruler-ckeditor5/README.md b/packages/editor-ruler-ckeditor5/README.md index 27bc414..1fb78aa 100644 --- a/packages/editor-ruler-ckeditor5/README.md +++ b/packages/editor-ruler-ckeditor5/README.md @@ -1,5 +1,11 @@ # @devslab/editor-ruler-ckeditor5 +

+ editor-ruler — Open source by DevsLab +

+ +**Open source by [DevsLab](https://devslab.kr/)** · [OSS brand guide](https://devslab.kr/brand/open-source/) · Registry O01 + [![npm](https://img.shields.io/npm/v/%40devslab%2Feditor-ruler-ckeditor5)](https://www.npmjs.com/package/@devslab/editor-ruler-ckeditor5) **[Docs & live demo](https://devslab-kr.github.io/editor-ruler/)** · [한국어](README.ko.md) diff --git a/packages/editor-ruler-froala/README.ko.md b/packages/editor-ruler-froala/README.ko.md index 4fe3b51..8d5109c 100644 --- a/packages/editor-ruler-froala/README.ko.md +++ b/packages/editor-ruler-froala/README.ko.md @@ -1,5 +1,11 @@ # @devslab/editor-ruler-froala +

+ editor-ruler — DevsLab 오픈소스 +

+ +**DevsLab 오픈소스** · [OSS 브랜드 가이드](https://devslab.kr/brand/open-source/) · Registry O01 + [![npm](https://img.shields.io/npm/v/%40devslab%2Feditor-ruler-froala)](https://www.npmjs.com/package/@devslab/editor-ruler-froala) **[문서 & 라이브 데모](https://devslab-kr.github.io/editor-ruler/)** · [English](README.md) diff --git a/packages/editor-ruler-froala/README.md b/packages/editor-ruler-froala/README.md index 47e53bc..0742656 100644 --- a/packages/editor-ruler-froala/README.md +++ b/packages/editor-ruler-froala/README.md @@ -1,5 +1,11 @@ # @devslab/editor-ruler-froala +

+ editor-ruler — Open source by DevsLab +

+ +**Open source by [DevsLab](https://devslab.kr/)** · [OSS brand guide](https://devslab.kr/brand/open-source/) · Registry O01 + [![npm](https://img.shields.io/npm/v/%40devslab%2Feditor-ruler-froala)](https://www.npmjs.com/package/@devslab/editor-ruler-froala) **[Docs & live demo](https://devslab-kr.github.io/editor-ruler/)** · [한국어](README.ko.md) diff --git a/packages/editor-ruler-summernote/README.ko.md b/packages/editor-ruler-summernote/README.ko.md index 5bced00..3a03cf2 100644 --- a/packages/editor-ruler-summernote/README.ko.md +++ b/packages/editor-ruler-summernote/README.ko.md @@ -1,5 +1,11 @@ # @devslab/editor-ruler-summernote +

+ editor-ruler — DevsLab 오픈소스 +

+ +**DevsLab 오픈소스** · [OSS 브랜드 가이드](https://devslab.kr/brand/open-source/) · Registry O01 + [![npm](https://img.shields.io/npm/v/%40devslab%2Feditor-ruler-summernote)](https://www.npmjs.com/package/@devslab/editor-ruler-summernote) **[문서 & 라이브 데모](https://devslab-kr.github.io/editor-ruler/)** · [English](README.md) diff --git a/packages/editor-ruler-summernote/README.md b/packages/editor-ruler-summernote/README.md index 119ed74..2847e64 100644 --- a/packages/editor-ruler-summernote/README.md +++ b/packages/editor-ruler-summernote/README.md @@ -1,5 +1,11 @@ # @devslab/editor-ruler-summernote +

+ editor-ruler — Open source by DevsLab +

+ +**Open source by [DevsLab](https://devslab.kr/)** · [OSS brand guide](https://devslab.kr/brand/open-source/) · Registry O01 + [![npm](https://img.shields.io/npm/v/%40devslab%2Feditor-ruler-summernote)](https://www.npmjs.com/package/@devslab/editor-ruler-summernote) **[Docs & live demo](https://devslab-kr.github.io/editor-ruler/)** · [한국어](README.ko.md) diff --git a/packages/editor-ruler-tiptap/README.ko.md b/packages/editor-ruler-tiptap/README.ko.md index 1523272..ef5e930 100644 --- a/packages/editor-ruler-tiptap/README.ko.md +++ b/packages/editor-ruler-tiptap/README.ko.md @@ -1,5 +1,11 @@ # @devslab/editor-ruler-tiptap +

+ editor-ruler — DevsLab 오픈소스 +

+ +**DevsLab 오픈소스** · [OSS 브랜드 가이드](https://devslab.kr/brand/open-source/) · Registry O01 + [![npm](https://img.shields.io/npm/v/%40devslab%2Feditor-ruler-tiptap)](https://www.npmjs.com/package/@devslab/editor-ruler-tiptap) **[문서 & 라이브 데모](https://devslab-kr.github.io/editor-ruler/)** · [English](README.md) diff --git a/packages/editor-ruler-tiptap/README.md b/packages/editor-ruler-tiptap/README.md index e44e1df..c008816 100644 --- a/packages/editor-ruler-tiptap/README.md +++ b/packages/editor-ruler-tiptap/README.md @@ -1,5 +1,11 @@ # @devslab/editor-ruler-tiptap +

+ editor-ruler — Open source by DevsLab +

+ +**Open source by [DevsLab](https://devslab.kr/)** · [OSS brand guide](https://devslab.kr/brand/open-source/) · Registry O01 + [![npm](https://img.shields.io/npm/v/%40devslab%2Feditor-ruler-tiptap)](https://www.npmjs.com/package/@devslab/editor-ruler-tiptap) **[Docs & live demo](https://devslab-kr.github.io/editor-ruler/)** · [한국어](README.ko.md) diff --git a/packages/editor-ruler/README.ko.md b/packages/editor-ruler/README.ko.md index 1d171b2..b2cc2bd 100644 --- a/packages/editor-ruler/README.ko.md +++ b/packages/editor-ruler/README.ko.md @@ -1,5 +1,11 @@ # @devslab/editor-ruler +

+ editor-ruler — DevsLab 오픈소스 +

+ +**DevsLab 오픈소스** · [OSS 브랜드 가이드](https://devslab.kr/brand/open-source/) · Registry O01 + [![npm](https://img.shields.io/npm/v/%40devslab%2Feditor-ruler)](https://www.npmjs.com/package/@devslab/editor-ruler) **[문서 & 라이브 데모](https://devslab-kr.github.io/editor-ruler/)** · [English](README.md) diff --git a/packages/editor-ruler/README.md b/packages/editor-ruler/README.md index 7155aa6..d3c2029 100644 --- a/packages/editor-ruler/README.md +++ b/packages/editor-ruler/README.md @@ -1,5 +1,11 @@ # @devslab/editor-ruler +

+ editor-ruler — Open source by DevsLab +

+ +**Open source by [DevsLab](https://devslab.kr/)** · [OSS brand guide](https://devslab.kr/brand/open-source/) · Registry O01 + [![npm](https://img.shields.io/npm/v/%40devslab%2Feditor-ruler)](https://www.npmjs.com/package/@devslab/editor-ruler) **[Docs & live demo](https://devslab-kr.github.io/editor-ruler/)** · [한국어](README.ko.md) diff --git a/scripts/check-brand-assets.mjs b/scripts/check-brand-assets.mjs new file mode 100644 index 0000000..b7a3f04 --- /dev/null +++ b/scripts/check-brand-assets.mjs @@ -0,0 +1,103 @@ +import { createHash } from 'node:crypto'; +import { access, readFile } from 'node:fs/promises'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); +const readmes = [ + 'README.md', + 'README.ko.md', + 'packages/editor-ruler/README.md', + 'packages/editor-ruler/README.ko.md', + 'packages/editor-ruler-froala/README.md', + 'packages/editor-ruler-froala/README.ko.md', + 'packages/editor-ruler-tiptap/README.md', + 'packages/editor-ruler-tiptap/README.ko.md', + 'packages/editor-ruler-ckeditor5/README.md', + 'packages/editor-ruler-ckeditor5/README.ko.md', + 'packages/editor-ruler-summernote/README.md', + 'packages/editor-ruler-summernote/README.ko.md', +]; + +const assets = { + 'docs/assets/brand/readme-header.png': '4b419a0cb464d95071cccb27717bcadb52bf459408765a8f9c8a025c2b9f6eba', + 'docs/assets/brand/project-mark.svg': 'eeb3d9429f8219263e3c0f7350cbf57600899e5fc43e6f1e2fb197613536fc00', + 'docs/assets/brand/project-lockup.svg': 'd420a6505a8952a382089ff549cd2643420cf8bdaa277cd3d3d244f72df88d9b', + 'site/favicon.svg': 'eeb3d9429f8219263e3c0f7350cbf57600899e5fc43e6f1e2fb197613536fc00', + 'site/favicon.ico': '3cdcb500a12f6508cf9c6b7523e50f462247bac39403d2920d76ba12bd96fc17', + 'site/apple-touch-icon.png': 'b5cd4f6bcbf19029e53f2482f2201bfc59fd9f1bbb3294b43be194f21ee43f31', + 'site/og.png': '31ee7408b3db5ba4c89d1c53d0728c520b1f6f2faca46a1b43fa4b425e08e0da', +}; + +const expectedSource = 'https://github.com/devslab-kr/oss-brand/releases/tag/v0.1.1'; +const expectedGuide = 'https://devslab.kr/brand/open-source/'; + +function fail(message) { + console.error(`Brand check failed: ${message}`); + process.exitCode = 1; +} + +async function sha256(relativePath) { + const data = await readFile(path.join(root, relativePath)); + return createHash('sha256').update(data).digest('hex'); +} + +const manifestPath = 'docs/assets/brand/oss-brand.json'; +try { + const manifest = JSON.parse(await readFile(path.join(root, manifestPath), 'utf8')); + if (manifest.registryId !== 'O01' || manifest.project !== 'editor-ruler') { + fail(`${manifestPath} must identify editor-ruler as O01`); + } + if (manifest.release !== 'v0.1.1' || manifest.source !== expectedSource || manifest.guide !== expectedGuide) { + fail(`${manifestPath} must pin oss-brand v0.1.1 and the canonical guide`); + } +} catch { + fail(`missing or invalid ${manifestPath}`); +} + +for (const [relativePath, expectedHash] of Object.entries(assets)) { + try { + await access(path.join(root, relativePath)); + const actualHash = await sha256(relativePath); + if (actualHash !== expectedHash) fail(`${relativePath} checksum does not match oss-brand v0.1.1`); + } catch { + fail(`missing ${relativePath}`); + } +} + +let html = ''; +try { + html = await readFile(path.join(root, 'site/index.html'), 'utf8'); + for (const marker of [ + 'data-i18n="brand.oss"', + expectedGuide, + 'data-atmosphere="project"', + 'hero-atmosphere__glow', + '@media (max-width: 260px)', + '.top-inner { flex-wrap: wrap; }', + 'og:image:alt', + ]) { + if (!html.includes(marker)) fail(`site/index.html is missing ${marker}`); + } +} catch { + fail('missing site/index.html'); +} + +if (!/\.tabs\s*\{[^}]*flex-wrap:\s*wrap;/.test(html)) { + fail('site/index.html must wrap demo tabs at narrow widths'); +} + +for (const relativePath of readmes) { + try { + const readme = await readFile(path.join(root, relativePath), 'utf8'); + if (!readme.includes(expectedGuide)) fail(`${relativePath} is missing the canonical OSS brand guide`); + if (!readme.includes('Open source by DevsLab') && !readme.includes('DevsLab 오픈소스')) { + fail(`${relativePath} is missing a DevsLab OSS endorsement`); + } + if (!readme.includes('readme-header.png')) fail(`${relativePath} is missing the O01 README header`); + } catch { + fail(`missing ${relativePath}`); + } +} + +if (!process.exitCode) console.log('Brand check passed: editor-ruler O01 assets and endorsements match oss-brand v0.1.1.'); diff --git a/site/apple-touch-icon.png b/site/apple-touch-icon.png index ed9b2382ad66fb32e9847eb9cf34d60a04e8f686..fc28078798b8dae1e633912d568db723dfec4027 100644 GIT binary patch literal 1420 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 F`2SJPVk-au literal 502 zcmV?uzmEp#jqYJI_J%p$kcfDJgjC623TMMU=64healJA5o*LK zlXS#wXKF||B svGEN60RR8q>fq%7000I_L_t&o0GW8wPkE&WGynhq07*qoM6N<$f?P|_>;M1& diff --git a/site/favicon.svg b/site/favicon.svg index 0254902..200cac1 100644 --- a/site/favicon.svg +++ b/site/favicon.svg @@ -1,12 +1 @@ - - - - - - - - - - +editor-ruler \ No newline at end of file diff --git a/site/index.html b/site/index.html index e58c00e..f6c0c5d 100644 --- a/site/index.html +++ b/site/index.html @@ -4,6 +4,7 @@ editor-ruler — 웹 에디터를 위한 Word 스타일 줄자 + - + - + + +