feat: ms.ExposeTable — producer-side read-only table exposure#125
Merged
Conversation
Producer-side declaration ms.ExposeTable(name) marking a table eligible for cross-module SELECT. Read-only, tables only (v1). No per-consumer readableBy allowlist (the publisher-controlled model rejected in #95) — the producer marks eligibility; the app owner is the trust root and decides who reads by installing the depending module. - registry: AddExposedTable (set-union dedup) + ExposedTables() (sorted clone) - core/expose.go: (m *Module).ExposeTable + package-level facade - manifest: always-present exposes.tables block, from reg.ExposedTables() - mirrorstack.go: public ms.ExposeTable facade - 13 unit tests (dedup/sort determinism, manifest wire shape, facade panics) - VERSION 0.2.4->0.2.5 + CHANGELOG entry Part of Milestone F (cross-module table reads). Platform side (publish storage + install validate/consent/GRANT) lands in api-platform separately. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Producer-side
ms.ExposeTable(name)— marks a table eligible for cross-moduleSELECT. Read-only, tables only (v1). Surfaced in the manifest as a top-levelexposes.tables(flat, sorted, de-duplicated name list).Trust model (settles the axis #95 was closed over): no publisher-controlled
readableByallowlist. The producer only marks eligibility; the app owner is the trust root and decides who reads by installing the depending module. Pairs with the existing consumer sidems.DependsOn(x).Table(name).What's in it
internal/registry:AddExposedTable(set-union dedup) +ExposedTables()(sorted, non-nil clone — deterministic manifest)internal/core/expose.go:(m *Module).ExposeTable+ package-level facade (panics beforeInit, mirrorsEmits/Cron)system/manifest.go: always-presentexposesblock →{"exposes":{"tables":[...]}}mirrorstack.go: publicms.ExposeTablefacade with the full trust-model doc commentVERSION0.2.4→0.2.5 + CHANGELOGNotes
GRANT SELECT) lands in a separate api-platform PR.🤖 Generated with Claude Code