Skip to content

Add China Merchants Bank reference architecture - #1976

Open
mrbobbytables wants to merge 4 commits into
cncf:mainfrom
mrbobbytables:architecture/china-merchants-bank
Open

mrbobbytables wants to merge 4 commits into
cncf:mainfrom
mrbobbytables:architecture/china-merchants-bank

Conversation

@mrbobbytables

@mrbobbytables mrbobbytables commented Oct 28, 2026 •

Copy link
Copy Markdown
Member

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:

  • New page docs/architectures/china-merchants-bank/index.md, hand-authored from the issue text, with the architecture diagram colocated under images/ and descriptive alt text. Its sourceUrl is the TAB issue.
  • HAMi and Fluid icons mirrored from cncf/artwork into 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.json regenerated with npm run generate:architectures.
  • sourceCommit / sourceIssue are now optional: validate:architectures requires at most one instead of exactly one, so a page authored directly from another source carries only sourceUrl. The catalog contract test, the e2e attribution check, CONTRIBUTING.md and ADR 0010 follow.
  • scripts/generate-members.mjs forwards whichever provenance field a catalog record carries instead of always emitting sourceCommit; tests/members-data.test.mjs checks the sha / issue number only when present; data/members.json regenerated so CMB appears in the member directory (addresses the hivecommons review).
  • Project and vendor terms (hami, Qwen, verl, TTFT, TPOT, Shenzhen) added to .cspell.yml.

Notes for review:

Verification

  • npm run generate:architectures, npm run validate:architectures, npm run validate:architecture-assets, npm run generate:members, npm run validate:members
  • npm run test:unit:coverage:check (3743 pass)
  • npm run check:format, check:spelling, check:markdown, check:lint, check:duplication, check:unused
  • npm run build:production then npx playwright test tests/e2e/architecture-detail.spec.js tests/e2e/member-directory.spec.js (19 pass)

Checklist

  • Content speaks to end users (see
    CONTRIBUTING.md)
  • Commits are DCO-signed (git commit -s)
  • Site builds without new warnings

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>
@netlify

netlify Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for endusers ready!

Name Link
🔨 Latest commit 53fd6fd
🔍 Latest deploy log https://app.netlify.com/projects/endusers/deploys/6ae279e062568b12ea0131a7
😎 Deploy Preview https://deploy-preview-1976--endusers.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

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>

@hivecommons-hive hivecommons-hive Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-123 forwards only sourceCommit into each member's architectures entry, and tests/members-data.test.mjs:233-247 requires every such entry to carry a 40-hex sourceCommit.
  • data/members.json is committed and nothing regenerates it in CI (per the comment at scripts/validate-members.mjs:16-19), so checks are green on this head. But I ran node scripts/generate-members.mjs && node --test tests/members-data.test.mjs at 6187aec and got: AssertionError: china-merchants-bank architecture is missing sourceCommit.
  • Consequence: the next contributor who runs npm run generate:members hits 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, and tests/validate-architectures.test.mjs:330-343 covers both arms.
  • tests/architecture-catalog-contract.test.mjs — the new third shape is handled consistently (isCommitSourced gates the pinning assertions; the attribution test falls back to sourceUrl, which the page's blockquote at docs/architectures/china-merchants-bank/index.md:33 satisfies, 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

mrbobbytables and others added 2 commits October 28, 2026 17:31
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>
@mrbobbytables

Copy link
Copy Markdown
Member Author

Confirmed the review finding: on this branch node scripts/generate-members.mjs && node --test tests/members-data.test.mjs failed with china-merchants-bank architecture is missing sourceCommit, and the entry was absent from data/members.json.

Fixed in 53fd6fd:

  • scripts/generate-members.mjs forwards whichever provenance field the catalog record carries (sourceCommit, sourceIssue or neither) instead of always emitting sourceCommit.
  • tests/members-data.test.mjs requires id, title and sourceUrl, rejects both provenance fields together, and checks the sha / issue-number format only when the field is present.
  • tests/generate-members.test.mjs covers the issue-sourced and direct-authored shapes.
  • data/members.json regenerated; China Merchants Bank now appears in the member directory.

Also aligned the page's industries with the Title Case labels the other records use (Financial Services, Banking).

@hivecommons-hive

Copy link
Copy Markdown
Contributor

Scanner review (ACMM L5 — hold-gated mode; fork PR, comment only).

Verified, no blockers:

  • Links resolve: cncf.io/projects/hami/, cncf.io/projects/fluid/, and cncf/tab#140 all return 200. HAMi and Fluid icon filenames follow the existing <project>-<project>-icon-color.svg convention.
  • Contract consistency: the exactly one → at most one provenance change is applied coherently across validate-architectures.mjs, generate-members.mjs, the catalog contract test, the members-data test, the e2e attribution check, CONTRIBUTING.md, and ADR 0010 (with a dated amendment note). The generator's conditional spread means direct-authored records emit no provenance key rather than a null, matching the new tests.
  • Member directory precedent: membershipStatus: "unknown" is already used by 10 existing entries in data/members.json, so the CMB entry is consistent.
  • CI: all checks green; merge state clean.

One non-blocking observation: in tests/e2e/architecture-detail.spec.js the attribution assertion now has branches for sourceCommit and sourceIssue but no else — for a direct-authored record the e2e test checks only that the blockquote contains CC BY 4.0, not that it cites sourceUrl. The unit contract test (each doc page attributes the source its record came from) does cover the sourceUrl branch, so coverage exists; noting it only in case a future direct-authored page wants browser-level attribution verification too.


🐝 Hive Agent: scanner | Instance: hosted-available-lke648397-260827-5n31 | SHA: unknown

— hive: agent=scanner backend=copilot model=kimi-k3 copilot=1.0.88

@hivecommons-hive hivecommons-hive Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-343 covers both arms.
  • scripts/generate-members.mjs:122-126 forwards whichever provenance field is present via conditional spreads; tests/generate-members.test.mjs:586-610 asserts the exact key sets for issue-sourced and direct-authored entries, and tests/members-data.test.mjs:243-261 re-validates both shapes against the committed data/members.json.
  • tests/architecture-catalog-contract.test.mjs:222-227 adds a fallback attribution assertion (page must cite its sourceUrl), so a direct-authored page can't silently lose its attribution line; the new page cites cncf/tab#140 in its leading blockquote as required.
  • tests/e2e/architecture-detail.spec.js:68-72 keeps 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

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant