Error contract delivery
Wires declared error recovery hints through to callers, and closes two water_dataframe_query gaps: silent truncation and canvas-internal error wording.
- Every ctx.fail call site across all seven tools and the site resource now delivers its errors[] recovery hint via ctx.recoveryFor() (#24)
- water_dataframe_query returns a new truncated output field — true when the 10,000-row cap capped the result (#23)
- water_dataframe_query's non-SELECT/multi-statement rejections state its own read-only SELECT contract instead of the canvas engine's registerTable/drop/clear wording; missing-table and system-catalog reads get their own table_not_found / system_catalog_access reasons (#25)
- water_get_series drops its unreachable site_not_found errors[] entry (#26)