Reproduction steps:
- Publish any module (not workflow) via
railcall market publish <dir> --type=module,
where the module has one or more commands declaring write_requires_approval.
- View the resulting listing's provenance/detail block (storefront or
market get).
Expected: A listing for a module where commands require human approval should show
something reflecting that (e.g. require_human), the same way a workflow listing's
approval field evidently does.
Actual: The listing shows approval: auto unconditionally, regardless of the module's
actual command modes. Traced through railcall_cli.py: _market_get's detail view
reads listing.get("approval") or "auto_approve", defaulting to "auto" whenever the
field is absent — and neither _market_publish_module nor the generic _market_publish
(~line 6270) ever sets an approval key on the submission payload for module-type
listings at all. It's a workflow-spec concept that was never wired up for modules.
Impact: this is specifically misleading for governance-focused modules — a listing can
display "approval: auto" while the actual module requires human approval on most or
all of its write commands, which is the opposite signal from what a prospective
installer or judge would reasonably infer.
Root cause: module-type publish never computes or transmits an approval classification;
the CLI/backend defaults absent values to "auto_approve" regardless of listing type.
Suggested fix: either have the marketplace backend derive approval for module
listings from module.json's command mode fields at publish/ingest time
(e.g. require_human if any command is write_requires_approval, else auto),
or have _market_publish_module compute and include it explicitly the same way
workflow publishes do.
Station version (railcall version): station-v1.5.8
Module slug + version: muhammad-akif-janjua/slack-guard v0.4.1