Skip to content

Attribute the ESPHome firmware YAML; drop internal references - #6

Closed
jayzuccarelli wants to merge 2 commits into
mainfrom
fix/attribution-and-copy
Closed

Attribute the ESPHome firmware YAML; drop internal references#6
jayzuccarelli wants to merge 2 commits into
mainfrom
fix/attribution-and-copy

Conversation

@jayzuccarelli

@jayzuccarelli jayzuccarelli commented Jul 20, 2026

Copy link
Copy Markdown
Owner

Pre-announce verification pass.

1. Unattributed copy of upstream ESPHome firmware (the real one)

firmware/voice_pe_dual.yaml is a near-verbatim derivative of esphome/home-assistant-voice-pe's home-assistant-voice.yaml. The fingerprint is upstream's own typo, present at line 17 in both:

# Change this to true in case you ahve a hidden SSID at home.

No ESPHome copyright appeared anywhere in the repo, and NOTICE.md never mentioned the YAML at all. ESPHome's license applies MIT terms to non-C++ files (the GPLv3 half covers .c/.cpp/.h/.hpp/.tcc/.ino), and MIT requires the copyright notice be preserved.

Added a header naming upstream and Copyright (c) 2019 ESPHome, plus a NOTICE.md entry. Fixed the inherited typo while I was there.

This is the single finding most likely to become a public "you copied this without credit" thread, and it cost ten minutes.

Good news on the GPL question: there is no contamination. The GPLv3 voice_kit C++ is pulled at compile time via external_components, never vendored, and *.bin is gitignored. MIT-at-root is correct. The problem was attribution, not compatibility.

2. A flagged issue that turned out to be a non-issue

The vendored component's LICENSE reads Copyright (c) 2024-2025 with no holder name, which looks like the name was stripped. It wasn't: upstream fjfricke/ha-openai-realtime's own LICENSE reads exactly the same. Our copy is faithful and NOTICE.md's claim that the copyright is preserved is accurate. Left alone.

3. Implied OpenAI endorsement

.esphome_component.yml declared author: OpenAI Realtime Voice Agent and __init__.py had CODEOWNERS = ["@openai-realtime-voice-agent"], a handle that doesn't exist. Both read as OpenAI having authored a project that merely calls their API. Now jayzuccarelli.

4. Internal references

  • .gitignore carried a comment advertising a withheld internal document. Verified it was never committed, so nothing leaked, but the comment invites the question. Removed.
  • Internal tracker IDs in broker comments now name the behavior ("turn hygiene").
  • CLAUDE.md was 11 lines of internal issue-tracker workflow with zero repo-technical content. Untracked and gitignored so the local copy survives.
  • Softened a comment calling out a bug in fjfricke's project by name, since NOTICE.md credits it as the original proof-of-concept.

5. Em-dashes, and two they broke

104 removed. Two needed repair afterwards, both caught by auditing rather than assuming:

  • Three README table cells where the em-dash was the value (meaning "no default"), leaving | `OPENAI_API_KEY` |, | required |. Now none.
  • The harness latency column printed a bare , for scenarios with no first-audio measurement. Now n/a.

Verification: 10/10 against a live broker

Ran the real harness against an isolated broker on :8766, which by design leaves the live puck on :8765 untouched (confirmed: it stayed up throughout).

[PASS] capital_qa            201ms 1st-audio   reply='the capital of france is paris.'
[PASS] follow_up_multiturn   2ms 1st-audio
[PASS] weather_ha_tool       239ms 1st-audio   (HA MCP tool call worked)
[PASS] no_reply_to_silence   audio_after_silence=0.0s
[PASS] no_ghost_on_connect   ghost_audio=0.0s
[PASS] reconnect             0ms 1st-audio
[PASS] background_rejection  bg_reply=0.0s
[PASS] challenge_follow_up   126ms  "yes, i'm quite sure. paris is indeed the capital of france."
[PASS] tv_line_after_answer  tv_reply=0.0s
[PASS] mid_speech_disconnect 184ms 1st-audio

10/10 scenarios passed
first-audio latency: p50=155ms  p95=201ms  n=6

This matters beyond a green check: the em-dash sweep touched two model-facing prompt strings in the tuned follow-up-bias instructions. challenge_follow_up is the scenario that exercises exactly that behavior, and it passed. The README's "10 scenarios" and reliability claims are independently confirmed.

Clean

No secrets in the tree or across all 57 commits. No employer references anywhere, so no conflict surface despite this being a voice-assistant project. No audio or transcript fixture was ever committed.

Summary by CodeRabbit

  • Documentation

    • Refined README, firmware guides, crash analysis, and attribution notices for clarity and consistency.
    • Added attribution and usage context for the dual-mode voice firmware configuration.
    • Clarified broker behavior, edge cases, diagnostics, and test scenarios.
    • Updated configuration examples and status/roadmap wording.
  • Chores

    • Updated repository metadata and local documentation ignore rules.
    • Corrected ownership and author metadata for the voice assistant component.
    • Improved a few command-line messages, including clearer unavailable-latency and no-audio output.

Pre-announce pass.

Attribution. firmware/voice_pe_dual.yaml is a near-verbatim derivative of
esphome/home-assistant-voice-pe's home-assistant-voice.yaml, including
upstream's "in case you ahve a hidden SSID" typo at line 17, which is the
fingerprint. No ESPHome copyright appeared anywhere in the repo, and
NOTICE.md never disclosed the YAML was copied at all. The ESPHome License
applies MIT terms to non-C++ files, and MIT requires the copyright notice
be preserved. Added a header to the YAML naming upstream and the 2019
ESPHome copyright, plus a NOTICE.md entry. Fixed the inherited typo.

This is the finding most likely to become a public "you copied this
without credit" thread, and it was a ten-minute fix.

Not changed, because the audit that flagged it was wrong: the vendored
component LICENSE reads "Copyright (c) 2024-2025" with no holder, which
looked like a stripped name. Upstream fjfricke/ha-openai-realtime's own
LICENSE reads exactly the same. Our copy is faithful and NOTICE.md's
claim that the copyright is preserved is accurate.

False endorsement. .esphome_component.yml declared "author: OpenAI
Realtime Voice Agent" and CODEOWNERS pointed at @openai-realtime-voice-
agent, a handle that doesn't exist. Both read as OpenAI authorship of a
project that merely calls their API. Now jayzuccarelli.

Internal references. .gitignore carried "# internal ops runbook (not for
public repo)", advertising a withheld document (never committed, verified).
JAY-84 tracker IDs in broker comments now name the behavior. CLAUDE.md was
11 lines of pure Linear workflow naming the team, the project, and me
personally, with no repo-technical content worth keeping: untracked and
gitignored so it stays local.

Softened a comment that called out a bug in fjfricke's project by name,
since NOTICE.md credits it as the original proof-of-concept.

Em-dashes: 104 removed. Repaired three README table cells where the
em-dash was the cell VALUE ("no default") and became a stray comma, and
the harness latency column, which printed a bare "," for scenarios with
no first-audio measurement. Now "n/a".

Verified against a live isolated broker on :8766, which leaves the live
puck on :8765 alone: 10/10 scenarios passed, first-audio p50 155ms,
p95 201ms. challenge_follow_up passed, which exercises the follow-up-bias
prompt string this commit edits.
@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c8995641-d517-4d7f-b670-dd99b7c73b20

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Documentation and metadata were revised across the repository, broker, tooling, and firmware areas. Changes cover wording, punctuation, attribution, ignore rules, displayed messages, ownership metadata, and explanatory comments; runtime logic and configuration behavior remain unchanged.

Changes

Documentation and metadata refresh

Layer / File(s) Summary
Repository documentation and attribution
.gitignore, NOTICE.md, README.md
Ignore rules, attribution text, README wording, and configuration placeholders were updated.
Broker guidance and lifecycle comments
broker/realtime_broker/*
Comments and docstrings were clarified across audio handling, turn hygiene, connection watching, pipeline placement, and session teardown.
Tooling documentation and output text
broker/tools/*
Tool descriptions, comments, error messages, verdict output, and latency display text were revised.
Firmware documentation and ownership metadata
firmware/*, firmware/components/voice_assistant_websocket/*
Firmware documentation, provenance comments, component author metadata, and code ownership were updated.

Estimated code review effort: 2 (Simple) | ~10 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 29.41% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main changes: attributing the ESPHome-derived firmware YAML and removing internal references.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/attribution-and-copy

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@jayzuccarelli

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@jayzuccarelli

Copy link
Copy Markdown
Owner Author

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.


Your plan includes PR reviews subject to rate limits. More reviews will be available in 53 minutes.

…ong build

The attribution this branch added was half of what MIT asks for. MIT
requires the copyright notice AND the permission notice; only the
copyright line was here, and no ESPHome license text existed anywhere in
the tree. The repo already showed the right pattern one directory over,
where the fjfricke component ships a verbatim LICENSE beside the code it
covers. ESPHome now gets the same treatment in firmware/LICENSE.esphome,
fetched from upstream, with the YAML header and NOTICE.md pointing at it.

The header also described firmware that isn't this one. It claimed a
dual-mode path streaming to the broker 'alongside the stock Assist
pipeline'. The file sets use_wake_word: false and routes its single wake
word straight to the broker; its own models block says so, and
firmware/README.md agrees v1 is single-wake, with dual mode archived at
tag dual-2wake-v0. Reasserting the archived behavior in the one file whose
header now carries licensing weight was the wrong place to be wrong.

Four comments in server.py had been left as dangling trailing colons where
the sweep hit paired em-dashes; lines 661 and 662 were two halves of one
sentence and no longer parsed. Restored from the pre-sweep text.

Two of the sweep's replacements landed in live model instructions in
agent.py, where a comma splice weakened an imperative the em-dash had been
holding open. Both are now sentence boundaries.

The sweep had also missed nine files, including .env.example, which
carries the same sentence as README and config.py and so read differently
from both. Repo-wide em-dash count is now zero.

Also folded SUNDAY_RUNBOOK.md in with the other local-notes ignores; the
filename alone still advertised a withheld document.

ruff clean on broker/realtime_broker, all changed Python compiles, the
firmware YAML still parses.
@jayzuccarelli

Copy link
Copy Markdown
Owner Author

Superseded by #11: same commits rebased onto current main, plus the TV-test comment cleanup.

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