From 4cf2580980a7fa6f7a88c9247f59b37b9a422f35 Mon Sep 17 00:00:00 2001 From: Dustin Smith Date: Mon, 19 Jan 2026 20:48:14 +0700 Subject: [PATCH] fix: create daemon.json on install, make templates check informational - Add daemon.json creation to install.go (avoids patrol-hooks-wired warning) - Change patrol-roles-have-prompts to StatusOK (templates are embedded in binary) --- internal/cmd/install.go | 8 ++++++++ internal/doctor/patrol_check.go | 25 +++++++++++++++++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/internal/cmd/install.go b/internal/cmd/install.go index 9c37c725..351ca3ad 100644 --- a/internal/cmd/install.go +++ b/internal/cmd/install.go @@ -228,6 +228,14 @@ func runInstall(cmd *cobra.Command, args []string) error { fmt.Printf(" %s Could not create boot directory: %v\n", style.Dim.Render("⚠"), err) } + // Create daemon.json patrol config. + // This avoids gt doctor warning on fresh install. + if err := config.EnsureDaemonPatrolConfig(absPath); err != nil { + fmt.Printf(" %s Could not create daemon.json: %v\n", style.Dim.Render("⚠"), err) + } else { + fmt.Printf(" ✓ Created mayor/daemon.json\n") + } + // Initialize git BEFORE beads so that bd can compute repository fingerprint. // The fingerprint is required for the daemon to start properly. if installGit || installGitHub != "" { diff --git a/internal/doctor/patrol_check.go b/internal/doctor/patrol_check.go index 90fcf52f..bc42511f 100644 --- a/internal/doctor/patrol_check.go +++ b/internal/doctor/patrol_check.go @@ -458,11 +458,20 @@ func (c *PatrolRolesHavePromptsCheck) Run(ctx *CheckContext) *CheckResult { } var missingPrompts []string + rigsChecked := 0 for _, rigName := range rigs { // Check in mayor's clone (canonical for the rig) mayorRig := filepath.Join(ctx.TownRoot, rigName, "mayor", "rig") templatesDir := filepath.Join(mayorRig, "internal", "templates", "roles") + // Skip rigs that don't have internal/templates structure. + // Most repos won't have this - templates are embedded in gastown binary. + // Only check rigs that explicitly have their own template overrides. + if _, err := os.Stat(filepath.Join(mayorRig, "internal", "templates")); os.IsNotExist(err) { + continue + } + rigsChecked++ + var rigMissing []string for _, roleFile := range requiredRolePrompts { promptPath := filepath.Join(templatesDir, roleFile) @@ -476,13 +485,21 @@ func (c *PatrolRolesHavePromptsCheck) Run(ctx *CheckContext) *CheckResult { } } + // Templates are embedded in gastown binary - missing files in rig repos is normal. + // Only report as informational, not a warning. + if rigsChecked == 0 { + return &CheckResult{ + Name: c.Name(), + Status: StatusOK, + Message: "Using embedded role templates (no custom overrides)", + } + } + if len(missingPrompts) > 0 { return &CheckResult{ Name: c.Name(), - Status: StatusWarning, - Message: fmt.Sprintf("%d role prompt template(s) missing", len(missingPrompts)), - Details: missingPrompts, - FixHint: "Run 'gt doctor --fix' to copy embedded templates to rig repos", + Status: StatusOK, + Message: fmt.Sprintf("%d rig(s) using embedded templates for some roles", len(c.missingByRig)), } }