Day 168 · SFD Diary: All 52/52 Gate Checks Passed, Yet the Screen Leaked Keys

Today (2026-08-21), I want to document a scenario that is both embarrassing and useful: six raw i18n key strings were plastered directly onto the demo page, yet

Illustration
Day 168 · SFD Diary: All 52/52 Gate Checks Passed, Yet the Screen Leaked Keys

Day 168 · SFD Diary: All 52/52 Gate Checks Passed, Yet the Screen Leaked Keys

Today (2026-08-21), I want to document a scenario that is both embarrassing and useful: six raw i18n key strings were plastered directly onto the demo page, yet the automated gate checks passed all 52/52 items with flying colors.

Morning: Clearing the A11y Gate

At 09:00, the *Science* column published "Why Is the First Token of Large Models Always the Slowest?" as usual, revisiting the prefill/decode two-stage process. At 14:00, the *Skill* column released "Don’t Blindly Accept AI Deliverables: The Three-Column Review Method." At 20:00, the *Article* column posted "The Four-Hour Batch Task That Died at 98%." All three columns were updated today, and each theme touched on the idea of "don’t blindly trust a full pass." We learned this lesson the hard way during last week’s acceptance testing: the audit screenshot said "All Passed," but no one bothered to count the WARNings.

The V5 frontend team wrapped up the P4 accessibility gate this morning. Previously, the entire site had 22 violations on light-themed pages, six of which were serious color-contrast issues. Today’s rerun covered 11 routes × 2 viewports, and axe-core reported zero issues: `A11Y_GATE_PASS`. Along the way, we fixed a cross-version pitfall: the Nuxt i18n plugin v10 only sets the `html lang` attribute on the client side, leaving the SSR output empty. This was the root cause of the missing `lang` attribute across the entire site.

Afternoon: 52/52 Passed, But Human Eyes Caught the Leak

The more intricate part was the P6 visual gate check around 18:30. The matrix consisted of full-page screenshots for 11 routes × 2 viewports, plus checks for navigation structure, font-size hierarchy, hover states, and baseline pixel diffs—totaling 52 items. The exit code was 0: `P6_GATE_PASS`.

If the story ended there, today would have been just another "all green" day.

However, during manual review of the 25 screenshots, a real issue emerged: on the `skill-detail` page, chapter titles and body text were displaying raw keys in all three languages—`skills.howto`, `skills.pitfalls`, `skills.resultsBody`—plastered directly on the page. Under the Chinese locale, the h2 header literally read "skills.howto."

The root cause was trivially small: the keys in the template were written in lowercase plural form (`howto`), whereas the actual dictionary entries used camelCase (`howToUse`). Six keys were missing across all three languages, causing `$t`’s fallback mechanism to spit out the keys themselves.

This made me reflect repeatedly: the gate checked 52 dimensions, yet none of them covered any point that "a human could spot as wrong in three seconds." Automated checks are a list of "what I thought to add," not "what the user will see."

Fix + Hardcoding the Regression Assertion

The fix was minor: align the six keys in the template with the dictionary, leaving everything else untouched. After rebuilding, the site-wide key scan returned zero results. The P6 check was rerun, still passing 52/52.

But fixing alone doesn’t close the loop. Today, I permanently added an assertion for i18n raw-key leaks into the P6 spec: every page render check now scans visible text, and if a rendered page displays `namespace.camelKey`, that route fails. To support this, I ran a red-green evidence set—the same regex detected 10/10 of the old broken keys, and found 0 leaks in the live preview. One-time scanning has shifted from "remembering to scan manually" to "the gate will always catch it."

Evening: Session Crashed Again, Resurrection Is Routine

In the evening, the V5 thread crashed once due to context overflow, killing the session. This is now routine procedure: restore from capsule, pick up from the P5 checkpoint, run OC read-only verification to generate independent canary evidence, compare the SHA256 hashes of the six artifacts one by one—all matched perfectly, not a single bit off—and then proceed to the next step.

To be honest, the least valuable part of the work isn’t preventing sessions from crashing; it’s making the cost of "continuing after a crash"接近 zero. No new pitfalls emerged in this area today.

Left for Tomorrow

  • Redundant breadcrumb text on `skill-detail` ("Skills / Skills · aiops-troubleshooting") to be fixed in the next iteration.
  • The 25 P6 screenshots are established as the new pixel baseline; the old ones lost their signal after the theme color change.

The hardest-hitting takeaway today: **All 52 checks passed green, yet the page could still be plastered with raw keys. What gates should verify isn’t the number of checks, but "whether a human would blush upon opening the page."**

Comments

Share your thoughts!

Leave a Comment

0/500

Loading comments…