coulomb-social/docs/usecases/registry.json
tegwick 1c69bdce62
Some checks failed
Use-case regression gate / usecase-regressions (push) Has been cancelled
Allow explicit space grants across platform identity tenants
Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a192e9-c28b-7533-bf25-e2341364c22a
2026-11-01 20:48:33 +01:00

180 lines
8.7 KiB
JSON

{
"schema_version": 1,
"cases": [
{
"id": "CSOC-UC-008",
"title": "ReichelAg weekly founder-call protocols",
"established": true,
"confirmation": "user-confirmed",
"transfer_status": "accepted",
"narrative": "docs/usecases/reichelag-weekly-call.md",
"fixture": "tests/usecases/fixtures/reichelag-weekly-call.json",
"contract": [
"Duplicate the complete previous protocol without changing the original",
"Generate the duplicate filename from its new title unless explicitly chosen; allow later title/file rename without loss or overwrite",
"Edit and save the next agenda/protocol by hand and reopen it",
"Copy the complete title, italic subtitle, original Markdown and legacy footer, with rich HTML for external email",
"Fall back to selected manual text when clipboard writes are denied",
"Readers may read and copy but not modify; outsiders cannot read",
"The app does not send the email or need Bubble for these steps"
],
"tests": {
"fast": [
"tests/test_reichelag_workflow.py::test_full_protocol_duplicate_edit_and_clipboard_control",
"tests/test_reichelag_workflow.py::test_protocol_naming_rename_and_collision_safety",
"tests/test_private_assets.py::test_owner_and_reader_get_exact_private_image",
"tests/test_private_assets.py::test_outsider_foreign_tenant_revoked_archived_and_anonymous_denied",
"tests/test_private_assets.py::test_display_uses_private_images_without_clipboard_changes"
],
"browser": [
"tests/usecases/test_reichelag_browser.py::test_weekly_call_through_real_ui"
]
},
"manual_review": [
"Reconcile the latest actual ReichelAg protocol and its links/assets",
"Paste into the user's usual mail client and review presentation",
"Confirm live persistence and measured paired restore before transfer"
],
"acceptance_ref": "history/20261008T084657Z-weekly-call-acceptance.md"
},
{
"id": "CSOC-UC-009",
"title": "Personal account recovery",
"established": false,
"confirmation": "user-confirmed",
"transfer_status": "accepted",
"narrative": "docs/usecases/platform-communication.md",
"fixture": "tests/usecases/fixtures/platform-communication-009.json",
"contract": [
"Request a new password reset, receive it privately and sign in to the workspace",
"Identity credentials and reset handles remain outside the application"
],
"tests": {
"fast": [
"tests/test_identity_regressions.py::test_consumed_callback_state_cannot_be_replayed",
"tests/test_identity_regressions.py::test_same_email_different_identity_cannot_take_over_member",
"tests/test_oidc_userinfo_binding.py::test_callback_refuses_userinfo_without_matching_signed_subject[userinfo0]",
"tests/test_oidc_userinfo_binding.py::test_callback_requires_verified_id_token_even_with_userinfo[None]",
"tests/test_oidc_userinfo_binding.py::test_matching_userinfo_enriches_profile_without_replacing_signed_authority",
"tests/test_oidc_userinfo_binding.py::test_userinfo_cannot_satisfy_requested_step_up",
"tests/test_oidc_userinfo_binding.py::test_unavailable_userinfo_keeps_verified_token_login"
],
"browser": [
"tests/usecases/test_communication_browser.py::test_isolated_recovery_registration_and_invitation"
]
},
"owner_regression_contract": "docs/usecases/communication-regressions.json",
"manual_review": [
"Loopback issuer/mailbox double is bound; real portal, SMTP and owner admission remain open"
],
"acceptance_ref": "history/20261006T185411Z-personal-workspace-acceptance.md",
"native_browser_tests": [
"scripts/native_recovery/test_journey.py::test_native_reset_directory_smtp_issuer_and_app"
],
"native_browser_gate": "make check-native-recovery"
},
{
"id": "CSOC-UC-010",
"title": "Registration verification",
"established": false,
"confirmation": "inferred",
"transfer_status": "pending-user-review",
"narrative": "docs/usecases/platform-communication.md",
"fixture": "tests/usecases/fixtures/platform-communication-010.json",
"contract": [
"Single-use tenant/client-bound verification is retry-safe and conveys no authorization"
],
"tests": {
"fast": [
"tests/test_shell.py::test_registration_link_uses_only_configured_destination"
],
"browser": [
"tests/usecases/test_communication_browser.py::test_isolated_recovery_registration_and_invitation"
]
},
"owner_regression_contract": "docs/usecases/communication-regressions.json",
"manual_review": [
"Owner-source portal/HTTP adapters/scoped receiver browser gate passes; synthetic session, authorization and directory adapters remain explicit. Productive per-flow verdict remains required."
],
"owner_browser_tests": [
"scripts/owner_communication/test_browser.py::test_real_owner_registration_and_invitation"
],
"owner_browser_command": "make check-owner-communication"
},
{
"id": "CSOC-UC-011",
"title": "Member invitation",
"established": false,
"confirmation": "inferred",
"transfer_status": "pending-user-review",
"narrative": "docs/usecases/platform-communication.md",
"fixture": "tests/usecases/fixtures/platform-communication-011.json",
"contract": [
"Fixed invitation template, one provider submission per event, suppression and safe retries"
],
"tests": {
"fast": [],
"browser": [
"tests/usecases/test_communication_browser.py::test_isolated_recovery_registration_and_invitation"
]
},
"owner_regression_contract": "docs/usecases/communication-regressions.json",
"manual_review": [
"Owner-source portal/HTTP adapters/scoped receiver browser gate passes; synthetic session, authorization and directory adapters remain explicit. Productive per-flow verdict remains required."
],
"owner_browser_tests": [
"scripts/owner_communication/test_browser.py::test_real_owner_registration_and_invitation"
],
"owner_browser_command": "make check-owner-communication"
},
{
"id": "CSOC-UC-012",
"title": "Application notification and reply",
"established": false,
"confirmation": "inferred",
"transfer_status": "deferred",
"narrative": "docs/usecases/platform-communication.md",
"fixture": "tests/usecases/fixtures/platform-communication-012.json",
"contract": [
"Each application notification needs an admitted caller, template, recipient purpose and monitored reply route"
],
"tests": {
"fast": [],
"browser": []
},
"owner_regression_contract": "docs/usecases/communication-regressions.json",
"manual_review": [
"Isolated owner-spanning browser coverage and admission remain required"
]
},
{
"id": "CSOC-UC-005",
"title": "Owner-managed space sharing across platform identity tenants",
"established": true,
"confirmation": "user-confirmed",
"transfer_status": "pending-user-review",
"narrative": "docs/usecases/sharing-portability-review.md",
"fixture": "tests/usecases/fixtures/space-sharing.json",
"contract": [
"An owner may grant a role on a space to any active Coulomb member regardless of platform identity tenant",
"Private spaces and files require an explicit grant or creator ownership; platform groups confer no space access",
"Viewers read, download and copy text but cannot edit, duplicate pages or manage sharing; members edit; owners manage grants",
"Revocation removes access to pages, attachments and incoming addresses; a moved page also requires destination access",
"Personal exports include the requesting member\u2019s grants; ownership succession includes owners from other platform tenants"
],
"tests": {
"fast": [
"tests/test_member_portability.py::test_owner_shares_reader_then_revokes_without_email",
"tests/test_content_revisions.py::test_incoming_page_addresses_survive_rename_move_and_enforce_every_grant"
],
"browser": [
"tests/usecases/test_attachments_browser.py::test_attachment_upload_copy_move_download_and_detach_through_ui"
]
},
"manual_review": [
"Retest testuser grant, viewer permissions, private destination/old-address denial and revocation after release"
],
"acceptance_ref": "workplans/CSOC-WP-0013-sharing-content-hardening.md"
}
]
}