@cyberskill/design 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DESIGN.md +1 -1
- package/README.md +4 -4
- package/SKILL.md +2 -2
- package/VERSION +1 -1
- package/_ds_bundle.js +2 -2
- package/_esm/cs.mjs +2 -2
- package/docs/benchmark-rubric.md +1 -1
- package/docs/ci-cd.md +1 -1
- package/docs/consuming.md +6 -6
- package/docs/contrast-report.md +1 -1
- package/docs/conventions.md +2 -2
- package/docs/decisions.md +5 -5
- package/docs/quality-gates.md +4 -4
- package/docs/release-notes.md +9 -1
- package/docs/status/data/status-feed.json +1 -1
- package/docs/status/data/task/TASK-REL-002.js +1 -0
- package/docs/status/index.html +6 -9
- package/docs/status/status-legacy.html +12 -16
- package/docs/sync.md +1 -1
- package/docs/tasks/BACKLOG.md +1 -0
- package/docs/tasks/release/TASK-REL-002-republish-1-1-1/spec.md +54 -0
- package/docs/vi/benchmark-rubric.md +1 -1
- package/docs/vi/ci-cd.md +1 -1
- package/docs/vi/consuming.md +6 -6
- package/docs/vi/contrast-report.md +1 -1
- package/docs/vi/conventions.md +1 -1
- package/docs/vi/decisions.md +5 -5
- package/docs/vi/quality-gates.md +4 -4
- package/docs/vi/release-notes.md +9 -1
- package/docs/vi/sync.md +1 -1
- package/llms.txt +4 -4
- package/package.json +1 -1
- package/tokens/native/CSTokens.kt +1 -1
- package/tokens/native/CSTokens.swift +1 -1
- package/tokens/native/cs_tokens.dart +1 -1
- package/tokens/provenance.json +6 -6
- package/tokens/tokens.dtcg.json +1 -1
- package/tokens/tokens.js +2 -2
- package/tokens/tokens.json +1 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
# Owner instruction 2026-07-27 — patch republish so registry matches tip after LAUNCH lockstep fix.
|
|
3
|
+
id: TASK-REL-002
|
|
4
|
+
title: Republish @cyberskill/design at VERSION 1.1.1
|
|
5
|
+
template: task@1
|
|
6
|
+
type: feature
|
|
7
|
+
module: release
|
|
8
|
+
status: done
|
|
9
|
+
# Operator said "go" 2026-07-27 for 1.1.1 republish (commit/merge/deploy already authorized).
|
|
10
|
+
acceptance_verdict: approved
|
|
11
|
+
accepted_at: 2026-07-27T17:21:00+07:00
|
|
12
|
+
accepted_by: "@stephencheng"
|
|
13
|
+
|
|
14
|
+
priority: p0
|
|
15
|
+
author: "@stephencheng"
|
|
16
|
+
department: engineering
|
|
17
|
+
created_at: 2026-07-27T10:21:00+0000
|
|
18
|
+
ai_authorship: assisted
|
|
19
|
+
eu_ai_act_risk_class: not_ai
|
|
20
|
+
client_visible: true
|
|
21
|
+
depends_on: [TASK-REL-001]
|
|
22
|
+
routed_back_count: 0
|
|
23
|
+
awh: N/A
|
|
24
|
+
class: product
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# TASK-REL-002: Republish @cyberskill/design at VERSION 1.1.1
|
|
28
|
+
|
|
29
|
+
## 1. Description (normative)
|
|
30
|
+
|
|
31
|
+
Owner approved a **1.1.1** patch republish so the public registry matches tip after post-LAUNCH lockstep fixes (bundle freshness, native provenance, no `CHANGELOG.md`). LAUNCH narrative at **1.1.0** stays historical; current pin is **1.1.1**. No changelog file.
|
|
32
|
+
|
|
33
|
+
- 1.1 Root `VERSION` and every version stamp SHALL equal **1.1.1**.
|
|
34
|
+
- 1.2 Hard gates that asserted the **1.1.0** pin SHALL assert **1.1.1** (or equality with root `VERSION`).
|
|
35
|
+
- 1.3 Operator docs (EN + VI), Release Notes, and npm-hello SHALL record current pin **1.1.1** and a short patch note; LAUNCH section for 1.1.0 remains.
|
|
36
|
+
- 1.4 Tag **`v1.1.1`** and publish via npm Trusted Publishing; Vercel deploys from `main`.
|
|
37
|
+
|
|
38
|
+
## 2. Acceptance criteria
|
|
39
|
+
|
|
40
|
+
- [ ] AC for 1.1 — stamps read `1.1.1` — test: version-stamp / verify-local
|
|
41
|
+
- [ ] AC for 1.2 — docs-consistency + react-entry + npm-publish dry-run accept 1.1.1
|
|
42
|
+
- [ ] AC for 1.3 — release notes + npm-hello target 1.1.1; LAUNCH 1.1.0 prose retained
|
|
43
|
+
- [ ] AC for 1.4 — `@cyberskill/design@1.1.1` on registry; production site on tip
|
|
44
|
+
|
|
45
|
+
## 3. Edge cases
|
|
46
|
+
|
|
47
|
+
- Soft-skip npm-hello registry path until 1.1.1 exists on npm (pack proof still required).
|
|
48
|
+
- Do not rewrite historical TASK-REL-001 or archive docs.
|
|
49
|
+
|
|
50
|
+
## 4. Protected invariants this task must not weaken
|
|
51
|
+
|
|
52
|
+
- No `CHANGELOG.md` surface.
|
|
53
|
+
- License stays **UNLICENSED**; consumer grant unchanged except version references.
|
|
54
|
+
- Expansion Rule and axis contracts unchanged.
|
|
@@ -23,7 +23,7 @@ Checklist tự kiểm khi tiến hóa CyberSkill Design System — chuẩn bên
|
|
|
23
23
|
| Một element mỗi bề mặt; gradient chỉ Tương sinh | Registry products · conventions |
|
|
24
24
|
| Registry product→element khóa; UI kit trung thành Thổ | [`docs/vi/products.md`](products.md) |
|
|
25
25
|
| Expansion Rule đủ + `_audit/run.html` xanh + docs EN·VI parity | CLAUDE.md · docs-consistency · docs-lang-parity |
|
|
26
|
-
| VERSION **1.1.
|
|
26
|
+
| VERSION **1.1.1** post-LAUNCH | version-stamp · docs-consistency |
|
|
27
27
|
| Pack Element chỉ từ seed (30 bộ) | `element-geometry` · `tokens:elements` |
|
|
28
28
|
|
|
29
29
|
## Checklist mở rộng style (`data-cs-style`)
|
package/docs/vi/ci-cd.md
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
9. **`regenerate-tokens`** (pull request) + **`regenerate-tokens-push`** (push `main` / schedule / thủ công) — path filter phủ element seeds/packs (`element-seeds.json`, `elements.css`, mirror JSON/JS/DTCG, `generate-element-packs.mjs`) cộng natives / `VERSION`. Regenerate chạy `npm run tokens:elements` rồi `node _audit/ci/generate-native-tokens.mjs`. Trên **pull request** job chạy với `contents: read`, không bao giờ push, và **exit 1** khi có drift: chạy cả hai ở local rồi commit. Chỉ job song sinh push/schedule/thủ công giữ `contents: write` và auto-commit với `DS_PUSH_TOKEN` (hoặc `github.token`).
|
|
22
22
|
10. **`npm-hello-smoke`** — chứng minh consumer registry: `cd examples/npm-hello && npm ci && npm run smoke` (**hard fail**; package public). Path-filtered trên push/PR khi `examples/npm-hello/**`, bề mặt publish package, hoặc workflow này đổi; luôn chạy trên schedule / `workflow_dispatch`.
|
|
23
23
|
|
|
24
|
-
Workflow riêng **`npm-publish`** (`.github/workflows/npm-publish.yml`): `workflow_dispatch` + tag `v*`; pack dry-run luôn; publish qua **npm Trusted Publishing (OIDC)** (`id-token: write`, không `NPM_TOKEN` trên bước publish). Soft-skip khi auth / 403 / 404 / EOTP / conflict phiên bản. Phiên bản là **1.1.
|
|
24
|
+
Workflow riêng **`npm-publish`** (`.github/workflows/npm-publish.yml`): `workflow_dispatch` + tag `v*`; pack dry-run luôn; publish qua **npm Trusted Publishing (OIDC)** (`id-token: write`, không `NPM_TOKEN` trên bước publish). Soft-skip khi auth / 403 / 404 / EOTP / conflict phiên bản. Phiên bản là **1.1.1**; license **UNLICENSED**. Trusted Publisher trên npmjs phải khớp filename workflow `npm-publish.yml`. Publishing access package: **Require 2FA and disallow tokens** (OIDC vẫn chạy; token classic bị từ chối).
|
|
25
25
|
|
|
26
26
|
Workflow riêng **`native-store`** (`.github/workflows/native-store.yml`): PR + `main` (path-filtered) + `workflow_dispatch`; dry-run scaffold luôn; kiểm signed-release soft-skip khi thiếu `ASC_KEY_ID` / `ASC_ISSUER_ID` / `ASC_KEY_P8` / `PLAY_SERVICE_ACCOUNT_JSON`. **Không bao giờ submit** lên App Store / Play — sample vẫn là sample. Xem `examples/native/README.md`.
|
|
27
27
|
|
package/docs/vi/consuming.md
CHANGED
|
@@ -11,11 +11,11 @@ Cách mọi project — do người hoặc agent điều khiển — áp dụng
|
|
|
11
11
|
| **Claude Code** | `SKILL.md` → `README.md` → `styles.css` + bundler `@cyberskill/design` / legacy `_esm/cs.mjs` / `_ds_bundle.js` (resolve theo prefix) | Mạnh — rules, components, prompts; gates qua full clone | Hardcode hậu tố bundle; coi Storybook host là hợp đồng portable; import `_esm/cs.mjs` hoặc `@cyberskill/design/legacy` vào bundler Next/SSR |
|
|
12
12
|
| **Google Stitch** | `DESIGN.md` → `llms.txt` → `tokens/tokens.dtcg.json` | Mạnh cho doctrine + tokens + HTML tĩnh `.cs-*` | Coi `templates/**/*.dc.html` là SoT — không có tweaks / `__dcSetProps` / DC compiler |
|
|
13
13
|
| **Claude Design** | Full repo + DC compiler | Full fidelity (tweaks, `x-import`, template bilingual) | Bỏ qua vòng sync trong `docs/sync.md` |
|
|
14
|
-
| **npm** | `@cyberskill/design` | **1.1.
|
|
14
|
+
| **npm** | `@cyberskill/design` | **1.1.1** trên registry; CI Trusted Publishing; grant tại `docs/consumer-grant.md` | Coi cài từ registry như license công khai (vẫn UNLICENSED) |
|
|
15
15
|
|
|
16
16
|
**Quy tắc DC cho Stitch:** Stitch (và mọi tool non-DC) **không** được tiêu thụ `*.dc.html` như nguồn chân lý. Dùng pattern export tĩnh, `templates/kitchen-sink.html`, `examples/static-hello/`, và class `.cs-*` từ `styles.css`.
|
|
17
17
|
|
|
18
|
-
**Tín hiệu release:**
|
|
18
|
+
**Tín hiệu release:** đã LAUNCH ở **1.1.0**; pin hiện tại **1.1.1** (không CHANGELOG). Coi **git tip SHA** là chân lý kỹ thuật; đọc điểm nổi bật sản phẩm curated trong `docs/release-notes.md`.
|
|
19
19
|
|
|
20
20
|
## Đường nhanh cho AI agent (Claude Code, hoặc điều khiển một agent)
|
|
21
21
|
|
|
@@ -38,12 +38,12 @@ Cách mọi project — do người hoặc agent điều khiển — áp dụng
|
|
|
38
38
|
|
|
39
39
|
## Adopt qua npm (tùy chọn)
|
|
40
40
|
|
|
41
|
-
Package có thể publish (`private: false`, phiên bản **1.1.
|
|
41
|
+
Package có thể publish (`private: false`, phiên bản **1.1.1**). License vẫn **UNLICENSED** — cài từ registry **không** tự cấp quyền redistribution. **LAUNCH là `@cyberskill/design@1.1.0`; pin hiện tại `@cyberskill/design@1.1.1` (publish qua tag `v1.1.1`).** CI republish qua **npm Trusted Publishing (OIDC)** trên workflow `npm-publish.yml` (không token publish dài hạn; Publishing access package **disallow tokens**). Dùng đã duyệt ghi tại **`docs/consumer-grant.md`** (sản phẩm portfolio CyberSkill từ `docs/products.md`). Xem `docs/decisions.md` và `docs/ci-cd.md`.
|
|
42
42
|
|
|
43
43
|
**Grant consumer (chính sách owner — không phải secret).** Đã viết và có hiệu lực tại `docs/consumer-grant.md` (+ `docs/vi/consumer-grant.md`). Team bên ngoài cần stanza có ngày thêm vào đó; redistribution ngoài sản phẩm đã grant cần grant viết thêm.
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
|
-
npm install @cyberskill/design@1.1.
|
|
46
|
+
npm install @cyberskill/design@1.1.1
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
Rồi link styles và import component. **App Next.js / Vite / SSR** dùng entry mặc định (bundler-native):
|
|
@@ -58,7 +58,7 @@ Thêm `transpilePackages: ["@cyberskill/design"]` trong Next.js (JSX ship dạng
|
|
|
58
58
|
|
|
59
59
|
**Browser / no-build:** import `@cyberskill/design/legacy` (`_esm/cs.mjs`) hoặc tiếp tục dùng đường cây tĩnh bên dưới. Tarball đã publish là **cả cây portable** (styles, tokens, components, templates, guidelines, docs, UI kits) — không phải subset “chỉ lib” tối thiểu. Tooling chỉ-host (Storybook, `_audit/`) không nằm trong `files[]`.
|
|
60
60
|
|
|
61
|
-
**Cài thật đầu tiên (Lumi).** Consumer **browser** copy-paste: `examples/npm-hello/` — cài `@cyberskill/design@1.1.
|
|
61
|
+
**Cài thật đầu tiên (Lumi).** Consumer **browser** copy-paste: `examples/npm-hello/` — cài `@cyberskill/design@1.1.1` từ registry, link `styles.css`, mount `Button` qua entry **legacy** (`_esm/cs.mjs`), scope **Lumi** với `data-cs-element="hoa" data-cs-variant="plasma"` (hàng đã khóa trong `docs/products.md`). Trong thư mục đó: `npm install && npm run smoke && npm start` → mở `http://127.0.0.1:8766/`. Team Status Hub dùng cùng install và đổi sang `data-cs-element="thuy"` — không invent ánh xạ. Cho app Next/SSR (ví dụ Lumi landing), dùng `import { Button } from "@cyberskill/design"` như trên — không dùng import map của npm-hello.
|
|
62
62
|
|
|
63
63
|
**Đường publish (maintainer):** `prepublishOnly` chạy `build:bundle` + `build:design-md --check`. Workflow `.github/workflows/npm-publish.yml` trên `workflow_dispatch` / tag `v*` dùng **Trusted Publishing** (`permissions.id-token: write`; không đặt `NODE_AUTH_TOKEN` trên bước publish). `node _audit/ci/npm-publish.mjs --dry-run` luôn liệt kê tarball. Xem `docs/ci-cd.md` và `docs/decisions.md`.
|
|
64
64
|
|
|
@@ -96,7 +96,7 @@ Consumer bỏ qua `styles.css` để tự kiểm soát font loading (`cyberskill
|
|
|
96
96
|
|
|
97
97
|
## Nâng cấp
|
|
98
98
|
|
|
99
|
-
- **Phiên bản cố định.** `VERSION` và `package.json` là **1.1.
|
|
99
|
+
- **Phiên bản cố định.** `VERSION` và `package.json` là **1.1.1**. Không có file changelog design-system — coi **git tip SHA** là chân lý kỹ thuật, và đọc **Release Notes** curated (Storybook + `docs/release-notes.md`) cho điểm nổi bật hướng sản phẩm.
|
|
100
100
|
|
|
101
101
|
- Anchors (Umber/Ochre), tên class `.cs-*`, và tên token `--cs-*` là hợp đồng ổn định — an toàn để phụ thuộc. Đổi tên phá vỡ những hợp đồng đó phải hiếm và được gọi ra trong PR/docs khi xảy ra.
|
|
102
102
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Báo cáo contrast — cặp elemental (APCA)
|
|
2
2
|
|
|
3
|
-
Tạo 2026-07-27 · quét tại pin VERSION 1.1.
|
|
3
|
+
Tạo 2026-07-27 · quét tại pin VERSION 1.1.1.
|
|
4
4
|
|
|
5
5
|
**Doctrine của sweep này:** chữ ngồi trên `-bright` hoặc `-tint`, không bao giờ trên mid-tone `-accent`. Accent chỉ cho bar, border, progress, fill không chữ. (Rule trong `tokens/elements.css` và conventions.)
|
|
6
6
|
|
package/docs/vi/conventions.md
CHANGED
|
@@ -38,7 +38,7 @@ Pack Style duy nhất hiện nay là **liquid-glass**. Bất biến dưới mọ
|
|
|
38
38
|
|
|
39
39
|
**Element variant mới** — ở trong envelope oklch của element; đặt 9 token hợp đồng `--cs-accent-*` cộng `--cs-color-text-accent`/`--cs-color-link` (APCA-check cả hai); aurora wash kế thừa từ element qua `.cs-aurora-wash` (chỉ override class rule nếu variant thật sự cần ảnh riêng); đối tác gradient (`grad-b`) phải theo Tương sinh.
|
|
40
40
|
|
|
41
|
-
**Ship check** — chạy compiler check đến sạch, rồi chạy `_audit/docs-consistency.html` **và** `_audit/namespace-portability.html` (cả hai phải xanh). Version giữ pin 1.1.
|
|
41
|
+
**Ship check** — chạy compiler check đến sạch, rồi chạy `_audit/docs-consistency.html` **và** `_audit/namespace-portability.html` (cả hai phải xanh). Version giữ pin 1.1.1.
|
|
42
42
|
|
|
43
43
|
## Decision log (owner duyệt)
|
|
44
44
|
|
package/docs/vi/decisions.md
CHANGED
|
@@ -50,12 +50,12 @@ Giữ plan Figma hiện tại. Variables REST API chỉ Enterprise — job ghi *
|
|
|
50
50
|
|
|
51
51
|
## 7. npm publish — live qua Trusted Publishing (OIDC)
|
|
52
52
|
|
|
53
|
-
**Trạng thái: LAUNCH `@cyberskill/design@1.1.0`; CI publish dùng npm Trusted Publishing; token bị cấm** (Th7 2026; LAUNCH 2026-07-27)
|
|
53
|
+
**Trạng thái: LAUNCH `@cyberskill/design@1.1.0`; pin hiện tại `@cyberskill/design@1.1.1`; CI publish dùng npm Trusted Publishing; token bị cấm** (Th7 2026; LAUNCH 2026-07-27)
|
|
54
54
|
|
|
55
55
|
- `package.json` là `private: false`; tên package **`@cyberskill/design`** (`publishConfig.access: public`); `repository.url` khớp repo GitHub này cho provenance.
|
|
56
56
|
- Workflow `.github/workflows/npm-publish.yml`: `id-token: write` + runner GitHub-hosted; **không** đặt `NPM_TOKEN` / `NODE_AUTH_TOKEN` trên bước publish (OIDC). Trusted Publisher trên npm phải liệt kê filename workflow **`npm-publish.yml`** cho `cyberskill-official/design-system`. Soft-skip khi auth / 403 / 404 / EOTP / conflict phiên bản.
|
|
57
57
|
- **Publishing access** trên npmjs: **Require two-factor authentication and disallow tokens** (Trusted Publishing OIDC vẫn hoạt động; token publish classic / granular bị từ chối). Secret `NPM_TOKEN` dài hạn đã thu hồi.
|
|
58
|
-
- License giữ **UNLICENSED**; phiên bản là **1.1.
|
|
58
|
+
- License giữ **UNLICENSED**; phiên bản là **1.1.1**. Dùng đã duyệt ghi tại **`docs/consumer-grant.md`** (sản phẩm portfolio CyberSkill). Cài từ registry một mình không phải license công khai.
|
|
59
59
|
|
|
60
60
|
## 8. Đóng gói store native — scaffold đã ship; submit tắt
|
|
61
61
|
|
|
@@ -77,7 +77,7 @@ Ghi nhận Th7 2026 — mặc định mở khóa (cập nhật khi bước vận
|
|
|
77
77
|
|
|
78
78
|
- **Figma Variables** — giữ Tokens Studio / non-Enterprise (quyết định §3). Soft-skip Variables REST vẫn trung thực.
|
|
79
79
|
- **Code Connect** — **bỏ qua khi còn Figma free**; chỉ xem lại sau Org + library đã publish + `nodeId` thật (quyết định §6). Soft-skip ≠ publish.
|
|
80
|
-
- **npm** — **LAUNCH `@cyberskill/design@1.1.0`** (publish qua tag `
|
|
80
|
+
- **npm** — **LAUNCH `@cyberskill/design@1.1.0`**; pin hiện tại **`@cyberskill/design@1.1.1`** (publish qua tag `v*`); CI dùng **Trusted Publishing (OIDC)** qua `npm-publish.yml`; npmjs **disallow tokens**; grant consumer có hiệu lực tại `docs/consumer-grant.md` (quyết định §7). Entry package mặc định là bundler-native `_esm/react.mjs` (React peer); đường browser là `@cyberskill/design/legacy` → `_esm/cs.mjs` (quyết định §10).
|
|
81
81
|
|
|
82
82
|
## 10. Export React bundler-native (Next / SSR)
|
|
83
83
|
|
|
@@ -85,7 +85,7 @@ Ghi nhận Th7 2026 — mặc định mở khóa (cập nhật khi bước vận
|
|
|
85
85
|
|
|
86
86
|
- React / react-dom là **peerDependencies** (`^18 || ^19`); entry re-export JSX source (consumer transpile — ví dụ Next `transpilePackages`). Storybook / CI **devDependencies** pin **react@19.2.8** / **react-dom@19.2.8**.
|
|
87
87
|
- Browser / no-build giữ `_esm/cs.mjs` tại `exports["./legacy"]` (CDN self-ensure + `_ds_bundle.js`). React 19 chính thức bỏ UMD — đường CDN load **`umd-react@19.2.8`** (pin SRI) để tạo `window.React` / `window.ReactDOM` cho `_ds_bundle.js`. Cùng pin dùng trong audit HTML, specimen card, UI kit, và runtime `templates/*/support.js` byte-identical.
|
|
88
|
-
- Alias `@cyberskill/design/react` mirror entry mặc định. VERSION là **1.1.
|
|
88
|
+
- Alias `@cyberskill/design/react` mirror entry mặc định. VERSION là **1.1.1**; republish qua Trusted Publishing sau merge.
|
|
89
89
|
- Docs: `docs/consuming.md` (+ VI); gate: `package-exports-integrity` + `test:react-entry`.
|
|
90
90
|
|
|
91
91
|
## Việc maintainer (đang mở)
|
|
@@ -98,7 +98,7 @@ Theo dõi vận hành — không phải marketing sản phẩm, không phải ba
|
|
|
98
98
|
|
|
99
99
|
~~3. Chốt registry products~~ — **xong** (Th7 2026): xem quyết định §9; `docs/products.md` đã khóa.
|
|
100
100
|
|
|
101
|
-
~~4. Đường consumer registry đầu tiên~~ — **xong** (Th7 2026): `examples/npm-hello/` cài `@cyberskill/design` cho identity **Lumi** đã khóa; ghi trong `docs/consuming.md` (+ VI) và `docs/release-notes.md`. Nay target **1.1.
|
|
101
|
+
~~4. Đường consumer registry đầu tiên~~ — **xong** (Th7 2026): `examples/npm-hello/` cài `@cyberskill/design` cho identity **Lumi** đã khóa; ghi trong `docs/consuming.md` (+ VI) và `docs/release-notes.md`. Nay target **1.1.1** post-LAUNCH.
|
|
102
102
|
|
|
103
103
|
5. **Drift native + element-pack trên PR là fail-closed** (Th7 2026) — `regenerate-tokens` chạy read-only trên pull request và exit 1 thay vì push; chỉ `regenerate-tokens-push` (main / schedule / thủ công) giữ `contents: write`. Khi PR fail, chạy `npm run tokens:elements && node _audit/ci/generate-native-tokens.mjs` rồi commit packs + natives. Xem `docs/ci-cd.md`.
|
|
104
104
|
|
package/docs/vi/quality-gates.md
CHANGED
|
@@ -13,10 +13,10 @@ Nguyên tắc benchmark (WCAG · APCA · OKLCH · DTCG · doctrine CDS + mở r
|
|
|
13
13
|
| Contrast guard | `_audit/contrast-guard.html` | Không base rule sơn umber trên bề mặt themeable mà thiếu dark override; mọi cặp text×surface semantic ghi điểm light và dark | 0 rule không shield và 0 cặp fail (`__contrastguard`) | Hard | Fast board CI |
|
|
14
14
|
| Axes guard | `_audit/axis-guard.html` | Không live source đưa lại bề mặt sản phẩm Expression/Density đã nghỉ | 0 hit trên source index bởi manifest (`__axisguard`) | Hard | Fast board CI |
|
|
15
15
|
| Manifest CSS paths | `_audit/manifest-css-guard.html` | Mọi entry `globalCssPaths` của `_ds_manifest.json` tồn tại như raw CSS; mọi `@import` của `styles.css` được liệt kê | 0 thiếu / 0 chưa liệt kê (`__cssguard`) | Hard | Fast board CI |
|
|
16
|
-
| Docs consistency | `_audit/docs-consistency.html` | Mọi claim đếm trong README/SKILL/llms.txt khớp compiler manifest; claim số card trong prose audit (`_audit/index` / README / namespace-portability) khớp `manifest.cards`; `VERSION` + `package.json` pin 1.1.
|
|
16
|
+
| Docs consistency | `_audit/docs-consistency.html` | Mọi claim đếm trong README/SKILL/llms.txt khớp compiler manifest; claim số card trong prose audit (`_audit/index` / README / namespace-portability) khớp `manifest.cards`; `VERSION` + `package.json` pin 1.1.1; không tham chiếu changelog-file; blacklist stale-phrase (suite/pack count đã gỡ trong audit Th7 2026) sạch trên README/SKILL/llms + `docs/*.md` (ghi chú lịch sử dưới `_audit/archive/` không được quét); `DESIGN.md` tồn tại với front-matter version = `VERSION`; routing agent trung thực — Claude path cite `_esm/cs.mjs` + bundle prefix; Stitch path cấm `*.dc.html` làm SoT; tên package `@cyberskill/design` | 0 claim lệch, 0 blacklist hit, pin + stamp + routing nguyên (`__docs`) | Hard | Fast board CI + merge blocker |
|
|
17
17
|
| Docs language parity | `_audit/docs-lang-parity.html` | Mọi EN `docs/*.md` hướng operator có counterpart `docs/vi/`; VI không phải stub trống/TODO (≥40% độ dài EN); blacklist stale-phrase sạch trên cả EN và VI (ghi chú lịch sử dưới `_audit/archive/` không được theo dõi) | 0 cặp thiếu, 0 stub, 0 blacklist hit (`__docslangparity`) | Hard | Fast board CI |
|
|
18
18
|
| DESIGN.md parity | `_audit/design-md-parity.html` | Root `DESIGN.md` (open-spec Stitch) byte-equals regeneration trong trình duyệt từ `tokens.dtcg.json` + `_ds_manifest.json` + `VERSION` qua `scripts/design-md-lib.mjs` dùng chung; từng hàng token được re-check riêng (số hàng in kèm verdict) | Byte-identical + 0 hàng drift (`__designmd`) | Hard | Fast board CI |
|
|
19
|
-
| Version stamp | `_audit/version-stamp.html` | `package.json`, meta `tokens.json`/`tokens.js`, DTCG `$extensions`, `provenance.json` release + dtcgStamp, front matter `DESIGN.md`, và `_esm/cs.mjs` `export const VERSION` đều bằng `VERSION` (pin 1.1.
|
|
19
|
+
| Version stamp | `_audit/version-stamp.html` | `package.json`, meta `tokens.json`/`tokens.js`, DTCG `$extensions`, `provenance.json` release + dtcgStamp, front matter `DESIGN.md`, và `_esm/cs.mjs` `export const VERSION` đều bằng `VERSION` (pin 1.1.1) | Cả 9 stamp bằng nhau (`__versionstamp`) | Hard | Fast board CI |
|
|
20
20
|
| Namespace portability | `_audit/namespace-portability.html` | Không source index bởi manifest hardcode hậu tố bundle project-id của compiler | 0 hậu tố hardcode (`__nsguard`) | Hard | Fast board CI |
|
|
21
21
|
| Token contract | `_audit/token-contract.html` | Cả 15 scope element×variant resolve cả 9 role `--cs-accent-*`; token semantic core resolve | 0 role thiếu, 0 token core thiếu (`__contract`) | Hard | Fast board CI |
|
|
22
22
|
| Token pipeline | `_audit/token-pipeline-test.html` | Mọi hằng dẫn từ DTCG xuất hiện nguyên văn trong cả ba target `tokens/native/`; provenance sha-256 khớp nguồn DTCG | 0 hằng drift, hash khớp (`__tokenpipe`) | Hard | Fast board CI |
|
|
@@ -74,7 +74,7 @@ Nguyên tắc benchmark (WCAG · APCA · OKLCH · DTCG · doctrine CDS + mở r
|
|
|
74
74
|
| Code Connect helpers | `_audit/ci/test-code-connect.mjs` | 105 primaries, helper node-map/render, classifier soft-skip, `figma.config.json` đã commit + `.figma.tsx` traffic cao | Mọi assert pass (exit 0) | Hard | Unit test |
|
|
75
75
|
| Native samples | `_audit/ci/test-native-samples.mjs` | App sample SwiftUI / Compose / Flutter mỗi cái ≥ 3 màn hình, tham chiếu hằng token đã generate, và ship scaffold Fastlane store (submit tắt) | Mọi assert pass (exit 0) | Hard | Unit test |
|
|
76
76
|
| Subtree consume | `_audit/ci/test-subtree-consume.mjs` | Bản copy portable `styles.css` + `base/` + `tokens/` + `fonts/` + `_esm/` + `_ds_bundle.js` (không clone full) vẫn resolve token/font và mount Button qua ESM — đường subtree-copy Stitch/Claude | Mọi assert pass (exit 0) | Hard | Unit test |
|
|
77
|
-
| React entry | `_audit/ci/test-react-entry.mjs` | Dual package exports (`.` / `./react` → `_esm/react.mjs`, `./legacy` → `_esm/cs.mjs`); pin VERSION 1.1.
|
|
77
|
+
| React entry | `_audit/ci/test-react-entry.mjs` | Dual package exports (`.` / `./react` → `_esm/react.mjs`, `./legacy` → `_esm/cs.mjs`); pin VERSION 1.1.1; peerDeps React; react.mjs không CDN/bundle bridge và re-export khớp header bundle; `generate-react-entry --check` xanh | Mọi assert pass (exit 0) | Hard | Unit test |
|
|
78
78
|
| Element packs | `_audit/ci/test-element-packs.mjs` | `tokens/elements.css` + mirror JSON/JS/DTCG byte-equal regeneration từ `tokens/element-seeds.json` | `generate-element-packs --check` exit 0 | Hard | Unit test |
|
|
79
79
|
|
|
80
80
|
Suite `test:unit` được nối vào CI workflow như một phần của hardening Th7 2026 (trước đó chỉ chạy local).
|
|
@@ -94,7 +94,7 @@ Soft-skip nghĩa là job exit 0 kèm report khi secret/plan/API không hoàn t
|
|
|
94
94
|
|
|
95
95
|
| Job | Script / workflow | Assert gì | Tiêu chí pass | Chạy ở đâu |
|
|
96
96
|
|---|---|---|---|---|
|
|
97
|
-
| npm-hello smoke | `examples/npm-hello` + job `npm-hello-smoke` | Install registry public `@cyberskill/design@1.1.
|
|
97
|
+
| npm-hello smoke | `examples/npm-hello` + job `npm-hello-smoke` | Install registry public `@cyberskill/design@1.1.1` resolve đúng tên package + exports (`npm install` + `npm run smoke`; pack proof local nếu VERSION chưa trên registry) | Exit 0 (**hard fail** khi đã publish; soft-skip pack proof nếu VERSION chưa trên registry) | Push/PR path-filtered + nightly + thủ công |
|
|
98
98
|
|
|
99
99
|
## Hardening Th7 2026 — đã giao
|
|
100
100
|
|
package/docs/vi/release-notes.md
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
# Ghi chú phát hành
|
|
2
2
|
|
|
3
|
-
Điểm nổi bật sản phẩm cho operator — **không** phải git log và **không** phải `CHANGELOG.md`. Hệ thống thiết kế không maintain file changelog. Phiên bản **đã LAUNCH ở 1.1.0** (chỉ thị owner Th7 2026)
|
|
3
|
+
Điểm nổi bật sản phẩm cho operator — **không** phải git log và **không** phải `CHANGELOG.md`. Hệ thống thiết kế không maintain file changelog. Phiên bản **đã LAUNCH ở 1.1.0**; pin hiện tại **1.1.1** (chỉ thị owner Th7 2026). Bump tiếp theo cần chỉ thị owner rõ. Chân lý kỹ thuật là tip repo; chân lý hướng sản phẩm là trang này (đồng bộ Storybook **Release Notes**).
|
|
4
|
+
|
|
5
|
+
## Patch — `@cyberskill/design@1.1.1`
|
|
6
|
+
|
|
7
|
+
Republish lockstep sau cut LAUNCH: regen natives / provenance / `_ds_bundle.js` để registry khớp tip, và bỏ `CHANGELOG.md` gốc bị cấm. Cài:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @cyberskill/design@1.1.1
|
|
11
|
+
```
|
|
4
12
|
|
|
5
13
|
## LAUNCH — `@cyberskill/design@1.1.0`
|
|
6
14
|
|
package/docs/vi/sync.md
CHANGED
|
@@ -39,7 +39,7 @@ Diff PR là lưới an toàn — nó hiện đúng những gì đổi kể từ
|
|
|
39
39
|
## Hygiene giữ round-trip sạch
|
|
40
40
|
- **`.gitignore`** transient (`uploads/`, `scraps/`, `_audit/exports/`); commit mọi thứ khác, **kể cả `_esm/`** (xem trên — nó là source, không phải build artifact, dù có tiền tố `_`). Compiled `_ds_bundle.js`/manifest được commit cho consumer không có bước build, nhưng kỳ vọng churn — hoặc ignore và để mỗi session regenerate.
|
|
41
41
|
|
|
42
|
-
- **`VERSION` đã LAUNCH ở 1.1.0** — chỉ bump khi có chỉ thị owner rõ; không maintain file changelog. Continuity là git history; việc maintainer đang mở nằm ở `docs/decisions.md`.
|
|
42
|
+
- **`VERSION` đã LAUNCH ở 1.1.0; pin hiện tại **1.1.1**** — chỉ bump khi có chỉ thị owner rõ; không maintain file changelog. Continuity là git history; việc maintainer đang mở nằm ở `docs/decisions.md`.
|
|
43
43
|
|
|
44
44
|
- **Một nguồn chân lý tại một thời điểm.** Đừng sửa repo và project Claude Design song song rồi push cả hai — pull, làm việc, push, theo thứ tự đó, để repo luôn là điểm merge.
|
|
45
45
|
|
package/llms.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CyberSkill Design System
|
|
2
2
|
|
|
3
|
-
> HTML-first, Vietnamese-first design system, LAUNCHED **v1.1.0**. Immutable anchors: Umber #45210E · Ochre #F4BA17. Four independent axes — Theme (light · dark · system) × Element (Ngũ Hành, 15 variants) × Language (EN · VI) × Style (`data-cs-style` — sole pack **liquid-glass**; absent ≡ default). It ships 105 components / 121 exports, 84 copyable templates (EN·VN for emails + team/legal/finance; client/media collateral EN-first), and tokens in CSS + JSON + ESM + W3C DTCG + native mirrors. This file is the agent/tool front door: it maps each audience to the format it should consume. npm package name is **`@cyberskill/design`** (not `@cyberskill/react`). Release signal: tip SHA + [docs/release-notes.md](docs/release-notes.md) — no CHANGELOG.
|
|
3
|
+
> HTML-first, Vietnamese-first design system, LAUNCHED **v1.1.0**; current **v1.1.1**. Immutable anchors: Umber #45210E · Ochre #F4BA17. Four independent axes — Theme (light · dark · system) × Element (Ngũ Hành, 15 variants) × Language (EN · VI) × Style (`data-cs-style` — sole pack **liquid-glass**; absent ≡ default). It ships 105 components / 121 exports, 84 copyable templates (EN·VN for emails + team/legal/finance; client/media collateral EN-first), and tokens in CSS + JSON + ESM + W3C DTCG + native mirrors. This file is the agent/tool front door: it maps each audience to the format it should consume. npm package name is **`@cyberskill/design`** (not `@cyberskill/react`). Release signal: tip SHA + [docs/release-notes.md](docs/release-notes.md) — VERSION **1.1.1**, no CHANGELOG.
|
|
4
4
|
|
|
5
5
|
The portable contract covers browser and bundler entry points: `styles.css` · `_esm/cs.mjs` legacy · `_ds_bundle.js` · tokens work without a build step; `_esm/react.mjs` is bundler-native JSX (Next/Vite must transpile — not a bare-browser import). The DC layer (`templates/**/*.dc.html`) is **Claude Design / authoring-environment-only**. **Google Stitch must not treat `*.dc.html` as source of truth** — use `DESIGN.md`, DTCG, `styles.css`, kitchen-sink, and `.cs-*` static HTML instead. Dual path: [docs/consuming.md](docs/consuming.md). The full non-negotiables list lives in `CONTRIBUTING.md` and `docs/conventions.md`.
|
|
6
6
|
|
|
@@ -28,7 +28,7 @@ The portable contract covers browser and bundler entry points: `styles.css` · `
|
|
|
28
28
|
- [templates/](templates/): 84 copyable starting points (`.dc.html`); `email-safe/` send-ready emails; `kitchen-sink.html`; `playground.html`
|
|
29
29
|
- [guidelines/](guidelines/): specimen cards + `atomic-view.html` (portable component grid) — host product surface is Storybook at `/`
|
|
30
30
|
- [examples/static-hello/](examples/static-hello/): zero-install static consumer (Stitch / plain HTML)
|
|
31
|
-
- [examples/npm-hello/](examples/npm-hello/): first registry **browser** consumer — `@cyberskill/design@1.1.
|
|
31
|
+
- [examples/npm-hello/](examples/npm-hello/): first registry **browser** consumer — `@cyberskill/design@1.1.1` legacy entry (Lumi · Hỏa · plasma); Status Hub teams swap to `thuy`; Next/SSR apps use default `@cyberskill/design` React entry instead
|
|
32
32
|
- [examples/native/](examples/native/): SwiftUI / Compose / Flutter sample apps + store scaffolds — Compose is **Android Studio**-first (no committed `gradlew`; see `examples/native/README.md`)
|
|
33
33
|
- [ui_kits/](ui_kits/): product recreations — status-hub · website · deck
|
|
34
34
|
- [fonts/](fonts/): self-hosted Be Vietnam Pro (UI) + Space Grotesk (opt-in display, `--cs-font-family-display`) + JetBrains Mono woff2
|
|
@@ -37,12 +37,12 @@ The portable contract covers browser and bundler entry points: `styles.css` · `
|
|
|
37
37
|
- [DESIGN.md](DESIGN.md): generated open-spec surface (doctrine + tokens + inventory) for Stitch-style consumers — pinned to DTCG by the design-md-parity gate
|
|
38
38
|
- [SKILL.md](SKILL.md): agent entry — hard rules + fast orientation
|
|
39
39
|
- [CONTRIBUTING.md](CONTRIBUTING.md): one-page onboarding for extending the system
|
|
40
|
-
- [VERSION](VERSION): pinned 1.1.
|
|
40
|
+
- [VERSION](VERSION): pinned 1.1.1 (matches [package.json](package.json))
|
|
41
41
|
|
|
42
42
|
## Docs — consumers
|
|
43
43
|
|
|
44
44
|
- [docs/consuming.md](docs/consuming.md): adopting & upgrading, Claude Code vs Stitch dual path, package name `@cyberskill/design`; first registry install at [examples/npm-hello/](examples/npm-hello/) (Lumi · Hỏa · plasma); native mirrors at [examples/native/](examples/native/) (SwiftUI / Compose / Flutter samples)
|
|
45
|
-
- [docs/release-notes.md](docs/release-notes.md): curated product highlights (not a changelog) — includes `@cyberskill/design@1.1.
|
|
45
|
+
- [docs/release-notes.md](docs/release-notes.md): curated product highlights (not a changelog) — includes `@cyberskill/design@1.1.1` Trusted Publishing / grant pointer
|
|
46
46
|
- [docs/consumer-grant.md](docs/consumer-grant.md): written npm grant (CyberSkill portfolio; UNLICENSED)
|
|
47
47
|
- [docs/conventions.md](docs/conventions.md): authoring rules (naming grammar, the four axes)
|
|
48
48
|
- [docs/design-styles.md](docs/design-styles.md): the live styling axes and the fixed liquid-glass treatment
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// CyberSkill Design System — native design tokens.
|
|
2
2
|
// GENERATED from tokens/tokens.dtcg.json — do not hand-edit; regenerate on token change.
|
|
3
|
-
// release v1.
|
|
3
|
+
// release v1.1.1 · source sha256 9386ad73cf23d458…
|
|
4
4
|
// conversions: rem→px at 16 · em→…Em relative doubles · rgba alpha→ARGB byte (round(a*255)) · durations in ms
|
|
5
5
|
// dark element packs: see $extensions.overrides.elementsDark
|
|
6
6
|
// provenance: tokens/provenance.json · parity gate: _audit/token-pipeline-test.html
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// CyberSkill Design System — native design tokens.
|
|
2
2
|
// GENERATED from tokens/tokens.dtcg.json — do not hand-edit; regenerate on token change.
|
|
3
|
-
// release v1.
|
|
3
|
+
// release v1.1.1 · source sha256 9386ad73cf23d458…
|
|
4
4
|
// conversions: rem→px at 16 · em→…Em relative doubles · rgba alpha→ARGB byte (round(a*255)) · durations in ms
|
|
5
5
|
// dark element packs: see $extensions.overrides.elementsDark
|
|
6
6
|
// provenance: tokens/provenance.json · parity gate: _audit/token-pipeline-test.html
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// CyberSkill Design System — native design tokens.
|
|
2
2
|
// GENERATED from tokens/tokens.dtcg.json — do not hand-edit; regenerate on token change.
|
|
3
|
-
// release v1.
|
|
3
|
+
// release v1.1.1 · source sha256 9386ad73cf23d458…
|
|
4
4
|
// conversions: rem→px at 16 · em→…Em relative doubles · rgba alpha→ARGB byte (round(a*255)) · durations in ms
|
|
5
5
|
// dark element packs: see $extensions.overrides.elementsDark
|
|
6
6
|
// provenance: tokens/provenance.json · parity gate: _audit/token-pipeline-test.html
|
package/tokens/provenance.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"system": "CyberSkill Design System",
|
|
3
|
-
"release": "1.1.
|
|
3
|
+
"release": "1.1.1",
|
|
4
4
|
"source": "tokens/tokens.dtcg.json",
|
|
5
|
-
"sourceSha256": "
|
|
5
|
+
"sourceSha256": "9386ad73cf23d4585fb5d372e872dd76f4df052eab3f78ae211c1060e8662318",
|
|
6
6
|
"dtcgStamp": {
|
|
7
|
-
"version": "1.1.
|
|
7
|
+
"version": "1.1.1",
|
|
8
8
|
"generated": "2026-07-23"
|
|
9
9
|
},
|
|
10
10
|
"conversions": {
|
|
@@ -36,17 +36,17 @@
|
|
|
36
36
|
{
|
|
37
37
|
"file": "tokens/native/CSTokens.swift",
|
|
38
38
|
"lang": "swift",
|
|
39
|
-
"sha256": "
|
|
39
|
+
"sha256": "2afd8e884a220a9220723301ae030bd146853fd2c793e4adfe61dc8b2097f931"
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"file": "tokens/native/CSTokens.kt",
|
|
43
43
|
"lang": "kotlin",
|
|
44
|
-
"sha256": "
|
|
44
|
+
"sha256": "1d60bc32651a87afd6c12b2bf8737fec095f7107c369e89fb16b11368dd1c4a3"
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
"file": "tokens/native/cs_tokens.dart",
|
|
48
48
|
"lang": "dart",
|
|
49
|
-
"sha256": "
|
|
49
|
+
"sha256": "ea9b03e737c65921d9045424099beb63eb9a90f6149af54082925665f90543c8"
|
|
50
50
|
}
|
|
51
51
|
]
|
|
52
52
|
}
|
package/tokens/tokens.dtcg.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"$extensions": {
|
|
4
4
|
"com.cyberskill": {
|
|
5
5
|
"system": "CyberSkill Design System",
|
|
6
|
-
"version": "1.1.
|
|
6
|
+
"version": "1.1.1",
|
|
7
7
|
"generated": "2026-07-23",
|
|
8
8
|
"source": "tokens/tokens.json",
|
|
9
9
|
"note": "Scope overrides (dark/system theme · 15 element×variant packs) are carried under $extensions.overrides keyed by CSS selector — apply the matching selector on :root/ancestor to activate.",
|
package/tokens/tokens.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
// CyberSkill design tokens — generated from tokens/*.css (v1.1.
|
|
1
|
+
// CyberSkill design tokens — generated from tokens/*.css (v1.1.1). Do not edit by hand.
|
|
2
2
|
export const tokens = {
|
|
3
3
|
"$meta": {
|
|
4
4
|
"system": "CyberSkill Design System",
|
|
5
|
-
"version": "1.1.
|
|
5
|
+
"version": "1.1.1",
|
|
6
6
|
"generated": "2026-07-23",
|
|
7
7
|
"note": "Generated from tokens/*.css. Root grouped by category; theme/element scopes carry overrides only. Regenerate after any token change (see docs/conventions.md)."
|
|
8
8
|
},
|
package/tokens/tokens.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$meta": {
|
|
3
3
|
"system": "CyberSkill Design System",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.1",
|
|
5
5
|
"generated": "2026-07-23",
|
|
6
6
|
"note": "Generated from tokens/*.css. Root grouped by category; theme/element scopes carry overrides only. Regenerate after any token change (see docs/conventions.md)."
|
|
7
7
|
},
|