Repository navigation
docs(readme): the trademark note claims no licence, and sits only in the attribution section - #495
Conversation
…the attribution section The branding rename on 2026-08-11 added a Trademarks note at the top of the README and a matching sentence in the attribution section, saying KAFKA "has been licensed for use by Antony Stubbs and contributors". That phrasing is the Apache Software Foundation's boilerplate for parties holding a formal trademark licence, and no such licence exists. A product named "Parallel Consumer for Apache Kafka" is nominative use under the Foundation's third-party naming guidance: the full "Apache Kafka" on the most prominent mention, no implication of affiliation, and the standard attribution line - which the README already carried and keeps. The owner's call, 2026-09-09: state the true thing, once, at the bottom. The top-of-README note is removed and the attribution section now says KAFKA is a registered trademark of the Foundation, this is an independent, community-maintained library that works with Apache Kafka, and it has no affiliation with and is not endorsed by the Foundation. The general Apache marks line beneath it is unchanged. Nothing links to the removed anchor. README.adoc is regenerated from the template, never hand-edited. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
|
@claude review this |
…checks The branding rename left a sentence in the README claiming a trademark licence nobody holds. #495 corrects it to nominative use and keeps it only in the attribution section; the tag-day checks now carry the reread so the claim cannot creep back before the cut. Claude-Session: 460f7df9-dcc2-4b00-a9f9-62f3a2c6d5e4 Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
|
Claude finished @astubbs's task in 1m 4s —— View job Review: docs(readme): trademark note wording
LGTM. This is a clean, well-motivated wording fix. What I checked:
Judgment on the substance: the core claim — that "licensed for use by" implies a formal trademark licence that doesn't exist — is correct per ASF's third-party trademark guidance, and the new wording (registered trademark + independent/no-affiliation disclaimer) is the standard nominative-use pattern. Nothing to push back on here; this is a factual correction to a previously inaccurate legal-sounding claim, scoped exactly as described. No code, tests, or build config touched — nothing else to verify. |
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
✅ Duplicate Code ReportTwo engines run in parallel for cross-validation. Each has its own thresholds tuned to its baseline - the real safety net is the per-engine "max increase vs base" check. ✅ PMD CPD
No new clones introduced by this PR. ✅ jscpd (language-agnostic)
No new clones introduced by this PR. Powered by astubbs/duplicate-code-cross-check |
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #495 +/- ##
============================================
+ Coverage 82.58% 83.02% +0.44%
- Complexity 1583 1588 +5
============================================
Files 96 96
Lines 5431 5431
Branches 547 547
============================================
+ Hits 4485 4509 +24
+ Misses 750 726 -24
Partials 196 196
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
🟢 Throughput — OKThis branch measured about 1% faster than master, on the one test this measures. That is INSIDE this test's own run-to-run spread of about 17%, so read it as a reading and not as a result - re-running the same commit moves it by about as much.
Allowable range 🟢 ≥ 0.70 · 🟡 0.50–0.70 (about a 30% loss) · 🔴 < 0.50 (about a 50% loss) What the numbers mean, and what they cannot tell youThe one that gets misread. Why a shape and not a rate. A rate depends on which runner you drew. A shape does not: every test here processes a fixed number of records, so a runner twice as slow doubles the subject and the controls together and leaves their ratio alone. That is the whole trick, and it is why the reported rate is shown last and labelled as this machine only. Reading the comparison. By conservation, not by correction. Every test in this lane processes a fixed number of records, so within one run the ratio of one test's time to another's is invariant under machine speed — a runner twice as slow doubles both terms and leaves the ratio alone. There is no machine-index correction to be wrong, because nothing needed correcting. Per-method times, not class times. A class time is Reference is the median of 10 recent What this still cannot do. It removes machine-to-machine variance. It does not remove this test's own run-to-run variance, measured at about 30% on a single unchanged commit while its controls stayed within 5%. That is a property of the test, not of the comparison, and no arithmetic here can touch it — which is why the reference is a median and the bounds are deliberately coarse. 🟡 means look at this; only 🔴 is outside the measured spread. Runs used: c381310, c79424a, 9c67c89, f1aa5eb, eb9fdb0, 51d9bb2, 0ca787c, b654cb2, a055248, 65e11e3 Since the previous push: ratio 1.099 -> 1.013, share 1.632 -> 1.854, rate 77493 -> 68265 (-11.9%). One push of difference sits inside this test's measured spread - read it as movement, not as a result. Updated for |
This branch is docs-only - two markdown files differ from master - so neither red it drew can be its own. Both are recorded against the notes that own them, and reading each occurrence turned up a correction the note needed. INTEGRATION TESTS, on this PR's own head. The shape in ci-broker-container-exit-126-is-undiagnosable.md, exactly: one class fell slowly at the container-start timeout and every other broker class fell in milliseconds with NoClassDefFoundError on BrokerIntegrationTest. Codecov renders that as "20 Tests Failed"; it is one failure. What is new is that the cause was in the log all along. Testcontainers prints the failed container's own output at GenericContainer#tryStart, one line below the "Wait strategy failed" line the note's signature block quotes, and it reads "sh: /tmp/testcontainers_start.sh: Text file busy" - ETXTBSY, exec refused because the starter script was still open for writing. The container command waits for that script to EXIST and then executes it, so a file the daemon has created but not finished extracting is executable-shaped and not executable, and the shell reports the refusal as exit 126. A Testcontainers start race, widened by a busy runner; nothing in the product, the image or the Kafka configuration. Refetching #347's 2026-08-25 job, the run this note was written from, shows the identical two lines. So the note's premise under item 1 - "the container's stdout is nowhere in the job log" - was false of its own founding evidence. The instrument was fine; the triage stopped one line short. That correction is proposed in the note's vetting marker rather than applied, because the note's impact is misdirection and those are the owner's to close. CHAOS PAIN SUITE 4/4, on #495 - also docs-only, one README paragraph. ChaosChurnStormIT NO_PROGRESS at 96632/100000 for 30s against a 30s bound, seed 3717713223451201639. It goes in test-no-progress-window-may-not-transfer-to-w1.md as one appended row, with the part that makes it worth having: the fleet KEPT CONSUMING, reaching 99569 by the settle summary, so the outstanding count fell from 3368 to 431 - inside the TAIL_SLACK of 500. That is the "drains" branch of the deciding experiment the note states. It is the weak form and the row says so: no recovery diagnostic, so the counter compared is the ledger's rather than the probe's, and the conductor's churn ended 10s after the firing, so it is recovery-once-churn-stops. The bigger finding is that the deciding experiment had already been answered twice and this note never took delivery. test-857-churn-storm-async-stalls.md drained six for six on seed 9086872209853284830 with the diagnostic engaged, and its 2026-09-08 sighting drained seed 5650361238717170909 from 93487 to 101070/100000 at an outstanding count of 6513 - larger than every row in the table. That sighting says outright that this note owns the question; the pointer was written and nobody followed it. Proposed in the vetting marker for the same reason as above. RULED OUT, with a control arm rather than an argument. The six merges that landed on master today - #480, #487, #488, #491, #492 and #493 - are the obvious suspects for a chaos red, and #491 does touch ProgressProbe.java. Its diff does not touch the NO_PROGRESS path at all - it adds the UNCOMMITTED_COMPLETIONS detector, edits javadoc, and refactors the finding sink - and the same test PASSED on two heads that carry every one of those merges, four and six minutes either side of the failing run. A deterministic regression is excluded; a rate change is not, and one failure could not establish one. Nothing quarantined. The container fault has no test to quarantine and the exit-126 note says a re-run is the correct response there. The chaos firing has no rate that rule 1 would accept, and docs/quarantined-tests.md is empty - which is the state to preserve. Co-Authored-By: Claude Opus <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD
|
Thanks - clean review, nothing to change. Merging. |
Serves #197, the release tracker. Closes nothing. The plan for the v6 announcement - the theme, the LinkedIn/blog/release-notes funnel, the points inventory, and the performance-claims decision ratified on 2026-08-24 with its amendment - had lived only on the language-proxy branch and the stacks cut from it since 2026-08-15. None of those branches merges before v6, so a release-scoping read of docs/inflight/ on master could not see that the announcement had a plan at all. It was found by diffing every live ref's notes against master. This lifts the largest version, from feats/hasten-micro-mvp, to docs/inflight/release-v6-announcement.md. The content is unchanged apart from em-dashes replaced with the repo's spaced dash; tags moved from feature-with-no-impact to task + release-gate, because writing the announcement is the last task of the release rather than a capability; a provenance paragraph saying where it came from and why it moved; and a file-refs: N/A marker on each paragraph citing a document that exists only on the source branches, naming the branch, so bin/check-file-refs.sh passes without pretending those documents are on master. The original stays on the branches that carry it - retiring it there is those branches' job when they next merge master, since a rename-on-merge would otherwise touch nine open PRs. QUALIFIED BY THE OWNER BEFORE IT LANDED, which is the part that changes how the note reads. It is an aggregate written when 0.6.0.0 was going to carry features, and 0.6.0.0 is now a bugs-only release (decision of 2026-09-07). The top of the note therefore says which of it applies to 0.6.0.0 - the theme, the ordering and the experimental-claims rule - and that the rest, Streams, Connect, the other runtimes, self-tuning, the polyglot positioning and the whole performance inventory, is material for 6.1. It also says once and up front that every performance figure in it was measured on the experimental engine branch it came from, whose engine differs substantially from master's, so none of those figures describes 0.6.0.0 and the claims decision reduces there to no performance claim at all. The note carries inflight-state: deferred to 6.1 accordingly; the plan itself is not rewritten, and the v6 scope note on #475 stays the source of truth for what ships. FOUR MASTER-STATE CI REDS WERE RECORDED ALONG THE WAY, because a docs-only branch is the cleanest control arm a flake register can get: nothing it draws can be its own. Two were recorded in the earlier rounds - a ChaosChurnStormIT NO_PROGRESS firing, and a RegistrationRaceStaleResidentIT one whose row master had already retired via #490, so the register takes master's side whole there. Two more arrived on 2026-09-09, and reading each one turned up a correction its note needed: Integration Tests went red with the whole broker suite erroring - one class slowly at the container-start timeout, every other in milliseconds on NoClassDefFoundError, which Codecov renders as "20 Tests Failed" and which ci-broker-container-exit-126-is-undiagnosable.md exists to say is one failure. The cause was in the log all along: Testcontainers prints the failed container's own output one line below the "Wait strategy failed" line that note quotes, and it reads "sh: /tmp/testcontainers_start.sh: Text file busy" - ETXTBSY, because the container waits for its starter script to exist and then executes it, so a script the daemon has not finished extracting execs as busy and the shell reports exit 126. Refetching the 2026-08-25 job the note was written from shows the identical two lines, so its premise that the container's stdout is nowhere in the job log was false of its own founding evidence. The re-run of the identical commit passed, which is the control that note prescribes. Chaos Pain Suite 4/4 went red on #495, also docs-only, with NO_PROGRESS at 96632/100000 against a 30s bound on seed 3717713223451201639. The fleet then kept consuming to 99569, taking the outstanding count from 3368 to 431 - inside the TAIL_SLACK of 500 - so it lands on the drains branch of the deciding experiment in test-no-progress-window-may-not-transfer-to-w1.md, in the weak form: no recovery diagnostic, and churn ended ten seconds after the firing. The larger finding is that this experiment had already been answered twice, on two other seeds, both draining, and that note never took delivery of either. The six merges that landed on master the same day were the obvious suspects and are ruled out by control arm rather than by argument: #491 does touch ProgressProbe.java, but not the NO_PROGRESS path, and the same chaos test passed on two heads carrying every one of those merges, minutes either side of the failing run. Both corrections are left as PROPOSED vetting markers rather than applied - both notes carry impact misdirection, which docs/inflight/AGENTS.md makes the owner's call. Nothing is quarantined and docs/quarantined-tests.md stays empty. Co-authored-by: Claude Opus (1M context) <noreply@anthropic.com>
…ut it (#475) 0.6.0.0 is a bugs-only stability release, and it is overdue: the fork has carried the fixes for upstream's most-reported defects for months while the release waited on features. This note is the source of truth for cutting it - the owner's decisions, the merge queue from those decisions to the tag, every open question, and the checks that make the published artefacts true on the day. #197 is the tracking handle and its body points here; nothing is maintained on the issue. THE DECISIONS, 2026-09-07 and confirmed since. The bar is the stability release and nothing else; Streams and Connect move to the next-0x horizon in the roadmap data; the producer-recovery stack is outside v6. The release claim carries two named exceptions rather than waiting on them: the transactional revoke wait (#44, bounded since #466, not yet declined) and, from 2026-09-09, the poisoned-transaction wedge, both in the transactional producer mode only. The merge queue closed on 2026-09-09; later finds are 0.6.0.x unless they are data loss on a default configuration. THE BURN-DOWN, recorded as each merge landed. Tier 1, the self-contained fixes, is complete: the last two to join were the batchSize bound (#496) and the gate-latch warning (#497), both decided v6-sized on the day the queue closed. Tier 3, the plumbing, has the changelog section finalised as the release notes and the claim amended (#498) and the release page body posted verbatim from CHANGELOG.md by release.yml (#501, closing #199); what remains is the tag-day checks, the drafted issue responses, and the tag. A can-follow list names what is deliberately not v6. WHAT THE RELEASE NOTE SAYS ABOUT THE confluentinc#857 FAMILY, each line with the PR that settled it: the revoke-path deadlock proven by control arm, the eager stall withdrawn as a timing bound that flips with the processor count, the fifth item measured as the consumer-group protocol under churn rather than PC, the poller death fixed, the instance-stall sightings classified as worker saturation from the load side. The intake stall #471 found has its verdict from #487: the record-intake load gate is what stops intake, head-of-line blocking is not why, and any instance that retries forever while a fraction of its stream never succeeds latches eventually at a computable threshold, idle or not. There is no gate fix; the fix bounds the failures (#149's dead-letter queue), and until then #497 makes the state visible. One arm stays unattributed and is named as such. DATA LOSS AND DUPLICATES: the bug-162 replay branch refuted and the false truncation warning fixed (#494, closing #162). KNOWN UNKNOWNS, split in two so nothing is papered over: what is still unknown at the cut - the shard half of the per-shard liveness blind spot, the flake rows kept open with reasons, the maturity claim - and, under its own heading, the unknowns made known on 2026-09-08 and how each was settled. TAG-DAY CHECKS, folded in from the retired blockers note: master green with the lanes known to lie named, the churn scenario's no-progress window settled by replay and widened in #499 with the rebalance-dwell bound named as that class's survivor, the Lincheck lane's timeout raised against runner-speed variance, the rename named in both groupId and packages, the README's trademark wording claiming nothing it does not have (#495), and the changelog section as the release notes since #498, posted as the release body by release.yml since #501. ONE CHANGELOG EDIT, on the owner's decision of 2026-09-10: the "size of this release" table of merged-PR and line counts is removed. Measured on a branch, carrying its own re-measure instruction, stale from the next merge on; the notes make their claim through the fixes they name. Also here: a ci- note from this PR's own last review round - the file-refs gate reads a token as a path only with two segments, so the changelog rename left this branch-only note naming the old file with nothing to go red, and the note records the allow-list that would close it; the vetting sweep's reading and every open bug note's disposition, moved into the ranking note where the tiers override them; a dated survey of upstream items with no fix and no response as its own deferred note; the refactoring registry's codec entry corrected for what #480 did and did not change; and the confluentinc#546 manifest entry marked merged. Two notes retired with their content migrated: the blockers register and the merge-order plan for a far larger v6. The question this note began as, "when is v6 good enough?", was answered on 2026-09-08 and the file renamed. Serves #197; closes nothing. The tracker closes when the tag is cut. Co-authored-by: Claude Fable 5.1 (1M context) <noreply@anthropic.com>
Serves the v6 burn-down on #475: a published artefact carried a false statement.
Description
The branding rename of 2026-08-11 added a Trademarks note at the top of the README, and the same sentence in the attribution section, saying KAFKA "has been licensed for use by Antony Stubbs and contributors". That is the Apache Software Foundation's boilerplate for parties that hold a formal trademark licence. No such licence exists. A product named "Parallel Consumer for Apache Kafka" is nominative use under the Foundation's third-party naming guidance - the full "Apache Kafka" on the most prominent mention, no implication of affiliation, and the standard attribution line, which the README already carried and keeps. Upstream's README never had the sentence.
Owner's call, 2026-09-09: say the true thing, once, at the bottom.
README.adocis regenerated fromsrc/docs/README_TEMPLATE.adocwith./mvnw -N asciidoc-template:build, never hand-edited; the diff to the rendered file is exactly the template change.Checklist
docs/features/- N/A - README wording, no featuredocs/inflight/working note (pr-/branch-) started at the PR's first commit - N/A - a one-commit wording fix fully described by the commit body; the tag-day checks in the v6 scope note will carry the rereadce-simplifyandce-code-reviewlocally - N/A - docs only🤖 Generated with Claude Code
https://claude.ai/code/session_01Xoi3HYae8pjsEatuNFKieD