Rule handbook metadata
- Rule
DET.NAV.BREADCRUMB· lanedeterministic- Page status
- current
- page_version
610d62ebbaa882d550287f93d3c54f760699a7a05cd6c762dc0977d9e72fb1c3- generated_at
- 2026-05-25T15:30:00.000Z
- registry_fingerprint
aef1de6082cf0f50d463783c843dee0ffb9132fbd5ed4ea6e5bb3f031f359c72
How this rule is fixed
Pilot deterministic fixer: handbook_after · harness mode standalone · verify expect_rule_clean.
- Harness:
apply-harness-fixture-remediation.pycopies the After example HTML from this handbook page onto the defect fixture, theninvoke-det-ruleset-remediation-verify.shre-audits and expects zero findings for this rule. - Production sites:
run-website-ux-remediation-loop.shrunshandbook_html_patch(HTML patches inlib/ux-deterministic-fixers/fixers/patches/) before invoking the Cursor agent when the quality gate still fails.
Detection module: docs/design/ux-audit/deterministic-design-rules.md#det-nav-breadcrumb. Scroll down for Before / After examples and Evidence and remediation steps.
Purpose
Readers on doc and product hubs need a compact where am I trail separate from primary rails (Ksr sidebar) and page titles. Kitchen Sink layouts (showcase_page, handbook_page, product shells) contract Kbc — .ks-doc-breadcrumb with hash="Kbc" and data-ks-hash="Kbc" — inside header.site-header masthead bands.
This deterministic rule runs during the metrics phase. It sets requiresBreadcrumb=true when the page is not home and any doc-hub signal is present:
- Layout slug in
layout-handbook,layout-chapter,layout-product,layout-showcase,layout-listing,layout-gallery, orlayout-split([data-ks-type="layout"]/data-ks-name). - Visible doc sidebar:
.forge-sidebar,#ks-sidebar-aside,.fs-sidebar, oraside[data-ks-hash="Ksr"]/aside[data-ks-name="doc-sidebar"]. - Visible showcase masthead:
.site-header .site-header-content.
Exempt: layout-landing and layout-marketing (and home /, /index.html).
A page passes when a visible breadcrumb root matches .ks-doc-breadcrumb, [data-ks-hash="Kbc"], nav[aria-label="breadcrumb"], or Bootstrap .breadcrumb inside header/main with meaningful content (linked trail, two or more items, or separator-delimited path text). When breadcrumb is present, Kbc catalog markers must also appear on the root.
Plan: Map layout contracts to breadcrumb emission before shipping HTML. Do: Use render_breadcrumbs() or _showcase_header() defaults in components/layouts.py. Check: navBreadcrumbReport.requiresBreadcrumb && breadcrumbPresent && kbcMarkerPresent. Adjust: Add Kbc to masthead; do not rely on sidebar labels alone for orientation.
Passing signals
nav.ks-doc-breadcrumbwithhash="Kbc",data-ks-hash="Kbc",data-ks-type="chrome-region",data-ks-name="doc-breadcrumb"sits in.site-header-contentabove or beside the page title.- Ordered trail via
<ol class="breadcrumb">with.breadcrumb-itemlinks for upstream crumbs andaria-current="page"on the terminal crumb — matchesrender_breadcrumbs()incomponents/components.py. - Default showcase header fallback emits Home to current page when
breadcrumb_htmlis empty (_showcase_headerinlayouts.py). nav[aria-label="Breadcrumb"]with visible linked segments passes even without the Kbc class, but Kbc markers must still be present to avoid the secondary catalog finding.- Home (
/,/index.html) andlayout-landing/layout-marketingpages correctly skip the requirement (requiresBreadcrumb=false).
Failing signals
missing_breadcrumb: Doc hub signals fire (layout:layout-handbook,doc-sidebar, orshowcase-header) but no visible.ks-doc-breadcrumb,nav[aria-label*="breadcrumb"], or.breadcrumbwith meaningful content — readers see only sidebar nav and anh1title.- Empty or decorative strip: breadcrumb root exists but has no links, fewer than two meaningful words, and no separators (
/,›,→). - Hidden or zero-size chrome: breadcrumb node present in DOM but
display:none,visibility:hidden, or bounding box below visibility thresholds. kbc_marker_missing: Visible breadcrumb uses genericnav[aria-label="breadcrumb"]or.breadcrumbwithouthash="Kbc"/data-ks-hash="Kbc"on.ks-doc-breadcrumb— orientation works but visual catalog contract is unmet.- Landing/marketing exemption misapplied: deep handbook page tagged
layout-marketingsolely to skip breadcrumb while still shipping Ksr sidebar chrome.
Before example
Before (failing example)
F Forge
Handbook
Governance patterns
Doc hub without Kbc breadcrumb — auditor flags missing_breadcrumb.
Failing KS markup: handbook-style shell with Ksr sidebar and .site-header-content, but masthead shows only the chapter title — no Kbc orientation strip.
After example
After (passing example)
F Forge
Handbook
Governance patterns
Kbc breadcrumb present — breadcrumbPresent and kbcMarkerPresent both true.
Passing KS markup: same handbook anatomy with contracted Kbc trail in the masthead — upstream links plus current page, catalog markers on the root.
Evidence and remediation
- Confirm hub signals — inspect
navBreadcrumbReport.docHubSignals(layout:…,doc-sidebar,showcase-header, orlanding-exempt). Home and pure marketing shells should not require breadcrumb. - Emit Kbc in layout Python — pass
breadcrumb_htmlintoshowcase_page/handbook_page, or callrender_breadcrumbs([("index.html", "Home"), (None, page_title)])fromcomponents/components.py. - Preserve catalog markers — root must include
hash="Kbc"anddata-ks-hash="Kbc"perdocs/design/catalog/chrome/Kbc-doc-breadcrumb.mdandchrome_region_attrs("doc-breadcrumb"). - Keep content meaningful — at least one upstream link or separator-delimited path; terminal crumb uses
aria-current="page"; decorative separators usearia-hidden="true"when not in link text. - Rebuild and re-audit — run
python3 generator/build-showcase.pyfor KS surfaces, thennode tools/website-ux-auditor/analyze-website-ux.mjsorauditor-tests/invoke-det-ruleset-harness.sh --only-rule DET.NAV.BREADCRUMB. - Harness fixtures — defect/pass pairs live under
auditor-tests/viagenerator/build_rule_defect_fixtures.py; compare HTML against the before/after blocks above.
Finding text (when failing): Doc or product hub page is missing visible breadcrumb orientation chrome (Kbc / .ks-doc-breadcrumb) or Visible doc breadcrumb chrome lacks Kbc catalog markers — severity warn, area informationArchitecture / visual-catalog.
Related rules
DET.LANDMARKS.REQUIRED— breadcrumbnavcomplements sidebarnavlandmarks; both sit outsidemain.DET.CHROME.BOUNDARY— Kbc stays visually lighter than Ksr rails; orientation chrome must not replace primary wayfinding.DET.APP.PERSISTENT_CHROME— breadcrumb belongs in stable masthead chrome across in-app routes.DET.NAV.DEPTH— deep IA paths need breadcrumb when sidebar depth alone is insufficient on condensed viewports.DET.NAV.DEDUP— do not duplicate the full sidebar tree inside the breadcrumb strip.DET.HASH.MARKERS— Kbc roots require pairedhash/data-ks-hashmarkers on emitted HTML.AI.APP.WORKFLOW_CONTINUITY— judgment layer for breadcrumb labels that read as generic "Workspace" on every route.