Rationale: Oracle cannot reach NAS (Tailscale userspace mode on NAS, no TUN),
the old pull+webhook design requires Edge to download video from NAS and
callback to NAS - both blocked. New design is one-way NAS -> Oracle:
- FAM-Edge: new POST /api/edge/video/push endpoint accepts multipart video
upload, reuses existing OpenCV scene-change keyframe selection, analyzes
synchronously and returns the result payload directly in the HTTP response
(no webhook callback). Old /api/edge/video/analyze kept for compatibility.
- FAM-Edge: VideoPreprocessor.save_upload() saves the uploaded file
- FAM-Edge: AIOrchestrator.process_push_task() runs the full pipeline
(health check -> extract -> select -> compress -> VLM -> fusion) and
returns callback-style payload dict
- FAM-Core: Dispatcher rewritten to push mode - reads local video file,
uploads with task metadata (camera_name, event_start_time from file mtime,
known_members_context), applies the result to DB via shared
event_receiver.apply_success_event()
- FAM-Core: event_receiver success logic extracted into reusable
apply_success_event() (used by both webhook route and dispatcher)
- config: edge_url -> /api/edge/video/push, push_timeout 1800s, gunicorn
Edge timeout raised to 1800s for long synchronous analysis
- FAM-Edge: add /api/edge/chat proxy endpoint forwarding to local Ollama
(Ollama port 11434 not exposed externally, FAM-Edge acts as reverse proxy)
- FAM-Core config: edge_url and ollama_url switched from Tailscale IP to
Oracle public IP (Tailscale firewall blocking between NAS and Oracle)
- FAM-UI: migrate mysql.connector to PyMySQL (same as FAM-Core)
- FAM-UI: cursor(dictionary=True) replaced with cursorclass=DictCursor
- End-to-end chat verified: FAM-Core -> FAM-Edge proxy -> Ollama -> response
Answer: 今天没有观察到张三 (no events in DB yet, expected)
- name_member(): replace MySQL-only JSON_REPLACE/JSON_CONTAINS with wildcard
JSON paths (unsupported in MariaDB 10.11) with Python-side JSON parsing
- FAM-Core venv rebuilt with Python 3.10.20 on NAS
- All API endpoints tested: health, status, member list, unnamed, naming
- POST /api/member/name: 人物A successfully named to 张三
- PROGRESS.md updated with full test results and task completion