Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/fixed-14526.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Fleet report: the pr-request watcher's repeated `head branch is not on the remote` ERROR is now classified as `pr_request_head_unpushed` (medium, component `github-relay`) instead of `unclassified_error_repeated` ([#14526](https://github.com/hivecommons/hive/issues/14526)).
1 change: 1 addition & 0 deletions src/docs/fleet-report.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ title is `[selfreport] <class>: <short message>`.
| `agent_dir_setup_failed` | the harness failed to set up the per-agent sandbox directory structure β€” create XDG directories, restore or tighten directory permissions on interactive/inference home directories. Log-fed: keywords include `failed to create per-agent xdg dir`, `failed to restore per-agent dir mode`, `failed to restore interactive home mode`, `failed to tighten per-agent dir mode`, `failed to tighten interactive home mode`, `failed to restore inference home mode`, `failed to tighten inference home mode` (`crux/agent/manager.go`), repeated β‰₯5 times in 10 min. Log-fed: same repeat threshold and idle clear as `agent_pane_timeout` | medium |
| `agent_pane_timeout` | the agent-readiness wait timed out and the harness dumped the tmux pane (`prompt timeout β€” dumping pane` / `pane content at timeout`, `pkg/agent/manager.go`), and the startup kick dropped because the CLI never became ready or reached its input prompt (`startup kick dropped: …`, `crux/agent/manager_kick.go`, the same event as the pane dump). Log-fed: same β‰₯5-in-10-min repeat threshold and 20-min idle clear as the catch-all below; pane excerpts are scrubbed and bounded before storage | low |
| `agent_login_required` | the login scanner saw the agent CLI asking for `/login` (`login required detected`, `pkg/loginscan`) β€” the agent's auth lapsed and it is paused until an operator re-authenticates. Log-fed: same repeat threshold and idle clear as `agent_pane_timeout` | medium |
| `pr_request_head_unpushed` | the pr-request watcher found the PR head branch missing on the remote (`head branch is not on the remote`) β€” the agent's push did not authenticate or never ran. Log-fed: same repeat threshold and idle clear as `agent_pane_timeout` | medium |
| `bead_fact_ingest_failed` | the knowledge system failed to ingest a bead fact from an agent (`failed to ingest bead fact`, `pkg/knowledge`), repeated β‰₯5 times in 10 min. Log-fed: same repeat threshold and idle clear as `agent_pane_timeout` | medium |
| `feedback_issue_refresh_failed` | the dashboard's feedback-issue watcher failed to refresh or update a feedback issue (`feedback: issue refresh failed`, `pkg/dashboard`), repeated β‰₯5 times in 10 min. Log-fed: same repeat threshold and idle clear as `agent_pane_timeout` | medium |
| `github_app_repo_not_covered` | the GitHub App recheck (`state=repo-not-covered`) found the installation does not include every configured repo β€” an operator configuration condition (tick the repos in the App's repository access), not a hive defect. Log-fed: same β‰₯5-in-10-min repeat gate and 20-minute idle clear as `agent_pane_timeout` | low |
Expand Down
2 changes: 2 additions & 0 deletions src/pkg/fleetreport/runtime.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ const (
ClassInferenceUpstreamError = "inference_upstream_error"
ClassSHAPollCommitMsgUnavail = "sha_poll_commit_message_unavailable"
ClassAgentLoginRequired = "agent_login_required"
ClassPRRequestHeadUnpushed = "pr_request_head_unpushed"
ClassIOScanClassifierUnavail = "ioscan_classifier_unavailable"
ClassGitHubFetchTransient = "github_fetch_transient"
ClassLabelProvisioningFailed = "label_provisioning_failed"
Expand Down Expand Up @@ -190,6 +191,7 @@ var Classes = map[string]ClassSpec{
ClassInferenceUpstreamError: {Component: "inference-gateway", Severity: "medium", MinCount: unclassifiedRepeatCount, Window: unclassifiedRepeatWindow, IdleClear: unclassifiedIdleClear, LogFed: true, Keywords: []string{"inference upstream error", "inference upstream failed"}},
ClassSHAPollCommitMsgUnavail: {Component: "github-client", Severity: "low", MinCount: unclassifiedRepeatCount, Window: unclassifiedRepeatWindow, IdleClear: unclassifiedIdleClear, LogFed: true, Keywords: []string{"sha poll: commit message fetch non-200"}},
ClassAgentLoginRequired: {Component: "agent-runtime", Severity: "medium", MinCount: unclassifiedRepeatCount, Window: unclassifiedRepeatWindow, IdleClear: unclassifiedIdleClear, LogFed: true, Keywords: []string{"login required detected"}},
ClassPRRequestHeadUnpushed: {Component: "github-relay", Severity: "medium", MinCount: unclassifiedRepeatCount, Window: unclassifiedRepeatWindow, IdleClear: unclassifiedIdleClear, LogFed: true, Keywords: []string{"head branch is not on the remote"}},
ClassIOScanClassifierUnavail: {Component: "inference-gateway", Severity: "medium", MinCount: 1, IdleClear: unclassifiedIdleClear, LogFed: true, Keywords: []string{"ioscan classifier failed closed", "ioscan fail-closed blocked kick"}},
ClassGitHubFetchTransient: {Component: "github-client", Severity: "low", MinCount: unclassifiedRepeatCount, Window: unclassifiedRepeatWindow, IdleClear: unclassifiedIdleClear, LogFed: true, Keywords: []string{"channel commit date: fetch failed"}},
ClassLabelProvisioningFailed: {Component: "github-client", Severity: "low", MinCount: unclassifiedRepeatCount, Window: unclassifiedRepeatWindow, IdleClear: unclassifiedIdleClear, LogFed: true, Keywords: []string{"issue stage labels: provisioning failed"}},
Expand Down
62 changes: 32 additions & 30 deletions src/pkg/fleetreport/runtime_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,7 @@ func TestEveryRuntimeClassTriggerAndNonTriggerThresholds(t *testing.T) {
{class: ClassInferenceUpstreamError, message: "inference upstream error"},
{class: ClassSHAPollCommitMsgUnavail, message: "SHA poll: commit message fetch non-200"},
{class: ClassAgentLoginRequired, message: "login required detected"},
{class: ClassPRRequestHeadUnpushed, message: "pr-request watcher: head branch is not on the remote β€” the agent's push did not authenticate"},
{class: ClassIOScanClassifierUnavail, message: "ioscan classifier failed closed; text withheld"},
{class: ClassIOScanClassifierUnavail, message: "ioscan fail-closed blocked kick"},
{class: ClassGitHubFetchTransient, message: "channel commit date: fetch failed β€” the row will render without a timestamp"},
Expand Down Expand Up @@ -930,36 +931,37 @@ func TestUnclassifiedRepeatedHonoursWindowAndIdleClear(t *testing.T) {
func TestRecurringRuntimeMessagesAreClassified(t *testing.T) {
fed := map[string]string{
"startup kick dropped: agent restarted or stopped while waiting": ClassStartupKickInterrupted,
"tmux has-session failed": ClassTmuxSessionCheckFailed,
"pane content at timeout": ClassAgentPaneTimeout,
"prompt timeout β€” dumping pane": ClassAgentPaneTimeout,
"startup kick dropped: CLI never reached input prompt": ClassAgentPaneTimeout,
"startup kick dropped: CLI never became ready": ClassAgentPaneTimeout,
"channel commit date: fetch failed β€” the row will render without a timestamp": ClassGitHubFetchTransient,
"issue stage labels: provisioning failed": ClassLabelProvisioningFailed,
"agent CLI crashed or stuck on consent screen, restarting before kick": ClassAgentCLIRestartLoop,
"SHA poll: commit message fetch non-200": ClassSHAPollCommitMsgUnavail,
"login required detected": ClassAgentLoginRequired,
"ioscan classifier failed closed; text withheld": ClassIOScanClassifierUnavail,
"ioscan fail-closed blocked kick": ClassIOScanClassifierUnavail,
"proxy client TLS handshake failed": ClassProxyTLSHandshakeFailed,
"transparent proxy TLS handshake failed": ClassProxyTLSHandshakeFailed,
"failed to restore per-agent dir mode": ClassAgentDirSetupFailed,
"failed to restore interactive home mode": ClassAgentDirSetupFailed,
"failed to tighten per-agent dir mode": ClassAgentDirSetupFailed,
"failed to tighten interactive home mode": ClassAgentDirSetupFailed,
"failed to create per-agent XDG dir": ClassAgentDirSetupFailed,
"review evidence: could not write bundle": ClassReviewEvidenceWriteFail,
"feedback: issue refresh failed": ClassFeedbackIssueRefreshFailed,
"failed to restore inference home mode": ClassAgentDirSetupFailed,
"failed to tighten inference home mode": ClassAgentDirSetupFailed,
"failed to ingest bead fact": ClassBeadFactIngestFailed,
"fleet report: cleared comment failed": ClassSelfReportClearedFailed,
"copilot sniff: client TLS handshake failed": ClassProxyTLSHandshakeFailed,
"github app recheck: installation does not cover every configured repo": ClassGitHubAppRepoNotCovered,
"proxy: CONNECT dial failed": ClassProxyConnectDialFailed,
"inference upstream error": ClassInferenceUpstreamError,
"inference upstream failed": ClassInferenceUpstreamError,
"tmux has-session failed": ClassTmuxSessionCheckFailed,
"pane content at timeout": ClassAgentPaneTimeout,
"prompt timeout β€” dumping pane": ClassAgentPaneTimeout,
"startup kick dropped: CLI never reached input prompt": ClassAgentPaneTimeout,
"startup kick dropped: CLI never became ready": ClassAgentPaneTimeout,
"channel commit date: fetch failed β€” the row will render without a timestamp": ClassGitHubFetchTransient,
"issue stage labels: provisioning failed": ClassLabelProvisioningFailed,
"agent CLI crashed or stuck on consent screen, restarting before kick": ClassAgentCLIRestartLoop,
"SHA poll: commit message fetch non-200": ClassSHAPollCommitMsgUnavail,
"login required detected": ClassAgentLoginRequired,
"pr-request watcher: head branch is not on the remote β€” the agent's push did not authenticate": ClassPRRequestHeadUnpushed,
"ioscan classifier failed closed; text withheld": ClassIOScanClassifierUnavail,
"ioscan fail-closed blocked kick": ClassIOScanClassifierUnavail,
"proxy client TLS handshake failed": ClassProxyTLSHandshakeFailed,
"transparent proxy TLS handshake failed": ClassProxyTLSHandshakeFailed,
"failed to restore per-agent dir mode": ClassAgentDirSetupFailed,
"failed to restore interactive home mode": ClassAgentDirSetupFailed,
"failed to tighten per-agent dir mode": ClassAgentDirSetupFailed,
"failed to tighten interactive home mode": ClassAgentDirSetupFailed,
"failed to create per-agent XDG dir": ClassAgentDirSetupFailed,
"review evidence: could not write bundle": ClassReviewEvidenceWriteFail,
"feedback: issue refresh failed": ClassFeedbackIssueRefreshFailed,
"failed to restore inference home mode": ClassAgentDirSetupFailed,
"failed to tighten inference home mode": ClassAgentDirSetupFailed,
"failed to ingest bead fact": ClassBeadFactIngestFailed,
"fleet report: cleared comment failed": ClassSelfReportClearedFailed,
"copilot sniff: client TLS handshake failed": ClassProxyTLSHandshakeFailed,
"github app recheck: installation does not cover every configured repo": ClassGitHubAppRepoNotCovered,
"proxy: CONNECT dial failed": ClassProxyConnectDialFailed,
"inference upstream error": ClassInferenceUpstreamError,
"inference upstream failed": ClassInferenceUpstreamError,
}
for msg, want := range fed {
if got := LogFedClass(msg); got != want {
Expand Down
Loading