Assistant: codex Assistant-Model: gpt-6.1-sol Assistant-Session: 01a119cf-56d0-7fa3-840b-eb8732e1db0b
92 lines
7.9 KiB
Markdown
92 lines
7.9 KiB
Markdown
# Platform communication use cases
|
||
|
||
CSOC-WP-0010-T06, reviewed 2026-10-07. Authentication uses native Authelia
|
||
SMTP; application invitation/verification delivery uses the existing
|
||
email-connect service. ReichelAg protocol distribution remains UC-008's manual
|
||
clipboard/email workflow.
|
||
|
||
These stable IDs are registered in `registry.json` with synthetic fixture
|
||
references, app-side fast checks and `established: false`. Owner-spanning browser
|
||
coverage is still required under T06. Personal recovery retains its recorded
|
||
user acceptance; it is not marked as an established automated journey until
|
||
its full fast/browser contract can be protected. UC-010–012 remain candidates.
|
||
|
||
| ID | Actor, goal and steps | Expected outcome / evidence | Status and owner |
|
||
| --- | --- | --- | --- |
|
||
| CSOC-UC-009 | Existing member requests a new reset on the identity portal, receives email, sets a password privately, then signs into the app | Fresh inbox receipt and personal workspace reached; reset URL/password never enter app logs, Git or Hub | User-confirmed and accepted 2026-10-06 for the existing personal account; WP-0010-T02/T03 and WP-0008-T11 done |
|
||
| CSOC-UC-010 | New member starts approved registration, receives the verification message, then consumes or cancels its link | Expiring, single-use, purpose-bound channel evidence; cancellation and consumption invalidate one another; account admission remains user-engine's decision | Candidate; implemented service behavior, current personal user workflow not reviewed; T04/T06 with user-engine/NetKingdom/email-connect |
|
||
| CSOC-UC-011 | Authorized inviter invites a member; a deliberate resend creates a new event | Fixed invitation template, one provider submission per event, suppression respected; provider acceptance does not establish inbox receipt | Candidate; implemented service behavior, productive user acceptance pending; T04/T06 with user-engine/email-connect |
|
||
| CSOC-UC-012 | Member receives a specifically approved application notification and can obtain help through its reply path | Caller/template/recipient authorization, bounded sending, redacted delivery state and monitored reply route | Future candidate; no product template/caller admitted; T04/T05/T06 |
|
||
|
||
Personal acceptance reference:
|
||
[workspace acceptance](../../history/20261006T185411Z-personal-workspace-acceptance.md).
|
||
Original Bubble reset/invitation semantics remain unobserved; UC-009 establishes
|
||
the replacement's accepted recovery path rather than claiming Bubble parity.
|
||
|
||
## Synthetic regression matrix
|
||
|
||
Only reserved example addresses, synthetic accounts and injected transports are
|
||
allowed. Native recovery tests need an isolated issuer, directory, mailbox sink
|
||
and application; never route a regression through the production mail provider.
|
||
Do not record usable reset/verification URLs in reports. No mailbox scans or
|
||
live sends are part of the gate.
|
||
|
||
| Layer / contract | Existing coverage | Remaining gate |
|
||
| --- | --- | --- |
|
||
| App identity boundary | `tests/test_identity_regressions.py`: consumed callback cannot replay; equal email cannot take over another issuer/subject | UC-009 real-browser issuer reset → local inbox → app login, expired/replayed reset denial, directory isolation |
|
||
| Registration handoff | `tests/test_shell.py::test_registration_link_uses_only_configured_destination` | UC-010 browser request/verify/cancel; preserve tenant/client binding through owner flow |
|
||
| Invitation auth/template/recipient/key/suppression | email-connect `tests/test_transactional.py`: `test_rejects_auth_recipient_template_and_key`, `test_suppression_blocks_send` | Separate caller identities, caller/template/tenant scope, request limits; no authority from payload `source` |
|
||
| Invitation retry / uncertain outcome | Owner tests `test_sends_fixed_template_once`, `test_resend_is_separate_event_and_sends_again`, `test_lost_post_send_record_never_resends_after_restart`, `test_definitive_failure_retries_but_changed_payload_is_rejected`, `test_disconnect_after_smtp_acceptance_never_releases_reservation` | Per-caller event namespace, bounded retry schedule and operator handling of unknown outcomes |
|
||
| Verification privacy and replay | Owner tests `test_registration_verification_is_digest_only_and_single_use`, `test_registration_cancellation_is_single_use_and_prevents_verification`, `test_mailbox_evidence_is_not_authorization`, plus retry/restart/concurrency functions bound below | Expired-handle and binding denials through an isolated owner-spanning browser journey |
|
||
| Provider failure / diagnostic redaction | Owner tests `test_provider_timeout_temporary_and_permanent_are_redacted`, `test_status_authenticates_without_sending_and_redacts_errors` | No tokens, recipient/body or provider details in diagnostic projections; caller-scoped status; provider acceptance and inbox receipt shown separately |
|
||
| Reply/bounce operations | Offline scanner fixtures exist in email-connect | Named monitored inbox, authorized inbound access, correlated bounce → suppression, bounded retention and support escalation |
|
||
|
||
Historical owner baseline (2026-10-07): 27 transactional tests pass at source
|
||
`73702b7e1a1671948b0545ef32d6e0de9cca9c65`, clean checkout.
|
||
This is local source evidence, not a deployed version or fresh inbox receipt.
|
||
Reproduction from this repository's installed Python environment:
|
||
|
||
```sh
|
||
PYTHONDONTWRITEBYTECODE=1 PYTHONPATH=/home/worsch/email-connect/src \
|
||
.venv/bin/python -m pytest -c /home/worsch/email-connect/pyproject.toml \
|
||
/home/worsch/email-connect/tests/test_transactional.py -p no:cacheprovider \
|
||
--basetemp=/tmp/csoc-email-owner-tests
|
||
```
|
||
|
||
## Reproducible owner regression gate — 2026-10-08
|
||
|
||
Run `make check-communication EMAIL_CONNECT_ROOT=/path/to/email-connect`.
|
||
`communication-regressions.json` binds 37 module-qualified required test functions covering
|
||
authorization/template/recipient denial, suppression, provider failure and
|
||
redaction, invitation uncertainty and verification restart/concurrency safety.
|
||
The runner copies only Python source and the two declared synthetic test modules to a private
|
||
temporary tree. It denies socket connects and DNS, strips inherited credentials,
|
||
disables plugin autoload, and refuses removed or skipped/xfail contract coverage.
|
||
It leaves the owner checkout untouched. Gate tests in `make check` prove those
|
||
failure boundaries. No mailbox, SMTP, issuer or live account is contacted.
|
||
|
||
The redacted receipt at `var/test-results/communication.json` binds exact
|
||
executed source/test/contract hashes and records counts, missing tests and
|
||
outstanding acceptance. The current owner check passes **66 tests, zero skips**.
|
||
This closes the stale verification-retry baseline above: accepted and uncertain
|
||
outcomes now retain their reservations across retries/restarts; definitive
|
||
retryable refusals cancel the failed challenge before retry.
|
||
|
||
Before marking UC-009–012 as established protected journeys, bind the missing
|
||
browser node IDs in their owners, arrange the isolated issuer/mailbox/application
|
||
harness, and record owner admission. `make check` protects UC-008 and tests the
|
||
new app UI; `check-communication` is a separate explicitly selected owner gate.
|
||
Independent caller scopes, persisted limits and redacted status are implemented
|
||
in owner source f703bf6 (EMAIL-WP-0008), with148 full tests including the isolated
|
||
mail harness and scoped-ledger rehearsal. Runtime policy/credential, sender,
|
||
ledger backup admission,
|
||
inbox ownership, DNS alignment and productive per-flow user acceptance remain
|
||
open. [Owner review](/home/worsch/email-connect/docs/caller-admission-2026-10-08.md).
|
||
|
||
## Current work ownership — 2026-10-08
|
||
|
||
WP-0010 is finished at the user's instruction. Existing personal reset acceptance
|
||
and receiver deployment remain evidenced. Its unfinished T04/T05/T06 scopes are
|
||
superseded by WP-0015-T01/T03, WP-0015-T02/T03 and WP-0015-T04 respectively.
|
||
EMAIL-WP-0008-T03, EMAIL-WP-0007 and RPF-WP-0053 retain canonical owner/custody
|
||
work. WP-0010 references above are historical provenance, not active gates.
|