feat: add query observability and collation safeguards

This commit is contained in:
key
2026-08-04 02:15:03 +08:00
parent 721839c847
commit 12fc9fdddc
22 changed files with 575 additions and 22 deletions
+51
View File
@@ -298,6 +298,38 @@ REMOTE
)" || fail "remote schema check failed: $remote_ssh:$remote_db"
[[ -z "$missing" ]] || fail "remote schema missing required tables: $(printf '%s' "$missing" | tr '\n' ', ' | sed 's/, $//')"
local missing_query_trace_columns
missing_query_trace_columns="$(ssh -o BatchMode=yes -o ConnectTimeout=10 "$remote_ssh" bash -s -- "$remote_db" <<'REMOTE'
set -euo pipefail
db="$1"
mysql --batch --skip-column-names --connect-timeout=5 "$db" <<'SQL'
SELECT required.column_name
FROM (
SELECT 'normalized_query_hash' AS column_name
UNION ALL SELECT 'intent'
UNION ALL SELECT 'domain'
UNION ALL SELECT 'needs_clarification'
UNION ALL SELECT 'outcome'
UNION ALL SELECT 'outcome_reason'
UNION ALL SELECT 'candidate_count'
UNION ALL SELECT 'evidence_count'
UNION ALL SELECT 'citation_count'
UNION ALL SELECT 'rerank_applied'
UNION ALL SELECT 'answer_hash'
UNION ALL SELECT 'answer_length'
UNION ALL SELECT 'update_time'
) required
LEFT JOIN information_schema.columns actual
ON actual.table_schema = DATABASE()
AND actual.table_name = 'aihr_knowledge_query_log'
AND actual.column_name = required.column_name
WHERE actual.column_name IS NULL
ORDER BY required.column_name;
SQL
REMOTE
)" || fail "remote query-trace schema check failed: $remote_ssh:$remote_db"
[[ -z "$missing_query_trace_columns" ]] \
|| fail "remote query-trace schema missing required columns: $(printf '%s' "$missing_query_trace_columns" | tr '\n' ', ' | sed 's/, $//')"
local personal_oss_config
personal_oss_config="$(ssh -o BatchMode=yes -o ConnectTimeout=10 "$remote_ssh" bash -s -- "$remote_db" <<'REMOTE'
set -euo pipefail
@@ -949,7 +981,26 @@ REMOTE
[[ "$media_reprocess_contract" = "source_attach_id|tenant_id,source_attach_id,id" ]] \
|| fail "remote media-reprocess schema is invalid: got ${media_reprocess_contract:-missing}"
local aihr_collation_contract
aihr_collation_contract="$(ssh -o BatchMode=yes -o ConnectTimeout=10 "$remote_ssh" bash -s -- "$remote_db" <<'REMOTE'
set -euo pipefail
db="$1"
mysql --batch --skip-column-names --connect-timeout=5 "$db" <<'SQL'
SELECT COUNT(*)
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name LIKE 'aihr\\_%' ESCAPE '\\'
AND character_set_name IS NOT NULL
AND (character_set_name <> 'utf8mb4' OR collation_name <> 'utf8mb4_0900_ai_ci');
SQL
REMOTE
)" || fail "remote AIHR collation check failed: $remote_ssh:$remote_db"
[[ "$aihr_collation_contract" = "0" ]] \
|| fail "remote AIHR tables still contain $aihr_collation_contract non-canonical character columns; apply aihr_20260804_unify_all_collations_mysql8.sql"
echo "remote_schema=83/83 $remote_ssh:$remote_db"
echo "remote_aihr_collation=0/0 $remote_ssh:$remote_db"
echo "remote_rag_candidate_trace=1/1 $remote_ssh:$remote_db"
echo "remote_media_reprocess_contract=1/1 $remote_ssh:$remote_db"
echo "remote_work_report_idempotency=3/3 $remote_ssh:$remote_db"