diff --git a/CHANGELOG.md b/CHANGELOG.md index a75f7bbc..a5f40f83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,19 @@ Mọi thay đổi đáng kể của `8sync` ghi vào đây. Format theo [Keep a versioning theo [SemVer](https://semver.org). **8sync rule:** mỗi PR cập nhật mục `Unreleased`. ## [Unreleased] +### Added +- **An Architect room (solution architecture) in the full team.** `8sync ccc auto up --roles full` (HQ **Team đầy đủ**) now opens `arch` in place of the second builder. The team stays at 8 rooms. + - Room names `arch`, `architect`, `solution…` and `sa` map to it. It runs on Opus, on its own loop like `rd`. + - It holds no board lane, so a card labelled `arch` never waits on a room the team lacks. + - Cards labelled `arch` (new service, DB, queue, cache, scale, public API) get an ADR before they are built. The room runs `/sysdesign` (sections of The System Design Primer plus the stack's official docs, with back-of-envelope numbers), writes an ADR with at least 2 options and the trade-offs, then notes `ADR: …` on the card. The ADR goes where the repo already records decisions (`docs/adr/`, `DECISIONS.md`, `docs/*DECISION*.md`), else `docs/adr/card--.md`, never a parallel place. + - The lead moves an `arch` card to ready only after that note. With no `arch` room, the lead writes a short ADR itself. + - On cards in review, the room checks the diff against the ADR and `docs/adr/budgets.md`, and leaves an `[arch]` note. Review still decides. + - Every day it does three passes: + - a sourced tech radar (new versions, breaking changes, CVEs of the repo's own stack), saved to `su-code/research/radar-.md`; + - a measured scale-health pass (bundle or binary size, build and test time, slow queries, RAM, cold start, cost per request) against the budgets. Hard-coded limits (concurrency, pools, timeouts) go into the budgets with their reason; + - a drift pass: decisions that contradict each other or the code, stale service lists or diagrams, and drifted `file:line` references get one reconciling ADR or a doc fix. + - The worst bottleneck becomes an `arch` card with a measuring `--check`. With no measured number, no card is opened. + - `auto add --label arch` is accepted. HQ shows an "kiến trúc" chip on those cards and an Architect icon for the room. ## [0.100.8] — 2026-10-18 ### Fixed diff --git a/apps/hq-ui/components/hq/card-sheet.tsx b/apps/hq-ui/components/hq/card-sheet.tsx index b5562726..80b66e11 100644 --- a/apps/hq-ui/components/hq/card-sheet.tsx +++ b/apps/hq-ui/components/hq/card-sheet.tsx @@ -30,6 +30,7 @@ const LABEL_TONE: Record = { bug: LANE_TONE.blocked, feature: LANE_TONE.ready, qa: LANE_TONE.qa, + arch: LANE_TONE.review, }; export const LANE_VI: Record = { @@ -42,7 +43,7 @@ export const LANE_VI: Record = { blocked: "Blocked", }; -const LABEL_VI: Record = { bug: "bug", feature: "feature", qa: "qa" }; +const LABEL_VI: Record = { bug: "bug", feature: "feature", qa: "qa", arch: "kiến trúc" }; /** CSS variables a toned element reads: `--tone` for dots and tints, `--tone-ink` for text. */ export function toneOf(t: { tone: string; ink: string } | undefined): CSSProperties | undefined { diff --git a/apps/hq-ui/components/hq/guide.tsx b/apps/hq-ui/components/hq/guide.tsx index 3a4ee909..ee8799d3 100644 --- a/apps/hq-ui/components/hq/guide.tsx +++ b/apps/hq-ui/components/hq/guide.tsx @@ -31,7 +31,7 @@ export const GUIDE_STEPS: GuideStep[] = [ body: "Thêm thư mục ở \"Mở team ở repo mới\" bên trái (dự án đã có phòng tự hiện), rồi bấm \"Mở team\": 5 phòng nền chạy liên tục. " + "lead và rd dùng Opus (claude-opus-5-5) để chia việc, nghiên cứu; dev và review dùng Sonnet (claude-sonnet-5-5) để code, duyệt; qa dùng Haiku (claude-haiku-5-5) để kiểm nhanh. " + - "\"Team đầy đủ\" mở 8 phòng (thêm ba, dev2, ui), tốn quota gần gấp 8 lần một phòng.", + "\"Team đầy đủ\" mở 8 phòng (thêm ba, arch, ui; arch viết ADR cho card nhãn arch và làm tech radar mỗi ngày), tốn quota gần gấp 8 lần một phòng.", }, { icon: SendIcon, diff --git a/apps/hq-ui/components/hq/team-controls.tsx b/apps/hq-ui/components/hq/team-controls.tsx index 5d9cd81a..bd9b4a37 100644 --- a/apps/hq-ui/components/hq/team-controls.tsx +++ b/apps/hq-ui/components/hq/team-controls.tsx @@ -18,7 +18,7 @@ const DONE: Record = { }; const OPENING: Record = { up: "lead, dev, qa, review, rd", - full: "8 phòng: lead, ba, rd, dev, dev2, ui, qa, review", + full: "8 phòng: lead, ba, arch, rd, dev, ui, qa, review", clean: "dọn rác, khởi động lại phòng chạy bản cũ", down: "", }; @@ -54,7 +54,7 @@ export function TeamControls({ root, name, token, after }: { root: string; name: -