Skip to content

docs: S23.10 add @file briefs to the Core/Interface headers#612

Merged
DavidCozens merged 4 commits into
mainfrom
docs/s23.10-core-file-briefs
Jul 13, 2026
Merged

docs: S23.10 add @file briefs to the Core/Interface headers#612
DavidCozens merged 4 commits into
mainfrom
docs/s23.10-core-file-briefs

Conversation

@DavidCozens

@DavidCozens DavidCozens commented Jul 13, 2026

Copy link
Copy Markdown
Collaborator

What

Adds /** @file */ briefs to all 89 Core/Interface headers — the same
convention S23.09 (#607) applied to the platform headers. The Core headers
already carried the S23.02 symbol-level doc-comments but no @file block, so they
rendered blank in the Headers browser and had no component overview at the top of
their page. This fills that in; the existing symbol docs are untouched.

Closes #611.

Shape

  • One-line @file brief per header — component identity, which fills the Headers
    browser entry and the page's top "Detailed Description".
  • The concrete Core classes (Crc16Policy, CircularBuffer, BlockStore,
    FileBlockDevice, StreamSender / UdpSender / SwitchingSender / PassthroughBuffer,
    MetaSd / OriginSd / TimeQualitySd) get a fuller @file describing the
    significant behaviour, verified against Core/Source — consistent with the
    platform pass.
  • Abstract interfaces / *Definition.h vtables / Null objects / *Errors.h /
    *Categories.h get concise role briefs.

Commits (3 slices, for review granularity — squashes on merge)

  1. Mechanical role/template headers — Errors, Categories, Null objects, vtable
    Definitions (40).
  2. Concrete Core classes — behaviour-rich @files (12).
  3. Interfaces, application API, value types, callbacks, SD-authoring, error infra,
    tunables (37).

Verification

  • 89/89 headers carry exactly one @file; no collisions.
  • clang-format --dry-run --Werror clean.
  • mkdocs build --strict exit 0.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Expanded API documentation across logging components, transport, buffering, storage, security, structured data, timing, and error-handling interfaces.
    • Clarified expected lifecycles, runtime behaviour, and extension-point contracts, including null behaviours and TLS-related error category semantics.
  • New Features
    • Introduced new public optional interfaces for passthrough buffering, null stream and null security policy support, and structured-data value callbacks.
    • Added new opaque destination/address and related handles, plus TLS stream error categories for clearer failure reporting.

DavidCozens and others added 3 commits July 13, 2026 16:47
…nd vtables

@file component briefs (fill the Headers browser + page overview) added ahead of
the existing S23.02 symbol docs, on the mechanical role/template headers:
- *Errors.h (11): "Error codes and Source identity for <X>" (+ the top-level
  singleton SolidSyslogErrors).
- *Categories.h (5): the portable reaction-axis category macros per role.
- SolidSyslogNull*.h (12): the no-op Null object + its safe return contract.
- *Definition.h (12): the role vtable contract (extension point) + its slots.
Existing symbol docs untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Behaviour-rich @file overviews (verified against Core/Source) on the 12 concrete
Core classes: Crc16 / Crc16Policy (unkeyed CRC-16 integrity — corruption, not
tamper-evidence), PassthroughBuffer (inline Write so Log blocks), CircularBuffer
(uint16 length-prefixed ring, no-split wrap, drop-newest, mutex-bracketed),
BlockStore (durable store-and-forward, discard policy, threshold callback +
PassthroughBuffer recursion gotcha), FileBlockDevice (one file per block),
MetaSd / OriginSd / TimeQualitySd (the RFC 5424 SD elements they emit),
SwitchingSender (selector + NullSender fallback), StreamSender (RFC 6587 octet
framing over any Stream), UdpSender (one datagram/record, oversize UTF-8-boundary
trim, delivery-failed/restored reporting).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…types

@file briefs on the remaining Core/Interface headers:
- Role dispatch interfaces (Buffer / Store / Sender / Datagram / Stream /
  Resolver / Mutex / AtomicCounter / File / BlockDevice / StructuredData) — the
  role, and that calls dispatch to the injected implementation's vtable.
- Application API (SolidSyslog / Config / ConfigLock), value types (Timestamp,
  Prival, Endpoint, EndpointHost, HeaderField, Address, Transport, ServiceStatus,
  TimeQuality), callback typedefs, SD-authoring (SdElement / SdValue), error infra
  (Error / ErrorCategory), and the tunables. ExternC = the C-linkage guard macros.

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

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 41674b7f-b919-45bc-8101-e1272d024781

📥 Commits

Reviewing files that changed from the base of the PR and between 55ff320 and 3cbae8c.

📒 Files selected for processing (9)
  • Core/Interface/SolidSyslogBufferCategories.h
  • Core/Interface/SolidSyslogCrc16Policy.h
  • Core/Interface/SolidSyslogErrors.h
  • Core/Interface/SolidSyslogResolver.h
  • Core/Interface/SolidSyslogResolverCategories.h
  • Core/Interface/SolidSyslogSecurityPolicyCategories.h
  • Core/Interface/SolidSyslogSenderCategories.h
  • Core/Interface/SolidSyslogStore.h
  • Core/Interface/SolidSyslogTlsStreamCategories.h

Walkthrough

Added @file documentation across the Core/Interface headers. New public declarations cover opaque addresses, null objects, passthrough buffering, SD callbacks, and TLS error categories.

Changes

Core interface documentation and additions

Layer / File(s) Summary
Foundation and core contracts
Core/Interface/ExternC.h, Core/Interface/SolidSyslog*.h
Documents linkage, logging, storage, buffering, configuration, integrity, endpoint, and foundational API contracts.
Null objects and extension interfaces
Core/Interface/SolidSyslogNull*.h, Core/Interface/SolidSyslogPassthroughBuffer*.h, Core/Interface/SolidSyslogSdValueFunction.h
Documents null implementations and adds passthrough-buffer, SD-value callback, null stream, and null security-policy declarations.
Transport and sender interfaces
Core/Interface/SolidSyslogResolver*.h, Core/Interface/SolidSyslogDatagram*.h, Core/Interface/SolidSyslogStream*.h, Core/Interface/SolidSyslogSender*.h, Core/Interface/SolidSyslogUdpSender.h
Documents resolution, datagram and stream transport, sender routing, switching, and UDP delivery behaviour.
Supporting API briefs and categories
Core/Interface/SolidSyslog*Sd*.h, Core/Interface/SolidSyslog*Errors.h, Core/Interface/SolidSyslog*Categories.h, Core/Interface/SolidSyslogTunables*.h
Documents structured-data sources, timing, tunables, payload helpers, error identities, and portable category constants.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely describes the doc-only @file brief update for Core/Interface headers.
Description check ✅ Passed The description covers purpose, scope, verification, and affected areas, even though it uses custom headings.
Linked Issues check ✅ Passed The change matches #611 by adding @file briefs to Core/Interface headers and preserving the existing symbol docs.
Out of Scope Changes check ✅ Passed No clear out-of-scope changes are evident; the diff remains documentation-focused.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch docs/s23.10-core-file-briefs

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

@github-actions

Copy link
Copy Markdown
Contributor

☀️   Quality Summary

   🚦   build-linux-gcc: 100% successful (✔️ 1522 passed)
   🚦   build-freertos-host-tdd-plustcp: 100% successful (✔️ 1873 passed)
   🚦   build-linux-clang: 100% successful (✔️ 1453 passed)
   🚦   sanitize-linux-gcc: 100% successful (✔️ 1453 passed)
   🚦   integration-linux-openssl: 100% successful (✔️ 16 passed)
   🚦   integration-linux-mbedtls: 100% successful (✔️ 14 passed)
   🚦   integration-windows-openssl: 100% successful (✔️ 16 passed)
   🚦   bdd-linux-syslog-ng: 94% successful (✔️ 49 passed, 🙈 3 skipped)
   🚦   bdd-windows-otel: 88% successful (✔️ 46 passed, 🙈 6 skipped)
   🚦   bdd-freertos-qemu-plustcp: 87% successful (✔️ 45 passed, 🙈 7 skipped)
   🚦   bdd-freertos-qemu-lwip: 87% successful (✔️ 45 passed, 🙈 7 skipped)
   🚦   build-windows-msvc: 100% successful (✔️ 1298 passed)
   🚦   build-linux-tunable-override: 100% successful (✔️ 1453 passed)
   ⚠️   Clang-Tidy: No warnings
   ⚠️   CPPCheck: No warnings


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

@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: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Core/Interface/SolidSyslogStreamDefinition.h (1)

18-23: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Align the public stream blocking contract.

Core/Interface/SolidSyslogStream.h says blocking discipline belongs to the injected stream, whereas this contract mandates “non-blocking bounded behaviour”. Those statements conflict and may lead implementers to provide incompatible transports. Make one guarantee authoritative and mirror it in both headers.

As per path instructions, Core/Interface/**/*.h is the public API boundary, so this contract must be unambiguous.

🤖 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 `@Core/Interface/SolidSyslogStreamDefinition.h` around lines 18 - 23, Align the
blocking-discipline wording in SolidSyslogStreamDefinition.h with the
authoritative contract in SolidSyslogStream.h. Update the stream contract
documentation so both public headers make the same guarantee about blocking
behavior, removing the conflicting “non-blocking bounded behaviour” mandate
while preserving the documented slot semantics and close-on-failure lifecycle.

Source: Path instructions

🤖 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 `@Core/Interface/SolidSyslogCrc16Policy.h`:
- Around line 7-8: Update the SolidSyslogCrc16Policy documentation to replace
“authenticates” when describing the unkeyed CRC with “checks” or equivalent
checksum/integrity wording, while preserving the explanation that it processes
the content as one span.

In `@Core/Interface/SolidSyslogErrors.h`:
- Around line 1-2: Update the file-level documentation for SolidSyslogErrors to
describe it as “Error codes and source identity for the SolidSyslog instance,”
removing the misleading “Singleton” wording while preserving the rest of the
description.

In `@Core/Interface/SolidSyslogPassthroughBuffer.h`:
- Around line 8-10: Rename the header guard macro in
SolidSyslogPassthroughBuffer.h from SOLIDSYSLOGPASSTHROUGHBUFFER_H to
SOLIDSYSLOG_PASSTHROUGH_BUFFER_H, updating both the `#ifndef` and matching `#define`
occurrences.

In `@Core/Interface/SolidSyslogResolver.h`:
- Around line 2-3: Update the documentation for SolidSyslogResolver_Resolve to
describe the resolved address as being used by the later Datagram or Stream
sender for transmission, replacing the reference to those components reading it.
Leave the surrounding resolver role and dispatch description unchanged.

In `@Core/Interface/SolidSyslogResolverCategories.h`:
- Around line 2-3: Update the documentation brief in
SolidSyslogResolverCategories.h to name the declared public macro
SOLIDSYSLOG_CAT_RESOLVER_RESOLVE_FAILED instead of _RESOLVER_RESOLVE_FAILED,
ensuring the Headers browser links to the real identifier.

In `@Core/Interface/SolidSyslogStore.h`:
- Around line 1-5: Qualify the no-loss statement in the file-level documentation
for the store role: state that records accepted by the injected store are
retained and replayed, rather than implying records are never lost during an
outage. Do not change the fallback send behavior in SolidSyslog.c or claim
lossless delivery for records rejected by Write.

---

Outside diff comments:
In `@Core/Interface/SolidSyslogStreamDefinition.h`:
- Around line 18-23: Align the blocking-discipline wording in
SolidSyslogStreamDefinition.h with the authoritative contract in
SolidSyslogStream.h. Update the stream contract documentation so both public
headers make the same guarantee about blocking behavior, removing the
conflicting “non-blocking bounded behaviour” mandate while preserving the
documented slot semantics and close-on-failure lifecycle.
🪄 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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: f073992a-e597-4d14-8f27-da4629c47afe

📥 Commits

Reviewing files that changed from the base of the PR and between ee1f447 and 55ff320.

📒 Files selected for processing (89)
  • Core/Interface/ExternC.h
  • Core/Interface/SolidSyslog.h
  • Core/Interface/SolidSyslogAddress.h
  • Core/Interface/SolidSyslogAtomicCounter.h
  • Core/Interface/SolidSyslogAtomicCounterDefinition.h
  • Core/Interface/SolidSyslogBlockDevice.h
  • Core/Interface/SolidSyslogBlockDeviceDefinition.h
  • Core/Interface/SolidSyslogBlockStore.h
  • Core/Interface/SolidSyslogBlockStoreErrors.h
  • Core/Interface/SolidSyslogBuffer.h
  • Core/Interface/SolidSyslogBufferCategories.h
  • Core/Interface/SolidSyslogBufferDefinition.h
  • Core/Interface/SolidSyslogCircularBuffer.h
  • Core/Interface/SolidSyslogCircularBufferErrors.h
  • Core/Interface/SolidSyslogConfig.h
  • Core/Interface/SolidSyslogConfigLock.h
  • Core/Interface/SolidSyslogCrc16.h
  • Core/Interface/SolidSyslogCrc16Policy.h
  • Core/Interface/SolidSyslogDatagram.h
  • Core/Interface/SolidSyslogDatagramDefinition.h
  • Core/Interface/SolidSyslogEndpoint.h
  • Core/Interface/SolidSyslogEndpointHost.h
  • Core/Interface/SolidSyslogError.h
  • Core/Interface/SolidSyslogErrorCategory.h
  • Core/Interface/SolidSyslogErrors.h
  • Core/Interface/SolidSyslogFile.h
  • Core/Interface/SolidSyslogFileBlockDevice.h
  • Core/Interface/SolidSyslogFileBlockDeviceErrors.h
  • Core/Interface/SolidSyslogFileDefinition.h
  • Core/Interface/SolidSyslogHeaderField.h
  • Core/Interface/SolidSyslogHeaderFieldFunction.h
  • Core/Interface/SolidSyslogKeyFunction.h
  • Core/Interface/SolidSyslogMetaSd.h
  • Core/Interface/SolidSyslogMetaSdErrors.h
  • Core/Interface/SolidSyslogMutex.h
  • Core/Interface/SolidSyslogMutexDefinition.h
  • Core/Interface/SolidSyslogNullAtomicCounter.h
  • Core/Interface/SolidSyslogNullBlockDevice.h
  • Core/Interface/SolidSyslogNullBuffer.h
  • Core/Interface/SolidSyslogNullDatagram.h
  • Core/Interface/SolidSyslogNullFile.h
  • Core/Interface/SolidSyslogNullMutex.h
  • Core/Interface/SolidSyslogNullResolver.h
  • Core/Interface/SolidSyslogNullSd.h
  • Core/Interface/SolidSyslogNullSecurityPolicy.h
  • Core/Interface/SolidSyslogNullSender.h
  • Core/Interface/SolidSyslogNullStore.h
  • Core/Interface/SolidSyslogNullStream.h
  • Core/Interface/SolidSyslogOriginSd.h
  • Core/Interface/SolidSyslogOriginSdErrors.h
  • Core/Interface/SolidSyslogPassthroughBuffer.h
  • Core/Interface/SolidSyslogPassthroughBufferErrors.h
  • Core/Interface/SolidSyslogPrival.h
  • Core/Interface/SolidSyslogResolver.h
  • Core/Interface/SolidSyslogResolverCategories.h
  • Core/Interface/SolidSyslogResolverDefinition.h
  • Core/Interface/SolidSyslogSdElement.h
  • Core/Interface/SolidSyslogSdValue.h
  • Core/Interface/SolidSyslogSdValueFunction.h
  • Core/Interface/SolidSyslogSecurityPolicyCategories.h
  • Core/Interface/SolidSyslogSecurityPolicyDefinition.h
  • Core/Interface/SolidSyslogSender.h
  • Core/Interface/SolidSyslogSenderCategories.h
  • Core/Interface/SolidSyslogSenderDefinition.h
  • Core/Interface/SolidSyslogServiceStatus.h
  • Core/Interface/SolidSyslogSleep.h
  • Core/Interface/SolidSyslogStore.h
  • Core/Interface/SolidSyslogStoreDefinition.h
  • Core/Interface/SolidSyslogStream.h
  • Core/Interface/SolidSyslogStreamDefinition.h
  • Core/Interface/SolidSyslogStreamSender.h
  • Core/Interface/SolidSyslogStreamSenderErrors.h
  • Core/Interface/SolidSyslogStructuredData.h
  • Core/Interface/SolidSyslogStructuredDataDefinition.h
  • Core/Interface/SolidSyslogSwitchingSender.h
  • Core/Interface/SolidSyslogSwitchingSenderErrors.h
  • Core/Interface/SolidSyslogTcpConnectTimeoutFunction.h
  • Core/Interface/SolidSyslogTimeQuality.h
  • Core/Interface/SolidSyslogTimeQualitySd.h
  • Core/Interface/SolidSyslogTimeQualitySdErrors.h
  • Core/Interface/SolidSyslogTimestamp.h
  • Core/Interface/SolidSyslogTlsHandshakeTimeoutFunction.h
  • Core/Interface/SolidSyslogTlsStreamCategories.h
  • Core/Interface/SolidSyslogTransport.h
  • Core/Interface/SolidSyslogTunables.h
  • Core/Interface/SolidSyslogTunablesDefaults.h
  • Core/Interface/SolidSyslogUdpPayload.h
  • Core/Interface/SolidSyslogUdpSender.h
  • Core/Interface/SolidSyslogUdpSenderErrors.h

Comment thread Core/Interface/SolidSyslogCrc16Policy.h Outdated
Comment thread Core/Interface/SolidSyslogErrors.h Outdated
Comment thread Core/Interface/SolidSyslogPassthroughBuffer.h
Comment thread Core/Interface/SolidSyslogResolver.h Outdated
Comment thread Core/Interface/SolidSyslogResolverCategories.h Outdated
Comment thread Core/Interface/SolidSyslogStore.h Outdated
- Crc16Policy: unkeyed CRC "authenticates" -> "checks" the content (it is not
  authentication; the file already says it is not tamper-evidence).
- Store: narrow the no-loss claim to a strong-but-scoped one — "a send failure
  never drops a stored record; it stays for retry" — rather than the absolute
  "nothing is lost across a send outage". (A record is only dropped in the double
  fault where the store's own Write fails and the fallback direct send also
  fails; that is by design, no code change.)
- Errors: drop "Singleton" (the instance is the singleton, not the codes).
- Resolver: address is "to send to", not "to read" (the Datagram/Stream use it
  for transmission).
- *Categories (all 5): name the real SOLIDSYSLOG_CAT_* macros instead of the
  leading-underscore abbreviations, so the Headers-browser brief points at a
  real identifier.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

☀️   Quality Summary

   🚦   build-linux-gcc: 100% successful (✔️ 1522 passed)
   🚦   build-freertos-host-tdd-plustcp: 100% successful (✔️ 1873 passed)
   🚦   build-linux-clang: 100% successful (✔️ 1453 passed)
   🚦   sanitize-linux-gcc: 100% successful (✔️ 1453 passed)
   🚦   integration-linux-openssl: 100% successful (✔️ 16 passed)
   🚦   integration-linux-mbedtls: 100% successful (✔️ 14 passed)
   🚦   integration-windows-openssl: 100% successful (✔️ 16 passed)
   🚦   bdd-linux-syslog-ng: 94% successful (✔️ 49 passed, 🙈 3 skipped)
   🚦   bdd-windows-otel: 88% successful (✔️ 46 passed, 🙈 6 skipped)
   🚦   bdd-freertos-qemu-plustcp: 87% successful (✔️ 45 passed, 🙈 7 skipped)
   🚦   bdd-freertos-qemu-lwip: 87% successful (✔️ 45 passed, 🙈 7 skipped)
   🚦   build-windows-msvc: 100% successful (✔️ 1298 passed)
   🚦   build-linux-tunable-override: 100% successful (✔️ 1453 passed)
   ⚠️   Clang-Tidy: No warnings
   ⚠️   CPPCheck: No warnings


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

@DavidCozens
DavidCozens merged commit 675d87a into main Jul 13, 2026
30 checks passed
@DavidCozens
DavidCozens deleted the docs/s23.10-core-file-briefs branch July 13, 2026 17:52
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.

S23.10: @file briefs on the Core/Interface headers

1 participant