Skip to content

chore(ci): add issue health audit and project field sync workflows - #1399

Merged
ashleyshaw merged 9 commits into
developfrom
chore/add-issue-health-audit-workflow
Jul 29, 2026
Merged

chore(ci): add issue health audit and project field sync workflows#1399
ashleyshaw merged 9 commits into
developfrom
chore/add-issue-health-audit-workflow

Conversation

@ashleyshaw

@ashleyshawashleyshaw commented Jul 29, 2026

Copy link
Copy Markdown
Member

Linked issues

Closes#1402
Relates to #1172
Relates to #1170

Changelog

Added

  • issue-health-audit.yml — weekly audit workflow that reopens issues closed with unchecked checkboxes and applies missing type:/priority: labels across all open issues; supports dry_run mode; runs every Monday 08:00 UTC
  • issue-project-field-sync.yml — on-demand workflow to add open issues to a GitHub Projects v2 board and set Status, Priority, and Type fields from labels; auto-discovers field IDs via GraphQL

Testing steps

  1. Run issue-health-audit with dry_run=true → verify summary shows issues that would be reopened and labels that would be applied
  2. Run issue-project-field-sync with dry_run=true, project_number=33 → verify issues would be added/updated in project

Checklist (Global DoD / PR)

  • dry_run mode on both workflows
  • meta:force-close escape hatch prevents false DoD reopens
  • Job summaries for observability
  • No hardcoded project IDs — project number supplied at runtime
  • Permissions scoped to minimum required
  • Follows chore/ branch targeting develop

@ashleyshawashleyshaw added area:ci Build and CI pipelines priority:normal Default priority type:ci CI/CD pipeline work labels Jul 29, 2026
@github-actions

github-actionsBot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

✅ Template check passed after update. Thanks for fixing the PR description.

@github-actionsgithub-actionsBot added this to the v1.0 milestone Jul 29, 2026
@coderabbitai

coderabbitaiBot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@ashleyshaw, you've reached your PR review limit, so we couldn't start this review.

Next review available in:2 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 924ca00c-2b9a-497c-a898-17e30f9c1e07

📥 Commits

Reviewing files that changed from the base of the PR and between 060e73a and 4986410.

📒 Files selected for processing (6)
  • .github/mergify.yml
  • .github/projects/active/workflows-consolidation-2026-q3/PHASE_3_CONTINUATION_PROMPT.md
  • .github/workflows/issue-health-audit.yml
  • .github/workflows/issue-project-field-sync.yml
  • .remember/now.md
  • CHANGELOG.md
📝 Walkthrough

Walkthrough

Adds a Phase 3 continuation plan, introduces a scheduled/manual issue health audit workflow for reopening incomplete issues and repairing labels, and updates project execution records.

Changes

Phase 3 issue governance

Layer / File(s)Summary
Phase 3 execution plan
.github/projects/active/workflows-consolidation-2026-q3/PHASE_3_CONTINUATION_PROMPT.md
Documents Phase 3 scope, subtasks, references, validation commands, success criteria, and continuation instructions.
Issue health audit workflow
.github/workflows/issue-health-audit.yml
Adds scheduled and manually triggered auditing that reopens incomplete issues, fixes missing labels, records errors, and publishes a job summary.
Execution status records
.remember/now.md, .remember/phase-3.2-execution-continuation.md
Records consolidation milestones, session closure details, and updated Phase 3.1/3.2 status information.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
participant GitHub Actions
participant Issue Health Audit
participant GitHub Issues API
participant Job Summary
GitHub Actions->>Issue Health Audit: Start on schedule or manual dispatch
Issue Health Audit->>GitHub Issues API: Fetch issues
Issue Health Audit->>GitHub Issues API: Reopen issues and add labels
Issue Health Audit->>Job Summary: Publish audit results
Loading

Possibly related issues

  • lightspeedwp/.github#1227 — Covers the same Phase 3 labelling-governance workflow work.
  • lightspeedwp/.github#1360 — Tracks Phase 3 consolidation including the related workflow.
  • lightspeedwp/.github#1260 — Covers the same Phase 3 labelling-workflow consolidation initiative.
  • lightspeedwp/.github#1359 — Addresses creation and review of consolidated labelling workflows.

Suggested labels:status:needs-review, lang:js, type:feature, area:labels

Suggested reviewers:krugazul

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check nameStatusExplanationResolution
Description check⚠️ WarningThe description covers linked issues, changelog, testing, and checklist, but it omits the required Risk Assessment and fuller test template details.Add a Risk Assessment section and expand How to Test with prerequisites, expected results, and edge cases to match the template.
✅ Passed checks (4 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
Title check✅ PassedThe title matches the main change, though it also mentions project field sync work not shown in the summary.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Fix failing CI checks
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/add-issue-health-audit-workflow

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.

@github-actions

github-actionsBot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

⏱️ Aging and SLA annotation

  • Age: 0 day(s)
  • SLA state: Within SLA
  • Thresholds: warn at 7 days, breach at 14 days
  • Last updated: 2026-07-29T18:24:50.570Z

Maintained by project-meta-sync workflow.

@coderabbitai
coderabbitaiBot requested a review from krugazulJuly 29, 2026 17:35
@coderabbitaicoderabbitaiBot added area:labels Label governance and routing lang:js JavaScript/TypeScript status:needs-review Awaiting code review type:feature Feature or enhancement labels Jul 29, 2026
@github-actionsgithub-actionsBot added type:chore Chore / small hygiene change meta:needs-changelog Requires a changelog entry before merge labels Jul 29, 2026

@coderabbitaicoderabbitaiBot 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.

Actionable comments posted: 8

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
@.github/projects/active/workflows-consolidation-2026-q3/PHASE_3_CONTINUATION_PROMPT.md:
- Line 140: Correct the Timeline total in the phase continuation prompt from
approximately 9 hours to approximately 7.5 hours, while preserving the existing
per-issue breakdown of 2 + 2.5 + 1.5 + 1.5 hours.
- Line 22: Synchronize the Phase 3 lifecycle records across
.github/projects/active/workflows-consolidation-2026-q3/PHASE_3_CONTINUATION_PROMPT.md:22,
.remember/now.md:102-126, .remember/now.md:204-210, and
.remember/phase-3.2-execution-continuation.md:11-27. Update the continuation
prompt to reflect the actual post-Phase-3.1 state or explicitly mark it
historical; reconcile PR `#1319` and PR `#1367` and align the later now.md entries
with that authoritative merge history. In phase-3.2-execution-continuation.md,
retain PR `#1367` as the merged workflow delivery and describe PR `#1390` only as
planning documentation unless it changed the workflow.
In @.github/workflows/issue-health-audit.yml:
- Around line 132-139: Update the issue-health audit logic around the
uncheckedMatches and checkedMatches calculations to reuse the DoD-section
extraction and checkbox-matching policy from
validate-issue-dod-before-close.yml, rather than scanning the entire issue body.
Ensure only checkboxes within the extracted DoD section determine whether the
issue is reopened.
- Around line 56-61: Update the report construction and label-processing flow so
type and priority entries are added only after addLabels succeeds, while dry-run
entries are recorded as planned rather than applied. Include successful
status:needs-triage additions in the summary, and ensure failed label requests
are recorded only in errors, using the existing report categories and addLabels
flow.
- Line 73: Update the label classification condition in the issue-health audit
workflow to return the canonical `type:build` label instead of `type:ci` for
matching build/CI titles. Preserve the existing pattern matching and
priority-label flow.
- Around line 34-36: Move the issues: write and contents: read permissions from
workflow scope into the audit-and-fix job, leaving the workflow default
read-only and ensuring only audit-and-fix receives the write token.
- Around line 94-119: Update the issue-fetching logic around openIssues and
closedIssues to filter both paginated datasets with !i.pull_request before
auditing. Change the closed-issue eligibility window to use the closed_at
timestamp rather than the API since parameter, ensuring only issues actually
closed within the last 28 days are eligible for reopening.
In @.remember/now.md:
- Around line 127-202: Remove the copied session-closing transcript from the
documented section, including the user-specific worktree removal command,
checklist, summary, and continuation instructions. Retain only a concise neutral
dated entry in the Daily Log Entry section describing the completed
restructuring documentation and PR status, without local paths or cleanup
commands.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: 668c60b7-5af6-407b-b66d-4265a341a1cd

📥 Commits

Reviewing files that changed from the base of the PR and between 87e5423 and 060e73a.

📒 Files selected for processing (4)
  • .github/projects/active/workflows-consolidation-2026-q3/PHASE_3_CONTINUATION_PROMPT.md
  • .github/workflows/issue-health-audit.yml
  • .remember/now.md
  • .remember/phase-3.2-execution-continuation.md
📜 Review details
⏰ Context from checks skipped due to timeout. (6)
  • GitHub Check: Unified Labeling, Status, and Type Assignment
  • GitHub Check: coderabbit-gate
  • GitHub Check: Testing
  • GitHub Check: Standard Labeling, Status, and Type Assignment
  • GitHub Check: Analyze (python)
  • GitHub Check: Summary
⚠️ CI failures not shown inline (4)

GitHub Actions: Validate PR Template / validate-pr-template: chore(ci): add issue-health-audit workflow

Conclusion: failure

View job details

##[group]Run actions/github-script@v7
with:
script: const { validatePullRequestBody } = require('./scripts/validation/template-helpers.cjs');
const marker = '<!-- template-enforcement -->';
const pr = context.payload.pull_request;
const author = pr.user?.login || '';
const isDependabot = author === 'dependabot[bot]' || author === 'app/dependabot';
const isImgbot = author === 'imgbot[bot]' || author === 'app/imgbot';
if (isDependabot || isImgbot) {
core.info(`Skipping PR template validation for bot author ${author}.`);
return;
}
const validation = validatePullRequestBody(pr.body || '', pr.labels || [], pr.head?.ref || '');
const comments = await github.paginate(github.rest.issues.listComments, {
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
per_page: 100
});
const previous = comments.find((comment) =>
comment.user?.type === 'Bot' && comment.body?.includes(marker)
);
if (validation.missing.length === 0) {
if (previous) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: previous.id,
body: `${marker}\n✅ Template check passed after update. Thanks for fixing the PR description.`
});
}
return;
}
const message = [
marker,
'🚫 This PR description is missing required template content.',
'',
`Missing required section(s): ${validation.missing.join(', ')}`,
'',
'Please update the PR body using one of the repository PR templates:',
'- https://github.com/lightspeedwp/.github/blob/develop/.github/pull_request_template.md',
'- https://github.com/lightspeedwp/.github/tree/develop/.github/PULL_REQUEST_TEMPLATE',
'',
'Empty placeholders, unchecked checklist boxes, and stub issue references do not count.'
].join('\n');
if (previous) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: previous.id,
body: message
});
} else {
await github.rest.issues....

GitHub Actions: Validate PR Template / 0_validate-pr-template.txt: chore(ci): add issue-health-audit workflow

Conclusion: failure

View job details

##[group]Run actions/github-script@v7
with:
script: const { validatePullRequestBody } = require('./scripts/validation/template-helpers.cjs');
const marker = '<!-- template-enforcement -->';
const pr = context.payload.pull_request;
const author = pr.user?.login || '';
const isDependabot = author === 'dependabot[bot]' || author === 'app/dependabot';
const isImgbot = author === 'imgbot[bot]' || author === 'app/imgbot';
if (isDependabot || isImgbot) {
core.info(`Skipping PR template validation for bot author ${author}.`);
return;
}
const validation = validatePullRequestBody(pr.body || '', pr.labels || [], pr.head?.ref || '');
const comments = await github.paginate(github.rest.issues.listComments, {
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
per_page: 100
});
const previous = comments.find((comment) =>
comment.user?.type === 'Bot' && comment.body?.includes(marker)
);
if (validation.missing.length === 0) {
if (previous) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: previous.id,
body: `${marker}\n✅ Template check passed after update. Thanks for fixing the PR description.`
});
}
return;
}
const message = [
marker,
'🚫 This PR description is missing required template content.',
'',
`Missing required section(s): ${validation.missing.join(', ')}`,
'',
'Please update the PR body using one of the repository PR templates:',
'- https://github.com/lightspeedwp/.github/blob/develop/.github/pull_request_template.md',
'- https://github.com/lightspeedwp/.github/tree/develop/.github/PULL_REQUEST_TEMPLATE',
'',
'Empty placeholders, unchecked checklist boxes, and stub issue references do not count.'
].join('\n');
if (previous) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: previous.id,
body: message
});
} else {
await github.rest.issues....

GitHub Actions: Changelog • Management / 0_Validate changelog on PR.txt: chore(ci): add issue-health-audit workflow

Conclusion: failure

View job details

##[group]Run actions/github-script@v7
with:
script: const cp = require("node:child_process");
const author = context.payload.pull_request?.user?.login || "";
const labels = (context.payload.pull_request?.labels || []).map((l) => l.name);
const has = (name) => labels.includes(name);
if (author === "dependabot[bot]" || author === "app/dependabot") {
core.info("Skipping changelog requirement for Dependabot pull requests.");
core.setOutput("run_validation", "false");
return;
}
if (has("meta:needs-changelog") && has("meta:no-changelog")) {
core.setFailed("PR cannot include both meta:needs-changelog and meta:no-changelog.");
return;
}
const restrictedTypes = new Set([
"type:feature",
"type:bug",
"type:performance",
"type:security",
"type:release",
"type:hotfix",
]);
if (has("meta:no-changelog") && labels.some((label) => restrictedTypes.has(label))) {
core.setFailed("meta:no-changelog is not allowed for high-impact release-related change types.");
return;
}
const baseSha = context.payload.pull_request?.base?.sha;
const headSha = context.payload.pull_request?.head?.sha;
const changed = cp
.execSync(`git diff --name-only ${baseSha} ${headSha}`, {
encoding: "utf8",
maxBuffer: 1024 * 1024 * 100,
})
.split("\n")
.filter(Boolean);
if (changed.includes("CHANGELOG.md")) {
core.info("CHANGELOG.md updated in PR diff.");
core.setOutput("run_validation", "true");
return;
}
if (has("meta:no-changelog")) {
core.info("Skipping changelog requirement due to meta:no-changelog label.");
core.setOutput("run_validation", "false");
return;
}
core.setFailed("PR requires a CHANGELOG.md update or the meta:no-changelog label.");
github-***REDACTED***
debug: false
user-agent: actions/github-script
result-encoding: json
retries: 0
retry-exempt-status-codes: 400,401,403,404,422
##[endgroup]
##[error]PR requires a CHANGELOG.md update or the meta:no-changelog label.

GitHub Actions: Changelog • Management / Validate changelog on PR: chore(ci): add issue-health-audit workflow

Conclusion: failure

View job details

##[group]Run actions/github-script@v7
with:
script: const cp = require("node:child_process");
const author = context.payload.pull_request?.user?.login || "";
const labels = (context.payload.pull_request?.labels || []).map((l) => l.name);
const has = (name) => labels.includes(name);
if (author === "dependabot[bot]" || author === "app/dependabot") {
core.info("Skipping changelog requirement for Dependabot pull requests.");
core.setOutput("run_validation", "false");
return;
}
if (has("meta:needs-changelog") && has("meta:no-changelog")) {
core.setFailed("PR cannot include both meta:needs-changelog and meta:no-changelog.");
return;
}
const restrictedTypes = new Set([
"type:feature",
"type:bug",
"type:performance",
"type:security",
"type:release",
"type:hotfix",
]);
if (has("meta:no-changelog") && labels.some((label) => restrictedTypes.has(label))) {
core.setFailed("meta:no-changelog is not allowed for high-impact release-related change types.");
return;
}
const baseSha = context.payload.pull_request?.base?.sha;
const headSha = context.payload.pull_request?.head?.sha;
const changed = cp
.execSync(`git diff --name-only ${baseSha} ${headSha}`, {
encoding: "utf8",
maxBuffer: 1024 * 1024 * 100,
})
.split("\n")
.filter(Boolean);
if (changed.includes("CHANGELOG.md")) {
core.info("CHANGELOG.md updated in PR diff.");
core.setOutput("run_validation", "true");
return;
}
if (has("meta:no-changelog")) {
core.info("Skipping changelog requirement due to meta:no-changelog label.");
core.setOutput("run_validation", "false");
return;
}
core.setFailed("PR requires a CHANGELOG.md update or the meta:no-changelog label.");
github-***REDACTED***
debug: false
user-agent: actions/github-script
result-encoding: json
retries: 0
retry-exempt-status-codes: 400,401,403,404,422
##[endgroup]
##[error]PR requires a CHANGELOG.md update or the meta:no-changelog label.
🧰 Additional context used
📓 Path-based instructions (1)
**/.github/workflows/*.yml

⚙️ CodeRabbit configuration file

**/.github/workflows/*.yml: Review GitHub Actions workflows for this governance repo:

  • Security: check for least-privilege permissions (use permissions: at job level, default to read-only).
  • Secret handling: ensure secrets are passed via env vars, not interpolated directly into run: steps to prevent injection.
  • Action pinning: prefer SHA-pinned actions over mutable tags (e.g. actions/checkout@v4 is acceptable; SHA pins are better).
  • No pull_request_target with untrusted code execution unless explicitly justified.
  • Avoid storing sensitive outputs as unmasked step outputs.
  • Check for reusable workflow patterns and matrix strategies where appropriate.
  • Validate on: triggers: ensure branch/path filters are present to avoid unnecessary runs.
  • Confirm workflows are documented, DRY, and maintainable.
  • Ensure agent-triggered workflows use workflow_dispatch with defined inputs.

Files:

  • .github/workflows/issue-health-audit.yml
🪛 LanguageTool
.remember/phase-3.2-execution-continuation.md

[uncategorized] ~3-~3: Possible missing comma found.
Context: ...ation Prompt ## Current State (2026-07-26 15:45 UTC) Project: GitHub Workflo...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~12-~12: The official name of this software platform is spelled with a capital “H”.
Context: ...18:37:14Z) - New consolidated workflow: .github/workflows/labeling-governance.yml (226...

(GITHUB)

.github/projects/active/workflows-consolidation-2026-q3/PHASE_3_CONTINUATION_PROMPT.md

[uncategorized] ~20-~20: Possible missing comma found.
Context: ...ng-related workflows into 2 streamlined workflows while maintaining all label governance ...

(AI_HYDRA_LEO_MISSING_COMMA)


[uncategorized] ~71-~71: The official name of this software platform is spelled with a capital “H”.
Context: ... labels on close) Deliverable: New .github/workflows/labeling-governance.yml with...

(GITHUB)


[uncategorized] ~170-~170: The official name of this software platform is spelled with a capital “H”.
Context: ...--- ## Documentation & Resources **In `.github/projects/active/workflows-consolidation...

(GITHUB)

Comment thread.github/workflows/issue-health-audit.yml Outdated
Comment thread.github/workflows/issue-health-audit.yml
Comment thread.github/workflows/issue-health-audit.yml Outdated
Comment thread.github/workflows/issue-health-audit.yml
Comment thread.github/workflows/issue-health-audit.yml Outdated
Comment thread.remember/now.md Outdated
@github-actions

github-actionsBot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

🔍 Reviewer Summary for PR #1399

CI Status:success
Files changed: 6
Risk Distribution: 2 critical, 2 high, 0 medium, 2 low

Recommendations

  • ⚠️ 2 critical-risk file(s) modified (workflows, secrets)
  • ⚠️ Security-sensitive files modified (review carefully)

@github-actionsgithub-actionsBot removed type:chore Chore / small hygiene change type:ci CI/CD pipeline work labels Jul 29, 2026
@ashleyshawashleyshaw changed the title chore(ci): add issue-health-audit workflowchore(ci): add issue health audit and project field sync workflowsJul 29, 2026
@github-actionsgithub-actionsBot added type:chore Chore / small hygiene change and removed type:chore Chore / small hygiene change labels Jul 29, 2026
@github-actions

github-actionsBot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

@github-actionsgithub-actionsBot added type:chore Chore / small hygiene change and removed type:chore Chore / small hygiene change labels Jul 29, 2026
@github-actionsgithub-actionsBot added type:chore Chore / small hygiene change area:documentation Docs & guides lang:md Markdown content/docs and removed type:chore Chore / small hygiene change labels Jul 29, 2026
Adds a new GitHub Actions workflow that:
- Audits closed issues from the last 28 days and reopens any with
unchecked checkboxes (unless meta:force-close is present)
- Scans all open issues and applies missing type: and priority:
labels using title-pattern inference
- Runs weekly (Monday 08:00 UTC) and via workflow_dispatch with
dry-run support
Triggered by manual audit run on 2026-07-29 that:
- Reopened 8 issues closed with incomplete checkboxes
- Applied type labels to 32 open issues
- Applied priority labels to 43 open issues
Syncs open issues into a GitHub Projects v2 board and fills in
Status, Priority, and Type fields based on issue labels.
Field mapping:
- status:in-progress → Status: In Progress
- status:needs-review → Status: In Review
- status:blocked → Status: Blocked
- status:ready → Status: Ready
- (no status label) → Status: Todo
- priority:critical → Priority: Critical
- priority:important → Priority: High
- priority:normal → Priority: Medium
- priority:minor → Priority: Low
- type:bug → Type: Bug (etc.)
Setup required:
- Set PROJECT_NUMBER repo/org variable (Settings → Variables → Actions)
- Optionally add GH_PROJECT_TOKEN secret with a PAT having 'project' scope
(required for org-level projects; GITHUB_TOKEN covers repo-linked projects)
- Move permissions to job level (audit-and-fix) — reduces token scope
- Fix type:ci → type:build to match canonical label in issue-fields.yml
- Filter openIssues to exclude PRs (GitHub Issues API returns both)
- Change closedIssues to filter by closed_at instead of using API since
param (since uses updated_at, not closed_at)
- Update DoD checkbox logic to extract DoD section first, matching the
policy in validate-issue-dod-before-close.yml — prevents unchecked
checkboxes in non-DoD sections from incorrectly triggering a reopen
- Fix label reporting to record entries only after addLabels succeeds;
add dry-run labeling to report as planned; include status:needs-triage
additions in summary
Also update PHASE_3_CONTINUATION_PROMPT.md:
- Correct timeline total from ~9 hours to ~7.5 hours (2+2.5+1.5+1.5)
- Update current status to reflect Phase 3.1 complete (PR #1367 merged)
Remove session-closing transcript from .remember/now.md (local-path
cleanup commands have no place in project log history)
@ashleyshaw
ashleyshawforce-pushed the chore/add-issue-health-audit-workflow branch from a4a112a to 6ef3eceCompareJuly 29, 2026 19:22
@github-actionsgithub-actionsBot added the type:chore Chore / small hygiene change label Jul 29, 2026
@ashleyshaw
ashleyshaw enabled auto-merge (squash) July 29, 2026 19:26
@github-actionsgithub-actionsBot removed the type:chore Chore / small hygiene change label Jul 29, 2026
@github-actionsgithub-actionsBot added the type:chore Chore / small hygiene change label Jul 29, 2026
@ashleyshaw

Copy link
Copy Markdown
MemberAuthor

@Mergifyio queue

@ashleyshaw
ashleyshaw removed the request for review from krugazulJuly 29, 2026 19:43
@mergify

mergifyBot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • 🟠 Waiting for queue conditions
  • ⏳ Enter queue
  • ⏳ Run checks
  • ⏳ Merge
Waiting for
  • -closed [📌 queue requirement]
  • any of: [🔀 queue conditions]
    • check-neutral = Validate PR Template / validate-pr-template
    • check-skipped = Validate PR Template / validate-pr-template
    • check-success = Validate PR Template / validate-pr-template
All conditions
  • -closed [📌 queue requirement]
  • any of [🔀 queue conditions]:
    • all of [📌 queue conditions of queue rule dependabot-develop]:
      • any of [🛡 GitHub branch protection]:
        • check-neutral = Validate PR Template / validate-pr-template
        • check-skipped = Validate PR Template / validate-pr-template
        • check-success = Validate PR Template / validate-pr-template
  • -conflict [📌 queue requirement]
  • -draft [📌 queue requirement]
  • any of [📌 queue -> configuration change requirements]:
    • -mergify-configuration-changed
    • check-success = Configuration changed
  • any of [📌 queue requirement]:
    • check-neutral = Mergify Merge Protections
    • check-skipped = Mergify Merge Protections
    • check-success = Mergify Merge Protections

@github-actionsgithub-actionsBot removed the type:chore Chore / small hygiene change label Jul 29, 2026
@ashleyshaw
ashleyshaw merged commit 3c3d130 into developJul 29, 2026
30 of 31 checks passed
@ashleyshaw
ashleyshaw deleted the chore/add-issue-health-audit-workflow branch July 29, 2026 20:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:ciBuild and CI pipelinesarea:documentationDocs & guidesarea:labelsLabel governance and routinglang:jsJavaScript/TypeScriptlang:mdMarkdown content/docsmeta:needs-changelogRequires a changelog entry before mergepriority:normalDefault prioritystatus:needs-reviewAwaiting code reviewtype:featureFeature or enhancement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chore(ci): issue health audit workflow — bulk DoD check and label enforcement

1 participant

@ashleyshaw