diff --git a/CHANGELOG.md b/CHANGELOG.md index 0151b51..e8b890b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ Please choose versions by [Semantic Versioning](http://semver.org/). ## Unreleased +- fix: `license-assistant` Step 0 visibility detection — read the repo's own `isPrivate` flag via `gh repo view --json isPrivate` instead of inferring from the remote host. Host-based detection misclassifies private `Seibert-Data/*` repos hosted on `github.com` as public, causing MUST-tier LICENSE false positives that block merges org-wide (surfaced 2026-08 on Seibert-Data/moco#5). Matches `docs/go-licensing-guide.md` § Public vs Private and `scripts/rule-checks.sh`. + - feat: promote 2 m3 findings deepseek-verified as real into the golden set (`golden-curated-1` → `golden-curated-2`, 155 → 157 entries). `recurring-task-creator#30` — `make precommit` genuinely red (govulncheck reproduced GO-2026-6179/6180 against `golang.org/x/mod@v0.37.0`, neither in `VULNCHECK_IGNORE`); `discord-assistant#5` — `strip_wake_phrase` lstrip omits the apostrophe, so `"hey bot's weather"` becomes `"'s weather"` (reproduced exactly). These are the first entries backed by **two models' independent agreement** (m3 found, deepseek verified with runnable evidence) rather than a single model's opinion — the evidence class the golden-set design has always specified for promotion. Two other deepseek-verified candidates (unbounded `uncaughtException` swallow, supervise orphan) were dropped: the aliasing check showed they were re-statements of entries the set already held, so promoting them would have double-counted. Net effect on scores vs `golden-curated-1`: m3 recall 0.052 → 0.066, deepseek 0.096 → 0.109, opus self-match 0.844 → 0.832 (new entries are findings opus missed — the tautology loosening, as intended) ## v0.43.3 diff --git a/agents/license-assistant.md b/agents/license-assistant.md index c5482fa..784a2bc 100644 --- a/agents/license-assistant.md +++ b/agents/license-assistant.md @@ -23,10 +23,10 @@ You are a license management specialist. Ensure consistent licensing across all License requirements only apply to **public** repositories. Skip all checks for private/internal repos. -**Detection rules:** -- `git remote -v` contains `github.com` → **public** → continue -- `git remote -v` contains `bitbucket.seibert.tools` or other internal hosting → **private** → report "No licensing required for internal repos" and STOP -- No remote → assume public, continue +**Detection rules (authoritative signal is the repo's own visibility flag, NOT the host):** +- Read the flag: `gh repo view --json isPrivate -q .isPrivate` → `false` = **public** → continue; `true` = **private** → report "No licensing required for private repos" and STOP. +- **Do NOT infer visibility from the host.** `github.com` no longer means public — the Octopus migration moved 73 private `Seibert-Data` repos onto `github.com`; host-based detection misclassifies nearly every private repo as public and causes MUST-tier false positives that block merges org-wide. `bitbucket.seibert.tools` hosting also no longer implies private — always check the flag. +- Visibility cannot be determined (no `gh`, no remote, offline, not a repo) → **do not fire** any licensing rule. These are MUST-tier rules; a false positive blocks every PR in the org, while a missed finding on a public repo is caught at the next review. ### Step 1: Detect Project Type