fix(examples): ncclfrreceiver example_config -> RFC-0013 (#457)#462
Merged
Conversation
Sibling cleanup to #458 (closed #454). `module/receiver/ncclfrreceiver/ example_config.yaml` referenced the retired `stdoutexporter`, and the README invoked the deleted `tracecore collect` subcommand. Both were retired by RFC-0013 PR-A2 (`stdoutexporter` -> `debug`; `collect` subcommand removed - OCB binary takes `--config=` directly). Applies the same recipe as #458 to the receiver example. Verified: - `./_build/tracecore validate --config=module/receiver/ncclfrreceiver/example_config.yaml` was exit 1 (unknown type stdoutexporter); now exit 0. - `cd module && go test -race -count=1 ./receiver/ncclfrreceiver/...` green. - `make validator-recipe` green. - A+ sweep across `module/**/example_config.yaml`: the two sibling examples (patterndetectorprocessor, rankjoinprocessor) already validate clean. No additional rot. Refs: #458, RFC-0013 PR-A2. Closes #457. Signed-off-by: Tri Lam <tree@lumalabs.ai>
Contributor
Author
Review: Independent Adversarial AuditScope verified:
Testing verified:
Code quality:
Deferred work:
Grade: A — tight, correct, well-tested fix mirroring #458 pattern. Recommend merge once follow-up issue is filed. |
5 tasks
trilamsr
added a commit
that referenced
this pull request
Jun 2, 2026
…460) (#466) ## Summary Closes #460. The `exit 0` on `scripts/doc-check.sh` ran unconditionally whenever `docs/FAILURE-MODES.md` carried no `Test*`/`Fuzz*`/`Benchmark*` identifiers (its current state on `main` — `grep -c` = 0), silently bypassing every gate below it. Fix scopes the skip to the Go-test parity block only (if/else, not `exit`), then surfaces and fixes the dead refs the gates were supposed to be catching. ## Root cause Commit a57883f (#13) shipped `doc-check.sh` with one gate — the Go-test name parity check — so `[ -z "$referenced" ] && exit 0` was correct then. PRs #28, #56, #115, #131, #144, #149, #195, #234, #241, #443, #455, #459 (and others) appended gates **below** that line without recognising they'd become dead code whenever `FAILURE-MODES.md` lost its `Test*` references. PR #459 worked around the bug by placing its new YAML gate *above* line 99 and tracked the root cause separately as #460. ## What surfaced Once `exit 0` was removed, three real issues fired: 1. **Dead `.md` link**: `docs/FOLLOWUPS.md` → `followups/otlphttp.md`. The shard was never committed to `main`'s ancestry. Folded into the existing "Shards deleted post-v0.2.0 as fully resolved-via-pivot" prose block (sibling treatment to M9, M14, M16). 2. **Banned-phrase hits** (3x `production-grade`): reworded in `docs/cut-criteria.yaml.md` (2x) and `install/kubernetes/tracecore/README.md` (1x) to falsifiable language. 3. **`docs/getting-started.md` block cap**: 7 fenced bash/sh blocks. The M6 cap of 5 was set for the quickstart only — `## Install via Helm` and `## Air-gapped install` are alternate deployment paths that landed post-M6 and aren't part of the quickstart budget. Rescoped the gate to count blocks inside the `## Walkthrough` H2 section only (1 block, well under cap). ## Gate count Empirically verified via `grep -c '^doc-check: '` on `make doc-check` output on a clean tree: | State | Status lines emitted | Gates the early-exit was hiding | |---|---|---| | Pre-fix on `main` (post-#459) | 3 (trust-posture, YAML cross-link, parity-skip) | 14 | | Post-fix this PR (post-rebase) | 17 | 0 | The "14 gates hidden" number is invariant across the rebase: it counts gates placed below the early-exit line. The "3 → 17" total reflects post-#459 reality on `main`; pre-#459 baseline was "2 → 16" (the figure originally in this PR body), and #459 itself worked around the bug by placing its YAML gate above line 99. ## Mutation tests Each gate below the original early-exit was confirmed to fire post-fix: | Mutation | Gate expected to fire | Exit code post-mutation | Exit code post-restore | |---|---|---|---| | Inject `[bad](nonexistent-ghost.md)` into `docs/FOLLOWUPS.md` | markdown link-rot | 1 | 0 | | Append `blazing-fast` + `rock-solid` to `docs/getting-started.md` | banned-phrase lint | 1 | 0 | | Delete `<!-- tested-against: ... -->` from `docs/integrations/datadog.md` | M6 recipe markers | 1 | 0 | ## Test plan - [x] `make doc-check` exits 0 on clean tree (re-run post-rebase onto origin/main; 17 status lines) - [x] 3 mutation tests above each toggle exit 1 → 0 across mutate / restore - [x] Pre-push hooks green: golangci-lint (0 issues), `go vet ./...`, `go mod verify`, `attribute-namespace-check` (100 attrs, all documented), `register-lint`, `actionlint`, `zizmor`, `deprecation-check`, `no-autoupdate-check` - [x] Rebased onto current `origin/main` (includes #459, #461, #462, #456); no conflicts; gate count re-verified empirically post-rebase - [x] No changes to gates above line 99 (the trust-posture callout + YAML cross-link gate from #459 still run and emit unchanged status lines) ## Self-grade **A+** — root cause named in commit body (a57883f #13 with one gate; gates appended below without exit-path awareness); 3 mutation tests (success criteria required 1–2); rescoped the getting-started gate to match M6 intent rather than papering over the surfaced overflow; the `[ -z "$referenced" ]` legitimate skip is preserved via if/else (not `:` no-op, which would have left the `defined=` / `orphans=` block running on empty input); gate count corrected empirically post-rebase per reviewer B feedback. ```release-notes - fix(ci): `scripts/doc-check.sh` no longer exits 0 at the Go-test parity gate when `docs/FAILURE-MODES.md` carries no `Test*` references. 14 gates below that line (link-rot, banned-phrase, M6 recipe markers, etc.) are now actually enforced on every `make doc-check` invocation. Closes #460. ``` --------- Signed-off-by: Tri Lam <tree@lumalabs.ai>
2 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Sibling cleanup to #458 (which closed #454).
module/receiver/ncclfrreceiver/example_config.yamlreferenced the retiredstdoutexporter, and its README invoked the deletedtracecore collectsubcommand.Both were retired by RFC-0013 PR-A2:
stdoutexporter-> upstreamdebug;collectsubcommand removed -- the OCB-assembled binary takes--config=directly.Applies the same recipe as #458:
exporters.stdoutexporter->exporters.debugwithverbosity: detailed(matches the old stdoutexporter output shape).exporters: [stdoutexporter]->exporters: [debug].tracecore collect --config …invocation ->./_build/tracecore --config=…, with an explanatory pointer back to RFC-0013 PR-A2.Root cause
Two layers, identical to #458:
stdoutexporterand thecollectsubcommand; the operator-facing receiver example/README was not migrated alongside.scripts/validator-recipe.shonly walksdocs/integrations/*.md. There is no CI gate that walksmodule/**/example_config.yaml, so the file stayed broken onmainuntil fix(examples): with-telemetry.yaml -> RFC-0013 successor components (#454) #458's A+ sweep noticed.A structural fix would extend the validator sweep to
module/**/example_config.yaml(anddocs/examples/*.yaml, per #458). Out of scope for this PR -- if reviewer agrees, I'll file as a follow-up.Verification
Pre-commit gates green: golangci-lint, go vet, go mod verify, attribute-namespace-check, DCO sign-off.
A+ sweep
Walked every
module/**/example_config.yamlfor the retired symbols (stdoutexporter,clockreceiver,telemetrygeneratorreceiver,tracecore collect):module/processor/patterndetectorprocessor/example_config.yaml--tracecore validateexit 0. Clean.module/processor/rankjoinprocessor/example_config.yaml--tracecore validateexit 0. Clean.module/receiver/ncclfrreceiver/example_config.yaml-- fixed in this PR.No additional rot under
module/.Test plan
tracecore validatewas exit 1, now exit 0 against the fixedexample_config.yaml.go test -race -count=1 ./receiver/ncclfrreceiver/...green (no receiver source changed; sanity).make validator-recipegreen (sibling-example sanity).module/**/example_config.yaml-- only this file required fixing.Refs: #458, RFC-0013 PR-A2.
Closes #457.