Skip to content

docs(rfc-0013): make containerstdout deletion explicit in §7#170

Merged
trilamsr merged 1 commit into
mainfrom
chore/rfc-0013-containerstdout-explicit
May 30, 2026
Merged

docs(rfc-0013): make containerstdout deletion explicit in §7#170
trilamsr merged 1 commit into
mainfrom
chore/rfc-0013-containerstdout-explicit

Conversation

@trilamsr

Copy link
Copy Markdown
Contributor

Summary

Closes the implicit-vs-explicit gap in RFC-0013 that left containerstdout-related issues (#159, #160, #161, #162, #163) ambiguous on the v0.2.0 fate.

  • §4 v0.2.0 row: add containerstdout to the in-tree delete list
  • §7 deletion table: add row containerstdoutfilelogreceiver + container stanza + file_storage (v0.2.0, pending pilot audit)
  • §migration PR-K: include containerstdout in delete list; note that the M19 cross-signal join test re-homes to processor/rankjoinprocessor integration suite against filelogreceiver + k8sobjectsreceiver inputs
  • Open Question ci(deps): bump the gh-actions group with 5 updates #1: add M15 containerstdout to the pilot-audit set (alongside M9 kernelevents, M10 k8sevents, M13 pyspy Phase 2)

Root cause

The §2 adoption matrix already lists filelogreceiver + container stanza + file_storage as the replacement for container stdout, but §7 (the deletion table operators actually read for the release-boundary contract) did not include containerstdout. The ambiguity surfaced during issue triage: #159#162 could not be cleanly closed as "outdated by RFC-0013" without an explicit §7 row. Issue #163 stays open with re-scoped title pointing the M19 join test at processor/rankjoinprocessor.

Test plan

  • make lint (golangci-lint) — pass
  • make test (go test -race ./...) — pass
  • make build — pass
  • Doc-only change; no behavioral surface affected

🤖 Generated with Claude Code

Closes the implicit-vs-explicit gap that left issues #159-#163
ambiguous on the containerstdout v0.2.0 fate:

- §4 v0.2.0 row: add containerstdout to in-tree delete list
- §7 deletion table: add row containerstdout → filelogreceiver +
  container stanza + file_storage (v0.2.0, pending pilot audit)
- §migration PR-K: include containerstdout in delete list; note
  M19 cross-signal join test re-homes to processor/rankjoinprocessor
  integration suite against filelogreceiver + k8sobjectsreceiver inputs
- Open Question #1: add M15 containerstdout to pilot-audit set
  (alongside M9 kernelevents, M10 k8sevents, M13 pyspy Phase 2)

The §2 adoption matrix already implied this substitution; §7
deletion table is the authoritative source operators read for
the release-boundary contract, so the explicit row is required.

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

Signed-off-by: Tri Lam <tri@maydow.com>
@trilamsr trilamsr enabled auto-merge (squash) May 30, 2026 10:22
@trilamsr trilamsr merged commit 026d06d into main May 30, 2026
10 checks passed
@trilamsr trilamsr deleted the chore/rfc-0013-containerstdout-explicit branch May 30, 2026 10:25
trilamsr added a commit that referenced this pull request May 31, 2026
## What this PR does

Implements RFC-0013 PR-A skeleton: tracecore can now build via the
OpenTelemetry Collector Builder alongside the legacy `cmd/tracecore`
binary. Both targets coexist for one PR cycle per RFC-0013 PR-A
side-by-side requirement.

- New: `builder-config.yaml` at repo root — pins core OTel v0.110.0 +
contrib v0.110.0 receivers/processors/exporters/extensions.
- New: `make build-ocb` Makefile target — `go run
go.opentelemetry.io/collector/cmd/builder@v0.110.0
--config=builder-config.yaml` → `./_build/tracecore`. No new go.mod dep;
builder runs as a tool.
- Updated: `make build` help text marks legacy target as retired at
v0.2.0 (per RFC-0013 PR-F).
- Updated: `.gitignore` adds `/_build/` for OCB output dir.

## Deviations from RFC-0013 §1 example shape

Two corrections were needed for the example config to actually build:

1. **`zpagesextension`**: RFC-0013 example put it under `contrib`, but
the module path
`github.com/open-telemetry/opentelemetry-collector-contrib/extension/zpagesextension`
has no v0.110.0 tag. The module lives in core:
`go.opentelemetry.io/collector/extension/zpagesextension`. Corrected
here.
2. **`telemetrygeneratorreceiver`**: contrib path lists the receiver,
but it has no published v0.110.0 tag (pseudo-module). Omitted here with
an inline comment; will be added in PR-E with the `clockreceiver` swap.
3. **`tracecoreai/tracecore-components/*`** entries (ncclfrreceiver,
rankjoinprocessor, patterndetectorprocessor): the separate module repo
doesn't exist yet — created in PR-I (v0.2.0). Omitted from this
skeleton.

## Doc cleanup (caught during self-review of #170)

RFC-0013 §migration PR-K: removed stale `kineto` from the v0.2.0 delete
list. Kineto was already deleted in PR-F per #168; it was double-listed
because the RFC was drafted before #168 executed early deletion. PR-O
retains the OTel Profiles GA re-evaluation hook.

## Smoke test

```
$ make build-ocb
... INFO builder/main.go:131 Compiled {"binary": "./_build/tracecore"}

$ ./_build/tracecore --version
tracecore version 0.1.0

$ ./_build/tracecore components
# enumerates 5 receivers (filelog, journald, k8sobjects, otlp, prometheus)
# + 4 processors (batch, transform, filter, k8sattributes)
# + 4 exporters (otlphttp, debug, datadog, clickhouse)
# + 3 extensions (filestorage, healthcheck, zpages)
# with upstream stability tiers attached

$ make build  # legacy target still works
$ ls -la tracecore _build/tracecore
-rwxr-xr-x  50M  tracecore
-rwxr-xr-x 119M  _build/tracecore
```

## Release notes

```release-notes
[FEATURE] Add `make build-ocb` target that assembles tracecore via the OpenTelemetry Collector Builder from `builder-config.yaml`. The legacy `make build` target continues to work; both binaries coexist for one PR cycle.
```

## Test plan

- [x] `make lint` — pass (pre-commit hook)
- [x] `make test` — pass (pre-commit hook)
- [x] `make build` — legacy binary builds
- [x] `make build-ocb` — OCB binary builds, `--version` + `components`
work
- [x] Side-by-side: both binaries coexist with no conflicts

---------

Signed-off-by: Tri Lam <tri@maydow.com>
Co-authored-by: Tri Lam <tri@maydow.com>
trilamsr added a commit that referenced this pull request May 31, 2026
## What this PR does

Bundles three RFC-0013 PR slices that have zero file overlap with each
other.

### PR-C: release pipeline → goreleaser stack

- New `.goreleaser.yaml`: linux/amd64 + linux/arm64 builds; reproducible
via `SOURCE_DATE_EPOCH`; LDFLAGS shape matches the Makefile build
target.
- Rewritten `.github/workflows/release.yml`: invokes goreleaser,
`anchore/sbom-action`, `sigstore/cosign-installer`,
`slsa-framework/slsa-github-generator` (tag-pinned per SLSA OIDC subject
identity requirement; all other actions SHA-pinned per repo security
policy), `actions/attest-build-provenance`.
- Old `release.yml` moved to
`.github/workflows/archived/release.yml.legacy`.
- Goreleaser builds the **legacy** `cmd/tracecore` binary; OCB-output
migration deferred to PR-D (image build → ko), per inline comment in
`.goreleaser.yaml`.

### PR-G + PR-H: RFC supersession + top-level docs alignment

- Audit confirmed all 12 RFCs already carry the correct supersedence
headers from prior pivot work (PRs #166/#168/#169/#170). Only two
top-level docs needed alignment:
- `NORTHSTARS.md` O1 caveat: replaced "own-binary architecture"
assumption wording with OCB-distribution-posture wording; closed Open
Question #1 by RFC-0013 ref.
- `CHANGELOG.md`: appended pivot-wave-1 PR list
(#166/#168/#169/#170/#171/#172/#173) citing PR-A as the prior step
before this commit.
- No edits needed to
README/STRATEGY/PRINCIPLES/MILESTONES/CONTRIBUTING/AGENTS/docs/README —
all already aligned.

### PR-E: clockreceiver swap — BLOCKED

- `telemetrygeneratorreceiver` does not exist in
`opentelemetry-collector-contrib` at any version. Verified against the
Go module proxy, GitHub tree API at v0.95→v0.130, and the full receiver
listing at v0.110.0 (94 receivers; no `telemetrygenerator`, `loadgen`,
`mockreceiver`, `dummyreceiver`, or any `*generator*`). The RFC-0013 §1
example shape referenced it speculatively; it was never upstreamed.
- `builder-config.yaml`: replaced the misleading "no v0.110.0 tag"
omission comment with a verified TODO block describing the actual
blocker (receiver doesn't exist anywhere) and decision rationale.
- `bench/install/tracecore-values.yaml`: appended `[BLOCKED]` marker on
the clockreceiver→telgen mapping; bench continues to use in-tree
clockreceiver until PR-F deletes it (likely rewires to
`hostmetricsreceiver`).

## Root cause (PR-E blocker)

RFC-0013 §1 listed `telemetrygeneratorreceiver` as the swap target
without verifying the receiver existed upstream. Reality: the OTel
contrib repo has no such module path at any tag. PR-E cannot complete
until either (a) the receiver lands upstream, or (b) a different
replacement is chosen (e.g., `hostmetricsreceiver` for heartbeat
semantics). Tracked in the in-file TODO block; revisit in PR-F (delete
clockreceiver) or as a separate followup.

## Release notes

```release-notes
[CHANGE] Release pipeline migrated to goreleaser + SBOM + SLSA provenance + cosign signing. The release.yml workflow now invokes goreleaser instead of building binaries directly. Operators consuming release artifacts: artifact shape (filename, archive contents, checksum file format) follows goreleaser defaults; see CHANGELOG.md for the migration note.
```

## Test plan

- [x] `make verify` runs and passes
- [x] `make actionlint` passes (new release.yml workflow +
suppression-block YAML valid)
- [x] `make zizmor` passes (SLSA reusable-workflow tag-pin justified
inline + accepted)
- [x] `make build` (legacy) still works
- [x] `make build-ocb` (OCB) still works
- [ ] Goreleaser dry-run in CI on first push to a tag (gated until a tag
exists)

Signed-off-by: Tri Lam <tri@maydow.com>
Co-authored-by: Tri Lam <tri@maydow.com>
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