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,124 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pr-review-sweep
|
|
3
|
-
description: Sweep one or more of the current project's PRs' unresolved review comments end-to-end — fetch (paginated), classify by disposition AND bug-vs-feature type, check-if-already-fixed, queue a scheduler PRD per (PR, type), then land-and-resolve once it completes. Orchestrates 5 nested sub-skills (pr-review-sweep:fetch, :classify, :check-fixed, :queue, :land-and-resolve). Never fixes inline, never contacts reviewers. Use when a PR has open review feedback that needs triaging and landing.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# pr-review-sweep (orchestrator)
|
|
7
|
-
|
|
8
|
-
Global, project-agnostic PR-review-clearing pipeline — works against whatever repo the
|
|
9
|
-
current project's `gh` remote points to. Run this per-PR whenever `/project-status` (or a
|
|
10
|
-
manual check) surfaces unresolved review threads. Codified from the process used to clear
|
|
11
|
-
review rounds on `midt-bg/sigma` PRs; a project's own `AGENTS.md`/`CLAUDE.local.md` may add
|
|
12
|
-
repo-specific policy notes (e.g. which threads are auto-accept vs. needs-decision, house
|
|
13
|
-
style for reply text) that this skill should read and respect if present.
|
|
14
|
-
|
|
15
|
-
**Naming convention (see a project's own `AGENTS.md` if it documents one; otherwise this
|
|
16
|
-
convention still applies as the plugin's own standard):** sub-skill directories are prefixed
|
|
17
|
-
`0-`, `1-`, ... in execution order, so a plain directory listing sorts in DAG order without
|
|
18
|
-
opening any file. The invocable `name:` field stays a clean colon-scoped identifier
|
|
19
|
-
(`pr-review-sweep:fetch`) without the numeric prefix.
|
|
20
|
-
|
|
21
|
-
**Always via the scheduler.** Every genuinely-unfixed thread is fixed by a `/develop` PRD,
|
|
22
|
-
never inline in this session — no "fast path" for small mechanical fixes. The scheduler is
|
|
23
|
-
the one place real code changes happen (global CLAUDE.md model-economics rule: interactive
|
|
24
|
-
sessions run an expensive planner-tier model; execution belongs on the cheap executor
|
|
25
|
-
tier). If a fast lane for small review fixes turns out to be worth having, that's a
|
|
26
|
-
scheduler-level feature (a priority/fast queue lane) to build later — not a reason for this
|
|
27
|
-
skill to bypass the scheduler now.
|
|
28
|
-
|
|
29
|
-
## Pipeline DAG
|
|
30
|
-
|
|
31
|
-
```
|
|
32
|
-
PR number(s)
|
|
33
|
-
│
|
|
34
|
-
▼
|
|
35
|
-
┌───────────────────────────┐
|
|
36
|
-
│ 0. pr-review-sweep:fetch │ paginated GraphQL, reviewThreads.isResolved ground truth
|
|
37
|
-
└───────────────────────────┘
|
|
38
|
-
│ every unresolved thread, full text + location
|
|
39
|
-
▼
|
|
40
|
-
┌───────────────────────────┐
|
|
41
|
-
│ 1. pr-review-sweep:classify │ disposition (accept/policy-override/needs-decision)
|
|
42
|
-
└───────────────────────────┘ × type (bug/feature) — two independent axes
|
|
43
|
-
│ per thread: {disposition, type}, needs-decision threads set aside
|
|
44
|
-
▼
|
|
45
|
-
┌───────────────────────────┐
|
|
46
|
-
│ 2. pr-review-sweep:check-fixed │ MANDATORY for every survivor — triage into 3 outcomes
|
|
47
|
-
└───────────────────────────┘ before queuing or replying to anything
|
|
48
|
-
│ │ │
|
|
49
|
-
│ already-fixed│ reply-only │ survives (genuinely needs new code)
|
|
50
|
-
▼ ▼ ▼
|
|
51
|
-
└──────┬───────┘ ┌───────────────────────────┐
|
|
52
|
-
│ │ 3. pr-review-sweep:queue │ one /develop PRD per
|
|
53
|
-
│ └───────────────────────────┘ (PR, type) bundle,
|
|
54
|
-
│ │ queued PRD id, or duplicate-guarded
|
|
55
|
-
│ │ "already queued"
|
|
56
|
-
│ ▼
|
|
57
|
-
│ ... async, on scheduler ...
|
|
58
|
-
│ │
|
|
59
|
-
▼ ▼
|
|
60
|
-
┌───────────────────────────────────┐
|
|
61
|
-
│ 4. pr-review-sweep:land-and-resolve │ cite SHA (already-fixed/PRD) or
|
|
62
|
-
└───────────────────────────────────┘ reasoning (reply-only); reply; resolve
|
|
63
|
-
│
|
|
64
|
-
▼
|
|
65
|
-
thread resolved, or reported stuck (failed/needs_review PRD)
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
| Step | Input | Output | On failure/empty |
|
|
69
|
-
|---|---|---|---|
|
|
70
|
-
| 0. `pr-review-sweep:fetch` | one or more PR numbers | every unresolved review thread, verified-complete (paginated) | n/a — loops its own fetch until `totalCount` matches nodes paged |
|
|
71
|
-
| 1. `pr-review-sweep:classify` | unresolved threads | each thread tagged `{disposition, type}` | needs-decision threads are set aside, surfaced to the user, never guessed |
|
|
72
|
-
| 2. `pr-review-sweep:check-fixed` | accept/policy-override threads — **every one, no shortcuts** | `already-fixed` (w/ commit) + `reply-only` (w/ reasoning) + `survives` | never skip this because a thread's disposition "obviously" needs no code check — see the incident documented in that step's own file |
|
|
73
|
-
| 3. `pr-review-sweep:queue` | `survives` only, grouped by (PR, type) | one queued `/develop` PRD id per bundle | if a PRD for that (PR, type) is already queued/in-flight, skip and report its id — never double-queue |
|
|
74
|
-
| 4. `pr-review-sweep:land-and-resolve` | already-fixed / reply-only (immediate) or a PRD reported `completed` by the scheduler | thread replied (SHA or reasoning) + resolved | `failed`/`needs_review`/stuck PRDs are reported, never silently retried |
|
|
75
|
-
|
|
76
|
-
## Why two independent classification axes (step 1)
|
|
77
|
-
|
|
78
|
-
**Disposition** (accept-as-is / policy-override / needs-my-decision) answers "should this
|
|
79
|
-
be done at all, and does it need a human." **Type** (bug / feature) answers "what shape of
|
|
80
|
-
change is this, once we've decided to do it" — and drives which PRD template/acceptance
|
|
81
|
-
criteria `pr-review-sweep:queue` writes:
|
|
82
|
-
|
|
83
|
-
- **Bug** — the reviewer flagged something objectively broken (wrong output, crash,
|
|
84
|
-
security issue, off-by-one, missed edge case). The PRD's ACs require: a reproduction of
|
|
85
|
-
the defect, a regression test that fails before the fix and passes after, then the fix
|
|
86
|
-
itself.
|
|
87
|
-
- **Feature** — the reviewer asked for additional behavior, a refactor, or a
|
|
88
|
-
consistency/style improvement that isn't fixing broken behavior. The PRD's ACs require
|
|
89
|
-
scoping tightly to exactly what was asked (no piggybacked scope creep) and consistency
|
|
90
|
-
with existing patterns in the touched file; a regression test is only required if the ask
|
|
91
|
-
itself adds testable behavior.
|
|
92
|
-
|
|
93
|
-
Splitting by type — rather than one undifferentiated "fix it" PRD per PR — is what lets each
|
|
94
|
-
bundle get acceptance criteria actually suited to the kind of work it is, and is the reason
|
|
95
|
-
this classification exists as its own step rather than being folded into disposition.
|
|
96
|
-
|
|
97
|
-
## Hard constants across all five steps
|
|
98
|
-
|
|
99
|
-
- **Ground truth for "unresolved" is GraphQL `reviewThreads.isResolved`**, fully paginated
|
|
100
|
-
(`first: 100` — smaller page sizes have silently truncated on real PRs; always compare
|
|
101
|
-
`totalCount` to nodes actually paged through). Never a last-reply/last-push heuristic.
|
|
102
|
-
- **Never contact a reviewer** — no request, re-request, or nudge, at any point in this
|
|
103
|
-
process. Reviewer contact is `pr-signal`'s job alone, gated behind the user's explicit,
|
|
104
|
-
per-PR, freshly-given approval every time. A prior approval never carries forward.
|
|
105
|
-
- **Never fix inline.** Every genuinely-unfixed thread goes through `/develop`, no
|
|
106
|
-
exceptions — see the scheduler note above.
|
|
107
|
-
- **Idempotent re-runs.** One queued/in-flight PRD per (PR, type) bundle; replies aren't
|
|
108
|
-
re-posted; resolving an already-resolved thread is a no-op.
|
|
109
|
-
|
|
110
|
-
## Why nested skills instead of one inline sequence
|
|
111
|
-
|
|
112
|
-
Each step is its own file so it shows up as its own invocation in whatever surface tracks
|
|
113
|
-
skill/tool calls, and so a step can be changed (a new PRD template for a third `type`
|
|
114
|
-
bucket, a different fetch page size) without touching the others. `classify` is the step
|
|
115
|
-
most likely to grow — if a third type axis value earns its own PRD template later (e.g.
|
|
116
|
-
`docs`, `perf`), or `queue` needs different bundling logic per type, decompose that step
|
|
117
|
-
further the same way `issue-address:select` was, rather than growing this file.
|
|
118
|
-
|
|
119
|
-
## What this skill is not
|
|
120
|
-
|
|
121
|
-
- Not for GitHub issues — that's `issue-address` (a different data source: issues, not
|
|
122
|
-
open-PR review threads).
|
|
123
|
-
- Not a decision on whether to contact a reviewer — that's `pr-signal`, invoked separately
|
|
124
|
-
and rarely.
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: pr-signal
|
|
3
|
-
description: >-
|
|
4
|
-
Request or re-request a reviewer on one PR on the current project's repo — the ONLY
|
|
5
|
-
step in the PR flow that contacts a person. Deliberately separate from pr-review-sweep
|
|
6
|
-
and meant to be invoked rarely — most projects don't tag reviewers often. Requires the
|
|
7
|
-
user's explicit, fresh, per-PR approval every time — a prior approval never carries
|
|
8
|
-
forward, and CI must be green at the moment of signaling, not just when approval was
|
|
9
|
-
given. Use only when the user explicitly names a PR number and says to
|
|
10
|
-
request/ping/notify the reviewer, or approves signaling in response to a
|
|
11
|
-
pr-review-sweep report.
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# pr-signal — the one step that contacts a reviewer (rare, gated)
|
|
15
|
-
|
|
16
|
-
Global, project-agnostic — works against whatever repo the current project's `gh` remote
|
|
17
|
-
points to. Input: a PR whose queued PRDs have all landed and whose threads
|
|
18
|
-
`pr-review-sweep:land-and-resolve` has replied to and resolved (CI green) — plus the user's
|
|
19
|
-
explicit approval for this specific PR number, given in this conversation, not inherited
|
|
20
|
-
from an earlier one. If the project has its own reviewer-contact policy doc (e.g. sigma's
|
|
21
|
-
`docs/pr-review-workflow.local.md`), read it for repo-specific nuance — reviewer identity,
|
|
22
|
-
cadence norms — but the approval-per-PR and CI-green-at-signal-time gates below are hard
|
|
23
|
-
constants regardless of what a project's doc says.
|
|
24
|
-
|
|
25
|
-
**This skill runs far less often than the rest of the flow.** Most PRs on this repo don't need
|
|
26
|
-
an explicit re-request — a push alone re-triggers review for an already-requested reviewer, and
|
|
27
|
-
this team doesn't like being tagged unnecessarily. Only invoke this when the user actually asks
|
|
28
|
-
for it, by PR number.
|
|
29
|
-
|
|
30
|
-
## Steps
|
|
31
|
-
|
|
32
|
-
1. **Verify the gate, don't assume it from a report given earlier in the conversation:**
|
|
33
|
-
- The PR is still open (`gh pr view <n> --json state,mergedAt`) — a merged/closed PR gets
|
|
34
|
-
no signal; report the state change instead.
|
|
35
|
-
- Every review thread is resolved (re-check now via GraphQL `reviewThreads.isResolved` — a
|
|
36
|
-
`pr-review-sweep:land-and-resolve` report from even a few minutes ago can be stale if
|
|
37
|
-
anything else touched the PR, and a new comment that arrived since means the PR goes back
|
|
38
|
-
through `pr-review-sweep:classify`, not to a signal).
|
|
39
|
-
- CI is green **right now** — re-run `gh pr checks <n> --repo "$(gh repo view --json nameWithOwner -q .nameWithOwner)"` immediately
|
|
40
|
-
before acting. An approval given while CI was green does not survive CI going red in
|
|
41
|
-
between (a later push, a flaky rerun). If CI is red at signal-time, stop and report it —
|
|
42
|
-
never signal on a stale approval, and never solicit approval on a PR that's currently
|
|
43
|
-
CI-red in the first place.
|
|
44
|
-
- No review is already outstanding (requested, not yet dismissed by a later push) — if one
|
|
45
|
-
is, the push itself was already the signal; do not re-request
|
|
46
|
-
([[no-reviewer-ping-without-approval]] / [[reviewers-dont-spam]]).
|
|
47
|
-
- The user's approval is for **this PR number, in this conversation** — a blanket "yes,
|
|
48
|
-
signal when ready" said about a different PR, or said before this session, does not count.
|
|
49
|
-
|
|
50
|
-
2. **If any gate check fails**, stop and report exactly which one — don't ask "should I signal
|
|
51
|
-
now?" as a throwaway line and proceed anyway.
|
|
52
|
-
|
|
53
|
-
3. **If every gate check passes**, request the reviewer:
|
|
54
|
-
```bash
|
|
55
|
-
gh pr edit <number> --repo "$(gh repo view --json nameWithOwner -q .nameWithOwner)" --add-reviewer <reviewer>
|
|
56
|
-
```
|
|
57
|
-
If `gh pr edit` fails with the known "Projects (classic)" GraphQL deprecation error on this
|
|
58
|
-
repo, fall back to
|
|
59
|
-
`gh api repos/$(gh repo view --json nameWithOwner -q .nameWithOwner)/pulls/<n>/requested_reviewers -f "reviewers[]=<reviewer>"` —
|
|
60
|
-
and send it exactly once; verify via `gh pr view <n> --json reviewRequests` rather than
|
|
61
|
-
retrying blind (a retry after an ambiguous failure is how a double-ping happens).
|
|
62
|
-
Do not add a "ready for re-review" comment or @-mention on top of the request — the request
|
|
63
|
-
itself is the signal; a comment on top of it is the over-notification this skill exists to
|
|
64
|
-
avoid.
|
|
65
|
-
|
|
66
|
-
4. **Report** the PR as signaled, and loop back to `project-status-local` to pick up the new
|
|
67
|
-
state on its next run.
|
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: project-status
|
|
3
|
-
model: opus
|
|
4
|
-
description: >-
|
|
5
|
-
GLOBAL FRAMEWORK for one operational status rollup of the project in the
|
|
6
|
-
current working directory — defines the contract (what a status report must
|
|
7
|
-
contain, in what order, on which model) and DELEGATES the project-specific
|
|
8
|
-
measurement to that project's own `project-status-local` skill. Use whenever
|
|
9
|
-
the user asks "what's the project status", "/project-status", "how is this
|
|
10
|
-
project doing", "are the jobs healthy", or wants a one-shot status rollup for
|
|
11
|
-
the repo they're in. Keywords: project status, KPI, north-star, crons, jobs,
|
|
12
|
-
last run, health, rollup, ops.
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# project-status — global framework
|
|
16
|
-
|
|
17
|
-
This is the **global framework**, not an implementation. It owns the *contract*
|
|
18
|
-
(what a status rollup must contain, the order, the presentation, the model
|
|
19
|
-
expectation) and **delegates** the project-specific *how* to the project's own
|
|
20
|
-
`project-status-local` skill.
|
|
21
|
-
|
|
22
|
-
> **Two skills, no name collision (by design).**
|
|
23
|
-
> `project-status` (this, global) = the framework/expectations.
|
|
24
|
-
> `project-status-local` (per project) = the implementation.
|
|
25
|
-
> They have **different names on purpose** — a project must NOT ship a second
|
|
26
|
-
> skill also named `project-status`, because a same-name skill silently shadows
|
|
27
|
-
> this one and drops everything it defines (that is exactly how the model
|
|
28
|
-
> fallback got lost once). Each project ships exactly one `project-status-local`.
|
|
29
|
-
|
|
30
|
-
## What to do when invoked
|
|
31
|
-
|
|
32
|
-
First decide **scope**: one project (the current repo) or several (the user named
|
|
33
|
-
multiple repos, said "all my projects", or wants a cross-project board).
|
|
34
|
-
|
|
35
|
-
### Single project (the cwd)
|
|
36
|
-
|
|
37
|
-
1. **Delegate if a local exists.** If a `project-status-local` skill is available
|
|
38
|
-
in the current project (it appears in the available-skills list), **invoke it**
|
|
39
|
-
(Skill tool, `skill: project-status-local`). It owns the specifics — which KPI
|
|
40
|
-
command to run, which crons are this project's, which health entrypoint to
|
|
41
|
-
call. Present its output; if it omits an element of the contract below, fill
|
|
42
|
-
the gap or note it.
|
|
43
|
-
2. **Otherwise run the generic fallback inline** (the flow at the bottom) and, at
|
|
44
|
-
the end, **offer to scaffold a `project-status-local`** for this repo so the
|
|
45
|
-
next run is project-aware.
|
|
46
|
-
|
|
47
|
-
Do not re-implement a project's specifics here — that belongs in its
|
|
48
|
-
`project-status-local`.
|
|
49
|
-
|
|
50
|
-
### Multiple projects (parallel fan-out)
|
|
51
|
-
|
|
52
|
-
The whole point of the framework/`-local` split: the per-project work is
|
|
53
|
-
**independent**, so run it **concurrently** — one project's KPI/crons/health
|
|
54
|
-
never depends on another's.
|
|
55
|
-
|
|
56
|
-
1. **Resolve the project list.** Use the repos the user named; for "all", or to
|
|
57
|
-
discover them, enumerate every repo that ships a local skill:
|
|
58
|
-
```bash
|
|
59
|
-
for d in ~/Projects/*/.claude/skills/project-status-local/SKILL.md; do
|
|
60
|
-
[ -f "$d" ] && echo "${d%/.claude/skills/project-status-local/SKILL.md}"
|
|
61
|
-
done
|
|
62
|
-
```
|
|
63
|
-
2. **Fan out one agent per project — in a SINGLE message with multiple `Agent`
|
|
64
|
-
tool calls** so they run in parallel (sequential calls would defeat the
|
|
65
|
-
purpose). Each agent (`subagent_type: general-purpose`) gets a prompt like:
|
|
66
|
-
> `cd <ABS_REPO_PATH>`. Produce this repo's status rollup by executing its
|
|
67
|
-
> own `project-status-local`: **read** `.claude/skills/project-status-local/SKILL.md`
|
|
68
|
-
> and run its steps (they are deterministic — a `brief.py`/analyzer call, a
|
|
69
|
-
> `crontab -l | grep` for its crons, its `scripts/health.sh`). If the repo has
|
|
70
|
-
> no `project-status-local`, follow the generic contract (KPI→chores→health)
|
|
71
|
-
> using its `CLAUDE.md` + crontab + health entrypoint. Return a **compact**
|
|
72
|
-
> rollup (≤12 lines): the project name, the 7d North-Star line (KPI vs
|
|
73
|
-
> benchmark → alpha), the health color, and the single worst ❌/⚠️ chore.
|
|
74
|
-
Let each agent **inherit the model** (omit `model`) — it just runs the repo's
|
|
75
|
-
commands; this framework's `model: opus` governs *this* turn.
|
|
76
|
-
3. **Aggregate** the returned rollups into one board: a lead table
|
|
77
|
-
(Project · 7d KPI · Health · Worst signal), RED/❌ projects first, then each
|
|
78
|
-
project's detail block beneath. Note any agent that failed to produce a rollup
|
|
79
|
-
(missing repo, broken local) rather than dropping it silently.
|
|
80
|
-
|
|
81
|
-
Why agents, not the Skill tool, for the others: skill availability is bound to
|
|
82
|
-
the launch repo, so `project-status-local` is only directly invokable for the
|
|
83
|
-
**current** project. For other repos the agent reproduces the local by reading +
|
|
84
|
-
running it (it is deterministic bash), which works from any cwd.
|
|
85
|
-
|
|
86
|
-
## The contract (what every report must satisfy)
|
|
87
|
-
|
|
88
|
-
Order — **1. North-Star KPI (last 7d) → 2. Chores (crons) → 3. Logs & usage
|
|
89
|
-
patterns → 4. Health verdict.** Lead with the KPI line and the single worst
|
|
90
|
-
❌/⚠️ chore or health signal; detail after. Keep it tight; relay engine/analyzer
|
|
91
|
-
output rather than re-deriving numbers by hand.
|
|
92
|
-
|
|
93
|
-
A status check is an **audit**, not just a liveness ping — it reads the project's
|
|
94
|
-
*operational logs* (are the runs clean or throwing?) and its *usage/consumption
|
|
95
|
-
patterns* (who consumes the product's outputs, how often, which surfaces are hot
|
|
96
|
-
vs dead) alongside the KPI and crons. The KPI says "is the output valuable," the
|
|
97
|
-
logs+usage say "is the machine actually being used, and is it healthy under that
|
|
98
|
-
use." Both dimensions belong in every report.
|
|
99
|
-
|
|
100
|
-
- **KPI (the intro):** the metric the project's `CLAUDE.md` mission statement
|
|
101
|
-
names as optimized (a `## North-Star KPI` / `## Objective` section, usually
|
|
102
|
-
linking a definition doc or a measurement command). Measure it over a trailing
|
|
103
|
-
7-day window with the project's own command; state it with the
|
|
104
|
-
benchmark/target the section defines. If `CLAUDE.md` declares no KPI, say so
|
|
105
|
-
plainly (it belongs in the mission statement) and use a git/activity summary
|
|
106
|
-
for the intro — never invent a metric.
|
|
107
|
-
- **Chores:** only THIS project's cron jobs (match by repo name / absolute path),
|
|
108
|
-
each with last-run time, recent result, and an error count, in a table:
|
|
109
|
-
Job · Schedule · Purpose · Last run · Errors · Last result. Staleness: newest
|
|
110
|
-
log line older than ~2× cadence ⇒ ⚠️ overdue; an installed cron with an
|
|
111
|
-
empty/missing log ⇒ ❌ (often a Vixie-cron `TZ=` inline-prefix drop — fix with a
|
|
112
|
-
standalone `TZ=` line). Market-hours-only jobs stale overnight is expected.
|
|
113
|
-
- **Logs & usage patterns:** two sub-parts, both delegated to the `-local` for
|
|
114
|
-
*where the data lives*, but expected in every report:
|
|
115
|
-
- **Logs** — scan the recent operational logs for error/warning rates,
|
|
116
|
-
tracebacks, timeouts, and silent-stall signatures (a job that "ran ok" but
|
|
117
|
-
did no work). Surface counts + the worst recent line, not just last-exit.
|
|
118
|
-
- **Usage / consumption** — how the project's *outputs* are actually consumed:
|
|
119
|
-
per-endpoint/-tool invocation counts, the consumer/tenant breakdown, and
|
|
120
|
-
hot-vs-cold surfaces over a trailing window. This answers "is what we built
|
|
121
|
-
being used, and by whom" — the dimension a KPI alone misses. The `-local`
|
|
122
|
-
names the source (a usage/metering store, an access log, or a proxy like a
|
|
123
|
-
panel/history table); if no usage source exists yet, say so and recommend
|
|
124
|
-
standing one up rather than inventing numbers.
|
|
125
|
-
- **Health verdict:** run the project's own health entrypoint (first hit wins:
|
|
126
|
-
`scripts/health.sh` · `.claude/health.sh` · `bin/health.sh` · a `health`
|
|
127
|
-
Make/just target) and relay its GREEN/YELLOW/RED rollup. A non-zero exit for
|
|
128
|
-
YELLOW/RED is expected, not a skill failure; only a crash is.
|
|
129
|
-
|
|
130
|
-
## After the audit — route findings, then improve (the loop)
|
|
131
|
-
|
|
132
|
-
A status check shouldn't dead-end at a report. Once the four dimensions are in,
|
|
133
|
-
**act on what the audit surfaced** — this is what makes `/project-status` a
|
|
134
|
-
self-contained *bootstrap → evaluate → improve* loop, usable even on a brand-new
|
|
135
|
-
project.
|
|
136
|
-
|
|
137
|
-
**First, work the pending proposals — decide before generating new work.** Right
|
|
138
|
-
after the audit, look at the project's **proposed Epics** (status `proposed` in
|
|
139
|
-
`session-manager-operations/prompt-sessions/active-index.json`): these are the
|
|
140
|
-
items agents filed for a human decision. Report them so the user can approve
|
|
141
|
-
or discard; do not
|
|
142
|
-
approve them yourself, and do not stack new levers on top of an undecided
|
|
143
|
-
backlog. (If there are none, say so and move on.)
|
|
144
|
-
|
|
145
|
-
There is no inbox to reconcile and no archive convention to keep in step: an
|
|
146
|
-
approved proposal becomes an active Epic whose PRDs and runs are already visible
|
|
147
|
-
in the Scheduler, so its status is read from the queue directly rather than
|
|
148
|
-
tracked in a parallel status log.
|
|
149
|
-
|
|
150
|
-
Then route **this audit's own findings**, by ownership:
|
|
151
|
-
|
|
152
|
-
1. **A finding that belongs to another project** (an upstream/downstream service
|
|
153
|
-
in the stack — e.g. the data source is stale, a contract drifted): do NOT
|
|
154
|
-
reach across the boundary and do NOT open an Epic there — nothing but a human
|
|
155
|
-
pressing New Epic creates one. Report it, clearly enough that the human can
|
|
156
|
-
act on it. (Same rule as everywhere: service boundaries outrank convenience.)
|
|
157
|
-
2. **A finding that belongs to THIS project** (a real bug, a missing guard, an
|
|
158
|
-
enhancement the audit revealed — a cold sold-surface, a recurring error in the
|
|
159
|
-
logs, a usage gap): queue it as a scheduled PRD via **`/develop`** — never
|
|
160
|
-
implement it inline here. Record the queued PRD id in the report.
|
|
161
|
-
3. **Nothing actionable** — just report.
|
|
162
|
-
|
|
163
|
-
Then stop. There is no automatic improvement gate: findings are routed as
|
|
164
|
-
PRDs or reported above, and the user decides what gets worked on next.
|
|
165
|
-
|
|
166
|
-
This sequence — audit → route findings (develop / report) — is enough to
|
|
167
|
-
bootstrap and evaluate a project from a single `/project-status` invocation. The `-local` owns the *specifics* of each
|
|
168
|
-
step; this framework owns the *loop*.
|
|
169
|
-
|
|
170
|
-
## Model expectation (every local must mirror this)
|
|
171
|
-
|
|
172
|
-
This framework runs on **`model: opus`** (Opus 4.8) — a status check is reasoning
|
|
173
|
-
work that should run on the strongest model. **Every `project-status-local` MUST
|
|
174
|
-
carry the same single-value `model: opus` frontmatter line**, so a direct
|
|
175
|
-
`/project-status-local` invocation runs on Opus too. A local that omits it loses
|
|
176
|
-
the override and runs on whatever the session model happens to be.
|
|
177
|
-
|
|
178
|
-
> **Syntax matters — this is a real, documented field.** Skill frontmatter
|
|
179
|
-
> `model:` takes a **single** value (the same aliases as `/model`: `opus`,
|
|
180
|
-
> `sonnet`, `haiku`, `fable`, or a full id like `claude-opus-4-8`). It does NOT
|
|
181
|
-
> accept a comma-separated fallback chain — `model: opus,sonnet` is an invalid
|
|
182
|
-
> value and silently fails to apply (the skill then runs on the session model,
|
|
183
|
-
> not Opus). Graceful failover to Sonnet is configured **at the session level**,
|
|
184
|
-
> not per-skill, via `fallbackModel` in settings:
|
|
185
|
-
> `"fallbackModel": ["opus", "sonnet"]` in `~/.claude/settings.json`. Per the
|
|
186
|
-
> Claude Code docs, a skill's `model:` override applies for the rest of the
|
|
187
|
-
> current turn and reverts to the session model on the next prompt.
|
|
188
|
-
|
|
189
|
-
## Scaffolding a new `project-status-local` — establish the framework with the user
|
|
190
|
-
|
|
191
|
-
When a project has none, **do not silently guess the implementation.** The whole
|
|
192
|
-
point of the framework/`-local` split is that every project's report covers the
|
|
193
|
-
**same four dimensions** (KPI · chores · logs+usage · health) — so the parent's job
|
|
194
|
-
on a missing `-local` is to *establish those expectations with the user*, then
|
|
195
|
-
write a complete local. Run a short **Q&A** (use `AskUserQuestion`, batching the
|
|
196
|
-
gaps you couldn't auto-detect) to pin down each contract dimension:
|
|
197
|
-
|
|
198
|
-
1. **Probe first, ask only the gaps.** Read `CLAUDE.md` (KPI section?), the
|
|
199
|
-
crontab (this repo's jobs + their log paths?), the repo for a health entrypoint
|
|
200
|
-
(`scripts/health.sh` etc.), and for a usage source (a metering/access-log store,
|
|
201
|
-
or a proxy table). Auto-fill what you can find.
|
|
202
|
-
2. **Ask the user to confirm/supply the rest**, one question per unresolved
|
|
203
|
-
dimension:
|
|
204
|
-
- **KPI** — what is this project's North-Star metric + the command that measures
|
|
205
|
-
it over 7d? (If `CLAUDE.md` has no `## North-Star KPI` section, offer to add
|
|
206
|
-
one — the KPI belongs in the mission statement, not only the skill.)
|
|
207
|
-
- **Chores** — which crons are this project's, and where do their logs live?
|
|
208
|
-
- **Logs & usage** — which logs carry the operational signal, and **what is the
|
|
209
|
-
usage/consumption source** (a metering store / access log / proxy)? If none
|
|
210
|
-
exists, flag it and offer to stand one up — a project with no usage telemetry
|
|
211
|
-
can't answer "is what we built being used."
|
|
212
|
-
- **Health** — the health entrypoint + how to read its verdict.
|
|
213
|
-
3. **Write the local** `<repo>/.claude/skills/project-status-local/SKILL.md` with
|
|
214
|
-
frontmatter `name: project-status-local`, `model: opus` (single value — see the
|
|
215
|
-
syntax note above; `fallbackModel` owns failover), a project-specific
|
|
216
|
-
`description`, and a body implementing **all four** contract dimensions against
|
|
217
|
-
the answers — so the next `/project-status` here is project-aware and consistent
|
|
218
|
-
with every other project's report.
|
|
219
|
-
|
|
220
|
-
This Q&A is the deliberate "pain" that makes cross-project reports comparable:
|
|
221
|
-
each `-local` is the *same contract*, filled with that project's specifics.
|
|
222
|
-
|
|
223
|
-
## Generic fallback flow (no local present)
|
|
224
|
-
|
|
225
|
-
Run inline only when the project ships no `project-status-local`:
|
|
226
|
-
|
|
227
|
-
1. **Current time:** `date '+%Y-%m-%d %H:%M %Z'` (for staleness judgment).
|
|
228
|
-
2. **KPI:** read `./CLAUDE.md`, find the North-Star section, run its measurement
|
|
229
|
-
command over 7 days, and state the headline. No KPI section ⇒ say so + git
|
|
230
|
-
summary.
|
|
231
|
-
3. **Chores:** `crontab -l | grep -F "$(basename "$PWD")" | grep -v '^\s*#'`
|
|
232
|
-
(widen/narrow if the cron path differs from the dir name); for each job
|
|
233
|
-
`ls -la <log>` + `tail -n 8 <log>` + an `ERROR|Traceback|failed|exception`
|
|
234
|
-
count; render the chores table.
|
|
235
|
-
4. **Logs & usage:** scan recent logs for error/warning rates + silent stalls;
|
|
236
|
-
look for a usage/consumption source (a metering store, an access log, or a
|
|
237
|
-
request/history table) and summarize per-surface invocation + consumer
|
|
238
|
-
patterns over a trailing window. If none exists, say so and recommend standing
|
|
239
|
-
one up — don't invent usage numbers.
|
|
240
|
-
5. **Health:** run the project's health entrypoint and relay the rollup; if none
|
|
241
|
-
exists, infer from KPI + chores and offer to create `scripts/health.sh`.
|
|
242
|
-
6. Lead with the 7d KPI line and the worst chore/health/usage signal. Then offer
|
|
243
|
-
to scaffold a `project-status-local` (Q&A above) so the next run is consistent.
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: requesting-code-review
|
|
3
|
-
description: Use when completing tasks, implementing major features, or before merging to verify work meets requirements
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Requesting Code Review
|
|
7
|
-
|
|
8
|
-
Dispatch the native `code-reviewer` subagent (via the Agent tool, `subagent_type: "code-reviewer"`) to catch issues before they cascade.
|
|
9
|
-
|
|
10
|
-
**Core principle:** Review early, review often.
|
|
11
|
-
|
|
12
|
-
## When to Request Review
|
|
13
|
-
|
|
14
|
-
**Mandatory:**
|
|
15
|
-
- After each task in subagent-driven development
|
|
16
|
-
- After completing major feature
|
|
17
|
-
- Before merge to main
|
|
18
|
-
|
|
19
|
-
**Optional but valuable:**
|
|
20
|
-
- When stuck (fresh perspective)
|
|
21
|
-
- Before refactoring (baseline check)
|
|
22
|
-
- After fixing complex bug
|
|
23
|
-
|
|
24
|
-
## How to Request
|
|
25
|
-
|
|
26
|
-
**1. Get git SHAs:**
|
|
27
|
-
```bash
|
|
28
|
-
BASE_SHA=$(git rev-parse HEAD~1) # or origin/main
|
|
29
|
-
HEAD_SHA=$(git rev-parse HEAD)
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
**2. Dispatch code-reviewer subagent:**
|
|
33
|
-
|
|
34
|
-
Use the Agent tool with `subagent_type: "code-reviewer"`, filling the template at `code-reviewer.md`
|
|
35
|
-
|
|
36
|
-
**Placeholders:**
|
|
37
|
-
- `{WHAT_WAS_IMPLEMENTED}` - What you just built
|
|
38
|
-
- `{PLAN_OR_REQUIREMENTS}` - What it should do
|
|
39
|
-
- `{BASE_SHA}` - Starting commit
|
|
40
|
-
- `{HEAD_SHA}` - Ending commit
|
|
41
|
-
- `{DESCRIPTION}` - Brief summary
|
|
42
|
-
|
|
43
|
-
**3. Act on feedback:**
|
|
44
|
-
- Fix Critical issues immediately
|
|
45
|
-
- Fix Important issues before proceeding
|
|
46
|
-
- Note Minor issues for later
|
|
47
|
-
- Push back if reviewer is wrong (with reasoning)
|
|
48
|
-
|
|
49
|
-
## Example
|
|
50
|
-
|
|
51
|
-
```
|
|
52
|
-
[Just completed Task 2: Add verification function]
|
|
53
|
-
|
|
54
|
-
You: Let me request code review before proceeding.
|
|
55
|
-
|
|
56
|
-
BASE_SHA=$(git log --oneline | grep "Task 1" | head -1 | awk '{print $1}')
|
|
57
|
-
HEAD_SHA=$(git rev-parse HEAD)
|
|
58
|
-
|
|
59
|
-
[Dispatch code-reviewer subagent via the Agent tool]
|
|
60
|
-
WHAT_WAS_IMPLEMENTED: Verification and repair functions for conversation index
|
|
61
|
-
PLAN_OR_REQUIREMENTS: Task 2 from docs/plans/deployment-plan.md
|
|
62
|
-
BASE_SHA: a7981ec
|
|
63
|
-
HEAD_SHA: 3df7661
|
|
64
|
-
DESCRIPTION: Added verifyIndex() and repairIndex() with 4 issue types
|
|
65
|
-
|
|
66
|
-
[Subagent returns]:
|
|
67
|
-
Strengths: Clean architecture, real tests
|
|
68
|
-
Issues:
|
|
69
|
-
Important: Missing progress indicators
|
|
70
|
-
Minor: Magic number (100) for reporting interval
|
|
71
|
-
Assessment: Ready to proceed
|
|
72
|
-
|
|
73
|
-
You: [Fix progress indicators]
|
|
74
|
-
[Continue to Task 3]
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## Integration with /develop
|
|
78
|
-
|
|
79
|
-
For scheduled work, review happens once per plan in the trailing `validate` PRD (persona
|
|
80
|
-
`validator`), which runs `/code-review` and `/security-review` over the plan's combined diff and
|
|
81
|
-
reports per-PRD VERIFIED/REFUTED verdicts. This skill is for an interactive session reviewing its
|
|
82
|
-
own inline work. Never dispatch a `code-reviewer` subagent from a headless run — it has no next
|
|
83
|
-
turn to collect the result.
|
|
84
|
-
|
|
85
|
-
## Red Flags
|
|
86
|
-
|
|
87
|
-
**Never:**
|
|
88
|
-
- Skip review because "it's simple"
|
|
89
|
-
- Ignore Critical issues
|
|
90
|
-
- Proceed with unfixed Important issues
|
|
91
|
-
- Argue with valid technical feedback
|
|
92
|
-
|
|
93
|
-
**If reviewer wrong:**
|
|
94
|
-
- Push back with technical reasoning
|
|
95
|
-
- Show code/tests that prove it works
|
|
96
|
-
- Request clarification
|
|
97
|
-
|
|
98
|
-
See template at: requesting-code-review/code-reviewer.md
|