docs(rfc): propose service-scoped extensions, splitting SubmitQueue storage per service - #740
Conversation
fcd6c7f to
ead85cc
Compare
|
Agent-written. Layout No store is shared today. A later shared store: interface in
|
behinddwalls
left a comment
There was a problem hiding this comment.
Agent-written.
Requesting changes: split Factory/Storage by service, but keep store interfaces in submitqueue/extension/storage/. Moving *_store.go inverts core/ and is in scope for this RFC. queueconfig stays domain-level (shared). Preserve a colocated schema union.
ead85cc to
ce8de6d
Compare
ce8de6d to
c5ec2dc
Compare
|
@behinddwalls Stack now uses your layout. contracts and their mocks stay at But still one more concern. Splitting contract from implementation costs some cohesion. a table's interface now sits in a different tree from its MySQL code and its Went with yours anyway because it avoids the inversion now. moving the contracts to service level only becomes clean after the other extensions refactor lands and so imo if the store sets stay disjoint indefinitely and the extensions move is definitely happening, cohesion wins and it's worth revisiting before this is entrenched. otherwise I'm happy here. |
c5ec2dc to
73eb649
Compare
…torage per service
73eb649 to
5051dde
Compare
Why?
Both SubmitQueue services depend on one thirteen-store
Storageaggregate, so a gateway controller can resolveBatchStoreand nothing objects. The split is already the documented design —status-list-api.mdsays the gateway owns the request log and three read models, and the orchestrator's stores are pipeline working state — but nothing expresses it.Separating the services onto their own databases already works today; what does not is provisioning. The schema is one filegroup, so each database gets all thirteen tables, including the nine or four that service never reads.
What?
An RFC for the layout rule: when only one service of a multi-service domain resolves an extension, its
Factory, aggregate, implementations, mocks and schema move to{domain}/{service}/extension/{ext}/, while the behaviouralcontracts stay shared.
The split is on reachability, not declaration — what a service may resolve is decided by its aggregate's accessors, so that is the part worth scoping. Moving the contracts too would add no enforcement and cost every domain-level caller a dependency on a service package.
Scope is storage only.
changeprovider,validator,conflict,buildrunnerandspeculationare orchestrator-only and would qualify, but none has a schema and none is the reason for this change; they wait for a later RFC.queueconfigstays shared — gateway-only today, expected in both.Test Plan
Issue