diff --git a/docs/ECC-2.0-GA-ROADMAP.md b/docs/ECC-2.0-GA-ROADMAP.md index 8f556a44..1be86787 100644 --- a/docs/ECC-2.0-GA-ROADMAP.md +++ b/docs/ECC-2.0-GA-ROADMAP.md @@ -24,6 +24,12 @@ As of 2026-05-18: local `docs/drafts/` directory. The May 18 sync also refreshed `scripts/work-items.js sync-github` across all five tracked repos, leaving no open or blocked local work items. +- Owner-wide queue cleanup is also inside the requested budget: + `docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md` records the + live `gh search` sweep that closed 24 stale dependency-bot PRs and 72 stale + legacy payments/0EM roadmap issues, leaving 9 open PRs and 5 open issues + across the `affaan-m` owner namespace. Archived repos touched during stale + PR closure were restored to archived state. - GitHub discussions are current across those tracked repos: `affaan-m/everything-claude-code` has 58 total discussions and 0 without maintainer touch after May 15 maintainer updates on #73 and #1239; AgentShield, diff --git a/docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md b/docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md index 5b0917b5..e11f44ab 100644 --- a/docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md +++ b/docs/releases/2.0.0-rc.1/operator-readiness-dashboard-2026-05-18.md @@ -2,8 +2,8 @@ This dashboard is generated by `npm run operator:dashboard`. It is an operator snapshot, not release approval. -Generated: 2026-05-18T09:38:23.764Z -Commit: 5e8f412cb53f7a979d60aefc39978bbf79ac0bf3 +Generated: 2026-05-18T10:14:46.229Z +Commit: feeaa97511afc274675374fba2f40631a4a099a7 Status: work remaining ## Current Status @@ -13,16 +13,16 @@ Status: work remaining | PR queue | Current | 0 open PRs across tracked repos | | Issue queue | Current | 0 open issues across tracked repos | | Discussions | Current | 0 need maintainer touch; 0 missing accepted answer | -| Local worktree | Current | 0 blocking dirty files; 1 ignored dirty entries | -| Dashboard generation | Current | platform audit ready: true; GitHub skipped: false | +| Local worktree | Needs work | 5 blocking dirty files; 1 ignored dirty entries | +| Dashboard generation | Needs work | platform audit ready: false; GitHub skipped: false | | Publication | Not complete | release, npm, plugin, billing, and announcement gates are tracked below | ## Prompt-To-Artifact Checklist | Objective requirement | Artifact or gate | Status | Evidence | Gap | | --- | --- | --- | --- | --- | -| Keep public PRs below 20 | scripts/platform-audit.js live GitHub sweep | current | 0 open PRs across 5 tracked repos | repeat before release | -| Keep public issues below 20 | scripts/platform-audit.js live GitHub sweep | current | 0 open issues across 5 tracked repos | repeat before release | +| Keep public PRs below 20 | scripts/platform-audit.js live GitHub sweep plus owner-wide queue cleanup ledger | current | 0 open PRs across 5 tracked repos; 9 owner-wide open PRs after cleanup | repeat platform:audit and owner-wide gh search before release | +| Keep public issues below 20 | scripts/platform-audit.js live GitHub sweep plus owner-wide queue cleanup ledger | current | 0 open issues across 5 tracked repos; 5 owner-wide open issues after cleanup | repeat platform:audit and owner-wide gh search before release | | Respond and manage repository discussions | scripts/platform-audit.js discussion summary | current | 0 need maintainer touch; 0 answerable discussions missing accepted answer | repeat before release | | Build ITO-44 completion dashboard into a repeatable command | npm run operator:dashboard | complete | operator:dashboard package script exists | keep generated dashboard attached to publication evidence | | ECC 2.0 preview pack ready | docs/releases/2.0.0-rc.1/preview-pack-manifest.md | current | preview pack manifest and deterministic smoke gate are in-tree | repeat clean-checkout preview-pack smoke before publication | diff --git a/docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md b/docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md new file mode 100644 index 00000000..f5eb7cd5 --- /dev/null +++ b/docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md @@ -0,0 +1,49 @@ +# Owner-Wide Queue Cleanup - 2026-05-18 + +This note records the live GitHub queue cleanup outside the five ECC release +repos tracked by `scripts/platform-audit.js`. + +## Commands + +```bash +gh search prs --owner affaan-m --state open --json repository,number,title,url,author,updatedAt --limit 100 +gh search issues --owner affaan-m --state open --json repository,number,title,url,updatedAt --limit 100 +``` + +## Result + +- Owner-wide open PRs after cleanup: 9. +- Owner-wide open issues after cleanup: 5. +- Stale dependency-bot PRs closed: 24. +- Stale legacy payments/0EM roadmap issues closed: 72. +- Archived repos temporarily unarchived for stale dependency PR closure and + restored to archived state: + `affaan-m/stoictradingAI`, `affaan-m/dprc-autotrader-v2`, + `affaan-m/polycule-secure`, and `affaan-m/pragmAItism_defAInce`. + +## Remaining Open PRs + +- `affaan-m/dprc-autotrader-v2#5`: feat: add dprc-autotrader-v2 ECC bundle +- `affaan-m/x-algorithm-score#2`: Add onboarding flow, history tracking, and dashboard analytics +- `affaan-m/dexploy#28`: feat: add dexploy skill +- `affaan-m/zenith#5`: feat: add zenith skill +- `affaan-m/zenith#4`: fix: unchecked race condition in websocket to webhook stream +- `affaan-m/affaan-m#1`: Update README.md +- `affaan-m/affaanmustafa.com#1`: Update name in Wrangler configuration file to match deployed Worker +- `affaan-m/0em-payments-dashboard#11`: Update name in Wrangler configuration file to match deployed Worker +- `affaan-m/0em-payments-dashboard#3`: Update name in Wrangler configuration file to match deployed Worker + +## Remaining Open Issues + +- `affaan-m/dprc-autotrader-v2#3`: MEEET STATE - On-Chain Economy for AI Agents +- `affaan-m/stoictradingAI#20`: Quick Q: your #1 friction in Solana bot execution? +- `affaan-m/dexploy#27`: Generate Skill from Repo Analysis +- `affaan-m/dexploy#25`: Progress on the deployments problem so far +- `affaan-m/telegram-mcp-ts#1`: review the updates and the workflow before connection with the frontend + +## Disposition + +The closed dependency PRs were stale generated version bumps and should be +regenerated from current bases if still needed. The closed legacy payments/0EM +issues were old planning items superseded by the ECC Tools native-payments, +hosted analysis, billing-readback, and Linear/project roadmap lanes. diff --git a/docs/stale-pr-salvage-ledger.md b/docs/stale-pr-salvage-ledger.md index c79d50eb..3c8c3406 100644 --- a/docs/stale-pr-salvage-ledger.md +++ b/docs/stale-pr-salvage-ledger.md @@ -108,6 +108,21 @@ porting. | #1682/#1701 | Strategic compact hook-path fixes were merged directly or superseded by current docs fixes. | | JARVIS #4/#5/#6 | Stale failing dependency-only PRs; future dependency state should be regenerated by Dependabot. | +## 2026-05-18 Owner-Wide Queue Cleanup + +The ECC release repos were already clean, but an owner-wide `gh search` sweep +found stale queues in older public/private projects. The cleanup closed 24 +stale dependency-bot PRs and 72 stale legacy payments/0EM roadmap issues, +leaving 9 open PRs and 5 open issues across the `affaan-m` owner namespace. +The detailed before/after evidence and remaining queue are recorded in +`docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md`. + +| Scope | Disposition | +| --- | --- | +| Dependabot PRs in `stoictradingAI`, `Behavioral_RL`, `dprc-autotrader-v2`, `x-algorithm-score`, `polycule-secure`, and `pragmAItism_defAInce` | Skipped as stale generated dependency bumps; regenerate from current base if still needed. | +| Legacy issues in `payments0-api`, `payments0-sdk`, `agent-payments-gateway`, `0EM_Frontend`, `0em-payments-dashboard`, and `yield-optimizer` | Superseded by ECC Tools native-payments, hosted analysis, billing-readback, and Linear/project roadmap lanes. | +| Archived repos touched for PR closure | `stoictradingAI`, `dprc-autotrader-v2`, `polycule-secure`, and `pragmAItism_defAInce` were restored to archived state after stale PR closure. | + ## Skipped | Source PR | Reason | diff --git a/scripts/operator-readiness-dashboard.js b/scripts/operator-readiness-dashboard.js index 96a76e80..0b5d67c7 100644 --- a/scripts/operator-readiness-dashboard.js +++ b/scripts/operator-readiness-dashboard.js @@ -512,6 +512,17 @@ function buildRequirement(id, requirement, artifact, status, evidence, gap) { return { id, requirement, artifact, status, evidence, gap }; } +function extractLabeledCount(text, label) { + const pattern = new RegExp(`${label.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}:\\s*(\\d+)`, 'i'); + const match = text.match(pattern); + if (!match) { + return null; + } + + const parsed = Number.parseInt(match[1], 10); + return Number.isFinite(parsed) ? parsed : null; +} + function isCurrentOrComplete(status) { return status === 'current' || status === 'complete'; } @@ -521,6 +532,7 @@ function buildRequirements(rootDir, platformReport) { const publicationReadiness = readText(rootDir, 'docs/releases/2.0.0-rc.1/publication-readiness.md'); const namingMatrix = readText(rootDir, 'docs/releases/2.0.0-rc.1/naming-and-publication-matrix.md'); const releaseUrlLedger = readText(rootDir, 'docs/releases/2.0.0-rc.1/release-url-ledger-2026-05-18.md'); + const ownerQueueCleanup = readText(rootDir, 'docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md'); const previewManifest = readText(rootDir, 'docs/releases/2.0.0-rc.1/preview-pack-manifest.md'); const previewPackSmoke = readText(rootDir, 'scripts/preview-pack-smoke.js'); const progressSync = readText(rootDir, 'docs/architecture/progress-sync-contract.md'); @@ -550,9 +562,22 @@ function buildRequirements(rootDir, platformReport) { && fileExists(rootDir, 'skills/hermes-imports/SKILL.md'); const githubLive = !platformReport.github.skipped && platformReport.github.totals.errors === 0; - const queuesCurrent = githubLive - && platformReport.github.totals.openPrs <= platformReport.thresholds.maxOpenPrs + const ownerWideOpenPrs = extractLabeledCount(ownerQueueCleanup, 'Owner-wide open PRs after cleanup'); + const ownerWideOpenIssues = extractLabeledCount(ownerQueueCleanup, 'Owner-wide open issues after cleanup'); + const trackedPrQueueCurrent = githubLive + && platformReport.github.totals.openPrs <= platformReport.thresholds.maxOpenPrs; + const trackedIssueQueueCurrent = githubLive && platformReport.github.totals.openIssues <= platformReport.thresholds.maxOpenIssues; + const ownerPrQueueCurrent = ownerWideOpenPrs === null + || ownerWideOpenPrs <= platformReport.thresholds.maxOpenPrs; + const ownerIssueQueueCurrent = ownerWideOpenIssues === null + || ownerWideOpenIssues <= platformReport.thresholds.maxOpenIssues; + const ownerPrEvidence = ownerWideOpenPrs === null + ? '' + : `; ${ownerWideOpenPrs} owner-wide open PRs after cleanup`; + const ownerIssueEvidence = ownerWideOpenIssues === null + ? '' + : `; ${ownerWideOpenIssues} owner-wide open issues after cleanup`; const discussionsCurrent = githubLive && platformReport.github.totals.discussionsNeedingMaintainerTouch === 0 && platformReport.github.totals.discussionsMissingAcceptedAnswer === 0; @@ -561,22 +586,30 @@ function buildRequirements(rootDir, platformReport) { buildRequirement( 'public-pr-budget', 'Keep public PRs below 20', - 'scripts/platform-audit.js live GitHub sweep', - queuesCurrent ? 'current' : 'in_progress', + ownerWideOpenPrs === null + ? 'scripts/platform-audit.js live GitHub sweep' + : 'scripts/platform-audit.js live GitHub sweep plus owner-wide queue cleanup ledger', + trackedPrQueueCurrent && ownerPrQueueCurrent ? 'current' : 'in_progress', githubLive - ? `${platformReport.github.totals.openPrs} open PRs across ${platformReport.github.repos.length} tracked repos` + ? `${platformReport.github.totals.openPrs} open PRs across ${platformReport.github.repos.length} tracked repos${ownerPrEvidence}` : 'live GitHub queue readback was skipped or failed', - queuesCurrent ? 'repeat before release' : 'run live platform:audit and drain PR queue' + trackedPrQueueCurrent && ownerPrQueueCurrent + ? 'repeat platform:audit and owner-wide gh search before release' + : 'run live platform:audit and owner-wide gh search, then drain PR queue' ), buildRequirement( 'public-issue-budget', 'Keep public issues below 20', - 'scripts/platform-audit.js live GitHub sweep', - queuesCurrent ? 'current' : 'in_progress', + ownerWideOpenIssues === null + ? 'scripts/platform-audit.js live GitHub sweep' + : 'scripts/platform-audit.js live GitHub sweep plus owner-wide queue cleanup ledger', + trackedIssueQueueCurrent && ownerIssueQueueCurrent ? 'current' : 'in_progress', githubLive - ? `${platformReport.github.totals.openIssues} open issues across ${platformReport.github.repos.length} tracked repos` + ? `${platformReport.github.totals.openIssues} open issues across ${platformReport.github.repos.length} tracked repos${ownerIssueEvidence}` : 'live GitHub queue readback was skipped or failed', - queuesCurrent ? 'repeat before release' : 'run live platform:audit and drain issue queue' + trackedIssueQueueCurrent && ownerIssueQueueCurrent + ? 'repeat platform:audit and owner-wide gh search before release' + : 'run live platform:audit and owner-wide gh search, then drain issue queue' ), buildRequirement( 'repository-discussions', diff --git a/tests/scripts/operator-readiness-dashboard.test.js b/tests/scripts/operator-readiness-dashboard.test.js index c59b5cc2..b0762f22 100644 --- a/tests/scripts/operator-readiness-dashboard.test.js +++ b/tests/scripts/operator-readiness-dashboard.test.js @@ -95,6 +95,12 @@ function seedRepo(rootDir, overrides = {}) { 'PR queue', 'Not complete' ].join('\n'), + 'docs/releases/2.0.0-rc.1/owner-queue-cleanup-2026-05-18.md': [ + 'Owner-wide open PRs after cleanup: 9.', + 'Owner-wide open issues after cleanup: 5.', + 'Stale dependency-bot PRs closed: 24.', + 'Stale legacy payments/0EM roadmap issues closed: 72.' + ].join('\n'), 'docs/HERMES-SETUP.md': 'Hermes setup Public Release Candidate Scope', 'skills/hermes-imports/SKILL.md': 'Hermes imports Sanitization Checklist Do not ship raw workspace exports Output Contract', 'docs/stale-pr-salvage-ledger.md': [