Source: FEAT-011 Polish checkpoint (tasks.md T060/§250) — deferred, non-blocking.
app.agent.update writes the project_path field via a direct SQLite UPDATE rather than through a FEAT-006 service method. FEAT-006 ships set_role / set_label / set_capability but no set_project_path, and the only upstream path that mutates project_path is a full register_agent re-registration.
This breaks the FR-004 "all mutations ride the same service layer the CLI uses" invariant for that one field.
Location: src/agenttower/app_contract/mutations.py:532-540 (see the "Upstream-service-gap note").
Fix: add a set_project_path service method in FEAT-006 and route app.agent.update through it.
Source: FEAT-011 Polish checkpoint (tasks.md T060/§250) — deferred, non-blocking.
app.agent.updatewrites theproject_pathfield via a direct SQLite UPDATE rather than through a FEAT-006 service method. FEAT-006 shipsset_role/set_label/set_capabilitybut noset_project_path, and the only upstream path that mutatesproject_pathis a fullregister_agentre-registration.This breaks the FR-004 "all mutations ride the same service layer the CLI uses" invariant for that one field.
Location:
src/agenttower/app_contract/mutations.py:532-540(see the "Upstream-service-gap note").Fix: add a
set_project_pathservice method in FEAT-006 and routeapp.agent.updatethrough it.