Found while assessing the Agent Marketplace after phase 8. Three individually-reasonable v1 non-goals compose into a governance hole that none of them was evaluated against.
The composition
| Decision |
Where |
| No re-review on edit — "the listing is reviewed, not every subsequent change" |
D2 / Non-goals |
| No agent versioning or changelogs — "a published Agent is a live pointer; updates are immediate" |
Non-goals |
| Admins can lock a role-seeded pin so members cannot remove it |
D9 / phase 6 |
update_agent_endpoint passes instructions straight through to update_assistant and never touches listing state (backend/src/apis/app_api/agent_designer/routes.py:413). So:
An admin locks an Agent into every member of a role's sidebar → the author then rewrites its instructions → the new behavior is live immediately, for everyone, with no re-review, no version history, no notification to the admin who locked it, and nothing in the reports queue.
Verified live on dev that a locked role pin overrides a user's own dismissal — the tombstone loses to the lock, by design. So the affected user cannot opt out either.
Why this wasn't caught
Each non-goal was decided before locked pins existed. D2's "no re-review on edit" is entirely defensible for an Agent someone chose to pin. It reads differently when an admin pinned it for them and removed the opt-out. Phase 6 added the lock without revisiting D2.
Not asking for versioning
The Non-goals list is probably right that v1 shouldn't build changelogs. Cheaper options that close most of the gap:
- Notify or re-queue on edit, but only for Agents that are published AND locked somewhere. Narrow blast radius — most edits stay frictionless.
- Surface a "changed since approval" marker on the admin Listings row, using
updatedAt vs the listing's approval timestamp. Pure read, no new state.
- Record the approved instructions hash at approval and show a diff-available indicator. One field.
- Decide explicitly that this is acceptable and write it into the spec as a named risk, so the next person doesn't rediscover it.
Option 2 is probably the best value — it needs no new writes and gives the curator a reason to look.
Related
- Locked-pin ceiling is a separate unresolved question that makes this worse the more locks exist.
- Spec:
docs/specs/agent-marketplace.md D2, D9, Non-goals.
🤖 Generated with Claude Code
Found while assessing the Agent Marketplace after phase 8. Three individually-reasonable v1 non-goals compose into a governance hole that none of them was evaluated against.
The composition
update_agent_endpointpassesinstructionsstraight through toupdate_assistantand never touches listing state (backend/src/apis/app_api/agent_designer/routes.py:413). So:An admin locks an Agent into every member of a role's sidebar → the author then rewrites its instructions → the new behavior is live immediately, for everyone, with no re-review, no version history, no notification to the admin who locked it, and nothing in the reports queue.
Verified live on dev that a locked role pin overrides a user's own dismissal — the tombstone loses to the lock, by design. So the affected user cannot opt out either.
Why this wasn't caught
Each non-goal was decided before locked pins existed. D2's "no re-review on edit" is entirely defensible for an Agent someone chose to pin. It reads differently when an admin pinned it for them and removed the opt-out. Phase 6 added the lock without revisiting D2.
Not asking for versioning
The Non-goals list is probably right that v1 shouldn't build changelogs. Cheaper options that close most of the gap:
updatedAtvs the listing's approval timestamp. Pure read, no new state.Option 2 is probably the best value — it needs no new writes and gives the curator a reason to look.
Related
docs/specs/agent-marketplace.mdD2, D9, Non-goals.🤖 Generated with Claude Code