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 diff --git a/slack.go b/slack.go index b0a043c..826a809 100644 --- a/slack.go +++ b/slack.go @@ -363,7 +363,17 @@ 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) { + // 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)) stripCurrentTeamTitleFromPrefix(template, cfg.TeamName) @@ -414,7 +424,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)