81f4dfd0ad
- tenants.py:park_tenants/park_companies/park_kb_docs 三表(serverdata/park/park.db), 每园区独立 name/intro(两段式)/auth(账密 salted hash)/data(大屏锚点)/agent/kb; ensure_default_tenant 自愈建默认园区+灌 39 家企业。 - sim_engine 重构为 SimEngine(data)——每租户独立实例,get_engine(tid)/refresh_engine(tid)。 - auth.py:/park/auth/login(账密→长效 tenant JWT)、/park/auth/me、require_tenant(401)。 - mqtt:register/publish_command/publish_tick 按 tenant_id 作用域(拓扑为 command/tid/clientId)。 - routers:/park/tenants CRUD + 全部数据/指令端点租户作用域(authorization token 或 ?tenant_id)。 - app.py lifespan init_db + 逐租户 tick/publish;tools._query_companies 读租户库。 - .gitignore 增 serverdata/park/。TestClient:建租户/登录/快照隔离/企业CRUD/指令鉴权(无token401) 全过。