Skip to content

Depersonalize the public repo: drop internal workflow docs, tracker IDs, and session-specific comments - #11

Merged
jayzuccarelli merged 3 commits into
mainfrom
fix/depersonalize-tv-test
Aug 8, 2026
Merged

Depersonalize the public repo: drop internal workflow docs, tracker IDs, and session-specific comments#11
jayzuccarelli merged 3 commits into
mainfrom
fix/depersonalize-tv-test

Conversation

@jayzuccarelli

@jayzuccarelli jayzuccarelli commented Aug 8, 2026

Copy link
Copy Markdown
Owner

Supersedes #6 (same two commits, rebased onto current main, plus one more).

Why

The repo is public but read as a personal work log: it carried an agent-instructions file written in the third person about the owner, private tracker IDs, and code comments describing one specific listening session at home.

No secrets were exposed. Checked the full tree and history for credentials, API keys, LAN IPs, Tailscale hostnames, and personal paths: none present. Every key is read from the environment, and secrets.yaml is gitignored.

Changes

  1. CLAUDE.md deleted from the tree and gitignored. It was 11 lines of pure issue-tracker workflow naming the team, the project, and the owner personally, with zero repo-technical content. The local copy survives for agent use.
  2. Internal tracker IDs in broker comments and docstrings now name the behavior ("turn hygiene") instead of a private issue key.
  3. The three "TV test" comments now describe the general failure class (background TV speech false-accepts; ghost turns after a mid-utterance disconnect) rather than one dated session in one room.
  4. ESPHome firmware YAML attribution: firmware/voice_pe_dual.yaml derives from esphome/home-assistant-voice-pe, so the ESPHome license text is vendored and NOTICE.md scoped accordingly.

Verification

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation
    • Clarified project, firmware, configuration, reliability, testing, and troubleshooting documentation.
    • Updated wording and formatting for improved consistency and readability.
    • Added details about firmware licensing, attribution, source, and routing.
    • Clarified session rotation, crash causes, barge-in behavior, and playback diagnostics.
  • Legal
    • Added the applicable ESPHome license text and expanded third-party attribution notices.
  • Maintenance
    • Updated firmware component ownership metadata. No functional behavior changed.

jayzuccarelli and others added 3 commits August 8, 2026 03:49
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.
…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.
The three remaining comments described a specific listening session in a
specific room, with wall-clock timestamps. The behavior they document is
general: background TV speech false-accepts, and ghost turns after a
mid-utterance disconnect. Describe the class, not the session.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The pull request removes local runbook guidance, updates repository and firmware documentation, adds the ESPHome license text, and changes firmware component ownership metadata. Runtime behavior and build commands remain unchanged.

Changes

Documentation and attribution cleanup

Layer / File(s) Summary
Firmware attribution and licensing
NOTICE.md, firmware/LICENSE.esphome, firmware/voice_pe_dual.yaml, firmware/components/voice_assistant_websocket/...
Adds ESPHome licensing and attribution details. Updates firmware source comments, component author metadata, and code ownership.
Broker documentation and diagnostics
broker/...
Revises broker comments, docstrings, diagnostic text, and test descriptions. No executable logic changes.
Repository and firmware documentation
.gitignore, Makefile, README.md, firmware/...
Normalizes punctuation, updates displayed defaults, removes the local CLAUDE.md file, and revises firmware documentation and error text.

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
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.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main changes: removing Linear workflow references, tracker IDs, and session-specific comments from the public repository.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/depersonalize-tv-test

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.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (1)
.gitignore (1)

18-19: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Scope the CLAUDE.md ignore rule to the intended location.

CLAUDE.md without a slash matches files with that name in every directory. If this change only removes the repository-root runbook, use /CLAUDE.md; otherwise a nested project document can be silently excluded from version control.

Proposed fix for a repository-root-only rule
-CLAUDE.md
+/CLAUDE.md
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.gitignore around lines 18 - 19, Scope the CLAUDE.md entry in .gitignore to
the repository root by adding the leading slash, so nested CLAUDE.md files
remain trackable.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@broker/realtime_broker/server.py`:
- Around line 214-216: Remove session-specific experiment evidence from broker
comments: in broker/realtime_broker/server.py lines 214-216, update the
reset_vad docstring to use behavior-based wording without the dated soak result
or quoted response; in lines 722-726, remove the captured “Bye.” and “I'm here
when you're ready” outputs from the disconnect comment while preserving its
general behavioral description.

In `@broker/tools/harness.py`:
- Line 238: Replace the repository-specific “fjfricke `#9` bug” comment beside the
fresh connection in session(url) with a behavior-based reconnect-regression
description. In broker/tools/test_rotation.py lines 3-5, remove the
“fjfricke/ha-openai-realtime#8” reference while retaining the session-expiry
behavior description.

In `@firmware/README.md`:
- Line 39: Update the status description in the firmware README to replace the
comma-spliced room-noise limitation, broker mitigation, and device-side
beamforming roadmap details with separate sentences, preserving all three pieces
of information and their meaning.

---

Nitpick comments:
In @.gitignore:
- Around line 18-19: Scope the CLAUDE.md entry in .gitignore to the repository
root by adding the leading slash, so nested CLAUDE.md files remain trackable.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 6ca1c547-9813-42cd-8e10-76f53084d536

📥 Commits

Reviewing files that changed from the base of the PR and between 7855b06 and 806e141.

📒 Files selected for processing (27)
  • .gitignore
  • CLAUDE.md
  • Makefile
  • NOTICE.md
  • README.md
  • broker/.env.example
  • broker/Makefile
  • broker/realtime_broker/agent.py
  • broker/realtime_broker/config.py
  • broker/realtime_broker/server.py
  • broker/requirements.txt
  • broker/tools/harness.py
  • broker/tools/hook_check.py
  • broker/tools/m2_analyze.py
  • broker/tools/m2_capture.py
  • broker/tools/m2_play_ref.py
  • broker/tools/test_bargein.py
  • broker/tools/test_client.py
  • broker/tools/test_rotation.py
  • firmware/CRASH_ANALYSIS.md
  • firmware/LICENSE.esphome
  • firmware/README.md
  • firmware/components/voice_assistant_websocket/.esphome_component.yml
  • firmware/components/voice_assistant_websocket/__init__.py
  • firmware/flash.sh
  • firmware/secrets.yaml.example
  • firmware/voice_pe_dual.yaml
💤 Files with no reviewable changes (1)
  • CLAUDE.md

Comment on lines 214 to 216
auto-creates a response. The model greets the ghost turn ("I'm here
when you're ready"; soak 2026-07-02, 5/5 then 2/6 with a delayed
clear alone). Disabling turn detection makes the server drop the

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Remove session-specific diagnostic evidence from public broker comments.

Both locations retain run-specific results or captured assistant utterances. Use behavior-based wording and keep experiment evidence in internal test records.

  • broker/realtime_broker/server.py#L214-L216: Remove the dated soak result and quoted response from the reset_vad docstring.
  • broker/realtime_broker/server.py#L722-L726: Remove the captured "Bye." and "I'm here when you're ready" output from the disconnect comment.
📍 Affects 1 file
  • broker/realtime_broker/server.py#L214-L216 (this comment)
  • broker/realtime_broker/server.py#L722-L726
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@broker/realtime_broker/server.py` around lines 214 - 216, Remove
session-specific experiment evidence from broker comments: in
broker/realtime_broker/server.py lines 214-216, update the reset_vad docstring
to use behavior-based wording without the dated soak result or quoted response;
in lines 722-726, remove the captured “Bye.” and “I'm here when you're ready”
outputs from the disconnect comment while preserving its general behavioral
description.

Comment thread broker/tools/harness.py
if not r1.got_audio:
return False, "first session got no audio", r1.first_audio_ms
async with session(url) as c: # fresh connection the fjfricke #9 bug
async with session(url) as c: # fresh connection, the fjfricke #9 bug

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Remove the remaining author and issue references.

These changed comments still publish repository-specific issue references. Replace them with behavior-based descriptions.

  • broker/tools/harness.py#L238-L238: replace fjfricke chore: drop internal codename from check.py #9 bug with a reconnect-regression description.
  • broker/tools/test_rotation.py#L3-L5: remove fjfricke/ha-openai-realtime#8 and retain the session-expiry behavior description.

This conflicts with the PR objective to remove private tracker IDs and session-specific comments.

📍 Affects 2 files
  • broker/tools/harness.py#L238-L238 (this comment)
  • broker/tools/test_rotation.py#L3-L5
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@broker/tools/harness.py` at line 238, Replace the repository-specific
“fjfricke `#9` bug” comment beside the fresh connection in session(url) with a
behavior-based reconnect-regression description. In
broker/tools/test_rotation.py lines 3-5, remove the
“fjfricke/ha-openai-realtime#8” reference while retaining the session-expiry
behavior description.

Comment thread firmware/README.md
## Status

Compiles clean (`firmware.factory.bin`) and runs on-device. Known limitation: the far-field mic captures the whole room, so in a loud room the assistant can pick up a TV or another speaker the broker mitigates this with the `wait_for_user` gate, and device-side beamforming (tapping the XMOS focused channel) is on the roadmap.
Compiles clean (`firmware.factory.bin`) and runs on-device. Known limitation: the far-field mic captures the whole room, so in a loud room the assistant can pick up a TV or another speaker, the broker mitigates this with the `wait_for_user` gate, and device-side beamforming (tapping the XMOS focused channel) is on the roadmap.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Split the comma-spliced status description.

Line 39 joins the room-noise limitation, broker mitigation, and roadmap item with commas. Use separate sentences so each behavior remains clear.

Proposed wording
-Compiles clean (`firmware.factory.bin`) and runs on-device. Known limitation: the far-field mic captures the whole room, so in a loud room the assistant can pick up a TV or another speaker, the broker mitigates this with the `wait_for_user` gate, and device-side beamforming (tapping the XMOS focused channel) is on the roadmap.
+Compiles clean (`firmware.factory.bin`) and runs on-device. Known limitation: the far-field mic captures the whole room. In a loud room, the assistant can pick up a TV or another speaker. The broker mitigates this with the `wait_for_user` gate. Device-side beamforming (tapping the XMOS focused channel) is on the roadmap.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Compiles clean (`firmware.factory.bin`) and runs on-device. Known limitation: the far-field mic captures the whole room, so in a loud room the assistant can pick up a TV or another speaker, the broker mitigates this with the `wait_for_user` gate, and device-side beamforming (tapping the XMOS focused channel) is on the roadmap.
Compiles clean (`firmware.factory.bin`) and runs on-device. Known limitation: the far-field mic captures the whole room. In a loud room, the assistant can pick up a TV or another speaker. The broker mitigates this with the `wait_for_user` gate. Device-side beamforming (tapping the XMOS focused channel) is on the roadmap.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@firmware/README.md` at line 39, Update the status description in the firmware
README to replace the comma-spliced room-noise limitation, broker mitigation,
and device-side beamforming roadmap details with separate sentences, preserving
all three pieces of information and their meaning.

@jayzuccarelli
jayzuccarelli merged commit 69e5dd7 into main Aug 8, 2026
3 checks passed
@jayzuccarelli
jayzuccarelli deleted the fix/depersonalize-tv-test branch August 8, 2026 04:03
@jayzuccarelli jayzuccarelli changed the title Depersonalize the public repo: drop Linear workflow, tracker IDs, and session-specific comments Depersonalize the public repo: drop internal workflow docs, tracker IDs, and session-specific comments Aug 11, 2026
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