- harden Matrix onboarding/chat lifecycle after manual QA - refresh README and Matrix docs to match current behavior - add local ignores for runtime artifacts and include current planning/report docs Closes #7 Closes #9 Closes #14
9.3 KiB
| phase | plan | type | wave | depends_on | files_modified | autonomous | gap_closure | requirements | must_haves | ||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 01-matrix-qa-polish | 06 | execute | 2 |
|
|
true | true |
|
Purpose: Verification still found user-facing reaction remnants and brittle tests that can pass while the actual adapter contract is wrong. This plan cleans those leftovers without rewriting Phase 01 history.
Output: Command-only Matrix adapter helpers, strict !settings snapshot output, and updated Matrix regressions aligned with room ids and dynamic chat allocation.
<execution_context> @/Users/a/.codex/get-shit-done/workflows/execute-plan.md @/Users/a/.codex/get-shit-done/templates/summary.md </execution_context>
@.planning/STATE.md @.planning/ROADMAP.md @.planning/phases/01-matrix-qa-polish/01-CONTEXT.md @.planning/phases/01-matrix-qa-polish/01-VERIFICATION.md @.planning/phases/01-matrix-qa-polish/01-03-SUMMARY.md @.planning/phases/01-matrix-qa-polish/01-04-SUMMARY.md @.planning/phases/01-matrix-qa-polish/01-05-PLAN.md @adapter/matrix/reactions.py @adapter/matrix/converter.py @adapter/matrix/handlers/settings.py @tests/adapter/matrix/test_converter.py @tests/adapter/matrix/test_reactions.py @tests/adapter/matrix/test_dispatcher.py @tests/adapter/matrix/test_invite_space.py From `adapter/matrix/reactions.py`:def build_skills_text(settings: UserSettings) -> str
def build_confirmation_text(description: str) -> str
From adapter/matrix/converter.py:
def from_room_event(event: Any, room_id: str, chat_id: str) -> IncomingEvent | None
From adapter/matrix/handlers/settings.py:
async def handle_settings(
event: IncomingCommand, auth_mgr, platform, chat_mgr, settings_mgr
) -> list
Task 1: Remove reaction-era Matrix UX and update the immediately affected regressions
adapter/matrix/reactions.py, adapter/matrix/converter.py, adapter/matrix/handlers/settings.py, tests/adapter/matrix/test_reactions.py, tests/adapter/matrix/test_converter.py, tests/adapter/matrix/test_dispatcher.py
adapter/matrix/reactions.py, adapter/matrix/converter.py, adapter/matrix/handlers/settings.py, tests/adapter/matrix/test_reactions.py, tests/adapter/matrix/test_converter.py, tests/adapter/matrix/test_dispatcher.py, .planning/phases/01-matrix-qa-polish/01-CONTEXT.md
- Test 1: `build_skills_text` renders only command-driven guidance and never mentions `1️⃣..9️⃣`, `👍`, `❌`, or reaction lookup.
- Test 2: `converter.py` no longer treats Matrix reaction events as supported callbacks.
- Test 3: `handle_settings` returns a dashboard snapshot with skills/soul/safety/chats status and does not advertise `Изменить: !skills, !soul, !safety`.
Finish the cleanup promised by D-06, D-12, and the verification report, and rewrite the tests that would otherwise block the task from being executable. Remove reaction-only constants and lookup helpers from `adapter/matrix/reactions.py` if they are no longer needed, or reduce the module to text-formatting helpers only. Remove `from_reaction` support from `adapter/matrix/converter.py` and any imports that only exist for reaction handling. Update `handle_settings` so the primary dashboard is a strict read-only snapshot; it may still show current skills, soul, safety, and active chats, but it must not tell the user to mutate settings from that surface.
In the same task, update tests/adapter/matrix/test_reactions.py, tests/adapter/matrix/test_converter.py, and the !settings assertion in tests/adapter/matrix/test_dispatcher.py so the verify command matches the code you just changed. Do not leave those test rewrites for Task 2.
Do not remove the dedicated mutable subcommands themselves (!skills, !soul, !safety) because D-13 and D-14 explicitly keep them. The restriction applies only to the !settings dashboard copy.
cd /Users/a/MAI/sem2/lambda/surfaces-bot && pytest tests/adapter/matrix/test_reactions.py tests/adapter/matrix/test_converter.py tests/adapter/matrix/test_dispatcher.py -q
<acceptance_criteria>
adapter/matrix/reactions.pycontains no reaction-number skill labels or reaction lookup helpers in user-facing output.adapter/matrix/converter.pyno longer exports or relies onfrom_reaction.adapter/matrix/handlers/settings.pyno longer renders the mutation prompt in the!settingsdashboard.tests/adapter/matrix/test_reactions.py,tests/adapter/matrix/test_converter.py, and the dashboard assertion intests/adapter/matrix/test_dispatcher.pyare updated in the same task.- Mutable settings subcommands remain implemented outside the
!settingssnapshot. </acceptance_criteria> Matrix adapter surfaces are command-only and!settingsis strictly read-only.
Prefer small, explicit fixtures over broad rewrites. The tests should make it obvious which identifier is the Matrix room_id and which is the logical core chat_id. This task should only clean up the residual room-vs-chat assumptions that remain after Task 1's reaction/settings rewrites.
cd /Users/a/MAI/sem2/lambda/surfaces-bot && pytest tests/adapter/matrix -q
<acceptance_criteria>
tests/adapter/matrix/test_dispatcher.pydistinguishes room ids from chat ids in its Matrix-facing assertions.tests/adapter/matrix/test_invite_space.pyvalidates dynamic chat metadata progression without hardcoding the phase outcome asC1.pytest tests/adapter/matrix -qpasses after the updates. </acceptance_criteria> The Matrix regression suite enforces command-only, room-based behavior and no longer masks defects with legacy assumptions.
<success_criteria>
- No Matrix adapter code parses or advertises reaction-era skill/confirmation UX.
!settingsis a strict snapshot surface.- The full repository suite stays green after the Matrix gap-closure wave. </success_criteria>