Tracking the Codex findings deferred from #2 (merged as 86f5fe0). Fork-only — none of these are upstream-bound.
Disposition recorded at merge: P1 #1 (fork-ci validate job missing sync/* guard) was fixed in 3e08a42. The items below were consciously deferred.
P1 — address before the sync lane is first exercised
P2 — fix eventually, non-blocking
Source: Codex review on #2.
Migration source: PLA-75
Linear status at cutover: Backlog
Cut over to GitHub on 2026-07-22.
Tracking the Codex findings deferred from #2 (merged as
86f5fe0). Fork-only — none of these are upstream-bound.Disposition recorded at merge: P1 #1 (fork-ci
validatejob missing sync/* guard) was fixed in3e08a42. The items below were consciously deferred.P1 — address before the sync lane is first exercised
fork-sync-advisory.yml:15— upstreamvalidate.ymlnot guarded for sync/*Upstream-owned
validate.ymlfires HACS/hassfest on every PR tomainwith nosync/*guard, sosync/*PRs get red checks from it regardless of the advisory workflow'scontinue-on-error. Direct fix = editing upstream-ownedvalidate.yml(out of scope for the fork-only Phase 1 PR). Mitigated in practice: auto-merge is OFF and sync policy is already "fail = investigate, typically still merge," so it's advisory-not-blocking. Decide the approach (guard upstream file vs. branch-protection exclusion vs. accept) when the firstsync/upstream-*PR lands. (thread)P2 — fix eventually, non-blocking
fork-claude.yml:19— issue_comment head_ref gate. Onissue_commentevents the PR marker is undergithub.event.issue.pull_request, notgithub.event.pull_request; the sync-branch exclusion evaluates against an empty value, so@claudecomments could run the write-permission job onsync/*PRs. Resolve the PR head ref before allowing the job. (thread).github/dependabot.yml:4— pip ecosystem, no manifest. No rootrequirements.txt/pyproject.toml/Pipfile/setup.py, so the pip update entry has nothing to update and Dependabot will report a config error. Add a real manifest or drop the pip block until one exists. (thread)SECURITY.md:7— public-disclosure routing. Tells reporters to open a normal (public) issue; a report with a token/auth-bypass/PII detail would disclose before a fix. Route through GitHub private vulnerability reporting or a security email. (thread).claude/commands/sync-upstream.md:20— sync branch base.git checkout -b sync/upstream-...from the current branch can fold unrelated fork work into the sync PR. Check out and fast-forwardmainbefore creating the sync branch. (thread).claude/commands/fix-review.md:15— autosquash prefix./shipusesgit rebase -i --autosquash, which only foldssquash!/fixup!commits;/fix-reviewcreatesfix({scope})...commits that won't be folded. Use fixup-style commits. (thread).claude/commands/self-review.md:8— ruff--fixmutates tree. Step is labeled read-only ("do not auto-fix") butruff check --fixrewrites files. Useruff check .or--diff. (thread).claude/commands/sync-upstream.md:9— upstream remote check. Greps all ofgit remote -vforbolagnaise; a clone whoseoriginalready points at upstream skips adding theupstreamremote, then fails atgit fetch upstream main. Usegit remote get-url upstreaminstead. (thread)CLAUDE.md:2— missingENGINEERING_CONSTITUTION.md.@ENGINEERING_CONSTITUTION.mdis imported and referenced but the file doesn't exist; governance guidance is unresolvable in sessions using this entry point. Add the file or remove the reference. (thread)Source: Codex review on #2.
Migration source: PLA-75
Linear status at cutover:
BacklogCut over to GitHub on 2026-07-22.