feat(modules): GroupDocsService + docs::shared_collection handle (§11.6 docs C3)
The runtime for shared group docs collections, mirroring the group-KV vertical
with the docs surface (filter parsing, JSON-object validation, value-size cap).
- shared: GroupDocsService trait + GroupDocsError (+ CollectionNotShared) +
NoopGroupDocsService; group_docs field on Services + with_group_docs().
- manager-core: GroupDocsServiceImpl — owning_group resolves kind='docs' from
cx.app_id's chain (CollectionNotShared off-chain); reads-open (script_gate
GroupDocsRead) / writes-authed (script_gate_require_principal GroupDocsWrite);
reuses parse_filter + docs value-size cap; no events. Unit tests cover
off-chain CollectionNotShared, anon-read-OK/anon-write-Forbidden, non-object
data rejected.
- executor-core: GroupDocsHandle + docs::shared_collection constructor + the
create/get/find/find_one/update/delete/list methods (dispatch by receiver
type), reusing doc_to_map/parse_doc_id.
- picloud: wire PostgresGroupDocsRepo + GroupDocsServiceImpl.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>