Audit event catalogue
retoor retoor@molodetz.nl
Every state-changing action in DevPlace records one append-only row through devplacepy/services/audit/record.py (record for a request-scoped actor, record_system for a background one). This file is the authoritative catalogue of the 288 event keys currently emitted, grouped by the category services/audit/categories.py category_for resolves them to.
Rules
- An event key is
<domain>.<noun>.<verb>(or<domain>.<verb>when the domain is the noun). The domain is the first segment and MUST have an entry inCATEGORY_BY_PREFIX; an unmapped domain resolves to categoryotherand is a bug. target_typenames the entity acted upon, not the event (gateway_quota, notgateway_quota_reset).- Every row carries a result:
success,failure,denied. A refused action is recorded withdenied, never dropped. - Actor kinds:
user,guest,system,cli,service. Origins:web,api,devii,cli,service,scheduler,devrant. - The recorder never raises into its caller; a failed audit write is logged and swallowed so it can never break the action it describes.
- Some families are built from a variable at the call site (
vote.{target_type}.{direction},comment.create.{target_type},quiz.question.{action},profile.customization.{scope}.toggle, and thecreate/edit/deleteverbs the sharedcontent.pyhelpers emit per content type). Every member of those families is listed below individually. - Adding an event means all three of: the key in this file, a
CATEGORY_BY_PREFIXentry for a new domain, and the recorder call at the mutation point.
Categories
| Category | Keys |
|---|---|
account |
10 |
admin |
21 |
ai |
10 |
attachment |
5 |
auth |
9 |
backup |
2 |
cli |
42 |
container |
12 |
content |
37 |
database |
4 |
devii |
18 |
email |
6 |
engagement |
23 |
game |
6 |
ingress |
1 |
message |
2 |
news |
9 |
notification |
4 |
project |
11 |
project_files |
14 |
pubsub |
1 |
push |
2 |
reward |
4 |
security |
3 |
service |
5 |
social |
10 |
telegram |
5 |
tools |
12 |
Total: 288 keys.
Account and profile (account)
| Event key | Recorded in |
|---|---|
profile.ai_correction |
routers/profile/ai_correction.py |
profile.ai_modifier |
routers/profile/ai_modifier.py |
profile.api_key.regenerate |
routers/profile/index.py |
profile.avatar.regenerate |
routers/profile/avatar.py |
profile.customization.global.toggle |
routers/profile/customization.py |
profile.customization.pagetype.toggle |
routers/profile/customization.py |
profile.interactions |
routers/profile/interactions.py, services/devii/actions/dispatcher.py |
profile.notification.reset |
routers/profile/notifications.py |
profile.notification.toggle |
routers/profile/notifications.py |
profile.update |
routers/devrant/auth.py, routers/profile/index.py |
Administration (admin)
| Event key | Recorded in |
|---|---|
admin.ai_quota.reset_all |
routers/admin/aiquota.py |
admin.ai_quota.reset_guests |
routers/admin/aiquota.py |
admin.backup.delete |
routers/admin/backups.py |
admin.backup.run |
routers/admin/backups.py |
admin.backup_schedule.create |
routers/admin/backups.py |
admin.backup_schedule.delete |
routers/admin/backups.py |
admin.backup_schedule.toggle |
routers/admin/backups.py |
admin.backup_schedule.update |
routers/admin/backups.py |
admin.devii_task.delete |
routers/admin/devii_tasks.py |
admin.devii_task.disable |
routers/admin/devii_tasks.py |
admin.game.era_end |
routers/admin/game.py |
admin.game.era_start |
routers/admin/game.py |
admin.notification.default |
routers/admin/notifications.py |
admin.setting.update |
docs_api/groups/admin.py, routers/admin/settings.py |
admin.trash.purge |
routers/admin/trash.py |
admin.trash.restore |
routers/admin/trash.py |
admin.user.active.disable |
routers/admin/users.py |
admin.user.active.enable |
routers/admin/users.py |
admin.user.ai_quota.reset |
routers/admin/users.py |
admin.user.password.reset |
routers/admin/users.py |
admin.user.role.change |
routers/admin/users.py |
AI gateway (ai)
| Event key | Recorded in |
|---|---|
ai.clippy.chat |
routers/devii.py |
ai.gateway.call |
services/openai_gateway/gateway.py, services/openai_gateway/usage.py |
ai.quota.exceeded |
routers/devii.py, services/openai_gateway/service.py |
gateway.model.delete |
routers/admin/gateway_configs.py |
gateway.model.update |
routers/admin/gateway_configs.py |
gateway.provider.delete |
routers/admin/gateway_configs.py |
gateway.provider.update |
routers/admin/gateway_configs.py |
gateway.quota.reset |
cli/gateway.py, routers/admin/gateway_configs.py |
gateway.quota_rule.delete |
cli/gateway.py, routers/admin/gateway_configs.py |
gateway.quota_rule.update |
cli/gateway.py, routers/admin/gateway_configs.py |
Attachments (attachment)
| Event key | Recorded in |
|---|---|
attachment.delete |
routers/admin/media.py, routers/media.py |
attachment.rename |
routers/uploads.py |
attachment.restore |
routers/media.py |
attachment.upload |
routers/uploads.py |
attachment.upload_url |
routers/uploads.py |
Authentication (auth)
| Event key | Recorded in |
|---|---|
auth.account.disable |
routers/devrant/auth.py |
auth.login.failure |
routers/auth/login.py, routers/devrant/auth.py |
auth.login.success |
routers/auth/login.py, routers/devrant/auth.py |
auth.logout |
routers/auth/logout.py |
auth.password.forgot_request |
routers/auth/forgotpassword.py |
auth.password.reset_complete |
routers/auth/resetpassword.py |
auth.signup |
routers/auth/signup.py, routers/devrant/auth.py |
auth.token.failure |
routers/auth/token.py |
auth.token.issued |
routers/auth/token.py |
Backups (backup)
| Event key | Recorded in |
|---|---|
job.backup.complete |
services/backup/service.py |
job.backup.failed |
services/backup/service.py |
Command line (cli)
| Event key | Recorded in |
|---|---|
cli.apikey.backfill |
cli/apikeys.py |
cli.apikey.reset |
cli/apikeys.py |
cli.attachments.prune |
cli/attachments.py |
cli.backups.clear |
cli/backups.py |
cli.backups.prune |
cli/backups.py |
cli.backups.run |
cli/backups.py |
cli.containers.gc_workspaces |
cli/containers.py |
cli.containers.prune |
cli/containers.py |
cli.containers.prune_builds |
cli/containers.py |
cli.containers.reconcile |
cli/containers.py |
cli.deepsearch.clear |
cli/jobs.py |
cli.deepsearch.prune |
cli/jobs.py |
cli.devii.lessons.clear |
cli/devii.py |
cli.devii.lessons.prune |
cli/devii.py |
cli.devii.quota.reset |
cli/devii.py |
cli.devii.task.disable |
cli/devii.py |
cli.devii.task.prune |
cli/devii.py |
cli.emoji.sync |
cli/migrate.py |
cli.forks.clear |
cli/jobs.py |
cli.forks.prune |
cli/jobs.py |
cli.game.era.end |
cli/game.py |
cli.game.era.start |
cli/game.py |
cli.game.market.prune |
cli/game.py |
cli.game.steals.prune |
cli/game.py |
cli.isslop.analyze |
cli/jobs.py |
cli.isslop.clear |
cli/jobs.py |
cli.isslop.prune |
cli/jobs.py |
cli.messaging.prune_tickets |
cli/messaging.py |
cli.news.clear |
cli/news.py |
cli.news.sanitize |
cli/news.py |
cli.quiz.prune |
cli/quiz.py |
cli.role.set |
cli/roles.py |
cli.seo.clear |
cli/jobs.py |
cli.seo.prune |
cli/jobs.py |
cli.seo_meta.clear |
cli/jobs.py |
cli.seo_meta.prune |
cli/jobs.py |
cli.token.issue |
cli/tokens.py |
cli.token.prune |
cli/tokens.py |
cli.token.revoke |
cli/tokens.py |
cli.token.revoke_all |
cli/tokens.py |
cli.zips.clear |
cli/jobs.py |
cli.zips.prune |
cli/jobs.py |
Containers (container)
| Event key | Recorded in |
|---|---|
container.instance.configure |
routers/admin/containers.py, services/devii/actions/dispatcher.py |
container.instance.create |
routers/admin/containers.py, routers/projects/containers/instances.py |
container.instance.delete |
routers/admin/containers.py, routers/projects/containers/instances.py |
container.instance.exec |
routers/projects/containers/instances.py, services/devii/actions/dispatcher.py |
container.instance.shell.close |
routers/projects/containers/instances.py |
container.instance.shell.open |
routers/projects/containers/instances.py |
container.instance.start |
docs_api/groups/admin.py |
container.instance.status |
services/containers/service.py |
container.instance.sync |
routers/admin/containers.py, routers/projects/containers/instances.py |
container.reconcile.action |
services/containers/service.py |
container.schedule.create |
routers/projects/containers/schedules.py, services/devii/actions/dispatcher.py |
container.schedule.delete |
routers/projects/containers/schedules.py |
Content (content)
| Event key | Recorded in |
|---|---|
comment.create.gist |
content.py |
comment.create.issue |
content.py |
comment.create.news |
content.py |
comment.create.post |
content.py |
comment.create.project |
content.py |
comment.create.quiz |
content.py |
comment.delete |
content.py, routers/comments.py |
comment.edit |
content.py, routers/comments.py |
gist.create |
content.py |
gist.delete |
content.py |
gist.edit |
content.py |
issue.attachment.add |
routers/issues/attachments.py |
issue.attachment.delete |
routers/issues/attachments.py |
issue.comment |
routers/issues/comment.py |
issue.create |
services/jobs/issue_create_service.py |
issue.create.request |
routers/issues/create.py |
issue.planning.generate |
services/jobs/planning_service.py |
issue.planning.request |
routers/issues/planning.py |
issue.status |
routers/issues/status.py |
issue.sync.reply |
services/gitea/service.py |
issue.sync.status |
services/gitea/service.py |
post.create |
content.py |
post.delete |
content.py |
post.edit |
content.py |
quiz.attempt.answer |
routers/quizzes/attempts.py |
quiz.attempt.finish |
routers/quizzes/attempts.py |
quiz.attempt.start |
routers/quizzes/attempts.py |
quiz.create |
content.py |
quiz.delete |
content.py |
quiz.edit |
content.py |
quiz.grade.failed |
routers/quizzes/attempts.py |
quiz.import |
routers/quizzes/index.py |
quiz.publish |
routers/quizzes/index.py |
quiz.question.create |
routers/quizzes/questions.py |
quiz.question.delete |
routers/quizzes/questions.py |
quiz.question.edit |
routers/quizzes/questions.py |
quiz.question.reorder |
routers/quizzes/questions.py |
Database API (database)
| Event key | Recorded in |
|---|---|
database.access.denied |
routers/dbapi/_shared.py |
database.nl.design |
routers/dbapi/nl.py |
database.query |
routers/dbapi/query.py |
database.query.async |
routers/dbapi/query.py |
Devii assistant (devii)
| Event key | Recorded in |
|---|---|
devii.behavior.update |
services/devii/actions/dispatcher.py |
devii.customization.css.set |
services/devii/actions/dispatcher.py |
devii.customization.js.set |
services/devii/actions/dispatcher.py |
devii.customization.reset |
services/devii/actions/dispatcher.py |
devii.lesson.forget |
services/devii/actions/dispatcher.py |
devii.lesson.reflect |
services/devii/actions/dispatcher.py |
devii.notification.reset |
services/devii/actions/dispatcher.py |
devii.notification.set |
services/devii/actions/dispatcher.py |
devii.task.blocked |
services/devii/tasks/scheduler.py |
devii.task.create |
services/devii/actions/dispatcher.py |
devii.task.deferred |
services/devii/tasks/scheduler.py |
devii.task.delete |
services/devii/actions/dispatcher.py |
devii.task.execute |
services/devii/tasks/scheduler.py |
devii.task.update |
services/devii/actions/dispatcher.py |
devii.tool.create |
services/devii/actions/dispatcher.py |
devii.tool.delete |
services/devii/actions/dispatcher.py |
devii.tool.update |
services/devii/actions/dispatcher.py |
devii.turn |
services/devii/session/core.py |
Email (email)
| Event key | Recorded in |
|---|---|
email.account.delete |
services/devii/actions/dispatcher.py |
email.account.set |
services/devii/actions/dispatcher.py |
email.message.delete |
services/devii/actions/dispatcher.py |
email.message.flag |
services/devii/actions/dispatcher.py |
email.message.move |
services/devii/actions/dispatcher.py |
email.send |
services/devii/actions/dispatcher.py |
Engagement (engagement)
| Event key | Recorded in |
|---|---|
bookmark.add |
content.py, routers/bookmarks.py |
bookmark.remove |
content.py, routers/bookmarks.py |
poll.create |
routers/posts.py |
poll.vote.cast |
routers/polls.py |
poll.vote.change |
routers/polls.py |
poll.vote.clear |
routers/polls.py |
reaction.add |
routers/reactions.py |
reaction.remove |
routers/reactions.py |
vote.comment.clear |
content.py |
vote.comment.down |
content.py |
vote.comment.up |
content.py |
vote.gist.clear |
content.py |
vote.gist.down |
content.py |
vote.gist.up |
content.py |
vote.post.clear |
content.py |
vote.post.down |
content.py |
vote.post.up |
content.py |
vote.project.clear |
content.py |
vote.project.down |
content.py |
vote.project.up |
content.py |
vote.quiz.clear |
content.py |
vote.quiz.down |
content.py |
vote.quiz.up |
content.py |
Code Farm (game)
| Event key | Recorded in |
|---|---|
game.cosmetic.buy |
routers/game/index.py |
game.defense.downgrade |
routers/game/index.py |
game.defense.upgrade |
routers/game/index.py |
game.grant.claim |
routers/game/index.py |
game.infrastructure.buy |
routers/game/index.py |
game.prestige |
routers/game/index.py |
Container ingress (ingress)
| Event key | Recorded in |
|---|---|
proxy.access |
routers/proxy.py |
Direct messages (message)
| Event key | Recorded in |
|---|---|
message.read_on_view |
routers/messages.py |
message.send |
services/messaging/persist.py |
News (news)
| Event key | Recorded in |
|---|---|
news.delete |
routers/admin/news.py |
news.featured.toggle |
routers/admin/news.py |
news.landing.toggle |
routers/admin/news.py |
news.publish.toggle |
routers/admin/news.py |
news.service.draft |
services/news/service.py |
news.service.ingest |
services/news/service.py |
news.service.landing |
services/news/service.py |
news.service.publish |
services/news/service.py |
news.service.reject |
services/news/service.py |
Notifications (notification)
| Event key | Recorded in |
|---|---|
notification.create |
utils/notifications.py |
notification.open |
routers/notifications.py |
notification.read.all |
routers/devrant/notifs.py, routers/notifications.py |
notification.read.one |
routers/notifications.py |
Projects (project)
| Event key | Recorded in |
|---|---|
project.create |
content.py |
project.delete |
content.py |
project.edit |
content.py |
project.fork.complete |
services/jobs/fork_service.py |
project.fork.failed |
services/jobs/fork_service.py |
project.fork.request |
routers/projects/index.py |
project.readonly.disable |
routers/projects/index.py |
project.readonly.enable |
routers/projects/index.py |
project.visibility.private |
routers/projects/index.py |
project.visibility.public |
routers/projects/index.py |
project.zip.request |
routers/projects/index.py |
Project files (project_files)
| Event key | Recorded in |
|---|---|
dir.create |
routers/projects/files.py |
file.append |
routers/projects/files.py |
file.delete |
routers/projects/files.py |
file.delete_lines |
routers/projects/files.py |
file.insert_lines |
routers/projects/files.py |
file.move |
routers/projects/files.py |
file.replace_lines |
routers/projects/files.py |
file.upload |
routers/projects/files.py |
file.write |
routers/projects/files.py |
file.write.create |
routers/projects/files.py |
file.write.overwrite |
routers/projects/files.py |
files.zip.request |
routers/projects/files.py |
job.zip.complete |
services/jobs/zip_service.py |
job.zip.failed |
services/jobs/zip_service.py |
Pub/sub (pubsub)
| Event key | Recorded in |
|---|---|
pubsub.publish |
routers/pubsub.py |
Web push (push)
| Event key | Recorded in |
|---|---|
push.subscribe |
routers/push.py |
push.update |
routers/push.py |
Gamification (reward)
| Event key | Recorded in |
|---|---|
reward.badge.award |
utils/badges.py |
reward.level.up |
utils/rewards.py |
reward.streak.milestone |
utils/rewards.py |
reward.xp.grant |
utils/rewards.py |
Security (security)
| Event key | Recorded in |
|---|---|
security.authz.denied |
routers/admin/backups.py, services/devii/actions/dispatcher.py |
security.maintenance.block |
main.py |
security.rate_limit.block |
main.py |
Background services (service)
| Event key | Recorded in |
|---|---|
service.config.update |
routers/admin/services.py |
service.logs.clear |
routers/admin/services.py |
service.run_now |
routers/admin/services.py |
service.start |
routers/admin/services.py |
service.stop |
routers/admin/services.py |
Social graph (social)
| Event key | Recorded in |
|---|---|
award.complete |
services/jobs/award_service.py |
award.failed |
services/jobs/award_service.py |
award.give |
routers/profile/award.py |
award.revoke |
routers/admin/awards.py |
follow.follow |
routers/follow.py |
follow.unfollow |
routers/follow.py |
relation.block |
routers/relations.py |
relation.mute |
routers/relations.py |
relation.unblock |
routers/relations.py |
relation.unmute |
routers/relations.py |
Telegram (telegram)
| Event key | Recorded in |
|---|---|
telegram.pair.failure |
services/telegram/bridge.py |
telegram.pair.request |
routers/profile/telegram.py |
telegram.pair.success |
services/telegram/bridge.py |
telegram.send |
services/devii/actions/dispatcher.py |
telegram.unpair |
routers/profile/telegram.py |
Developer tools (tools)
| Event key | Recorded in |
|---|---|
deepsearch.chat |
routers/tools/deepsearch.py |
deepsearch.run.complete |
services/jobs/deepsearch/service.py |
deepsearch.run.failed |
services/jobs/deepsearch/service.py |
deepsearch.run.request |
routers/tools/deepsearch.py |
isslop.run.complete |
services/jobs/isslop/service.py |
isslop.run.failed |
services/jobs/isslop/service.py |
isslop.run.request |
routers/tools/isslop.py |
seo.meta.failed |
services/jobs/seo_meta_service.py |
seo.meta.generate |
services/jobs/seo_meta_service.py |
seo.run.complete |
services/jobs/seo/service.py |
seo.run.failed |
services/jobs/seo/service.py |
seo.run.request |
routers/tools/seo.py |
Mapped domains with no recorder
The backup prefix has a CATEGORY_BY_PREFIX entry but no call site emits a bare backup.* key - backup activity is recorded as admin.backup* (operator actions) and job.backup.* (worker outcomes), both of which resolve to the backup category through their own prefixes. Keep the mapping: it is what routes job.backup.* correctly.