@cyberskill/design 1.3.11 → 1.5.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.
Files changed (39) hide show
  1. package/DESIGN.md +2 -2
  2. package/README.md +12 -10
  3. package/SKILL.md +3 -3
  4. package/VERSION +1 -1
  5. package/_ds_bundle.js +2 -2
  6. package/_ds_manifest.json +1 -1
  7. package/_esm/cs.mjs +2 -2
  8. package/docs/contrast-report.md +1 -1
  9. package/docs/conventions.md +3 -3
  10. package/docs/decisions.md +2 -1
  11. package/docs/hr-suite-sources.md +91 -0
  12. package/docs/live-hub.md +16 -9
  13. package/docs/quality-gates.md +4 -3
  14. package/docs/release-notes.md +1 -1
  15. package/docs/storybook.md +6 -2
  16. package/docs/vi/contrast-report.md +1 -1
  17. package/docs/vi/conventions.md +3 -3
  18. package/docs/vi/decisions.md +2 -1
  19. package/docs/vi/hr-suite-sources.md +47 -0
  20. package/docs/vi/live-hub.md +24 -17
  21. package/docs/vi/quality-gates.md +4 -3
  22. package/docs/vi/release-notes.md +1 -1
  23. package/docs/vi/storybook.md +26 -22
  24. package/docs/viewer.html +2 -2
  25. package/llms.txt +4 -4
  26. package/package.json +3 -2
  27. package/templates/doc-suite-index/DocSuiteIndex.dc.html +6 -1
  28. package/templates/vn-framework-agreement/.thumbnail +0 -0
  29. package/templates/vn-framework-agreement/VnFrameworkAgreement.dc.html +138 -0
  30. package/templates/vn-framework-agreement/ds-base.js +55 -0
  31. package/templates/vn-framework-agreement/support.js +1834 -0
  32. package/tokens/element-seeds.json +1 -1
  33. package/tokens/native/CSTokens.kt +1 -1
  34. package/tokens/native/CSTokens.swift +1 -1
  35. package/tokens/native/cs_tokens.dart +1 -1
  36. package/tokens/provenance.json +6 -6
  37. package/tokens/tokens.dtcg.json +1 -1
  38. package/tokens/tokens.js +2 -2
  39. 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.3.11).
1
+ // CyberSkill Design System — ESM entry point (GENERATED from _ds_manifest.json at v1.5.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.3.11";
35
+ export const VERSION = "1.5.0";
36
36
  export const AIDisclosureBadge = CS.AIDisclosureBadge;
37
37
  export const Accordion = CS.Accordion;
38
38
  export const Alert = CS.Alert;
@@ -1,6 +1,6 @@
1
1
  # Contrast report — elemental pairings (APCA)
2
2
 
3
- Generated · sweep at VERSION 1.3.11.
3
+ Generated · sweep at VERSION 1.5.0.
4
4
 
5
5
  Published on Storybook **Docs** at `design.cyberskill.world`.
6
6
 
@@ -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 84 = 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.
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). VERSION **1.3.11** (auto-bumps on `main`).
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.5.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-84** 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:
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; they are not the site product entry.
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
@@ -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**. **Aug 2026 full DOCX↔DC text pass** completed: normalized plain-text fixtures for every mapped instrument (plus framework agreement) live under `_audit/fixtures/hr-suite-docx-text/`, with CI guard `_audit/ci/test-docx-source-parity.mjs` (substantial phrase overlap ≥85%). Repo `.dc.html` trees remain the canonical live instruments; Word files stay out of git (`scraps/` unpack only). Re-sync when counsel or ops confirm Word content drifted — update the matching `templates/vn-*/` (or `doc-*`) folder, refresh the fixture via `node scripts/extract-hr-suite-docx-fixtures.mjs`, 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 (Atomic View buried here — not a public top-level entry) |
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/Release Notes/Status, and Maintainer/* iframes into portable HTML |
26
- | **Atomic View** (`guidelines/atomic-view.html`) | Portable zero-build component grid for gates and clone-and-open browsing — not the public product entry |
27
- | **Other guidelines / templates** | Portable specimens; opened from Storybook Maintainer/* when exploring Motion, Status Hub / Website / Deck indexes, kitchen-sink, etc. |
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/* stories)
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 | `ui_kits/status-hub/index.html` |
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.
@@ -41,9 +41,9 @@ Benchmark principles (WCAG · APCA · OKLCH · DTCG · CDS doctrine + style expa
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, 84) 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 |
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 84 `.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 (37 `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 |
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 |
@@ -51,13 +51,14 @@ Benchmark principles (WCAG · APCA · OKLCH · DTCG · CDS doctrine + style expa
51
51
  | Component baselines | `_audit/component-visual-diff.html` | 12 curated component crops anchor the atomic tiers for visual comparison | Crops render + baselines present (`__componentVisualDiff`) | Advisory | Fast board CI |
52
52
  | Axe smoke | `_audit/axe-smoke.html` + `_audit/lib/axe-fixtures.js` | axe-core 4.10.0 (vendored at `_audit/vendor/axe.min.js`) serious/critical WCAG 2 A/AA rules on every public primary (inventory-locked fixtures; bilingual EN·VI) — Dialog, AlertDialog, Drawer, Tour, CommandPalette, and Menu mount open, and Cascader / TreeSelect / Menubar / Combobox surfaces are expanded before the scan; gate-equivalent Storybook a11y enforcement (no separate test-runner) | 0 serious/critical findings (`__axesmoke`) | Hard | Fast board CI |
53
53
  | Print smoke | `_audit/print-smoke.html` | Document templates declare the print-ownership meta and `@page` CSS hooks the export path relies on | 0 documents missing print hooks (`__printsmoke`) | Hard | Fast board CI |
54
+ | DOCX source parity (Node) | `_audit/ci/test-docx-source-parity.mjs` | DC text vs committed fixtures under `_audit/fixtures/hr-suite-docx-text/` for every mapped HR instrument | ≥85% phrase overlap; exit 0 | Hard | Unit test |
54
55
  | Pixel CI | `_audit/pixel-ci.html` + `_audit/ci/pixel-diff.mjs` | 15 curated baselines exist; Playwright capture script performs real % pixel compare; last report must be clean (`drifted[]` empty) | Contract + clean compare (`__pixelci.pass`); drift or missing report fails | Hard | Fast board CI (compare step feeds the row) + `pixel-diff` job |
55
56
 
56
57
  ## Whole-set audits — every template, every axis
57
58
 
58
59
  | Gate | File | What it asserts | Pass criterion | Type | Where it runs |
59
60
  |---|---|---|---|---|---|
60
- | Responsive overflow | `_audit/responsive-overflow.html` | Every template (84) + 3 UI kits render at 390 px without horizontal document overflow | 0 overflowing surfaces (`__overflow`) | Hard | Whole-set CI (every PR + nightly) |
61
+ | 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
62
  | 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
63
  | 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
64
 
@@ -1,6 +1,6 @@
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. VERSION **1.3.11** (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`.
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.5.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
4
 
5
5
  ## Release — `@cyberskill/design@1.3.10`
6
6
 
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
- - **Maintainer/** stories for portable HTML surfaces (Motion, templates, kitchen-sink, AI cluster, RTL; Atomic View buried for gates)
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
- Portable HTML surfaces iframed from Maintainer/* are listed in `docs/live-hub.md`. Status embeds `_audit/run.html` (auto-run on first load; **Re-run** on demand).
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).
@@ -1,6 +1,6 @@
1
1
  # Báo cáo contrast — cặp elemental (APCA)
2
2
 
3
- Tạo · quét tại VERSION 1.3.11.
3
+ Tạo · quét tại VERSION 1.5.0.
4
4
 
5
5
  Xuất bản trên Storybook **Docs** tại `design.cyberskill.world`.
6
6
 
@@ -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ả 84 = 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.
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). VERSION **1.3.11** (auto-bump trên `main`).
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.5.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-84** 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:
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`.
@@ -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; chúng không phải entry sản phẩm của site.
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
@@ -0,0 +1,47 @@
1
+ # Nguồn HR Suite (DOCX ↔ templates)
2
+
3
+ Xuất bản trên Storybook **Docs** tại `design.cyberskill.world`.
4
+
5
+ ## Quyết định
6
+
7
+ **Instrument sống canonical là Design Component** dưới `templates/vn-*/*.dc.html` (cộng `doc-suite-index`, `doc-style-guide`, `doc-templates`). Google Drive / Word (`.docx` / `.dotx`) là **provenance nguồn**, không phải bề mặt sản phẩm Storybook.
8
+
9
+ **Không** commit file Word binary lớn vào package design system. Giải nén local tùy chọn để diff:
10
+
11
+ ```bash
12
+ # scraps/ đã gitignore
13
+ mkdir -p scraps/hr-suite-docx
14
+ unzip -O UTF-8 /path/to/Templates.zip -d scraps/hr-suite-docx
15
+ ```
16
+
17
+ ## Inventory (Templates.zip, Th7 2026)
18
+
19
+ | Số | Loại |
20
+ |---|---|
21
+ | 40 | `.docx` instrument / hướng dẫn |
22
+ | 1 | `.dotx` shell trình bày |
23
+ | **41** | **tổng trong zip** |
24
+
25
+ Cả **37** thư mục Employment Suite `templates/vn-*` từ zip map 1:1 với một `.docx`. Bốn file “0.” tham chiếu map tới template `doc-*`. Thêm **một** hợp đồng nguyên tắc thương mại (không nằm trong zip) tại `templates/vn-framework-agreement`.
26
+
27
+ ## Mapping
28
+
29
+ Bảng đầy đủ (tiêu đề EN → path repo) nằm ở bản EN: `docs/hr-suite-sources.md`. Tóm tắt: mọi hợp đồng / chính sách / form Employment Suite trong zip khớp một `templates/vn-*`; index + style guide + usage guide khớp `templates/doc-*`.
30
+
31
+ ### Ngoài Templates.zip (thêm Th8 2026)
32
+
33
+ | Nguồn | Path repo | Phân loại |
34
+ |---|---|---|
35
+ | `Hợp đồng Nguyên Tắc - CyberSkill - Ban QLDA Bình Quới.docx` (Downloads) | `templates/vn-framework-agreement` | **Thương mại** — khung cung cấp dịch vụ & tài khoản phần mềm (không phải vòng đời lao động). Cùng skin VN A4 (`vn-*`), hiện dưới **Templates → HR** nhờ tên catalog `HR Suite ·`; mục lục suite đặt ở Legal/client-facing. DOCX đã adapt (gitignore): `scraps/hr-suite-docx/Templates/9. Hợp đồng Nguyên Tắc - Framework Agreement (Software Services).docx` |
36
+
37
+ ## Duyệt trên Storybook
38
+
39
+ - **Templates → Gallery → Atomic gallery** — tier Templates của Atomic View
40
+ - **Templates → HR** — mọi instrument HR Suite / HR ops
41
+ - **Templates → Documents** — suite index / style guide / document template
42
+
43
+ ## Trạng thái sync (Th8 2026)
44
+
45
+ Zip ngày **2026-07-11**. **Th8 2026: pass đối chiếu DOCX↔DC toàn bộ** — fixture plain text chuẩn hóa cho mọi instrument đã map (cộng hợp đồng nguyên tắc) nằm tại `_audit/fixtures/hr-suite-docx-text/`, kèm CI `_audit/ci/test-docx-source-parity.mjs` (overlap cụm từ ≥85%). Cây `.dc.html` vẫn là instrument sống canonical; file Word không vào git (chỉ giải nén `scraps/`). Sync lại khi counsel/ops xác nhận Word lệch — sửa `templates/vn-*/` (hoặc `doc-*`), chạy lại `node scripts/extract-hr-suite-docx-fixtures.mjs`, và regen CSF Storybook nếu đổi tên (`node scripts/generate-template-stories.mjs`).
46
+
47
+ Vẫn cần counsel review trước khi dùng thật (instrument do client cung cấp; xem README / SKILL).
@@ -4,38 +4,43 @@ Xuất bản trên Storybook **Docs** tại `design.cyberskill.world`.
4
4
 
5
5
  ## Quyết định
6
6
 
7
- **Storybook là live interactive hub duy nhất** cho operator trên `design.cyberskill.world`. Không có trang Live View riêng và không còn shell dashboard HTML làm sản phẩm. Production **`/`** là Storybook.
7
+ **Storybook là live hub tương tác duy nhất** cho operator trên `design.cyberskill.world`. Không có trang Live View riêng và không có shell dashboard HTML sản phẩm riêng. Production **`/`** là Storybook.
8
8
 
9
9
  ## Sidebar IA
10
10
 
11
+ Thứ tự duyệt atomic trên site sản phẩm: **Foundations → Components → Templates → Pages** (Atoms / Molecules / Organisms nằm trong Atomic View và CSF Components; Templates và Pages là nhóm sidebar hạng nhất).
12
+
11
13
  | Nhóm | Vai trò |
12
14
  |---|---|
13
- | **Docs** | Docs operator đã xuất bản: **Start** (Introduction, README, SKILL, Contributing, llms, Library) · **Guides** (consuming, grant, deploy, schema, conventions, styles, products, Figma, contrast, storybook, live-hub, runbook phát hành, benchmark, …) · **Maintainers** (học thuyết, decisions, CI/CD, quality gates, sync). MDX curated cộng một mục sidebar mỗi trang tracked. EN·VI qua Thư viện tài liệu (`/docs/viewer.html`) |
14
- | **Foundations** | Colors, typography, spacing, elevation, motion, elements |
15
+ | **Docs** | Docs operator đã xuất bản: **Start** (Introduction, README, SKILL, Contributing, llms, Library) · **Guides** (consuming, grant, deploy, schema, conventions, styles, products, Figma, contrast, storybook, live-hub, nguồn HR Suite, runbook phát hành, benchmark, …) · **Maintainers** (học thuyết, decisions, CI/CD, quality gates, sync). MDX curated cộng một mục sidebar mỗi trang tracked. EN·VI qua Thư viện tài liệu (`/docs/viewer.html`) |
16
+ | **Foundations** | Màu, chữ, spacing, elevation, motion, elements |
15
17
  | **Components** | Thư viện CSF đầy đủ |
18
+ | **Templates** | Điểm bắt đầu công khai: **Gallery** (Atomic View → tier Templates, kitchen-sink, playground) cộng mọi template `_ds_manifest.json` nhóm như Atomic View (Product · Board · … · **HR** Suite · Documents). Gồm cả 38 instrument `vn-*` A4 (Employment Suite + hợp đồng nguyên tắc thương mại) |
19
+ | **Pages** | UI kit — Status Hub, Marketing site, Slide deck |
16
20
  | **Release Notes** | Prose sản phẩm curated (**không CHANGELOG.md**) |
17
- | **Status** | Nhúng full-bleed `_audit/run.html` (auto-run lần đầu; **Re-run** khi cần) |
21
+ | **Status** | Embed full-bleed `_audit/run.html` (tự chạy lần đầu; **Re-run** khi cần) |
18
22
  | **A11y / I18n** | Specimen a11y + song ngữ |
19
- | **Maintainer** | Iframe HTML portable cho gates (Atomic View chôn ở đây — không phải entry công khai top-level) |
23
+ | **Maintainer** | Iframe HTML portable cho gates và demo (Motion, mirror kit, demo template, RTL, Atomic View cho gates) |
20
24
 
21
25
  ## Bề mặt
22
26
 
23
27
  | Bề mặt | Vai trò |
24
28
  |---|---|
25
- | **Storybook** (`/`) | Bề mặt sản phẩm host: toolbar Theme × Element × Language × Style, Docs/Foundations/Components/Release Notes/Status, và Maintainer/* iframe vào HTML portable |
26
- | **Atomic View** (`guidelines/atomic-view.html`) | Lưới component zero-build portable cho gates và duyệt clone-and-open — không phải entry sản phẩm công khai |
27
- | **Guidelines / templates khác** | Specimen portable; mở từ Storybook Maintainer/* khi khám phá Motion, index Status Hub / Website / Deck, kitchen-sink, v.v. |
28
- | **Legacy `/dashboard`, `/dashboard/`, `/dashboard.html`, `/dashboard/:path*`, `/playground`, `/playground/`, `/playground/:path*`** | Redirect về `/` (stub + redirect Vercel) |
29
+ | **Storybook** (`/`) | Bề mặt sản phẩm host: toolbar Theme × Element × Language × Style, Docs/Foundations/Components/**Templates**/**Pages**/Release Notes/Status, và Maintainer/* iframe vào HTML portable |
30
+ | **Atomic View** (`guidelines/atomic-view.html`) | Trình duyệt atomic zero-build portable (Atoms → Molecules → Organisms → Templates → Pages). Công khai qua **Templates → Gallery → Atomic gallery**; cũng dưới Maintainer cho gates / clone-and-open |
31
+ | **Guidelines / templates khác** | Specimen portable; mở từ Storybook Templates/*, Pages/*, hoặc Maintainer/* |
32
+ | **Legacy `/dashboard`, `/dashboard/`, `/dashboard.html`, `/dashboard/:path*`, `/playground`, `/playground/`, `/playground/:path*`** | Redirect về `/` (stub + Vercel redirects) |
29
33
 
30
- ## Bản đồ bề mặt (story Maintainer/*)
34
+ ## Bản đồ bề mặt (công khai + Maintainer)
31
35
 
32
- | Storybook entry | Portable HTML |
36
+ | Entry Storybook | HTML portable |
33
37
  |---|---|
34
38
  | Components/* CSF | Nguồn React dưới `components/` |
39
+ | Templates/Gallery → Atomic gallery | `guidelines/atomic-view.html#tier-templates` |
40
+ | Templates/{Category}/* | `templates/**/*.dc.html` qua `_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 | `ui_kits/status-hub/index.html` |
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 | cùng UI kit (mirror maintainer) |
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` |
@@ -46,9 +51,9 @@ Xuất bản trên Storybook **Docs** tại `design.cyberskill.world`.
46
51
 
47
52
  ## Hành vi Status
48
53
 
49
- - Mở Status load `_audit/run.html`, **auto-run** bảng gate nhanh một lần.
50
- - Storybook có thể giữ iframe cache khi điều hướng đi rồi về — **không** tự chạy lại im lặng.
51
- - Dùng nút **Re-run** trên board để chạy lại (mỗi gate iframe được cache-bust).
54
+ - Mở Status tải `_audit/run.html`, **tự chạy** board nhanh một lần.
55
+ - Storybook có thể giữ iframe cache khi điều hướng đi rồi về — **không** tự chạy lại gates.
56
+ - Dùng nút **Re-run** trên board để pass mới (mỗi iframe gate được cache-bust).
52
57
 
53
58
  ## Consumer portable (không đổi)
54
59
 
@@ -60,3 +65,5 @@ Consumer vẫn link `styles.css` / `_ds_bundle.js` / ESM / templates. **Không**
60
65
  npm run storybook # Storybook sản phẩm tại http://localhost:6006
61
66
  npm run build:site # đóng gói Storybook tại .vercel-static/ (root `/`)
62
67
  ```
68
+
69
+ Mở **Templates → Gallery → Atomic gallery** hoặc **Templates → HR → …** cho Employment Suite.
@@ -41,9 +41,9 @@ Nguyên tắc benchmark (WCAG · APCA · OKLCH · DTCG · doctrine CDS + mở r
41
41
  | A11y interactions | `_audit/a11y-gate.html` | Focus trap/restore, roving, Mentions APG + Sortable buttons (hard-fail), role/label, open-state Esc | Mọi assert keyboard/ARIA pass (`__a11y`) | Hard | Fast board CI |
42
42
  | A11y CSSOM | `_audit/a11y-harness.html` | Mọi control `.cs-*` tương tác đạt floor touch-target đã ghi dưới coarse pointer; focus-ring, reduced-motion, và contrast rule chứng minh trong source CSS | 0 vi phạm floor, mọi source proof tìm thấy (`__a11ycss`) | Hard | Fast board CI |
43
43
  | Template schema v2 | `_audit/template-schema-test.html` | Mọi sidecar `content-schema.json` validate theo JSON Schema, mọi slot id khai báo resolve tới `{{ hole }}` thật trong template, và mọi template lộ **content** hole author được đều có sidecar (hole trục/control-flow và tweak boolean được loại trừ — xem `docs/template-schema-v2.md`) | 0 sidecar invalid, 0 slot id treo, 0 template hole-driven thiếu sidecar (`__schemav2`) | Hard | Fast board CI |
44
- | Support runtime identity | `_audit/support-runtime-identity.html` | Mọi bản `templates/*/support.js` (một mỗi template, 84) byte-identical: sha-256 qua SubtleCrypto, đúng một hash duy nhất, số bản == số template manifest | 1 hash duy nhất, count khớp (`__supportid`) | Hard | Fast board CI |
44
+ | Support runtime identity | `_audit/support-runtime-identity.html` | Mọi bản `templates/*/support.js` (một mỗi template, 85) byte-identical: sha-256 qua SubtleCrypto, đúng một hash duy nhất, số bản == số template manifest | 1 hash duy nhất, count khớp (`__supportid`) | Hard | Fast board CI |
45
45
  | Bilingual parity | `_audit/bilingual-parity.html` | Mọi component trong `components/_i18n/strings.js` có bảng en + vi với key set bằng nhau và không giá trị rỗng | 0 key thiếu/thừa, 0 giá trị rỗng (`__bilingual`) | Hard | Fast board CI + merge blocker |
46
- | Template language parity | `_audit/template-lang-parity.html` | Quét source tĩnh cả 84 `.dc.html`: en/vi hole-map key set giống và không rỗng (21 map template); nhánh `sc-if` `isEN`/`isVN` cặp (24 branch template); mọi template có language-tweak có cơ chế bilingual; lexicon EN-leak (Unsubscribe · View in browser · Preferences · All rights reserved · Manage subscription · Sent with) không bao giờ xuất hiện ngoài guard `isEN` / map `en`. Instrument VN-first stacked (37 `vn-*` + 3 `doc-*`) miễn leak theo thiết kế — cả hai ngôn ngữ luôn render | 0 key drift, 0 nhánh không cặp, 0 leak (`__langparity`) | Hard | Fast board CI |
46
+ | Template language parity | `_audit/template-lang-parity.html` | Quét source tĩnh cả 85 `.dc.html`: en/vi hole-map key set giống và không rỗng (21 map template); nhánh `sc-if` `isEN`/`isVN` cặp (24 branch template); mọi template có language-tweak có cơ chế bilingual; lexicon EN-leak (Unsubscribe · View in browser · Preferences · All rights reserved · Manage subscription · Sent with) không bao giờ xuất hiện ngoài guard `isEN` / map `en`. Instrument VN-first stacked (38 `vn-*` + 3 `doc-*`) miễn leak theo thiết kế — cả hai ngôn ngữ luôn render | 0 key drift, 0 nhánh không cặp, 0 leak (`__langparity`) | Hard | Fast board CI |
47
47
  | APCA dark packs | `_audit/apca-dark-preview.html` | Cả 15 pack element×variant giữ mục tiêu APCA ở dark (bright-as-text ≥ 75, accent UI ≥ 60, ink-on-accent ≥ 75, ink-on-tint ≥ 75) | 0 fail hiện tại (`__apcaPreview.currentFail === 0`) | Hard | Fast board CI |
48
48
  | Element geometry | `_audit/element-geometry.html` | Sync cường độ soft/middle/deep giữa năm element; tách variant; khóa hue light↔dark; Thổ middle ghim ochre logo; pack generate từ seed | `__elementgeometry.pass` | Hard | Fast board CI |
49
49
  | Style contract | `_audit/style-contract.html` | Allowlist trục Style: sole pack `liquid-glass` (vắng ≡ mặc định); `styles.css` import `tokens/styles.css`; `--cs-style-pack` resolve; không `data-cs-style` lạ | `__stylecontract.pass` | Hard | Fast board CI |
@@ -51,13 +51,14 @@ Nguyên tắc benchmark (WCAG · APCA · OKLCH · DTCG · doctrine CDS + mở r
51
51
  | Component baselines | `_audit/component-visual-diff.html` | 12 crop component curated neo các tầng atomic cho so sánh visual | Crop render + baseline có (`__componentVisualDiff`) | Advisory | Fast board CI |
52
52
  | Axe smoke | `_audit/axe-smoke.html` + `_audit/lib/axe-fixtures.js` | Rule serious/critical WCAG 2 A/AA của axe-core 4.10.0 (vendored tại `_audit/vendor/axe.min.js`) trên mọi public primary (fixture khoá inventory; bilingual EN·VI) — Dialog, AlertDialog, Drawer, Tour, CommandPalette và Menu mount mở, còn Cascader / TreeSelect / Menubar / Combobox được bung trước khi quét; tương đương enforcement a11y Storybook (không test-runner riêng) | 0 finding serious/critical (`__axesmoke`) | Hard | Fast board CI |
53
53
  | Print smoke | `_audit/print-smoke.html` | Document template khai báo meta print-ownership và hook CSS `@page` mà đường export dựa vào | 0 document thiếu print hook (`__printsmoke`) | Hard | Fast board CI |
54
+ | DOCX source parity (Node) | `_audit/ci/test-docx-source-parity.mjs` | DC text vs committed fixtures under `_audit/fixtures/hr-suite-docx-text/` for every mapped HR instrument | ≥85% phrase overlap; exit 0 | Hard | Unit test |
54
55
  | Pixel CI | `_audit/pixel-ci.html` + `_audit/ci/pixel-diff.mjs` | 15 baseline curated tồn tại; script Playwright capture so sánh % pixel thật; report gần nhất phải sạch (`drifted[]` rỗng) | Hợp đồng + compare sạch (`__pixelci.pass`); drift hoặc thiếu report → fail | Hard | Fast board CI (bước compare nuôi hàng) + job `pixel-diff` |
55
56
 
56
57
  ## Whole-set audits — mọi template, mọi trục
57
58
 
58
59
  | Gate | File | Assert gì | Tiêu chí pass | Loại | Chạy ở đâu |
59
60
  |---|---|---|---|---|---|
60
- | Responsive overflow | `_audit/responsive-overflow.html` | Mọi template (84) + 3 UI kit render ở 390 px không horizontal document overflow | 0 bề mặt overflow (`__overflow`) | Hard | Whole-set CI (mọi PR + nightly) |
61
+ | Responsive overflow | `_audit/responsive-overflow.html` | Mọi template (85) + 3 UI kit render ở 390 px không horizontal document overflow | 0 bề mặt overflow (`__overflow`) | Hard | Whole-set CI (mọi PR + nightly) |
61
62
  | Language overflow | `_audit/language-overflow.html` | Cùng set ép Tiếng Việt: VN áp dụng, không overflow, không clip chữ trong hộp fixed/nowrap, và chuỗi EN built-in đã biết (hint PromptInput, FileUpload, pin DataGrid, …) không rò | 0 over/clip/EN-leak (`__language`) | Hard | Whole-set CI (mọi PR + nightly) |
62
63
  | Theme overflow | `_audit/theme-overflow.html` | Cùng set ép dark: dark áp dụng, không document overflow, và không fail WCAG leaf-text solid-bg tái lập được ngoài `REVIEWED_OK` | Dark áp dụng + 0 overflow + 0 contrast mở (`__theme`) | Hard (chỉ near-miss allowlist) | Whole-set CI (mọi PR + nightly) |
63
64
 
@@ -1,6 +1,6 @@
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. VERSION **1.3.11** (auto-bump khi push lên `main` từ Conventional Commits; owner vẫn có thể force bump). 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**). Xuất bản trên Storybook **Docs** tại `design.cyberskill.world`.
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. VERSION **1.5.0** (auto-bump khi push lên `main` từ Conventional Commits; owner vẫn có thể force bump). 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**). Xuất bản trên Storybook **Docs** tại `design.cyberskill.world`.
4
4
 
5
5
  ## Release — `@cyberskill/design@1.3.10`
6
6