@cyberskill/design 1.3.10 → 1.4.0
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 +2 -2
- package/README.md +12 -10
- package/SKILL.md +3 -3
- package/VERSION +1 -1
- package/_ds_bundle.js +2 -2
- package/_ds_manifest.json +1 -1
- package/_esm/cs.mjs +2 -2
- package/docs/benchmark-rubric.md +1 -1
- package/docs/consuming.md +2 -2
- package/docs/contrast-report.md +1 -1
- package/docs/conventions.md +4 -4
- package/docs/decisions.md +4 -3
- package/docs/doctrine.md +1 -1
- package/docs/hr-suite-sources.md +91 -0
- package/docs/live-hub.md +16 -9
- package/docs/quality-gates.md +6 -6
- package/docs/release-notes.md +5 -1
- package/docs/storybook.md +6 -2
- package/docs/sync.md +1 -1
- package/docs/vi/benchmark-rubric.md +1 -1
- package/docs/vi/consuming.md +2 -2
- package/docs/vi/contrast-report.md +1 -1
- package/docs/vi/conventions.md +4 -4
- package/docs/vi/decisions.md +4 -3
- package/docs/vi/doctrine.md +1 -1
- package/docs/vi/hr-suite-sources.md +47 -0
- package/docs/vi/live-hub.md +24 -17
- package/docs/vi/quality-gates.md +6 -6
- package/docs/vi/release-notes.md +5 -1
- package/docs/vi/storybook.md +26 -22
- package/docs/vi/sync.md +1 -1
- package/docs/viewer.html +2 -2
- package/llms.txt +5 -5
- package/package.json +1 -1
- package/templates/doc-suite-index/DocSuiteIndex.dc.html +1 -0
- package/templates/vn-framework-agreement/.thumbnail +0 -0
- package/templates/vn-framework-agreement/VnFrameworkAgreement.dc.html +138 -0
- package/templates/vn-framework-agreement/ds-base.js +55 -0
- package/templates/vn-framework-agreement/support.js +1834 -0
- package/tokens/element-seeds.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
package/_esm/cs.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// CyberSkill Design System — ESM entry point (GENERATED from _ds_manifest.json at v1.
|
|
1
|
+
// CyberSkill Design System — ESM entry point (GENERATED from _ds_manifest.json at v1.4.0).
|
|
2
2
|
// No build step: import this module directly in a browser. It ensures React 19.2.8 via umd-react
|
|
3
3
|
// (official React 19 dropped UMD; pinned + SRI; skipped when window.React already exists), side-loads
|
|
4
4
|
// ../_ds_bundle.js once, resolves the compiler-assigned namespace BY PREFIX (never a hardcoded suffix),
|
|
@@ -32,7 +32,7 @@ if (!found()) await ensureScript("../_ds_bundle.js");
|
|
|
32
32
|
export const CS = g[found()];
|
|
33
33
|
if (!CS) throw new Error("cs.js: bundle loaded but no CyberSkillDesignSystem_* namespace found");
|
|
34
34
|
export default CS;
|
|
35
|
-
export const VERSION = "1.
|
|
35
|
+
export const VERSION = "1.4.0";
|
|
36
36
|
export const AIDisclosureBadge = CS.AIDisclosureBadge;
|
|
37
37
|
export const Accordion = CS.Accordion;
|
|
38
38
|
export const Alert = CS.Alert;
|
package/docs/benchmark-rubric.md
CHANGED
|
@@ -23,7 +23,7 @@ Self-audit checklist for evolving CyberSkill Design System — external standard
|
|
|
23
23
|
| One element per surface; Tương sinh gradients only | products registry · conventions |
|
|
24
24
|
| Product→element registry locked; UI kits Thổ-faithful | [`docs/products.md`](products.md) |
|
|
25
25
|
| Expansion Rule completeness + `_audit/run.html` green + docs EN·VI parity | `docs/doctrine.md` · docs-consistency · docs-lang-parity · docs-storybook-coverage |
|
|
26
|
-
| VERSION tracks file (auto-bump on main
|
|
26
|
+
| VERSION tracks file (auto-bump on main) | version-stamp · docs-consistency |
|
|
27
27
|
| Element packs from seeds only (30 sets) | `element-geometry` · `tokens:elements` |
|
|
28
28
|
|
|
29
29
|
## Style expansion checklist (`data-cs-style`)
|
package/docs/consuming.md
CHANGED
|
@@ -19,7 +19,7 @@ You are installing, linking, or upgrading the system in another product. Maintai
|
|
|
19
19
|
|
|
20
20
|
**Stitch DC rule:** Stitch (and any non-DC tool) must **not** consume `*.dc.html` as source of truth. Use static export patterns, `templates/kitchen-sink.html`, `examples/static-hello/`, and `.cs-*` classes from `styles.css`.
|
|
21
21
|
|
|
22
|
-
**Release signal:**
|
|
22
|
+
**Release signal:** `VERSION` (auto-bump on `main`; no CHANGELOG). Treat the **git tip SHA** as technical truth; read curated product highlights in `docs/release-notes.md`.
|
|
23
23
|
|
|
24
24
|
## Quick path for AI agents (DC-capable authoring, or driving one)
|
|
25
25
|
|
|
@@ -42,7 +42,7 @@ You are installing, linking, or upgrading the system in another product. Maintai
|
|
|
42
42
|
|
|
43
43
|
## Adopt via npm (optional)
|
|
44
44
|
|
|
45
|
-
The package is publishable (`private: false`; version equals root `VERSION`). License remains **UNLICENSED** — installing from the registry does **not** grant redistribution rights by itself. **
|
|
45
|
+
The package is publishable (`private: false`; version equals root `VERSION`). License remains **UNLICENSED** — installing from the registry does **not** grant redistribution rights by itself. **Package version equals root `VERSION`** (auto-bump on `main` creates tag `vX.Y.Z`, which fires `npm-publish.yml`). CI publishes via **npm Trusted Publishing (OIDC)** (no long-lived publish token; package Publishing access **disallows tokens**). Approved use is recorded in **`docs/consumer-grant.md`** (CyberSkill portfolio products from `docs/products.md`). See `docs/decisions.md` and `docs/ci-cd.md`.
|
|
46
46
|
|
|
47
47
|
**Consumer grant (owner policy — not a secret).** Written and in force at `docs/consumer-grant.md` (+ `docs/vi/consumer-grant.md`). External teams need a dated stanza appended there; redistribution outside granted products needs a further written grant.
|
|
48
48
|
|
package/docs/contrast-report.md
CHANGED
package/docs/conventions.md
CHANGED
|
@@ -4,7 +4,7 @@ For humans and agents *extending this system*. (Consumers: read `SKILL.md`.) Exp
|
|
|
4
4
|
|
|
5
5
|
## The expansion rule
|
|
6
6
|
|
|
7
|
-
**When anything grows, everything updates in the same change.** A new element/variant, icon, component, token role, language, or template pattern must propagate to: tokens/source → specimen cards (guidelines + the component group card) **and related guideline pages** → component contract trio (`.jsx` + `.d.ts` + `.prompt.md`) → **all** templates (tweak enums and maps) → Storybook toolbar / Atomic View → docs (README counts, SKILL, **and every related document the change touches** — kit READMEs, registry, contrast report regenerated after token changes). **`VERSION` auto-bumps on push to `main`** (Conventional Commits); owner may still force a bump. **Do not maintain a changelog** —
|
|
7
|
+
**When anything grows, everything updates in the same change.** A new element/variant, icon, component, token role, language, or template pattern must propagate to: tokens/source → specimen cards (guidelines + the component group card) **and related guideline pages** → component contract trio (`.jsx` + `.d.ts` + `.prompt.md`) → **all** templates (tweak enums and maps) → Storybook toolbar / Atomic View → docs (README counts, SKILL, **and every related document the change touches** — kit READMEs, registry, contrast report regenerated after token changes). **`VERSION` auto-bumps on push to `main`** (Conventional Commits); owner may still force a bump. **Do not maintain a changelog** — `VERSION` (auto-bump on `main`). Continuity is git history plus curated **Release Notes** (`docs/release-notes.md` / Storybook). Gate every expansion with the compiler check **and a grep for the old enum/list** — nothing ships half-propagated. Documented scope boundaries (doctrine, not gaps): UI-kit pages stay pixel-faithful Thổ recreations (axes demoed in Storybook toolbar and Atomic View); every template is bilingual EN·VN and English-default (client/media collateral stays English-primary), and language variants render **fully separated** — see the decision log.
|
|
8
8
|
|
|
9
9
|
## The four axes
|
|
10
10
|
|
|
@@ -32,13 +32,13 @@ Style’s sole pack today is **liquid-glass**. Immutable under all axes: Umber/O
|
|
|
32
32
|
|
|
33
33
|
**New component** — `Name.jsx` + `Name.d.ts` + `Name.prompt.md` in `components/<group>/`; add to the group's card html (resolve the bundle namespace **by prefix** — `const CS = window[Object.keys(window).find(k=>/^CyberSkillDesignSystem_[0-9a-f]{6}$/.test(k))]` — never a hardcoded `…_<projectId>` suffix); add to readme's group line. Consume tokens only; no hex literals except inside `tokens/`.
|
|
34
34
|
|
|
35
|
-
**Responsive** — reflow is global (`base/responsive.css`, loaded last): media never overflows, print docs relax padding, `.cs-sheet` tables scroll, `.cs-sidebar` collapses, inline fixed-column grids collapse (3+→2 tablet, →1 phone), unbreakable long tokens (write-on `______` lines, long URLs/IDs) get `overflow-wrap: anywhere` on doc surfaces so they can't prop a phone column open, the app-shell shell grid collapses to one column with `main{min-width:0}`+`.cs-table-wrap` scroll, and fixed-geometry export canvases (`class="cs-canvas-desk"`: decks, social) **always** `overflow-x:auto` so a slide wider than the window scrolls inside the desk rather than pushing the page wide. **Width stops must match the token scale** in `tokens/spacing.css` (`xs` · `phone` 360 · `sm` 640 · `md` 768 · `lg` 1024 · `xl` 1280 · `2xl` 1536) — `docs-consistency` fails off-scale `@media`/`@container` widths in `base/` (FIND-007). Verified whole-set at 390 by `_audit/responsive-overflow.html` (all
|
|
35
|
+
**Responsive** — reflow is global (`base/responsive.css`, loaded last): media never overflows, print docs relax padding, `.cs-sheet` tables scroll, `.cs-sidebar` collapses, inline fixed-column grids collapse (3+→2 tablet, →1 phone), unbreakable long tokens (write-on `______` lines, long URLs/IDs) get `overflow-wrap: anywhere` on doc surfaces so they can't prop a phone column open, the app-shell shell grid collapses to one column with `main{min-width:0}`+`.cs-table-wrap` scroll, and fixed-geometry export canvases (`class="cs-canvas-desk"`: decks, social) **always** `overflow-x:auto` so a slide wider than the window scrolls inside the desk rather than pushing the page wide. **Width stops must match the token scale** in `tokens/spacing.css` (`xs` · `phone` 360 · `sm` 640 · `md` 768 · `lg` 1024 · `xl` 1280 · `2xl` 1536) — `docs-consistency` fails off-scale `@media`/`@container` widths in `base/` (FIND-007). Verified whole-set at 390 by `_audit/responsive-overflow.html` (all 85 = 0 document overflow). **Two hard gotchas:** (1) the DC runtime compiles inline `style="…"` into React objects, so the rendered attribute is *spaced* — any `[style*=…]` responsive selector must match `grid-template-columns: repeat(4, 1fr)` (colon-space, comma-space), never the authored no-space form; (2) a global CSS rule can only override a property the template sets **inline** via an **attribute** selector (`[style*="grid-template-columns: 248px 1fr"]`) — a **class** selector loses to the inline style. Prefer fixing overflow in the template source (add `min-width:0`, `flex-wrap:wrap` inline) over fighting inline from the stylesheet.
|
|
36
36
|
|
|
37
37
|
**New template** — `templates/<slug>/<Slug>.dc.html` with `<!-- @template name description -->` first; `ds-base.js` stays single-entry (`styles.css` only — the one-line rebind was validated end-to-end Jul 2026 from a deeper path; the test scaffold has since been removed) and publishes the id-independent `window.CyberSkillDS` alias on bundle load, so mount DS components via `component-from-global-scope="CyberSkillDS.…"` — **never** a hardcoded `CyberSkillDesignSystem_<projectId>` suffix (it changes on re-import; enforced by `_audit/namespace-portability.html`); inline styles only; 1–3 tweaks (never plain copy/color — in-place editing covers those); printable docs add the `@page` + `.cs-desk`/`.cs-sheet` print block and carry **no dark tweak** (print is light-only).
|
|
38
38
|
|
|
39
39
|
**New element variant** — stay inside the element's oklch envelope; set the 10 `--cs-accent-*` contract tokens (incl. `--cs-accent-on-strong` ≥4.5:1 on `-strong`) plus `--cs-color-text-accent`/`--cs-color-link` (APCA-check both); the aurora wash inherits from the element via `.cs-aurora-wash` (override the class rule only if the variant truly needs its own image); gradient partner (`grad-b`) must follow Tương sinh.
|
|
40
40
|
|
|
41
|
-
**Ship check** — run the compiler check until clean, then run `_audit/docs-consistency.html` **and** `_audit/namespace-portability.html` (both must be green).
|
|
41
|
+
**Ship check** — run the compiler check until clean, then run `_audit/docs-consistency.html` **and** `_audit/namespace-portability.html` (both must be green). VERSION **1.4.0** (auto-bumps on `main`).
|
|
42
42
|
|
|
43
43
|
## Decision log (owner-approved)
|
|
44
44
|
|
|
@@ -116,7 +116,7 @@ Vietnamese is the primary language; the type system is built for it — verified
|
|
|
116
116
|
|
|
117
117
|
## Whole-set state audits — language · theme · responsive (each its own pass, Jul 2026)
|
|
118
118
|
|
|
119
|
-
Owner doctrine: language, theme, and responsive each get their OWN whole-set pass; one clean state is not evidence for another. All three are now race-free, manifest-driven, **all-
|
|
119
|
+
Owner doctrine: language, theme, and responsive each get their OWN whole-set pass; one clean state is not evidence for another. All three are now race-free, manifest-driven, **all-85** pass/fail gates built on the same pattern — a **fresh single-navigation iframe per template** (reusing one iframe across `src` swaps races the `@import`ed CSS and yields false results), state forced via `__dcSetProps`, settle, then measure:
|
|
120
120
|
- **Language** — `_audit/language-overflow.html` — forces `Tiếng Việt`; 0 VN overflow/clip @390; also asserts VN actually applied on every template.
|
|
121
121
|
|
|
122
122
|
- **Theme** — `_audit/theme-overflow.html` — forces dark; hard gate = dark-applies + 0 dark overflow @390 + 0 open solid-bg leaf-text contrast fails outside `REVIEWED_OK`.
|
package/docs/decisions.md
CHANGED
|
@@ -25,9 +25,10 @@ Stay on the current Figma plan. Variables REST API is Enterprise-only — write
|
|
|
25
25
|
**Owner choice: Storybook is the single live hub** (Jul 2026)
|
|
26
26
|
|
|
27
27
|
- Operators use Storybook at `/` for Theme × Element × Language × Style and component control matrices.
|
|
28
|
+
- Public IA follows the atomic browse path: Foundations → Components → **Templates** → **Pages** (Atoms/Molecules/Organisms remain in CSF + Atomic View; Templates/Pages are first-class sidebar groups, including the full VN A4 / HR Suite).
|
|
28
29
|
- No separate Live View page exists in the tree.
|
|
29
30
|
- Legacy `/dashboard`, `/dashboard/`, `/dashboard.html`, `/dashboard/:path*`, `/playground`, `/playground/`, `/playground/:path*` redirect to `/`.
|
|
30
|
-
- Portable Atomic View and other static HTML remain for zero-build gates and consumers;
|
|
31
|
+
- Portable Atomic View and other static HTML remain for zero-build gates and consumers; Atomic View is also linked from **Templates → Gallery**.
|
|
31
32
|
- Surface map: `docs/live-hub.md`.
|
|
32
33
|
|
|
33
34
|
## 5. Dual token JSON sources
|
|
@@ -50,7 +51,7 @@ Stay on the current Figma plan. Variables REST API is Enterprise-only — write
|
|
|
50
51
|
|
|
51
52
|
## 7. npm publish — live via Trusted Publishing (OIDC)
|
|
52
53
|
|
|
53
|
-
**Status: LAUNCHED `@cyberskill/design@1.1.0`;
|
|
54
|
+
**Status: LAUNCHED `@cyberskill/design@1.1.0`; thereafter `VERSION` auto-bumps on main (since Aug 2026); CI publish uses npm Trusted Publishing; tokens disallowed** (Jul 2026; LAUNCH 2026-07-27)
|
|
54
55
|
|
|
55
56
|
- `package.json` is `private: false`; package name **`@cyberskill/design`** (`publishConfig.access: public`); `repository.url` matches this GitHub repo for provenance.
|
|
56
57
|
- Workflow `.github/workflows/npm-publish.yml`: `id-token: write` + GitHub-hosted runner; **no** `NPM_TOKEN` / `NODE_AUTH_TOKEN` on the publish step (OIDC). npm Trusted Publisher must list workflow filename **`npm-publish.yml`** for `cyberskill-official/design` (FIND-088). Soft-skip only for expected no-ops (`already_published` / EPUBLISHCONFLICT, and true non-GHA `missing_secrets`). On GHA tag / `workflow_dispatch`, **ENEEDAUTH** / **404** / **402** / **403** / **EOTP** fail the job; a successful publish is gated by post-publish `npm view @cyberskill/design@VERSION` **and** `dist-tags.latest === VERSION` (FIND-020 / FIND-094).
|
|
@@ -77,7 +78,7 @@ Recorded Jul 2026 — unlock defaults (updated as operator steps land):
|
|
|
77
78
|
|
|
78
79
|
- **Figma Variables** — stay Tokens Studio / non-Enterprise (decision §3). Soft-skip on Variables REST remains honest.
|
|
79
80
|
- **Code Connect** — **skipped while on Figma free**; revisit only after Org + published library + real `nodeId`s (decision §6). Soft-skip ≠ publish.
|
|
80
|
-
- **npm** — **LAUNCH `@cyberskill/design@1.1.0`**;
|
|
81
|
+
- **npm** — **LAUNCH `@cyberskill/design@1.1.0`**; thereafter `VERSION` auto-bumps on `main` → tag `v*` → Trusted Publishing; CI uses **Trusted Publishing (OIDC)** via `npm-publish.yml`; npmjs **disallow tokens**; consumer grant in force at `docs/consumer-grant.md` (decision §7). Default package entry is bundler-native `_esm/react.mjs` (React peer); browser path is `@cyberskill/design/legacy` → `_esm/cs.mjs` (decision §10).
|
|
81
82
|
|
|
82
83
|
## 10. Bundler-native React export (Next / SSR)
|
|
83
84
|
|
package/docs/doctrine.md
CHANGED
|
@@ -20,7 +20,7 @@ When **anything** in this system grows, update **every deliverable in the same c
|
|
|
20
20
|
2. Specimen cards (guidelines plus the component group card) **and any related guideline pages**.
|
|
21
21
|
3. **All** templates (tweak enums, EL/EX maps, swept accents).
|
|
22
22
|
4. UI kits — Thổ-faithful kit pages; axis demos via Storybook toolbar and Atomic View (Identity Lab is retired).
|
|
23
|
-
5. Docs: README (counts follow the compiler), `SKILL.md`, this file, `docs/conventions.md`, **and every related document the change touches** (kit READMEs, `docs/products.md`, `docs/contrast-report.md` regeneration after token changes). Publish the same pages through Storybook Docs (see `docs/storybook.md`). **`VERSION` auto-bumps on push to `main`** from Conventional Commits (`.github/workflows/version.yml` → tag `v*` → `npm-publish.yml`); the owner may still force a bump via `Release-As:` / `workflow_dispatch`. **Do not maintain a changelog file** —
|
|
23
|
+
5. Docs: README (counts follow the compiler), `SKILL.md`, this file, `docs/conventions.md`, **and every related document the change touches** (kit READMEs, `docs/products.md`, `docs/contrast-report.md` regeneration after token changes). Publish the same pages through Storybook Docs (see `docs/storybook.md`). **`VERSION` auto-bumps on push to `main`** from Conventional Commits (`.github/workflows/version.yml` → tag `v*` → `npm-publish.yml`); the owner may still force a bump via `Release-As:` / `workflow_dispatch`. **Do not maintain a changelog file** — `VERSION` (auto-bump on `main`). Continuity is git history plus curated Release Notes.
|
|
24
24
|
6. Browsable and health surfaces: a new or changed component gets an Atomic View story in `guidelines/atomic-view.html` (plus a live playground if it has tweakable props — `_audit/story-coverage.html` enforces the story) and behavior coverage in `_audit/component-behavior-test.html` if interactive; any new axis, tool, or tab is wired into `_audit/index.html` and Storybook **Status** (full-bleed `_audit/run.html` — `dashboard.html` is redirect-only); the matching deterministic gate is added or updated (`contrast-guard` for new colour rules, `token-contract` plus the contrast matrix for tokens, `story-coverage` for components, `docs-storybook-coverage` for published docs).
|
|
25
25
|
|
|
26
26
|
**Gate:** `check_design_system` clean (compiler sessions only) **plus** `_audit/run.html` (all fast gates) green **plus** `docs-consistency` green **plus** a grep for the old enum or list to prove nothing was left behind. On a portable clone, the equivalent is the fast board plus `npm run test:unit`.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# HR Suite sources (DOCX ↔ templates)
|
|
2
|
+
|
|
3
|
+
Published on Storybook **Docs** at `design.cyberskill.world`.
|
|
4
|
+
|
|
5
|
+
## Decision
|
|
6
|
+
|
|
7
|
+
**Canonical live instruments are Design Components** under `templates/vn-*/*.dc.html` (plus `doc-suite-index`, `doc-style-guide`, `doc-templates`). Google Drive / Word (`.docx` / `.dotx`) are **source provenance**, not the Storybook product surface.
|
|
8
|
+
|
|
9
|
+
Do **not** commit large binary Word files into this design-system package. Optional local unpack for diffing:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# scraps/ is gitignored
|
|
13
|
+
mkdir -p scraps/hr-suite-docx
|
|
14
|
+
unzip -O UTF-8 /path/to/Templates.zip -d scraps/hr-suite-docx
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
If you keep a long-lived local copy outside git, use any path you like — the mapping table below is the contract.
|
|
18
|
+
|
|
19
|
+
## Inventory (Templates.zip, Jul 2026)
|
|
20
|
+
|
|
21
|
+
| Count | Kind |
|
|
22
|
+
|---|---|
|
|
23
|
+
| 40 | `.docx` instruments / guides |
|
|
24
|
+
| 1 | `.dotx` presentation shell |
|
|
25
|
+
| **41** | **total in zip** |
|
|
26
|
+
|
|
27
|
+
All **37** Employment Suite `templates/vn-*` folders from the zip map 1:1 to a zip `.docx`. Four zip “0.” reference files map to `doc-*` templates. An **additional** commercial framework (not in that zip) lives at `templates/vn-framework-agreement` — see below.
|
|
28
|
+
|
|
29
|
+
## Mapping
|
|
30
|
+
|
|
31
|
+
| Zip file (English title) | Repo path |
|
|
32
|
+
|---|---|
|
|
33
|
+
| CyberSkill Document Style Guide | `templates/doc-style-guide` |
|
|
34
|
+
| CyberSkill Document Template (`.dotx`) | `templates/doc-templates` |
|
|
35
|
+
| Employment Suite Usage Guide | `templates/doc-suite-index` (usage section) |
|
|
36
|
+
| HR Document Suite Index | `templates/doc-suite-index` |
|
|
37
|
+
| Labor Contract | `templates/vn-labor-contract` |
|
|
38
|
+
| Exit-Handover Agreement | `templates/vn-exit-handover` |
|
|
39
|
+
| NDNCA & IP | `templates/vn-ndnca-ip` |
|
|
40
|
+
| Phantom Stock Agreement | `templates/vn-phantom-stock` |
|
|
41
|
+
| Total Rewards & Career Path Appendix | `templates/vn-total-rewards-appendix` |
|
|
42
|
+
| Labor Contract Amendment Appendix | `templates/vn-contract-amendment` |
|
|
43
|
+
| Appointment & Transfer Decision | `templates/vn-appointment-transfer` |
|
|
44
|
+
| Probation Contract | `templates/vn-probation-contract` |
|
|
45
|
+
| Internal Labor Regulations | `templates/vn-internal-labor-regulations` |
|
|
46
|
+
| Decision on Termination | `templates/vn-termination-decision` |
|
|
47
|
+
| Disciplinary Schedule (Annex to ILR) | `templates/vn-disciplinary-schedule` |
|
|
48
|
+
| Training & Service Commitment Agreement | `templates/vn-training-commitment` |
|
|
49
|
+
| Internship Agreement | `templates/vn-internship-agreement` |
|
|
50
|
+
| Employment Offer Letter | `templates/vn-offer-letter` |
|
|
51
|
+
| Personal Data Consent (PDPL) | `templates/vn-pdpl-consent` |
|
|
52
|
+
| Foreign Employee Work Permit Pack | `templates/vn-foreign-employee-pack` |
|
|
53
|
+
| Independent Contractor Agreement | `templates/vn-contractor-agreement` |
|
|
54
|
+
| Employee Request Form | `templates/vn-employee-request` |
|
|
55
|
+
| Job Description | `templates/vn-job-description` |
|
|
56
|
+
| Acknowledgement of Receipt | `templates/vn-receipt-acknowledgement` |
|
|
57
|
+
| Labour Management Book | `templates/vn-labour-management-book` |
|
|
58
|
+
| Performance Review Form | `templates/vn-performance-review-form` |
|
|
59
|
+
| Onboarding Checklist | `templates/vn-onboarding-checklist` |
|
|
60
|
+
| Mutual NDA | `templates/vn-mutual-nda` |
|
|
61
|
+
| Statement of Work | `templates/vn-sow-appendix` |
|
|
62
|
+
| Disciplinary Case File | `templates/vn-disciplinary-case-file` |
|
|
63
|
+
| Certificate of Employment | `templates/vn-certificate-of-employment` |
|
|
64
|
+
| Resignation Letter | `templates/vn-resignation-letter` |
|
|
65
|
+
| Travel & Expense Policy | `templates/vn-travel-expense-policy` |
|
|
66
|
+
| Grassroots Democracy Regulation | `templates/vn-grassroots-democracy` |
|
|
67
|
+
| Salary Scale and Payroll Table | `templates/vn-salary-scale` |
|
|
68
|
+
| Remote & Hybrid Work Policy | `templates/vn-remote-work-policy` |
|
|
69
|
+
| Code of Conduct | `templates/vn-code-of-conduct` |
|
|
70
|
+
| Compensation & Reward Regulation | `templates/vn-compensation-regulation` |
|
|
71
|
+
| Personal Data Protection Policy | `templates/vn-data-protection-policy` |
|
|
72
|
+
| Information Security & Acceptable Use Policy | `templates/vn-infosec-policy` |
|
|
73
|
+
| Performance Evaluation Regulation | `templates/vn-performance-evaluation-regulation` |
|
|
74
|
+
|
|
75
|
+
### Outside Templates.zip (added Aug 2026)
|
|
76
|
+
|
|
77
|
+
| Source | Repo path | Taxonomy |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| `Hợp đồng Nguyên Tắc - CyberSkill - Ban QLDA Bình Quới.docx` (Downloads) | `templates/vn-framework-agreement` | **Commercial** software-services framework (not employment lifecycle). Uses the same VN A4 bilingual skin (`vn-*`) and appears under **Templates → HR** via the `HR Suite ·` catalog name; suite index lists it under Legal/client-facing. Adapted DOCX (gitignored): `scraps/hr-suite-docx/Templates/9. Hợp đồng Nguyên Tắc - Framework Agreement (Software Services).docx` |
|
|
80
|
+
|
|
81
|
+
## Browse on Storybook
|
|
82
|
+
|
|
83
|
+
- **Templates → Gallery → Atomic gallery** — full Atomic View Templates tier
|
|
84
|
+
- **Templates → HR** — every HR Suite / HR ops instrument iframe
|
|
85
|
+
- **Templates → Documents** — suite index / style guide / document template
|
|
86
|
+
|
|
87
|
+
## Sync status (Aug 2026)
|
|
88
|
+
|
|
89
|
+
Zip dated **2026-07-11**. Repo already holds converted `.dc.html` for every mapped instrument. This change **documents** the Drive/DOCX ↔ `vn-*` map and promotes Templates in Storybook; it does **not** re-import DOCX body text into DC templates. Re-sync only when counsel or ops confirm Word content drifted from the DC tree — then update the matching `templates/vn-*/` folder and regenerate Storybook CSF if names change (`node scripts/generate-template-stories.mjs`).
|
|
90
|
+
|
|
91
|
+
Counsel review remains required before real-world use (client-supplied instruments; see README / SKILL).
|
package/docs/live-hub.md
CHANGED
|
@@ -8,34 +8,39 @@ Published on Storybook **Docs** at `design.cyberskill.world`.
|
|
|
8
8
|
|
|
9
9
|
## Sidebar IA
|
|
10
10
|
|
|
11
|
+
Atomic browse order on the product site: **Foundations → Components → Templates → Pages** (Atoms / Molecules / Organisms live inside Atomic View and CSF Components; Templates and Pages are first-class sidebar groups).
|
|
12
|
+
|
|
11
13
|
| Group | Role |
|
|
12
14
|
|---|---|
|
|
13
|
-
| **Docs** | Published operator docs: **Start** (Introduction, README, SKILL, Contributing, llms, Library) · **Guides** (consuming, grant, deploy, schema, conventions, styles, products, Figma, contrast, storybook, live-hub, release runbook, benchmark, …) · **Maintainers** (doctrine, decisions, CI/CD, quality gates, sync). Curated MDX plus one sidebar entry per tracked page. EN·VI via the Documentation Library (`/docs/viewer.html`) |
|
|
15
|
+
| **Docs** | Published operator docs: **Start** (Introduction, README, SKILL, Contributing, llms, Library) · **Guides** (consuming, grant, deploy, schema, conventions, styles, products, Figma, contrast, storybook, live-hub, HR Suite sources, release runbook, benchmark, …) · **Maintainers** (doctrine, decisions, CI/CD, quality gates, sync). Curated MDX plus one sidebar entry per tracked page. EN·VI via the Documentation Library (`/docs/viewer.html`) |
|
|
14
16
|
| **Foundations** | Colors, typography, spacing, elevation, motion, elements |
|
|
15
17
|
| **Components** | Full CSF library |
|
|
18
|
+
| **Templates** | Public starting points: **Gallery** (Atomic View → Templates tier, kitchen-sink, playground) plus every `_ds_manifest.json` template grouped like Atomic View (Product · Board · … · **HR** Suite · Documents). Includes all 38 `vn-*` A4 instruments (Employment Suite + commercial framework) |
|
|
19
|
+
| **Pages** | UI kits — Status Hub, Marketing site, Slide deck |
|
|
16
20
|
| **Release Notes** | Curated product prose (**no CHANGELOG.md**) |
|
|
17
21
|
| **Status** | Full-bleed embed of `_audit/run.html` (auto-run on first load; **Re-run** on demand) |
|
|
18
22
|
| **A11y / I18n** | Accessibility + bilingual specimens |
|
|
19
|
-
| **Maintainer** | Portable HTML iframes for gates (
|
|
23
|
+
| **Maintainer** | Portable HTML iframes for gates and demos (Motion, kit mirrors, template demos, RTL, Atomic View for gates) |
|
|
20
24
|
|
|
21
25
|
## Surfaces
|
|
22
26
|
|
|
23
27
|
| Surface | Role |
|
|
24
28
|
|---|---|
|
|
25
|
-
| **Storybook** (`/`) | Host product surface: Theme × Element × Language × Style toolbar, Docs/Foundations/Components
|
|
26
|
-
| **Atomic View** (`guidelines/atomic-view.html`) | Portable zero-build
|
|
27
|
-
| **Other guidelines / templates** | Portable specimens; opened from Storybook
|
|
29
|
+
| **Storybook** (`/`) | Host product surface: Theme × Element × Language × Style toolbar, Docs/Foundations/Components/**Templates**/**Pages**/Release Notes/Status, and Maintainer/* iframes into portable HTML |
|
|
30
|
+
| **Atomic View** (`guidelines/atomic-view.html`) | Portable zero-build atomic browser (Atoms → Molecules → Organisms → Templates → Pages). Public via **Templates → Gallery → Atomic gallery**; also under Maintainer for gates / clone-and-open |
|
|
31
|
+
| **Other guidelines / templates** | Portable specimens; opened from Storybook Templates/*, Pages/*, or Maintainer/* |
|
|
28
32
|
| **Legacy `/dashboard`, `/dashboard/`, `/dashboard.html`, `/dashboard/:path*`, `/playground`, `/playground/`, `/playground/:path*`** | Redirect to `/` (stubs + Vercel redirects) |
|
|
29
33
|
|
|
30
|
-
## Surface map (Maintainer
|
|
34
|
+
## Surface map (public + Maintainer)
|
|
31
35
|
|
|
32
36
|
| Storybook entry | Portable HTML |
|
|
33
37
|
|---|---|
|
|
34
38
|
| Components/* CSF | React sources under `components/` |
|
|
39
|
+
| Templates/Gallery → Atomic gallery | `guidelines/atomic-view.html#tier-templates` |
|
|
40
|
+
| Templates/{Category}/* | `templates/**/*.dc.html` via `_ds_manifest.json` (regen: `node scripts/generate-template-stories.mjs`) |
|
|
41
|
+
| Pages → Status Hub / Marketing site / Slide deck | `ui_kits/status-hub|website|deck/index.html` |
|
|
35
42
|
| Maintainer/Surfaces → Motion | `guidelines/motion.html` |
|
|
36
|
-
| Maintainer/Surfaces → Status Hub
|
|
37
|
-
| Maintainer/Surfaces → Website | `ui_kits/website/index.html` |
|
|
38
|
-
| Maintainer/Surfaces → Deck | `ui_kits/deck/index.html` |
|
|
43
|
+
| Maintainer/Surfaces → Status Hub / Website / Deck | same UI kits (maintainer mirrors) |
|
|
39
44
|
| Maintainer/Surfaces → Template Playground | `templates/playground.html` |
|
|
40
45
|
| Maintainer/Surfaces → Kitchen Sink | `templates/kitchen-sink.html` |
|
|
41
46
|
| Maintainer/Surfaces → Image Slots | `templates/image-slots-demo.html` |
|
|
@@ -60,3 +65,5 @@ Consumers still link `styles.css` / `_ds_bundle.js` / ESM / templates. **Do not*
|
|
|
60
65
|
npm run storybook # product Storybook at http://localhost:6006
|
|
61
66
|
npm run build:site # packages Storybook at .vercel-static/ (site root `/`)
|
|
62
67
|
```
|
|
68
|
+
|
|
69
|
+
Open **Templates → Gallery → Atomic gallery** or **Templates → HR → …** for the Employment Suite.
|
package/docs/quality-gates.md
CHANGED
|
@@ -13,13 +13,13 @@ Benchmark principles (WCAG · APCA · OKLCH · DTCG · CDS doctrine + style expa
|
|
|
13
13
|
| Contrast guard | `_audit/contrast-guard.html` | No base rule paints umber on a themeable surface without a dark override; every semantic text×surface pair scores in light and dark | 0 unshielded rules and 0 failing pairs (`__contrastguard`) | Hard | Fast board CI |
|
|
14
14
|
| Axes guard | `_audit/axis-guard.html` | No live source reintroduces the retired Expression/Density product surface | 0 hits across manifest-indexed sources (`__axisguard`) | Hard | Fast board CI |
|
|
15
15
|
| Manifest CSS paths | `_audit/manifest-css-guard.html` | Every `_ds_manifest.json` `globalCssPaths` entry exists as raw CSS; every `styles.css` `@import` is listed | 0 missing / 0 unlisted (`__cssguard`) | Hard | Fast board CI |
|
|
16
|
-
| Docs consistency | `_audit/docs-consistency.html` | Every count claim in README/SKILL/llms.txt matches the compiler manifest; audit prose card-count claims (`_audit/index` / README / namespace-portability) match `manifest.cards`; `VERSION` is semver and `package.json` matches it (
|
|
16
|
+
| Docs consistency | `_audit/docs-consistency.html` | Every count claim in README/SKILL/llms.txt matches the compiler manifest; audit prose card-count claims (`_audit/index` / README / namespace-portability) match `manifest.cards`; `VERSION` is semver and `package.json` matches it (auto-bumps on main); no changelog-file reference; stale-phrase blacklist (the retired suite/pack counts the Jul 2026 audit removed) clean across README/SKILL/llms + `docs/*.md` (historical notes under `_audit/archive/` are not scanned); `DESIGN.md` exists with front-matter version = `VERSION`; agent routing honesty — SKILL/llms cite `_esm/cs.mjs` + bundle prefix; Stitch path forbids `*.dc.html` as SoT; package name `@cyberskill/design`; doctrine↔source parity — 10 accent roles incl. `on-strong`, full depth scale, default lang `vi` vs `i18n.js`, breakpoint CSS↔JSON, `base/` depth fallbacks vs `elevation.css` | 0 mismatched claims, 0 blacklist hits, VERSION sync + stamp + routing + doctrine parity intact (`__docs`) | Hard | Fast board CI + merge blocker |
|
|
17
17
|
| Asset-weight budget | `_audit/asset-weight-budget.html` | Elemental aurora WebPs (`assets/aurora-{tho,hoa,thuy,moc,kim}.webp`) stay under regression ceilings (≤300 KB each, ≤1.2 MB set); legacy aurora PNGs fail; wash CSS must not point at the Thổ JPEG | All five present under ceilings (`__assetweight`) | Hard | Fast board CI (+ Node twin in `test-docs-consistency.mjs`) |
|
|
18
18
|
| Docs language parity | `_audit/docs-lang-parity.html` | Every operator-facing EN `docs/*.md` has a `docs/vi/` counterpart; VI is not an empty/TODO stub (≥40% EN length); stale-phrase blacklist clean on both EN and VI (historical notes under `_audit/archive/` are not tracked) | 0 missing pairs, 0 stubs, 0 blacklist hits (`__docslangparity`) | Hard | Fast board CI |
|
|
19
19
|
| Docs Storybook coverage | `_audit/docs-storybook-coverage.html` | Live HTML: published catalog + `/docs/**` + viewer + entrance files; Storybook `index.json` titles when present (never unpublished `.storybook/` / `stories/`). Node twin: CSF/MDX source + `staticDirs` | 0 missing published pages / viewer entries (`__docssbcoverage`) | Hard | Fast board CI + unit twin |
|
|
20
20
|
| Docs link check | `_audit/docs-link-check.html` | Live HTML: published markdown + viewer links resolve; no retired paths. Node twin also scans unpublished MDX `href`/`src` | 0 broken in-repo links (`__docslinkcheck`) | Hard | Fast board CI + unit twin |
|
|
21
21
|
| DESIGN.md parity | `_audit/design-md-parity.html` | The root `DESIGN.md` (Stitch open-spec surface) byte-equals an in-browser regeneration from `tokens.dtcg.json` + `_ds_manifest.json` + `VERSION` via the shared `scripts/design-md-lib.mjs`; every token row re-checked individually (the count is printed with the verdict) | Byte-identical + 0 drifted rows (`__designmd`) | Hard | Fast board CI |
|
|
22
|
-
| Version stamp | `_audit/version-stamp.html` | `package.json`, `tokens.json`/`tokens.js` metas, DTCG `$extensions`, `provenance.json` release + dtcgStamp, `DESIGN.md` front matter, and `_esm/cs.mjs` `export const VERSION` all equal `VERSION` (
|
|
22
|
+
| Version stamp | `_audit/version-stamp.html` | `package.json`, `tokens.json`/`tokens.js` metas, DTCG `$extensions`, `provenance.json` release + dtcgStamp, `DESIGN.md` front matter, and `_esm/cs.mjs` `export const VERSION` all equal `VERSION` (auto-bumps on main) | All 9 stamps equal (`__versionstamp`) | Hard | Fast board CI |
|
|
23
23
|
| Namespace portability | `_audit/namespace-portability.html` | No manifest-indexed source hardcodes the compiler's project-id bundle suffix | 0 hardcoded suffixes (`__nsguard`) | Hard | Fast board CI |
|
|
24
24
|
| Artifact head | `_audit/artifact-head.html` | Every template artifact exposes a non-empty `<title>` and `<html lang>` (via `ds-base` / compiler head standard) | 0 missing title/lang (`__artifacthead`) | Hard | Fast board CI |
|
|
25
25
|
| Overflow @320 | `_audit/responsive-overflow-320.html` | WCAG 1.4.10 reflow width: templates + kits at 320px without horizontal document overflow | 0 overflowing surfaces (`__overflow320`) | Hard | Fast board CI |
|
|
@@ -34,16 +34,16 @@ Benchmark principles (WCAG · APCA · OKLCH · DTCG · CDS doctrine + style expa
|
|
|
34
34
|
| Story coverage | `_audit/story-coverage.html` | Every primary bundle export has an Atomic View story; tweakable primaries in `PLAYGROUND_REQUIRED` must also ship `controls` + `renderC` playgrounds | 0 missing stories + 0 missing playgrounds (`__storycov`) | Hard | Fast board CI |
|
|
35
35
|
| Consumer smoke test | `_audit/consumer-smoke-test.html` | The external consumer path works: `styles.css` + `_ds_bundle.js` mount real components and brand tokens reach a rendered Button | Mount + token assertions all pass (`__smoke`) | Hard | Fast board CI |
|
|
36
36
|
| Bundle freshness | `_audit/bundle-freshness.html` | Every source recorded in the `_ds_bundle.js` header re-hashes to the header's sha-256 (browser replication of `ci/check-bundle-freshness.mjs`; the Node script stays the CI authority and additionally discovers new files); manifest component sources ⊆ header | 0 drifted / missing sources (`__bundlefresh`) | Hard | Fast board CI (+ Node authority in `node-prechecks`) |
|
|
37
|
-
| ESM smoke test | `_audit/esm-smoke-test.html` | `_esm/cs.mjs` imports without a build, re-exports every manifest component, `VERSION` equals
|
|
37
|
+
| ESM smoke test | `_audit/esm-smoke-test.html` | `_esm/cs.mjs` imports without a build, re-exports every manifest component, `VERSION` equals root `VERSION`, and a mounted Button receives brand tokens | Export/manifest parity + VERSION match + token check (`__esm`) | Hard | Fast board CI |
|
|
38
38
|
| Package exports integrity | `_audit/package-exports-integrity.html` | Every `package.json` `files` entry and every `module`/`types`/`style`/`exports` target exists; every entry-point target is covered by `files` (pack-safe); dual entries — `_esm/react.mjs` (default / `./react`, React peer) + `_esm/cs.mjs` (`./legacy`) — are ESM-shaped and their re-exports ⊆ the bundle header's exposed exports | 0 missing / uncovered / unknown (`__pkgexports`) | Hard | Fast board CI |
|
|
39
39
|
| Component children | `_audit/component-children-test.html` | Void-element components (Checkbox, Radio, Switch, SearchField, NumberField, Slider, Divider, TextField) mount with stray children without throwing React #137 | 0 throws (`__result.anyThrew === false`) | Hard | Fast board CI |
|
|
40
40
|
| Component behavior | `_audit/component-behavior-test.html` | 79 real interaction assertions — every interactive public primary with a user-driven contract (overlays, forms, AI gates, shell chrome, media/copy) plus toast-over-dialog depth; display-only primaries excluded by design | 79/79 assertions pass (`__behavior`) | Hard | Fast board CI |
|
|
41
41
|
| A11y interactions | `_audit/a11y-gate.html` | Focus management (Dialog/Drawer trap + restore + Escape), roving tabindex, combobox `aria-activedescendant`, Mentions APG + Sortable move buttons (hard-fail), role/label contracts, plus open-state Esc/focus for Cascader · TreeSelect · Tour · HoverCard · ContextMenu | All keyboard/ARIA assertions pass (`__a11y`) | Hard | Fast board CI |
|
|
42
42
|
| A11y CSSOM | `_audit/a11y-harness.html` | Every interactive `.cs-*` control meets its documented touch-target floor under coarse pointer; focus-ring, reduced-motion, and contrast rules proven in source CSS | 0 floor violations, all source proofs found (`__a11ycss`) | Hard | Fast board CI |
|
|
43
43
|
| Template schema v2 | `_audit/template-schema-test.html` | Every `content-schema.json` sidecar validates against the JSON Schema, every declared slot id resolves to a real `{{ hole }}` in its template, and every template exposing an authorable **content** hole ships a sidecar (axis/control-flow and boolean tweak holes excluded — see `docs/template-schema-v2.md`) | 0 invalid sidecars, 0 dangling slot ids, 0 hole-driven templates without a sidecar (`__schemav2`) | Hard | Fast board CI |
|
|
44
|
-
| Support runtime identity | `_audit/support-runtime-identity.html` | All `templates/*/support.js` copies (one per template,
|
|
44
|
+
| Support runtime identity | `_audit/support-runtime-identity.html` | All `templates/*/support.js` copies (one per template, 85) are byte-identical: sha-256 via SubtleCrypto, exactly one unique hash, copy count == manifest template count | 1 unique hash, count match (`__supportid`) | Hard | Fast board CI |
|
|
45
45
|
| Bilingual parity | `_audit/bilingual-parity.html` | Every component in `components/_i18n/strings.js` has en + vi tables with equal key sets and no empty values | 0 missing/extra keys, 0 empty values (`__bilingual`) | Hard | Fast board CI + merge blocker |
|
|
46
|
-
| Template language parity | `_audit/template-lang-parity.html` | Static source scan of all
|
|
46
|
+
| Template language parity | `_audit/template-lang-parity.html` | Static source scan of all 85 `.dc.html`: en/vi hole-map key sets identical and non-empty (21 map templates); `sc-if` `isEN`/`isVN` branches paired (24 branch templates); every `language`-tweak template has a bilingual mechanism; EN-leak lexicon (Unsubscribe · View in browser · Preferences · All rights reserved · Manage subscription · Sent with) never appears outside `isEN` guards / the `en` map. VN-first stacked instruments (38 `vn-*` + 3 `doc-*`) are leak-exempt by design — both languages always render | 0 key drifts, 0 unpaired branches, 0 leaks (`__langparity`) | Hard | Fast board CI |
|
|
47
47
|
| APCA dark packs | `_audit/apca-dark-preview.html` | All 15 element×variant packs hold their APCA targets in dark (bright-as-text ≥ 75, accent UI ≥ 60, ink-on-accent ≥ 75, ink-on-tint ≥ 75) | 0 current failures (`__apcaPreview.currentFail === 0`) | Hard | Fast board CI |
|
|
48
48
|
| Element geometry | `_audit/element-geometry.html` | Soft/middle/deep intensity sync across five elements; variant distinctness; light↔dark hue identity; Thổ middle pins logo ochre; packs generated from seeds | `__elementgeometry.pass` | Hard | Fast board CI |
|
|
49
49
|
| Style contract | `_audit/style-contract.html` | Style axis allowlist: sole pack `liquid-glass` (absent ≡ default); `styles.css` imports `tokens/styles.css`; `--cs-style-pack` resolves; no unknown `data-cs-style` in scanned sources | `__stylecontract.pass` | Hard | Fast board CI |
|
|
@@ -57,7 +57,7 @@ Benchmark principles (WCAG · APCA · OKLCH · DTCG · CDS doctrine + style expa
|
|
|
57
57
|
|
|
58
58
|
| Gate | File | What it asserts | Pass criterion | Type | Where it runs |
|
|
59
59
|
|---|---|---|---|---|---|
|
|
60
|
-
| Responsive overflow | `_audit/responsive-overflow.html` | Every template (
|
|
60
|
+
| Responsive overflow | `_audit/responsive-overflow.html` | Every template (85) + 3 UI kits render at 390 px without horizontal document overflow | 0 overflowing surfaces (`__overflow`) | Hard | Whole-set CI (every PR + nightly) |
|
|
61
61
|
| Language overflow | `_audit/language-overflow.html` | Same set forced to Tiếng Việt: VN applies, no overflow, no clipped text in fixed/nowrap boxes, and known EN built-in strings (PromptInput hint, FileUpload, DataGrid pin, …) do not leak | 0 over/clip/EN-leak (`__language`) | Hard | Whole-set CI (every PR + nightly) |
|
|
62
62
|
| Theme overflow | `_audit/theme-overflow.html` | Same set forced dark: dark applies, no document overflow, and no reproducible solid-bg leaf-text WCAG fails outside `REVIEWED_OK` | Dark applied + 0 overflow + 0 open contrast (`__theme`) | Hard (allowlisted near-misses only) | Whole-set CI (every PR + nightly) |
|
|
63
63
|
|
package/docs/release-notes.md
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# Release Notes
|
|
2
2
|
|
|
3
|
-
Curated product highlights for operators. This is **not** a git log and **not** a `CHANGELOG.md` — the design system does not maintain a changelog file. **
|
|
3
|
+
Curated product highlights for operators. This is **not** a git log and **not** a `CHANGELOG.md` — the design system does not maintain a changelog file. VERSION **1.4.0** (auto-bumps on push to `main` from Conventional Commits; owner may still force a bump). Technical continuity is the repo tip; product-facing continuity is this page (mirrored in Storybook **Release Notes**). Published on Storybook **Docs** at `design.cyberskill.world`.
|
|
4
|
+
|
|
5
|
+
## Release — `@cyberskill/design@1.3.10`
|
|
6
|
+
|
|
7
|
+
Docs publication follow-through: single VERSION wording on operator surfaces (no separate “pin” / LAUNCH dual lead-in). Historical Release / Patch / LAUNCH sections below stay as dated archive.
|
|
4
8
|
|
|
5
9
|
## Release — `@cyberskill/design@1.3.9`
|
|
6
10
|
|
package/docs/storybook.md
CHANGED
|
@@ -21,7 +21,9 @@ Storybook **10** is the **product site** for operators on `design.cyberskill.wor
|
|
|
21
21
|
- `FullMatrix` when ≥1 of {size enums, variant enums, state keys} exist — the size × variant × key-state product via shared helpers in `stories/lib/matrix.jsx`
|
|
22
22
|
- Toolbar globals: Theme (light · dark · **system**) × Element × Language × Style (same axes as templates / Atomic View). Element lists **all 15** Ngũ Hành packs (`tokens.elements` / template EL maps / Storybook toolbar) — not a subset. Style’s sole pack is **liquid-glass**.
|
|
23
23
|
- **Docs/** published operator documentation — nested **Start / Guides / Maintainers**, curated MDX for high-traffic pages, one sidebar story per tracked markdown page, and a Documentation Library iframe of `/docs/viewer.html` (EN·VI). Canonical prose remains `docs/*.md`; Storybook is the live reading surface. **Release Notes/** curated product prose (**no CHANGELOG.md**); **Status/** embeds `_audit/run.html` full-bleed
|
|
24
|
-
- **
|
|
24
|
+
- **Templates/** public starting points — Gallery (Atomic View Templates tier + kitchen-sink/playground) and every manifest template under Atomic View categories (including **HR** / `vn-*`). Regen CSF with `node scripts/generate-template-stories.mjs` after template renames
|
|
25
|
+
- **Pages/** public UI kits (Status Hub, Marketing site, Slide deck)
|
|
26
|
+
- **Maintainer/** stories for portable HTML surfaces (Motion, kit mirrors, template demos, AI cluster, RTL; Atomic View for gates)
|
|
25
27
|
- Same `styles.css` as production
|
|
26
28
|
- Addons: `@storybook/addon-docs` + `@storybook/addon-a11y` (essentials folded into core in SB10)
|
|
27
29
|
|
|
@@ -29,6 +31,7 @@ Storybook **10** is the **product site** for operators on `design.cyberskill.wor
|
|
|
29
31
|
|
|
30
32
|
- `.storybook/main.js` — ESM Storybook 10 config, Vite + `@cs` → `components/` alias, **`base: '/'`** for domain-root assets
|
|
31
33
|
- `.storybook/manager-head.html` — OG / canonical meta for the production `/` surface
|
|
34
|
+
- `.storybook/preview.jsx` — `storySort` order: Docs · Foundations · Components · **Templates** · **Pages** · A11y · I18n · Release Notes · Status · Maintainer
|
|
32
35
|
- Autodocs via `tags: ['autodocs']` on CSF meta (no `docs.autodocs` in main)
|
|
33
36
|
|
|
34
37
|
## What consumers still use (unchanged)
|
|
@@ -50,8 +53,9 @@ npm run storybook
|
|
|
50
53
|
npm run build:storybook # → storybook-static/ (base `/`)
|
|
51
54
|
npm run build:site # packages Storybook at .vercel-static/ root
|
|
52
55
|
npm run test:storybook-contract
|
|
56
|
+
node scripts/generate-template-stories.mjs # refresh Templates/{Category} CSF from manifest
|
|
53
57
|
```
|
|
54
58
|
|
|
55
59
|
## Map
|
|
56
60
|
|
|
57
|
-
|
|
61
|
+
Public Templates/Pages and Maintainer iframes are listed in `docs/live-hub.md`. HR Suite Word originals mapping: `docs/hr-suite-sources.md`. Status embeds `_audit/run.html` (auto-run on first load; **Re-run** on demand).
|
package/docs/sync.md
CHANGED
|
@@ -39,7 +39,7 @@ The PR diff is the safety net — it shows exactly what changed since the last c
|
|
|
39
39
|
## Hygiene that keeps round-trips clean
|
|
40
40
|
- **`.gitignore`** the transient (`uploads/`, `scraps/`, `_audit/exports/`); commit everything else, **including `_esm/`** (see above — it is source, not a build artifact, despite the `_` prefix). The compiled `_ds_bundle.js`, `_ds_manifest.json`, and `_adherence.oxlintrc.json` are **committed consumer artifacts** — they ship in the npm package so consumers with no build step can load the system. Do not gitignore them. Regenerate via `npm run build:bundle` after source changes; the bundle-freshness gate fails on drift.
|
|
41
41
|
|
|
42
|
-
- **`VERSION
|
|
42
|
+
- **`VERSION`** (auto-bump on push to `main` via `.github/workflows/version.yml` → tag `v*` → `npm-publish.yml`; owner may still force a bump). Do not maintain a changelog file. Continuity is the git history; open maintainer tasks live in `docs/decisions.md`.
|
|
43
43
|
|
|
44
44
|
- **One source of truth at a time.** Don't edit the repo and a Claude Design project in parallel and push both — pull, work, push, in that order, so the repo is always the merge point.
|
|
45
45
|
|
|
@@ -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 | `docs/doctrine.md` · docs-consistency · docs-lang-parity · docs-storybook-coverage |
|
|
26
|
-
| VERSION theo file (auto-bump trên main
|
|
26
|
+
| VERSION theo file (auto-bump trên main) | 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/consuming.md
CHANGED
|
@@ -19,7 +19,7 @@ Bạn đang cài, liên kết, hoặc nâng cấp hệ thống trong sản phẩ
|
|
|
19
19
|
|
|
20
20
|
**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`.
|
|
21
21
|
|
|
22
|
-
**Tín hiệu release:** **
|
|
22
|
+
**Tín hiệu release:** **theo `VERSION`** (auto-bump trên `main`; 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`.
|
|
23
23
|
|
|
24
24
|
## Đường nhanh cho AI agent (DC-capable authoring, hoặc điều khiển một agent)
|
|
25
25
|
|
|
@@ -42,7 +42,7 @@ Bạn đang cài, liên kết, hoặc nâng cấp hệ thống trong sản phẩ
|
|
|
42
42
|
|
|
43
43
|
## Adopt qua npm (tùy chọn)
|
|
44
44
|
|
|
45
|
-
Package có thể publish (`private: false`; phiên bản = root `VERSION`). License vẫn **UNLICENSED** — cài từ registry **không** tự cấp quyền redistribution. **
|
|
45
|
+
Package có thể publish (`private: false`; phiên bản = root `VERSION`). License vẫn **UNLICENSED** — cài từ registry **không** tự cấp quyền redistribution. **Phiên bản package = root `VERSION`** (auto-bump trên `main` tạo tag `vX.Y.Z`, kích hoạt `npm-publish.yml`). CI publish qua **npm Trusted Publishing (OIDC)** (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`.
|
|
46
46
|
|
|
47
47
|
**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.
|
|
48
48
|
|
package/docs/vi/conventions.md
CHANGED
|
@@ -4,7 +4,7 @@ Cho người và agent *mở rộng hệ thống này*. (Consumer: đọc `SKILL
|
|
|
4
4
|
|
|
5
5
|
## Quy tắc expansion
|
|
6
6
|
|
|
7
|
-
**Khi bất kỳ thứ gì lớn lên, mọi thứ cập nhật trong cùng một change.** Element/variant, icon, component, token role, ngôn ngữ, hoặc pattern template mới phải lan tới: tokens/source → specimen cards (guidelines + card nhóm component) **và trang guideline liên quan** → bộ ba hợp đồng component (`.jsx` + `.d.ts` + `.prompt.md`) → **mọi** template (tweak enum và map) → Storybook toolbar / Atomic View → docs (đếm README, SKILL, **và mọi tài liệu liên quan change chạm** — kit README, registry, contrast report regen sau đổi token). **`VERSION` auto-bump khi push lên `main`** (Conventional Commits); owner vẫn có thể force bump. **Không maintain file changelog** —
|
|
7
|
+
**Khi bất kỳ thứ gì lớn lên, mọi thứ cập nhật trong cùng một change.** Element/variant, icon, component, token role, ngôn ngữ, hoặc pattern template mới phải lan tới: tokens/source → specimen cards (guidelines + card nhóm component) **và trang guideline liên quan** → bộ ba hợp đồng component (`.jsx` + `.d.ts` + `.prompt.md`) → **mọi** template (tweak enum và map) → Storybook toolbar / Atomic View → docs (đếm README, SKILL, **và mọi tài liệu liên quan change chạm** — kit README, registry, contrast report regen sau đổi token). **`VERSION` auto-bump khi push lên `main`** (Conventional Commits); owner vẫn có thể force bump. **Không maintain file changelog** — theo `VERSION` (auto-bump trên `main`). Continuity là git history cộng **Release Notes** curated (`docs/release-notes.md` / Storybook). Gate mọi expansion bằng compiler check **và grep enum/list cũ** — không ship nửa lan. Ranh giới phạm vi đã ghi (doctrine, không phải lỗ): trang UI-kit giữ tái tạo Thổ pixel-faithful (trục demo ở Storybook toolbar và Atomic View); mọi template bilingual EN·VN và mặc định tiếng Anh (collateral client/media giữ English-primary), và biến thể ngôn ngữ render **tách hoàn toàn** — xem decision log.
|
|
8
8
|
|
|
9
9
|
## Bốn trục
|
|
10
10
|
|
|
@@ -32,13 +32,13 @@ Pack Style duy nhất hiện nay là **liquid-glass**. Bất biến dưới mọ
|
|
|
32
32
|
|
|
33
33
|
**Component mới** — `Name.jsx` + `Name.d.ts` + `Name.prompt.md` trong `components/<group>/`; thêm vào card html của nhóm (resolve namespace bundle **theo prefix** — `const CS = window[Object.keys(window).find(k=>/^CyberSkillDesignSystem_[0-9a-f]{6}$/.test(k))]` — không bao giờ hậu tố `…_<projectId>` hardcode); thêm vào dòng nhóm của readme. Chỉ consume token; không hex literal trừ trong `tokens/`.
|
|
34
34
|
|
|
35
|
-
**Responsive** — reflow là global (`base/responsive.css`, load cuối): media không overflow, print docs nới padding, bảng `.cs-sheet` scroll, `.cs-sidebar` thu gọn, lưới cột cố định inline thu (3+→2 tablet, →1 phone), token dài không gãy (dòng write-on `______`, URL/ID dài) nhận `overflow-wrap: anywhere` trên bề mặt doc để không chống cột phone mở, shell grid app-shell thu một cột với `main{min-width:0}`+`.cs-table-wrap` scroll, và canvas export hình học cố định (`class="cs-canvas-desk"`: decks, social) **luôn** `overflow-x:auto` để slide rộng hơn cửa sổ scroll trong desk thay vì đẩy trang rộng. Đã verify whole-set ở 390 bởi `_audit/responsive-overflow.html` (cả
|
|
35
|
+
**Responsive** — reflow là global (`base/responsive.css`, load cuối): media không overflow, print docs nới padding, bảng `.cs-sheet` scroll, `.cs-sidebar` thu gọn, lưới cột cố định inline thu (3+→2 tablet, →1 phone), token dài không gãy (dòng write-on `______`, URL/ID dài) nhận `overflow-wrap: anywhere` trên bề mặt doc để không chống cột phone mở, shell grid app-shell thu một cột với `main{min-width:0}`+`.cs-table-wrap` scroll, và canvas export hình học cố định (`class="cs-canvas-desk"`: decks, social) **luôn** `overflow-x:auto` để slide rộng hơn cửa sổ scroll trong desk thay vì đẩy trang rộng. Đã verify whole-set ở 390 bởi `_audit/responsive-overflow.html` (cả 85 = 0 document overflow). **Hai gotcha cứng:** (1) DC runtime compile `style="…"` inline thành object React, nên attribute render *có khoảng* — mọi selector responsive `[style*=…]` phải khớp `grid-template-columns: repeat(4, 1fr)` (colon-space, comma-space), không bao giờ dạng không-space lúc author; (2) rule CSS global chỉ override property template đặt **inline** qua selector **attribute** (`[style*="grid-template-columns: 248px 1fr"]`) — selector **class** thua inline style. Ưu tiên sửa overflow trong source template (thêm `min-width:0`, `flex-wrap:wrap` inline) hơn đấu inline từ stylesheet.
|
|
36
36
|
|
|
37
37
|
**Template mới** — `templates/<slug>/<Slug>.dc.html` với `<!-- @template name description -->` đầu tiên; `ds-base.js` giữ single-entry (`styles.css` thôi — rebind một dòng đã validate end-to-end Th7 2026 từ path sâu hơn; scaffold test đã gỡ) và publish alias độc lập-id `window.CyberSkillDS` lúc bundle load, nên mount DS component qua `component-from-global-scope="CyberSkillDS.…"` — **không bao giờ** hậu tố `CyberSkillDesignSystem_<projectId>` hardcode (đổi khi re-import; enforce bởi `_audit/namespace-portability.html`); chỉ inline styles; 1–3 tweaks (không plain copy/color — in-place editing phủ những cái đó); printable docs thêm khối print `@page` + `.cs-desk`/`.cs-sheet` và **không** mang dark tweak (print chỉ light).
|
|
38
38
|
|
|
39
39
|
**Element variant mới** — ở trong envelope oklch của element; đặt 10 token hợp đồng `--cs-accent-*` (gồm `--cs-accent-on-strong` ≥4.5:1 trên `-strong`) 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).
|
|
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 **1.4.0** (auto-bump trên `main`).
|
|
42
42
|
|
|
43
43
|
## Decision log (owner duyệt)
|
|
44
44
|
|
|
@@ -116,7 +116,7 @@ Tiếng Việt là ngôn ngữ chính; hệ chữ xây cho nó — đã verify,
|
|
|
116
116
|
|
|
117
117
|
## Whole-set state audits — language · theme · responsive (mỗi cái một pass riêng, Th7 2026)
|
|
118
118
|
|
|
119
|
-
Doctrine owner: language, theme, và responsive mỗi cái có pass whole-set RIÊNG; một state sạch không phải bằng chứng cho state khác. Cả ba giờ race-free, manifest-driven, gate pass/fail **all-
|
|
119
|
+
Doctrine owner: language, theme, và responsive mỗi cái có pass whole-set RIÊNG; một state sạch không phải bằng chứng cho state khác. Cả ba giờ race-free, manifest-driven, gate pass/fail **all-85** trên cùng pattern — **fresh single-navigation iframe mỗi template** (tái dùng một iframe qua `src` swap race CSS `@import` và cho kết quả sai), state ép qua `__dcSetProps`, settle, rồi đo:
|
|
120
120
|
- **Language** — `_audit/language-overflow.html` — ép `Tiếng Việt`; 0 VN overflow/clip @390; cũng assert VN thật sự áp dụng trên mọi template.
|
|
121
121
|
|
|
122
122
|
- **Theme** — `_audit/theme-overflow.html` — ép dark; hard gate = dark-applies + 0 dark overflow @390 + 0 fail contrast leaf-text solid-bg mở ngoài `REVIEWED_OK`.
|
package/docs/vi/decisions.md
CHANGED
|
@@ -25,9 +25,10 @@ Giữ plan Figma hiện tại. Variables REST API chỉ Enterprise — job ghi *
|
|
|
25
25
|
**Lựa chọn owner: Storybook là live hub duy nhất** (Th7 2026)
|
|
26
26
|
|
|
27
27
|
- Operator dùng Storybook tại `/` cho Theme × Element × Language × Style và ma trận điều khiển component.
|
|
28
|
+
- IA công khai theo đường duyệt atomic: Foundations → Components → **Templates** → **Pages** (Atoms/Molecules/Organisms vẫn trong CSF + Atomic View; Templates/Pages là nhóm sidebar hạng nhất, gồm cả bộ VN A4 / HR Suite).
|
|
28
29
|
- Không có trang Live View riêng trong tree.
|
|
29
30
|
- Legacy `/dashboard`, `/dashboard/`, `/dashboard.html`, `/dashboard/:path*`, `/playground`, `/playground/`, `/playground/:path*` redirect về `/`.
|
|
30
|
-
- Atomic View portable và HTML tĩnh khác vẫn phục vụ gate zero-build và consumer;
|
|
31
|
+
- Atomic View portable và HTML tĩnh khác vẫn phục vụ gate zero-build và consumer; Atomic View cũng được nối từ **Templates → Gallery**.
|
|
31
32
|
- Bản đồ bề mặt: `docs/live-hub.md`.
|
|
32
33
|
|
|
33
34
|
## 5. Hai nguồn token JSON
|
|
@@ -50,7 +51,7 @@ Giữ plan Figma hiện tại. Variables REST API chỉ Enterprise — job ghi *
|
|
|
50
51
|
|
|
51
52
|
## 7. npm publish — live qua Trusted Publishing (OIDC)
|
|
52
53
|
|
|
53
|
-
**Trạng thái: LAUNCH `@cyberskill/design@1.1.0`;
|
|
54
|
+
**Trạng thái: LAUNCH `@cyberskill/design@1.1.0`; sau đó `VERSION` auto-bump trên main (từ Th8 2026); CI publish dùng npm Trusted Publishing; token bị cấm** (Th7 2026; LAUNCH 2026-07-27)
|
|
54
55
|
|
|
55
56
|
- `package.json` là `private: false`; tên package **`@cyberskill/design`** (`publishConfig.access: public`); `repository.url` khớp repo GitHub này cho provenance.
|
|
56
57
|
- 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` (FIND-088). Soft-skip chỉ no-op mong đợi (`already_published` / EPUBLISHCONFLICT, và `missing_secrets` thật sự ngoài GHA). Trên GHA tag / `workflow_dispatch`, **ENEEDAUTH** / **404** / **402** / **403** / **EOTP** fail job; publish thành công được khóa bởi `npm view @cyberskill/design@VERSION` **và** `dist-tags.latest === VERSION` (FIND-020 / FIND-094).
|
|
@@ -77,7 +78,7 @@ Ghi nhận Th7 2026 — mặc định mở khóa (cập nhật khi bước vận
|
|
|
77
78
|
|
|
78
79
|
- **Figma Variables** — giữ Tokens Studio / non-Enterprise (quyết định §3). Soft-skip Variables REST vẫn trung thực.
|
|
79
80
|
- **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`**;
|
|
81
|
+
- **npm** — **LAUNCH `@cyberskill/design@1.1.0`**; sau đó `VERSION` auto-bump trên `main` → tag `v*` → Trusted Publishing; 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
82
|
|
|
82
83
|
## 10. Export React bundler-native (Next / SSR)
|
|
83
84
|
|
package/docs/vi/doctrine.md
CHANGED
|
@@ -20,7 +20,7 @@ Khi **bất kỳ thứ gì** trong hệ thống này lớn lên, cập nhật **
|
|
|
20
20
|
2. Thẻ mẫu (guidelines cộng thẻ nhóm component) **và mọi trang guideline liên quan**.
|
|
21
21
|
3. **Tất cả** template (enum tweak, bản đồ EL/EX, accent đã quét).
|
|
22
22
|
4. UI kit — trang kit trung thành Thổ; demo trục qua thanh công cụ Storybook và Atomic View (Identity Lab đã nghỉ).
|
|
23
|
-
5. Docs: README (số đếm theo compiler), `SKILL.md`, file này, `docs/conventions.md`, **và mọi tài liệu liên quan mà thay đổi chạm tới** (README kit, `docs/products.md`, tái sinh `docs/contrast-report.md` sau khi đổi token). Xuất bản cùng các trang đó qua Storybook Docs (xem `docs/storybook.md`). **`VERSION` tự tăng khi đẩy lên `main`** từ Conventional Commits (`.github/workflows/version.yml` → tag `v*` → `npm-publish.yml`); chủ sở hữu vẫn có thể ép bump qua `Release-As:` / `workflow_dispatch`. **Không duy trì file changelog** —
|
|
23
|
+
5. Docs: README (số đếm theo compiler), `SKILL.md`, file này, `docs/conventions.md`, **và mọi tài liệu liên quan mà thay đổi chạm tới** (README kit, `docs/products.md`, tái sinh `docs/contrast-report.md` sau khi đổi token). Xuất bản cùng các trang đó qua Storybook Docs (xem `docs/storybook.md`). **`VERSION` tự tăng khi đẩy lên `main`** từ Conventional Commits (`.github/workflows/version.yml` → tag `v*` → `npm-publish.yml`); chủ sở hữu vẫn có thể ép bump qua `Release-As:` / `workflow_dispatch`. **Không duy trì file changelog** — theo `VERSION` (auto-bump trên `main`). Tính liên tục là lịch sử git cộng Release Notes đã chọn lọc.
|
|
24
24
|
6. Bề mặt duyệt và sức khỏe: component mới hoặc đổi được một story Atomic View trong `guidelines/atomic-view.html` (cộng playground sống nếu có prop chỉnh được — `_audit/story-coverage.html` bắt story) và phủ hành vi trong `_audit/component-behavior-test.html` nếu tương tác; mọi trục, công cụ, hoặc tab mới được nối vào `_audit/index.html` và Storybook **Status** (`_audit/run.html` full-bleed — `dashboard.html` chỉ redirect); gate xác định tương ứng được thêm hoặc cập nhật (`contrast-guard` cho quy tắc màu mới, `token-contract` cộng ma trận contrast cho token, `story-coverage` cho component, `docs-storybook-coverage` cho docs đã xuất bản).
|
|
25
25
|
|
|
26
26
|
**Gate:** `check_design_system` sạch (chỉ phiên compiler) **cộng** `_audit/run.html` (mọi gate nhanh) xanh **cộng** `docs-consistency` xanh **cộng** grep enum hoặc danh sách cũ để chứng minh không bỏ sót. Trên clone portable, tương đương là bảng nhanh cộng `npm run test:unit`.
|