Naming is architecture. Consistent names reduce cognitive load and prevent "shadow concepts."
snake_case for modules: syris_core, task_engine, tool_registrysyris-core is project name only)src/syris_core/... with a stable import namespaceRecommended patterns:
pipeline/normalize.py, pipeline/route.py, pipeline/execute.pyschemas/events.py, schemas/tasks.py, schemas/tools.pyintegrations/<integration_name>/...scheduler/scheduler.pyscheduler/watchers/<watcher_name>.pyscheduler/rules/engine.py, scheduler/rules/models.pyAvoid:
utils.py or helpers.py as dumping groundscommon/ module with strict review.)Use canonical terms from the Glossary:
MessageEvent, AuditEvent, ToolCall, ToolResult, Task, Step, Approvaltrace_id, span_id, idempotency_key, dedupe_keyPrefer explicit words over abbreviations:
integration_id not iidoccurred_at / ingested_at not ts1 / ts2event_id, task_id, step_id, tool_call_id, job_id)trace_id spans the entire chainparent_event_id links derived events (watcher/rule → child)idempotency_key for effectful actionsdedupe_key for event deduplication/throttlingAll core schemas are versioned:
schema_version: "1.0"Tools declare:
nameversioncapabilitiesscopes_requiredGET /tasksPOST /tasks/{id}/cancelGET /audit?trace_id=...POST /controls/autonomyPOST /approvals/{id}/approveadr/0001-title.mdx (4-digit prefix)runbooks/<topic>.mdx