From 806e482a8ab96c89194615a48ceaee85009f58db Mon Sep 17 00:00:00 2001 From: Nish <257724087+nish3451@users.noreply.github.com> Date: Fri, 14 Aug 2026 09:14:20 +0530 Subject: [PATCH 1/2] fix(public): repair homepage managed-service heading hierarchy (H2->H3) The homepage managed-service section jumped from the H2 section title straight to an H4 feature heading, skipping H3 and breaking the public heading-hierarchy check that covers every other page. Promote the feature heading to H3 (matching the sibling #teams block) and keep the former h4 scale via .team-feature :is(h3, h4) so the block renders identically. Extend scripts/test-public-heading-hierarchy.mjs with homepage coverage: the full outline must have no jump greater than one, and the #managed-service section must open H2 then H3. Also assert the .team-feature :is(h3, h4) CSS pairing. Co-authored-by: CommandCodeBot --- public/index.html | 2 +- public/styles.css | 9 ++++- scripts/test-public-heading-hierarchy.mjs | 41 +++++++++++++++++++++-- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/public/index.html b/public/index.html index 9643fca9..2ea3c1d1 100644 --- a/public/index.html +++ b/public/index.html @@ -295,7 +295,7 @@

The Website Correction.

Website Correction

-

Fit and scope are reviewed by a human first.

+

Fit and scope are reviewed by a human first.

Apply through the contact page's application route, share your site and the page that matters most, and a person reviews diff --git a/public/styles.css b/public/styles.css index 49790836..7c825fc5 100644 --- a/public/styles.css +++ b/public/styles.css @@ -428,10 +428,17 @@ h4 { box-shadow: var(--shadow); } -.team-feature h4 { +/* The managed-service feature heading is a semantic H3 (section outline is + H2 -> H3), kept at the former h4 scale and margin so the block renders + identically to before the hierarchy repair. */ +.team-feature :is(h3, h4) { margin-top: 12px; } +.team-feature h3 { + font-size: clamp(1.55rem, 1.8vw, 2rem); +} + .team-feature p { margin: 16px 0 0; max-width: 30rem; diff --git a/scripts/test-public-heading-hierarchy.mjs b/scripts/test-public-heading-hierarchy.mjs index 2120d61b..01c8b0e4 100644 --- a/scripts/test-public-heading-hierarchy.mjs +++ b/scripts/test-public-heading-hierarchy.mjs @@ -18,7 +18,9 @@ const ok = (cond, msg) => { } } -// The exact public pages covered by the heading-hierarchy finding. +// The exact public pages covered by the card-heading finding. The homepage +// (public/index.html) is covered separately in section D below, including +// the managed-service section's H2 -> H3 outline. const AFFECTED_PAGES = [ "public/contact/index.html", "public/promptly/index.html", @@ -87,7 +89,42 @@ ok( "the old .info-card h3-only rule is replaced by the shared :is(h2, h3) rule" ) -console.log("C. npm test/ci wiring") +console.log("D. homepage managed-service heading hierarchy") +const home = read("public/index.html") +const homeLevels = headingLevelsOf(home) +ok(homeLevels.filter((l) => l === 1).length === 1, "homepage has exactly one H1") +ok(homeLevels[0] === 1, "the H1 is the first heading in the homepage outline") +let homeJumps = 0 +for (let i = 1; i < homeLevels.length; i++) { + if (homeLevels[i] - homeLevels[i - 1] > 1) { + homeJumps++ + console.error(` bad transition H${homeLevels[i - 1]} -> H${homeLevels[i]}`) + } +} +ok(homeJumps === 0, "homepage outline has no heading-level jump greater than one") +const serviceStart = home.indexOf('

", serviceStart) + const serviceLevels = headingLevelsOf(home.slice(serviceStart, serviceEnd)) + ok( + serviceLevels.length >= 2 && serviceLevels[0] === 2 && serviceLevels[1] === 3, + `managed-service section starts H2 then H3 (got H${serviceLevels.join(" -> H")})` + ) +} + +console.log("E. managed-service heading CSS pairing") +const teamRuleStart = css.indexOf(".team-feature :is(h3, h4) {") +ok(teamRuleStart !== -1, "styles.css defines .team-feature :is(h3, h4) {") +const teamRuleEnd = css.indexOf("}", teamRuleStart) +const teamRuleBody = teamRuleStart === -1 ? "" : css.slice(teamRuleStart, teamRuleEnd) +ok(teamRuleBody.includes("margin-top: 12px"), "team-feature rule keeps margin-top: 12px") +ok( + /\.team-feature h3\s*{[^}]*font-size: clamp\(1\.55rem, 1\.8vw, 2rem\)/.test(css), + ".team-feature h3 keeps the former h4 heading scale" +) + +console.log("F. npm test/ci wiring") const pkg = JSON.parse(read("package.json")) ok( pkg.scripts.test.includes("test-public-heading-hierarchy.mjs"), From b502189ad437212e3b10964132f73ffba3a5d219 Mon Sep 17 00:00:00 2001 From: Nish <257724087+nish3451@users.noreply.github.com> Date: Fri, 14 Aug 2026 09:14:48 +0530 Subject: [PATCH 2/2] docs(lane): lane 1 report for homepage managed-service heading hierarchy Co-authored-by: CommandCodeBot --- ...ix-homepage-managed-service-h2-h3-lane1.md | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 .lane/reports/fix-homepage-managed-service-h2-h3-lane1.md diff --git a/.lane/reports/fix-homepage-managed-service-h2-h3-lane1.md b/.lane/reports/fix-homepage-managed-service-h2-h3-lane1.md new file mode 100644 index 00000000..0ac7f798 --- /dev/null +++ b/.lane/reports/fix-homepage-managed-service-h2-h3-lane1.md @@ -0,0 +1,41 @@ +# Lane report: fix/homepage-managed-service-h2-h3-lane1 + +## Item + +Homepage managed-service section skips H2->H4 and is missing from the public heading-hierarchy. + +## What was wrong + +`public/index.html` line 298: the `#managed-service` section's feature heading was an H4 directly +under the H2 section title, skipping H3. The public heading-hierarchy test +(`scripts/test-public-heading-hierarchy.mjs`) covered every other page but not the homepage. + +## Fix + +- `public/index.html`: H4 -> H3 for the managed-service feature heading (outline H2 -> H3, + matching the sibling `#teams` block). +- `public/styles.css`: `.team-feature h4` became `.team-feature :is(h3, h4)` (keeps margin) plus + `.team-feature h3 { font-size: clamp(1.55rem, 1.8vw, 2rem) }` so the block renders at the + former h4 scale. +- `scripts/test-public-heading-hierarchy.mjs`: added homepage coverage (outline has no jump > 1, + managed-service section opens H2 then H3, CSS pairing asserted). Sections renamed D/E/F. + +## Verification + +- `node scripts/test-public-heading-hierarchy.mjs` -> 89 checks, 0 failures (was 81 before; 8 new + homepage checks). +- All public-site tests pass (conversion-signal, structured-data, brand-disambiguation, + heading-hierarchy, link-targets, social-preview, soft-404, deploy-bundle, pages-release). +- `npm test` failure in `check-retention-automation.mjs` is pre-existing: verified identical + failure on clean origin/main (service-decisions parity + stale checkout at + /home/nish/workspaces/products/tinystudio-in). Unrelated to this change. +- Note: the deploy-bundle test still filters the managed-service section for the public bundle, + and still passes. + +## Notes + +- Existing remote branches `fix/homepage-managed-service-heading-hierarchy` and + `fix/lane1-homepage-managed-service-heading-hierarchy` already contained an equivalent fix + (never merged). This lane rebuilt the fix cleanly on fresh origin/main under a new branch name + `fix/homepage-managed-service-h2-h3-lane1` to avoid the stale merge-tangle in the old ones. +- PR: https://github.com/nish3451/tinystudio-in/pull/143