claude-code-session-manager 0.110.0 → 0.112.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/dist/assets/{AgentLibrary-Cm6MrOnF.js → AgentLibrary-RwPvEgqm.js} +2 -2
- package/dist/assets/{Button-CGVncJ6a.js → Button-36j3PzYv.js} +1 -1
- package/dist/assets/{DataModel-C3hlMoa8.js → DataModel-DUhANo4l.js} +1 -1
- package/dist/assets/{History-CTyfGNKn.js → History-BeZzNjmv.js} +2 -2
- package/dist/assets/{Hooks-BXxCBibx.js → Hooks-iQ8845Hp.js} +3 -3
- package/dist/assets/{Library-aCs7zxAg.js → Library-DPE1h-1L.js} +6 -6
- package/dist/assets/{ListDetail-B9Hqk1_f.js → ListDetail-PStOuQAo.js} +1 -1
- package/dist/assets/{MarkdownEditor-Djfgp32k.js → MarkdownEditor-DPw-N2-m.js} +1 -1
- package/dist/assets/{McpServers-8HQC6QgR.js → McpServers-CUyRTNep.js} +2 -2
- package/dist/assets/{Memory-c4SVE3l2.js → Memory-bZ2xjBGy.js} +3 -3
- package/dist/assets/{Panel-BEQTwE4z.js → Panel-_VZ_uXNg.js} +1 -1
- package/dist/assets/{Permissions-BaYzgZtc.js → Permissions-PPRmfNbK.js} +3 -3
- package/dist/assets/{Plugins-DnXsVau7.js → Plugins-BFcvfvlx.js} +2 -2
- package/dist/assets/{ProvenanceBadge-CT2vWps1.js → ProvenanceBadge-B1WUknak.js} +1 -1
- package/dist/assets/RemoteMachines-D5V0lzgW.js +3 -0
- package/dist/assets/{SaveBar-DwcHt3iR.js → SaveBar-Dw64FVdM.js} +1 -1
- package/dist/assets/{Scheduler-D6Gcuo0M.js → Scheduler-C8s_pJ3I.js} +9 -9
- package/dist/assets/{ScopeSwitcher-CgvWDc9Y.js → ScopeSwitcher-D-nKDMAE.js} +1 -1
- package/dist/assets/{Settings-CJoogVAB.js → Settings-CQSrR4mO.js} +4 -4
- package/dist/assets/{SkillReferenceGraph-4fq01kxq.js → SkillReferenceGraph-BbZFMHim.js} +1 -1
- package/dist/assets/{Skills-BU4ZX4h4.js → Skills-Bzyrh6EQ.js} +1 -1
- package/dist/assets/SystemPrompt-DP6i3Dx0.js +1 -0
- package/dist/assets/TagLibrary-iip0C6Bl.js +1 -0
- package/dist/assets/{TiptapBody-DVyBsfsT.js → TiptapBody-Cr-hxX8L.js} +1 -1
- package/dist/assets/Toggle-7WpPzcZH.js +1 -0
- package/dist/assets/{ViewTabs-BLHjKUv-.js → ViewTabs-9lQCRwWJ.js} +1 -1
- package/dist/assets/{historyTotals-BXDd3EzP.js → historyTotals-BrFxw5J1.js} +1 -1
- package/dist/assets/{index-CuiU3I-8.js → index-CTBpf-26.js} +250 -249
- package/dist/assets/{settingsSchema-DD4bc5cT.js → settingsSchema-Dh5Kl7VO.js} +1 -1
- package/dist/assets/{useAgentsDirWatch-DMQ_XZtr.js → useAgentsDirWatch-CMpx0d04.js} +1 -1
- package/dist/assets/{useRemotePeers-C9NfteSD.js → useRemotePeers-CI2axd-L.js} +1 -1
- package/dist/index.html +1 -1
- package/package.json +3 -2
- package/plugins/CLAUDE.md +5 -8
- package/plugins/session-manager-dev/.claude-plugin/plugin.json +3 -6
- package/plugins/session-manager-dev/skills/builder/1-classify-and-bump/SKILL.md +2 -2
- package/plugins/session-manager-dev/skills/builder/SKILL.md +2 -3
- package/plugins/session-manager-dev/skills/develop/SKILL.md +1 -1
- package/plugins/session-manager-dev/skills/develop/standards.md +3 -3
- package/scripts/README.md +3 -3
- package/scripts/audit-ops-hygiene.cjs +4 -4
- package/scripts/hooks/guard-destructive-git.cjs +4 -4
- package/scripts/hooks/guard-inline-implementation.cjs +1 -1
- package/scripts/hooks/guard-prd-writes.cjs +2 -2
- package/scripts/hooks/lib/guard-destructive-git-policy.cjs +1 -1
- package/scripts/mint-epic.cjs +2 -2
- package/scripts/scheduler-mcp-server.cjs +4 -4
- package/src/main/agentLibrary.cjs +5 -5
- package/src/main/agentsIpc.cjs +76 -0
- package/src/main/build-info.json +4 -4
- package/src/main/chatRunner.cjs +12 -12
- package/src/main/config.cjs +2 -2
- package/src/main/crashDiagnostics.cjs +2 -2
- package/src/main/docEdit.cjs +5 -5
- package/src/main/files.cjs +2 -2
- package/src/main/git.cjs +1 -1
- package/src/main/health.cjs +20 -18
- package/src/main/heapSnapshot.cjs +1 -1
- package/src/main/historyAggregator.cjs +2 -2
- package/src/main/index.cjs +44 -132
- package/src/main/ipcSchemas.cjs +10 -10
- package/src/main/lib/CLAUDE.md +48 -0
- package/src/main/lib/activeSessions.cjs +1 -1
- package/src/main/lib/classifyPromptTicket.cjs +2 -2
- package/src/main/lib/{agentModelResolve.cjs → claude/agentModelResolve.cjs} +7 -7
- package/src/main/lib/{claudeBin.cjs → claude/claudeBin.cjs} +4 -4
- package/src/main/lib/{effectiveModelInfo.cjs → claude/effectiveModelInfo.cjs} +9 -9
- package/src/main/lib/{modelCatalog.cjs → claude/modelCatalog.cjs} +3 -3
- package/src/main/lib/{rateLimitDetect.cjs → claude/rateLimitDetect.cjs} +1 -1
- package/src/main/lib/{rateLimitWindow.cjs → claude/rateLimitWindow.cjs} +1 -1
- package/src/main/lib/{runClaudeP.cjs → claude/runClaudeP.cjs} +1 -1
- package/src/main/lib/credentials.cjs +3 -3
- package/src/main/lib/cwdClassify.cjs +1 -1
- package/src/main/lib/{activeIndexMerge.cjs → epic/activeIndexMerge.cjs} +3 -3
- package/src/main/lib/{activeIndexRebuild.cjs → epic/activeIndexRebuild.cjs} +1 -1
- package/src/main/lib/{delegationReadiness.cjs → epic/delegationReadiness.cjs} +21 -29
- package/src/main/lib/{epicContextDigest.cjs → epic/epicContextDigest.cjs} +1 -1
- package/src/main/lib/{epicDelegationStats.cjs → epic/epicDelegationStats.cjs} +2 -2
- package/src/main/lib/{epicMint.cjs → epic/epicMint.cjs} +11 -11
- package/src/main/lib/{epicSpawnPlan.cjs → epic/epicSpawnPlan.cjs} +3 -3
- package/src/main/lib/{epicStatusMirror.cjs → epic/epicStatusMirror.cjs} +2 -2
- package/src/main/lib/{epicTranscriptDiagnostic.cjs → epic/epicTranscriptDiagnostic.cjs} +2 -2
- package/src/main/lib/{epicTranscriptPath.cjs → epic/epicTranscriptPath.cjs} +2 -2
- package/src/main/lib/{epicValidationHook.cjs → epic/epicValidationHook.cjs} +3 -3
- package/src/main/lib/{epicWorktreeBoot.cjs → epic/epicWorktreeBoot.cjs} +1 -1
- package/src/main/lib/{epicWorktreeMerge.cjs → epic/epicWorktreeMerge.cjs} +3 -3
- package/src/main/lib/{epicWorktreeMint.cjs → epic/epicWorktreeMint.cjs} +3 -3
- package/src/main/lib/{epicWorktreeProjectConfig.cjs → epic/epicWorktreeProjectConfig.cjs} +4 -4
- package/src/main/lib/{promptSessionsCreateEpic.cjs → epic/promptSessionsCreateEpic.cjs} +4 -4
- package/src/main/lib/{crossProjectFeedback.cjs → feedback-remote/crossProjectFeedback.cjs} +7 -7
- package/src/main/lib/{customerFeedbackClient.cjs → feedback-remote/customerFeedbackClient.cjs} +3 -3
- package/src/main/lib/{customerFeedbackInbox.cjs → feedback-remote/customerFeedbackInbox.cjs} +2 -2
- package/src/main/lib/{customerFeedbackIpc.cjs → feedback-remote/customerFeedbackIpc.cjs} +1 -1
- package/src/main/lib/{localAdminHttp.cjs → feedback-remote/localAdminHttp.cjs} +2 -2
- package/src/main/lib/{macroAdminRoutes.cjs → feedback-remote/macroAdminRoutes.cjs} +1 -1
- package/src/main/lib/{projectHomeAdminRoutes.cjs → feedback-remote/projectHomeAdminRoutes.cjs} +4 -4
- package/src/main/lib/{relayClientAuth.cjs → feedback-remote/relayClientAuth.cjs} +2 -2
- package/src/main/lib/{remoteClientSessions.cjs → feedback-remote/remoteClientSessions.cjs} +1 -1
- package/src/main/lib/{gitWorktree.cjs → git/gitWorktree.cjs} +7 -7
- package/src/main/lib/historyRollup.cjs +1 -1
- package/src/main/lib/importReferences.cjs +1 -1
- package/src/main/lib/machineProfile.cjs +1 -1
- package/src/main/lib/openExternalApp.cjs +1 -1
- package/src/main/lib/opsOwnership.cjs +3 -3
- package/src/main/lib/{agentPersonaSchema.cjs → persona-macro/agentPersonaSchema.cjs} +2 -2
- package/src/main/lib/{builtinMacros.cjs → persona-macro/builtinMacros.cjs} +2 -2
- package/src/main/lib/{macroLibrary.cjs → persona-macro/macroLibrary.cjs} +5 -5
- package/src/main/lib/{personaMerge.cjs → persona-macro/personaMerge.cjs} +4 -4
- package/src/main/lib/{shippedPersonaSeeds.cjs → persona-macro/shippedPersonaSeeds.cjs} +11 -0
- package/src/main/lib/{prdAdminRoutes.cjs → prd/prdAdminRoutes.cjs} +7 -7
- package/src/main/lib/{prdAgentType.cjs → prd/prdAgentType.cjs} +3 -3
- package/src/main/lib/{prdCreate.cjs → prd/prdCreate.cjs} +12 -12
- package/src/main/lib/{prdDeclaredPaths.cjs → prd/prdDeclaredPaths.cjs} +1 -1
- package/src/main/lib/{prdGateFiles.cjs → prd/prdGateFiles.cjs} +1 -1
- package/src/main/lib/{prdLocations.cjs → prd/prdLocations.cjs} +2 -2
- package/src/main/lib/{prdMigration.cjs → prd/prdMigration.cjs} +3 -3
- package/src/main/lib/prereqs.cjs +2 -2
- package/src/main/lib/{instanceLock.cjs → process/instanceLock.cjs} +4 -11
- package/src/main/lib/{pidAlive.cjs → process/pidAlive.cjs} +1 -1
- package/src/main/lib/{procName.cjs → process/procName.cjs} +2 -2
- package/src/main/lib/{timeoutShim.cjs → process/timeoutShim.cjs} +1 -1
- package/src/main/lib/projectRootResolve.cjs +1 -1
- package/src/main/lib/promptSessionSchema.cjs +1 -1
- package/src/main/lib/{definitionOfDone.cjs → scheduler/definitionOfDone.cjs} +6 -12
- package/src/main/lib/{fixChainDepth.cjs → scheduler/fixChainDepth.cjs} +1 -1
- package/src/main/lib/{jobDirtFilter.cjs → scheduler/jobDirtFilter.cjs} +1 -1
- package/src/main/lib/{jobSupervisorRecord.cjs → scheduler/jobSupervisorRecord.cjs} +1 -1
- package/src/main/lib/{launchFailure.cjs → scheduler/launchFailure.cjs} +2 -2
- package/src/main/lib/{queueStore.cjs → scheduler/queueStore.cjs} +6 -6
- package/src/main/lib/{quietMachineLease.cjs → scheduler/quietMachineLease.cjs} +1 -1
- package/src/main/lib/{rcaReport.cjs → scheduler/rcaReport.cjs} +4 -4
- package/src/main/lib/{reaperHelpers.cjs → scheduler/reaperHelpers.cjs} +3 -3
- package/src/main/lib/{reservationExpiry.cjs → scheduler/reservationExpiry.cjs} +4 -11
- package/src/main/lib/{reviewNotice.cjs → scheduler/reviewNotice.cjs} +1 -1
- package/src/main/lib/{scheduleJobTransitions.cjs → scheduler/scheduleJobTransitions.cjs} +3 -3
- package/src/main/lib/{schedulerBatch.cjs → scheduler/schedulerBatch.cjs} +2 -2
- package/src/main/lib/{schedulerConfig.cjs → scheduler/schedulerConfig.cjs} +1 -1
- package/src/main/lib/{schedulerRuntimeState.cjs → scheduler/schedulerRuntimeState.cjs} +1 -1
- package/src/main/lib/{sessionSlots.cjs → scheduler/sessionSlots.cjs} +2 -2
- package/src/main/lib/{upgradeDrain.cjs → scheduler/upgradeDrain.cjs} +8 -11
- package/src/main/lib/{watchdogHelpers.cjs → scheduler/watchdogHelpers.cjs} +5 -19
- package/src/main/lib/{auditLog.cjs → telemetry/auditLog.cjs} +1 -1
- package/src/main/lib/{opsErrorLog.cjs → telemetry/opsErrorLog.cjs} +4 -4
- package/src/main/lib/{telemetryBacklog.cjs → telemetry/telemetryBacklog.cjs} +4 -4
- package/src/main/lib/{telemetryBoot.cjs → telemetry/telemetryBoot.cjs} +1 -1
- package/src/main/lib/{telemetryClient.cjs → telemetry/telemetryClient.cjs} +4 -4
- package/src/main/lib/{telemetrySettings.cjs → telemetry/telemetrySettings.cjs} +1 -1
- package/src/main/logs.cjs +1 -1
- package/src/main/mcpStatus.cjs +2 -2
- package/src/main/memoryAggregate.cjs +3 -3
- package/src/main/memoryTool.cjs +1 -1
- package/src/main/otel.cjs +2 -2
- package/src/main/pluginInstall.cjs +29 -3
- package/src/main/projectBrief.cjs +6 -6
- package/src/main/projectPages.cjs +1 -1
- package/src/main/promptSessionEvents.cjs +2 -2
- package/src/main/pty.cjs +7 -7
- package/src/main/queueOps.cjs +6 -6
- package/src/main/remoteClient.cjs +4 -4
- package/src/main/remoteClientIpc.cjs +1 -1
- package/src/main/runVerify.cjs +1 -1
- package/src/main/scheduler/CLAUDE.md +26 -0
- package/src/main/scheduler/budget.cjs +576 -0
- package/src/main/scheduler/gitTreeGuard.cjs +672 -0
- package/src/main/scheduler/prdParser.cjs +4 -4
- package/src/main/scheduler/prdPaths.cjs +487 -0
- package/src/main/scheduler/reviewLadder.cjs +1011 -0
- package/src/main/scheduler/starvation.cjs +390 -0
- package/src/main/scheduler.cjs +289 -3311
- package/src/main/seedAgentPersonas.cjs +5 -5
- package/src/main/seedDevPlugin.cjs +70 -3
- package/src/main/seedSchedulerMcp.cjs +2 -2
- package/src/main/supervisor.cjs +5 -5
- package/src/main/telemetryIpc.cjs +51 -0
- package/src/main/transcripts.cjs +3 -3
- package/src/main/updaterIpc.cjs +1 -1
- package/src/main/usage.cjs +1 -1
- package/src/main/watchers.cjs +1 -1
- package/src/main/webRemote.cjs +7 -7
- package/src/preload/api.d.ts +8 -8
- package/src/preload/index.cjs +3 -3
- package/src/seed/agents/demo-video-builder.md +62 -19
- package/dist/assets/RemoteMachines-DHJZfdJC.js +0 -3
- package/dist/assets/SystemPrompt-BCEyMSEq.js +0 -1
- package/dist/assets/TagLibrary-m3It8Oal.js +0 -1
- package/dist/assets/Toggle-In_AExPV.js +0 -1
- package/plugins/session-manager-dev/skills/blog-for-project-feature/0-select/SKILL.md +0 -39
- package/plugins/session-manager-dev/skills/blog-for-project-feature/1-research/SKILL.md +0 -37
- package/plugins/session-manager-dev/skills/blog-for-project-feature/2-storyboard/SKILL.md +0 -64
- package/plugins/session-manager-dev/skills/blog-for-project-feature/3-capture/SKILL.md +0 -52
- package/plugins/session-manager-dev/skills/blog-for-project-feature/4-draft-copy/SKILL.md +0 -37
- package/plugins/session-manager-dev/skills/blog-for-project-feature/5-illustrate/SKILL.md +0 -50
- package/plugins/session-manager-dev/skills/blog-for-project-feature/6-compose/SKILL.md +0 -51
- package/plugins/session-manager-dev/skills/blog-for-project-feature/7-review/SKILL.md +0 -54
- package/plugins/session-manager-dev/skills/blog-for-project-feature/SKILL.md +0 -144
- package/plugins/session-manager-dev/skills/blog-for-project-feature/feature.config.yaml +0 -90
- package/plugins/session-manager-dev/skills/discover-features/SKILL.md +0 -95
- package/plugins/session-manager-dev/skills/explain-to-me/SKILL.md +0 -205
- package/plugins/session-manager-dev/skills/explain-to-me/assets/style-reference.html +0 -163
- package/plugins/session-manager-dev/skills/find-opportunity/SKILL.md +0 -83
- package/plugins/session-manager-dev/skills/issue-address/0-select/0-fetch-pool/SKILL.md +0 -38
- package/plugins/session-manager-dev/skills/issue-address/0-select/1-reject-fixed/SKILL.md +0 -64
- package/plugins/session-manager-dev/skills/issue-address/0-select/2-reject-claimed/SKILL.md +0 -71
- package/plugins/session-manager-dev/skills/issue-address/0-select/3-rank-impact/SKILL.md +0 -39
- package/plugins/session-manager-dev/skills/issue-address/0-select/SKILL.md +0 -75
- package/plugins/session-manager-dev/skills/issue-address/1-confirm-open/SKILL.md +0 -39
- package/plugins/session-manager-dev/skills/issue-address/2-claim/SKILL.md +0 -57
- package/plugins/session-manager-dev/skills/issue-address/3-reproduce/SKILL.md +0 -40
- package/plugins/session-manager-dev/skills/issue-address/4-fix/SKILL.md +0 -33
- package/plugins/session-manager-dev/skills/issue-address/5-verify/SKILL.md +0 -40
- package/plugins/session-manager-dev/skills/issue-address/SKILL.md +0 -120
- package/plugins/session-manager-dev/skills/local-project-health/SKILL.md +0 -58
- package/plugins/session-manager-dev/skills/memory-sanitation/SKILL.md +0 -147
- package/plugins/session-manager-dev/skills/ops-sweep/SKILL.md +0 -137
- package/plugins/session-manager-dev/skills/pr-review-sweep/0-fetch/SKILL.md +0 -41
- package/plugins/session-manager-dev/skills/pr-review-sweep/1-classify/SKILL.md +0 -56
- package/plugins/session-manager-dev/skills/pr-review-sweep/2-check-fixed/SKILL.md +0 -49
- package/plugins/session-manager-dev/skills/pr-review-sweep/3-queue/SKILL.md +0 -57
- package/plugins/session-manager-dev/skills/pr-review-sweep/4-land-and-resolve/SKILL.md +0 -60
- package/plugins/session-manager-dev/skills/pr-review-sweep/SKILL.md +0 -124
- package/plugins/session-manager-dev/skills/pr-signal/SKILL.md +0 -67
- package/plugins/session-manager-dev/skills/project-status/SKILL.md +0 -243
- package/plugins/session-manager-dev/skills/requesting-code-review/SKILL.md +0 -98
- package/plugins/session-manager-dev/skills/requesting-code-review/code-reviewer.md +0 -146
- /package/src/main/lib/{agentEffortResolve.cjs → claude/agentEffortResolve.cjs} +0 -0
- /package/src/main/lib/{claudeCliCaps.cjs → claude/claudeCliCaps.cjs} +0 -0
- /package/src/main/lib/{usageCircuit.cjs → claude/usageCircuit.cjs} +0 -0
- /package/src/main/lib/{epicSpawnCwd.cjs → epic/epicSpawnCwd.cjs} +0 -0
- /package/src/main/lib/{customerFeedbackAdminRoutes.cjs → feedback-remote/customerFeedbackAdminRoutes.cjs} +0 -0
- /package/src/main/lib/{remoteE2eCrypto.cjs → feedback-remote/remoteE2eCrypto.cjs} +0 -0
- /package/src/main/lib/{branchSweep.cjs → git/branchSweep.cjs} +0 -0
- /package/src/main/lib/{gitExec.cjs → git/gitExec.cjs} +0 -0
- /package/src/main/lib/{jobWorktree.cjs → git/jobWorktree.cjs} +0 -0
- /package/src/main/lib/{jobWorktreeBootLive.cjs → git/jobWorktreeBootLive.cjs} +0 -0
- /package/src/main/lib/{jobWorktreeTerminalOrphanLive.cjs → git/jobWorktreeTerminalOrphanLive.cjs} +0 -0
- /package/src/main/lib/{personaImportHealth.cjs → persona-macro/personaImportHealth.cjs} +0 -0
- /package/src/main/lib/{depSlugResolve.cjs → prd/depSlugResolve.cjs} +0 -0
- /package/src/main/lib/{planValidator.cjs → prd/planValidator.cjs} +0 -0
- /package/src/main/lib/{prdAuthoringSeed.cjs → prd/prdAuthoringSeed.cjs} +0 -0
- /package/src/main/lib/{prdDisposition.cjs → prd/prdDisposition.cjs} +0 -0
- /package/src/main/lib/{prdFrontmatter.cjs → prd/prdFrontmatter.cjs} +0 -0
- /package/src/main/lib/{prdSizing.cjs → prd/prdSizing.cjs} +0 -0
- /package/src/main/lib/{workTypeLibrary.cjs → prd/workTypeLibrary.cjs} +0 -0
- /package/src/main/lib/{childWithLog.cjs → process/childWithLog.cjs} +0 -0
- /package/src/main/lib/{cleanEnv.cjs → process/cleanEnv.cjs} +0 -0
- /package/src/main/lib/{defaultShell.cjs → process/defaultShell.cjs} +0 -0
- /package/src/main/lib/{killTree.cjs → process/killTree.cjs} +0 -0
- /package/src/main/lib/{loginShellPath.cjs → process/loginShellPath.cjs} +0 -0
- /package/src/main/lib/{procIdentity.cjs → process/procIdentity.cjs} +0 -0
- /package/src/main/lib/{singleInstanceGuard.cjs → process/singleInstanceGuard.cjs} +0 -0
- /package/src/main/lib/{smProcNames.cjs → process/smProcNames.cjs} +0 -0
- /package/src/main/lib/{timeoutShimScript.cjs → process/timeoutShimScript.cjs} +0 -0
- /package/src/main/lib/{winSpawn.cjs → process/winSpawn.cjs} +0 -0
- /package/src/main/lib/{adoptedRunSupervisor.cjs → scheduler/adoptedRunSupervisor.cjs} +0 -0
- /package/src/main/lib/{dispatchLoop.cjs → scheduler/dispatchLoop.cjs} +0 -0
- /package/src/main/lib/{dodDrainHook.cjs → scheduler/dodDrainHook.cjs} +0 -0
- /package/src/main/lib/{fixPlanSlug.cjs → scheduler/fixPlanSlug.cjs} +0 -0
- /package/src/main/lib/{gateAuthority.cjs → scheduler/gateAuthority.cjs} +0 -0
- /package/src/main/lib/{landedSinceRun.cjs → scheduler/landedSinceRun.cjs} +0 -0
- /package/src/main/lib/{loadGate.cjs → scheduler/loadGate.cjs} +0 -0
- /package/src/main/lib/{needsReviewLedger.cjs → scheduler/needsReviewLedger.cjs} +0 -0
- /package/src/main/lib/{queueHealth.cjs → scheduler/queueHealth.cjs} +0 -0
- /package/src/main/lib/{queueHistory.cjs → scheduler/queueHistory.cjs} +0 -0
- /package/src/main/lib/{runLogRetention.cjs → scheduler/runLogRetention.cjs} +0 -0
- /package/src/main/lib/{scheduleJobSchema.cjs → scheduler/scheduleJobSchema.cjs} +0 -0
- /package/src/main/lib/{schedulerPaths.cjs → scheduler/schedulerPaths.cjs} +0 -0
- /package/src/main/lib/{terminalRunOutcome.cjs → scheduler/terminalRunOutcome.cjs} +0 -0
- /package/src/main/lib/{validationSentinels.cjs → scheduler/validationSentinels.cjs} +0 -0
- /package/src/main/lib/{crashTelemetry.cjs → telemetry/crashTelemetry.cjs} +0 -0
- /package/src/main/lib/{otlpTraceExporter.cjs → telemetry/otlpTraceExporter.cjs} +0 -0
- /package/src/main/lib/{telemetryConsent.cjs → telemetry/telemetryConsent.cjs} +0 -0
- /package/src/main/lib/{telemetryCounters.cjs → telemetry/telemetryCounters.cjs} +0 -0
- /package/src/main/lib/{atomicFs.cjs → util/atomicFs.cjs} +0 -0
- /package/src/main/lib/{encodeCwd.cjs → util/encodeCwd.cjs} +0 -0
- /package/src/main/lib/{expandHome.cjs → util/expandHome.cjs} +0 -0
- /package/src/main/lib/{extractJson.cjs → util/extractJson.cjs} +0 -0
- /package/src/main/lib/{fileTail.cjs → util/fileTail.cjs} +0 -0
- /package/src/main/lib/{headTailBuffer.cjs → util/headTailBuffer.cjs} +0 -0
- /package/src/main/lib/{kebabCase.cjs → util/kebabCase.cjs} +0 -0
- /package/src/main/lib/{loopDelay.cjs → util/loopDelay.cjs} +0 -0
- /package/src/main/lib/{lruCache.cjs → util/lruCache.cjs} +0 -0
- /package/src/main/lib/{withTimeout.cjs → util/withTimeout.cjs} +0 -0
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: issue-address:select:reject-claimed
|
|
3
|
-
description: Reject candidates already covered by a PR (open, OR closed-but-superseded-by-a-merged-successor) or already claimed by an assignee/comment/supersede-note — with every text-search hit manually confirmed before being trusted. Third sub-step of issue-address:select.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# issue-address:select:reject-claimed
|
|
7
|
-
|
|
8
|
-
## Steps
|
|
9
|
-
|
|
10
|
-
1. **Search for a PR that might already cover each surviving candidate — open AND
|
|
11
|
-
closed, not just open:**
|
|
12
|
-
```bash
|
|
13
|
-
gh pr list --repo "$(gh repo view --json nameWithOwner -q .nameWithOwner)" --state all --search "<N> in:body"
|
|
14
|
-
gh api search/issues -f q='repo:$(gh repo view --json nameWithOwner -q .nameWithOwner) is:pr <N>'
|
|
15
|
-
```
|
|
16
|
-
Also skim PR titles for matching subject matter (same file area, same symptom) — a PR
|
|
17
|
-
can fix an issue's bug without a formal `Closes #N` link. Searching only `state:open`
|
|
18
|
-
misses the real case found live: `#194` had two closed (not merged) PRs, `#203`/`#215`,
|
|
19
|
-
each superseded — but the actual fix landed in a *third*, later PR (`#251`) that neither
|
|
20
|
-
text-search-by-issue-number pass would find unless the closed ones are read first and
|
|
21
|
-
followed to what replaced them (step 3).
|
|
22
|
-
|
|
23
|
-
2. **Never trust a text-search hit without reading it.** This already produced a false
|
|
24
|
-
positive once: searching `"180 in:body"` matched PR #239 ("add automated price-anomaly
|
|
25
|
-
screen"), which had nothing to do with issue #180 — the digit string almost certainly
|
|
26
|
-
matched a line number or unrelated number elsewhere in that PR's body. For every
|
|
27
|
-
text-search hit:
|
|
28
|
-
- Open the matched PR's actual title + description.
|
|
29
|
-
- Confirm it genuinely addresses the same file area / same symptom the issue describes
|
|
30
|
-
— not just that the issue number appears somewhere in the text.
|
|
31
|
-
- If it's a false positive (number coincidence, unrelated context), **discard the match
|
|
32
|
-
and keep the candidate as unclaimed** — don't reject on a search artifact.
|
|
33
|
-
|
|
34
|
-
3. **For every closed-but-not-merged PR found in step 1, read its closing comment before
|
|
35
|
-
deciding the candidate survives.** A PR closed without merging is not automatically
|
|
36
|
-
"unclaimed again" — read why it closed:
|
|
37
|
-
```bash
|
|
38
|
-
gh pr view <PR#> --repo "$(gh repo view --json nameWithOwner -q .nameWithOwner)" --json state,mergedAt,closedAt,comments
|
|
39
|
-
```
|
|
40
|
-
- If the closing comment says the work was split/replaced ("затварям... но не защото
|
|
41
|
-
работата е отпаднала", "closing in favor of #N", "superseded by #N", "merged into
|
|
42
|
-
#N"), **follow the chain to whatever PR(s) it names**, and check *their* merge state
|
|
43
|
-
the same way. Keep following until you reach a terminal state (merged = reject as
|
|
44
|
-
already-fixed; still open = reject as already-covered; abandoned with no successor =
|
|
45
|
-
candidate survives).
|
|
46
|
-
- This chain can be more than one hop deep (found live: `#194`'s PR `#203` was split
|
|
47
|
-
into `#251`/`#252`/`#253`; a sibling PR `#215` was independently closed in favor of
|
|
48
|
-
the same `#251`) — don't stop at the first successor if its own comments point
|
|
49
|
-
further.
|
|
50
|
-
|
|
51
|
-
4. **Reject candidates already claimed by a person, or already noted as superseded in the
|
|
52
|
-
issue's OWN comments** (not just a linked PR's). Check `assignees` (non-empty =
|
|
53
|
-
explicit claim) and skim the issue's `comments` for:
|
|
54
|
-
- Claim language: "работя по това", "assigned to me", "I'll pick this up".
|
|
55
|
-
- Supersede/decompose language: "предлагам да се затвори в полза на", "closing in
|
|
56
|
-
favor of", "split into #N / #M / #P", "superseded by". (Found live: `#154`'s own
|
|
57
|
-
comment thread explicitly proposed closing it in favor of child issues `#156`/`#158`/
|
|
58
|
-
`#163` — a signal that lives in the issue's comments, not in any PR search at all.)
|
|
59
|
-
Reject on either signal — don't take work someone else already started or already
|
|
60
|
-
restructured, even informally.
|
|
61
|
-
|
|
62
|
-
5. **Search for a duplicate open issue** describing the same underlying bug under a
|
|
63
|
-
different number — `gh issue list --state open --search "<keywords>"`, same
|
|
64
|
-
confirm-before-trusting rule as step 2 applies here too. If a better-established
|
|
65
|
-
duplicate exists, flag it rather than silently picking one.
|
|
66
|
-
|
|
67
|
-
## Output
|
|
68
|
-
|
|
69
|
-
`survives` list (candidates cleared of PR/claim/supersede/duplicate overlap — including
|
|
70
|
-
resolved multi-hop PR chains — with any false-positive search hits explicitly noted as
|
|
71
|
-
discarded) handed to `issue-address:select:rank-impact`.
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: issue-address:select:rank-impact
|
|
3
|
-
description: Rank surviving candidates by a composite impact signal (priority label + community reactions + cross-references + repro quality), not label text alone, and output exactly one issue number. Final sub-step of issue-address:select.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# issue-address:select:rank-impact
|
|
7
|
-
|
|
8
|
-
## Steps
|
|
9
|
-
|
|
10
|
-
1. **Score each surviving candidate on multiple signals, not just its `priority:` label**
|
|
11
|
-
(a label-only heuristic silently mis-ranks an unlabeled-but-severe issue below a
|
|
12
|
-
labeled-but-minor one):
|
|
13
|
-
- **Priority label**: `high` > `medium` > `low` > none (weakest single signal alone).
|
|
14
|
-
- **Category label**: `bug`/`security`/`data-quality` outrank `enhancement`/
|
|
15
|
-
`discussion`/`docs` for this skill's purpose (fixing something broken, not building
|
|
16
|
-
something new).
|
|
17
|
-
- **Community reaction count** (from `fetch-pool`'s `reactionGroups`) — more 👍 reactions
|
|
18
|
-
is a real signal of user-felt impact independent of whatever label was applied at
|
|
19
|
-
triage time.
|
|
20
|
-
- **Cross-references** — check `gh issue view <N> --json timelineItems` (or equivalent)
|
|
21
|
-
for how many other issues/PRs reference this one; a heavily-cross-referenced issue is
|
|
22
|
-
blocking or informing other work, raising its effective priority above its label.
|
|
23
|
-
- **Repro quality** — concrete repro steps / cited file-line locations beat a vague
|
|
24
|
-
report; cheaper to reproduce reliably, lower risk of another #180-style dead end.
|
|
25
|
-
|
|
26
|
-
2. **Combine into a ranked order** — no single signal should override all others (e.g.
|
|
27
|
-
don't let one 👍 reaction alone outrank an explicit `priority: high` label; use
|
|
28
|
-
priority + category as the primary sort, reaction count + cross-references as
|
|
29
|
-
tie-breakers within a tier, repro quality as the final tie-breaker).
|
|
30
|
-
|
|
31
|
-
3. **Output exactly one issue number** — the top of the ranked list — with a one-line
|
|
32
|
-
justification citing which signals won, plus the full ranked list (not just the
|
|
33
|
-
winner) and the rejected list from the earlier two sub-steps, so the whole selection
|
|
34
|
-
is auditable, not just its conclusion.
|
|
35
|
-
|
|
36
|
-
## Output
|
|
37
|
-
|
|
38
|
-
Hand off the single selected issue number to `issue-address:confirm-open`, which
|
|
39
|
-
re-verifies it fresh (state, PR/duplicate claims) immediately before work starts.
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: issue-address:select
|
|
3
|
-
description: Step 0 of issue-address — select exactly ONE open issue on the current project's repo to work, by orchestrating 4 nested sub-skills (fetch-pool, reject-fixed, reject-claimed, rank-impact) in sequence. Only invoked when the caller hasn't already named a specific issue number.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# issue-address:select (sub-orchestrator)
|
|
7
|
-
|
|
8
|
-
Only runs when `issue-address` is invoked without a specific issue number already named
|
|
9
|
-
(if the caller already has one, skip straight to `issue-address:confirm-open` — that step
|
|
10
|
-
re-verifies the single chosen issue right before work starts, as a freshness guard; this
|
|
11
|
-
skill's job is choosing which issue out of many, cheaply and verifiably, across the whole
|
|
12
|
-
pool).
|
|
13
|
-
|
|
14
|
-
Exists because of a real incident: issue #180 was picked by title/label alone, and 2 full
|
|
15
|
-
`issue-address` steps ran before discovering — only once `issue-address:reproduce`
|
|
16
|
-
actually tried to reproduce it — that the fix had already shipped a day before the issue
|
|
17
|
-
was even filed. The information needed to catch that (the issue's own cited file/line + a
|
|
18
|
-
grep of current code) was available for free at selection time and simply wasn't checked.
|
|
19
|
-
|
|
20
|
-
This skill is itself further decomposed into 4 nested sub-skills, for the same reason
|
|
21
|
-
`issue-address` is decomposed: so each check is independently invokable and its result
|
|
22
|
-
inspectable, instead of one opaque scan-and-pick pass. It also closes two gaps found after
|
|
23
|
-
the first version shipped: an unverified fetch limit (the same class of silent-truncation
|
|
24
|
-
bug that hit `pr-review-sweep`), and an unconfirmed PR-search false positive (seen live in
|
|
25
|
-
the #180 trial — a text search on "180" matched an unrelated PR by number coincidence).
|
|
26
|
-
|
|
27
|
-
**Naming convention:** sub-directories are prefixed `0-`, `1-`, `2-`, `3-` in execution
|
|
28
|
-
order (see `issue-address/SKILL.md` for the repo-wide rule) — a plain directory listing of
|
|
29
|
-
this folder sorts in DAG order without opening any file.
|
|
30
|
-
|
|
31
|
-
## Pipeline DAG
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
open-issue pool
|
|
35
|
-
│
|
|
36
|
-
▼
|
|
37
|
-
┌─────────────────────────────┐
|
|
38
|
-
│ 0. select:fetch-pool │ verified-complete fetch (no silent truncation)
|
|
39
|
-
└─────────────────────────────┘
|
|
40
|
-
│ full pool w/ bodies, labels, assignees, comments, reactions
|
|
41
|
-
▼
|
|
42
|
-
┌─────────────────────────────┐
|
|
43
|
-
│ 1. select:reject-fixed │ grep current code at each cited file/line
|
|
44
|
-
└─────────────────────────────┘
|
|
45
|
-
│ survives (already-fixed candidates dropped, evidence logged)
|
|
46
|
-
▼
|
|
47
|
-
┌─────────────────────────────┐
|
|
48
|
-
│ 2. select:reject-claimed │ PR-search hits confirmed, not trusted blind
|
|
49
|
-
└─────────────────────────────┘
|
|
50
|
-
│ survives (PR'd/claimed/duplicate candidates dropped, evidence logged)
|
|
51
|
-
▼
|
|
52
|
-
┌─────────────────────────────┐
|
|
53
|
-
│ 3. select:rank-impact │ composite score, not label text alone
|
|
54
|
-
└─────────────────────────────┘
|
|
55
|
-
│
|
|
56
|
-
▼
|
|
57
|
-
one issue number + full audit trail (ranked list, rejected list, why)
|
|
58
|
-
│
|
|
59
|
-
▼
|
|
60
|
-
issue-address:confirm-open (next skill up the chain, outside this sub-orchestrator)
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
| Step | Input | Output | On failure/empty |
|
|
64
|
-
|---|---|---|---|
|
|
65
|
-
| 0. `select:fetch-pool` | none (repo-wide `gh issue list`) | full open-issue pool, verified-complete | n/a — loops its own fetch until verified complete |
|
|
66
|
-
| 1. `select:reject-fixed` | full pool | `already-fixed` list (w/ evidence) + `survives` list | if pool empties out here, report "no candidates, all already fixed" |
|
|
67
|
-
| 2. `select:reject-claimed` | `survives` from step 1 | `already-claimed` list (w/ evidence) + `survives` list | if pool empties out here, report "no candidates, all claimed/PR'd" |
|
|
68
|
-
| 3. `select:rank-impact` | `survives` from step 2 | one issue number + ranked list + justification | if `survives` was already empty, report the empty pool rather than fabricating a pick |
|
|
69
|
-
|
|
70
|
-
## Output
|
|
71
|
-
|
|
72
|
-
Hand off the single selected issue number to `issue-address:confirm-open`, which
|
|
73
|
-
re-verifies it fresh (state, PR/duplicate claims) immediately before work starts — this
|
|
74
|
-
skill's checks are about narrowing a big pool cheaply and verifiably; confirm-open's
|
|
75
|
-
checks are about not acting on stale information for the one issue actually chosen.
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: issue-address:confirm-open
|
|
3
|
-
description: Step 1 of issue-address — confirm a named GitHub issue on the current project's repo is genuinely OPEN and not already claimed/fixed by another PR or duplicate issue, before any work starts. Returns a clear go/no-go.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# issue-address:confirm-open
|
|
7
|
-
|
|
8
|
-
Called with one issue number `<N>`. Produces a go/no-go verdict before any code work begins.
|
|
9
|
-
|
|
10
|
-
## Steps
|
|
11
|
-
|
|
12
|
-
1. **Fetch the issue.**
|
|
13
|
-
```bash
|
|
14
|
-
gh issue view <N> --repo "$(gh repo view --json nameWithOwner -q .nameWithOwner)" --json state,title,body,comments,url
|
|
15
|
-
```
|
|
16
|
-
If `state` is not `OPEN` — **stop, no-go.** Report the actual state (closed/merged
|
|
17
|
-
reference) and why. Do not proceed to reproduce or fix a closed issue.
|
|
18
|
-
|
|
19
|
-
2. **Search for an existing open PR that already covers it** — check both explicit links
|
|
20
|
-
and subject-matter overlap, since a PR can fix the bug without a formal `Closes #N`:
|
|
21
|
-
```bash
|
|
22
|
-
gh pr list --repo "$(gh repo view --json nameWithOwner -q .nameWithOwner)" --state open --search "<N> in:body"
|
|
23
|
-
gh api search/issues -f q='repo:$(gh repo view --json nameWithOwner -q .nameWithOwner) is:pr is:open <N>'
|
|
24
|
-
```
|
|
25
|
-
Also skim open PR titles for matching subject matter (same file area, same symptom).
|
|
26
|
-
If found — **stop, no-go.** Report which PR number and why it looks like a match; don't
|
|
27
|
-
duplicate work already in flight.
|
|
28
|
-
|
|
29
|
-
3. **Search for a duplicate open issue** covering the same underlying bug (different
|
|
30
|
-
number, same root cause) — `gh issue list --repo "$(gh repo view --json nameWithOwner -q .nameWithOwner)" --state open --search
|
|
31
|
-
"<keywords>"`. If a duplicate exists and is a better-established report, flag it — the
|
|
32
|
-
caller decides which one to actually work.
|
|
33
|
-
|
|
34
|
-
4. **Verdict.** Return one of:
|
|
35
|
-
- **GO** — issue is open, unclaimed, no duplicate blocking it. Include the issue title,
|
|
36
|
-
body, and any repro steps mentioned in comments, so the next step doesn't have to
|
|
37
|
-
re-fetch them.
|
|
38
|
-
- **NO-GO** — state why (closed / already covered by PR #X / duplicate of #Y), and stop
|
|
39
|
-
the whole `issue-address` sequence here. Do not continue to reproduce/fix.
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: issue-address:claim
|
|
3
|
-
description: Step 2 of issue-address — claim a confirmed-open, confirmed-unclaimed issue on the current project's repo before reproducing/fixing it, by self-assigning and posting a claim comment via the gh CLI (no dedicated GitHub MCP server is connected in this environment — gh is the actual mechanism). Closes the race condition where two runs could pick the same issue.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# issue-address:claim
|
|
7
|
-
|
|
8
|
-
Runs immediately after `issue-address:confirm-open` returns GO, and before
|
|
9
|
-
`issue-address:reproduce` starts any work. Exists because confirming an issue is
|
|
10
|
-
open/unclaimed and then *starting work on it* are two different moments in time — without
|
|
11
|
-
an explicit claim in between, a second concurrent run of this same skill (or a human
|
|
12
|
-
contributor) could pick the same issue, and nothing in `issue-address:select`'s
|
|
13
|
-
`reject-claimed` check would have caught it, since that check only looks for assignees and
|
|
14
|
-
existing claim-language comments — which don't exist yet for an issue nobody has started.
|
|
15
|
-
|
|
16
|
-
**No dedicated GitHub/issue-tracking MCP server is connected in this environment** — every
|
|
17
|
-
GitHub interaction in this whole skill chain (and everywhere else this session) goes
|
|
18
|
-
through the `gh` CLI via Bash. If a GitHub MCP server becomes available later, swap the
|
|
19
|
-
commands below for its equivalent calls; until then, `gh` is the actual mechanism, not a
|
|
20
|
-
gap to work around.
|
|
21
|
-
|
|
22
|
-
## Steps
|
|
23
|
-
|
|
24
|
-
1. **Self-assign**, so the issue shows a claim to anyone else's `select:reject-claimed`
|
|
25
|
-
pass or manual look:
|
|
26
|
-
```bash
|
|
27
|
-
gh issue edit <N> --repo "$(gh repo view --json nameWithOwner -q .nameWithOwner)" --add-assignee "@me"
|
|
28
|
-
```
|
|
29
|
-
If self-assignment fails (e.g. insufficient repo permissions — a common case for
|
|
30
|
-
external contributors on a repo they don't have write access to), don't halt the
|
|
31
|
-
sequence on that alone; fall back to step 2's comment as the claim signal, and note in
|
|
32
|
-
the report that assignment wasn't possible so a human knows to check.
|
|
33
|
-
|
|
34
|
-
2. **Post a claim comment** — visible even to someone who doesn't check assignees,
|
|
35
|
-
and consistent with the claim-language `select:reject-claimed` already scans for
|
|
36
|
-
("I'll pick this up", "working on this"; a project with a non-English contributor base,
|
|
37
|
-
e.g. `midt-bg/sigma`'s Bulgarian-speaking reviewers, may localize this string — check
|
|
38
|
-
the project's own `AGENTS.md`/`CLAUDE.local.md` for a house phrase before defaulting to
|
|
39
|
-
English):
|
|
40
|
-
```bash
|
|
41
|
-
gh issue comment <N> --repo "$(gh repo view --json nameWithOwner -q .nameWithOwner)" --body "Working on this issue (issue-address skill chain). Will link the PR here after fix + verify."
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
3. **Re-confirm the claim actually landed** before proceeding — read the issue back and
|
|
45
|
-
check the assignee list and/or the posted comment are present:
|
|
46
|
-
```bash
|
|
47
|
-
gh issue view <N> --repo "$(gh repo view --json nameWithOwner -q .nameWithOwner)" --json assignees,comments
|
|
48
|
-
```
|
|
49
|
-
If neither the assignment nor the comment is visible, don't silently proceed as if
|
|
50
|
-
claimed — report the failure; a claim that didn't actually post protects nobody.
|
|
51
|
-
|
|
52
|
-
## Output
|
|
53
|
-
|
|
54
|
-
Hand off to `issue-address:reproduce` — same issue number, now with a real claim on
|
|
55
|
-
record. If this step's own re-confirmation fails (step 3), stop the sequence and report,
|
|
56
|
-
same severity as a `confirm-open` NO-GO — proceeding to reproduce/fix on an issue that
|
|
57
|
-
isn't actually marked claimed defeats the point of adding this step.
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: issue-address:reproduce
|
|
3
|
-
description: Step 2 of issue-address — reproduce a confirmed-open issue locally with a failing test (red), using hypothesis-driven debugging. Stops and reports if the issue doesn't actually reproduce.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# issue-address:reproduce
|
|
7
|
-
|
|
8
|
-
Called after `issue-address:confirm-open` returns GO, with the issue's title/body/repro
|
|
9
|
-
steps in hand. Leans on `systematic-debugging` and `test-driven-development`.
|
|
10
|
-
|
|
11
|
-
## Steps
|
|
12
|
-
|
|
13
|
-
1. **Form an explicit hypothesis** for what's actually broken, grounded in the issue's
|
|
14
|
-
description — name the file/function you expect is at fault and why, before touching
|
|
15
|
-
anything.
|
|
16
|
-
|
|
17
|
-
2. **Locate the relevant code path** — search for the function/route/query the issue
|
|
18
|
-
describes; read it fully before writing a test against it.
|
|
19
|
-
|
|
20
|
-
3. **Write a test that captures the reported bug.** It must exercise the exact scenario
|
|
21
|
-
the issue describes (same inputs, same expected-vs-actual mismatch), using this repo's
|
|
22
|
-
existing test patterns/helpers for that area (reuse fixtures, don't invent parallel
|
|
23
|
-
ones).
|
|
24
|
-
|
|
25
|
-
4. **Run it and confirm it fails (red)** — this is the proof the bug is real, not just
|
|
26
|
-
assumed from the issue text. Capture the actual failure output.
|
|
27
|
-
|
|
28
|
-
5. **If it does NOT fail** (test passes immediately): the issue may already be fixed,
|
|
29
|
-
stale, or a misunderstanding. **Stop and report this** rather than fabricating a fix for
|
|
30
|
-
a bug that doesn't reproduce — this is a valid, useful outcome, not a failure of the
|
|
31
|
-
skill.
|
|
32
|
-
|
|
33
|
-
6. **If reproduction is hard**, bisect rather than guess repeatedly: halve the input or
|
|
34
|
-
code path, or check `git log` on the relevant files for a recent change that lines up
|
|
35
|
-
with when the bug was reported. Record each bisection step.
|
|
36
|
-
|
|
37
|
-
## Output
|
|
38
|
-
|
|
39
|
-
Hand off to `issue-address:fix`: the failing test (file:line), the confirmed root-cause
|
|
40
|
-
hypothesis, and the actual red-phase failure output as evidence.
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: issue-address:fix
|
|
3
|
-
description: Step 3 of issue-address — root-cause and implement the fix for a reproduced issue, given the failing test from issue-address-reproduce. Does not run the broader verification pass — that's issue-address-verify.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# issue-address:fix
|
|
7
|
-
|
|
8
|
-
Called after `issue-address:reproduce` hands off a failing test + root-cause hypothesis.
|
|
9
|
-
|
|
10
|
-
## Steps
|
|
11
|
-
|
|
12
|
-
1. **Confirm the root cause**, not just the symptom the test exercises — read the
|
|
13
|
-
surrounding code for the actual invariant being violated. A fix that makes the specific
|
|
14
|
-
test pass without addressing the underlying cause will resurface as a different bug
|
|
15
|
-
later.
|
|
16
|
-
|
|
17
|
-
2. **Check for an existing helper/pattern before writing new logic** (API-reuse standard):
|
|
18
|
-
search the codebase for a similar computation/validation/formatting already
|
|
19
|
-
implemented elsewhere. Extend or reuse it rather than forking a parallel
|
|
20
|
-
implementation.
|
|
21
|
-
|
|
22
|
-
3. **Implement the fix** — the smallest correct change that addresses the root cause, in
|
|
23
|
-
the style/conventions of the surrounding code.
|
|
24
|
-
|
|
25
|
-
4. **Run the reproduction test from step 2 only** (not the full suite yet — that's the
|
|
26
|
-
next skill) to confirm it now passes. If it still fails, iterate on the fix, not the
|
|
27
|
-
test.
|
|
28
|
-
|
|
29
|
-
## Output
|
|
30
|
-
|
|
31
|
-
Hand off to `issue-address:verify`: the diff, the now-passing reproduction test, and a
|
|
32
|
-
one-line statement of the actual root cause fixed (for the eventual commit message and
|
|
33
|
-
review).
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: issue-address:verify
|
|
3
|
-
description: Step 4 of issue-address — prove the new reproduction test passes AND the full existing test suite/typecheck still pass (no regressions), given a fix from issue-address-fix. The gate before requesting-code-review.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# issue-address:verify
|
|
7
|
-
|
|
8
|
-
Called after `issue-address:fix` lands a fix and confirms the single reproduction test is
|
|
9
|
-
green. This step's job is the broader safety net.
|
|
10
|
-
|
|
11
|
-
## Steps
|
|
12
|
-
|
|
13
|
-
1. **Re-run the reproduction test** on its own once more — confirm green (belt-and-braces,
|
|
14
|
-
in case an intervening change touched it).
|
|
15
|
-
|
|
16
|
-
2. **Run the project's full relevant test suite** — not a hand-picked subset:
|
|
17
|
-
```bash
|
|
18
|
-
pnpm --filter <affected-package> test
|
|
19
|
-
```
|
|
20
|
-
and if the fix touches more than one workspace package, run each affected package's
|
|
21
|
-
suite. Report the actual pass count (e.g. "419/419 passed"), not just "tests pass."
|
|
22
|
-
|
|
23
|
-
3. **Run typecheck**:
|
|
24
|
-
```bash
|
|
25
|
-
pnpm --filter <affected-package> typecheck
|
|
26
|
-
```
|
|
27
|
-
A green test suite with a broken typecheck is not done.
|
|
28
|
-
|
|
29
|
-
4. **If anything besides the target reproduction test is red**, fix it before proceeding —
|
|
30
|
-
never report this step as passed on a partially red suite. Identify whether the new
|
|
31
|
-
failure is a genuine regression from this fix or a pre-existing flake (check if it
|
|
32
|
-
fails on the base branch too, via stash/checkout if needed) before deciding how to
|
|
33
|
-
handle it.
|
|
34
|
-
|
|
35
|
-
## Output
|
|
36
|
-
|
|
37
|
-
A clean verification report (suite name → pass count, typecheck status) to hand to
|
|
38
|
-
`requesting-code-review` (existing skill, not nested here) for the independent review
|
|
39
|
-
pass — call that skill synchronously and read its result before considering the issue
|
|
40
|
-
resolved.
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: issue-address
|
|
3
|
-
description: Take ONE GitHub issue on the current project's repo from selection (or a named issue number) to a verified, reviewed fix — orchestrates 6 nested sub-skills (issue-address:select, :confirm-open, :claim, :reproduce, :fix, :verify) plus the existing requesting-code-review skill, so each step is independently invokable and monitorable. Use when the user wants a real issue picked and actually resolved, not just triaged.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# issue-address (orchestrator)
|
|
7
|
-
|
|
8
|
-
Global, project-agnostic issue-to-fix pipeline — works against whatever repo the current
|
|
9
|
-
project's `gh` remote points to. Fires exactly one issue through a fixed sequence of nested
|
|
10
|
-
skills — each a real, independently-invokable `SKILL.md`, not just a section header, so the
|
|
11
|
-
sequence's progress can be watched step by step instead of as one opaque pass. Codified from
|
|
12
|
-
`midt-bg/sigma`'s workflow; a project's own `AGENTS.md`/`CLAUDE.local.md` may add repo-specific
|
|
13
|
-
conventions (branch naming, claim-comment language, commit style) that this skill should read
|
|
14
|
-
and respect if present.
|
|
15
|
-
|
|
16
|
-
**Naming convention (see a project's own `AGENTS.md` if it documents one; otherwise this
|
|
17
|
-
convention still applies as the plugin's own standard):** sub-skill directories are prefixed
|
|
18
|
-
`0-`, `1-`, `2-`... in execution order, so a plain directory listing sorts in DAG order
|
|
19
|
-
without needing to open any file. Never rely on prose order alone — a reader (or an
|
|
20
|
-
alphabetically-sorted file browser) should see the sequence from the folder names
|
|
21
|
-
themselves. The invocable `name:` field stays a clean colon-scoped identifier
|
|
22
|
-
(`issue-address:select`) without the numeric prefix — the prefix is a filesystem/ordering
|
|
23
|
-
aid, not part of the skill's name.
|
|
24
|
-
|
|
25
|
-
## Pipeline DAG
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
┌─────────────────────┐
|
|
29
|
-
no issue # ──────▶ 0. issue-address:select │──▶ issue number
|
|
30
|
-
└─────────────────────┘ │
|
|
31
|
-
issue # given ─────────────────────────────────────┘
|
|
32
|
-
▼
|
|
33
|
-
┌───────────────────────────┐
|
|
34
|
-
│ 1. issue-address:confirm-open │
|
|
35
|
-
└───────────────────────────┘
|
|
36
|
-
GO │ │ NO-GO
|
|
37
|
-
▼ ▼
|
|
38
|
-
┌─────────────────────┐ STOP — report why
|
|
39
|
-
│ 2. issue-address:claim │
|
|
40
|
-
└─────────────────────┘
|
|
41
|
-
claimed │ │ claim failed to land
|
|
42
|
-
▼ ▼
|
|
43
|
-
┌─────────────────────┐ STOP — report (don't proceed
|
|
44
|
-
│ 3. issue-address:reproduce│ unclaimed)
|
|
45
|
-
└─────────────────────┘
|
|
46
|
-
reproduces │ │ doesn't reproduce
|
|
47
|
-
▼ ▼
|
|
48
|
-
┌─────────────────┐ STOP — report (valid outcome,
|
|
49
|
-
│ 4. issue-address:fix │ not a failure)
|
|
50
|
-
└─────────────────┘
|
|
51
|
-
│
|
|
52
|
-
▼
|
|
53
|
-
┌────────────────────┐
|
|
54
|
-
│ 5. issue-address:verify│──── red ────┐
|
|
55
|
-
└────────────────────┘ │
|
|
56
|
-
│ green │
|
|
57
|
-
▼ │
|
|
58
|
-
┌────────────────────┐ │
|
|
59
|
-
│ 6. requesting-code-review│ │
|
|
60
|
-
└────────────────────┘ │
|
|
61
|
-
│ │
|
|
62
|
-
▼ ▼
|
|
63
|
-
land per conventions loop back to step 4
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
| Step | Input | Output | On failure |
|
|
67
|
-
|---|---|---|---|
|
|
68
|
-
| 0. `issue-address:select` | open-issue pool (implicit — repo-wide) | one issue number + justification | n/a (always produces one, or explicitly reports the pool is empty) |
|
|
69
|
-
| 1. `issue-address:confirm-open` | one issue number | GO (+ title/body/repro steps) or NO-GO (+ reason) | **STOP** — do not proceed |
|
|
70
|
-
| 2. `issue-address:claim` | one confirmed-open issue number | self-assignment + claim comment, re-confirmed as landed | **STOP** — report if the claim didn't actually post; don't proceed unclaimed |
|
|
71
|
-
| 3. `issue-address:reproduce` | issue title/body/repro steps | failing test (file:line) + root-cause hypothesis + red-phase output | **STOP** — report "does not reproduce" (valid, not a failure) |
|
|
72
|
-
| 4. `issue-address:fix` | failing test + root-cause hypothesis | diff + the one test now green | loops internally until its one test is green |
|
|
73
|
-
| 5. `issue-address:verify` | diff + green reproduction test | full-suite pass counts + typecheck result | **loop back to step 4** — do not proceed to review on red |
|
|
74
|
-
| 6. `requesting-code-review` | the verified diff | Critical/Important findings addressed | fix findings, do not mark resolved until clean |
|
|
75
|
-
|
|
76
|
-
Called either with **no issue number** (enters at step 0) or with **one specific issue
|
|
77
|
-
number already named** (enters at step 1, skipping step 0 entirely).
|
|
78
|
-
|
|
79
|
-
**Why claim is its own step, not folded into confirm-open:** confirming an issue is
|
|
80
|
-
open/unclaimed and actually claiming it are two different moments in time — a gap where a
|
|
81
|
-
second concurrent run (or a human) could pick the same issue between the two. `select`'s
|
|
82
|
-
`reject-claimed` check only catches claims that already exist (an assignee, a "working on
|
|
83
|
-
this" comment); nothing marks the issue claimed *for this run* until `claim` actually
|
|
84
|
-
posts one. No dedicated GitHub/issue-tracking MCP server is connected in this environment
|
|
85
|
-
— `claim` uses the `gh` CLI directly (self-assign + comment), same as every other GitHub
|
|
86
|
-
interaction in this skill chain.
|
|
87
|
-
|
|
88
|
-
## After the sequence completes clean
|
|
89
|
-
|
|
90
|
-
- Commit with a conventional-commit message (`fix(scope): subject`, no trailing period, no
|
|
91
|
-
`Co-Authored-By` trailer unless the project's own convention says otherwise), on a branch
|
|
92
|
-
following the project's own `<type>/<slug>` convention if it documents one.
|
|
93
|
-
- **Only push / open a PR when explicitly asked** — per the project's own `AGENTS.md` PR
|
|
94
|
-
section if it has one, don't do it unprompted. Report the sequence as complete and ready,
|
|
95
|
-
and wait.
|
|
96
|
-
- If a PR does get opened (once asked), post a short comment on the originating issue
|
|
97
|
-
linking it — closes the loop from report to fix.
|
|
98
|
-
- Never contact a reviewer (no request/re-request/nudge) without the user's fresh,
|
|
99
|
-
explicit, per-instance approval — same hard constant as everywhere else in this workflow.
|
|
100
|
-
|
|
101
|
-
## Why nested skills instead of one inline sequence
|
|
102
|
-
|
|
103
|
-
Each step is its own file so it shows up as its own invocation in whatever surface tracks
|
|
104
|
-
skill/tool calls — you can see "select ran, chose #N over 4 rejected candidates" and
|
|
105
|
-
"confirm-open ran, returned GO" as distinct, inspectable events before "reproduce" even
|
|
106
|
-
starts, rather than one long undifferentiated pass. If a step needs to change (e.g. the
|
|
107
|
-
verify step's test-runner command, or select's ranking weights), it's a one-file edit that
|
|
108
|
-
doesn't touch the others. When a step needs more depth or clarity, decompose it further
|
|
109
|
-
the same way `issue-address:select` was (see `0-select/SKILL.md` for its own nested DAG)
|
|
110
|
-
— continuously, wherever a single file is doing too much to inspect as one unit.
|
|
111
|
-
|
|
112
|
-
## What this skill is not
|
|
113
|
-
|
|
114
|
-
- Not a pure triage/backlog tool — that's `find-opportunity` (ranks what to work on next
|
|
115
|
-
without opening/fixing anything, and never opens/fixes on its own). `issue-address:select`
|
|
116
|
-
overlaps with it in spirit (both rank by impact and check for claims) but exists
|
|
117
|
-
specifically to feed straight into actually fixing one issue in the same run, not just
|
|
118
|
-
to produce a shortlist for a human to review.
|
|
119
|
-
- Not for PR review comments — that's a different data source entirely (see
|
|
120
|
-
`pr-review-sweep` for the unresolved-review-thread workflow on already-open PRs).
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: local-project-health
|
|
3
|
-
description: >-
|
|
4
|
-
Run the CURRENT project's own definition of "health" and report one rollup.
|
|
5
|
-
Each project defines health differently (a trading bot tracks circuit-breakers
|
|
6
|
-
+ benchmark alpha; a web app tracks uptime + error rate), so this skill runs
|
|
7
|
-
the project-supplied health entrypoint rather than imposing a generic check.
|
|
8
|
-
Use whenever the user asks "is this project healthy?", "/local-project-health",
|
|
9
|
-
"system health", "is everything running / green", or wants a one-shot status
|
|
10
|
-
rollup for the repo they're in. Keywords: health, status, healthcheck, is it
|
|
11
|
-
up, are we green, rollup, system health, project health.
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Local project health
|
|
15
|
-
|
|
16
|
-
Report a single health verdict for the project in the current working directory
|
|
17
|
-
by running **that project's own** health definition. Health is project-specific
|
|
18
|
-
by design — do not invent generic checks.
|
|
19
|
-
|
|
20
|
-
## Procedure
|
|
21
|
-
|
|
22
|
-
1. **Find the project's health entrypoint**, checking these paths in order
|
|
23
|
-
(first hit wins):
|
|
24
|
-
- `scripts/health.sh`
|
|
25
|
-
- `.claude/health.sh`
|
|
26
|
-
- `bin/health.sh`
|
|
27
|
-
- `Makefile` / `justfile` target named `health`
|
|
28
|
-
|
|
29
|
-
2. **If an entrypoint exists**, run it from the repo root and relay its output:
|
|
30
|
-
- `bash scripts/health.sh` (or the path found / `make health` / `just health`).
|
|
31
|
-
- These scripts are designed to print a human rollup and exit 0/1/2
|
|
32
|
-
(GREEN/YELLOW-or-UNKNOWN/RED). Show the user the rollup verbatim, then add a
|
|
33
|
-
one-line plain-English verdict leading with the overall color and the worst
|
|
34
|
-
layer (e.g. "🟡 YELLOW — performance is the drag: −3 pts vs SPY").
|
|
35
|
-
- If the script persists a structured artifact (e.g.
|
|
36
|
-
`data/system_health.json`), mention where it landed.
|
|
37
|
-
- If it exits non-zero, that is expected for YELLOW/RED — it is NOT a skill
|
|
38
|
-
failure. Only treat a *crash* (missing interpreter, traceback, unbound var)
|
|
39
|
-
as a failure to debug.
|
|
40
|
-
|
|
41
|
-
3. **If NO entrypoint exists**, do not guess at health with ad-hoc commands.
|
|
42
|
-
Instead:
|
|
43
|
-
- Read `CLAUDE.md`, `README*`, and skim the repo to infer what "health" means
|
|
44
|
-
for THIS project (what it monitors, what would constitute degraded/broken).
|
|
45
|
-
- Propose a concrete `scripts/health.sh` that collapses those project-specific
|
|
46
|
-
layers into one GREEN/YELLOW/RED rollup (terminal output + a persisted
|
|
47
|
-
`*.json` artifact), reusing the project's existing CLIs/artifacts rather
|
|
48
|
-
than re-deriving thresholds.
|
|
49
|
-
- Offer to create it. Once created, it becomes the convention this skill runs
|
|
50
|
-
on every future invocation.
|
|
51
|
-
|
|
52
|
-
## Notes
|
|
53
|
-
|
|
54
|
-
- The contract is the **convention path**, not a shared implementation: every
|
|
55
|
-
project owns its own `scripts/health.sh`. This skill is just the launcher +
|
|
56
|
-
interpreter of the result.
|
|
57
|
-
- Keep the relayed summary tight: overall color first, then the offending
|
|
58
|
-
layer(s), then where the full report is. Lead with the answer.
|