Skip to content

feat(labels): estate label tooling + auto-triage for new issues - #56

Open
hyperpolymath wants to merge 1 commit into
mainfrom
automated/label-tooling
Open

feat(labels): estate label tooling + auto-triage for new issues#56
hyperpolymath wants to merge 1 commit into
mainfrom
automated/label-tooling

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

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.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 none.

See docs/LABELS.adoc in hyperpolymath/.git-private-farm.

🤖 Generated with Claude Code

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>
@coderabbitai

coderabbitai Bot commented Aug 27, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 12 minutes.

View limit details

Limit 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.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: bce98040-369a-4501-b7a8-ee1cfda16bbe

📥 Commits

Reviewing files that changed from the base of the PR and between cc21a80 and c3a2cdb.

⛔ Files ignored due to path filters (1)
  • .github/workflows/actions.lock is excluded by !**/*.lock
📒 Files selected for processing (5)
  • .github/label-classifier.json
  • .github/labels.json
  • .github/scripts/classify-issue.jq
  • .github/workflows/label-triage.yml
  • .github/workflows/labels.yml

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.

@codacy-production

Copy link
Copy Markdown

Up to standards ✅

🟢 Issues 0 issues

Results:
0 new issues

View in Codacy

AI Reviewer: first review requested successfully. AI can make mistakes. Always validate suggestions.

Run reviewer

TIP This summary will be updated as you push new changes.

@gitar-bot

gitar-bot Bot commented Aug 27, 2026

Copy link
Copy Markdown

Important

You are using the Gitar free plan. Upgrade to unlock code review, CI analysis, auto-apply, custom automations, and more.

Gitar

@codacy-production codacy-production 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.

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")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚪ 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}')

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚪ 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.

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