oficina / meet Public

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
Paul Campbell pushed by paul@keymail.dev fd626d65627c2e6d2eeee83d0bea365cfc34fe92 parent 85025bc
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
+}