Repository navigation
Add China Merchants Bank reference architecture - #1976
mrbobbytables wants to merge 4 commits into
Conversation
Adds the reference architecture submitted to the End User TAB in cncf/tab#140: unified training and inference on Kubernetes across a heterogeneous accelerator pool, using Kubernetes, KEDA, Prometheus, HAMi and Fluid with Kueue admission control. - Hand-authored docs/architectures/china-merchants-bank/index.md with the architecture diagram colocated under images/ - Mirrored HAMi and Fluid icons from cncf/artwork - Regenerated data/architectures/catalog.json - Accept cncf/tab submission issues as a sourceIssue origin in the catalog contract test and CONTRIBUTING.md - Added project and vendor terms to the spelling dictionary Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: mrbobbytables <mrbobbytables@users.noreply.github.com>
✅ Deploy Preview for endusers ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
A reference architecture page may be authored directly from a source that is neither a cncf/architecture import nor a submission issue in this repository. validate:architectures now requires at most one of sourceCommit or sourceIssue instead of exactly one; the catalog contract test, e2e attribution check, CONTRIBUTING.md and ADR 0010 follow. The China Merchants Bank page keeps cncf/tab#140 as its sourceUrl and drops sourceIssue. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: mrbobbytables <mrbobbytables@users.noreply.github.com>
There was a problem hiding this comment.
Read the diff against the tree at head 6187aec and ran the downstream pipelines. One verified gap, otherwise this looks correct.
The members pipeline was not updated for the new "neither source" provenance shape, and this PR lands the first record that trips it.
scripts/generate-members.mjs:118-123forwards onlysourceCommitinto each member'sarchitecturesentry, andtests/members-data.test.mjs:233-247requires every such entry to carry a 40-hexsourceCommit.data/members.jsonis committed and nothing regenerates it in CI (per the comment atscripts/validate-members.mjs:16-19), so checks are green on this head. But I rannode scripts/generate-members.mjs && node --test tests/members-data.test.mjsat 6187aec and got:AssertionError: china-merchants-bank architecture is missing sourceCommit.- Consequence: the next contributor who runs
npm run generate:membershits a unit-test failure unrelated to their change, and until someone does regenerate, China Merchants Bank is absent from the member directory even though its architecture page ships.
Suggested fix in this PR: regenerate data/members.json, make generate-members.mjs forward whichever provenance field the record carries (or none), and relax tests/members-data.test.mjs:233-247 the same way tests/architecture-catalog-contract.test.mjs was relaxed here — assert the sha format only when sourceCommit is present.
Verified clean elsewhere:
scripts/validate-architectures.mjs:119— the relaxation from exactly-one to at-most-one is correct, andtests/validate-architectures.test.mjs:330-343covers both arms.tests/architecture-catalog-contract.test.mjs— the new third shape is handled consistently (isCommitSourcedgates the pinning assertions; the attribution test falls back tosourceUrl, which the page's blockquote atdocs/architectures/china-merchants-bank/index.md:33satisfies, including the CC BY 4.0 text the e2e spec asserts).- Both new SVGs (
static/img/cncf-projects/{hami,fluid}-*-icon-color.svg) contain no scripts, event handlers, foreignObject, or hrefs. - CONTRIBUTING.md and ADR 0010 match the new validator behaviour; catalog.json matches the page front matter.
— hive: agent=reviewer backend=copilot model=claude-fable-5 copilot=1.0.88
Cropped from the logo CMB serves on its own site (https://wwwcdn.cmbimg.cn/Images/logo.png): the mark and name without the product slogan beneath it. The catalog card shows it in place of the initials fallback. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: mrbobbytables <mrbobbytables@users.noreply.github.com>
generate-members.mjs always emitted sourceCommit for each member architecture entry, and members-data.test.mjs required it, so a page with no pinned cncf/architecture commit broke the members regeneration and was absent from data/members.json. Forward whichever provenance field the catalog record carries (sourceCommit, sourceIssue or neither), check each only when present, and regenerate members.json so China Merchants Bank appears in the member directory. Align the page's industries with the Title Case labels the other catalog records use so the directory facet groups it with Financial Services. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: mrbobbytables <mrbobbytables@users.noreply.github.com>
|
Confirmed the review finding: on this branch Fixed in 53fd6fd:
Also aligned the page's industries with the Title Case labels the other records use ( |
|
Scanner review (ACMM L5 — hold-gated mode; fork PR, comment only). Verified, no blockers:
One non-blocking observation: in 🐝 Hive Agent: — hive: agent=scanner backend=copilot model=kimi-k3 copilot=1.0.88 |
There was a problem hiding this comment.
Decision needed: @castrojo should decide whether the CMB organization logo cropped from https://wwwcdn.cmbimg.cn/Images/logo.png may be hosted here, or whether the page should ship with a default/placeholder image until CMB supplies one via cncf/tab#140.
I read the full diff against the tree at merge-base (e7ac6e8). The change is correct and self-consistent; the one thing I can't settle is logo licensing, which the PR body itself flags.
Verified correct:
scripts/validate-architectures.mjs:119— the relaxed check ('sourceCommit' in record && 'sourceIssue' in record) still rejects a page claiming two origins and now accepts neither;tests/validate-architectures.test.mjs:330-343covers both arms.scripts/generate-members.mjs:122-126forwards whichever provenance field is present via conditional spreads;tests/generate-members.test.mjs:586-610asserts the exact key sets for issue-sourced and direct-authored entries, andtests/members-data.test.mjs:243-261re-validates both shapes against the committeddata/members.json.tests/architecture-catalog-contract.test.mjs:222-227adds a fallback attribution assertion (page must cite itssourceUrl), so a direct-authored page can't silently lose its attribution line; the new page citescncf/tab#140in its leading blockquote as required.tests/e2e/architecture-detail.spec.js:68-72keeps the CC BY 4.0 assertion unconditional and gates only the commit/issue pin — consistent with the three provenance shapes.- Catalog, members.json, CONTRIBUTING.md and ADR 0010 all agree with the new "at most one" contract; ADR carries a dated amendment rather than a rewrite.
- Both mirrored SVG icons (
static/img/cncf-projects/hami-hami-icon-color.svg,fluid-fluid-icon-color.svg) contain no scripts, event handlers, or external references. - All checks are green at head 53fd6fd, including the full validate/e2e suites.
The one decision for a maintainer (the PR body raises it under "Notes for review"): docs/architectures/china-merchants-bank/images/logo.png is cropped from the logo CMB serves on its own website, not from CNCF-hosted artwork, and the page's CC BY 4.0 grant covers the submitted documentation, not CMB's trademark. The submission in cncf/tab#140 came from CMB themselves, which implies consent to be represented — but hosting a bank's mark taken from their CDN is a licensing call I shouldn't make. If that's acceptable (or the issue thread already covers it), this looks ready to me.
— hive: agent=reviewer backend=copilot model=claude-fable-5 copilot=1.0.88
Summary
Adds the reference architecture China Merchants Bank and Alibaba Cloud submitted to the End User TAB in cncf/tab#140: one Kubernetes-based control plane over a pool of nearly 10,000 heterogeneous accelerator cards, with separate operating policies for distributed training (Kueue admission, HAMi allocation, Fluid data access, Twinkle multi-tenant LoRA) and online inference (Prometheus and KEDA elasticity, RBG orchestration, Fluid-cached model weights).
Refs cncf/tab#140
Changes:
docs/architectures/china-merchants-bank/index.md, hand-authored from the issue text, with the architecture diagram colocated underimages/and descriptive alt text. ItssourceUrlis the TAB issue.static/img/cncf-projects/(both projects verified as CNCF incubating in the landscape). Kueue is a Kubernetes SIG subproject without cncf/artwork, so it is described in the narrative rather than listed as a project card.data/architectures/catalog.jsonregenerated withnpm run generate:architectures.sourceCommit/sourceIssueare now optional:validate:architecturesrequires at most one instead of exactly one, so a page authored directly from another source carries onlysourceUrl. The catalog contract test, the e2e attribution check,CONTRIBUTING.mdand ADR 0010 follow.scripts/generate-members.mjsforwards whichever provenance field a catalog record carries instead of always emittingsourceCommit;tests/members-data.test.mjschecks the sha / issue number only when present;data/members.jsonregenerated so CMB appears in the member directory (addresses the hivecommons review).hami,Qwen,verl,TTFT,TPOT,Shenzhen) added to.cspell.yml.Notes for review:
publishedandupdated.images/logo.png) is cropped from the logo CMB serves on its own site (https://wwwcdn.cmbimg.cn/Images/logo.png), mark and name only. CNCF hosts no CMB logo (the cncf.io case studies use a default card image), so if CMB would rather supply one, it can be swapped in via [Reference Architecture] One Heterogeneous Compute Pool, Two Workload Types: How China Merchants Bank Unified Training and Inference on Kubernetes tab#140.Verification
npm run generate:architectures,npm run validate:architectures,npm run validate:architecture-assets,npm run generate:members,npm run validate:membersnpm run test:unit:coverage:check(3743 pass)npm run check:format,check:spelling,check:markdown,check:lint,check:duplication,check:unusednpm run build:productionthennpx playwright test tests/e2e/architecture-detail.spec.js tests/e2e/member-directory.spec.js(19 pass)Checklist
CONTRIBUTING.md)
git commit -s)