Files
asf/AGENT.md
T
2026-09-08 07:21:34 -04:00

12 KiB

AGENT.md

Azurian Software Factory - AI Engineering Rules

This file defines mandatory rules for AI coding agents working on the Azurian Software Factory repository.

Read this document before modifying code.


1. Product Identity

Product:

Azurian Software Factory (ASF)

Tagline:

From Requirement to Production, everything is contextualized, traceable and AI-accessible.

ASF is an AI-native, multi-tenant Software Factory SaaS.

ASF connects the complete software lifecycle:

Requirement → Architecture → Task → Code → Commit → Pull Request → Build → Test → Deployment → Runtime → Incident → Feedback.

ASF is not merely an AI coding assistant.


2. Core Principle

The central ASF principle is:

Everything is an Artifact.

Requirements, architecture decisions, documents, source code references, commits, tests, builds, deployments, incidents and AI analyses can all be represented as Artifacts.

Artifacts may have relationships with other Artifacts.

Never implement functionality that unnecessarily breaks this generic model.


3. Architectural Principles

All implementations must preserve:

  1. Multi-tenancy
  2. Traceability
  3. Context preservation
  4. API-first design
  5. Event-driven architecture
  6. AI provider independence
  7. Integration provider independence
  8. Horizontal scalability
  9. Auditability
  10. Security by design

4. Technology Baseline

Backend

Use:

  • Python 3.12+
  • FastAPI
  • Pydantic
  • async/await
  • MongoDB
  • RabbitMQ
  • Redis
  • MinIO/S3

Do not introduce another primary database without an ADR.

Frontend

Use:

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • shadcn/ui
  • TanStack Query
  • React Flow

Use Zustand only where persistent/shared client state is genuinely necessary.

AI

All model access must go through the ASF AI Gateway abstraction.

Never call a specific LLM provider directly from domain/business code.

Messaging

RabbitMQ is the primary event and asynchronous messaging backbone.

MongoDB is the persistent source of truth for job state.


5. Multi-Tenancy

Every tenant-owned entity must contain tenant_id.

Where appropriate it must also contain project_id.

Never trust tenant identity supplied directly by a browser request.

Tenant context must come from validated authentication/authorization context.

Every database query involving tenant-owned data must be tenant scoped.

Cross-tenant data leakage is considered a critical defect.

Tests must cover tenant isolation for sensitive operations.


6. Artifact Rules

Prefer the generic Artifact model for lifecycle entities.

Artifact types may include:

  • requirement
  • epic
  • story
  • task
  • architecture_decision
  • document
  • source_file
  • commit
  • pull_request
  • build
  • test
  • deployment
  • release
  • security_finding
  • runtime_event
  • incident
  • ai_analysis

Do not create a new MongoDB collection for every artifact type unless there is a documented architectural reason.

Artifact metadata must remain extensible.


7. Relationships

Artifact relationships must be explicit and queryable.

Examples:

  • implements
  • implemented_by
  • verifies
  • verified_by
  • generated_from
  • documented_by
  • depends_on
  • affects
  • deployed_as
  • caused_by
  • supersedes
  • related_to

Do not encode important traceability relationships only inside free text.


8. Context

AI operations must receive relevant context through the ASF Context Engine.

Do not build arbitrary RAG logic directly inside API endpoints or UI code.

Context retrieval must remain independently evolvable.

The architecture must allow future integration of:

  • embeddings
  • vector search
  • graph traversal
  • source code indexing
  • document indexing
  • runtime telemetry

9. AI Rules

ASF must remain model agnostic.

Supported architectures may include:

  • DGX-hosted models
  • OpenAI-compatible APIs
  • external providers
  • future customer-hosted models

Model selection belongs to the AI Gateway.

Business services request capabilities, not specific model implementations.

Prefer concepts such as:

analyze_code()

over:

call_qwen()

unless inside a provider adapter.

Record AI usage when technically available.

Never expose model credentials to frontend code.


10. Queue Rules

Separate interactive and background workloads.

Typical queues:

  • asf.ai.interactive
  • asf.ai.background
  • asf.indexing
  • asf.code_analysis
  • asf.testing
  • asf.devops
  • asf.notifications

Interactive user requests should receive higher scheduling priority than non-critical background work.

Workers must be stateless where practical and horizontally scalable.

Do not rely on process memory for persistent job state.

Consumers must be designed for duplicate delivery.

Where side effects occur, use idempotency mechanisms.

Do not assume exactly-once delivery.


11. Event Rules

Events describe facts that happened.

Prefer:

artifact.created

requirement.updated

deployment.completed

instead of ambiguous event names.

Every distributed event should contain sufficient metadata for tracing, including where applicable:

  • event_id
  • event_type
  • timestamp
  • tenant_id
  • project_id
  • correlation_id
  • causation_id
  • payload

Do not place large binary content directly in RabbitMQ messages.

Store large content in MinIO and transmit a reference.


12. MinIO Rules

Use MinIO/S3 for:

  • uploaded documents
  • generated files
  • large reports
  • repository archives where appropriate
  • large AI inputs/outputs where persistence is required

MongoDB should store metadata and object references.

Do not store large binary objects directly in normal MongoDB documents unless specifically justified.


13. API Rules

REST API prefix:

/api/v1

Health endpoint:

GET /api/v1/health

Use:

  • Pydantic request/response models
  • explicit validation
  • consistent HTTP status codes
  • consistent error responses

Do not expose MongoDB internal structures directly through APIs.

Do not put business logic directly inside FastAPI route functions.

Routes should delegate to application/domain services.


14. Python Rules

Use type hints.

Prefer async I/O for:

  • MongoDB
  • RabbitMQ
  • Redis
  • HTTP
  • MinIO operations where supported

Keep functions focused.

Avoid giant service classes.

Avoid hidden global state.

Use dependency injection where it improves testing and separation.

Do not catch Exception unless there is a deliberate boundary-level reason.

Never silently ignore errors.


15. Frontend Rules

Frontend components must not contain backend business rules.

Never access MongoDB, RabbitMQ, Redis or MinIO directly from the browser.

Use the ASF API.

Pages must support:

  • loading state
  • empty state
  • error state

Do not present mocked data as production data.

Traceability visualization must use reusable node/edge components.

The UI must remain responsive and accessible.


16. Security Rules

Never commit:

  • passwords
  • API keys
  • private keys
  • tokens
  • certificates
  • production credentials

Use environment configuration.

Provide .env.example containing names and safe placeholder values only.

Never log authentication secrets.

Validate uploaded files.

Validate external connector input.

Assume external webhook payloads are untrusted.


17. Logging and Observability

Use structured JSON logging on backend services.

Propagate where applicable:

  • correlation_id
  • tenant_id
  • project_id
  • job_id

Prepare services for OpenTelemetry instrumentation.

Logs are operational telemetry.

Audit events are business/security records.

Do not confuse the two concepts.


18. Connectors

External systems must be isolated behind connector interfaces.

Examples:

  • GitHub
  • GitLab
  • Bitbucket
  • Jira
  • Confluence
  • Notion
  • Jenkins
  • SonarQube
  • Grafana

Do not spread provider-specific APIs throughout ASF business code.

MCP should be preferred where it provides a suitable standardized capability.

REST and Webhooks remain supported integration mechanisms.


19. Testing Rules

Backend tests use pytest.

Tests should cover:

  • domain logic
  • API behavior
  • artifact relationships
  • job state transitions
  • event handling
  • tenant isolation

Bug fixes should include regression tests where practical.

Do not remove failing tests merely to make the build green.


20. Database Rules

MongoDB is the primary ASF datastore.

Collections and indexes must be intentionally designed.

Common queries must have appropriate indexes.

Tenant-aware compound indexes should be considered.

Schema flexibility does not mean schema absence.

Pydantic models define application-level contracts.

Database migrations or data transformation scripts must be versioned.


21. Architectural Decisions

Significant architectural decisions require an ADR under:

docs/adr/

Examples:

  • introducing a new database
  • introducing a new message broker
  • changing tenancy strategy
  • changing authentication architecture
  • introducing a graph database
  • changing artifact representation
  • replacing the AI Gateway
  • changing event semantics

Do not make major architectural changes silently.


22. Code Changes

Before modifying code:

  1. Understand the requested change.
  2. Inspect relevant existing code.
  3. Identify affected modules.
  4. Check existing tests.
  5. Preserve architectural boundaries.

After modifying code:

  1. Run relevant tests.
  2. Run lint/type checks where configured.
  3. Fix failures introduced by the change.
  4. Review tenant isolation.
  5. Review error handling.
  6. Update documentation when behavior or architecture changed.

23. Dependency Policy

Do not add dependencies unnecessarily.

Before introducing a library, determine whether:

  • the standard library already solves the problem
  • an existing project dependency solves it
  • the new dependency is actively maintained
  • it introduces security or licensing concerns

Major framework additions require justification.


24. Simplicity

Do not over-engineer ASF.

Prefer:

simple → testable → observable → scalable

over:

complex → theoretical → difficult to operate.

Microservices are not a goal.

Service boundaries must exist because they provide operational or domain value.


25. Current Logical Components

The initial architecture consists of:

asf-core

Core API, organizations, projects, artifacts, relationships, jobs and audit.

asf-context

Context assembly, relationship traversal and future semantic retrieval.

asf-ai

AI Gateway, provider abstraction, routing and usage.

asf-worker

RabbitMQ consumers and asynchronous processing.

asf-web

Next.js SaaS frontend.

Do not create additional services unless there is a clear reason.


26. Source of Truth

MongoDB: structured application/domain state.

MinIO: large files and binary artifacts.

RabbitMQ: events and work delivery.

Redis: temporary/cache/coordination state.

AI models: never considered authoritative sources of ASF business data.


27. AI Generated Changes

AI-generated code is subject to exactly the same engineering standards as human-written code.

Never assume generated code is correct.

Validate:

  • imports
  • APIs
  • library versions
  • async behavior
  • security
  • tenancy
  • error handling
  • tests

Never invent an API from an external dependency when its actual interface can be inspected.


28. Definition of Done

A change is not complete merely because code was generated.

A change is complete when:

  • implementation works
  • relevant tests pass
  • tenant isolation is preserved
  • errors are handled
  • observability is maintained
  • architecture rules are respected
  • documentation is updated where necessary
  • no credentials or sensitive data were introduced

29. Guiding Question

When implementing any ASF feature, ask:

Does this improve the connection between software context, traceability, automation and AI?

If the feature bypasses those principles, reconsider the implementation.