feat(labels): estate label tooling + auto-triage for new issues - #56
feat(labels): estate label tooling + auto-triage for new issues#56hyperpolymath wants to merge 1 commit into
Conversation
Ships the canonical label set and the classifier that labels newly-filed issues. Additive only: it never removes a label, never overrides a human's classification, stays silent when unsure, and never fails an issue. Also adds this repo's two new workflows to .github/workflows/actions.lock as '[]'. That lock is keyed by workflow path and refuses any workflow it does not list -- a startup_failure, which produces no check run and is therefore silent. `gh actions-lock` cannot add these: it records action versions, and both workflows deliberately use no actions. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Warning Review limit reachedNext included review available in 12 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (5)
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. Comment |
Up to standards ✅🟢 Issues
|
There was a problem hiding this comment.
Pull Request Overview
The PR implements a label taxonomy and automated triage system using native GitHub CLI and JQ, successfully adhering to the constraint of avoiding external GitHub Actions to prevent lockfile drift. While Codacy reports the changes are up to standards, there is a critical discrepancy: the PR description mentions a test suite (tests/test-classifier-parity.py) and lockfile updates that are missing from the current diff.
The classification logic implemented in JQ is sophisticated, covering conventional commits and tier constraints, but it is currently unverified within the codebase. Furthermore, the label synchronization workflow contains an inefficiency that causes unnecessary delays during no-op runs. These missing verification scripts and workflow optimizations should be addressed before merging.
About this PR
- The PR description references a test suite (
tests/test-classifier-parity.py) and lockfile updates, but these files are not included in the PR. Please ensure all intended assets are committed. - The complex JQ classification logic lacks accompanying verification scripts. Without the 'test-classifier-parity.py' mentioned in the description, there is no automated way to ensure classification accuracy or adherence to tier constraints.
Test suggestions
- Classification via conventional commit prefix (e.g., 'feat: ...')
- Classification via bracket tags (e.g., '[p0] ...')
- Area assignment from title keywords (e.g., 'z3' triggering 'proofs')
- Mandatory 'type' label enforcement logic
- Prevention of multiple labels within a max-1 tier (tier_max: 1)
- Preservation of existing human-applied labels during triage
- Idempotent label synchronization (creation of missing labels)
- Protection of 'frozen' label definitions during sync
Prompt proposal for missing tests
Consider implementing these tests if applicable:
1. Classification via conventional commit prefix (e.g., 'feat: ...')
2. Classification via bracket tags (e.g., '[p0] ...')
3. Area assignment from title keywords (e.g., 'z3' triggering 'proofs')
4. Mandatory 'type' label enforcement logic
5. Prevention of multiple labels within a max-1 tier (tier_max: 1)
6. Preservation of existing human-applied labels during triage
7. Idempotent label synchronization (creation of missing labels)
8. Protection of 'frozen' label definitions during sync
TIP Improve review quality by adding custom instructions
TIP How was this review? Give us feedback
| fi | ||
| fi | ||
| sleep 0.4 | ||
| done < <(jq -r '.labels[] | [.name, .color, .description] | @tsv' "$PAYLOAD") |
There was a problem hiding this comment.
⚪ LOW RISK
Suggestion: Move the sleep 0.4 call inside the if blocks for gh label create and gh label edit. Currently, it executes for every label defined in the taxonomy, causing significant mandatory delay even when labels are already perfectly synced. Relocating it ensures the workflow only waits when a mutation occurs, respecting secondary rate limits without wasting time on skipped labels.
| frozen=0 | ||
| for f in "${FROZEN[@]}"; do [ "$f" = "$name" ] && frozen=1 && break; done | ||
|
|
||
| cur=$(printf '%s\n' "$existing" | awk -F'\t' -v n="$name" '$1==n{print;exit}') |
There was a problem hiding this comment.
⚪ LOW RISK
Nitpick: Use printf -- '%s\n' "$existing" to safely handle strings that might start with a hyphen, preventing the shell from interpreting the value as a command flag.
Ships the canonical label set and the classifier that labels newly-filed issues.
Additive only — never removes a label, never overrides a human's classification, silent when unsure, never fails an issue.
Also adds this repo's two new workflows to
.github/workflows/actions.lockas[]. That lock is keyed by workflow path and refuses any workflow it does not list — astartup_failure, which produces no check run and is therefore silent.gh actions-lockcannot add these: it records action versions, and both workflows deliberately use none.See
docs/LABELS.adocin hyperpolymath/.git-private-farm.🤖 Generated with Claude Code