All configurable, API, and database object names must be lower snake_case with at least two semantic words.
Valid:
agent_poolworkflow_runaudit_eventlocale_bundlebuilder_agent
Invalid:
agentworkflowagentPoolAgentPool
Python class names keep Python convention but still use at least two semantic words, for example ModelAgent, WorkflowStep, TaskOrchestrator, and ModelClient.
Paper role values are deliberate exceptions because they are source terminology: thinker, worker, verifier, synthesizer.
contextual_orchestrator.conventions.require_object_name()validates configurable object identifiers.tests/test_conventions.pychecks example agent ids and naming helpers.- DB DDL in
docs/database_design.sqlfollows the same rule.
- Domain code stays in
contextual_orchestrator/orchestrator.pyuntil a second implementation forces extraction. - Delivery adapters live in
server.py. - UI static assets live in
admin.pyonly while the product remains dependency-free. - Do not introduce provider SDKs unless OpenAI-compatible HTTP falls short.