feat: complete OINK site integration - #493
Conversation
- integrate reviewed OINK core, Community and ASF downloads\n- include fixed staging push workflow targeting asf-staging-oink\n- preserve five-version aggregate and click-gated AI contracts\n- publish only after local and independent review evidence
Refresh the reviewed staging tree with the current organization candidate.\nCarry consent, overflow navigation, rendered download guards, and review fixes.
Delivery notesThis PR is the final Apache delivery candidate after organization PR #36. It includes the reviewed OINK integration, the EN/CN HStore keyword fix, rendered ASF download contracts, version overflow on desktop/landing/mobile docs drawer, dynamic sidebar behavior, and Kapa consent gating. Staging acceptance is intentionally pending Apache review/merge because the versioned build workflow uses Apache Kapa / ASF privacy TODO
|
Keep the trusted planner on master while candidate build jobs use the reviewed staging ref.\nPreserve artifact-only publishing and assert the split in the workflow contract.
Allow staging-next to load the reviewed candidate workflow while retaining master-only production refresh.
Attach current staging screenshots for desktop/mobile navigation, search, and community surfaces.\nKeep the evidence under GitHub metadata without changing site content.
|
Staging is now published from the reviewed candidate ref: run 35304140256 passed prepare, all five builds, aggregate, E2E, visual, deploy and publish. Current staging metadata reports |
|
Kapa dashboard follow-up: the website integration |
Connect the Apache master phase-one squash to the staging candidate history. Preserve the previously published candidate tree exactly. Retain organization integration parity apart from screenshots and the organization-only workflow.
Pin staging consumers to the prepared immutable source SHA. Restore master-only privileged dispatch validation. Fix reviewed download, heading, code fence, keyboard, and roster edge cases.
|
Follow-up review fixes pushed in
The PR remains open/non-Draft. Current CI: https://github.com/hugegraph/hugegraph-doc/actions/runs/35305995001 |
Render Markdown table captions through the Hugo table hook. Add the missing REST API index description for page metadata. Verify both localized vertex pages emit caption elements.
|
Staging note: the latest secure candidate is |
|
Current PR candidate Run: https://github.com/apache/hugegraph-doc/actions/runs/35306257205 |
Close the dynamic sidebar preview when the pointer leaves the panel. Cover edge-to-panel-to-content behavior in the Chromium platform test. Preserve focus-driven expansion and keyboard restore behavior.
Remove the simplified table override so OINK keeps scroll regions and table semantics. Retain caption rendering through the native OINK table renderer. Wait for the sidebar pointer cooldown before testing hover expansion.
|
Organization integration PR #36 has now been merged at |
|
Kapa preparation update (no activation yet): the exact candidate corpus was generated and validated from org
The dedicated source-group IDs and website allowlist are prepared. Kapa activation remains pending because the browser automation surface cannot supply the native file picker; no source was deployed, and global GitHub sources remain excluded from the initial corpus. |
|
The candidate is ready for Apache maintainer review:
Please review the candidate when convenient; no production merge or branch-protection bypass has been performed. |
There was a problem hiding this comment.
🟡 Changes recommended
One or more issues must be addressed before approval.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Completes OINK integration across the bilingual Hugo site, including navigation, downloads, community surfaces, AI consent, search metadata, and immutable versioned delivery.
Changes:
- Added responsive shell, version overflow, keyboard-scrollable downloads, and consent-gated Ask AI.
- Added data-driven ASF downloads and offline-validated bilingual community rosters.
- Strengthened documentation metadata, E2E/UI coverage, and workflow source immutability.
File summaries
| File | Description |
|---|---|
| tests/ui-ai/ui-contract.test.cjs | Updated as part of this pull request. |
| tests/ui-ai/kapa-adapter.test.cjs | Updated as part of this pull request. |
| tests/e2e/workflow-contract.test.cjs | Updated as part of this pull request. |
| tests/e2e/versioning.spec.js | Updated as part of this pull request. |
| tests/e2e/platform.spec.js | Updated as part of this pull request. |
| tests/e2e/ai.spec.js | Updated as part of this pull request. |
| tests/e2e/accessibility.spec.js | Updated as part of this pull request. |
| scripts/test_download_data.py | Updated as part of this pull request. |
| scripts/test_community_roster.py | Updated as part of this pull request. |
| scripts/fixtures/community_search_queries.json | Updated as part of this pull request. |
| scripts/community_roster.py | Updated as part of this pull request. |
| scripts/community_roster.md | Updated as part of this pull request. |
| layouts/community/landing.md | Updated as part of this pull request. |
| layouts/_shortcodes/asf-downloads.html | Updated as part of this pull request. |
| layouts/_partials/version-menu-links.html | Updated as part of this pull request. |
| layouts/_partials/shell/sidebar-panel.html | Updated as part of this pull request. |
| layouts/_partials/navbar.html | Updated as part of this pull request. |
| layouts/_partials/landing/sections/community-members.html | Updated as part of this pull request. |
| layouts/_partials/hooks/body-end.html | Updated as part of this pull request. |
| layouts/_partials/community/members.md | Updated as part of this pull request. |
| layouts/_partials/community/members.html | Updated as part of this pull request. |
| layouts/_partials/asf-downloads.html | Updated as part of this pull request. |
| i18n/zh-CN.yaml | Updated as part of this pull request. |
| i18n/en.yaml | Updated as part of this pull request. |
| data/landing/community/en.yaml | Updated as part of this pull request. |
| data/landing/community/cn.yaml | Updated as part of this pull request. |
| data/downloads/asf.json | Updated as part of this pull request. |
| data/community/roster.json | Updated as part of this pull request. |
| data/community/github-map.json | Updated as part of this pull request. |
| content/en/docs/quickstart/toolchain/hugegraph-loader.md | Updated as part of this pull request. |
| content/en/docs/quickstart/toolchain/hugegraph-hubble.md | Updated as part of this pull request. |
| content/en/docs/quickstart/hugegraph/hugegraph-server.md | Updated as part of this pull request. |
| content/en/docs/quickstart/hugegraph/hugegraph-pd.md | Updated as part of this pull request. |
| content/en/docs/quickstart/hugegraph/hugegraph-hstore.md | Updated as part of this pull request. |
| content/en/docs/quickstart/computing/hugegraph-computer.md | Updated as part of this pull request. |
| content/en/docs/introduction/_index.md | Updated as part of this pull request. |
| content/en/docs/download/download.md | Updated as part of this pull request. |
| content/en/docs/config/config-guide.md | Updated as part of this pull request. |
| content/en/docs/config/config-authentication.md | Updated as part of this pull request. |
| content/en/docs/clients/restful-api/vertex.md | Updated as part of this pull request. |
| content/en/docs/clients/restful-api/_index.md | Updated as part of this pull request. |
| content/en/docs/clients/_index.md | Updated as part of this pull request. |
| content/cn/docs/quickstart/toolchain/hugegraph-loader.md | Updated as part of this pull request. |
| content/cn/docs/quickstart/toolchain/hugegraph-hubble.md | Updated as part of this pull request. |
| content/cn/docs/quickstart/hugegraph/hugegraph-server.md | Updated as part of this pull request. |
| content/cn/docs/quickstart/hugegraph/hugegraph-pd.md | Updated as part of this pull request. |
| content/cn/docs/quickstart/hugegraph/hugegraph-hstore.md | Updated as part of this pull request. |
| content/cn/docs/quickstart/computing/hugegraph-computer.md | Updated as part of this pull request. |
| content/cn/docs/introduction/_index.md | Updated as part of this pull request. |
| content/cn/docs/download/download.md | Updated as part of this pull request. |
| content/cn/docs/config/config-guide.md | Updated as part of this pull request. |
| content/cn/docs/config/config-authentication.md | Updated as part of this pull request. |
| content/cn/docs/clients/restful-api/vertex.md | Updated as part of this pull request. |
| content/cn/docs/clients/restful-api/_index.md | Updated as part of this pull request. |
| content/cn/docs/clients/_index.md | Updated as part of this pull request. |
| assets/scss/community-members.scss | Updated as part of this pull request. |
| assets/scss/_styles_project.scss | Updated as part of this pull request. |
| assets/js/kapa-adapter.js | Updated as part of this pull request. |
| assets/js/hugegraph-shell.js | Updated as part of this pull request. |
| .gitignore | Updated as part of this pull request. |
| .github/workflows/hugo.yml | Updated as part of this pull request. |
Review details
Suppressed comments (4)
content/cn/docs/clients/restful-api/_index.md:6
- The English counterpart adds a page description to this REST API landing page, but the Chinese counterpart does not. That leaves
/cn/docs/clients/restful-api/without the SEO metadata introduced for the bilingual surface; add the equivalent Chinese description here to keep the paired pages consistent.
search_keywords: [HugeGraph REST API, RESTful API, OpenAPI]
search_boost: 1.7
i18n/en.yaml:21
- This says every package on the page is an official ASF release, but the rendered table includes binary packages. The existing release-policy page says convenience binaries are not Apache Releases and only the source archive is official (
content/en/community/maturity.md:48), so this new note misstates the status users need when verifying downloads; distinguish source releases from convenience binaries.
i18n/zh-CN.yaml:257 - This says every package on the page is an official ASF release, but the rendered table includes binary packages. The existing release-policy page says convenience binaries are not Apache Releases and only the source archive is official (
content/en/community/maturity.md:48), so this Chinese note misstates the status users need when verifying downloads; distinguish source releases from convenience binaries.
scripts/community_roster.py:258 - The VP8X flag mask here is not the metadata mask:
0x2Dclears the alpha and animation bits while leaving the ICC and XMP bits set. A transparent avatar can therefore lose its alpha flag, and stripped files still advertise removed metadata; clear only the ICC/EXIF/XMP bits (0x1A) and update the corresponding fixture.
- Files reviewed: 60/69 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
- sync the reviewed ASF GitHub roster and public names\n- keep only mapped members actionable with local GitHub avatars\n- move project members above community cards with responsive card styling\n- verify HTML, print, Markdown, accessibility, and Chromium parity
- show the reviewed public-name cards in the EN and CN evidence\n- keep visual acceptance links aligned with the Apache delivery PR
- attach the community header hook to the rendered section\n- keep the larger title treatment scoped to Project members\n- revalidate the current community and accessibility surfaces
- label mapped GitHub cards with the reviewed public name\n- keep the profile destination explicit for screen readers\n- assert the accessible name in the Chromium community contract
bitflicker64
left a comment
There was a problem hiding this comment.
Blocking: no. Summary: The download data, workflow SHA pinning, consent gate and version overflow check out, and the generated download links match the old hand-written tables exactly. One user-facing wording issue on the download page (binaries described as official ASF releases) and two small accessibility/i18n gaps remain. Separately, .github/oink-evidence/ adds 14 PR-only screenshots (~1.5 MB, one exact duplicate: en-community-desktop-light.webp == en-community-after-desktop-light.webp) that nothing in the site references; could they live on a side branch instead of landing on master? Evidence: git diff 5748d372..2afe924; generated all 31 artifact names from data/downloads/asf.json and diffed them against the URLs in the old EN/CN download.md (no differences), HEAD-checked every .sha512 on downloads.apache.org (all 200); compared the new note against content/en/community/maturity.md RE40; offline Hugo build with an empty HUGO_CACHEDIR and GOPROXY=off still resolves github.com/pgsty/oink (Hugo applies its own module.proxy), so the cold-cache failure raised on test_community_roster.py did not reproduce; latest-head CI (run 35328375269) is green.
- use reviewed GitHub logins by default with explicit English-name overrides\n- map Yan Zhang to zyxxoo and refresh the local avatar roster\n- merge each member card into one surface and reduce section whitespace\n- verify roster, rendered parity, responsive UI, and accessibility contracts
- make each member card fill its grid column\n- keep the single background and border continuous across the card\n- retain the compact section spacing and responsive layout
- show the login-based labels and unified card surfaces\n- capture the reduced desktop whitespace and mobile layout\n- keep the focused PR screenshots aligned with the candidate
TODO — ASF Kapa / hCaptcha privacy and CSP follow-upThis is recorded separately so it does not block the OINK implementation or dedicated staging validation. Related Apache examples found today:
Follow-up questions for ASF Privacy/Infra:
Current implementation keeps the native search path independent, requires an explicit same-origin consent action before any third-party request, and leaves Kapa source-group activation plus production privacy/CSP approval as a clearly tracked acceptance item. |
- honor the requested PMC display order\n- localize Community GitHub accessible names\n- clarify ASF source and binary release wording\n- repair heading levels and teardown-safe Chromium routing
- increase the site-owned search panel height\n- keep the Ask AI tail visible during list scrolling\n- leave the OINK theme source unchanged
- trigger the consent-gated AI flow on Enter when local results are empty\n- explain the AI fallback in EN and CN\n- add the verified JackyYangPassion avatar mapping
- describe ASF record provenance plainly\n- link the HugeGraph Committer guide\n- explain provider benefit programs with eligibility caveats
- expand Start and Components on docs home - preserve explicit sidebar choices across reloads - rename Operations to Configuration in Chinese navigation - keep Community Markdown copy aligned with HTML
- add concise roster guidance links - combine security reporting and policy into one entry - keep English and Chinese community navigation concise
- align the dynamic preview with the navbar edges - remove the stitched header offset while preserving collapse behavior - assert desktop preview geometry in end-to-end coverage
- keep the committer guide in the roster lead - shorten provider benefit wording - retain eligibility and terms guidance
bitflicker64
left a comment
There was a problem hiding this comment.
Blocking: yes (the first inline comment: the required deploy check is red). Summary: The latest-head e2e job fails on a stale sidebar storage-key contract, so the required deploy gate is red and no Chromium run has completed on the eight commits since 225537d. The Community page also adds a committer-benefits claim that its linked ASF page does not support; two smaller issues are inline. Evidence: gh pr checks 493 (run 35381414495), node --test tests/ui-ai/*.test.cjs at 401ed8c, a fetch of infra.apache.org/committers.html, a local Hugo build with tests/e2e/ai-enabled.yaml, and a node repro of kapa-adapter.js init().
- link the toolchain card to local docs - link the community card to ASF Slack - refine committer guidance and eligibility copy
- align the static contract with sidebar persistence v2
bitflicker64
left a comment
There was a problem hiding this comment.
Blocking: no. Summary: 90707ca fixes the stale sidebar key contract and the pipeline is green again, but 4dcbba3 points the CN WeChat card on the home page at Slack (inline). The earlier threads on the committer-resources line, the kapa-adapter.js null guard and the roster doc are still open at this head. 4dcbba3 reworded the CN committer line, but it still names vendors, now says committers are eligible without the per-program terms qualifier, still links the Committers' FAQ, and no longer matches the unchanged EN line. Evidence: gh pr checks 493 (run 35424426279, every job passes, publish skipped as expected), node --test tests/ui-ai/*.test.cjs at 90707ca (24/24), local hugo build of / and /cn/ at 90707ca.
- keep the guide label focused on the link - render the Apache nomination note outside the link
- update CN committer guide copy to (注: 如何成为 HugeGraph Committer) - align CN home Slack card title and icon with EN - make committer resources copy vendor-neutral in community landing - guard search shell elements in kapa-adapter.js when search is absent - update community_roster.md unmapped members documentation - add unit test covering adapter initialization without search shell
- restore WeChat card on CN home pointing to introduction community anchor - keep ASF Slack channel link in CN WeChat card description - drop WeChat mention from EN Slack card - synchronize EN community committer guide copy with (Note: How to become a HugeGraph Committer) - add explicit #community anchors to introduction docs in both EN and CN
What developers get
This PR completes the OINK site integration on Apache HugeGraph documentation.
Traceability: closes #468; evidence and design checkpoints are tracked in #467. Full-content search remains deferred in #471; upstream OINK proposals are #40 and #41.
latest,1.7, and1.5visible; older releases are in an accessible…menu with stable locale/version routes.ai_search.enabled: false) pending source-group configuration.Review Resolutions Addressed
/cn/docs/introduction/#communityanchor with Slack link retained; English homepage features Slack card without WeChat mention.kapa-adapter.jsfor pages without search shell, preserved loading text until results resolve, and supported versioneddocsRootpaths in sidebar expansion..github/oink-evidence/), leaving zero binary overhead in repository history. Excluded organization-internal testing workflows.Validation Results
Focused Visual Evidence
These screenshots document the changed surfaces in this PR. Desktop captures are the primary review view at 1440px; mobile captures are at 390px.
Desktop — before and after
Community roster
The comparison shows the move to public names, reviewed GitHub avatars/links, static unmapped cards, four-column cards, and the removal of the temporary Chair label.
Ask AI integration
The search capture shows the native search → Ask AI entry. The consent capture shows the same-origin disclosure before any Kapa request; it is intentionally a consent-boundary screenshot, not a claim of a live Kapa answer.
ASF downloads
The desktop download view shows the latest ASF mirror, ASC, and SHA512 columns introduced by the download work.
Mobile & Dark Theme
Post-Merge TODOs (后续待办事项)
hugo.yamlwith the production Source Group IDs (ai_search.kapa.source_group_id/source_group_id_cn).kapa.aiandhcaptcha.comdomains.ai_search.enabledtotrueinhugo.yamlvia a single-line toggle PR.