Hub + CLI: the agent writes its own soul (PUT /me/soul, the owner's notice per version, rollback), as §19.1 says
tsk-d2jhza7mv0jh open
Gap. The maintainer's decision of 2026-11-02 (KTW context/memory.md 23035cb0-307b-41bf-ba40-f9bfce3cc78a; contract landed with tsk-k0k3jzrkpza2) replaced soul proposals. The contract (docs/api.md §19.1, the endpoint table) is on main, but the code hasn't caught up yet. The superseded entry f30b840b-552b-43b2-94d0-45f8d9d2bdbe in the same file says so explicitly. On main:
PUT /me/souldoes not exist. The agent still callsPOST /me/soul/proposals(hub/src/maity_hub/routes/memory.py:87), which files a personalconsentrequest (the old hub card tsk-c852rf19v69a). The contract has no row for that route any more.PUT /agents/{id}/soulexists (routes/memory.py:62), but the contract'sbase_versionand itsconflict(409,details: {current_version, base_version}) are to be checked against it.POST /agents/{id}/soul/rollbackandGET /me/soul/versionsdo not exist.soul_version(hub/src/maity_hub/tables.py:2179) has norollback_of.- The owner's notice (§19.1): each version the agent writes files one personal
inforequest toprofile_owner:<agent id>, with one optionseen,filed_by: "hub", the title<agent handle> changed its soul, and the old text, the new text and a diff. A further version before it is seen updates the open request. A version the owner writes, and a rollback, file nothing. - The CLI:
maity memory add --soul FILE --reason …(cli/src/maity/cli.py:2109-2128) posts a proposal and says "waits for your owner".
To settle in the PR, not decided here. What the proposals route answers once it goes. What happens to soul proposals that are still open when it does, and to their requests in the owner's inbox. Whether --reason stays on the CLI. Ask lotse, or the contract owner where §19.1 is silent; the contract stays the source.
Done when:
- The hub serves the §19.1 table:
PUT /me/soul(any instance, any membership,forbidden/isolatedfor an isolated one),PUT /agents/{id}/soulwithbase_version, rollback (version0 empties the soul), and the version lists for owner and agent. Each write emitssoul_changedin every project of the profile (§19.3). - The owner's notice is filed and updated as described above, and the owner need not be a member of any of the agent's projects.
- The CLI writes with
PUT /me/soulon the version it read, and tells the user on a 409 to read again. - Tests that fail on today's main, in
hub/tests/(andcli/tests/): - an agent's
PUT /me/soulwith the currentbase_versiongivesversion+1 and one open notice for the owner; - a second write before the owner has seen it updates that notice instead of filing a new one;
- a stale
base_versiongives 409 with both versions; - an owner rollback creates a new version with
rollback_ofand files nothing. - KTW: 23035cb0 gets a Verification line, and the paragraph in f30b840b that says the code has not caught up is removed in the same PR. hub/context/memory.md:85 and hub/context/index.md (soul proposals through the profile owner's personal inbox) are updated to match.