- install and Reset retire the channels they replace: a retired daily
writer appends a late record and closes the file again, so no record is
lost and no descriptor stays open; diary.Close keeps reopening the
installed writers on the next record
- ApplyGlobals holds the setup lock for its whole run (lock-free
installLocked and setVerbosityLocked), so concurrent calls rebuild the
channels once (WR-06)
- a failed open no longer disables the writer for good: it skips records
and tries again one minute later by its clock, or at the first record of
a new date, whichever comes first
- the warning (still 'daily log file disabled') appears once per date
- README and the logging page describe the retry (WR-04)
- the Try line replaces the value of every long flag whose name contains
password, passwd, secret, token or key with ***, in the --flag value and
--flag=value forms; other arguments are unchanged
- README and the writing-commands page say so (WR-08)
- dev.ShutdownGrace (internal, 15 seconds, longer than serve's 10-second
drain) is the grace child.stop waits after SIGTERM, instead of 2 seconds
- summer's delegates use the same constant (appShutdownGrace)
- scaffolding docs say summer dev waits for serve's shutdown report (WR-03)
- appStreams hands the app binary summer's own stdout and stderr on a
terminal, so it asks the production question, prints styled summaries
and animates its widgets
- off a terminal the binary's stdout goes through summer's Output and its
stderr to summer's stderr, so --json and -q output carry no log lines
- newAppCmd (unexported) takes the two writers; docs say the streams stay
apart (CR-03)
- bonfire.WithExitCode (additive) makes an error carry the exit code
bonfire.Execute returns; a code outside 1..255 gives 1
- runAppCmd, factored out of runAppBinary, returns
Reported(WithExitCode(err, code)) when the binary exited with a code, so
summer prints no second error block; a binary killed by a signal keeps
summer's block and exit 1
- README, console introduction and upgrading notes say so (CR-02)
- while a view runs, runLive relays SIGINT and SIGTERM (unless ignored);
on a signal it kills the program, which shows the cursor and restores
the terminal, unregisters the view, stops relaying and raises the same
signal again, so the default action or the command's own handler still
applies
- the generated main, bonfire.Execute's context and Ctrl+C for commands
without a live view are unchanged
- TestLiveViewRestoresTerminalOnSignal pins both paths in a re-executed
helper process (WR-01)
- the registered view keeps the console that started it; Println, Printf
and status lines go above it only from that console, other consoles
write to their own writers (bonfire.PrintAbove still reaches any view)
- runLive claims the single live slot by check and set under liveMu and
reports when it could not, so the widget prints plain lines
- unregister, finish and wait run deferred, so a panic in work leaves no
registration behind and still propagates (WR-02)
- each PrintAbove block is one bubbletea print message sent straight to
the program's queue under liveMu, so the event loop prints it in call
order instead of a command goroutine racing it back
- runLive unregisters, sends finishMsg and waits under liveMu, so a late
printer writes after the final frame and no line is lost
- TestPrintAboveOrderedNoLoss pins order and no loss for spinner,
progress, process and a printer racing the finish (CR-01)
Three plans per D-22: server side, SPA support (D-21), tests.
D-12 amended: a password set for another admin keeps their personal
API tokens, as admin:reset-password does. Research open questions
marked resolved.
- hello: vet, every test and the console tests by name
- docs: the charm decision note, TestDocsTree, docs:build --check, no
application names, examples on every summer command
- plugins: 15 swept repositories (vet, short, TestCommandsDocumented,
GOWORK=off build) and the additive check on each sweep commit
- apps: go build, summer build leaves main.go unchanged, list and help
- landing: nuxt generate and its TAP suite, terminal and roadmap tests,
sync-roadmap --check against origin/master
- docker: serve lifecycle, migration checklist flags, token JSON
- self-test: TAP detector, additive and NOT SWEPT rules on planted repos
- go stage: the new surf, conga, lagoon, flare, dev and summer names
- Docker: admin:token:create and list --json, -q keeps the token
- flare generate and test-push failures print once and are Reported
- summer dev starts serve with the forwarded globals, reports rebuilds,
failures and restarts, and stops serve with SIGTERM returning nil
- delegates carry two examples and say the global options pass through
- serve summary lines at -v and -q, records and HideOnTTY, DSN labels
- shutdown report: aborted requests fail the stop, a drained stop is nil
- request log: request_id cap, default on, off by config or env, never the
path for matched, 404 and 405 routes, component http; route:list --json
- WorkerStats through runAttempt: done, failed, in flight, handed back
- queue:clear and lagoon's production question on a pseudo-terminal:
no cancels with exit 1, --force, -n and other environments skip it
- Docker: PendingMigrations, migrate/rollback/deferred:purge --pretend,
production runs off a terminal never read stdin, migrate:status --json
- key:generate --json and -q
- PeekGlobals table, Args round trip, hook and PeekGlobals agree (clusters too)
- reserved flags, duplicate names, Call runs no OnGlobals hook
- exit codes 0/1/2, Reported silence, scrubbed errors, wrong-directory hint
- widget matrix: not a terminal byte for byte, -q, --no-ansi, -n, terminal
- live models through Update and View and one program run into a buffer
- prompts under -n, Secret from piped stdin, ConfirmProceed, PrintAbove
- list, list --all, list --format=json and an --ansi styled list (D-13, D-16)
- admin:token:create help and a passthrough help; help <cmd> equals --help (D-14)
- error blocks: hint with {bin}, unknown command, -v chain on stderr (D-18)
- CheckDocs gaps in order and sorted; the version header and BuildVersion
- goldens render with color detection cleared; -update rewrites them
pflag accepts -qn as -q -n and -vvq as -v -v -q, but PeekGlobals only
read clusters made of v, so the generated main's pre-boot diary setup,
the error block of Execute and passthrough commands missed -q, -n and
-v when they were clustered. Read the cluster letter by letter and stop
at the first letter that is not a global shorthand.
- River logs as component river at warn, conga at log.level, -v lets River info through
- an app-published logger wins for River and conga
- GORM: warn by default, info traces at -vvv, record-not-found ignored, parameterized SQL
- gate: the diary, sunscreen, conga and lagoon names in the go stage
- config rules name their key; env strings overlay defaults; D-08 defaults
- component floors, verbosity 1-3, quiet on the console only
- daily rotation, retention, 0640 files, unwritable dir, lazy open, path confinement
- redaction on every driver, console control-character stripping and prefix
- loggers before Setup, Reset, HideOnTTY, 100 concurrent writers
- testing/slogtest for the console handler and the JSON pipeline
- sunscreen InstallDefault still installs a redacting logfmt handler
- check-phase19.8.sh: go test -json detector, self-test on planted output
- go stage runs plans 1-3 smoke tests by name and the race run
- remaining stages stubbed so --all stays red