feat(gateway/make): PR6 T6.14 — migrate-paths target + lifespan warning

`app/gateway/app.py:_check_path_migration_pending` runs at lifespan
startup and emits a single WARNING log when `{base_dir}/users/` still
has content — the operator's cue to run the new migration script. The
warning is best-effort (silent on permission errors) so it can never
escalate into a gateway boot failure; reads from the legacy tree keep
working via the `user_id` branch of `Paths.thread_dir` until the
migration runs.

The root Makefile gains a `migrate-paths` target that wraps
`scripts/migrate_paths_to_workspace.py`. Two opt-in env knobs:
- `DRY_RUN=1`           — pass `--dry-run` (preview only, no writes)
- `DEFAULT_WORKSPACE=…`  — claim un-assigned users under this workspace id
   (defaults to `legacy_workspace` to align with PR5's orphan-row bucket).
`help` documents the new target.

3 tests cover the warning's three states (legacy dir with content, dir
missing, dir empty).
This commit is contained in:
1445043649
2026-05-13 17:50:47 +08:00
parent 56f2c8d873
commit c5c66ccbfc
3 changed files with 84 additions and 0 deletions
+9
View File
@@ -31,6 +31,7 @@ help:
@echo " make start-daemon - Start prod services in background (daemon mode)"
@echo " make stop - Stop all running services"
@echo " make clean - Clean up processes and temporary files"
@echo " make migrate-paths - Migrate legacy users/ tree into workspaces/ layout (DRY_RUN=1 to preview)"
@echo ""
@echo "Docker Production Commands:"
@echo " make up - Build and start production Docker services (localhost:2026)"
@@ -144,6 +145,14 @@ clean: stop
@-rm -rf logs/*.log 2>/dev/null || true
@echo "✓ Cleanup complete"
# Lift legacy per-user paths into the per-workspace layout (PR6).
# Pass DRY_RUN=1 to log the migration plan without writing.
# DEFAULT_WORKSPACE=<wid> claims un-assigned users (defaults to legacy_workspace).
migrate-paths:
@cd backend && PYTHONPATH=. uv run python scripts/migrate_paths_to_workspace.py \
$(if $(filter 1 true,$(DRY_RUN)),--dry-run) \
$(if $(DEFAULT_WORKSPACE),--default-workspace $(DEFAULT_WORKSPACE))
# ==========================================
# Docker Development Commands
# ==========================================