waaseyaa / messaging
Direct messaging infrastructure for Waaseyaa: threads, messages, participants
Requires
- php: >=8.5
- waaseyaa/access: ^0.1.0-alpha.308
- waaseyaa/database-legacy: ^0.1.0-alpha.308
- waaseyaa/entity: ^0.1.0-alpha.308
- waaseyaa/entity-storage: ^0.1.0-alpha.308
- waaseyaa/foundation: ^0.1.0-alpha.308
Requires (Dev)
- phpunit/phpunit: ^13.0
- waaseyaa/field: ^0.1.0-alpha.308
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main / 0.1.x-dev
- v0.1.0-alpha.308
- v0.1.0-alpha.307
- v0.1.0-alpha.306
- v0.1.0-alpha.305
- v0.1.0-alpha.304
- v0.1.0-alpha.303
- v0.1.0-alpha.302
- v0.1.0-alpha.301
- v0.1.0-alpha.300
- v0.1.0-alpha.299
- v0.1.0-alpha.298
- v0.1.0-alpha.297
- v0.1.0-alpha.296
- v0.1.0-alpha.295
- v0.1.0-alpha.294
- v0.1.0-alpha.293
- v0.1.0-alpha.292
- v0.1.0-alpha.291
- v0.1.0-alpha.290
- v0.1.0-alpha.289
- v0.1.0-alpha.288
- v0.1.0-alpha.287
- v0.1.0-alpha.286
- v0.1.0-alpha.285
- v0.1.0-alpha.284
- v0.1.0-alpha.283
- v0.1.0-alpha.282
- v0.1.0-alpha.281
- v0.1.0-alpha.280
- v0.1.0-alpha.279
- v0.1.0-alpha.278
- v0.1.0-alpha.277
- v0.1.0-alpha.276
- v0.1.0-alpha.275
- v0.1.0-alpha.274
- v0.1.0-alpha.273
- v0.1.0-alpha.272
- v0.1.0-alpha.271
- v0.1.0-alpha.270
- v0.1.0-alpha.269
- v0.1.0-alpha.268
- v0.1.0-alpha.267
- v0.1.0-alpha.266
- v0.1.0-alpha.265
- v0.1.0-alpha.264
- v0.1.0-alpha.263
- v0.1.0-alpha.262
- v0.1.0-alpha.261
- v0.1.0-alpha.260
- v0.1.0-alpha.259
- v0.1.0-alpha.258
- v0.1.0-alpha.257
- v0.1.0-alpha.256
- v0.1.0-alpha.255
- v0.1.0-alpha.254
- v0.1.0-alpha.253
- v0.1.0-alpha.252
- v0.1.0-alpha.251
- v0.1.0-alpha.250
- v0.1.0-alpha.249
- v0.1.0-alpha.248
- v0.1.0-alpha.247
- v0.1.0-alpha.246
- v0.1.0-alpha.245
- v0.1.0-alpha.244
- v0.1.0-alpha.243
- v0.1.0-alpha.242
- v0.1.0-alpha.241
- v0.1.0-alpha.240
- v0.1.0-alpha.239
- v0.1.0-alpha.238
- v0.1.0-alpha.237
- v0.1.0-alpha.236
- v0.1.0-alpha.235
- v0.1.0-alpha.234
- v0.1.0-alpha.233
- v0.1.0-alpha.232
- v0.1.0-alpha.231
- v0.1.0-alpha.230
- v0.1.0-alpha.229
- v0.1.0-alpha.228
- v0.1.0-alpha.227
- v0.1.0-alpha.226
- v0.1.0-alpha.225
- v0.1.0-alpha.224
- v0.1.0-alpha.223
- v0.1.0-alpha.222
- v0.1.0-alpha.221
- v0.1.0-alpha.220
- v0.1.0-alpha.219
- v0.1.0-alpha.218
- v0.1.0-alpha.217
- v0.1.0-alpha.216
- v0.1.0-alpha.215
- v0.1.0-alpha.214
- v0.1.0-alpha.213
- v0.1.0-alpha.212
- v0.1.0-alpha.211
- v0.1.0-alpha.210
- v0.1.0-alpha.209
- v0.1.0-alpha.208
- v0.1.0-alpha.207
- v0.1.0-alpha.206
- v0.1.0-alpha.205
- v0.1.0-alpha.204
- v0.1.0-alpha.203
- v0.1.0-alpha.202
- v0.1.0-alpha.201
- v0.1.0-alpha.200
- v0.1.0-alpha.199
- v0.1.0-alpha.198
- v0.1.0-alpha.197
- v0.1.0-alpha.196
- v0.1.0-alpha.195
- v0.1.0-alpha.194
- v0.1.0-alpha.193
- v0.1.0-alpha.192
- v0.1.0-alpha.191
- v0.1.0-alpha.190
- v0.1.0-alpha.189
- v0.1.0-alpha.188
- v0.1.0-alpha.187
- v0.1.0-alpha.186
- v0.1.0-alpha.185
- v0.1.0-alpha.184
- v0.1.0-alpha.183
- v0.1.0-alpha.182
- v0.1.0-alpha.181
- v0.1.0-alpha.180
- v0.1.0-alpha.179
- v0.1.0-alpha.178
- v0.1.0-alpha.177
- v0.1.0-alpha.176
- v0.1.0-alpha.175
- v0.1.0-alpha.174
- v0.1.0-alpha.173
- v0.1.0-alpha.172
- v0.1.0-alpha.171
- v0.1.0-alpha.170
- v0.1.0-alpha.169
- v0.1.0-alpha.168
- v0.1.0-alpha.167
- v0.1.0-alpha.166
- v0.1.0-alpha.165
- v0.1.0-alpha.164
- v0.1.0-alpha.163
- v0.1.0-alpha.162
- v0.1.0-alpha.161
- v0.1.0-alpha.160
- v0.1.0-alpha.159
- v0.1.0-alpha.158
- v0.1.0-alpha.157
- v0.1.0-alpha.156
- v0.1.0-alpha.155
- v0.1.0-alpha.154
- v0.1.0-alpha.153
- v0.1.0-alpha.152
- v0.1.0-alpha.151
- v0.1.0-alpha.150
- v0.1.0-alpha.149
- v0.1.0-alpha.148
- v0.1.0-alpha.147
- v0.1.0-alpha.146
- v0.1.0-alpha.145
- v0.1.0-alpha.143
- v0.1.0-alpha.140
- v0.1.0-alpha.139
- v0.1.0-alpha.138
- v0.1.0-alpha.137
- v0.1.0-alpha.136
- v0.1.0-alpha.135
- v0.1.0-alpha.134
- v0.1.0-alpha.133
- v0.1.0-alpha.132
- v0.1.0-alpha.131
- v0.1.0-alpha.130
- v0.1.0-alpha.129
- v0.1.0-alpha.128
- v0.1.0-alpha.127
- v0.1.0-alpha.126
- v0.1.0-alpha.125
- v0.1.0-alpha.124
- v0.1.0-alpha.123
- v0.1.0-alpha.122
- v0.1.0-alpha.121
- v0.1.0-alpha.120
- v0.1.0-alpha.119
- v0.1.0-alpha.118
- v0.1.0-alpha.117
- v0.1.0-alpha.116
- v0.1.0-alpha.115
- v0.1.0-alpha.114
- v0.1.0-alpha.113
- v0.1.0-alpha.112
- v0.1.0-alpha.111
- v0.1.0-alpha.110
- v0.1.0-alpha.65
This package is auto-updated.
Last update: 2026-10-23 15:17:56 UTC
README
Layer 3: generic messaging primitives and access integration.
The package owns MessageThread, ThreadParticipant, ThreadMessage,
MessagingServiceProvider and MessagingAccessPolicy. It supplies membership
records, participant-based access decisions, atomic acting-creator membership
and a participant schema transition. It does not supply a complete send service,
read-receipt progression, unread-count service, presence or push delivery.
Installation and composition
Messaging is opt-in; the default core/cms/full runtime closures do not include it. Install a release compatible with the rest of the Framework cohort:
composer require waaseyaa/messaging
Composer's extra.waaseyaa.providers and extra.waaseyaa.policies declare
provider and policy discovery. The canonical kernel supplies the entity manager,
Framework Symfony event-dispatcher adapter and current account context. Registration
adds the three entity types; boot attaches the creator bootstrap subscriber.
Standalone manual composition must supply those same services and install the
normal entity/access read guard. Constructing entities or policies alone does
not qualify provider discovery, HTTP authorization or installed-package behavior.
The supported storage contract is default sql-blob on S1 SQLite. Thread and
participant repositories must support atomic SQL writes and share the managed
transaction connection. Memory-only composition is refused at provider boot;
directly registered subscribers also refuse unsupported writes. Missing manager
or Framework dispatcher currently skips subscriber registration; consumers must
not interpret that path as qualified messaging capability.
Creation and access
Saving a new thread through canonical provider/repository composition captures
the actual authenticated account at PRE_SAVE and writes its owner membership
before transaction commit. Both rows persist, or neither does. Insertion failures
propagate. Submitted created_by does not establish the bootstrap actor. Trusted
actorless creation creates no membership. Discard failed in-memory entities and
use fresh objects when retrying; rollback does not rewind assigned identities.
Current policy permits authenticated thread creation and uses membership for
thread/message/participant access, with administer content bypass. Generic API
field-edit checks also inspect the target thread. This is current behavior,
not a settled role-specific invitation, sender-edit or deletion contract.
Membership authority, sender binding, last-owner rules, parent deletion,
retention and read-state progression remain explicit convergence decisions.
Application consent and moderation policy belong to consumers.
Protected entity/field factories provide immutable-principal decisions through the access package's interfaces. Their concrete public adapter classes also support independent PSR-4 loading. Outsider and missing-repository refusal is preserved; no compatibility wrapper is needed.
Schema and upgrades
Entity attributes declare schema transitions and the unique (thread_id, user_id)
key. SqlSchemaHandler applies ThreadParticipantSchema before that key. The
transition materializes identity columns, backfills valid stored identity data
and merges duplicate memberships into the lowest ID, retaining owner role,
earliest join and greatest read position. Repeated application preserves state.
Malformed/scalar blobs are not converted into invented identity data.
The provider does not own an independent backfill engine. Full no-dev split and HTTP composition qualification remains an audit gap. See the enduring contract and the assessment.