---
id: e5-sensor-ops-package
title: Sensor Ops Package
module: GROW-S5
module_slug: grow-s5-sensor-fusion-data-ops
cluster: Execution
type: template
version: v0.1.0
status: Gate-reviewed
tier: membership
contract_role: ""
canonical_url: "https://grow.goodcombinator.ai/library/registry/e5-sensor-ops-package"
download_url: "https://grow.goodcombinator.ai/library/registry/e5-sensor-ops-package.md"
license: CC-BY-4.0 (proposed — owner confirmation required)
source: GROW by Good Combinator
retrieved_at: 2026-05-29
---

# Sensor Ops Package

The Sensor Ops Package is the deployment scaffold for GROW-S5. It provides six fillable templates — one per major artifact category — that a practitioner can copy, populate, and ship without rewriting the underlying logic. Each scaffold references its governing spec by canonical id, so practitioners know exactly which rules to apply when they fill in domain-specific values. This package is the field kit; the other six Course 5 artifacts are the rules the kit enforces. Filling out the package without reading the governing specs is not recommended; the templates will catch schema errors but they cannot substitute for the design decisions the specs require.

---

## Scaffold 1 — Source Inventory (extends `e5-telemetry-source-map`)

Copy one block per telemetry source. `confidence_band` and `band_rationale` are required per C4 contract.

```yaml
# SOURCE INVENTORY
# Governing spec: e5-telemetry-source-map
# Band enum: high | medium | low | unknown (C4)
# Reliability grade: A (≥99.5% SLA) | B (90–99.5%) | C (<90% or undocumented)

sources:
  - source_id: <kebab-case>
    name: <human-readable>
    source_type: <sensor|api|log|device|stream|feed>
    owner: <role or system>
    protocol: <MQTT|HTTP-REST|ModBus|CSV-push|webhook|other>
    emission_frequency: <realtime|sub-minute|minutely|hourly|daily|event-driven|static>
    latency_class: <streaming|near-realtime|batched>
    reliability_grade: <A|B|C>
    authoritative: <true|false>
    last_validated: <YYYY-MM-DD>
    permissions: <public|internal|restricted|regulated>
    confidence_band: <high|medium|low|unknown>
    band_rationale: <one sentence; why this source carries its band>
    # optional
    pii_flag: <true|false>
    jurisdiction: <e.g., fl-walton-county>
    cost_per_call: <USD or free>
    rate_limit: <calls/min or N/A>
    calibration_due: <YYYY-MM-DD or N/A>
    known_outage_pattern: <description or none>
```

**Operating rules reminder:**
- Register before ingest. No backfilling.
- `last_validated` older than 2× emission window → automatic band demotion.
- `reliability_grade: C` sources never sole input for critical alerts.
- `authoritative: true` is exclusive per measurement type.

---

## Scaffold 2 — Fusion Logic Map (extends `e5-fusion-logic-map`)

Declare the fusion window, per-source weights (inherit from band table in the governing spec), and any per-project overrides.

```yaml
# FUSION LOGIC MAP
# Governing spec: e5-fusion-logic-map
# W_band defaults: high=1.00, medium=0.60, low=0.20, unknown=0.00 (exclude)

fusion_config:
  deployment_id: <kebab-case>
  fusion_windows_seconds:
    default: 60
    # Override per measurement type if needed
    overrides:
      - measurement_type: <enum>
        window_seconds: <integer>

  # Composite band thresholds (do not relax below spec defaults without version bump)
  composite_band_rules:
    low_share_max_pct: 30      # low-band share above this → composite = low
    medium_or_lower_max_pct: 60  # medium-or-lower share above this → composite = medium

  # Conflict resolution priority order (do not change sequence)
  conflict_resolution_priority:
    - higher_authoritative_wins
    - higher_confidence_band_wins
    - more_recent_wins
    - conservative_value_wins   # safety-conservative = higher alert trigger value

  # Staleness ceiling per type (defaults: 2× emission_frequency)
  staleness_ceiling_overrides:
    - measurement_type: <enum>
      ceiling_seconds: <integer>

  # Measurement types active in this deployment
  active_measurement_types:
    - <measurement_type_1>
    - <measurement_type_2>
```

---

## Scaffold 3 — Alert Rules (extends `e5-alert-design-spec`)

Declare one rule block per threshold condition. The C6 emission section is pre-wired; fill in the domain-specific thresholds.

```yaml
# ALERT RULES
# Governing spec: e5-alert-design-spec
# Severity enum: critical|high|medium|low|info
# min_confidence_band_required: enforced as hard gate before alert fires

alert_rules:
  - rule_id: <kebab-case>
    measurement_type: <enum from normalization layer>
    condition: <expression; e.g., fused_value >= 1.20>
    severity: <critical|high|medium|low|info>
    description: <one sentence>
    suggested_fallback: <S1 fallback id or "none">
    action_link: <agent action id or escalation target>
    min_confidence_band_required: <high|medium|low>
    corroboration_required: <true|false>
    notes: <optional>

# Hysteresis config (defaults from spec; override if needed)
hysteresis:
  critical:
    margin_pct: 5
    rearm_minutes: 5
  high:
    margin_pct: 10
    rearm_minutes: 10
  medium:
    margin_pct: 15
    rearm_minutes: 30
  low:
    margin_pct: 20
    rearm_minutes: 60

# C6 emission reminder (do not modify — governed by interface-contracts C6):
# Every fired alert emits:
#   {sensor_id, signal, severity, confidence_band, suggested_fallback}
# to s1-fallback-architecture-blueprint + s1-threshold-escalation-spec.
# The S1 state machine owns the fallback decision.
# confidence_score is optional observability; band is authoritative for control.
```

---

## Scaffold 4 — Data Quality Checklist (covers normalization + source health)

A run-at-deployment checklist. Pass all items before promoting a sensor integration from `draft` to `active`.

```markdown
# DATA QUALITY CHECKLIST
# Governing specs: e5-telemetry-source-map, e5-normalization-layer

## Source registration
- [ ] Every source has a row in e5-telemetry-source-map with all required fields populated.
- [ ] `authoritative: true` verified for each measurement type; no duplicates.
- [ ] `last_validated` is within the source's 2× emission-frequency window.
- [ ] `permissions` reviewed and confirmed appropriate for use case.

## Normalization profiles
- [ ] A normalization profile exists for each source_id.
- [ ] All field maps confirmed against current raw payload shape.
- [ ] Unit conversions verified against reference constants (not inline formulas).
- [ ] Timestamp field and timezone correctly identified in each profile.
- [ ] Profile version recorded in normalization profile registry.

## Missing signal handling
- [ ] Each required field is declared in the normalization profile.
- [ ] Imputation rules (if any) are declared explicitly and limited to eligible cases.
- [ ] `feed-gap` detection window is configured per source.
- [ ] `sensor-offline` heartbeat threshold is set per source.

## Duplicate and conflict handling
- [ ] Deduplication window configured for sub-minute sources.
- [ ] Conflict detection thresholds set for each measurement type.
- [ ] Conflict resolution rules confirmed against e5-fusion-logic-map §5.

## Confidence band validation
- [ ] All `band_rationale` fields reviewed for accuracy.
- [ ] Band downgrade triggers tested with simulated feed-gap and offline events.
- [ ] Re-upgrade procedure documented and owner assigned.

## Sign-off
- Owner: ____________________
- Date: ____________________
- Notes: ____________________
```

---

## Scaffold 5 — Pipeline Monitoring Plan (extends `e5-pipeline-resilience-playbook`)

Declare watchdog thresholds, outage response assignments, and backfill eligibility per deployment.

```yaml
# PIPELINE MONITORING PLAN
# Governing spec: e5-pipeline-resilience-playbook

deployment_id: <kebab-case>

watchdog_thresholds:
  ingest_rate:
    warning_pct_of_expected: 50
    critical_zero_window_multiplier: 2     # 0 records for 2× emission_frequency
  normalization_reject_rate:
    warning_pct: 5
    critical_pct: 20
  fusion_staleness_fraction:
    warning_pct: 25
    critical_pct: 50
  alert_suppression_rate:
    warning_ratio: "10:1"
    critical_ratio: "50:1"

outage_response:
  primary_on_call: <role>
  escalation_contact: <role>
  notification_channel: <Slack channel | email | SMS>
  offline_mode_trigger:
    consecutive_misses_per_source: 3
    min_fraction_offline: 0.50

backfill_config:
  max_gap_hours: 24
  eligible_confidence_bands: [high, medium]
  reliability_grade_C_requires_manual_review: true
  retroactive_alert_status: informational    # never operational

stale_feed_detection:
  value_freeze_windows: 10
  timestamp_stall_consecutive: 3
  implausible_repetition_consecutive: 5
  divergence_sigma: 3
  divergence_windows: 5

health_dashboard:
  green_source_coverage_pct: 80
  green_fusion_completeness: all_types_have_medium_plus
  green_alert_confidence_pct: 80
  green_backfill_queue_max: 0
```

---

## Scaffold 6 — Downstream Decision Policy (extends `e5-decision-support-layer`)

Declare decision classes in use, their signal-strength gates, and action dispatch targets for this deployment.

```yaml
# DOWNSTREAM DECISION POLICY
# Governing spec: e5-decision-support-layer
# decision_origin for all records: sensor-triggered (C6 extended enum, glossary v0.2.0)

deployment_id: <kebab-case>

active_decision_classes:
  # List each decision class used in this deployment.
  # min_confidence_band must be >= the spec default; do not relax.

  - decision_class: monitoring-log
    min_confidence_band: low
    dispatch_target: <log store endpoint>

  - decision_class: status-update
    min_confidence_band: low
    dispatch_target: <dashboard state store>

  - decision_class: operator-notify
    min_confidence_band: medium
    dispatch_target: <notification queue endpoint>
    post_hoc_review_sla_hours: 4

  - decision_class: agent-trigger
    min_confidence_band: medium
    dispatch_target: <agent workflow endpoint>
    post_hoc_review_sla_hours: 4

  - decision_class: escalation-request
    min_confidence_band: medium
    dispatch_target: s1-hitl-review-policy
    note: "Routes via C6 to S1 tier per s1-threshold-escalation-spec"

  - decision_class: physical-action-recommendation
    min_confidence_band: high
    dispatch_target: human-approval-queue
    autonomous_dispatch: never

blocking_rules:
  # Do not remove any of these; they are mandatory per e5-decision-support-layer §7
  - unknown_confidence_band_halts_run: true
  - physical_action_requires_explicit_human_approval: true
  - suppressed_alert_blocks_downstream_dispatch: true
  - sole_authoritative_source_stale_demotes_class: true

provenance_config:
  # Every recommendation writes to s3-provenance-metadata-schema
  store_uri: <s3://provenance-store/ or equivalent>
  evidence_bundle_includes:
    - fused_record
    - fired_alert
    - c6_emission
    - gate_outcome
    - normalized_source_records_ref   # hash-and-ref; not inlined

# Human review workflow for quarantined recommendations
quarantine_review:
  reviewer_role: <role>
  sla_hours: 4
  override_decision_origin: human-override
  dismissal_decision_origin: escalation
```

---

## Using this package

1. Complete Scaffold 1 (Source Inventory) first — it is the foundation every other scaffold reads from.
2. Scaffold 2 (Fusion Logic Map) can be filled with defaults for most deployments; override the window sizes if your measurement types have materially different dynamics.
3. Scaffold 3 (Alert Rules) requires the most domain judgment — threshold values must come from documented engineering or regulatory standards, not intuition.
4. Run Scaffold 4 (Data Quality Checklist) as a pre-launch gate. Do not promote to `active` until all items are checked.
5. Scaffold 5 (Pipeline Monitoring Plan) should be reviewed with the on-call operator before go-live so they know what to do when alerts fire.
6. Scaffold 6 (Downstream Decision Policy) documents the authority boundary. The `physical-action-recommendation` class must always target a human-approval queue; do not route it to an autonomous agent endpoint.
