From 711c7e2568a65ffd4e0530d3d1187f4cd5914c83 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 31 Aug 2026 04:49:52 +0000 Subject: [PATCH 1/6] docs: point brand preview at oss-brand v0.3.0 (simplified Q-line routes) Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01KvWUEEARtsRqAmdSKdVAgj --- brand/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/brand/index.html b/brand/index.html index 0a0f43e..8a9138c 100644 --- a/brand/index.html +++ b/brand/index.html @@ -485,10 +485,10 @@

공식 OSS 브랜드 규칙

devslab.kr/brand/open-source/

-

asset source · v0.2.0

+

asset source · v0.3.0

버전이 고정된 원본 자산

사이트와 README에는 중앙 생성물의 버전 URL을 사용합니다. DDS는 프로젝트별 경로를 복제하지 않습니다.

-

oss-brand v0.2.0

+

oss-brand v0.3.0

From b148a30fac2219c989172f65b536c815e1b8b9e5 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 31 Aug 2026 05:24:02 +0000 Subject: [PATCH 2/6] docs: resolve public-release open question per D-015 Repo goes public with public npm @devslab/* distribution under the DevsLab Source-Available License 1.0. Remaining owner actions recorded in the backlog (visibility flip, NPM_TOKEN, dds-v* tag). Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01KvWUEEARtsRqAmdSKdVAgj --- docs/backlog.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/backlog.md b/docs/backlog.md index 1e19206..acdf56d 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -172,8 +172,10 @@ Geist/Geist Mono 셀프호스팅 여부, Pretendard 서브셋, RN 번들 전략. - **로고 스토리**: `brand/index.html`의 마크 해석("코드 블록 + 아키텍처 설계")은 형태를 보고 붙인 것. 실제 제작 의도가 따로 있으면 교체. -- **DDS 공개 여부**: 레포/패키지를 공개(오픈소스)할지, npm 스코프 배포 - 방식(공개 vs GitHub Packages)을 어떻게 할지. +- ~~**DDS 공개 여부**~~: **해소 (2026-08-31, D-015)** — 레포 공개 + 공개 npm + `@devslab/*` 배포, DevsLab Source-Available License 1.0 적용(오픈소스 아님). + 남은 오너 액션: ① GitHub 레포 Public 전환, ② 레포 시크릿 `NPM_TOKEN` 확인, + ③ `dds-v*` 태그 푸시로 릴리스 워크플로 가동. - **브랜드 페이지 i18n 범위**: devslab.kr의 14개 로케일을 /brand에도 전부 적용할지, ko/en만 유지할지. From 17769309b9633273fdf548a1793d281ac7cbd67c Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 31 Aug 2026 05:25:36 +0000 Subject: [PATCH 3/6] docs: add CONTRIBUTING (en/ko) for the public source-available repo Clarifies the inbound contribution license grant, what contributions are accepted, spec ground rules, and the dev/verify workflow ahead of the D-015 public release. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01KvWUEEARtsRqAmdSKdVAgj --- CONTRIBUTING.ko.md | 52 +++++++++++++++++++++++++++++++++++++++ CONTRIBUTING.md | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 CONTRIBUTING.ko.md create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.ko.md b/CONTRIBUTING.ko.md new file mode 100644 index 0000000..1abc18c --- /dev/null +++ b/CONTRIBUTING.ko.md @@ -0,0 +1,52 @@ +# DDS 기여 안내 + +DDS (DevsLab Design System)는 **source-available이며 오픈소스가 아닙니다**. +코드는 공개되어 있고 열람·이슈 제보·변경 제안은 환영하지만, 모든 사용은 +[DevsLab Source-Available License 1.0](./LICENSE)을 따릅니다 — 수정·재배포, +경쟁 디자인 시스템 제작은 허용되지 않습니다. + +## 기여 라이선스 귀속 + +이 저장소에 기여물(풀 리퀘스트, 패치, 이슈 본문 등)을 제출하면 다음에 +동의하는 것으로 간주합니다: + +- 제출할 권리가 있는 본인의 작업물(또는 제출을 허락받은 작업물)입니다; +- DevsLab에 기여물을 Software의 일부로 사용·수정·재라이선스·배포할 수 있는 + 영구적·전세계적·취소 불가·무상·서브라이선스 가능한 권리를 부여하며, + 추가 의무는 없습니다; +- 기여물은 LICENSE 3조의 피드백 조항과 동일하게 취급되며, 커밋 히스토리 + 이상의 보상이나 저작자 표시 의무는 발생하지 않습니다. + +동의하기 어렵다면 코드 대신 문제를 설명하는 이슈를 열어 주세요. + +## 받는 기여 + +- 버그 리포트와 재현 케이스 — 언제나 환영합니다. +- 결함 수정(깨진 토큰, 대비 미달, 접근성 문제, 빌드/테스트 문제). +- 문서 교정 — 영/한 쌍 동기화 유지 포함. + +새 컴포넌트·새 토큰·파운데이션(§3) 변경은 DevsLab 제품 필요와 결정 로그가 +주도합니다. 코드를 쓰기 전에 이슈로 먼저 논의해 주세요. + +## 기본 규칙 (스펙 요약) + +- 토큰이 유일한 진실 — 컴포넌트·예제에 hex/px 하드코딩 금지. 컴포넌트는 + 시맨틱 토큰만 참조합니다. +- 라이트가 기본 테마, 다크는 시맨틱 매핑 교체 — `if (dark)` 분기 금지. +- cyan 면 위 텍스트는 흰색 금지, `zinc.950` 사용. +- 접근성 최소선: 텍스트 대비 4.5:1, focus-visible 링, 아이콘 단독 버튼 + 라벨 필수, 모션 감소 설정 존중. +- 문서는 영/한 쌍(`*.md` + `*.ko.md`) — 양쪽을 함께 수정합니다. +- 문서 표와 `tokens/*.json`이 어긋나면 같은 변경에서 양쪽을 고칩니다. + +## 개발 + +```bash +pnpm install --frozen-lockfile +pnpm run build # 전체 패키지 빌드 +pnpm run check # 패키지 체크 + 문서/토큰 동기화 +pnpm run verify # build + check (CI가 먼저 도는 것) +``` + +파운데이션에 영향을 주는 변경은 `docs/decisions.md`에 기록이 필요합니다. +릴리스는 DevsLab이 `dds-v*` 태그로만 수행하며, 기여자는 발행하지 않습니다. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..eda25bf --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,61 @@ +# Contributing to DDS + +DDS (DevsLab Design System) is **source-available, not open source**. The +code is public and you are welcome to read it, report issues, and propose +changes, but the [DevsLab Source-Available License 1.0](./LICENSE) governs +all use — it does not permit modification, redistribution, or building a +competing design system. + +## Contribution license grant + +By submitting a contribution (a pull request, patch, issue text, or any +other material) to this repository, you agree that: + +- you have the right to submit it, and it is your own work or work you are + authorized to submit; +- you grant DevsLab a perpetual, worldwide, irrevocable, royalty-free, + sublicensable license to use, modify, relicense, and distribute your + contribution as part of the Software, without further obligation to you; +- your contribution is provided under the same feedback terms as Section 3 + of the LICENSE, and no compensation or attribution is owed beyond the + repository's commit history. + +If you cannot agree to this, please open an issue describing the problem +instead of sending code. + +## What we accept + +- Bug reports and reproduction cases — always welcome. +- Fixes for defects (broken tokens, contrast failures, a11y issues, + build/test problems). +- Documentation corrections, including keeping the English/Korean pairs in + sync. + +New components, new tokens, and foundation (§3) changes are driven by +DevsLab product needs and the decision log; open an issue to discuss before +writing code. + +## Ground rules (from the spec) + +- Tokens are the single source of truth — no hardcoded hex/px in components + or examples. Components reference semantic tokens only. +- Light is the default theme; dark is a semantic remapping, never an + `if (dark)` branch. +- Text on cyan surfaces uses `zinc.950`, never white. +- Accessibility floor: 4.5:1 text contrast, focus-visible rings, labels on + icon-only buttons, reduced-motion respected. +- Docs ship in English/Korean pairs (`*.md` + `*.ko.md`) — edit both. +- If the docs table and `tokens/*.json` disagree, fix both sides in the + same change. + +## Development + +```bash +pnpm install --frozen-lockfile +pnpm run build # build all packages +pnpm run check # package checks + docs/token sync +pnpm run verify # build + check (what CI runs first) +``` + +Foundation-affecting changes need an entry in `docs/decisions.md`. +Releases are cut by DevsLab via `dds-v*` tags; contributors never publish. From 82dd991a6340236ea3bb0cc766de77fd4cf5165c Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 31 Aug 2026 05:26:39 +0000 Subject: [PATCH 4/6] chore: add homepage, bugs, and keywords to the five public packages Fills in the npm registry-page metadata ahead of the D-015 public release; pack and publish dry-run re-verified. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01KvWUEEARtsRqAmdSKdVAgj --- packages/dds-css/package.json | 13 ++++++++++++- packages/dds-icons/package.json | 13 ++++++++++++- packages/dds-solid/package.json | 13 ++++++++++++- packages/dds-tokens/package.json | 13 ++++++++++++- packages/site-kit/package.json | 13 ++++++++++++- 5 files changed, 60 insertions(+), 5 deletions(-) diff --git a/packages/dds-css/package.json b/packages/dds-css/package.json index 8878e16..389f4ce 100644 --- a/packages/dds-css/package.json +++ b/packages/dds-css/package.json @@ -24,5 +24,16 @@ "scripts": { "build": "node build.mjs", "check": "node scripts/check-css.mjs" - } + }, + "homepage": "https://devslab.kr/brand/", + "bugs": { + "url": "https://github.com/devslab-kr/dds/issues" + }, + "keywords": [ + "design-system", + "css", + "components", + "framework-neutral", + "devslab" + ] } diff --git a/packages/dds-icons/package.json b/packages/dds-icons/package.json index 493a608..d1246bb 100644 --- a/packages/dds-icons/package.json +++ b/packages/dds-icons/package.json @@ -32,5 +32,16 @@ "scripts": { "build": "node build.mjs", "check": "node scripts/check-icons.mjs" - } + }, + "homepage": "https://devslab.kr/brand/", + "bugs": { + "url": "https://github.com/devslab-kr/dds/issues" + }, + "keywords": [ + "icons", + "svg", + "sprite", + "design-system", + "devslab" + ] } diff --git a/packages/dds-solid/package.json b/packages/dds-solid/package.json index 03424a7..50b5434 100644 --- a/packages/dds-solid/package.json +++ b/packages/dds-solid/package.json @@ -60,5 +60,16 @@ "vite": "8.2.1", "vite-plugin-solid": "2.11.14", "vitest": "4.1.1" - } + }, + "homepage": "https://devslab.kr/brand/", + "bugs": { + "url": "https://github.com/devslab-kr/dds/issues" + }, + "keywords": [ + "solidjs", + "components", + "accessibility", + "design-system", + "devslab" + ] } diff --git a/packages/dds-tokens/package.json b/packages/dds-tokens/package.json index 6400757..a967f61 100644 --- a/packages/dds-tokens/package.json +++ b/packages/dds-tokens/package.json @@ -37,5 +37,16 @@ }, "devDependencies": { "typescript": "7.0.2" - } + }, + "homepage": "https://devslab.kr/brand/", + "bugs": { + "url": "https://github.com/devslab-kr/dds/issues" + }, + "keywords": [ + "design-tokens", + "design-system", + "css-variables", + "tailwind", + "devslab" + ] } diff --git a/packages/site-kit/package.json b/packages/site-kit/package.json index c869d68..145cec5 100644 --- a/packages/site-kit/package.json +++ b/packages/site-kit/package.json @@ -83,5 +83,16 @@ "vite-plugin-solid": "2.11.14", "vitest": "4.1.1", "wrangler": "4.127.1" - } + }, + "homepage": "https://devslab.kr/brand/", + "bugs": { + "url": "https://github.com/devslab-kr/dds/issues" + }, + "keywords": [ + "solidjs", + "i18n", + "seo", + "design-system", + "devslab" + ] } From 7733cccc44f55cef8a1bcc53ead87d3830e337b1 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 31 Aug 2026 14:18:25 +0000 Subject: [PATCH 5/6] test: track oss-brand v0.3.0 release link in brand contract The brand preview now points at v0.3.0; the site-kit contract still pinned the v0.2.0 URL and failed CI. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01KvWUEEARtsRqAmdSKdVAgj --- tests/site-kit-contracts.test.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/site-kit-contracts.test.mjs b/tests/site-kit-contracts.test.mjs index 0370b06..f3c5510 100644 --- a/tests/site-kit-contracts.test.mjs +++ b/tests/site-kit-contracts.test.mjs @@ -50,7 +50,7 @@ test("OSS product marks remain caller-supplied and reference the canonical brand assert.match(styles, /block-size/); assert.doesNotMatch(styles, /\.oss-product-mark[^}]*animation\s*:/s); assert.match(await read("brand/index.html"), /https:\/\/devslab\.kr\/brand\/open-source\//); - assert.match(await read("brand/index.html"), /oss-brand\/releases\/tag\/v0\.2\.0/); + assert.match(await read("brand/index.html"), /oss-brand\/releases\/tag\/v0\.3\.0/); }); test("public chrome requires injected copy and keeps forms native", async () => { From 90eecbd7aeef11810d273d488578baaed6efd463 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 31 Aug 2026 14:26:55 +0000 Subject: [PATCH 6/6] chore: bump the release train to 0.3.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0.3.0 is now live on npm, and published versions are immutable — the release dry-runs on this branch fail with 'cannot publish over 0.3.0' since the package.json metadata changed the tarballs. Lockstep-bump the five public packages via changeset version and update the pinned foundation contract. Verified locally: source stages, foundation core, and all three release verifiers (pack + publish dry-run) pass on 0.3.1. Co-Authored-By: Claude Claude-Session: https://claude.ai/code/session_01KvWUEEARtsRqAmdSKdVAgj --- packages/dds-css/package.json | 2 +- packages/dds-icons/package.json | 2 +- packages/dds-solid/package.json | 8 ++++---- packages/dds-tokens/package.json | 2 +- packages/site-kit/package.json | 4 ++-- pnpm-lock.yaml | 8 ++++---- tests/foundation-contracts.test.mjs | 4 ++-- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/dds-css/package.json b/packages/dds-css/package.json index 389f4ce..62f16cc 100644 --- a/packages/dds-css/package.json +++ b/packages/dds-css/package.json @@ -1,6 +1,6 @@ { "name": "@devslab/dds-css", - "version": "0.3.0", + "version": "0.3.1", "description": "DDS CSS component layer — class-based, framework-neutral, semantic-token-only (spec §4.3 v1 inventory, 20 components)", "type": "module", "license": "SEE LICENSE IN LICENSE", diff --git a/packages/dds-icons/package.json b/packages/dds-icons/package.json index d1246bb..99f3dc1 100644 --- a/packages/dds-icons/package.json +++ b/packages/dds-icons/package.json @@ -1,6 +1,6 @@ { "name": "@devslab/dds-icons", - "version": "0.3.0", + "version": "0.3.1", "description": "DDS icon set — one SVG source (24 grid, currentColor), shipped as files, a sprite and a path-data map", "type": "module", "license": "SEE LICENSE IN LICENSE", diff --git a/packages/dds-solid/package.json b/packages/dds-solid/package.json index 50b5434..86d1a7f 100644 --- a/packages/dds-solid/package.json +++ b/packages/dds-solid/package.json @@ -1,6 +1,6 @@ { "name": "@devslab/dds-solid", - "version": "0.3.0", + "version": "0.3.1", "description": "Accessible SolidJS primitives for the DevsLab Design System", "type": "module", "license": "SEE LICENSE IN LICENSE", @@ -43,9 +43,9 @@ "test:a11y": "vitest run --config vitest.config.ts src/__tests__/a11y.test.tsx" }, "dependencies": { - "@devslab/dds-css": "workspace:0.3.0", - "@devslab/dds-icons": "workspace:0.3.0", - "@devslab/dds-tokens": "workspace:0.3.0" + "@devslab/dds-css": "workspace:0.3.1", + "@devslab/dds-icons": "workspace:0.3.1", + "@devslab/dds-tokens": "workspace:0.3.1" }, "peerDependencies": { "solid-js": "1.9.15" diff --git a/packages/dds-tokens/package.json b/packages/dds-tokens/package.json index a967f61..56e8b2f 100644 --- a/packages/dds-tokens/package.json +++ b/packages/dds-tokens/package.json @@ -1,6 +1,6 @@ { "name": "@devslab/dds-tokens", - "version": "0.3.0", + "version": "0.3.1", "description": "DDS (DevsLab Design System) design tokens — one JSON source, built for CSS, Tailwind, TypeScript/RN and Ionic", "type": "module", "license": "SEE LICENSE IN LICENSE", diff --git a/packages/site-kit/package.json b/packages/site-kit/package.json index 145cec5..fa4acf6 100644 --- a/packages/site-kit/package.json +++ b/packages/site-kit/package.json @@ -1,6 +1,6 @@ { "name": "@devslab/site-kit", - "version": "0.3.0", + "version": "0.3.1", "description": "Strict i18n, SEO/GEO, and Solid public-site shells for DevsLab products", "type": "module", "license": "SEE LICENSE IN LICENSE", @@ -55,7 +55,7 @@ "test:worker": "wrangler deploy --dry-run --config fixtures/worker/wrangler.jsonc --outdir dist-worker" }, "dependencies": { - "@devslab/dds-solid": "workspace:0.3.0" + "@devslab/dds-solid": "workspace:0.3.1" }, "peerDependencies": { "@tanstack/solid-router": "1.170.30", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7084cae..0b665c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -74,13 +74,13 @@ importers: packages/dds-solid: dependencies: '@devslab/dds-css': - specifier: workspace:0.3.0 + specifier: workspace:0.3.1 version: link:../dds-css '@devslab/dds-icons': - specifier: workspace:0.3.0 + specifier: workspace:0.3.1 version: link:../dds-icons '@devslab/dds-tokens': - specifier: workspace:0.3.0 + specifier: workspace:0.3.1 version: link:../dds-tokens devDependencies: '@testing-library/jest-dom': @@ -120,7 +120,7 @@ importers: packages/site-kit: dependencies: '@devslab/dds-solid': - specifier: workspace:0.3.0 + specifier: workspace:0.3.1 version: link:../dds-solid devDependencies: '@tanstack/solid-router': diff --git a/tests/foundation-contracts.test.mjs b/tests/foundation-contracts.test.mjs index ed0b6f9..a3ecee6 100644 --- a/tests/foundation-contracts.test.mjs +++ b/tests/foundation-contracts.test.mjs @@ -15,7 +15,7 @@ test("public foundation packages use the @devslab scope, source-available licens for (const [path, name] of Object.entries(expected)) { const manifest = await json(path); assert.equal(manifest.name, name); - assert.equal(manifest.version, "0.3.0"); + assert.equal(manifest.version, "0.3.1"); assert.equal(manifest.license, "SEE LICENSE IN LICENSE"); assert.equal(manifest.publishConfig?.registry, "https://registry.npmjs.org"); assert.equal(manifest.publishConfig?.access, "public"); @@ -58,7 +58,7 @@ test("unpublished DDS packages bootstrap from this workspace", async () => { for (const name of names) { assert.equal( manifest.dependencies?.[name], - "workspace:0.3.0", + "workspace:0.3.1", `${path} must resolve unpublished ${name} from the local release workspace`, ); }