Rainer Gerhards 8f06342a91 agent/skills: standardize test registration and mock check
Why: To provide agents with clear, foolproof guidance on how to register
tests in the refactored Makefile.am and ensure distribution integrity.

Impact: Improves CI reliability and agent consistency when adding tests.

Before/After: Undocumented test registration / Standardized "Define at Top,
Distribute Unconditionally, Register Conditionally" pattern.

Technical Overview:
The rsyslog_test skill now enforces declaring test variables at the top of
Makefile.am and adding them to EXTRA_DIST unconditionally, while keeping
execution (TESTS +=) conditional. This prevents missing-file errors in
VPATH builds. Additionally, the "Mock Smoke Check" pattern
(make distcheck TEST_RUN_TYPE=MOCK-OK) is integrated as a mandatory
pre-commit validation step for test changes. The rsyslog_module and
rsyslog_commit skills are updated with cross-references to these standards.

With the help of AI-Agents: Antigravity
2026-01-24 17:19:29 +01:00

2.1 KiB

name, description
name description
rsyslog_module Encodes technical requirements for rsyslog modules, including concurrency, metadata, and initialization.

rsyslog_module

This skill captures the essential technical patterns for authoring and maintaining rsyslog modules (plugins/contrib).

Quick Start

  1. Locking: Follow the "Belt and Suspenders" rule (assert() + if).
  2. State: pData (shared) vs WID (per-worker).
  3. Boilerplate: Use BEGINmodInit, CODESTARTmodInit, etc.

Detailed Instructions

1. Concurrency & Locking

Rsyslog v8 has a high-concurrency worker model.

  • Shared State (pData): Mutable state shared across workers MUST be protected by a mutex in pData.
  • Per-Worker State (WID): Never share wrkrInstanceData_t.
  • Belt and Suspenders:
    assert(pData != NULL);
    if (pData == NULL) {
        // Handle error gracefully
    }
    
  • Headers: Every output module should have a "Concurrency & Locking" header block.

2. Module Lifecycle

Every module must implement and register standard entry points:

  • modInit(): Initialize static data and registry interfaces.
  • modExit(): Finalize and cleanup.
  • beginTransaction() / commitTransaction(): For efficient batch-based output.

3. Metadata Consistency

  • Location: MODULE_METADATA.yaml in the module directory.
  • Synchronization: Keep doc/ai/module_map.yaml in sync with locking and concurrency changes.

4. Build Configuration

  • Update plugins/Makefile.am and configure.ac when adding new modules.
  • Test Registration: Follow the "Define at Top, Distribute Unconditionally, Register Conditionally" pattern in tests/Makefile.am. See the rsyslog_test skill for details. This is critical for make distcheck validity.
  • Use MODULE_TYPE(eMOD_OUT) and other macros from runtime/module-template.h.
  • rsyslog_build: For compiling the module.
  • rsyslog_test: For creating module-specific smoke tests.
  • rsyslog_doc: For documentation requirements.