Files
apophis-fastify/docs/observe.md
T
John Dvorak 8d7382417d docs: add paper citations, fix pedagogical issues, improve SKILL.md
- Cite arxiv 2602.23922 (Invariant-Driven Automated Testing) in all major docs
- Add Progressive Complexity section to SKILL.md for LLM guidance
- Fix SKILL.md Fast Start example to use deterministic ID generation
- Fix getting-started.md failure output inconsistency
- Fix auth-patterns.md TypeScript syntax in JS doc
- Fix fastify-structure.md Date.now() in test helper
- Fix observe.md misleading workspace heading
- Build: clean | Tests: 849 pass, 0 fail
2026-04-30 11:34:00 -07:00

4.1 KiB

Observe Mode

Runtime visibility and drift detection without blocking by default.

Observe extends the invariant framework from Invariant-Driven Automated Testing (Malhado Ribeiro, 2021) to production environments: contracts run continuously against live traffic to detect behavioral drift without affecting requests.

What Observe Does

apophis observe validates your runtime observe configuration:

  1. Checks that observe mode is allowed in the current environment
  2. Validates reporting sink setup (logs, metrics, traces)
  3. Confirms non-blocking semantics
  4. Reports what would be observed and why it is safe

When to Use It

  • Staging: Validate observe config before promoting to production
  • Production: Monitor contract drift without affecting requests
  • Platform teams: Centralized visibility across services

Safety Boundaries

Observe mode is non-blocking by default:

  • Non-blocking by default: Contract violations are logged, not thrown
  • No request failures in non-blocking mode: Violations are reported instead of thrown
  • Explicit opt-in for blocking: Requires allowBlocking: true in environment policy
  • Production gating: Blocking behavior is blocked in production by default

Sink Configuration

Observe mode requires a reporting sink. Configure it in your environment policy:

environments: {
  staging: {
    name: 'staging',
    allowVerify: true,
    allowObserve: true,
    allowQualify: false,
    allowChaos: false,
    allowBlocking: false,
    requireSink: true
  }
}

APOPHIS supports these sink types:

  • Logs: Structured logging of contract violations
  • Metrics: Counter and histogram metrics for violation rates
  • Traces: Distributed tracing integration for violation context

Sampling

Control observation overhead with sampling:

profiles: {
  'staging-observe': {
    name: 'staging-observe',
    mode: 'observe',
    preset: 'platform-observe',
    routes: []
  }
}

The platform-observe preset enables sampling at the preset level.

Staging vs Production

Environment Blocking Sampling Sink Required
Staging No (default) 100% Yes
Production No (default) 100% Yes

Default is 1.0 (100%). Configure lower rates for production explicitly.

--check-config Flag

Validate config without activating observe mode:

apophis observe --profile staging-observe --check-config

This is useful in CI to ensure observe config is valid before deployment.

Exit Codes

Code Meaning
0 Observe config is valid and safe
2 Safety violation or invalid config

Config Example

// apophis.config.js
export default {
  mode: 'observe',
  profile: 'staging-observe',
  profiles: {
    'staging-observe': {
      name: 'staging-observe',
      mode: 'observe',
      preset: 'platform-observe',
      routes: []
    }
  },
  presets: {
    'platform-observe': {
      name: 'platform-observe',
      depth: 'standard',
      timeout: 10000,
      parallel: true,
      chaos: false,
      observe: true
    }
  },
  environments: {
    staging: {
      name: 'staging',
      allowVerify: true,
      allowObserve: true,
      allowQualify: false,
      allowChaos: false,
      allowBlocking: false,
      requireSink: true
    },
    production: {
      name: 'production',
      allowVerify: true,
      allowObserve: true,
      allowQualify: false,
      allowChaos: false,
      allowBlocking: false,
      requireSink: true
    }
  }
};

Sink Endpoint Configuration

Configure the reporting sink endpoint in your observe config:

observe: {
  sink: {
    endpoint: 'http://collector.internal:4318'
  }
}

Monorepo Validation

For monorepos, use apophis doctor --workspace to validate observe configuration across all workspace packages. observe itself does not support --workspace; use doctor to check config in each package.

Mode Mismatch

Profiles configured for verify mode will be rejected by apophis observe. Only profiles with mode: 'observe' are valid.