- 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#7Closes#9Closes#14
- Seed invite tests with explicit next_chat_index progression instead of C1 assumptions
- Separate Matrix room ids from logical chat ids in dispatcher coverage
- Verify the full Matrix adapter suite against the tightened assertions
- Drop reaction-based skill and confirmation helpers from Matrix conversion
- Render !settings as a strict read-only dashboard snapshot
- Align Matrix adapter regressions with command-only helper text
- Assert skills text no longer includes reaction-era labels
- Require converter to drop reaction callback support
- Lock !settings dashboard to read-only snapshot copy
- add MAT-01..MAT-07 and MAT-09..MAT-12 regression tests for matrix adapter
- extend store and dispatcher coverage for pending confirmations and settings dashboard
- verify matrix adapter suite and full pytest suite stay green
- rewrite invite/new-chat assertions for Space-based Matrix flow
- replace legacy reaction text checks with !skill on/off expectations
- validate confirmation text against !yes and !no prompts
- add execution summary for Matrix text confirmation changes
- update state tracking and roadmap progress for phase 01
- record plan completion details for follow-up test work
- replace reaction-based helper text with !yes/!no and !skill commands
- resolve confirm and cancel through pending confirmation state
- render !settings as a read-only status dashboard
- drop reaction event handling from Matrix bot
- render OutgoingUI as text with !yes/!no instructions
- persist pending confirmations when UI buttons are sent
- record the 01-02 execution summary and self-check
- update roadmap progress for completed phase 01 plans
- persist state decisions, metrics, and next-plan focus
- register archive and rename as client-aware closure handlers
- rename matrix rooms via stored surface_ref when a client is available
- keep archive scoped to core chat state for phase 1
- create new chat rooms inside the user's space
- store space-aware room metadata with next_chat_id
- handle room creation failures with user-facing messages
- sdk/mock.py: stream_message was async def (coroutine), must be async
generator with yield — caused TypeError on every user message
- topic_events.py: on_topic_created now skips bot-created topics
(from_user.id == bot.id); cmd_new already registers them under the
correct human user_id
- commands.py: cmd_archive now sends "Чат архивирован." confirmation
- test_topic_events.py: add bot=SimpleNamespace(id=BOT_ID) to fixture