Changed: tests/deploy-script-regression.sh
The deploy.sh already had all required guards (livereload guarded branch,
IPv6 URL bracketing, port/host validation). Added the missing smoke-test cases
to tests/deploy-script-regression.sh:
test_missing_port_argument_is_rejected — --port with no following valuetest_port_flag_as_value_is_rejected — --port --drafts (flag as value)test_missing_host_argument_is_rejected — --host with no following valuetest_nonnumeric_port_is_rejected — --port abcTest result: deploy-script regression tests passed (9 scenarios, all pass)
Changed: scripts/validate-content-rules.sh
require_file error message to the specified format:
"file not found: <path>".validate_history_order: year-context presence is
now asserted before the month-name validity check, so a heading that
appears before any ## YYYY heading always gets the “appears before any year
heading” diagnostic rather than being swallowed by an “invalid month name”
error.Test result: ✓ Content ordering and research tag rules passed.
Changed: assets/css/command-palette.css, assets/css/teaching.css,
assets/js/command-palette.js
:has(.command-palette-section-title:contains("Search Results")) selector
with the class .command-palette-section--search-results.renderSections now sets the
command-palette-section--search-results class on the section element when
the section name is "Search Results".:contains("Course Schedule") rules with:
.course-schedule-heading (for the preceding h2), and.schedule-container h3 / h4 / ul rules (the .schedule-container
wrapper already existed in templates).var(--color-heading-h2, #ff6b6b) → var(--color-heading-h2, #0156b3)
(#ff6b6b was a red fallback for a blue token)var(--color-heading-h3, #000) → var(--color-heading-h3, #333) (matches
the light-mode definition in styles.css)Changed: .github/workflows/teaching-content-checks.yml, CLAUDE.md
assets/images/teaching/README.md to the paths triggers for both
pull_request and push events so changes to that file fire the workflow.markdownlint-cli2 and prettier --check invocations to
include assets/images/teaching/README.md alongside _teaching/**/*.md.CLAUDE.md.Changed: assets/js/command-palette.js,
tests/command-palette-stale-search.test.js (new)
_searchToken monotonic counter at module scope. Each call to
renderCommandResults captures the current token value. The async
SearchManager.searchForCommandPalette callback checks token !== _searchToken
before updating the DOM; if a newer search has been issued it returns without
rendering, eliminating stale-result overwrites.window._getSearchToken() for test introspection.tests/command-palette-stale-search.test.js with three behaviour-
focused regression scenarios:
| Suite | Result |
|---|---|
jest (all 9 suites, 51 tests) |
PASS |
tests/deploy-script-regression.sh (9 scenarios) |
PASS |
scripts/validate-content-rules.sh |
PASS |