feat: comprehensive hint coverage across all CLI commands#900
feat: comprehensive hint coverage across all CLI commands#900
Conversation
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (1)
WalkthroughThe PR adds user-facing UI hints and guidance across many CLI commands (backup, cleanup, config, doctor, init, logs, start, status, stop, uninstall, update, update_cleanup, version, wipe). It introduces new helpers ( Suggested labels
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Snapshot WarningsEnsure that dependencies are being submitted on PR branches. Re-running this action after a short time may resolve the issue. See the documentation for more information and troubleshooting advice. Scanned FilesNone |
There was a problem hiding this comment.
Code Review
This pull request introduces a comprehensive set of contextual hints and guidance across the CLI commands to improve user discoverability of features and configurations. Key changes include adding tips for flags like --output, --limit, and --fix, as well as guidance on configuration settings like auto_cleanup and auto_pull. The review feedback identifies opportunities to improve code maintainability by deduplicating hint strings in the logs command and consolidating UI component instantiations in the update command.
cli/cmd/logs.go
Outdated
| out.HintGuidance("Filter by service: 'synthorg logs backend'. Use --since 1h for time-based filtering.") | ||
| } | ||
|
|
||
| composeArgs := buildLogsArgs(strings.TrimSpace(logTail), args) | ||
| return composeRun(ctx, cmd, info, safeDir, composeArgs...) | ||
| if err := composeRun(ctx, cmd, info, safeDir, composeArgs...); err != nil { | ||
| return err | ||
| } | ||
|
|
||
| out.HintTip("Use -f to follow log output in real time.") | ||
| out.HintGuidance("Filter by service: 'synthorg logs backend'. Use --since 1h for time-based filtering.") |
There was a problem hiding this comment.
The guidance hint "Filter by service: 'synthorg logs backend'. Use --since 1h for time-based filtering." is duplicated on lines 86 and 95. To improve maintainability and avoid potential inconsistencies, consider extracting this string into a constant or a local variable at the beginning of the function.
cli/cmd/update.go
Outdated
| return performRestart(ctx, out, info, safeDir, state, opts.UIOptions()) | ||
| restarted, restartErr := performRestart(ctx, out, info, safeDir, state, opts.UIOptions()) | ||
| if restarted { | ||
| restartOut := ui.NewUIWithOptions(out, opts.UIOptions()) |
There was a problem hiding this comment.
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
cli/cmd/wipe.go (1)
186-204:⚠️ Potential issue | 🟡 Minor
manualStartalso becomes true forwipe --yes.
promptStartAfterWipe()returnstruewithout showing a prompt when prompting is disabled, so this condition also fires on successful--yeswipes. That makes theauto_start_after_wipetip show even though the restart already happened automatically in this run.Suggested fix
- manualStart := startAfter && !wc.state.AutoStartAfterWipe + manualStart := wc.shouldPrompt() && startAfter && !wc.state.AutoStartAfterWipe🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@cli/cmd/wipe.go` around lines 186 - 204, The current logic sets manualStart := startAfter && !wc.state.AutoStartAfterWipe which incorrectly stays true when startAfter came from a non-interactive prompt (e.g. --yes) and containers were actually restarted; change to record the user's prompt intent separately (e.g. promptRequested := startAfter && !wc.state.AutoStartAfterWipe), attempt the restart and track success (e.g. restarted := false; if startAfter { if err := wc.startContainers(); err != nil { /* handle as now */ } else { restarted = true } }), and finally set manualStart = promptRequested && !restarted so the auto_start_after_wipe hint only shows when the restart did not occur; reference manualStart, startAfter, wc.startContainers(), and wc.state.AutoStartAfterWipe when implementing.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@cli/cmd/logs.go`:
- Around line 80-97: The duplicate guidance string passed to out.HintGuidance in
logs.go should be extracted to a single shared constant (e.g., const
logsGuidance = "Filter by service: 'synthorg logs backend'. Use --since 1h for
time-based filtering.") and both call sites (the conditional when logFollow is
true and the post-composeRun call) should reference that constant instead of
hardcoding the message; add the const near the top of the file and replace both
out.HintGuidance invocations to use logsGuidance so future edits remain
consistent.
In `@cli/cmd/status.go`:
- Around line 298-300: The hint always suggests "--services" even when the user
already passed it, leading to a confusing message; modify the conditional where
out.HintGuidance is called (related to statusWide and statusServices) so the
guidance text is tailored: if !statusWide && !statusServices show "Use --wide to
show port mappings, or --services to filter by name.", if !statusWide &&
statusServices show "Use --wide to show port mappings." (use the existing
statusWide and statusServices flags and the out.HintGuidance call to select the
appropriate message).
In `@cli/cmd/update.go`:
- Line 166: The hint message shown via out.HintGuidance is self-referential when
already running in --check mode; update the call that currently prints "Use
--check for scripted update detection (exit code 10 = update available)." to
instead explain the exit-code semantics directly (e.g., state that exit code 10
indicates an update is available and other codes for no-update/error) so users
in check mode get clear guidance; locate the out.HintGuidance(...) invocation
and replace its text accordingly.
---
Outside diff comments:
In `@cli/cmd/wipe.go`:
- Around line 186-204: The current logic sets manualStart := startAfter &&
!wc.state.AutoStartAfterWipe which incorrectly stays true when startAfter came
from a non-interactive prompt (e.g. --yes) and containers were actually
restarted; change to record the user's prompt intent separately (e.g.
promptRequested := startAfter && !wc.state.AutoStartAfterWipe), attempt the
restart and track success (e.g. restarted := false; if startAfter { if err :=
wc.startContainers(); err != nil { /* handle as now */ } else { restarted = true
} }), and finally set manualStart = promptRequested && !restarted so the
auto_start_after_wipe hint only shows when the restart did not occur; reference
manualStart, startAfter, wc.startContainers(), and wc.state.AutoStartAfterWipe
when implementing.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 4e08ed28-b84d-4c69-a5be-c96eea5e9637
📒 Files selected for processing (14)
cli/cmd/backup.gocli/cmd/cleanup.gocli/cmd/config.gocli/cmd/doctor.gocli/cmd/init.gocli/cmd/logs.gocli/cmd/start.gocli/cmd/status.gocli/cmd/stop.gocli/cmd/uninstall.gocli/cmd/update.gocli/cmd/update_cleanup.gocli/cmd/version.gocli/cmd/wipe.go
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: CLI Test (windows-latest)
- GitHub Check: Dependency Review
- GitHub Check: Analyze (python)
🧰 Additional context used
📓 Path-based instructions (2)
cli/**/*.go
📄 CodeRabbit inference engine (CLAUDE.md)
Use native Go testing.F fuzz functions (Fuzz*) for property-based fuzzing tests.
Files:
cli/cmd/version.gocli/cmd/doctor.gocli/cmd/backup.gocli/cmd/update_cleanup.gocli/cmd/config.gocli/cmd/wipe.gocli/cmd/stop.gocli/cmd/cleanup.gocli/cmd/init.gocli/cmd/uninstall.gocli/cmd/logs.gocli/cmd/status.gocli/cmd/start.gocli/cmd/update.go
**/*.go
📄 CodeRabbit inference engine (CLAUDE.md)
Use
go -C cli(withoutcd) to run Go tooling from the project root, changing directory internally. Never usecd cliin Bash commands as it poisons the shell's working directory.
Files:
cli/cmd/version.gocli/cmd/doctor.gocli/cmd/backup.gocli/cmd/update_cleanup.gocli/cmd/config.gocli/cmd/wipe.gocli/cmd/stop.gocli/cmd/cleanup.gocli/cmd/init.gocli/cmd/uninstall.gocli/cmd/logs.gocli/cmd/status.gocli/cmd/start.gocli/cmd/update.go
🧠 Learnings (8)
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to cli/** : CLI: Go 1.26+, dependencies in cli/go.mod (Cobra, charmbracelet/huh).
Applied to files:
cli/cmd/version.gocli/cmd/logs.gocli/cmd/update.go
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to cli/go.mod : Go CLI dependencies: Go 1.26+, Cobra (commands), charmbracelet/huh (interactive CLI), charmbracelet/lipgloss (styled output).
Applied to files:
cli/cmd/version.gocli/cmd/logs.go
📚 Learning: 2026-03-21T12:54:22.557Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-21T12:54:22.557Z
Learning: Go 1.26+ required; CLI dependencies in `cli/go.mod` (Cobra, charmbracelet/huh, charmbracelet/lipgloss, sigstore-go, go-containerregistry, go-tuf)
Applied to files:
cli/cmd/version.gocli/cmd/logs.gocli/cmd/update.go
📚 Learning: 2026-03-21T14:12:17.848Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-21T14:12:17.848Z
Learning: Applies to cli/go.mod : CLI uses Go 1.26+. Dependencies: Cobra, charmbracelet/huh, charmbracelet/lipgloss, sigstore-go, go-containerregistry, go-tuf
Applied to files:
cli/cmd/version.gocli/cmd/logs.go
📚 Learning: 2026-03-28T12:42:32.168Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-28T12:42:32.168Z
Learning: Applies to cli/go.mod : Require Go 1.26+. Core dependencies: Cobra, charmbracelet/huh, charmbracelet/lipgloss, sigstore-go, go-containerregistry, go-tuf. Use `go -C cli` (not `cd cli`) to run commands from project root.
Applied to files:
cli/cmd/version.gocli/cmd/logs.gocli/cmd/update.go
📚 Learning: 2026-03-21T12:54:22.557Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-21T12:54:22.557Z
Learning: Applies to cli/**/*.go : Use Cobra for CLI command structure, charmbracelet/huh for interactive prompts, and charmbracelet/lipgloss for terminal styling
Applied to files:
cli/cmd/logs.go
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to cli/**/*.go : Go CLI (Go 1.26+) uses Cobra for commands, charmbracelet/huh for interactive CLI, charmbracelet/lipgloss for styled output. Cross-platform builds (linux/darwin/windows × amd64/arm64). GoReleaser for releases with cosign keyless signing of checksums.txt. SLSA L3 provenance attestations via actions/attest-build-provenance.
Applied to files:
cli/cmd/logs.go
📚 Learning: 2026-03-19T11:19:40.044Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:19:40.044Z
Learning: Applies to go.mod : Maintain Go 1.26+ requirement. Dependencies: Cobra (CLI framework), charmbracelet/huh and charmbracelet/lipgloss (UI), sigstore-go (code signing), go-containerregistry (container image verification), go-tuf (TUF client for Sigstore).
Applied to files:
cli/cmd/logs.go
🔇 Additional comments (23)
cli/cmd/update_cleanup.go (1)
89-89: Good post-action discovery hint placement.Line 89 cleanly adds contextual guidance without altering cleanup behavior, and it stays aligned with the new HintGuidance usage model.
cli/cmd/cleanup.go (3)
83-85: Nice state-aware hint for the empty-result path.Lines 83-85 provide actionable guidance only when
auto_cleanupis disabled, which keeps the message relevant.
100-102: Clear safety guidance for--allmode.Lines 100-102 improve operator awareness of scope and in-use removal limits at the right point in the flow.
195-197: Good contextual follow-up after successful cleanup.Lines 195-197 provide a practical next-step hint only when removal actually happened, which is a strong UX fit.
cli/cmd/version.go (1)
28-28: Verification passed: HintGuidance method and--checkflag both correctly implemented.The
HintGuidancemethod exists on the UI type atcli/internal/ui/ui.go:263and correctly respects the hints configuration (returns early ifhints != "always"). Theupdatecommand's--checkflag is properly defined atcli/cmd/update.go:55. The implementation is sound.cli/cmd/doctor.go (1)
126-138: Hint routing here is clean and behavior-safe.The added doctor hints improve recovery/discovery without changing execution logic or error flow.
cli/cmd/config.go (1)
300-338: Good helper extraction for post-config setguidance.Centralizing these hints keeps
runConfigSetlean and makes key-specific UX messaging easier to maintain.cli/cmd/backup.go (1)
401-403: These backup hints are well-placed and improve command discoverability.Nice additions for local export, list filtering, and safety-backup awareness without affecting runtime behavior.
Also applies to: 485-485, 609-609
cli/cmd/uninstall.go (1)
80-80: Post-uninstall guidance is clear and useful.The new hints make retained-state outcomes explicit and give a concrete reinstall path.
Also applies to: 91-91, 113-113
cli/cmd/init.go (1)
106-110: Strong onboarding improvement after initialization.The dev-channel warning and config follow-up guidance are timely and low-risk additions.
cli/cmd/start.go (1)
121-121: Great start-flow hint coverage across execution modes.This gives users clear next actions for dry-run, foreground, no-wait, and no-pull scenarios while keeping behavior unchanged.
Also applies to: 155-155, 180-180, 188-191
cli/cmd/stop.go (1)
74-79: Good destructive-action feedback and restart guidance.The new hints clearly distinguish preserved vs deleted persistent data and provide an immediate next command.
cli/cmd/status.go (3)
92-98: Good error propagation before post-run guidance.This correctly preserves
runStatusOncefailures and only emits guidance on success.
292-293: Helpful next-step hint for empty stack state.The added prompt after “No containers running” is clear and actionable.
408-409: Strong unhealthy-backend recovery guidance.The diagnostic hint is well-placed in the unhealthy branch.
cli/cmd/update.go (7)
92-94: UI initialization placement is clean and reusable.Initializing
opts/outonce inrunUpdateimproves consistency for subsequent hint emissions.
106-106:--cli-onlyfollow-up hint is clear.Good discoverability for the complementary
--images-onlypath.
110-116: Explicit error handling plus reciprocal hint looks good.Returning early on
updateComposeAndImageserror and adding the complementary guidance is solid.
162-162: Good next-step hint when update is available.This is the right hint tier and location for actionable follow-up.
239-241: Nice auto-config tip gating.Conditioning the
auto_update_clitip on!autoAcceptavoids noisy guidance for already-automated setups.
415-417: Manual-pull detection and post-action hinting are well integrated.The
manualPullflag plus post-successHintTipis coherent and keeps hints tied to successful operations.Also applies to: 438-438, 454-460
677-683: Restart result handling and conditional tip are correctly scoped.Capturing
(restarted, restartErr)before hinting avoids false-positive tips and preserves original error flow.cli/cmd/wipe.go (1)
170-179: Helpful outcome-specific hints.The
--keep-imagesnext step and--no-backupwarning both fit the completed wipe state and improve post-action guidance without changing the workflow.
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@cli/cmd/config.go`:
- Around line 504-511: Extract the duplicate compose restart hint logic used in
runConfigSet and runConfigUnset into a shared helper (e.g.,
hintAfterComposeChange or reuse hintAfterConfigSet) that takes the State and the
hint text; move the os.Stat + config.SecurePath check (using
composeAffectingKeys and state.DataDir) into that helper and call
out.HintGuidance with the passed message ("Restart containers with 'synthorg
stop && synthorg start' to apply the new/default value."), so both runConfigSet
and runConfigUnset call the same helper instead of duplicating the
SecurePath/Stat logic.
- Around line 308-313: Add the same CodeQL-tracing comment used in
regenerateCompose before direct calls to config.SecurePath in hintAfterConfigSet
and runConfigUnset: place a line reading "// Use config.SecurePath directly so
that CodeQL can trace the sanitization for go/path-injection." immediately above
the SecurePath call(s) (the calls to config.SecurePath in hintAfterConfigSet and
in runConfigUnset) so static analysis can consistently see the sanitization.
In `@cli/cmd/doctor.go`:
- Around line 124-137: The hint "Run 'synthorg doctor' again to verify fixes."
is shown even when doctorAutoFix returns early without doing any fixes; change
doctorAutoFix to return a boolean indicating whether any fixes were performed
(e.g., func doctorAutoFix(...) (bool, error) or (bool)), update the call site in
runDoctor to capture that value, and only call out.HintGuidance("Run 'synthorg
doctor' again to verify fixes.") when the returned fixesPerformed is true; keep
existing logging/error handling behavior otherwise.
In `@cli/cmd/logs.go`:
- Around line 85-98: The code prints the same logsFilterHint twice when
logFollow is true because HintGuidance(logsFilterHint) is called both before
composeRun and after it; update the post-run section to skip the second
out.HintGuidance(logsFilterHint) when the logFollow flag is set (i.e., only call
out.HintGuidance(logsFilterHint) after composeRun if logFollow is false),
keeping the pre-run hint for follow mode and leaving HintTip unconditional.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 3ad69821-494c-4fcb-a452-8898ecf72b46
📒 Files selected for processing (10)
CLAUDE.mdcli/cmd/config.gocli/cmd/doctor.gocli/cmd/init.gocli/cmd/logs.gocli/cmd/status.gocli/cmd/stop.gocli/cmd/update.gocli/cmd/update_cleanup.gocli/cmd/wipe.go
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: CLI Test (windows-latest)
- GitHub Check: Dependency Review
- GitHub Check: Analyze (python)
🧰 Additional context used
📓 Path-based instructions (3)
cli/**/*.go
📄 CodeRabbit inference engine (CLAUDE.md)
Use native Go testing.F fuzz functions (Fuzz*) for property-based fuzzing tests.
Files:
cli/cmd/stop.gocli/cmd/init.gocli/cmd/update_cleanup.gocli/cmd/logs.gocli/cmd/doctor.gocli/cmd/status.gocli/cmd/config.gocli/cmd/update.gocli/cmd/wipe.go
**/*.go
📄 CodeRabbit inference engine (CLAUDE.md)
Use
go -C cli(withoutcd) to run Go tooling from the project root, changing directory internally. Never usecd cliin Bash commands as it poisons the shell's working directory.
Files:
cli/cmd/stop.gocli/cmd/init.gocli/cmd/update_cleanup.gocli/cmd/logs.gocli/cmd/doctor.gocli/cmd/status.gocli/cmd/config.gocli/cmd/update.gocli/cmd/wipe.go
**/*.md
📄 CodeRabbit inference engine (CLAUDE.md)
When a spec topic is referenced (e.g., 'the Agents page' or 'the Engine page's Crash Recovery section'), read the relevant
docs/design/page before coding. When approved deviations occur, update the relevantdocs/design/page to reflect the new reality.
Files:
CLAUDE.md
🧠 Learnings (8)
📚 Learning: 2026-03-21T12:54:22.557Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-21T12:54:22.557Z
Learning: Applies to cli/**/*.go : Use Cobra for CLI command structure, charmbracelet/huh for interactive prompts, and charmbracelet/lipgloss for terminal styling
Applied to files:
cli/cmd/logs.go
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to cli/** : CLI: Go 1.26+, dependencies in cli/go.mod (Cobra, charmbracelet/huh).
Applied to files:
cli/cmd/logs.gocli/cmd/update.go
📚 Learning: 2026-03-21T12:54:22.557Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-21T12:54:22.557Z
Learning: Go 1.26+ required; CLI dependencies in `cli/go.mod` (Cobra, charmbracelet/huh, charmbracelet/lipgloss, sigstore-go, go-containerregistry, go-tuf)
Applied to files:
cli/cmd/logs.gocli/cmd/update.go
📚 Learning: 2026-03-21T14:12:17.848Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-21T14:12:17.848Z
Learning: Applies to cli/go.mod : CLI uses Go 1.26+. Dependencies: Cobra, charmbracelet/huh, charmbracelet/lipgloss, sigstore-go, go-containerregistry, go-tuf
Applied to files:
cli/cmd/logs.gocli/cmd/update.go
📚 Learning: 2026-03-28T12:42:32.168Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-28T12:42:32.168Z
Learning: Applies to cli/go.mod : Require Go 1.26+. Core dependencies: Cobra, charmbracelet/huh, charmbracelet/lipgloss, sigstore-go, go-containerregistry, go-tuf. Use `go -C cli` (not `cd cli`) to run commands from project root.
Applied to files:
cli/cmd/logs.gocli/cmd/update.go
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to cli/**/*.go : Go CLI (Go 1.26+) uses Cobra for commands, charmbracelet/huh for interactive CLI, charmbracelet/lipgloss for styled output. Cross-platform builds (linux/darwin/windows × amd64/arm64). GoReleaser for releases with cosign keyless signing of checksums.txt. SLSA L3 provenance attestations via actions/attest-build-provenance.
Applied to files:
cli/cmd/logs.go
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to cli/go.mod : Go CLI dependencies: Go 1.26+, Cobra (commands), charmbracelet/huh (interactive CLI), charmbracelet/lipgloss (styled output).
Applied to files:
cli/cmd/logs.gocli/cmd/update.go
📚 Learning: 2026-03-19T11:19:40.044Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:19:40.044Z
Learning: Applies to go.mod : Maintain Go 1.26+ requirement. Dependencies: Cobra (CLI framework), charmbracelet/huh and charmbracelet/lipgloss (UI), sigstore-go (code signing), go-containerregistry (container image verification), go-tuf (TUF client for Sigstore).
Applied to files:
cli/cmd/logs.go
🪛 GitHub Check: CodeQL
cli/cmd/config.go
[failure] 310-310: Uncontrolled data used in path expression
This path depends on a user-provided value.
This path depends on a user-provided value.
This path depends on a user-provided value.
This path depends on a user-provided value.
[failure] 507-507: Uncontrolled data used in path expression
This path depends on a user-provided value.
This path depends on a user-provided value.
This path depends on a user-provided value.
This path depends on a user-provided value.
🔇 Additional comments (17)
CLAUDE.md (1)
90-102: LGTM!The hint tier documentation accurately reflects the implementation. The visibility rules align with the code in
cli/internal/ui/ui.go(HintTip's session deduplication viasessionTipsSeensync.Map, HintGuidance'shints != "always"gate). The table format is clear and will help developers choose the appropriate tier.cli/cmd/stop.go (1)
74-79: LGTM!The hint tier selections are appropriate:
HintNextStepfor the restart suggestion (natural next action, always shown)Warnfor destructive volume removal feedbackHintGuidancefor--volumesflag discovery (only shown inhints alwaysmode)The conditional logic correctly distinguishes between the two
--volumesstates.cli/cmd/wipe.go (2)
172-179: LGTM!The hint additions for destructive operations are well-placed:
HintNextStepfor the--keep-imagesfollow-up action is appropriateHintNextStepfor the--no-backupdata loss warning ensures users are informed about the irreversibility
186-204: LGTM!The
manualStartlogic is well-designed:
- Only tracks manual start decisions (when
shouldPrompt()is true)- Correctly suppresses the tip when restart fails (line 191)
HintTipis the appropriate tier for config automation suggestions (once per session in auto mode)cli/cmd/update_cleanup.go (1)
89-91: LGTM!
HintGuidanceis the correct tier for flag discovery (--keep N). Theremoved > 0guard ensures the hint only appears when relevant (after actual cleanup occurred).cli/cmd/status.go (3)
92-98: LGTM!Good refactor to explicit error handling.
HintGuidanceis the correct tier for flag discovery (--watch,--check), and it's appropriately placed on the success path only.
292-305: LGTM!The conditional guidance correctly avoids suggesting
--serviceswhen it's already in use. The tier selections are appropriate:
HintNextStepfor the "run start" suggestion (natural next action)HintGuidancefor flag discovery (wide/services)
410-413: LGTM!
HintErroris the correct tier for error recovery guidance, ensuring it's always visible (unless--quiet) when the backend is unhealthy.cli/cmd/config.go (1)
304-346: Good helper extraction with appropriate hint tiers.The
hintAfterConfigSetfunction provides helpful context-specific guidance. The use ofout.Step()for thehintskey (lines 319-327) is clever — it avoids the issue whereHintGuidancewould be swallowed when transitioning fromhints never.The tier selections are appropriate:
HintGuidancefor compose restart (flag/feature discovery)HintGuidancefor color/output/timestamps explanationscli/cmd/init.go (1)
106-116: LGTM!The
hintAfterInithelper provides appropriate post-init guidance:
HintTipfor the dev channel warning (shown once per session in auto mode)HintGuidancefor config customization discovery (only inhints alwaysmode)The placement after
printInitSuccessensures hints appear after the success message.cli/cmd/doctor.go (2)
158-165: Good refactor: threading status through return values.Returning
doctorStatusfromprintDoctorFooterandrenderDoctorSummaryavoids a redundantclassifyDoctorcall inrunDoctor. This keeps the classification logic in one place and improves efficiency.
351-381: LGTM!The
renderDoctorSummaryfunction now cleanly returns the computed status, enabling callers to use it without re-running classification. The implementation is correct.cli/cmd/update.go (5)
92-116: LGTM!Creating the UI instance early allows emitting hints for both the
--cli-onlyand--images-onlypaths. The reciprocal hints at Lines 106 and 114 provide useful cross-discovery between the two modes. Error propagation at Lines 110-112 is correct.
162-167: Exit-code guidance has been improved.The hint at Line 166 now explains the exit-code semantics ("Exit code 0 means up to date; exit code 10 means an update is available") rather than suggesting
--checkwhile already in--checkmode. This addresses the prior feedback about self-referential guidance.
239-241: LGTM!The hint to enable
auto_update_cliis correctly gated on!autoAccept, ensuring it only appears when the user manually confirmed the update.
438-460: LGTM!The
manualPulltracking at Line 438 correctly captures whetherstate.AutoPullwas false before the confirmation prompt. The hint at Lines 457-459 is only shown after a successful pull that required manual confirmation—appropriate for suggesting theauto_pullconfig key.
633-680: LGTM!The
auto_restarthint at Lines 678-679 is correctly placed within the branch where the user explicitly confirmed the restart via the interactive prompt. This avoids showing the hint when:
--no-restartwas usedstate.AutoRestartis already true--yeswas passed (handled in the earlier branch)The early creation of
uiOutat Lines 633-634 is appropriate for the consolidated hint output.
Add ~45 contextual hints so every config key and per-command flag is discoverable through the hint system. This is the first usage of HintGuidance (previously zero calls) and significantly expands HintTip coverage. Users with `hints always` can now learn about every feature; `auto` mode shows the most useful tips once per session. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Extract hintAfterConfigSet helper to keep runConfigSet under 50 lines - Create UI instance once in runUpdate/updateContainerImages instead of per-hint-call instantiation - Move follow-mode hints before composeRun in logs.go (post-run code is unreachable when -f blocks until Ctrl+C) - Promote destructive-action hints (stop --volumes, wipe --no-backup, wipe --keep-images) to HintNextStep so they always show Pre-reviewed by 3 agents, 5 findings addressed Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…mini - Extract duplicate logs guidance string to logsFilterHint constant - Change stop --volumes data-loss message from HintNextStep to Warn (correct tier) - Fix hintAfterConfigSet using pre-save UI options: use Step() for hints mode self-description so it's visible regardless of old mode - Guard compose restart hint on compose.yml existence (pre-init users) - Add compose restart hint to runConfigUnset for symmetry with runConfigSet - Fix self-referential --check guidance in update (explain exit codes directly) - Neutral wording for --cli-only/--images-only hints (no "also" implying update) - Extract hintAfterInit helper to keep runInit under 50-line limit - Consolidate UI instances in restartIfRunning: single uiOut, under 50 lines - Tailor status --services hint when user already passed --services - Guard wipe manualStart hint on shouldPrompt() to exclude --yes mode - Thread classifyDoctor result through printDoctorFooter/renderDoctorSummary - Gate update_cleanup HintGuidance on removed > 0 - Document hint tier system (HintError/NextStep/Tip/Guidance) in CLAUDE.md Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…dings - Extract hintComposeRestart helper with CodeQL-tracing comment to fix go/path-injection alerts on config.SecurePath calls in hintAfterConfigSet and runConfigUnset (both now call shared helper) - Guard post-run logsFilterHint on !logFollow to prevent duplicate emission - Make doctorAutoFix return bool; only show "run doctor again" when fixes ran Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6c93f01 to
fe1595f
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@cli/cmd/cleanup.go`:
- Around line 83-85: Replace the hidden hint call so users see the suggestion:
in the block that checks state.AutoCleanup, change the call from
out.HintGuidance(...) to out.HintTip(...) (keep the existing message "Run
'synthorg config set auto_cleanup true' to clean up automatically after
updates.") so the auto-config suggestion is visible in default mode; locate the
check referencing state.AutoCleanup and the call to out.HintGuidance to make
this swap.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 032cc7ea-7edf-4a9e-9a46-85e3c73544f8
📒 Files selected for processing (15)
CLAUDE.mdcli/cmd/backup.gocli/cmd/cleanup.gocli/cmd/config.gocli/cmd/doctor.gocli/cmd/init.gocli/cmd/logs.gocli/cmd/start.gocli/cmd/status.gocli/cmd/stop.gocli/cmd/uninstall.gocli/cmd/update.gocli/cmd/update_cleanup.gocli/cmd/version.gocli/cmd/wipe.go
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: CLI Test (windows-latest)
- GitHub Check: Analyze (python)
- GitHub Check: Dependency Review
🧰 Additional context used
📓 Path-based instructions (1)
cli/**/*.go
📄 CodeRabbit inference engine (CLAUDE.md)
cli/**/*.go: Use Cobra for CLI command structure; place all commands incmd/with global options, exit codes, and environment variable constants defined centrally
Use native Gotesting.Ffuzz functions for fuzzing; run fuzz targets with-fuzz=FuzzName -fuzztime=Nsflag (seed corpus runs without -fuzz flag)
Run Go tools viago -C cli(changes directory internally) -- NEVER usecd cliin Bash which poisons the working directory for subsequent commands
Run golangci-lint viago -C cli tool golangci-lint runsince linter is registered as a tool in cli/go.mod
Files:
cli/cmd/version.gocli/cmd/stop.gocli/cmd/update_cleanup.gocli/cmd/init.gocli/cmd/backup.gocli/cmd/cleanup.gocli/cmd/uninstall.gocli/cmd/logs.gocli/cmd/wipe.gocli/cmd/start.gocli/cmd/status.gocli/cmd/doctor.gocli/cmd/config.gocli/cmd/update.go
🧠 Learnings (10)
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to cli/** : CLI: Go 1.26+, dependencies in cli/go.mod (Cobra, charmbracelet/huh).
Applied to files:
cli/cmd/version.gocli/cmd/logs.gocli/cmd/update.go
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to cli/go.mod : Go CLI dependencies: Go 1.26+, Cobra (commands), charmbracelet/huh (interactive CLI), charmbracelet/lipgloss (styled output).
Applied to files:
cli/cmd/version.gocli/cmd/logs.go
📚 Learning: 2026-03-21T12:54:22.557Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-21T12:54:22.557Z
Learning: Version bumping (pre-1.0): `fix:` = patch, `feat:` = patch, `feat!:` = minor, `BREAKING CHANGE` trailer = minor. Update version in `pyproject.toml` (`[tool.commitizen].version`) and `src/synthorg/__init__.py` (`__version__`)
Applied to files:
cli/cmd/version.go
📚 Learning: 2026-03-21T12:54:22.557Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-21T12:54:22.557Z
Learning: Go 1.26+ required; CLI dependencies in `cli/go.mod` (Cobra, charmbracelet/huh, charmbracelet/lipgloss, sigstore-go, go-containerregistry, go-tuf)
Applied to files:
cli/cmd/version.gocli/cmd/logs.gocli/cmd/update.go
📚 Learning: 2026-03-21T14:12:17.848Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-21T14:12:17.848Z
Learning: Applies to cli/go.mod : CLI uses Go 1.26+. Dependencies: Cobra, charmbracelet/huh, charmbracelet/lipgloss, sigstore-go, go-containerregistry, go-tuf
Applied to files:
cli/cmd/version.gocli/cmd/logs.go
📚 Learning: 2026-03-21T12:54:22.557Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-21T12:54:22.557Z
Learning: Applies to cli/**/*.go : Use Cobra for CLI command structure, charmbracelet/huh for interactive prompts, and charmbracelet/lipgloss for terminal styling
Applied to files:
cli/cmd/logs.go
📚 Learning: 2026-03-28T14:16:08.138Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-28T14:16:08.138Z
Learning: Applies to cli/**/*.go : Use Cobra for CLI command structure; place all commands in `cmd/` with global options, exit codes, and environment variable constants defined centrally
Applied to files:
cli/cmd/logs.go
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to cli/**/*.go : Go CLI (Go 1.26+) uses Cobra for commands, charmbracelet/huh for interactive CLI, charmbracelet/lipgloss for styled output. Cross-platform builds (linux/darwin/windows × amd64/arm64). GoReleaser for releases with cosign keyless signing of checksums.txt. SLSA L3 provenance attestations via actions/attest-build-provenance.
Applied to files:
cli/cmd/logs.go
📚 Learning: 2026-03-19T11:19:40.044Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:19:40.044Z
Learning: Applies to go.mod : Maintain Go 1.26+ requirement. Dependencies: Cobra (CLI framework), charmbracelet/huh and charmbracelet/lipgloss (UI), sigstore-go (code signing), go-containerregistry (container image verification), go-tuf (TUF client for Sigstore).
Applied to files:
cli/cmd/logs.go
📚 Learning: 2026-03-15T21:49:53.264Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:49:53.264Z
Learning: Fix everything valid — never skip when review agents find valid issues (including pre-existing issues in surrounding code, suggestions, and findings adjacent to the PR's changes). No deferring, no 'out of scope' skipping.
Applied to files:
cli/cmd/config.go
🪛 GitHub Check: CodeQL
cli/cmd/config.go
[failure] 351-351: Uncontrolled data used in path expression
This path depends on a user-provided value.
This path depends on a user-provided value.
This path depends on a user-provided value.
This path depends on a user-provided value.
🔇 Additional comments (27)
cli/cmd/version.go (1)
28-28: Good passive guidance placement.This keeps
version --shortclean while adding optional discoverability for update checks in full output mode.cli/cmd/update_cleanup.go (1)
89-91: Conditional hint is correctly scoped.Showing this only when removals happened avoids unnecessary output and gives useful follow-up guidance.
cli/cmd/stop.go (1)
74-79: Clear post-stop UX for destructive vs non-destructive paths.The split messaging around
--volumesis explicit and helps prevent accidental data-loss confusion.CLAUDE.md (1)
90-102: Hint tier documentation is clear and implementation-aligned.The visibility matrix and tier intent are explicit and easy to apply consistently across commands.
cli/cmd/cleanup.go (1)
100-102: Guidance tiers are well chosen for discoverability hints.Both additions are feature/flag discovery hints and are appropriately non-intrusive.
Also applies to: 195-197
cli/cmd/backup.go (1)
401-403: Nice contextual hint coverage across create/list/restore paths.These hints are well-placed and conditionally shown where they add actionable follow-up without cluttering core output.
Also applies to: 485-485, 609-609
cli/cmd/init.go (1)
106-106: Good extraction and contextual post-init guidance.Moving this into
hintAfterInitimproves readability and keeps channel-specific messaging easy to evolve.Also applies to: 110-116
cli/cmd/uninstall.go (1)
80-80: Post-uninstall guidance is clear and contextual.The added hints improve operator clarity around preserved assets and reinstall path without altering uninstall control flow.
Also applies to: 91-91, 113-113
cli/cmd/logs.go (1)
82-100: LGTM! Hint placement correctly handles follow-mode blocking.The conditional logic properly addresses the follow-mode scenario:
- In follow mode (
-f), the guidance hint is emitted beforecomposeRunblocks (line 88), so users see it immediately.- After
composeRuncompletes, the tip for-fis always shown (line 96), but the guidance hint is only shown when NOT in follow mode (line 97-99), avoiding duplicate emission.This correctly implements the fix from the prior review feedback.
cli/cmd/status.go (3)
92-98: LGTM! Post-status guidance improves discoverability.After successful status output, the guidance about
--watchvs--checkhelps users understand the available monitoring options. The UI is correctly instantiated only afterrunStatusOncesucceeds.
298-304: LGTM! Hint now correctly tailors to active flags.The conditional now avoids suggesting
--serviceswhen it's already in use, addressing the prior review feedback. WhenstatusServicesis non-empty, only--wideis suggested.
412-412: LGTM! Appropriate use of HintError for unhealthy backend.
HintErroris the correct tier for error recovery guidance, directing users tosynthorg doctorfor diagnostics when the backend is unhealthy.cli/cmd/start.go (3)
121-122: LGTM! Clear next-step guidance after dry-run.The
HintNextStepappropriately tells users how to proceed after previewing the start operation.
154-155: LGTM! Foreground mode guidance is helpful.Explaining that Ctrl+C stops the process and logs stream to the terminal helps users understand the blocking behavior before
composeRunblocks indefinitely.
188-191: LGTM! Conditional hints for post-start context.The monitoring tip and the
--no-pullguidance are both appropriately gated by their respective conditions, providing relevant context without noise.cli/cmd/wipe.go (2)
170-179: LGTM! Destructive-action feedback is appropriately tiered as HintNextStep.The hints for
--keep-imagesand--no-backupuseHintNextStepas specified in the PR objectives for destructive-action feedback, ensuring they're always shown regardless of hints mode.
186-204: LGTM! Config tip logic correctly handles edge cases.The
manualStartflag is:
- Set when user manually confirmed restart (not auto-accepted)
- Cleared on restart failure (line 191) to avoid a confusing tip when containers couldn't start
This ensures the auto-config tip is only shown in the success case where it's actually actionable.
cli/cmd/config.go (3)
304-340: LGTM! Well-designed helper with correct handling of hints mode edge case.The
hintAfterConfigSetfunction correctly:
- Uses
Step()instead ofHintGuidance()for thehintskey because the UI was created with the old hints mode—HintGuidancewould be swallowed when changing from "never".- Provides contextual guidance for display preference keys (
color,output,timestamps).
342-354: CodeQL false positive: path is sanitized by SecurePath.The static analysis flags line 351, but
config.SecurePathat line 347 validates the path is absolute and cleans it before use. The comment explicitly documents this for CodeQL tracing. This is a known limitation where CodeQL cannot always trace sanitization through function calls.The silent early return on
SecurePatherror (line 348-350) is appropriate—hint failure shouldn't break the config set operation.
512-514: LGTM! Consistent hint pattern for config unset.Using the shared
hintComposeRestarthelper maintains consistency withconfig setand avoids code duplication, as suggested in prior review feedback.cli/cmd/doctor.go (2)
124-139: LGTM! Conditional hints now correctly tied to doctor status.The refactored logic addresses the prior review feedback:
printDoctorFooterreturnsdoctorStatusto avoid redundant classification calls.doctorAutoFixreturns aboolindicating whether fixes were performed.- The "verify fixes" hint (line 133) only shows when
fixed == true.- The
--fixsuggestion (line 138) only shows when issues exist AND--fixwasn't used.
202-262: LGTM! doctorAutoFix return values are correct.The function returns:
falsewhen healthy (line 209)falsewhen no fixable issues in selected checks (line 232)needComposeFix || needRestartafter attempting fixes (line 262)This ensures the caller only shows the "verify fixes" hint when actions were actually taken.
cli/cmd/update.go (5)
92-116: LGTM! Clean separation with reciprocal hints.The hints for
--cli-onlyand--images-onlymodes provide complementary guidance, helping users who may want to run both update types separately understand how to complete the other half.
162-167: LGTM! Exit code guidance now correctly explains semantics.Line 166 now explains the exit code meanings directly ("Exit code 0 means up to date; exit code 10 means an update is available") instead of the self-referential "Use --check..." that was flagged in the prior review.
239-241: LGTM! Config tip appropriately gated.The
auto_update_clisuggestion only appears when the user manually confirmed the update (!autoAccept), avoiding redundant suggestions when auto-accept is already configured.
438-460: LGTM! Manual pull tracking is correct.The
manualPullflag is set before the confirmation prompt (line 438), so it correctly reflects whether the user was prompted regardless of the prompt outcome. The config tip at lines 457-459 only shows on successful completion when manual intervention was required.
676-680: LGTM! Restart config tip correctly gated on success.The
auto_restartsuggestion only appears whenrestartedis true (line 677), ensuring users only see the tip when they've manually confirmed and successfully completed a restart.
Config automation suggestions belong in HintTip (visible once per session in auto mode), not HintGuidance (invisible in default mode). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
🤖 I have created a release *beep* *boop* --- #MAJOR CHANGES; We got a somewhat working webui :) ## [0.5.0](v0.4.9...v0.5.0) (2026-03-30) ### Features * add analytics trends and budget forecast API endpoints ([#798](#798)) ([16b61f5](16b61f5)) * add department policies to default templates ([#852](#852)) ([7a41548](7a41548)) * add remaining activity event types (task_started, tool_used, delegation, cost_incurred) ([#832](#832)) ([4252fac](4252fac)) * agent performance, activity, and history API endpoints ([#811](#811)) ([9b75c1d](9b75c1d)) * Agent Profiles and Detail pages (biography, career, performance) ([#874](#874)) ([62d7880](62d7880)) * app shell, Storybook, and CI/CD pipeline ([#819](#819)) ([d4dde90](d4dde90)) * Approvals page with risk grouping, urgency indicators, batch actions ([#889](#889)) ([4e9673d](4e9673d)) * Budget Panel page (P&L dashboard, breakdown charts, forecast) ([#890](#890)) ([b63b0f1](b63b0f1)) * build infrastructure layer (API client, auth, WebSocket) ([#815](#815)) ([9f01d3e](9f01d3e)) * CLI global options infrastructure, UI modes, exit codes, env vars ([#891](#891)) ([fef4fc5](fef4fc5)) * CodeMirror editor and theme preferences toggle ([#905](#905), [#807](#807)) ([#909](#909)) ([41fbedc](41fbedc)) * Company page (department/agent management) ([#888](#888)) ([cfb88b0](cfb88b0)) * comprehensive hint coverage across all CLI commands ([#900](#900)) ([937974e](937974e)) * config system extensions, per-command flags for init/start/stop/status/logs ([#895](#895)) ([32f83fe](32f83fe)) * configurable currency system replacing hardcoded USD ([#854](#854)) ([b372551](b372551)) * Dashboard page (metric cards, activity feed, budget burn) ([#861](#861)) ([7d519d5](7d519d5)) * department health, provider status, and activity feed endpoints ([#818](#818)) ([6d5f196](6d5f196)) * design tokens and core UI components ([#833](#833)) ([ed887f2](ed887f2)) * extend approval, meeting, and budget API responses ([#834](#834)) ([31472bf](31472bf)) * frontend polish -- real-time UX, accessibility, responsive, performance ([#790](#790), [#792](#792), [#791](#791), [#793](#793)) ([#917](#917)) ([f04a537](f04a537)) * implement human roles and access control levels ([#856](#856)) ([d6d8a06](d6d8a06)) * implement semantic conflict detection in workspace merge ([#860](#860)) ([d97283b](d97283b)) * interaction components and animation patterns ([#853](#853)) ([82d4b01](82d4b01)) * Login page + first-run bootstrap + Company page ([#789](#789), [#888](#888)) ([#896](#896)) ([8758e8d](8758e8d)) * Meetings page with timeline viz, token bars, contribution formatting ([#788](#788)) ([#904](#904)) ([b207f46](b207f46)) * Messages page with threading, channel badges, sender indicators ([#787](#787)) ([#903](#903)) ([28293ad](28293ad)) * Org Chart force-directed view and drag-drop reassignment ([#872](#872), [#873](#873)) ([#912](#912)) ([a68a938](a68a938)) * Org Chart page (living nodes, status, CRUD, department health) ([#870](#870)) ([0acbdae](0acbdae)) * per-command flags for remaining commands, auto-behavior wiring, help/discoverability ([#897](#897)) ([3f7afa2](3f7afa2)) * Providers page with backend rework -- health, CRUD, subscription auth ([#893](#893)) ([9f8dd98](9f8dd98)) * scaffold React + Vite + TypeScript + Tailwind project ([#799](#799)) ([bd151aa](bd151aa)) * Settings page with search, dependency indicators, grouped rendering ([#784](#784)) ([#902](#902)) ([a7b9870](a7b9870)) * Setup Wizard rebuild with template comparison, cost estimator, theme customization ([#879](#879)) ([ae8b50b](ae8b50b)) * setup wizard UX -- template filters, card metadata, provider form reuse ([#910](#910)) ([7f04676](7f04676)) * setup wizard UX overhaul -- mode choice, step reorder, provider fixes ([#907](#907)) ([ee964c4](ee964c4)) * structured ModelRequirement in template agent configs ([#795](#795)) ([7433548](7433548)) * Task Board page (rich Kanban, filtering, dependency viz) ([#871](#871)) ([04a19b0](04a19b0)) ### Bug Fixes * align frontend types with backend and debounce WS refetches ([#916](#916)) ([134c11b](134c11b)) * auto-cleanup targets newly pulled images instead of old ones ([#884](#884)) ([50e6591](50e6591)) * correct wipe backup-skip flow and harden error handling ([#808](#808)) ([c05860f](c05860f)) * improve provider setup in wizard, subscription auth, dashboard bugs ([#914](#914)) ([87bf8e6](87bf8e6)) * improve update channel detection and add config get command ([#814](#814)) ([6b137f0](6b137f0)) * resolve all ESLint warnings, add zero-warnings enforcement ([#899](#899)) ([079b46a](079b46a)) * subscription auth uses api_key, base URL optional for cloud providers ([#915](#915)) ([f0098dd](f0098dd)) ### Refactoring * semantic analyzer cleanup -- shared filtering, concurrency, extraction ([#908](#908)) ([81372bf](81372bf)) ### Documentation * brand identity and UX design system from [#765](#765) exploration ([#804](#804)) ([389a9f4](389a9f4)) * page structure and information architecture for v0.5.0 dashboard ([#809](#809)) ([f8d6d4a](f8d6d4a)) * write UX design guidelines with WCAG-verified color system ([#816](#816)) ([4a4594e](4a4594e)) ### Tests * add unit tests for agent hooks and page components ([#875](#875)) ([#901](#901)) ([1d81546](1d81546)) ### CI/CD * bump actions/deploy-pages from 4.0.5 to 5.0.0 in the major group ([#831](#831)) ([01c19de](01c19de)) * bump astral-sh/setup-uv from 7.6.0 to 8.0.0 in /.github/actions/setup-python-uv in the all group ([#920](#920)) ([5f6ba54](5f6ba54)) * bump codecov/codecov-action from 5.5.3 to 6.0.0 in the major group ([#868](#868)) ([f22a181](f22a181)) * bump github/codeql-action from 4.34.1 to 4.35.0 in the all group ([#883](#883)) ([87a4890](87a4890)) * bump sigstore/cosign-installer from 4.1.0 to 4.1.1 in the minor-and-patch group ([#830](#830)) ([7a69050](7a69050)) * bump the all group with 3 updates ([#923](#923)) ([ff27c8e](ff27c8e)) * bump wrangler from 4.76.0 to 4.77.0 in /.github in the minor-and-patch group ([#822](#822)) ([07d43eb](07d43eb)) * bump wrangler from 4.77.0 to 4.78.0 in /.github in the all group ([#882](#882)) ([f84118d](f84118d)) ### Maintenance * add design system enforcement hook and component inventory ([#846](#846)) ([15abc43](15abc43)) * add dev-only auth bypass for frontend testing ([#885](#885)) ([6cdcd8a](6cdcd8a)) * add pre-push rebase check hook ([#855](#855)) ([b637a04](b637a04)) * backend hardening -- eviction/size-caps and model validation ([#911](#911)) ([81253d9](81253d9)) * bump axios from 1.13.6 to 1.14.0 in /web in the all group across 1 directory ([#922](#922)) ([b1b0232](b1b0232)) * bump brace-expansion from 5.0.4 to 5.0.5 in /web ([#862](#862)) ([ba4a565](ba4a565)) * bump eslint-plugin-react-refresh from 0.4.26 to 0.5.2 in /web ([#801](#801)) ([7574bb5](7574bb5)) * bump faker from 40.11.0 to 40.11.1 in the minor-and-patch group ([#803](#803)) ([14d322e](14d322e)) * bump https://github.com/astral-sh/ruff-pre-commit from v0.15.7 to 0.15.8 ([#864](#864)) ([f52901e](f52901e)) * bump nginxinc/nginx-unprivileged from `6582a34` to `f99cc61` in /docker/web in the all group ([#919](#919)) ([df85e4f](df85e4f)) * bump nginxinc/nginx-unprivileged from `ccbac1a` to `6582a34` in /docker/web ([#800](#800)) ([f4e9450](f4e9450)) * bump node from `44bcbf4` to `71be405` in /docker/sandbox ([#827](#827)) ([91bec67](91bec67)) * bump node from `5209bca` to `cf38e1f` in /docker/web ([#863](#863)) ([66d6043](66d6043)) * bump picomatch in /site ([#842](#842)) ([5f20bcc](5f20bcc)) * bump recharts 2->3 and @types/node 22->25 in /web ([#802](#802)) ([a908800](a908800)) * Bump requests from 2.32.5 to 2.33.0 ([#843](#843)) ([41daf69](41daf69)) * bump smol-toml from 1.6.0 to 1.6.1 in /site ([#826](#826)) ([3e5dbe4](3e5dbe4)) * bump the all group with 3 updates ([#921](#921)) ([7bace0b](7bace0b)) * bump the minor-and-patch group across 1 directory with 2 updates ([#829](#829)) ([93e611f](93e611f)) * bump the minor-and-patch group across 1 directory with 3 updates ([#841](#841)) ([7010c8e](7010c8e)) * bump the minor-and-patch group across 1 directory with 3 updates ([#869](#869)) ([548cee5](548cee5)) * bump the minor-and-patch group in /site with 2 updates ([#865](#865)) ([9558101](9558101)) * bump the minor-and-patch group with 2 updates ([#867](#867)) ([4830706](4830706)) * consolidate Dependabot groups to 1 PR per ecosystem ([06d2556](06d2556)) * consolidate Dependabot groups to 1 PR per ecosystem ([#881](#881)) ([06d2556](06d2556)) * improve worktree skill with full dep sync and status enhancements ([#906](#906)) ([772c625](772c625)) * remove Vue remnants and document framework decision ([#851](#851)) ([bf2adf6](bf2adf6)) * update web dependencies and fix brace-expansion CVE ([#880](#880)) ([a7a0ed6](a7a0ed6)) * upgrade to Storybook 10 and TypeScript 6 ([#845](#845)) ([52d95f2](52d95f2)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Summary
HintGuidance(previously zero calls anywhere in the codebase)HintTipcoverage for auto-config suggestionsHintNextStephints for destructive action feedback (stop --volumes, wipe --no-backup)HintErrorfor unhealthy backend in status commandHint tier usage:
auto_pull,auto_restart(once per session in auto mode)--watch,--wide,--keep N(only inhints alwaysmode)Commands covered:
update,start,stop,status,logs,init,cleanup,backup,wipe,doctor,config,uninstall,version+update_cleanup(auto-cleanup helper)Test plan
go -C cli build ./...-- compiles cleanlygo -C cli test ./...-- all tests passgo -C cli vet ./...-- no issuesgo -C cli tool golangci-lint run-- 0 issuessynthorg config set hints alwaysthen exercise each command to verify hints appearhints autoto verify HintTip deduplication and HintGuidance suppressionReview coverage
Pre-reviewed by 3 agents (go-reviewer, go-conventions-enforcer, docs-consistency). 5 findings addressed:
hintAfterConfigSethelper to keeprunConfigSetunder 50-line limitGetGlobalOpts+NewUIWithOptionsinstantiations inupdate.gologs.gofollow mode (moved before blockingcomposeRun)HintNextStep(stop --volumes, wipe --no-backup/--keep-images)🤖 Generated with Claude Code