Outcome
Read the exact organization/user action-policy scope, including disabled rows, under self/platform or organization-manager authority.
These examples prove local handler behavior with real isolated notification SQL and explicitly simulated identity dependencies.
Before you start
-
Verify pinned identity, the exact action and intended organization/user. Organization policy requires its manager/platform authority; user policy permits self/platform or organization management. Ordinary preference resolution for another user requires platform authority, not organization admin alone.
-
Before a whole-scope replacement capture complete prior semantic settings, including disabled rules and JSON objects. Review intended wildcard dimensions and effects. Empty rows clears that explicit scope; replacements are sequential, can fail partially and always create new rule ids.
-
Ordinary user resolution must omit Notify-only default_channel/transactional. Separate local service-context captures prove real ephemeral Notify signature checks, not a public gateway transport or live service credential. Do not copy service-only inputs into user OAuth calls.
-
Stored policy, candidate channels, resolved delivery mode, actual Notify dispatch/receipt, timers and application action approval are separate outcomes. This family sends no messages and performs no application action.
Discover the target
topolo whoami --json
topolo apps --json
topolo actions get app_topolo_auth.user_notification_action_policy.list --detail --json
Discover intended exact organization/user. Read organization_notification_action_policy.list and user_notification_action_policy.list for their separate scopes, plus ordinary global/organization preferences and stored channel flags. Resolve a specific actual producer/event/surface/category/priority context without Notify-only defaults on user OAuth.
Input fields
| Field | Required | Meaning |
|---|---|---|
orgId | Yes | Exact stored organization scope from authorized discovery. Organization rules require its management authority. User action-policy rules permit self/platform or that organization manager; the storage handler does not independently verify organization/user membership or existence. |
userId | Yes | Exact intended Auth user from authorized discovery. User action-policy storage allows self/platform or management of orgId; ordinary preference resolution allows self/platform, not organization manager alone for another user. Neither a known user id nor rule id grants authority. |
Effects
- Reads only the exact selected user/organization stored rule scope, including disabled rows.
Interpret the response
Lists only the exact organization/user scope, including disabled rows. Self/platform or exact organization-manager authority is accepted; self storage access does not independently enforce organization membership.
Stored muted/required_action values remain unchanged in this listing; effective resolution may transform them. Rule ids and parsed/serialized objects are storage identities/data rather than action approval or dispatch proof.
Worked examples
These are complete raw target-handler responses, not CLI/gateway envelopes or live authorization proof. Synthetic users/organizations exist only in isolated fixtures. Ordinary examples use simulated user identity while real authority, SQL and resolution are exercised. Discover actual intended targets, save only reviewed input as payload.json, validate and inspect the unchanged plan before an authorized call. --confirm assumes intended approval. Stored rows and computed modes do not prove dispatch, receipt, timers or application action execution.
Self user policy begins without explicit rows
Input · payload.json:
{
"orgId": "org_example",
"userId": "usr_self"
}
CLI:
topolo actions validate app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
topolo actions plan app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
topolo actions call app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
MCP call after validation and plan review:
{
"tool": "topolo_read_action",
"arguments": {
"actionId": "app_topolo_auth.user_notification_action_policy.list",
"input": {
"orgId": "org_example",
"userId": "usr_self"
}
}
}
Captured local handler response · HTTP 200:
{
"success": true,
"message": "User action policy fetched",
"data": {
"orgId": "org_example",
"userId": "usr_self",
"rows": []
},
"timestamp": "2026-10-02T00:00:00.000Z"
}
Stored user policy returns both serialized JSON and parsed objects
Input · payload.json:
{
"orgId": "org_example",
"userId": "usr_self"
}
CLI:
topolo actions validate app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
topolo actions plan app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
topolo actions call app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
MCP call after validation and plan review:
{
"tool": "topolo_read_action",
"arguments": {
"actionId": "app_topolo_auth.user_notification_action_policy.list",
"input": {
"orgId": "org_example",
"userId": "usr_self"
}
}
}
Captured local handler response · HTTP 200:
{
"success": true,
"message": "User action policy fetched",
"data": {
"orgId": "org_example",
"userId": "usr_self",
"rows": [
{
"rule_id": "nap_P3Vnfea_aScP6RHa",
"organization_id": "org_example",
"user_id": "usr_self",
"source_app_id": "*",
"event_type": "*",
"surface": "*",
"category": "*",
"priority": "*",
"channel": "*",
"delivery_mode": "muted",
"required_action": true,
"quiet_hours_json": "{\"start\":\"22:00\",\"end\":\"07:00\",\"timezone\":\"Europe/London\"}",
"digest_json": null,
"escalation_json": "{\"after_minutes\":30}",
"quiet_hours": {
"start": "22:00",
"end": "07:00",
"timezone": "Europe/London"
},
"digest": null,
"escalation": {
"after_minutes": 30
},
"enabled": true,
"updated_at": 1790972360
},
{
"rule_id": "nap_1aKyfCQx9DWUYk6a",
"organization_id": "org_example",
"user_id": "usr_self",
"source_app_id": "app_topolo_campaigns",
"event_type": "*",
"surface": "*",
"category": "*",
"priority": "*",
"channel": "*",
"delivery_mode": "immediate",
"required_action": true,
"quiet_hours_json": "{\"start\":\"22:00\",\"end\":\"07:00\",\"timezone\":\"Europe/London\"}",
"digest_json": null,
"escalation_json": "{\"after_minutes\":30}",
"quiet_hours": {
"start": "22:00",
"end": "07:00",
"timezone": "Europe/London"
},
"digest": null,
"escalation": {
"after_minutes": 30
},
"enabled": false,
"updated_at": 1790972360
}
]
},
"timestamp": "2026-10-02T00:00:00.000Z"
}
Exact organization manager can read another user action-policy scope
Input · payload.json:
{
"orgId": "org_example",
"userId": "usr_other"
}
CLI:
topolo actions validate app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
topolo actions plan app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
topolo actions call app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
MCP call after validation and plan review:
{
"tool": "topolo_read_action",
"arguments": {
"actionId": "app_topolo_auth.user_notification_action_policy.list",
"input": {
"orgId": "org_example",
"userId": "usr_other"
}
}
}
Captured local handler response · HTTP 200:
{
"success": true,
"message": "User action policy fetched",
"data": {
"orgId": "org_example",
"userId": "usr_other",
"rows": []
},
"timestamp": "2026-10-02T00:00:00.000Z"
}
Self identity may read its selected stored scope without an organization-membership check
Input · payload.json:
{
"orgId": "org_foreign",
"userId": "usr_self"
}
CLI:
topolo actions validate app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
topolo actions plan app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
topolo actions call app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
MCP call after validation and plan review:
{
"tool": "topolo_read_action",
"arguments": {
"actionId": "app_topolo_auth.user_notification_action_policy.list",
"input": {
"orgId": "org_foreign",
"userId": "usr_self"
}
}
}
Captured local handler response · HTTP 200:
{
"success": true,
"message": "User action policy fetched",
"data": {
"orgId": "org_foreign",
"userId": "usr_self",
"rows": []
},
"timestamp": "2026-10-02T00:00:00.000Z"
}
Read actual partial user policy before reviewing restoration
Input · payload.json:
{
"orgId": "org_example",
"userId": "usr_self"
}
CLI:
topolo actions validate app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
topolo actions plan app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
topolo actions call app_topolo_auth.user_notification_action_policy.list --data @payload.json --json
MCP call after validation and plan review:
{
"tool": "topolo_read_action",
"arguments": {
"actionId": "app_topolo_auth.user_notification_action_policy.list",
"input": {
"orgId": "org_example",
"userId": "usr_self"
}
}
}
Captured local handler response · HTTP 200:
{
"success": true,
"message": "User action policy fetched",
"data": {
"orgId": "org_example",
"userId": "usr_self",
"rows": [
{
"rule_id": "nap_CAcql6EitK8Jm_Mv",
"organization_id": "org_example",
"user_id": "usr_self",
"source_app_id": "*",
"event_type": "*",
"surface": "*",
"category": "*",
"priority": "*",
"channel": "*",
"delivery_mode": "muted",
"required_action": true,
"quiet_hours_json": "{\"start\":\"22:00\",\"end\":\"07:00\",\"timezone\":\"Europe/London\"}",
"digest_json": null,
"escalation_json": "{\"after_minutes\":30}",
"quiet_hours": {
"start": "22:00",
"end": "07:00",
"timezone": "Europe/London"
},
"digest": null,
"escalation": {
"after_minutes": 30
},
"enabled": true,
"updated_at": 1790972360
}
]
},
"timestamp": "2026-10-02T00:00:00.000Z"
}
Verify the result
-
Require orgId/userId and each row organization_id/user_id to match the selected scope.
-
Compare stored semantics with a separately resolved intended event; stored muted/required_action is not the final computed mode or an approval.
Errors and recovery
Organization manager cannot read a foreign organization/user scope
Captured local refusal · HTTP 401:
{
"credentialPrerequisite": "simulated-user-token",
"input": {
"orgId": "org_foreign",
"userId": "usr_other"
},
"response": {
"success": false,
"error": {
"message": "Access denied",
"code": "AUTH_ERROR",
"details": null,
"timestamp": "2026-10-02T00:00:00.000Z"
}
}
}
Published recovery guidance
-
AUTH_ERROR(HTTP 401): Verify pinned identity and respect the exact user/organization boundary. A valid other-service signature is not Notify trust; do not switch credentials or infer OAuth expiry from an authenticated target denial. -
VALIDATION_ERROR(HTTP 400): Correct reported fields and unique complete dimension keys. Ordinary user resolution must omit defaults/transactional; only an owning trusted Notify invocation may supply them and must provide explicit transactional true/false. Revalidate and review any replacement. -
SERVER_ERROR(HTTP 500): Preserve request/result and read the exact stored scope. A replacement may have removed prior rows and inserted only part of the intended set; separately review finishing or restoring complete captured semantic settings. Do not rely on old rule ids.
Recovery boundaries
Read-only stored or computed policy. Refresh relevant exact scopes after approved changes; no dispatch, delivery, timer or application action is executed here.
Discovery and evidence
This record belongs to app_topolo_auth. Fixtures prove actual authority, action-policy validation, canonical notification/core SQL, scoring/required-action guard, address/timezone resolution and partial replacement behavior. User tokens/targets/unused addresses are simulated. Trusted Notify captures use real ephemeral local RSA generation, Auth minting and local JWKS verification; no live credential/key is read or serialized. Current Notify source informs optional metadata field meanings, while its scheduling/dispatch is not exercised. No live storage, ownership, gateway credential parity, notification, timer, deployment or production publication is proved.