Skip to content

docs: bring README, RFC/IEC62443/BDD docs back in line with code#450

Merged
DavidCozens merged 1 commit into
mainfrom
docs/consistency-audit
May 25, 2026
Merged

docs: bring README, RFC/IEC62443/BDD docs back in line with code#450
DavidCozens merged 1 commit into
mainfrom
docs/consistency-audit

Conversation

@DavidCozens

@DavidCozens DavidCozens commented May 25, 2026

Copy link
Copy Markdown
Owner

Summary

Documentation drift had accumulated over the last several months of feature work — this PR re-aligns the docs with the actual codebase. No functional changes.

  • README — senders are pool-backed via E11 (SOLIDSYSLOG_*_SENDER_POOL_SIZE), not singletons; Windows and FreeRTOS BDD targets both wire all four transports now (UDP/TCP/TLS/mTLS); Windows BDD target has file-backed SolidSyslogBlockStore; added SolidSyslogFreeRtosAddress to the FreeRTOS adapter list.
  • docs/rfc-compliance.md + docs/iec62443.md — the "SO_SNDTIMEO 5 s hard-coded" claim is obsolete. The TCP socket is non-blocking from open; bounded connect uses SOLIDSYSLOG_TCP_CONNECT_TIMEOUT_MS (default 200 ms) or per-Stream GetConnectTimeoutMs(ctx); analogous handshake pair for TLS (S12.17 S12.17: Tunable + runtime-overridable TCP connect and TLS handshake timeouts #282). Long-term wedge detected via TCP_KEEPALIVE + TCP_USER_TIMEOUT. Added SolidSyslogFreeRtosMutex to the injected-mutex list in iec62443.md.
  • docs/bdd.md — all three runner tag filters were stale against ci/docker-compose.bdd.yml and .github/workflows/ci.yml:
    • Linux: not @wipnot @wip and not @no_rtc
    • FreeRTOS: now includes @tls or @mtls in the OR group
    • Windows: not @bufferednot @no_rtc (Windows target gained buffered + store wirings)
    • Added @store, @rtc, @no_rtc, @requires_message_size_1500 to the tags table.
    • Dropped the "STRUCTURED_DATA scenarios are @windows_wip" note — they aren't, and the OTel parser re-renders SDATA via _render_otel_structured_data.
  • Bdd/README.md + Bdd/Targets/FreeRtos/README.md — same FreeRTOS local-run filter fix; bumped sender description to four transports including switch tls / switch mtls; added the missing tag rows.
  • docs/integrating-mbedtls.mdSolidSyslogMbedTlsStreamConfig listing was missing the S12.17 GetHandshakeTimeoutMs / HandshakeTimeoutContext fields. Added to the "what you provide" table and the worked example.

Test plan

  • CI passes (docs-only changes — build/test/sanitize/coverage/analysis jobs should be unaffected)
  • Read through the rendered diff on GitHub to confirm tables and code blocks render cleanly

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Enhanced FreeRTOS platform documentation to clarify support for UDP, TCP, TLS, and mTLS transports.
    • Updated concurrent sender instance pooling details and configuration guidelines.
    • Improved security audit log and RFC compliance documentation with refined timeout and transport handling details.
    • Expanded BDD testing guidance with updated tag definitions and cross-target buffering information.

Review Change Stack

Several months of feature work (S08.03-S08.08 FreeRTOS bring-up, S12.17
TCP/TLS timeout tunables, S13/S26 Windows + FreeRTOS BDD wiring, E11
pool migration) had moved past what the docs described. This pass is
docs-only, no functional changes:

- README: senders are pool-backed now (E11), not singletons; Windows
  BDD target wires TLS/mTLS + file-backed store; FreeRTOS BDD target
  wires TLS/mTLS via MbedTls over FreeRTOS-Plus-TCP; SolidSyslogFreeRtosAddress
  added to the adapter list.
- rfc-compliance.md + iec62443.md: drop the obsolete "SO_SNDTIMEO 5s
  hard-coded" claim — the TCP socket is non-blocking from open, with
  bounded connect via SOLIDSYSLOG_TCP_CONNECT_TIMEOUT_MS (default 200 ms)
  or per-Stream GetConnectTimeoutMs accessor; analogous handshake
  pair for TLS (S12.17 #282). Add SolidSyslogFreeRtosMutex to the
  injected-mutex list in iec62443.md.
- docs/bdd.md: fix all three runner tag filters against the canonical
  source (ci/docker-compose.bdd.yml + ci.yml); add @store, @rtc,
  @no_rtc, @requires_message_size_1500 to the tags table; drop the
  stale "STRUCTURED_DATA only in syslog-ng oracle" note now that the
  OTel parser re-renders SDATA.
- Bdd/README.md + Bdd/Targets/FreeRtos/README.md: align the local-run
  tag filter and switch-command list with the four-transport reality.
- integrating-mbedtls.md: add GetHandshakeTimeoutMs /
  HandshakeTimeoutContext to the MbedTlsStreamConfig surface (S12.17).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented May 25, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

This pull request updates project documentation across seven files to reflect expanded FreeRTOS transport support (UDP, TCP, TLS, mTLS), corresponding BDD test infrastructure changes, timeout/non-blocking behavior guarantees, and public API documentation.

Changes

FreeRTOS and BDD Documentation Updates

Layer / File(s) Summary
FreeRTOS transport architecture and wiring
Bdd/Targets/FreeRtos/README.md, README.md
SolidSyslogSwitchingSender wraps four transports (UDP via Datagram, TCP/TLS/mTLS via StreamSender and MbedTlsStream), with UART-driven runtime switching via switch udp/tcp/tls/mtls commands; QEMU slirp gateway resolver pinning and FatFs store-and-forward are documented.
BDD capability tags and platform filtering
Bdd/README.md, docs/bdd.md
BDD tag taxonomy expanded with @buffered, @store, @requires_message_size_1500 capability tags; runner filters updated to include TLS/mTLS transports for FreeRTOS and add @no_rtc exclusions for Linux/Windows; buffered wiring semantics clarified for cross-platform coverage.
Timeout and non-blocking behavior documentation
docs/iec62443.md, docs/integrating-mbedtls.md, docs/rfc-compliance.md
Connect/handshake timeouts replace SO_SNDTIMEO wording; per-instance GetHandshakeTimeoutMs accessor added with NULL fallback to compile-time default (5000 ms); RFC 6587 partial-write handling updated to emphasize non-blocking sends and TCP keepalive/pending-write liveness; SolidSyslogFreeRtosMutex added to RTOS minimal-footprint mutex implementations.
Cross-platform terminology and public API documentation
docs/bdd.md, README.md
"BDD target binary" terminology replaces generic artifact labels; OTel parser's _render_otel_structured_data function clarified for cross-platform structured-data assertions; public headers list expanded with FreeRTOS adapters (SolidSyslogFreeRtos*) and FatFs adapter (SolidSyslogFatFsFile); BDD target platform descriptions updated with specific transport stacks and scenario coverage.

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly Related PRs

  • DavidCozens/solid-syslog#152: Earlier BDD capability-tag taxonomy work establishing @udp/@buffered tags and runner filtering logic in docs/bdd.md.
  • DavidCozens/solid-syslog#264: Windows portable ring-buffer BDD implementation directly connected to @buffered tag semantics and runner-filter updates in this PR.
  • DavidCozens/solid-syslog#313: Introduces @rtc/@no_rtc BDD scenario tags and FreeRTOS filtering; this PR's @no_rtc exclusion updates for Linux/Windows are directly aligned.

Poem

🐰 The docs hop with FreeRTOS grace,
Four transports dance through UART's space—
UDP, TCP, TLS so tight,
mTLS brings the cryptographic light.
Tags now buffered, scenarios clear,
Cross-platform testing cheers three-fold here!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main objective of bringing documentation in line with recent code changes across multiple docs.
Description check ✅ Passed The description comprehensively covers Purpose, Change Description, and Test Evidence sections aligned with the template, detailing specific docs updated and their rationale.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/consistency-audit

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/bdd.md`:
- Around line 149-155: The Windows runner filter in the docs is inconsistent:
the canonical filter string "not `@wip` and not `@windows_wip` and not `@no_rtc`"
(used in the Runner table) conflicts with the local command example that uses
"not `@buffered`"; update the local command example to use the canonical Windows
filter string so both references match, or alternatively change the table entry
to "not `@buffered`" if you intend that as canonical—ensure you update the
occurrences of the unique filter strings ("not `@wip` and not `@windows_wip` and not
`@no_rtc`" and "not `@buffered`") and any local command examples that reference the
Windows filter so they are identical.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 0a16efe5-1189-49f8-9e33-adca0308528c

📥 Commits

Reviewing files that changed from the base of the PR and between 5e1e2db and 295c27b.

📒 Files selected for processing (7)
  • Bdd/README.md
  • Bdd/Targets/FreeRtos/README.md
  • README.md
  • docs/bdd.md
  • docs/iec62443.md
  • docs/integrating-mbedtls.md
  • docs/rfc-compliance.md

Comment thread docs/bdd.md
Comment on lines +149 to +155
Runner tag filters (canonical source: `ci/docker-compose.bdd.yml` for Linux + FreeRTOS, `.github/workflows/ci.yml` for Windows):

| Runner | Filter |
| --- | --- |
| Linux (syslog-ng) | `not @wip` |
| FreeRTOS (syslog-ng-freertos via QEMU) | `not @wip and not @freertoswip and not @rtc and not @windows_wip and (@udp or @tcp)` |
| Windows (OTel Collector) | `not @wip and not @windows_wip and not @buffered` |
| Linux (syslog-ng) | `not @wip and not @no_rtc` |
| FreeRTOS (syslog-ng-freertos via QEMU) | `not @wip and not @freertoswip and not @rtc and not @windows_wip and (@udp or @tcp or @tls or @mtls)` |
| Windows (OTel Collector) | `not @wip and not @windows_wip and not @no_rtc` |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Windows filter docs now conflict with the local Windows command example.

Line 155 updates Windows to not @wipand not@windows_wipand not@no_rtc, but the local command later in this file still uses `not `@buffered (Line 200). Please align both to one canonical filter to avoid running the wrong scenario set locally.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~149-~149: The official name of this software platform is spelled with a capital “H”.
Context: ...-compose.bdd.ymlfor Linux + FreeRTOS,.github/workflows/ci.yml` for Windows): | Runn...

(GITHUB)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/bdd.md` around lines 149 - 155, The Windows runner filter in the docs is
inconsistent: the canonical filter string "not `@wip` and not `@windows_wip` and not
`@no_rtc`" (used in the Runner table) conflicts with the local command example
that uses "not `@buffered`"; update the local command example to use the canonical
Windows filter string so both references match, or alternatively change the
table entry to "not `@buffered`" if you intend that as canonical—ensure you update
the occurrences of the unique filter strings ("not `@wip` and not `@windows_wip` and
not `@no_rtc`" and "not `@buffered`") and any local command examples that reference
the Windows filter so they are identical.

@github-actions

Copy link
Copy Markdown
Contributor

☀️   Quality Summary

   🚦   build-linux-gcc: 100% successful (✔️ 1338 passed)
   🚦   build-freertos-host-tdd: 100% successful (✔️ 1572 passed)
   🚦   build-linux-clang: 100% successful (✔️ 1290 passed)
   🚦   sanitize-linux-gcc: 100% successful (✔️ 1290 passed)
   🚦   integration-linux-openssl: 100% successful (✔️ 9 passed)
   🚦   integration-linux-mbedtls: 100% successful (✔️ 7 passed)
   🚦   integration-windows-openssl: 100% successful (✔️ 9 passed)
   🚦   bdd-linux-syslog-ng: 94% successful (✔️ 46 passed, 🙈 3 skipped)
   🚦   bdd-windows-otel: 90% successful (✔️ 44 passed, 🙈 5 skipped)
   🚦   bdd-freertos-qemu: 86% successful (✔️ 42 passed, 🙈 7 skipped)
   🚦   build-windows-msvc: 100% successful (✔️ 1149 passed)
   🚦   build-linux-tunable-override: 100% successful (✔️ 1290 passed)
   ⚠️   Clang-Tidy: No warnings
   ⚠️   CPPCheck: 1 warning (low: 1)


Created by Quality Monitor v1.14.0 (#f3859fd). More details are shown in the GitHub Checks Result.

@DavidCozens DavidCozens merged commit 5b38fd8 into main May 25, 2026
21 checks passed
@DavidCozens DavidCozens deleted the docs/consistency-audit branch May 25, 2026 14:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant