Repository navigation
Operations Handbook
Tiếng Việt: Operations-Handbook-vi.
How the project runs day to day: who does what, when, and under which rules. Roles and decision rights: GOVERNANCE.md.
| Item | First response | Notes |
|---|---|---|
| Security vulnerability report | 3 days | The fix has top priority; a patch is released as soon as it is ready |
| Blocking bug (crash, broken build, severe a11y problem) | 3 days | Add confirmed + the priority in a comment |
| Regular bug, other a11y issues | 7 days | |
| PR | 7 days to the first review | No response? Politely ping in the PR after 7 days |
| Discussions Q&A | 7 days | Better still if the community answers first |
| Feature request / Ideas | 14 days | The answer may be "after 1.0" |
| Frequency | Task | Who |
|---|---|---|
| Weekly | Triage needs triage (Community and Triage), answer pending Q&A, review PRs |
Triager / maintainer |
| Weekly | Watch CI on main (must always be green). Monday: merge Dependabot minor + patch PRs into next if green; close red major PRs, add an ignore and note it in the migration issue (#91). TypeScript comes as its own PR: check:props uses TypeScript 7's unstable API, so the root pins ~7.0.x and a new minor is merged only when CI is green |
Maintainer |
| Every 2–4 weeks | Release if there are changesets (Release Process) | Maintainer |
When packages/cli/CHANGELOG.md has an Unreleased section |
Release the CLI with a news entry on #/news (Release Process › CLI) |
Maintainer |
| Monthly | Update the ROADMAP, label new good first issues, pick Showcase entries |
Maintainer |
| Monthly | Read the Prune branches report (on the 1st); if the "Xoá" (delete) entries are right, rerun with apply; handle "Cần xem" (review) entries by hand (Branching and Release Channels › Branch cleanup) |
Maintainer |
| Quarterly | Review major dependencies (React, Radix, Tailwind), the size budget, manual a11y audit with NVDA / VoiceOver | Maintainer |
- Every change to
maingoes through a PR; CI must be green (build, unit, e2e). - At least 1 approval from a maintainer (PR authors don't approve their own PRs, unless there is only one maintainer; in that case they merge after CI is green and after re-reviewing the diff the next day).
- User-facing change → a changeset. Breaking change → an accepted RFC + a "Thay đổi lớn" (Breaking) entry + a migration guide.
- Merge with Squash and merge, with a Conventional Commits title (
feat(datagrid): …). - Don't merge while threads are unresolved, or while axe / visual is red without an explanation.
- Review in this order: correct behavior & a11y → API (prop names, defaults) → Design.md compliance → tests → code style.
Protection for next, release/*, canary and v* tags: see Branching and Release Channels.
Settings → Rules → Rulesets → protect-main (main and release/*):
- Pull request required · 2 approvals · code owner review · approval of the most recent push · dismiss stale approvals · conversations resolved
- Required checks
Build · Node 24,Build · Node 26,Unit tests (React 19),E2E (Playwright + axe), and the branch must be up to date before merging - No force push, no deletion
- Bypass: repository admin. With one maintainer, merges into
mainuse it ("Merge without waiting for requirements to be met (bypass rules)", orgh pr merge --admin); the rules apply to everyone else. OpenSSF Scorecard scores this 9/10 (Branch-Protection); 10 needs no bypass, which needs a second maintainer
Settings → General: Allow squash merging (default) · Automatically delete head branches · Discussions: on.
Settings → Code security: Dependabot alerts + security updates · Private vulnerability reporting · Secret scanning.
Discussions → Categories: Announcements (only maintainers post), General, Ideas (used for RFCs), Q&A (with marked answers), Polls, Show and tell.
| Workflow / file | What it does |
|---|---|
ci.yml |
Build, test (React 19), e2e, the checks, size. Doesn't run when a push / PR only changes reading material (README, wiki, CONTRIBUTING…; the paths-ignore list in the file); engines.yml and pages.yml use the same list |
release.yml |
Tag v* → check the branch + consistency → npm publish --provenance (dist-tag by channel) → GitHub Release from the CHANGELOG entry, with the tarball and its SLSA provenance attached. Push to canary (or a manual run) → an x.y.z-canary-… version with the canary dist-tag |
release-cli.yml |
Tag cli@* → check-release.mjs --tag (CHANGELOG, news entry on #/news, unused version, yugen-ui already on npm) → publish @yugen-ui/cli + create-yugen-ui → GitHub Release (tarballs + SLSA provenance) |
sync-next.yml |
Push to main → if next has no work of its own, merge main straight into next (no PR, no CI rerun) and rerun Docs; otherwise open a main → next PR |
node-versions.yml |
Weekly → compare the Node.js versions in workflows with the release schedule (scripts/node-versions.mjs), open a PR into next when they differ, then run CI on that branch |
prune-branches.yml |
1st of every month → report stale branches (scripts/prune-branches.mjs) in the job summary; run manually with apply to delete the "Xoá" entries |
engines.yml |
Weekly, on PRs into main and on PRs that change e2e/ → E2E on Firefox and WebKit; when a scheduled run fails, open / update an issue, close it when green again |
pages.yml |
Deploy the docs (+ docs for older minors) to GitHub Pages |
wiki.yml |
Push wiki/ to the GitHub Wiki |
ImgBot (GitHub app, .imgbotconfig) |
Opens a PR into main that compresses images losslessly. Visual baselines and SVGs are ignored (the workflow regenerates the baselines; the SVGs are hand-written). Merge when CI is green |
labels.yml |
Sync labels from .github/labels.yml
|
pr-labeler.yml |
Add area: … labels to PRs by file path (.github/labeler.yml) |
stale.yml |
needs reproduction issues silent for 14 days → reminder, 7 more days → close |
welcome.yml |
Greet first-time issue / PR authors, point them to CONTRIBUTING; bot PRs (Dependabot…) get a review note for the maintainer instead |
visual.yml |
Manual: compare screenshots / create Linux baselines |
codeql.yml |
CodeQL (TypeScript / JavaScript and workflows) on every PR into main / next, every push to them, and weekly → Security › Code scanning. Code scanning's default setup stays off |
scorecard.yml |
Weekly and on push to main → OpenSSF Scorecard, published for the README badge |
CODEOWNERS |
Request maintainer review automatically |
| Incident | Do right away |
|---|---|
| Broken release (severe build / runtime error) |
npm deprecate yugen-ui@x.y.z "Broken …, use x.y.z+1" → fix → release a patch. Don't npm unpublish (it breaks other people's projects) |
| Leaked secret | Revoke it right away (npm publishes through trusted publishing, so there is no npm token to leak), replace the secret, check recent publishes and workflow runs |
| Security vulnerability reported | Confirm it in a private Security Advisory, build the fix in a private fork, release, publish the advisory + a CVE if needed |
main is red |
Fix it before any other PR; revert the offending commit if it can't be fixed within 1 day |
| Docs site broken | Rerun the Docs workflow on the last good commit (workflow_dispatch) |
| Docs show stale or broken pages that a redeploy doesn't fix (service worker) | Turn the service worker off: see below |
The docs register a service worker (src/docs/sw/sw.js, written to <base>/sw.js by vite.perf.ts). It serves hashed files
in assets/ from its cache, loads pages from the network first and falls back to the cached copy of the same page when
offline. It leaves everything else alone (versions.json, images, r/*.json, other origins such as the contributors
data) and ignores the other docs builds in subfolders (next/, vX.Y/). Each deploy ships a new sw.js, which drops the
previous build's cached pages and the chunks that are no longer in the build. It isn't registered in local dev or in E2E.
Kill switch:
- Repository Settings → Secrets and variables → Actions → Variables: add
DOCS_SW=off. - Rerun the Docs workflow (
workflow_dispatch).
That build's sw.js deletes the docs caches, unregisters itself and reloads open tabs the next time a visitor opens any
docs page, and the pages stop registering a worker. Delete the variable and rerun the workflow to turn caching back on.
Apply the Code of Conduct to issues, PRs and Discussions.
| Level | When | Action |
|---|---|---|
| Reminder | Off topic, mildly impolite | Comment with a reminder, edit / hide the comment (Hide → Off-topic) |
| Warning | Repeated, or insulting | Public or private warning, temporarily lock the thread (Lock conversation) |
| Temporary block | Serious violation | Block user for 30 days from the organization / repo |
| Permanent block | Harassment, threats, deliberate spam | Permanent block, delete the content, report to GitHub if needed |
Spam (ads, malicious links) → delete right away, no warning needed. Record every moderation decision briefly for the other maintainers.
Open issues by label, time to first response, PRs waiting for review > 7 days, share of Q&A threads with an answer, weekly npm downloads, the size budget: see them at a glance in the repo's Insights tab and on the npm page.
Yugen UI © trandat1114 · MIT · Inspired by Microsoft Fluent 2, not a Microsoft product · Edit the wiki through the wiki/ folder · Lấy cảm hứng từ Microsoft Fluent 2, không phải sản phẩm của Microsoft · Sửa wiki qua thư mục wiki/
Use
Develop
Project
Tiếng Việt
- Trang chủ
- Bắt đầu
- Theme & token
- Câu hỏi thường gặp
- Kiến trúc
- Viết component
- Kiểm thử & CI
- Viết nội dung
- Nhánh & kênh phát hành
- Phát hành
- Cộng đồng & phân loại
- Sổ tay vận hành
Links