The contributor-submission flow is one of the strongest features in the product — /portal/submissions/{id} in particular. These are the gaps on the reviewer's side, where the reviewer approves without being shown what they are approving.
C4b — The reviewer cannot see the attestations the submitter accepted
attestations.accepted[{template_id, accepted_at}] is stored and returned by the API.
/admin/submissions/{id} renders Submission Info, Privacy, Support, Resource Configuration, Test Results and Review History — and nothing about what the submitter signed or when.
The entire point of a legal sign-off gate is that the reviewer can see the sign-off. The data is there and never rendered.
Fix: a panel on the review page listing each accepted attestation with its timestamp. This is the difference between an attestation feature and an attestation record.
C4c — "Test Connection" does not test the connection, for tools
POST /submissions/:id/test branches on resource type:
- datasource → genuinely reaches out to the embedding service
- tool → only re-runs
ValidateOASSpec server-side and reports "Spec valid — 2 operations"
The button, the label and the result all read as "we called it and it answered". Same button, two different guarantees, and the name promises the stronger one. A reviewer can approve a tool whose server block points nowhere.
Fix: rename per resource type (Validate specification / Test connection), or actually probe the upstream.
C4d — Review History renders User #1
ui/admin-frontend/src/admin/pages/SubmissionReview.js:539
{activity.actor_name || `User #${activity.actor_id}`} —
Two panels above, the Reviewer field renders Alice correctly (:305 has the same fallback but the name resolves). An audit trail that does not name people is most of the way to not being an audit trail. Also at SubmissionReviewQueue.js:212.
Fix: populate actor_name on activity records.
C4e — Attestation Templates table prints the raw enum
Shows all where the form that created it offered All resource types / Data sources only / Tools only.
C4f — A Tool created from a submission has an empty tool_type
The seeded Weather tool carries "REST"; the submitted one carries "". Both work identically over REST and MCP, but the portal card renders REST · MCP · Community for one and only Community for the other — so a community contribution looks less capable than an identical admin-created tool, which is precisely backwards for a feature whose job is to make contributions first-class.
C4g — The contributions tab says PUBLISHED; the badge on the card says Approved
And "published" is the wrong word either way, since approval publishes nothing (see the permissive-defaults issue, B0).
Acceptance
From the UX & UI review of the demo set (section C4b–C4g).
The contributor-submission flow is one of the strongest features in the product —
/portal/submissions/{id}in particular. These are the gaps on the reviewer's side, where the reviewer approves without being shown what they are approving.C4b — The reviewer cannot see the attestations the submitter accepted
attestations.accepted[{template_id, accepted_at}]is stored and returned by the API./admin/submissions/{id}renders Submission Info, Privacy, Support, Resource Configuration, Test Results and Review History — and nothing about what the submitter signed or when.The entire point of a legal sign-off gate is that the reviewer can see the sign-off. The data is there and never rendered.
Fix: a panel on the review page listing each accepted attestation with its timestamp. This is the difference between an attestation feature and an attestation record.
C4c — "Test Connection" does not test the connection, for tools
POST /submissions/:id/testbranches on resource type:ValidateOASSpecserver-side and reports "Spec valid — 2 operations"The button, the label and the result all read as "we called it and it answered". Same button, two different guarantees, and the name promises the stronger one. A reviewer can approve a tool whose server block points nowhere.
Fix: rename per resource type (Validate specification / Test connection), or actually probe the upstream.
C4d — Review History renders
User #1ui/admin-frontend/src/admin/pages/SubmissionReview.js:539Two panels above, the Reviewer field renders Alice correctly (
:305has the same fallback but the name resolves). An audit trail that does not name people is most of the way to not being an audit trail. Also atSubmissionReviewQueue.js:212.Fix: populate
actor_nameon activity records.C4e — Attestation Templates table prints the raw enum
Shows
allwhere the form that created it offered All resource types / Data sources only / Tools only.C4f — A Tool created from a submission has an empty
tool_typeThe seeded Weather tool carries
"REST"; the submitted one carries"". Both work identically over REST and MCP, but the portal card rendersREST · MCP · Communityfor one and onlyCommunityfor the other — so a community contribution looks less capable than an identical admin-created tool, which is precisely backwards for a feature whose job is to make contributions first-class.C4g — The contributions tab says PUBLISHED; the badge on the card says Approved
And "published" is the wrong word either way, since approval publishes nothing (see the permissive-defaults issue, B0).
Acceptance
tool_typeas an equivalent admin-created oneFrom the UX & UI review of the demo set (section C4b–C4g).