From 7ca0e7e2b1095abb33ea0f2250b195b8ad5245c5 Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Tue, 28 Apr 2026 16:25:10 -0700 Subject: [PATCH 1/6] Switch catching std::exception during BasicConsumeMessage() to a soft_error --- library/core.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/core.cc b/library/core.cc index 3e04b3f4..25fd87aa 100644 --- a/library/core.cc +++ b/library/core.cc @@ -583,7 +583,7 @@ namespace dripline catch( std::exception& e ) { LERROR( dlog, "Standard exception caught: " << e.what() ); - a_status = post_listen_status::hard_error; + a_status = post_listen_status::soft_error; return; } catch(...) From d02d6d5f24d63b399b0c4f24afb7a61557e26b2a Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Wed, 29 Apr 2026 11:23:03 -0700 Subject: [PATCH 2/6] Adding manual-job input parameters to keep the test image --- .github/workflows/publish.yaml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index a69e1f74..16708ea8 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -6,6 +6,15 @@ on: tags: ['*'] pull_request: workflow_dispatch: + inputs: + keep-test-image: + description: "Keep the Test Image (set to 'true' to keep the image)" + required: true + default: "false" + test-image-tag-suffix: + description: "Suffix for Test Image Tag" + required: false + default: "" env: REGISTRY: ghcr.io @@ -24,7 +33,7 @@ jobs: env: NARG: 2 - TAG: gha-test + TAG: "gha-test${{ github.event.inputs.test-image-tag-suffix }}" INT_TAG: gha-int-test # This job runs for all events that trigger this workflow @@ -55,7 +64,7 @@ jobs: uses: docker/build-push-action@v5 with: context: . - push: false + push: ${{ github.event.inputs.keep-test-image == 'true' }} load: true build-args: | img_user=${{ env.BASE_IMAGE_USER }} From 551fbaa3574fa24c985fb4938fe63b7aac729652 Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Wed, 29 Apr 2026 16:05:44 -0700 Subject: [PATCH 3/6] Add GHCR login to the test_docker job --- .github/workflows/publish.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 16708ea8..ae9db989 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -59,6 +59,15 @@ jobs: with: driver: docker + - name: Login to GHCR + # This condition should match the `push` condition in the `Build` step just below + if: ${{ github.event.inputs.keep-test-image == 'true' }} + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build id: build uses: docker/build-push-action@v5 From c729c5c3fcaff13df5c4ef1a330ac6fb7fcaf69c Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Tue, 12 May 2026 16:23:11 -0700 Subject: [PATCH 4/6] Revert "Switch catching std::exception during BasicConsumeMessage() to a soft_error" This reverts commit 7ca0e7e2b1095abb33ea0f2250b195b8ad5245c5. --- library/core.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/core.cc b/library/core.cc index 25fd87aa..3e04b3f4 100644 --- a/library/core.cc +++ b/library/core.cc @@ -583,7 +583,7 @@ namespace dripline catch( std::exception& e ) { LERROR( dlog, "Standard exception caught: " << e.what() ); - a_status = post_listen_status::soft_error; + a_status = post_listen_status::hard_error; return; } catch(...) From 3babfd8a2f1d22993abfc874844c08b98032fd6f Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Wed, 13 May 2026 16:38:12 -0700 Subject: [PATCH 5/6] Added AGENTS.md for AI-assisted development --- AGENTS.md | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..4e29b635 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,110 @@ +# AGENTS.md + +## Purpose + +This file defines guidance for coding agents acting as C++ developers in this repository. +The goal is to make safe, minimal, style-consistent changes to dripline-cpp. + +## Repository Scope + +- Main library code: `library/` +- CLI executables: `executables/` (`dl-agent`, `dl-mon`) +- Example services/endpoints: `examples/` +- Unit/integration tests: `testing/` +- Docs sources: `documentation/source/` +- Bundled dependency and build framework: `scarab/` + +## Architecture At A Glance + +- `core` owns AMQP connectivity and send/listen primitives. +- `message` and derived types (`msg_request`, `msg_reply`, `msg_alert`) implement protocol objects and chunking. +- `receiver` and `listener` manage chunk assembly and concurrent processing. +- `endpoint` implements request dispatch and lockout semantics. +- `service` composes endpoint + listener/receiver + heartbeater + scheduler. +- `hub` maps message specifiers to user-registered handlers. +- `agent` and `monitor` provide CLI-oriented message send/observe tooling. + +## Build And Test Workflow + +Preferred local workflow (from repo root): + +1. Configure + - `cmake -S . -B build` +2. Build + - `cmake --build build -j` +3. Run tests + - `./build/testing/run_dl_tests` + +Common options: + +- `-DDripline_ENABLE_TESTING=ON` +- `-DDripline_ENABLE_EXECUTABLES=ON` +- `-DDripline_BUILD_EXAMPLES=ON` +- `-DDripline_BUILD_PYTHON=ON` (only when needed) + +If you add new source files, update the corresponding `CMakeLists.txt` target lists. + +## Coding Style (Observed In This Codebase) + +Follow existing style in the touched file. Do not reformat unrelated code. + +### Formatting + +- Use 4-space indentation; no tabs. +- Put opening braces on the next line for classes/functions/control blocks. +- Use the project's spacing pattern, e.g. `if( condition )`, `catch( const std::exception& e )`. +- Keep lines reasonably readable; avoid large-scale wrapping churn. + +### File Structure + +- Header/source pairs use `.hh` and `.cc`. +- Header guards are uppercase with `_HH_` suffix (example pattern: `DRIPLINE_FOO_HH_`). +- Most files include a top block comment with file name, date, author; preserve existing header blocks. + +### Includes + +- In `.cc` files, include the matching local header first. +- Then include project headers, then external/library headers, then standard headers. +- Preserve the local ordering conventions in each file when editing. + +### Namespaces And Types + +- Core namespace is `dripline`. +- Prefer existing alias style in a file (`using`, `typedef`) instead of forcing one style. +- Keep API/export macros where used (`DRIPLINE_API`, `DRIPLINE_API_EXPORTS`). + +### Class And Member Conventions + +- Member fields commonly use `f_` prefix (`f_status`, `f_channel`, etc.). +- Accessor macros from Scarab are widely used (`mv_accessible`, `mv_referrable`, etc.); use them consistently in nearby code. +- Keep move/copy semantics explicit where already established. + +### Error Handling And Logging + +- Prefer explicit exception types used by this project (`dripline_error`, `connection_error`, AMQP exceptions). +- Preserve message-rich error text using stream-style construction. +- Use logger macros already present in the file (`LOGGER`, `LDEBUG`, `LINFO`, `LWARN`, `LERROR`). + +### Const And Parameter Passing + +- Prefer `const` correctness and pass heavy objects by `const &`. +- Follow existing pointer ownership style (`std::shared_ptr`, project typedefs). + +## Testing Expectations For Changes + +- Add or update tests in `testing/` when behavior changes. +- Prefer focused tests near related existing suites (agent/core/service/message/etc.). +- Do not weaken existing assertions to make tests pass. + +## Agent Working Rules + +- Make minimal, targeted edits. +- Preserve public behavior unless the task explicitly changes behavior. +- Avoid speculative refactors during bug fixes. +- Update docs/comments when behavior or configuration changes. +- Keep cross-component compatibility in mind (`dripline-python`, protocol constants, and wire expectations). + +## When Unsure + +- Prefer consistency with nearest surrounding code over generic modern C++ style advice. +- If patterns conflict across files, match the pattern used in the file you are editing. \ No newline at end of file From a39a1f931f52da4f08c65ae640dad8dc1cfdd0a6 Mon Sep 17 00:00:00 2001 From: Noah Oblath Date: Fri, 5 Jun 2026 10:13:06 -0700 Subject: [PATCH 6/6] [no ci] Updated changelog and bumped version to v2.10.12 --- CMakeLists.txt | 2 +- changelog.md | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d1f23a61..f9380d65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ cmake_minimum_required (VERSION 3.12) ######### cmake_policy( SET CMP0048 NEW ) # version in project() -project( Dripline VERSION 2.10.11 ) +project( Dripline VERSION 2.10.12 ) list( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/scarab/cmake ) diff --git a/changelog.md b/changelog.md index 23bab2e1..75971336 100644 --- a/changelog.md +++ b/changelog.md @@ -10,6 +10,13 @@ Types of changes: Added, Changed, Deprecated, Removed, Fixed, Security ## [Unreleased] +## [2.10.12] -- 2026-06-05 + +### Changed + +- Modified GHA workflow to allow keeping of test-build images + + ## [2.10.11] -- 2026-01-23 ### Changed