Skip to content

Use repository labels for work-queue Issue status - #67223

Merged
pelikhan merged 6 commits into
mainfrom
copilot/configure-work-queue-labels
Oct 9, 2026
Merged

pelikhan merged 6 commits into
mainfrom
copilot/configure-work-queue-labels

Conversation

Copilot AI commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Organization-level Issue fields may be unavailable to a repository, leaving work-queue status unsynchronized. This PR proposes repository labels as the status projection instead.

  • Projection: Apply one status label per Issue, such as work: Queued or work: Running, using GraphQL. Replace only work-queue status labels; preserve unrelated labels.
  • Labels: Create labels as needed and assign purple (#7057FF) to work-queue labels.
  • Configuration: Remove status-field. issues: true uses work; issues: {label: cookie} uses labels such as cookie: Queued.
  • Documentation and coverage: Update the configuration reference and projection tests.

Copilot AI and others added 2 commits October 9, 2026 15:14
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title Project work-queue Issue status with purple repository labels Use repository labels for work-queue Issue status Oct 9, 2026
Copilot AI requested a review from pelikhan October 9, 2026 15:18
@pelikhan
pelikhan marked this pull request as ready for review October 9, 2026 15:20
Copilot AI balanced review requested due to automatic review settings October 9, 2026 15:20

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

Label-length validation, concurrent provisioning, mutation pacing, and breaking-change release metadata must be corrected.

7 open findings
What changed in this PR

Replaces work-queue Issue status fields with repository status labels.

Changes:

  • Projects statuses through purple <prefix>: <status> labels.
  • Removes status-field configuration.
  • Updates tests, schemas, and documentation.
File Description
pkg/​workflow/​work_queue_issues.go Removes status-field configuration.
pkg/​workflow/​work_queue_issues_test.go Updates configuration and compilation tests.
pkg/​parser/​schemas/​main_workflow_schema.json Updates the Issue projection schema.
actions/​setup/​js/​work_queue_issues.cjs Implements status-label synchronization.
actions/​setup/​js/​work_queue_issue_api.cjs Adds label discovery and provisioning.
actions/​setup/​js/​work_queue_issue_messages.cjs Always includes status in summaries.
actions/​setup/​js/​work_queue_issues_checks.cjs Tests label replacement and provisioning.
actions/​setup/​js/​work_queue_issues_acceptance_checks.cjs Updates acceptance coverage and metrics.
docs/​src/​content/​docs/​reference/​work-queue.md Documents label-based projection.
docs/​src/​content/​docs/​reference/​frontmatter-full.md Removes the deprecated field example.
docs/​src/​content/​docs/​guides/​deploy-work-queue.md Updates deployment guidance.
docs/​src/​content/​docs/​specs/​work-queue-specification.md Updates implementation evidence.
.github/​aw/​work-queue.md Updates the work-queue design description.

🧠 Review effort: Balanced

Comment on lines +44 to +46
const response = await github.graphql("query WorkQueueStatusLabel($repositoryId:ID!,$name:String!) { node(id:$repositoryId) { ... on Repository { id label(name:$name) { id name color } } } }", { repositoryId, name });
if (response?.node?.id !== repositoryId) throw queueError("projection_label_pending", "status label target is inaccessible");
return ensureLabel(github, repositoryId, response.node.label, name);

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Implemented duplicate-label recovery: on an already-taken response, the projector re-queries the status label and verifies/recolors it. Added a concurrent provisioning test. Fixed in 3664808.

Comment thread actions/setup/js/work_queue_issues.cjs Outdated
if (obsolete.length)
edits.push({
key: target.work_id,
name: "removeLabelsFromLabelable",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added removeLabelsFromLabelable to mutation cost calculation and a test charging a 50-removal batch. Fixed in 3664808.

"properties": {
"label": { "type": "string", "minLength": 1, "maxLength": 256, "pattern": "\\S", "default": "work" },
"status-field": { "type": "string", "minLength": 1, "maxLength": 256, "pattern": "\\S", "description": "Pre-provisioned native organization single-select field. Omit for comment-only status." }
"label": { "type": "string", "minLength": 1, "maxLength": 239, "pattern": "\\S", "default": "work" }

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Tightened the schema prefix maximum to 33 and documented the GitHub label-length constraint. Fixed in 3664808.

type WorkQueueIssuesConfig struct {
Label string `json:"label"`
StatusField string `json:"status-field,omitempty"`
Label string `json:"label"`

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added a major changeset documenting removal of status-field and migration to repository label prefixes. Fixed in 3664808.

Comment thread pkg/workflow/work_queue_issues.go Outdated
Comment on lines +67 to +68
disables the integration. The tracking label must be a nonblank literal of at
most 239 bytes; unknown keys are rejected.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Updated the reference to state the 33-byte prefix limit and its relationship to GitHub’s 50-character label limit. Fixed in 3664808.

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

✅ PR Code Quality Reviewer completed the code quality review.

diagnosing safeoutputs bridge after denied PR review write

🔎 Code quality review by PR Code Quality Reviewer

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

✅ Ponytail Reviewer completed successfully!

Generated by Ponytail Reviewer for #67223

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

✅ Design Decision Gate 🏗️ completed the design decision gate check. See the comment below for the result and any generated ADR draft.

No ADR enforcement needed for PR #67223: no implementation label (has_implementation_label=false) and only 18 new lines in default business logic directories (threshold 100, requires_adr_by_default_volume=false). No custom .design-gate.yml present.

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

✅ Test Quality Sentinel completed test quality analysis.

Caution

agentic threat detected
Threat detection flagged this output in warn mode. Manual review is REQUIRED before any follow-up automation.

Details

Potential security threats were detected in the agent output.

Review the workflow run logs for details.

Test Quality Sentinel skipped because pre-fetch PR data was unavailable: unable to fetch test file diff

🧪 Test quality analysis by Test Quality Sentinel

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

One opportunity to remove the single-connection pagination abstraction.

net: -5 lines possible.

Generated by ✂️ Ponytail Reviewer for #67223 · codex · gpt56 · 20.6 AIC · ⌖ 6.4 AIC · ⊞ 13.5K
Comment /ponytail to run again

const pending = [];
for (const [index, issue] of issues.entries()) {
for (const connection of fields ? ["labels", "issueFieldValues"] : ["labels"]) {
for (const connection of ["labels"]) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

L143: yagni: generic connection loop and dynamic property bookkeeping now serve only ["labels"]. Inline label pagination and retain just issue/alias pending state.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Replaced the generic connection loop with inline labels-only pagination, keeping just issue/alias pending state. Fixed in 3664808.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Caution

agentic threat detected
Threat detection flagged this output in warn mode. Manual review is REQUIRED before any follow-up automation.

Details

Potential security threats were detected in the agent output.

Review the workflow run logs for details.

🧪 Test Quality Sentinel Report

✅ Test Quality Score: 75/100 — Acceptable

Analyzed 2 modified behavioral tests (table-driven + integration). Tests correctly validate feature removal (StatusField → labels).

📊 Metrics (2 tests modified)
Metric Value
Analyzed 2 (Go: 2, JS: 0)
✅ Design 2 (100%)
⚠️ Implementation 0 (0%)
Edge/error coverage 2 (100%) — error cases, table rows
Duplicate clusters 0
Inflation No (11 test lines added, 13 deleted)
🚨 Violations 0
Test File Classification Coverage
TestWorkQueueIssuesConfiguration work_queue_issues_test.go:45–74 Table-driven design test 9 scenarios (valid configs, invalid configs, edge cases)
TestWorkQueueIssuesCompilationUsesExistingJobs work_queue_issues_test.go:76–134 Integration design test Configuration parsing, permission grants, environment setup
✅ Test Quality Notes

Intentional Feature Removal (Aligned):

  • Production code removes StatusField struct field and parsing logic
  • Tests correctly remove corresponding assertions and test cases
  • Test table restructured: status-field moved from valid→invalid test case
  • Removal is intentional per PR description: "Remove status-field. ... use repository labels instead"

Coverage Quality:

  • Both tests remain table-driven with multiple scenarios
  • Error cases preserved: blank-label, status-field (now invalid), unknown, null, expression
  • Integration test validates: permissions, workflow compilation, environment variable JSON
  • No reduction in assertion count for remaining features (label validation, compilation output)

Consistency:

  • Test assertions updated to reflect new configuration schema
  • require.JSONEq correctly validates label only in environment variable
  • No orphaned mocks or assertions remain

Verdict

✅ Passed. 0% implementation tests (threshold: 30%). Tests correctly adapt to intentional feature removal with no violations.


Analysis Summary:

  • 1 test file modified with 11 additions, 13 deletions
  • 2 behavioral tests (both table-driven design tests)
  • 0 new tests added (pure refactoring to align with feature removal)
  • All removed assertions correspond to removed production code
  • No hard violations (Go mocks, missing build tags)

🧪 Test quality analysis by Test Quality Sentinel · copilot · haiku45 · 24.9 AIC · ⌖ 8.38 AIC · ⊞ 8.2K · ◷
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

agentic threat detected
Threat detection flagged this output in warn mode. Manual review is REQUIRED before any follow-up automation.

Details

Potential security threats were detected in the agent output.

Review the workflow run logs for details.

✅ Test Quality Sentinel: 75/100. 0% implementation tests (threshold: 30%). Tests correctly refactored to align with intentional feature removal (StatusField → repository labels). No violations.

🧪 Test quality analysis by Test Quality Sentinel · copilot · haiku45 · 24.9 AIC · ⌖ 8.38 AIC · ⊞ 8.2K
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Skills-Based Review 🧠

Applied /diagnosing-bugs and /codebase-design. This is a solid architectural migration from org-level native Issue fields to repository labels, with good test coverage updates across both the JS and Go layers — but a few issues should be addressed before merge.

📋 Key Themes & Highlights

Key Themes

  • Pacing cost under-counts remove-only batches: work_queue_issue_pacing.cjs's cost regex was not updated for the new removeLabelsFromLabelable mutation, so a batch that only removes obsolete status labels is priced at cost 0 and under-paced against GitHub's rate limits.
  • Leftover/dead code in the main projection loop: summaryBody, issueBody, and claimBody are called in projectBatch's per-target loop (lines 216-218) with their results discarded — looks like debugging/scratch code that duplicates template rendering with no effect.
  • Label length limit is wider than GitHub allows: the new 239-byte limit (schema, Go, and JS) permits prefixes whose generated work: Needs attention-style label exceeds GitHub's 50-char label cap, deferring a preventable failure from compile-time to runtime.
  • Breaking schema change without a changeset: removing status-field outright (rather than deprecating) breaks previously valid frontmatter at compile time, and no changeset documents this for the release notes/migration path.

Positive Highlights

  • ✅ Clean removal of the complex native-field GraphQL discovery/pagination logic — the label-based path is noticeably simpler and easier to follow.
  • ✅ Good care taken to preserve unrelated labels (obsolete filtering only targets this prefix's own status labels) and to verify label color/creation idempotently.
  • ✅ Test suite updated thoroughly across acceptance checks, unit checks, and Go config tests, including request-count assertions for the new status-label lookup.

@copilot please address the review comments above.

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · copilot · sonnet50 · 95.6 AIC · ⌖ 15.7 AIC · ⊞ 10.1K
Comment /matt to run again

Comment thread actions/setup/js/work_queue_issues.cjs Outdated
const work = current.state.works.get(target.work_id);
summaryBody(current.state, work, options.now ?? Date.now(), [], current.branch, origin);
if (!target.resource) issueBody(current.state, work, origin, config, current.branch);
for (const claimId of target.claim_ids) claimBody(current.state, current.state.claims.get(claimId), options.now ?? Date.now());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[/diagnosing-bugs] Dead/wasted calls: summaryBody(...), issueBody(...), and claimBody(...) are invoked per-target inside this loop but their return values are discarded — nothing checks the result or throws on failure here (the real bodies are computed later in projectLinkedIssues/the create path). This duplicates template rendering work for every target on every projection pass with no observable effect.

💡 Analysis

Lines 216-218:

summaryBody(current.state, work, options.now ?? Date.now(), [], current.branch, origin);
if (!target.resource) issueBody(current.state, work, origin, config, current.branch);
for (const claimId of target.claim_ids) claimBody(current.state, current.state.claims.get(claimId), options.now ?? Date.now());

None of these results are assigned, used for validation, or awaited for side effects (the functions are synchronous template renderers). If this was meant to pre-validate templates/throw early on bad state, the result should be checked; otherwise it's leftover debugging code that should be removed before merge — it adds CPU cost with each projection batch and obscures the loop's actual purpose (status-label computation).

@copilot please address this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Removed the unused summary, Issue, and claim body rendering calls from the target loop. Fixed in 3664808.

"properties": {
"label": { "type": "string", "minLength": 1, "maxLength": 256, "pattern": "\\S", "default": "work" },
"status-field": { "type": "string", "minLength": 1, "maxLength": 256, "pattern": "\\S", "description": "Pre-provisioned native organization single-select field. Omit for comment-only status." }
"label": { "type": "string", "minLength": 1, "maxLength": 239, "pattern": "\\S", "default": "work" }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[/codebase-design] The 239-byte schema limit (and the matching 239-byte Go/JS runtime checks) is wider than what GitHub actually allows: label names cap at 50 characters, and the longest generated status suffix : Needs attention consumes 17, leaving only 33 usable bytes for label. A long-but-schema-valid prefix will pass compilation/validation and then fail at projection time with an opaque GraphQL label-creation error, which is a worse failure mode than a compile-time rejection — this is the same issue already flagged by another reviewer on this PR.

💡 Suggested fix

Tighten maxLength here (and the corresponding Go/JS runtime checks in pkg/workflow/work_queue_issues.go and actions/setup/js/work_queue_issues.cjs) to 33, and add a one-line schema description explaining the 50-char GitHub label limit minus the longest status suffix. This keeps validation fail-fast and consistent across all three enforcement points instead of silently deferring the failure to runtime.

@copilot please address this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Tightened the schema prefix maximum to 33 and aligned Go/JS runtime validation and docs. Fixed in 3664808.

type WorkQueueIssuesConfig struct {
Label string `json:"label"`
StatusField string `json:"status-field,omitempty"`
Label string `json:"label"`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[/codebase-design] Removing status-field entirely (rather than deprecating it) breaks compilation for any existing workflow frontmatter that still sets tools.work-queue.issues.status-field, turning a previously valid config into a hard compile error. Per this repo's release rules this is a breaking schema change, and there's no changeset in this branch (.changeset/ has no new entry) documenting it or providing migration guidance.

💡 Suggested fix

Either (a) keep status-field as an accepted-but-ignored/deprecated key with a clear validation warning pointing users to the new label-based projection, or (b) if a hard break is intentional, add a changeset explicitly calling out the breaking change and update docs/src/content/docs/reference/work-queue.md's migration guidance so users aren't surprised by a sudden compile failure on upgrade.

@copilot please address this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added a major changeset with migration guidance for status-field removal. Fixed in 3664808.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Impeccable review — mode: refactor_cleanup (distill/extract applied to the label-projection refactor)

This PR swaps the native Issue status-field projection for repository labels — a sizeable, well-tested refactor across work_queue_issue_api.cjs, work_queue_issues.cjs, and the Go config/schema layer.

New finding (posted inline):

  • work_queue_issues.cjs:216-218 — three dead calls (summaryBody, issueBody, claimBody) whose results are discarded inside the per-target loop. They perform real template file I/O for no observable effect, since the real values are recomputed later (lines 271, 364-365). Looks like leftover debug/validation scaffolding.

Pre-existing unresolved Copilot findings still apply to this diff (not duplicated as new comments, listed here for completeness):

  • work_queue_issue_api.cjs:46 — query-then-create label provisioning is not idempotent across concurrent projections for a previously unseen status.
  • work_queue_issues.cjs:25 — no byte-length ceiling on label prevents exceeding GitHub's 50-char label-name limit once the : <status> suffix is appended.
  • work_queue_issues.cjs:357 — removeLabelsFromLabelable is absent from the pacing cost regex (work_queue_issue_pacing.cjs:34), confirmed during this review: batches combining removals and additions in a single mutation query under-count/under-pace the removal cost.
  • pkg/parser/schemas/main_workflow_schema.json:5393 and pkg/workflow/work_queue_issues.go:92 / docs/.../work-queue.md:68 — the 239-byte config limit is not tight enough to guarantee a valid ≤50-char generated label.
  • pkg/workflow/work_queue_issues.go:11 — removing status-field is a breaking frontmatter change for existing workflows; confirm this aligns with the repo's release/breaking-change rules.

These remain genuinely blocking (correctness/compat), so I'm requesting changes pending their resolution, in addition to the new dead-code cleanup.

🧵 Reviewed using Impeccable skills by Impeccable Skills Reviewer · copilot · sonnet50 · 129.9 AIC · ⌖ 13.2 AIC · ⊞ 8.1K

Comment thread actions/setup/js/work_queue_issues.cjs Outdated
const work = current.state.works.get(target.work_id);
summaryBody(current.state, work, options.now ?? Date.now(), [], current.branch, origin);
if (!target.resource) issueBody(current.state, work, origin, config, current.branch);
for (const claimId of target.claim_ids) claimBody(current.state, current.state.claims.get(claimId), options.now ?? Date.now());

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

These three calls (summaryBody, issueBody, claimBody) are invoked here with their return values discarded — they have no assertions, no side effects on journal/target, and aren't used again before the real projection logic runs later (lines 271, 364-365 recompute the actual bodies). Each call does real work: renderSummary/issueBody/claimBody read markdown templates from disk via renderTemplateFromFile/fs.readFileSync and format text, so this adds unnecessary file I/O per target per batch for no observable benefit. This looks like leftover debug/validation scaffolding that should be removed, or (if it was meant to catch rendering errors early) its exceptions should be surfaced/asserted rather than silently swallowed by discarding the result.

@copilot please address this.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Removed the discarded body-rendering calls from the per-target loop. Fixed in 3664808.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot address the following outstanding work in one pass:

  1. Update this branch with the latest main using make merge-main, resolving any conflicts and preserving the intended changes.
  2. Review (actions/setup/js/work_queue_issue_api.cjs:46): This query-then-create path is not idempotent across concurrent projections. Locks are scoped to Work/Issue identities, so two different Issues entering a previously unseen status can both observe no label; one createLabel then fails, leaving that Issue pending—possibly indefinitely for a terminal transition with no later hook. Treat an already-exists response as recoverable by re-querying and verifying/recoloring the label, and cover the concurrent case. - Use repository labels for work-queue Issue status #67223 (comment)
  3. Review (actions/setup/js/work_queue_issues.cjs:25): Runtime validation allows prefixes whose generated status label exceeds GitHub's 50-character limit. The longest suffix is 17 characters, so reject prefixes over 33 bytes here; otherwise compilation can succeed but every projection attempt fails while provisioning the label. - Use repository labels for work-queue Issue status #67223 (comment)
  4. Review (actions/setup/js/work_queue_issues.cjs:357): removeLabelsFromLabelable is not included in the operation-cost regex in work_queue_issue_pacing.cjs:34. Consequently, a transition batch is under-paced, and a batch containing only up to 50 removals is charged as one mutation and delayed only one second, increasing secondary-rate-limit risk. Add this mutation to the pacing cost calculation and cover a removal batch. - Use repository labels for work-queue Issue status #67223 (comment)
  5. Review (pkg/parser/schemas/main_workflow_schema.json:5393): This schema accepts prefixes that cannot produce valid GitHub status labels. Label names are limited to 50 characters; reserving 17 characters for : Needs attention leaves at most 33 for the configured prefix. - Use repository labels for work-queue Issue status #67223 (comment)
  6. Review (pkg/workflow/work_queue_issues.go:11): Removing status-field makes previously valid workflow frontmatter fail compilation, which the repository's release rules classify as a breaking schema change. This PR does not include a changeset; add a major changeset with migration guidance (or retain the field through a deprecation cycle) before merging. - Use repository labels for work-queue Issue status #67223 (comment)
  7. Review (pkg/workflow/work_queue_issues.go:92): The 239-byte limit still permits prefixes that GitHub cannot create as labels. GitHub label names are capped at 50 characters, and the longest generated suffix (: Needs attention) is 17 characters, so a 239-byte prefix produces a 256-character status label and leaves projection permanently pending. Cap the prefix at 33 here and keep the runtime/schema checks aligned. - Use repository labels for work-queue Issue status #67223 (comment)
  8. Review (docs/src/content/docs/reference/work-queue.md:68): The documented 239-byte limit is not usable for generated status labels: GitHub label names are capped at 50 characters and : Needs attention consumes 17. Document the effective 33-byte prefix limit so configurations copied from this reference do not fail at runtime. - Use repository labels for work-queue Issue status #67223 (comment)
  9. Review (actions/setup/js/work_queue_issue_api.cjs:143): L143: yagni: generic connection loop and dynamic property bookkeeping now serve only ["labels"]. Inline label pagination and retain just issue/alias pending state. - Use repository labels for work-queue Issue status #67223 (comment)
  10. Review (actions/setup/js/work_queue_issues.cjs:218): [/diagnosing-bugs] Dead/wasted calls: summaryBody(...), issueBody(...), and claimBody(...) are invoked per-target inside this loop but their return values are discarded — nothing checks the result or throws on failure here (the real bodies are computed later in projectLinkedIssues/the create path). This duplicates template rendering work for every target on every projection pass with no observable effect. - Use repository labels for work-queue Issue status #67223 (comment)
  11. Review (pkg/parser/schemas/main_workflow_schema.json:5393): [/codebase-design] The 239-byte schema limit (and the matching 239-byte Go/JS runtime checks) is wider than what GitHub actually allows: label names cap at 50 characters, and the longest generated status suffix : Needs attention consumes 17, leaving only 33 usable bytes for label. A long-but-schema-valid prefix will pass compilation/validation and then fail at projection time with an opaque GraphQL label-creation error, which is a worse failure mode than a compile-time rejection — this is the same issue already flagged by another reviewer on this PR. - Use repository labels for work-queue Issue status #67223 (comment)
  12. Review (pkg/workflow/work_queue_issues.go:11): [/codebase-design] Removing status-field entirely (rather than deprecating it) breaks compilation for any existing workflow frontmatter that still sets tools.work-queue.issues.status-field, turning a previously valid config into a hard compile error. Per this repo's release rules this is a breaking schema change, and there's no changeset in this branch (.changeset/ has no new entry) documenting it or providing migration guidance. - Use repository labels for work-queue Issue status #67223 (comment)
  13. Review (actions/setup/js/work_queue_issues.cjs:218): These three calls (summaryBody, issueBody, claimBody) are invoked here with their return values discarded — they have no assertions, no side effects on journal/target, and aren't used again before the real projection logic runs later (lines 271, 364-365 recompute the actual bodies). Each call does real work: renderSummary/issueBody/claimBody read markdown templates from disk via renderTemplateFromFile/fs.readFileSync and format text, so this adds unnecessary file I/O per target per batch for no observable benefit. This looks like leftover debug/validation scaffolding that should be removed. - Use repository labels for work-queue Issue status #67223 (comment)
  14. Fix failing check JS Tests (shard 1/4) (FAILURE): https://github.com/github/gh-aw/actions/runs/37951084781/job/113893697199.
  15. Fix failing check JS Tests (shard 1/4) (FAILURE): https://github.com/github/gh-aw/actions/runs/37950739420/job/113889898961.

Push the necessary fixes, reply to each listed review thread and resolve it when addressed. Ignore feedback already answered or resolved. Use the pr-finisher skill and stop when only human review or CI remains; do not trigger CI.

Sous-chef head: 3083c72
Sous-chef work: 0feee4608d9f70bc1908eabe7e740d6b00503d3f725249fcd9eba914e0da11ad 1f60e381c0761be30cd78b89925d95ba38ddb66222f559b16d559036d2d2edbe 2b6892874726ec05b6f6c50e41ddb05f985c339206d9df79ba35366eaccaaa67 4270db5e84a68b13f5e9a7a0702ca18083a2aa19efa5625e91fbc9de8132147c 70ff6ecd06af00e89084076feec51e0a21386ffd2b0d8da88d896c1bf1a06518 9a38ed235095caa5bd71fdde68e9d8db44392cca4472ea9a01fb2eaf905528c5 9f9d16086882c6cd8da97c04a5185e7f78616f6abdc49bd615a17e0f3742e5e3 c83245b065ed848061e4e9857944767e652fa6348f50b36306de44ffadb83370 d50e44e6da4fadbc6d647fe366fa5d2183b2d1a7b4465ffeabb691d23aaeef09 e2a8af2678e2d909d035a0684406bff25e0c2c580d5374e16f41c8509431c3f5 e5e37797788a755c3b4d62363457558759b9ee039077f5f177d450defad30808 e99ab3d19aa0a1a531cb9e99de88069362ae327e27c5c12deec0ff4089f4795f f026cb39b5c3712eccfdcbe48287adf63992c0ae9d82ca0e54f20dbe62808ab9
Sous-chef state: 8f50609d0f4eac15820bf2845400e48c08e85caae23330611356db48e53b75b1

Generated by 👨‍🍳 PR Sous Chef · pi · haiku45 · 9.66 AIC · ⌖ 8.02 AIC · ⊞ 1K · ◷
Comment /souschef to run again

Copilot AI and others added 2 commits October 9, 2026 16:23
…k-queue-labels

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
@pelikhan

pelikhan commented Oct 9, 2026

Copy link
Copy Markdown
Collaborator

@copilot resolve the merge conflicts in this pull request

Copilot AI commented Oct 9, 2026

Copy link
Copy Markdown
Contributor Author

@copilot address the following outstanding work in one pass:

  1. Update this branch with the latest main using make merge-main, resolving any conflicts and preserving the intended changes....

Merged main and pushed the fixes in 3664808. Replied to all 12 listed inline comments; two threads became resolved automatically, but 10 remain open because this environment has no review-thread resolver (the browser resolver requires OAuth, and gh has no token). Both prior JS shard failures were the same invalid dispatcher expectation; the corrected delivery test and 58 focused JS tests pass. Local make fmt, make lint, make build, and make agent-report-progress passed. No CI was triggered. Parallel Code Review was unavailable and CodeQL timed out; the validation tool prohibits retry. The PR API still reports mergeable_state: dirty, so human follow-up is needed to resolve threads, verify mergeability, and re-trigger CI.

…k-queue-labels

# Conflicts:
#	actions/setup/js/work_queue_issues_checks.cjs

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>

Copilot AI commented Oct 9, 2026

Copy link
Copy Markdown
Contributor Author

@copilot resolve the merge conflicts in this pull request

Merged the latest main and resolved the conflict in work_queue_issues_checks.cjs; the merge commit is ae3d601b.

let repositoryId;
let label;
function statusLabelName(config, status) {
return `${config.label}: ${status}`;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@copilot no spaces in label names

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Generated status labels now use lowercase hyphenated names without spaces, including whitespace-normalized prefixes. Added test coverage and updated the reference docs in c02d3f9.

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI requested a review from pelikhan October 9, 2026 20:01
@pelikhan
pelikhan merged commit 02d213a into main Oct 9, 2026
3 checks passed
@pelikhan
pelikhan deleted the copilot/configure-work-queue-labels branch October 9, 2026 20:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants