apiVersion: jenkins.io/v1 kind: PipelineActivity metadata: annotations: lighthouse.jenkins-x.io/cloneURI: https://github.com/greencapitaltrade/jarvis.git lighthouse.jenkins-x.io/job: release pipeline.jenkins-x.io/traceID: b04fc05d9c14aa5ebb4f2470f0c201dd creationTimestamp: "2026-08-18T09:37:05Z" generation: 7 labels: branch: main build: "132" context: release created-by-lighthouse: "true" event-GUID: 370a9bca-9ae8-11f1-8a5b-3f20e5542438 lighthouse.jenkins-x.io/baseSHA: 0d5a0b791c542c41bca74a2e03ba1db586e61a22 lighthouse.jenkins-x.io/branch: main lighthouse.jenkins-x.io/buildNum: "1787045825886" lighthouse.jenkins-x.io/context: release lighthouse.jenkins-x.io/id: capitaltrade-jarvis-main-release-w99mn lighthouse.jenkins-x.io/job: release lighthouse.jenkins-x.io/lastCommitSHA: 0d5a0b791c542c41bca74a2e03ba1db586e61a22 lighthouse.jenkins-x.io/refs.org: greencapitaltrade lighthouse.jenkins-x.io/refs.repo: jarvis lighthouse.jenkins-x.io/type: postsubmit owner: greencapitaltrade podName: capitaltrade-jarvis-main-release-2rlx9-from-build-pack-pod provider: github repository: jarvis tekton.dev/pipeline: capitaltrade-jarvis-main-release managedFields: - apiVersion: jenkins.io/v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:labels: f:branch: {} f:context: {} f:owner: {} f:provider: {} f:repository: {} f:spec: f:lastCommitMessage: {} f:lastCommitSHA: {} f:releaseNotesURL: {} f:version: {} manager: jx-changelog-0.10.29 operation: Update time: "2026-08-18T09:51:51Z" - apiVersion: jenkins.io/v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:annotations: .: {} f:lighthouse.jenkins-x.io/cloneURI: {} f:lighthouse.jenkins-x.io/job: {} f:pipeline.jenkins-x.io/traceID: {} f:labels: .: {} f:build: {} f:created-by-lighthouse: {} f:event-GUID: {} f:lighthouse.jenkins-x.io/baseSHA: {} f:lighthouse.jenkins-x.io/branch: {} f:lighthouse.jenkins-x.io/buildNum: {} f:lighthouse.jenkins-x.io/context: {} f:lighthouse.jenkins-x.io/id: {} f:lighthouse.jenkins-x.io/job: {} f:lighthouse.jenkins-x.io/lastCommitSHA: {} f:lighthouse.jenkins-x.io/refs.org: {} f:lighthouse.jenkins-x.io/refs.repo: {} f:lighthouse.jenkins-x.io/type: {} f:podName: {} f:tekton.dev/pipeline: {} f:spec: .: {} f:baseSHA: {} f:batchPipelineActivity: {} f:build: {} f:buildLogsUrl: {} f:completedTimestamp: {} f:context: {} f:gitBranch: {} f:gitOwner: {} f:gitRepository: {} f:gitUrl: {} f:message: {} f:pipeline: {} f:startedTimestamp: {} f:status: {} f:steps: {} manager: jx-build-controller operation: Update time: "2026-08-18T09:53:16Z" name: greencapitaltrade-jarvis-main-132 namespace: jx resourceVersion: "279054340" uid: ad4c0185-7976-4acd-b5cf-e5ed6e757f06 spec: baseSHA: 0d5a0b791c542c41bca74a2e03ba1db586e61a22 batchPipelineActivity: {} build: "132" buildLogsUrl: s3://logs-gct-prod-20260425045301534100000007/jenkins-x/logs/greencapitaltrade/jarvis/main/132.log completedTimestamp: "2026-08-18T09:53:11Z" context: release gitBranch: main gitOwner: greencapitaltrade gitRepository: jarvis gitUrl: https://github.com/greencapitaltrade/jarvis.git lastCommitMessage: | fix(workers): reclassify provider quota exhaustion as transient, not permanent _handle_exit_code() sorted every stage exit into exactly three buckets: 0 (success), <0 (interruption, silent retry), or else (permanent failure -> jarvis:error + a "failed permanently" comment). A Claude session-limit refusal exits a positive 1, so it landed in the permanent bucket even though the agent never ran and the refusal names its own reset time ("You've hit your session limit ... resets 3:50pm (UTC)"). On 2026-08-17 this stranded deadpool#215-217 for ~14h behind jarvis:error, needing manual rescue, with knock-on blocks on deadpool#218/bifrost#476 and stuck-draft rollups on deadpool#214/ bifrost#475. Quota exhaustion is a routinely-hit shared resource, so this was a recurring tax, not a one-off. Detect the refusal signature (session/usage limit text, HTTP 429) in the captured stage stdout/stderr and route it through the same re-enqueue path as a signal interruption: no jarvis:error, no "permanently failed" comment, retry_after parsed from the provider's own "resets