Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
526db47
Add robustness reproduction tests for session, handshake and timeout …
ktsaou Oct 29, 2026
c828b0d
Fix Rust receive timing out after one 100 ms abort-poll slice
ktsaou Oct 29, 2026
ca3f5be
Document the 100 ms client abort observation bound
ktsaou Oct 29, 2026
321629a
Cap UDS packet size at the kernel datagram limit
ktsaou Oct 29, 2026
7e9d9e2
Build and run Go on all Linux architectures; fix 32-bit SHM bounds
ktsaou Oct 29, 2026
cf61ad1
Run C, Rust and Go suites on every Netdata Linux target; fix 32-bit L…
ktsaou Oct 30, 2026
b450b40
Detect dead peers on SHM sessions in C, Rust and Go
ktsaou Oct 31, 2026
2ac2011
Bound server handshakes and make server stop and shutdown reliable
ktsaou Oct 31, 2026
2a5888b
Make correctness suites deterministic and separate extended suites
ktsaou Oct 31, 2026
5271dff
Bound client connects, handshakes and retries by the call deadline
ktsaou Oct 31, 2026
6609157
Start MSYS threads through pthread_create in the Windows C library
ktsaou Oct 31, 2026
e38ffa7
Retry EINTR, lock POSIX endpoints and report transport failures disti…
ktsaou Oct 31, 2026
b66b224
Create SHM regions only for sessions that negotiate SHM
ktsaou Oct 31, 2026
28dc796
Support FreeBSD and validate the selected HELLO_ACK profile
ktsaou Oct 31, 2026
84f6195
Create POSIX listener sockets owner-only without changing the umask
ktsaou Oct 31, 2026
dbfa64a
Format Rust sources with style edition 2024
ktsaou Oct 31, 2026
2561405
Close the Netdata memory-safety vendoring SOW on its merged evidence
ktsaou Oct 31, 2026
26067c3
Close the Codacy scope SOW and track duplication, Go 1.27 and consume…
ktsaou Oct 31, 2026
49a9ab9
Record user decisions for Windows pipe security, macOS, FreeBSD, Go 1…
ktsaou Oct 31, 2026
f2b9585
Refresh the Netdata vendoring SOW sub-state
ktsaou Oct 31, 2026
2197bdb
Record the user's ordering: all code changes before benchmarks and ve…
ktsaou Oct 31, 2026
ee8e32d
Restrict Windows pipes and SHM objects to the server's account, SYSTE…
ktsaou Oct 31, 2026
891faa1
Move Go modules and pinned CI Go to 1.27, matching Netdata
ktsaou Oct 31, 2026
7b73adc
Share the Rust UDS and Named Pipe framing in one module
ktsaou Oct 31, 2026
485a881
Run NetIPC on macOS over a framed AF_UNIX stream baseline
ktsaou Nov 1, 2026
5161da6
Unlock the endpoint lock before closing it
ktsaou Nov 1, 2026
ed24606
Return the wait's timeout or abort from Go server handshakes
ktsaou Nov 1, 2026
e3a6bdd
Run the POSIX SHM transport on FreeBSD
ktsaou Nov 1, 2026
48cc98b
Keep POSIX pipelining clients progressing when socket buffers fill
ktsaou Nov 3, 2026
5e6bfb7
Remove Go per-request allocations and wall-clock reads from the hot path
ktsaou Nov 3, 2026
0a6aed3
Keep Windows Named Pipe pipelining clients progressing past the pipe …
ktsaou Nov 4, 2026
2eee40a
Run the POSIX baseline over a stream socket on FreeBSD
ktsaou Nov 4, 2026
d54b22c
Fix CI and scanner failures before vendoring
ktsaou Nov 4, 2026
bbc55a2
Keep the endpoint lock and SHM region usable under a restrictive umask
ktsaou Nov 4, 2026
292c6dc
Restore the umask in the SHM umask test children before exit
ktsaou Nov 5, 2026
80a56de
Annotate the bounded call-timeout conversion for gosec
ktsaou Nov 5, 2026
4261919
Create Windows bench run directories without a mode
ktsaou Nov 5, 2026
9568f4e
Record the Netdata vendoring and open follow-ups for Go coverage and …
ktsaou Nov 6, 2026
616bc81
Synchronize the service limit tests on the server ready event instead…
ktsaou Nov 7, 2026
d223d9f
Test endpoint lock creation under a restrictive umask in Rust and Go
ktsaou Nov 7, 2026
6b14803
Fix confirmed PR review findings before the Netdata vendoring
ktsaou Nov 8, 2026
3fb1bef
Create endpoint locks owner-only and fix further review findings
ktsaou Nov 8, 2026
278125c
Retry EINTR in the stalled-reader poll and narrow the macOS manual step
ktsaou Nov 8, 2026
d3c94a5
Fix NetIPC warnings in Netdata's fortified build
ktsaou Nov 9, 2026
84444bd
Close SOW-0050 after re-vendoring d3c94a5 into Netdata
ktsaou Nov 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
87 changes: 83 additions & 4 deletions .agents/skills/project-netdata-vendoring/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,17 +168,64 @@ Load this skill for any task involving:
If any downstream vendored-source change is not understood, do not run
`vendor-to-netdata.sh`.

7. Record the CI/scanner preflight in the active SOW before vendoring.
7. Assess performance impact (AGENTS.md, Test Cadence).

Benchmarks take hours; run them only when the vendored changes can affect
established-session steady state. Collect the SOW gate performance
assessments for every source change since the baseline (step 5), and
record in the active SOW whether any changed code runs per request on an
established session, with file:line evidence.

- No such change (connection setup, reconnect, error mapping, idle-timeout
paths, shutdown, tests, docs, build): no benchmark run; record the
assessment.
- Such a change exists: run the affected suites once on the candidate
commit:

```bash
# Measure (run-*), then render the report and check floors (generate-*).
bash tests/run-posix-bench.sh benchmarks-posix.csv
bash tests/generate-benchmarks-posix.sh
# On the Windows host:
bash tests/run-windows-bench.sh benchmarks-windows.csv
bash tests/generate-benchmarks-windows.sh
```

Compare against the committed CSVs (`git diff`). If rows regress beyond
noise, fix all regressions, then rerun once; bisect by SOW commit.
- Assessment uncertain: ask the user before running anything.

A regression that is neither fixed nor explicitly accepted by the user
blocks vendoring.

Extended suites (fuzz, stress, randomized chaos, lookup scale) are not
part of correctness runs. Run them once on the candidate commit when the
vendored changes touch what they exercise (codecs and decoders for fuzz;
concurrency, session lifecycle or transports for stress), and record the
result or the reason none was needed:

```bash
bash tests/run-extended-fuzz.sh
Comment thread
ktsaou marked this conversation as resolved.
Resolved
bash tests/run-extended-stress.sh
```

A failure blocks vendoring until it is fixed.

8. Record the CI/scanner preflight in the active SOW before vendoring.

Include:

- source repository and commit;
- GitHub Actions/check-run summary;
- code-scanning summary by tool and severity;
- Dependabot and secret-scanning summary;
- Go version alignment: the `go` directive in the three plugin-ipc
`go.mod` files equals Netdata's `src/go/go.mod`, and `GoVersionOverride`
in the three `osv-scanner.toml` files equals the patch release Netdata
pins in `packaging/check-for-go-toolchain.sh`; fix any mismatch first;
- decision: proceed, block, or proceed with explicit risk acceptance.

8. Only after the CI/scanner preflight and two-way migration plan pass, update
9. Only after the CI/scanner preflight and two-way migration plan pass, update
the Netdata vendored copy using the project-local vendor workflow.

```bash
Expand All @@ -187,14 +234,42 @@ Load this skill for any task involving:
bash ./diff-netdata-vendor.sh /path/to/netdata
```

9. Validate in the Netdata checkout.
`vendor-to-netdata.sh` prints the Go import-path rewrite but does not run
it, and `diff-netdata-vendor.sh` normalizes import paths, so it reports no
difference either way. Apply the rewrite in the Netdata checkout (no `.bak`
files), then confirm no upstream path is left:

```bash
grep -rlZ 'github.com/netdata/plugin-ipc/go' src/go/pkg/netipc --include='*.go' |
xargs -0 -r sed -i 's|github.com/netdata/plugin-ipc/go|github.com/netdata/netdata/go/plugins|g'
grep -rl 'github.com/netdata/plugin-ipc/go' src/go/pkg/netipc # expect no output
Comment on lines +243 to +245

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1: These relative paths rewrite the plugin-ipc source tree, not the Netdata checkout, when the documented vendor commands are run from the source repository. Change into /path/to/netdata (or use an absolute destination) before both the rewrite and verification commands.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At .agents/skills/project-netdata-vendoring/SKILL.md, line 243:

<comment>These relative paths rewrite the plugin-ipc source tree, not the Netdata checkout, when the documented vendor commands are run from the source repository. Change into `/path/to/netdata` (or use an absolute destination) before both the rewrite and verification commands.</comment>

<file context>
@@ -234,6 +234,17 @@ Load this skill for any task involving:
+   files), then confirm no upstream path is left:
+
+   ```bash
+   grep -rlZ 'github.com/netdata/plugin-ipc/go' src/go/pkg/netipc --include='*.go' |
+     xargs -0 -r sed -i 's|github.com/netdata/plugin-ipc/go|github.com/netdata/netdata/go/plugins|g'
+   grep -rl 'github.com/netdata/plugin-ipc/go' src/go/pkg/netipc   # expect no output
</file context>
Suggested change
grep -rlZ 'github.com/netdata/plugin-ipc/go' src/go/pkg/netipc --include='*.go' |
xargs -0 -r sed -i 's|github.com/netdata/plugin-ipc/go|github.com/netdata/netdata/go/plugins|g'
grep -rl 'github.com/netdata/plugin-ipc/go' src/go/pkg/netipc # expect no output
(
cd /path/to/netdata
grep -rlZ 'github.com/netdata/plugin-ipc/go' src/go/pkg/netipc --include='*.go' |
xargs -0 -r sed -i 's|github.com/netdata/plugin-ipc/go|github.com/netdata/netdata/go/plugins|g'
grep -rl 'github.com/netdata/plugin-ipc/go' src/go/pkg/netipc # expect no output
)

```

10. Validate in the Netdata checkout.

Run the targeted Netdata build/tests required by the active SOW. At minimum,
prove:

- the vendor diff is expected after copying;
- Netdata-only wrapper files were not overwritten;
- unrelated Netdata files were not staged or modified by the vendoring step.
- unrelated Netdata files were not staged or modified by the vendoring step;
- every vendored `.c` file is in Netdata's build lists
(`src/libnetdata/SourceLists.cmake`), and every system library the new
code calls is linked to the `netipc` target in
`src/libnetdata/CMakeLists.txt` (the script does not edit either file);
- the Netdata build reports no warning in vendored NetIPC sources. Netdata
compiles them with `-O2 -D_FORTIFY_SOURCE=3`, which plugin-ipc's own
builds do not enable, so check this before pushing the source commit:

```bash
cmake -S . -B .tmp/fortify-build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS="-O2 -D_FORTIFY_SOURCE=3 -Wall -Wextra"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: -DCMAKE_BUILD_TYPE=Release appends -O3 after CMAKE_C_FLAGS, so the -O2 here is overridden and the build is not at Netdata's -O2 level. Set the Release flags explicitly so the check matches Netdata's compile flags.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At .agents/skills/project-netdata-vendoring/SKILL.md, line 255:

<comment>`-DCMAKE_BUILD_TYPE=Release` appends `-O3` after `CMAKE_C_FLAGS`, so the `-O2` here is overridden and the build is not at Netdata's `-O2` level. Set the Release flags explicitly so the check matches Netdata's compile flags.</comment>

<file context>
@@ -245,7 +245,16 @@ Load this skill for any task involving:
+
+     ```bash
+     cmake -S . -B .tmp/fortify-build -DCMAKE_BUILD_TYPE=Release \
+       -DCMAKE_C_FLAGS="-O2 -D_FORTIFY_SOURCE=3 -Wall -Wextra"
+     cmake --build .tmp/fortify-build 2>&1 | grep 'src/libnetdata.*warning:'
+     ```
</file context>
Suggested change
-DCMAKE_C_FLAGS="-O2 -D_FORTIFY_SOURCE=3 -Wall -Wextra"
-DCMAKE_C_FLAGS_RELEASE="-O2 -D_FORTIFY_SOURCE=3 -Wall -Wextra"

cmake --build .tmp/fortify-build 2>&1 | grep 'src/libnetdata.*warning:'
Comment on lines +265 to +267

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2: grep returns success when it finds a warning and failure for a clean build, so this check has inverted status semantics. It also masks a failed build when the failure output contains a matching warning; preserve the build status and fail on a matching log entry.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At .agents/skills/project-netdata-vendoring/SKILL.md, line 254:

<comment>`grep` returns success when it finds a warning and failure for a clean build, so this check has inverted status semantics. It also masks a failed build when the failure output contains a matching warning; preserve the build status and fail on a matching log entry.</comment>

<file context>
@@ -245,7 +245,16 @@ Load this skill for any task involving:
+     builds do not enable, so check this before pushing the source commit:
+
+     ```bash
+     cmake -S . -B .tmp/fortify-build -DCMAKE_BUILD_TYPE=Release \
+       -DCMAKE_C_FLAGS="-O2 -D_FORTIFY_SOURCE=3 -Wall -Wextra"
+     cmake --build .tmp/fortify-build 2>&1 | grep 'src/libnetdata.*warning:'
</file context>
Suggested change
cmake -S . -B .tmp/fortify-build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS="-O2 -D_FORTIFY_SOURCE=3 -Wall -Wextra"
cmake --build .tmp/fortify-build 2>&1 | grep 'src/libnetdata.*warning:'
set -e -o pipefail
cmake -S . -B .tmp/fortify-build -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS="-O2 -D_FORTIFY_SOURCE=3 -Wall -Wextra"
cmake --build .tmp/fortify-build 2>&1 | tee .tmp/fortify-build.log
if grep -q 'src/libnetdata.*warning:' .tmp/fortify-build.log; then
echo 'warning in vendored NetIPC sources' >&2
exit 1
fi

```

Netdata builds `netipc` on Linux and Windows only; the Windows build is
proven by the Netdata PR's "Build Windows" check, so the SOW stays open
until that check passes.

## Blockers

Expand All @@ -210,6 +285,8 @@ Stop and report if any of these are true:
- either side has NetIPC changes since the last vendoring that are not
understood;
- the active SOW does not contain a migration plan for both directions;
- the performance assessment is missing, or a benchmark run it called for
shows a regression that is neither fixed nor explicitly accepted by the user;
- source tree has uncommitted changes that are intended for vendoring;
- Netdata checkout has unrelated changes that would be hard to isolate.

Expand All @@ -228,5 +305,7 @@ Netdata vendoring preflight:
- Upstream gap: <summary of plugin-ipc changes since baseline>
- Downstream gap: <summary of Netdata vendored changes since baseline>
- Migration plan: <preserve/backport/overwrite/decision summary>
- Performance: <assessment; benchmark run or why none was needed; regressions fixed/accepted/none>
- Extended suites: <fuzz/stress run and result, or why none was needed>
- Decision: proceed | blocked | proceed with user-accepted risk
```
2 changes: 1 addition & 1 deletion .agents/sow/current/SOW-0021-20260613-netipc-at-scale.md
Original file line number Diff line number Diff line change
Expand Up @@ -1359,7 +1359,7 @@ Pending.

## Followup

None yet.
- 2026-10-31: the Netdata consumer steps of the "Downstream Vendoring Plan" (step 7: OVERSIZED_ITEM / PAYLOAD_EXCEEDED handling and status names) were never done; the statuses are already vendored in Netdata. They are now tracked in SOW-0050, including a confirmed network-viewer caching bug. This SOW closes after the pre-vendoring full POSIX and Windows benchmark run and after the remaining broader adversarial matrix gaps are handled (Execution Log, artifact gate entry).

## Regression Log

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

## Status

Status: paused
Status: completed

Sub-state: paused by user decision on 2026-06-11 so `SOW-0016` can take current active slot for a timeout/abort liveness fix. Resume from Codacy test/bench exclusion and refreshed production-source maintainability baseline work.
Sub-state: closed 2026-10-31 after refreshing the metrics and selecting the next target; the continuing file-by-file work moves to SOW-0057 and the Go version drift to SOW-0058.

## Requirements

Expand Down Expand Up @@ -1082,19 +1082,30 @@ Lessons:

Follow-up mapping:

- Netdata re-vendor work is planned in this SOW and will be performed after the SDK commit is pushed.
- Netdata re-vendor work from this SOW shipped in later vendorings (`netdata/netdata#22936`, merged 2026-07-01, closed in SOW-0027).

### 2026-10-31 close-out

- Codacy Cloud, public API, `main` `63919ecb7d` (2026-09-27): grade A (99), 33 issues, 60453 LOC (tests and benchmarks excluded by `.codacy.yml` `exclude_paths`, which Cloud honors), coverage 90.6%, complex files 32%, duplicated files 32% (baseline at `dbf77a8595`: 42% / 41%, with tests counted). Goals: 10% / 10%.
- The 33 issues are all Trivy Go standard-library findings on `go.mod` (`go 1.26.0`); Netdata has since moved to `go 1.27.0`, so the version rule this SOW recorded is now out of date: tracked in SOW-0058.
- Next target, by evidence: `jscpd --min-tokens 50` over production sources (branch tip `dbfa64a`) finds 9.6% duplicated lines; the largest pair is Rust `transport/windows.rs` (745 lines) / `transport/posix.rs` (577). Tracked with the full ranking in SOW-0057.

## Outcome

Pending.
Codacy metrics now cover production code only (tests and benchmarks excluded through `.codacy.yml`, which Cloud honors). Complex files fell from 42% to 32% and duplicated files from 41% to 32%. The next production target is selected with evidence.
Comment thread
ktsaou marked this conversation as resolved.
Resolved

Correction (2026-11-07, SOW-0070): the 42% / 41% baseline counted tests and the 32% / 32% result counts production code only, so the two do not measure the same scope; the result is a production-only rebaseline, not evidence that complexity or duplication fell.

## Lessons Extracted

Pending.
- Codacy Cloud reads path excludes from a root `.codacy.yml`, not from `.codacy/codacy.config.json`.
- Codacy's duplicated-files metric counts any file with one duplicated block, so it stays far above line-level duplication (32% of files vs 9.6% of lines here); pick targets by duplicated lines, then confirm with the Cloud metric.

## Followup

None yet.
- File-by-file duplication work: SOW-0057.
- Go 1.27 alignment and the Trivy findings: SOW-0058.
- Search of this SOW for defer/later/follow-up/future/TODO/pending: the July re-vendor plan (shipped, see above) and historical narrative.

## Regression Log

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@

## Status

Status: paused
Status: completed
Comment thread
ktsaou marked this conversation as resolved.
Resolved

Sub-state: paused on 2026-07-12 so SOW-0030 can take the active slot for the
fleet-observed SHM SIGBUS crash. The earlier L3 API decision was resolved by using the
direct L2 snapshot path; resume from final validation, artifact maintenance, review,
and lifecycle closure for the already merged Netdata vendor update.
Sub-state: closed 2026-10-31 on existing evidence: the Netdata vendor update merged on 2026-07-01 (`netdata/netdata#22936`). Paused 2026-07-12 for SOW-0030; resumed only for final validation and lifecycle closure.

Correction (2026-11-07, SOW-0070): no `diff-netdata-vendor.sh` result was recorded at close, so this record does not prove source-to-Netdata parity for `netdata/netdata#22936`. The next vendoring (SOW-0050) reconstructed the baseline from both repositories and records its own before and after vendor diffs.

## Requirements

Expand Down Expand Up @@ -287,7 +286,8 @@ Acceptance criteria evidence:
- Source post-backport preflight completed before Netdata vendoring: CI/checks, GitHub code scanning, Dependabot, secret scanning, and Codacy Cloud were checked for `bb7a73e0e2b871352eeb3c4403afbd69649a351d`.
- Two-way gap analysis completed before vendoring and recorded in the 2026-07-01 execution log.
- Valid Netdata-only vendored-source drift was backported to `plugin-ipc` before any Netdata copy.
- Netdata vendoring is implemented in the target checkout and the eBPF L2 adaptation builds; the first PR commit exposed CI/scanner findings that are being fixed source-first before re-vendoring.
- Netdata vendoring is implemented in the target checkout and the eBPF L2 adaptation builds; the first PR commit exposed CI/scanner findings, fixed source-first before re-vendoring.
- Final state (checked 2026-10-31, read-only `gh`): `netdata/netdata#22936` "Update vendored NetIPC to 98ec474" merged 2026-07-01T13:51:31Z, head `e5f57a1e93`, merge commit `ca9a5426a6`. The vendored source commit `98ec474` is an ancestor of plugin-ipc `HEAD`.

Tests or equivalent validation:

Expand All @@ -298,7 +298,9 @@ Tests or equivalent validation:
- `git diff --check`;
- SOW audit.
- GitHub/Codacy validation for the new source backport commit passed as recorded above.
- Source-side CI/scanner repair validation passed locally as recorded in the 2026-07-01 execution log. Remote source CI/scanner validation is pending until the repair commit is pushed.
- Source-side CI/scanner repair validation passed locally as recorded in the 2026-07-01 execution log.
- Remote source checks on the vendored commit `98ec474`: 46 check runs succeeded; `Valgrind` was skipped on the 2026-07-01 run and a later 2026-07-07 run was cancelled: the run that gated vendoring skipped it, and the cancelled run came six days after the merge. Open GitHub code-scanning alerts on plugin-ipc: 0 (2026-10-31).
- PR check snapshot (2026-10-31): 107 pass, 20 skipping, 20 fail. All 20 failures are `Build / Test Source Build (...)` jobs that completed about two hours after the merge (e.g. check run 84540364193, completed 15:52 UTC) and failed in Docker buildx with "repository does not contain ref refs/pull/22936/merge": a post-merge re-run against a deleted merge ref, not a code failure.

Real-use evidence:

Expand All @@ -308,7 +310,7 @@ Real-use evidence:

Reviewer findings:

- Not started.
- No external review. Netdata maintainers reviewed and merged the PR.

Same-failure scan:

Expand All @@ -326,7 +328,7 @@ Artifact maintenance gate:
- Specs: no update needed until implementation changes behavior.
- End-user/operator docs: no update needed until implementation changes behavior.
- End-user/operator skills: no update needed until implementation changes behavior.
- SOW lifecycle: moved from pending to current before source backport and Netdata vendoring; remains in progress until Netdata commit, post-vendor checks, and final review are complete.
- SOW lifecycle: moved to `done/` at close. The `umask()` suppressions added during the scanner repair are superseded by SOW-0032, which removed the `umask()` calls.

Specs update:

Expand Down Expand Up @@ -354,15 +356,16 @@ Follow-up mapping:

## Outcome

In progress. Source backport and pre-vendor checks are complete, Netdata vendoring is copied, and the eBPF consumer now builds against the vendored opaque NetIPC cache API by using direct L2 snapshot access. Draft PR `netdata/netdata#22936` is open; its first commit exposed Go fix, Codacy, and Sonar findings that are being repaired source-first before re-vendoring. Post-vendor CI/scanner checks and final SOW closure are not complete yet.
Completed. The NetIPC memory-safety fixes reached Netdata through the source-first vendoring path: Netdata-only drift was backported, the CI and scanner findings from the first PR commit were fixed in plugin-ipc, and `netdata/netdata#22936` (vendoring plugin-ipc `98ec474`, with the eBPF consumer switched to direct L2 snapshot access) merged on 2026-07-01.

## Lessons Extracted

- Avoid adding a public L3 enumeration API only to satisfy a single-threaded periodic importer; first check whether the consumer is actually a hot multi-threaded lookup user or just a fetch/process pipeline.

## Followup

None yet.
- Later NetIPC changes reach Netdata through SOW-0050.
- Search of this SOW for defer/later/follow-up/future/TODO/pending: remaining matches are historical narrative (the July "pending" states, now resolved above) and the SOW-0050 reference.

## Regression Log

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

## Status

Status: open
Status: closed

Sub-state: tracked follow-up discovered by SOW-0030; execution must wait until the
active SOW completes.
Sub-state: merged into SOW-0048 (FreeBSD support) on 2026-10-31, before any
implementation. Its requirements and acceptance criteria live there; the FreeBSD build
is where the `NOT APPLE` gate fails.

## Requirements

Expand Down Expand Up @@ -173,6 +174,11 @@ Open decisions:
- Created as the real pending follow-up for the CMake/platform-contract discrepancy
discovered during SOW-0030 research.

### 2026-10-29

- Overlap recorded: SOW-0048 (FreeBSD support) includes this C SHM build-gating fix;
merge the two before implementation.

## Validation

Acceptance criteria evidence:
Expand Down Expand Up @@ -225,11 +231,13 @@ Lessons:

Follow-up mapping:

- This file is the tracked follow-up from SOW-0030.
- All requirements are tracked by SOW-0048.

## Outcome

Pending.
Closed without implementation: merged into
`.agents/sow/current/SOW-0048-20261029-freebsd-support.md`, as the overlap note of
2026-10-29 required (AGENTS.md "One SOW At A Time": merge before implementation).

## Lessons Extracted

Expand Down
Loading
Loading