Production Environment

Version 1.4.6 (July 2026)

Recently Permitted Facilities — Interaction Fixes (Sprint 3)

  • Shared JavaScript restored to master page: A shared client-side script file had been inadvertently removed from the site master page in a prior commit, causing several interactive features (region selection popup, email share link, autocomplete) to fail across all pages. The script has been restored.
  • Region Selection Map popup — page reload on open: Opening the Region Selection Map popup no longer causes the page to reload. The button that opens the popup now correctly suppresses the default form submission.
  • Region Selection Map popup — Escape key to close: Pressing Escape while the Region Selection Map popup is open now closes the popup, consistent with other popups on the site.
  • Email share link — page reload on click: Clicking the email share link no longer causes the page to reload before the email client can open.
  • Search grid — Enter key in dropdowns and links triggers unintended search: Pressing Enter while focused inside a dropdown filter or a link within the search results no longer incorrectly triggers the default search button.

Version 1.4.5 (July 2026)

Security — Vulnerability Remediation (July 2026 Audit)

  • Security vulnerabilities identified during the July 2026 security audit have been remediated. Improvements include input validation enhancements, client-side script protections, and HTTP response header hardening.

Accessibility — Tester Feedback Fixes Sprint 2 (July 2026)

  • Document Search — checkboxes not visible (F-12): The download checkbox column was moved to be the first column in the results grid. Users can now see and check documents for download without horizontal scrolling.
  • Map Search — no facility pins visible (F-13): The initial map view now zooms to fit all returned facility location markers. A fallback zooms to the search area when no markers are present. The map also receives keyboard focus after search.
  • Application Status Search — empty document cells focusable (F-16): Rows with no associated documents no longer show a focusable link, removing them from the tab order and preventing a misleading tooltip on empty rows.
  • WPLCS Historical Permit Data — table headers not read by Narrator (F-17): Added column header scope attributes so screen readers correctly associate column headers with data cells. Added descriptive labels to page headings and search inputs, spelling out “Water Permitting Life Cycle System” in full.
  • SIC/NAICS heading read as a word by Narrator (F-05): Added a descriptive label spelling out “Permits by Standard Industrial Classification and North American Industry Classification System” so the abbreviation is read correctly by screen readers.
  • Keyboard shortcuts link added to footer (F-18): Added a “Keyboard shortcuts” link in the site footer for keyboard navigation reference.
  • Date picker fast-nav keyboard support: The month/year picker popup in date fields now supports full keyboard navigation. Tab and Shift+Tab cycle through controls inside the popup; Escape dismisses it and returns focus to the date input.

Accessibility Scan Tool — Report Display Fix

  • Fixed an issue where the accessibility scan report link and last-run date were not updating in the UI after a scan completed successfully.

Security Scan Tool — Infrastructure Fix

  • Scan reliability and report output fixed: Resolved issues preventing the security scanner from running correctly under the site’s IIS application identity. Scan results now write to the correct output location and the report updates correctly in the UI.

Version 1.4.4 (June 2026)

Accessibility — Tester Feedback Fixes (Sprint 1)

Fixes based on accessibility testing feedback (May–June 2026).

  • Date picker calendar Escape key: Pressing Escape while a date picker calendar is open now closes the popup and returns focus to the date input field. Applies to all pages with date picker search fields.
  • Date fields widened: All date input fields now display the full MM/DD/YYYY date without truncation.
  • Date field format hint: Date fields now show MM/DD/YYYY placeholder text to indicate the expected format. Screen readers announce this hint when the field is focused while empty.
  • Filter dropdown keyboard access: Filter dropdowns can now be opened using the Down Arrow, Enter, or Space keys from the keyboard.
  • Filter dropdown scroll-to-top fixed: Clicking a filter control no longer causes the page to scroll back to the top.
  • Facility Summary — status now readable by screen reader: The Facility Status (Active/Inactive) is now displayed as plain text, allowing screen readers to announce it correctly.
  • Permit Inspection Document popup keyboard access: The popup now announces when no documents are found, supports Escape to close, and moves focus appropriately when no results are present.
  • Help popup arrow-key scrolling: Arrow keys now scroll the help content immediately after the popup opens.

Version 1.4.3 (June 2026)

Accessibility — Toggle Button Disclosure Navigation (WAI-ARIA)

  • Replaced mouse-hover-only submenus with the W3C APG Toggle Button Disclosure pattern — each menu section now has a link (navigates to the section page) plus a ▾ toggle button that opens/closes the submenu
  • Keyboard users can now access all submenu items: press Enter/Space on the toggle button to open, Tab through submenu links, Escape to close and return focus to the toggle button
  • Fixes Narrator/NVDA/JAWS incompatibility with the previous WAI-ARIA Menubar pattern (Scan Mode consumed arrow keys before JavaScript could handle them)
  • Mouse hover still opens and closes submenus independently of keyboard state
  • Toggle buttons added to all navigation menu sections and the inline Help menu
  • Submenu links are removed from the tab order (tabindex="-1") when closed and restored (tabindex="0") when open
  • Updated the Keyboard Shortcuts help page to document the new toggle button interaction pattern

Accessibility — Data Grid Keyboard Navigation & Focus Indicators

  • Added arrow-key cell navigation to all RadGrid and GridView search result tables (Up/Down/Left/Right move between cells; Left/Right wrap across rows)
  • RadGrid pager controls removed from sequential Tab order; pager remains accessible via screen reader browse/virtual cursor mode
  • GridView column headers now have sort expressions wired up (FacilitySummary, PermitLookup) so keyboard users can sort without a mouse
  • Permit Lookup: sort state now persists across page navigation
  • PermitSearch RadGrid: added EnableAriaSupport="true", UseAccessibleHeader="true", and AllowKeyboardNavigation; cell data-bound handler now stamps aria-label and headers attributes on every data cell
  • Keyboard focus indicators added or improved for: skip link, navigation menu items, hamburger button, search inputs, grid pager links, sortable column headers, body links, form inputs, and combo boxes
  • Windows High Contrast / Forced Colors support: Components now render correctly when the browser or OS enforces forced-colors/high-contrast mode

Accessibility — Page Layout & Markup Fixes

  • Search pages (CNEApplications, DischargeMonitoringData, DocumentSearch, FacilityEnforcement, FacilityInspections, FacilityNotInspected, IDDEReport, ImpairedWaterBodyLimits, PermitSearch, PermitsBySIC-NAICS, RecentlyPermittedFacilities, ViolationsAndPermitTriggers, WaterBodySearch): moved sidebar menu to order:1 / search results to order:2 so screen readers encounter content in logical DOM order before the related-links sidebar
  • SIC/NAICS search page: upgraded to match the search and filter pattern of other search pages; added data export and report type selection.
  • Help page: replaced spacing elements (announced as blank lines by screen readers) with CSS spacing; removed redundant separator dashes from the no-help-available panel
  • Popup windows (PopUpCNEApplication, PopupViolationTrigger, PopUpFacilityEnforcement): widened default popup dimensions so content is not clipped at default zoom levels

Infrastructure

  • Web.config: added <globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"> to fix garbled non-ASCII characters in server responses
  • PublicParisStyles.css: added standard .sr-only utility class (screen-reader-only visually hidden text)
  • Removed auto-focus on txtboxPermitNumber at page load (PermitSearch, PermitLookup) — auto-focus on load moves screen reader reading position unexpectedly

Version 1.4.2 (May 2026)

Security — Third-Party Component Update

  • Updated a third-party UI component library to a version that resolves known security vulnerabilities. Previously identified security findings related to this component are now closed.

Version 1.4.1 (May 2026)

E2E Testing Guide — Interactive Word Download

  • Replaced HTML-as-.doc download with a native .docx generated via Open XML — no WindowsBase/ETW dependency, built entirely with ICSharpCode.SharpZipLib (already in project)
  • Checkboxes in the downloaded guide are native Word w14:checkbox content controls — clickable directly in Word 2010+
  • Notes areas after each section and fillable table cells (URLs, pass/fail, names, dates) are plain-text content controls — typeable in Word without unlocking the document
  • Fixed a content security policy violation related to an external script dependency; download now uses a server-side endpoint
  • Fixed an issue where the wrong copy of the testing guide was being served
  • Button label updated to “Download (.docx)” to accurately reflect file type

Version 1.4.0 (May 2026)

Security — Ongoing Improvements

  • Continued improvements to automated security scanning and false-positive suppression. Confirmed stable site baseline across all main search and map pages.
  • Known open issue: search results filter/paging spinner — deferred to next sprint.

Version 1.3.2 (May 2026)

Map Search — ArcGIS SDK 4.31 & UX Improvements

  • Migrated Map Search from ArcGIS Maps SDK 5.0 ES modules to the stable 4.31 AMD CDN — eliminates all Calcite icon 404 errors and external asset dependencies
  • Added dojoConfig = { async: true } before ArcGIS script load to prevent Dojo/jQuery AMD conflict
  • Replaced picture-marker SVG data URIs with simple-marker style:"path" symbols — resolves CSP connect-src violations (no Fetch API calls)
  • Moved all inline <style> CSS to Css/MapSearch.css — eliminates ASPX parser false-positive CS1525 errors
  • Removed all <%= %> server expressions from the require() script block; map data now written to a hidden field (hdnMarkers) server-side
  • Map now opens zoomed to show all of Washington State (center [-120.5, 47.5], zoom 7); radius-matched zoom applied after a search
  • Red teardrop search pin: placed on address select or map click; persists after permit pin redraw; hover popup shows address label
  • Clicking empty map places or moves the red search pin and updates Latitude/Longitude fields — no blue pin
  • Permit circle popups on hover and click via view.hitTest() with correct geometry fallback for popup location
  • Added Inactive & Draft checkbox — unchecked by default; filters both map pins and search results grid; postback refreshes both without re-querying the database
  • Search results grid now shows only Active permits by default; toggling the checkbox redraws map and rebinds grid via session data
  • ArcGIS Search widget styled to match site buttons (ebb blue, square aspect ratio, 3px gap)
  • Fixed Sys is not defined error in Document.js — added typeof Sys !== 'undefined' guard around PageRequestManager call
  • GPS geolocation: mobile-only visibility, watchPosition with live accuracy display, 20 m accuracy target, 20 s hard timeout
  • All permit IDs with unique PermitIds get their own map pin — deduplication removed; permits with no facility name excluded
  • Black outline on permit circles; overlapping pins staggered by 16 px

Security Hardening

  • Tightened Content Security Policy to remove unnecessary permissions.
  • Upgraded map components to a current version, removing a legacy dependency that required relaxed script execution permissions.
  • Improved automated security scanning coverage and accuracy; reduced false positives. Known security findings tracked and addressed as part of ongoing remediation.

Look and Feel / Responsive Design

  • Redesigned site layout to match WQStyle Portal pattern with agency look and feel (ebb blue frame, Lato font, ecology.wa.gov styling)
  • Responsive mobile layout — hamburger navigation menu, stacking content, compact grids with landscape rotation prompt
  • Added loading overlay with context-aware messages and 500ms display delay
  • All grids now sortable with white sort indicators
  • Restyled all popup windows (Feedback, Region Map, Permit Types, Document Types, Water Body, Help, CNE Application, Violation Trigger, Enforcement Details) with applicationbox pattern
  • Restyled Permit Inspection Documents, Permit Enforcement Documents, and Permit Version Documents pages with applicationbox pattern
  • Fixed document search filter on Permit Inspection, Enforcement, and Version Documents pages — search now correctly filters results by document name
  • Added scroll-to-results on search postback
  • Moved "Download Checked" into grid header for Document Search
  • Restyled maintenance pages with applicationbox pattern
  • Fixed maintenance mode stale cache — config now reloads from disk on every access
  • Fixed shareable link email truncation issue
  • Fixed CNE Application popup — changed from RadWindow to window.open for reliable rendering
  • Fixed Help popup appearing behind browser window
  • Maps wrapped in applicationbox containers
  • RadGrid filter row hidden (filtering via RadFilter controls only)
  • Image map resizer scripts for responsive map popups
  • Facility Summary page responsive layout fix — single column at mobile widths
  • Search box moved outside WAI-ARIA menubar into sibling element to satisfy aria-required-children constraint
  • Navigation menu responsive layout refined — two-row grid at medium widths (1025–1350px), single row at wide widths

WCAG 2.2 AA — Automated Scanner Fixes

  • Resolved all 94 automated accessibility violations across 34 pages (0 remaining after initial release)
  • Standardised all font sizes to 1rem (16px) site-wide — fixed sub-WCAG font-size declarations site-wide
  • Replaced ASP.NET Font-Size="Small" attributes in footer markup with CSS to ensure consistent 1rem sizing
  • Added global override for style="font-size:small" inline style injected by ASP.NET server controls
  • Fixed footer link color contrast on gale-blue background — changed from #0000ee (~2.8:1) to #00005a (~7.8:1) to meet WCAG AA 4.5:1 minimum
  • Added aria-label="Open the calendar" and role="button" to date picker calendar popup buttons which rendered as empty links
  • Added lang="en" to all popup pages
  • Added <main> landmark and <h1> heading to all popup pages
  • Fixed color contrast across footer, grid messages, and links using Ecology-approved palette
  • Added labels to all form inputs (date pickers, search boxes, dropdowns)
  • Fixed heading hierarchy on 6 pages
  • Removed restrictive viewport scaling on 3 pages
  • Added alt text to all status images
  • Increased touch target sizes for checkboxes and radio buttons to 24×24px minimum

Keyboard Navigation

  • Added "Skip to main content" link — visible on first Tab press, bypasses entire navigation
  • Added visible focus indicators (ebb blue outline) on all interactive elements
  • Restored focus rings on checkboxes, radio buttons, RadComboBox, image buttons, and grid pager controls
  • Navigation menu now uses WAI-ARIA Menubar pattern with full arrow key support: Left/Right arrows move between top-level menu items, Down/Up arrows open and navigate submenus, Home/End jump to first/last item, Escape closes submenus and returns focus to parent item
  • Roving tabindex — only the current menu item is in the Tab order; Tab exits the menu entirely
  • Added Escape key to close all submenus, hamburger menu, and all 6 popup windows
  • Added aria-expanded toggle on hamburger button and all menu triggers
  • Fixed feedback footer link keyboard accessibility
  • Added UseAccessibleHeader to all 11 GridView controls
  • Added captions to key data grids

Screen Reader Support

  • Navigation landmark with aria-label="Main menu"
  • ARIA roles on all menu markup (menubar, menu, menuitem) for proper screen reader announcement
  • Descriptive Ecology logo — full description on link, decorative image hidden from screen readers
  • Environment label reads "Development Environment" / "Test Environment" / "Production Environment"
  • Loading spinner announces "Loading, please wait..." with repeat announcements every 3 seconds via aria-live
  • Search results auto-focused and announced with record count on all 18 search pages
  • Added aria-label to document search checkboxes, search inputs, and Go buttons
  • Search results regions marked with role="region" and aria-label="Search Results"
  • Footer decorative dividers hidden from screen readers
  • External links announce "opens in new window"
  • Added .sr-only CSS utility class for screen-reader-only content

Developer Tools

  • In-app accessibility scanner (Help → Accessibility Scan) — runs automated accessibility checks across site pages; visible only in local development environments.
  • Automated WCAG font-size validation added to the developer test suite.
  • Created end-to-end testing guide for business testers (keyboard, screen reader, responsive) — accessible via Help menu with Print and Download options.

Security Scanner

  • Introduced automated security scanning for the site, covering a range of common web security categories. The scanner is a developer tool only, not visible to public users.
  • Scan results include severity ratings and remediation guidance for the development team.

Security Hardening

  • Applied web security best-practice hardening including HTTP security headers, content security policies, subresource integrity for third-party resources, and access restrictions on sensitive directories and file types.

Document Downloads

  • Friendly "Document Not Available" error page shown when a document cannot be retrieved — replaces silent blank download or Acrobat "unsupported file" error
  • Error page uses native HTML <dialog> with showModal() — blocks background interaction, styled with agency blue backdrop
  • Error dialog includes a pre-filled mailto link to the support team with page URL, document ID, and timestamp
  • Email address is environment-driven: individual address in non-production environments, group address in Production
  • Close button and Escape key both dismiss the dialog and navigate back to the referring page
  • CROMERR production fallback — when dev/test CROMERR returns no data, automatically retries against the production CROMERR service
  • Proper MIME type detection by file extension (PDF, Word, Excel, ZIP, images) — fixes Acrobat "unsupported file type" for PDFs served without correct Content-Type
  • PDF magic byte validation — detects and rejects corrupt or misidentified PDF files before streaming to the browser
  • Content-Length header set when stream length is known — prevents browser truncation of large downloads
  • Empty stream detection — documents with no file content now show the error dialog instead of delivering a 0-byte file
  • Warning logged when document record exists but file content is missing from all storage locations

Screen Reader Version for Scanned Documents

  • Scanned permit documents (PDFs, TIFFs, and images) can now be read aloud by screen readers — previously these documents contained no readable text and were inaccessible to users with visual impairments
  • A “Screen Reader Version” link now appears next to eligible documents on the Document Search, Permit Document Search, Permit Version Documents, Permit Inspection Documents, and Permit Enforcement Documents pages
  • Clicking the link opens a plain, readable version of the document that works with Windows Narrator, NVDA, JAWS, and the Edge Read Aloud feature (Ctrl+Shift+U)
  • Each page of the document shows a confidence rating (High, Medium, or Low) so users know how reliably the text was read from the scan
  • A notice is displayed when a document’s scan quality may affect the accuracy of the readable version
  • The link only appears for file types that require this conversion — documents with existing text (such as electronically generated PDFs) are not affected

Deployment Fix

  • Fixed Ecology logo not appearing correctly on some server environments — a site image asset was missing from the deployment package

AI Assistance Disclosure: Development of these accessibility features was assisted by GitHub Copilot (AI pair programming tool). All AI-generated code was reviewed, tested, and validated by the development team before inclusion.

Updates 1/2026

  • Added accessible screen reader version support for PDF documents. A loading page now shows real-time OCR progress while the accessible version is being prepared in the background.
  • Fixed a document timeout issue that could cause failures when processing large documents.

Bug Fixes 12/3/2025

  • Fixed some issues with document downloading.

Bug Fixes 11/6/2025

  • Fixed an issue where the map would not load on the Facility Summary page.
  • Fixed some issues with document downloading.

Version 1.2.2 (August 2025)

  • Optimized a few queries to return results faster.
  • Added a button click on some pages to prevent loading report results immediately.
  • A couple of minor accessibility updates.

Bug Fixes 3/5/2025

  • Resolved a crash when viewing WPLCS data.

Version 1.2 (August 2024)

  • Set up a designated search button on the search box in the menu bar
  • Cleaned up the pages and reporting forms to follow a consistent style and layout
  • Associated labels with reporting form fields
  • Fixed many cases where autofill suggestions would not load
  • Updated Excel exports to .xlsx, although it can run very slowly still. Added a label to the bigger button.
  • Named Excel files
  • Ignore and hide permit violations Ecology has overridden
  • Optimized database queries for speed, sorting, and data quality
  • Updated the legend of the map search page to match symbols used
  • Standardized menus and expanded the click targets
  • Checked initially set and reset date ranges

Version 1.0.1 (March 2019)

  • Fixed issue with "Shareable Link" on a couple pages. If nothing selected in drop-down lists, link was not created successfully.
    Also added "Admin Region" search parameter to the Shareable Link.
  • Updated notice on View DMR reports that only completed DMRs are included.