main: strip -env before rastrillo parses argv
The platform launches with -socket and -db; flag.Parse with only -env refused them and the instance exited with status 2 on every wake (codex code review C1-5). Slides' extractEnvFlag shape.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P6JGj6G5cLrt2Frm8yywgK
1 file changed,
+38
−5
cmd/meet/main.go+38 −5
CI passed — run details
diff --git a/cmd/meet/main.go b/cmd/meet/main.go| index 24ea113..0e0a725 100644 |
| --- a/cmd/meet/main.go |
| +++ b/cmd/meet/main.go |
| @@ -1,7 +1,7 @@ |
| package main |
| import ( |
| - "flag" |
| + "fmt" |
| "log/slog" |
| "os" |
| "strings" |
| @@ -16,10 +16,18 @@ import ( |
| func main() { |
| logger := slog.New(slog.NewTextHandler(os.Stderr, nil)) |
| - // Only the flag can select development: an env var that could would |
| - // let a misconfigured box relax every refusal (config.go). |
| - env := flag.String("env", "", "set to development to relax startup refusals") |
| - flag.Parse() |
| + // -env is stripped before Resolve sees argv, because Resolve parses |
| + // os.Args itself for -socket, -addr and -db and a second flag set |
| + // would refuse the platform's own activation arguments. Only the |
| + // flag can select development: an env var that could would let a |
| + // misconfigured box relax every refusal (config.go). |
| + envFlag, rest, err := extractEnvFlag(os.Args[1:]) |
| + if err != nil { |
| + logger.Error("read flags", "err", err) |
| + os.Exit(1) |
| + } |
| + os.Args = append(os.Args[:1], rest...) |
| + env := &envFlag |
| opts, err := rastrillo.Resolve(rastrillo.Options{DBPath: "meet.db", Logger: logger}) |
| if err != nil { |
| @@ -97,3 +105,28 @@ func newMailer(logger *slog.Logger) mail.Sender { |
| logger.Info("meet: SMTP configured", "host", host, "from", from) |
| return mail.SMTP(host, smtpSetting("PORT"), from, smtpSecret("USER"), smtpSecret("PASS")) |
| } |
| + |
| +// extractEnvFlag pulls -env (in its four spellings) out of argv and |
| +// returns the rest untouched for rastrillo.Resolve. Slides' shape. |
| +func extractEnvFlag(args []string) (env string, rest []string, err error) { |
| + for i := 0; i < len(args); i++ { |
| + a := args[i] |
| + switch { |
| + case a == "-env" || a == "--env": |
| + if i+1 >= len(args) { |
| + return "", nil, fmt.Errorf("%s needs a value, for example: %s development", a, a) |
| + } |
| + env = args[i+1] |
| + i++ |
| + continue |
| + case strings.HasPrefix(a, "-env="): |
| + env = strings.TrimPrefix(a, "-env=") |
| + continue |
| + case strings.HasPrefix(a, "--env="): |
| + env = strings.TrimPrefix(a, "--env=") |
| + continue |
| + } |
| + rest = append(rest, a) |
| + } |
| + return env, rest, nil |
| +} |