atmo.rsvp

refactor(contrail): guard registry dispatch, name the search term apart from the query name master

Two `q`s meet in events-load-more.ts: `input.q`, the free-text search TERM a search page re-supplies for its continuation, and `envelope.q`, the server-side query NAME the resumer registry dispatches on. Bind the term to a `searchTerm` local at the top of runLoadMoreEvents, and use `term` inside the two search resumers, so the two can no longer be read as one another. The WIRE field stays `q`. Renaming it would drop the term from any search tab already loaded when the deploy lands: the resumers treat a missing term as end-of-pagination, so that tab's Load more button would quietly disappear until a refresh. Not worth it for a naming fix. Also dispatch through `Object.hasOwn(REGISTRY, envelope.q)` before indexing, so a prototype-chain name can never resolve to an inherited value. decodeCursor already allow-lists `q` against CURSOR_QUERIES upstream of this, so it is defense in depth: were that allow list ever to regress, an inherited `constructor` would otherwise read as truthy and be invoked with `env` as its first argument.


+21 -11
1 changed file