mirror of
https://github.com/basicmachines-co/basic-memory
synced 2026-06-21 13:47:35 +00:00
fix(core): preserve an existing database default when repairing a missing config default
Follow-up to #985 (the #974 fix by @rudi193-cmd), addressing the codex P2 raised on #987: when config's default_project has no database row but the database still holds a valid default of its own, promoting the just-added project would silently steal that default. The repair now repoints config at a surviving database default — matching synchronize_projects, which treats the database default as authoritative — and promotes the added project only when no usable database default exists (no default at all, or one unknown to config, which set_default_project rejects and reconciliation deletes). Also removes an unused ProjectConfig import from the #985 regression test (strict ruff failure; CI's --fix lint masked it). Refs #974 Signed-off-by: phernandez <paul@basicmachines.co>
This commit is contained in:
committed by
Paul Hernandez
parent
25732b2fe2
commit
32a1c208b3
@@ -261,14 +261,36 @@ class ProjectService:
|
||||
if config_default is not None:
|
||||
db_default_project = await self.repository.get_by_name(config_default)
|
||||
if db_default_project is None:
|
||||
await self.repository.set_as_default(created_project.id)
|
||||
self.config_manager.set_default_project(name)
|
||||
logger.info(
|
||||
"Promoted project '%s' to default because configured default '%s' "
|
||||
"is missing from database",
|
||||
name,
|
||||
config_default,
|
||||
)
|
||||
# Trigger: config names a default project that has no database row
|
||||
# (the fresh-config wedge from issue #974).
|
||||
# Why: synchronize_projects treats an existing database default as
|
||||
# authoritative, so a surviving default must win over promoting
|
||||
# the just-added project. set_default_project raises for names
|
||||
# absent from config — and reconciliation deletes such rows —
|
||||
# so a database default unknown to config cannot be repointed to.
|
||||
# Outcome: config is repointed at a usable database default when one
|
||||
# exists; otherwise the added project becomes the default.
|
||||
db_default = await self.repository.get_default_project()
|
||||
if (
|
||||
db_default is not None
|
||||
and self.config_manager.get_project(db_default.name)[0] is not None
|
||||
):
|
||||
self.config_manager.set_default_project(db_default.name)
|
||||
logger.info(
|
||||
"Repointed config default from missing '%s' at existing "
|
||||
"database default '%s'",
|
||||
config_default,
|
||||
db_default.name,
|
||||
)
|
||||
else:
|
||||
await self.repository.set_as_default(created_project.id)
|
||||
self.config_manager.set_default_project(name)
|
||||
logger.info(
|
||||
"Promoted project '%s' to default because configured default '%s' "
|
||||
"is missing from database",
|
||||
name,
|
||||
config_default,
|
||||
)
|
||||
|
||||
logger.info(f"Project '{name}' added at {resolved_path}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user