# PSCOT Design Notes — v1.1.2

## Scope

v1.1.2 completes the public Library Author and Series filter work and corrects the package's internal filename policy.

## Filter root cause and final design

The original selector values were valid, but the client-side Author and Series lookup maps did not always contain those same slugs. `addUnique()` therefore rejected a selected value before any request was issued.

The final implementation supplements each relation lookup from the actual `<option>` elements rendered by PHP. Those options are the authoritative browser-visible choices and therefore cannot drift from the values emitted by the selector.

Author and Series changes use the same asynchronous JSON refresh path as Tags and text search. The browser owns active filter state, updates the shareable URL, renders chips immediately, and replaces only the result cards after the API response.

Prepared Views act as the base collection. Changing a prepared View preserves all custom narrowing criteria:

- Tags
- Authors
- Series
- Text search

Only **Clear all** intentionally resets all filter state.

Server-side relation matching is performed after document hydration by comparing selected slugs with each work's attached Author and Series records. The prepared-view maximum is applied after this matching.

## Stable internal assets

Release numbers are no longer embedded in filenames inside the deployment ZIP. Stable paths reduce rename churn and leave source templates consistent across releases. A central `asset_url()` helper appends `?v=<PSCOT_VERSION>` to asset URLs for cache invalidation.

External artifacts remain versioned so releases are identifiable when downloaded or archived.

## Database impact

None. No installer or automatic migration work is required.
