From 92bc957d83672cb80a6a7366835657d838d79f12 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 10:54:40 +0000 Subject: [PATCH 1/4] Initial plan From 38fc35a05b236c03651683c9f151f0eca60e81b1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 10:58:07 +0000 Subject: [PATCH 2/4] Fix error handling in boss-mode shortcut to distinguish file-not-found from other errors Co-authored-by: WZ <719869+WZ@users.noreply.github.com> --- slack.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/slack.go b/slack.go index b0a043c..df030ce 100644 --- a/slack.go +++ b/slack.go @@ -363,7 +363,16 @@ func handleGenerateReport(api *slack.Client, db *sql.DB, cfg Config, cmd slack.S if mode == "boss" { teamReportFile := fmt.Sprintf("%s_%s.md", cfg.TeamName, friday.Format("20060102")) teamReportPath := filepath.Join(cfg.ReportOutputDir, teamReportFile) - if content, readErr := os.ReadFile(teamReportPath); readErr == nil && len(content) > 0 { + content, readErr := os.ReadFile(teamReportPath) + if readErr != nil { + if os.IsNotExist(readErr) { + log.Printf("generate-report boss: no existing team report found, running full pipeline") + } else { + log.Printf("Error reading team report file %s: %v", teamReportPath, readErr) + postEphemeral(api, cmd, fmt.Sprintf("Error reading team report file: %v", readErr)) + return + } + } else if len(content) > 0 { log.Printf("generate-report boss: deriving from existing team report %s", teamReportPath) template := parseTemplate(string(content)) stripCurrentTeamTitleFromPrefix(template, cfg.TeamName) @@ -414,7 +423,6 @@ func handleGenerateReport(api *slack.Client, db *sql.DB, cfg Config, cmd slack.S log.Printf("generate-report done mode=boss derived-from-team") return } - log.Printf("generate-report boss: no existing team report found, running full pipeline") } items, err := GetItemsByDateRange(db, monday, nextMonday) From a1b5fd62c9e6d6fb4348eb0e89d7ecb30343a45e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 10:59:00 +0000 Subject: [PATCH 3/4] Improve error handling clarity with better control flow and comments Co-authored-by: WZ <719869+WZ@users.noreply.github.com> --- slack.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/slack.go b/slack.go index df030ce..826a809 100644 --- a/slack.go +++ b/slack.go @@ -365,13 +365,14 @@ func handleGenerateReport(api *slack.Client, db *sql.DB, cfg Config, cmd slack.S teamReportPath := filepath.Join(cfg.ReportOutputDir, teamReportFile) content, readErr := os.ReadFile(teamReportPath) if readErr != nil { - if os.IsNotExist(readErr) { - log.Printf("generate-report boss: no existing team report found, running full pipeline") - } else { + if !os.IsNotExist(readErr) { + // Unexpected error (permission, I/O, etc.) - surface it and abort log.Printf("Error reading team report file %s: %v", teamReportPath, readErr) postEphemeral(api, cmd, fmt.Sprintf("Error reading team report file: %v", readErr)) return } + // File doesn't exist - fall through to full pipeline below + log.Printf("generate-report boss: no existing team report found, running full pipeline") } else if len(content) > 0 { log.Printf("generate-report boss: deriving from existing team report %s", teamReportPath) template := parseTemplate(string(content)) From 26440904905974f9c732a9c84ca9382830af568e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 16 Feb 2026 11:00:03 +0000 Subject: [PATCH 4/4] Complete error handling fix for boss-mode shortcut Co-authored-by: WZ <719869+WZ@users.noreply.github.com> --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 8493b6b..2db2da3 100644 --- a/go.mod +++ b/go.mod @@ -5,13 +5,13 @@ go 1.23.0 require ( github.com/anthropics/anthropic-sdk-go v1.22.0 github.com/mattn/go-sqlite3 v1.14.33 + github.com/robfig/cron/v3 v3.0.1 github.com/slack-go/slack v0.17.3 gopkg.in/yaml.v3 v3.0.1 ) require ( github.com/gorilla/websocket v1.5.3 // indirect - github.com/robfig/cron/v3 v3.0.1 // indirect github.com/tidwall/gjson v1.18.0 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect