Skip to content

feat: improve wipe command UX with interactive prompts#759

Merged
Aureliolo merged 2 commits intomainfrom
feat/improve-cli-wipe
Mar 23, 2026
Merged

feat: improve wipe command UX with interactive prompts#759
Aureliolo merged 2 commits intomainfrom
feat/improve-cli-wipe

Conversation

@Aureliolo
Copy link
Copy Markdown
Owner

Summary

  • Backup defaults to Yes instead of No -- recommended behavior is now the default
  • Containers only start when the user agrees -- no more automatic startup before the backup prompt; user is asked "Containers are not running. Start them for backup?" first
  • Post-wipe restart is optional -- user is prompted "Start containers now?" (default: Yes) instead of automatic restart
  • containersRunning now returns errors instead of silently discarding Docker communication failures
  • Copy failure message improved -- distinguishes "backup exists in container but copy failed" from "backup creation failed"
  • createTarGz refactored -- extracted writeTarEntry helper to stay under 50-line function limit
  • runForm helper -- eliminates repeated I/O stream wiring across all 6 prompt methods
  • Docs updated -- organization.md, user_guide.md, README.md, operations.md reflect the new interactive flow

Test plan

  • go -C cli vet ./... -- clean
  • go -C cli test ./... -- all pass
  • go -C cli build ./... -- compiles
  • go -C cli tool golangci-lint run -- 0 issues
  • Manual: synthorg wipe with containers stopped -- verify backup prompt (default Yes), then container start prompt
  • Manual: synthorg wipe with containers running -- verify backup prompt skips container start prompt
  • Manual: decline backup -- verify no container start, proceeds to wipe confirmation
  • Manual: after wipe, decline restart -- verify "Run 'synthorg start'" hint shown
  • Manual: after wipe, accept restart -- verify setup wizard opens

Pre-reviewed by 3 agents (docs-consistency, go-reviewer, go-conventions), 7 findings addressed.

🤖 Generated with Claude Code

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 22, 2026

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 22, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: bbe491b3-51ab-443b-a804-3fa3db830d25

📥 Commits

Reviewing files that changed from the base of the PR and between b0fec01 and 34ab58a.

📒 Files selected for processing (5)
  • README.md
  • cli/cmd/wipe.go
  • docs/design/operations.md
  • docs/design/organization.md
  • docs/user_guide.md
📜 Recent 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: CLI Test (macos-latest)
  • GitHub Check: Analyze (python)
🧰 Additional context used
📓 Path-based instructions (1)
cli/**/*.go

📄 CodeRabbit inference engine (CLAUDE.md)

Go CLI: use Cobra commands. Never use cd cli in Bash commands -- use go -C cli instead.

Files:

  • cli/cmd/wipe.go
🧠 Learnings (7)
📚 Learning: 2026-03-19T07:12:14.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T07:12:14.508Z
Learning: Applies to src/synthorg/**/*.py : Package structure: src/synthorg/ organized as: api/ (REST+WebSocket, Litestar), auth/ (auth subpackage), backup/ (scheduled/manual backups), budget/ (cost tracking, CFO), cli/ (superseded by Go CLI), communication/ (message bus, meetings), config/ (YAML loading), core/ (domain models, resilience config), engine/ (orchestration, task state, coordination, approval gates, stagnation detection, context budget, compaction), hr/ (hiring, performance, promotion), memory/ (pluggable backend, Mem0, retrieval, consolidation), persistence/ (operational data, SQLite, settings), observability/ (logging, correlation, sinks), providers/ (LLM abstraction, LiteLLM, auth types, presets, runtime CRUD), settings/ (runtime-editable, typed definitions, encryption, config bridge), security/ (SecOps, rule engine, output scanning, progressive trust, autonomy levels), templates/ (company templates, personalities), tools/ (registry, built-in tools, git, sandbox, code_runner, MCP...

Applied to files:

  • docs/user_guide.md
  • README.md
  • docs/design/organization.md
📚 Learning: 2026-03-19T07:12:14.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T07:12:14.508Z
Learning: Applies to docker/Dockerfile.sandbox : Docker sandbox: `synthorg-sandbox` — Python 3.14 + Node.js + git, non-root (UID 10001), agent code execution sandbox

Applied to files:

  • README.md
📚 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:

  • docs/design/operations.md
📚 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:

  • docs/design/operations.md
📚 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:

  • docs/design/operations.md
📚 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: CLI workflow (`.github/workflows/cli.yml`) runs Go lint (golangci-lint + go vet) + test (race, coverage) + build (cross-compile matrix) + vulnerability check (govulncheck) + fuzz testing. Cross-compiles for linux/darwin/windows × amd64/arm64. GoReleaser release on v* tags with cosign keyless signing and SLSA L3 attestations.

Applied to files:

  • docs/design/operations.md
📚 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:

  • docs/design/operations.md
🧬 Code graph analysis (1)
cli/cmd/wipe.go (2)
cli/internal/docker/client.go (2)
  • ComposeExecOutput (106-113)
  • Info (22-29)
cli/internal/health/check.go (1)
  • WaitForHealthy (22-52)
🪛 GitHub Check: CodeQL
cli/cmd/wipe.go

[failure] 470-470: Uncontrolled data used in path expression
This path depends on a user-provided value.

🔇 Additional comments (17)
docs/user_guide.md (1)

79-79: LGTM!

The documentation accurately reflects the new interactive backup flow and optional restart behavior introduced by this PR.

README.md (1)

106-106: LGTM!

The updated CLI command description accurately reflects the new interactive factory-reset flow.

docs/design/operations.md (1)

1050-1051: LGTM!

The CLI tool documentation accurately describes the new interactive wipe flow with backup and restart prompts.

docs/design/organization.md (1)

319-320: LGTM!

The Company Builder documentation correctly describes the interactive backup walkthrough and optional restart behavior.

cli/cmd/wipe.go (13)

45-58: LGTM!

The command help text is now consistent between Short and Long descriptions, accurately reflecting the interactive flow with optional backup and restart prompts.


115-160: LGTM!

The post-wipe flow properly uses startContainers() which includes image verification, addressing the previous concern about skipping verifyAndPinImages(). The Ctrl-C handling after wipe completion correctly defaults to "No" since the destructive operation has already completed.


162-168: LGTM!

Good refactoring to centralize the I/O stream wiring for prompts, reducing duplication across the six prompt methods.


190-199: LGTM!

Good improvement to return errors from Docker communication failures rather than silently discarding them. This aligns with the PR objective and provides better diagnostics.


201-210: LGTM!

Properly chains image verification before pull/start, ensuring security verification is always performed when starting containers.


245-279: LGTM!

The backup-container startup flow now properly handles all failure cases by falling through to askContinueWithoutBackup() with context-specific messages, addressing the previous concern about aborting the wipe when only the backup-start step failed.


281-300: LGTM!

The prompt correctly defaults to starting containers (since backup is recommended), and Ctrl-C appropriately cancels the entire wipe operation since the destructive action hasn't occurred yet.


469-474: CodeQL finding is a false positive for this use case.

The path at line 470 originates from promptSavePath() which:

  1. Takes explicit user input for where to save their backup
  2. Applies filepath.Clean() and filepath.Abs()
  3. The os.Remove() only deletes a file the CLI itself just created at line 459 when archive finalization fails

This is expected behavior for a CLI backup command - the user explicitly chooses where to save their data. The cleanup of a partially-written file on error is defensive and correct.


476-503: LGTM!

Good refactoring to accept a title parameter, allowing context-specific messages for different failure scenarios (Docker unreachable, user declined, container start failure).


505-524: LGTM!

Correct handling of Ctrl-C after wipe completion - since the destructive action has already occurred, treating it as "No" (skip restart) rather than an error is appropriate. The default to "Yes" aligns with the documented behavior.


577-642: LGTM!

Good refactoring that:

  1. Keeps functions under 50 lines as stated in PR objectives
  2. Adds explicit path traversal validation (lines 620-623)
  3. Strips host identity (UID/GID/Uname/Gname) to prevent information disclosure
  4. Uses errors.Join for clean error aggregation

364-385: LGTM!

Good improvement to backup failure messaging - the hint on line 379 clearly communicates that while the backup exists in the container, it will be lost after wipe. This helps users make an informed decision.


302-321: LGTM!

The backup prompt correctly defaults to "Yes" (recommended behavior) as stated in the PR objectives.


Walkthrough

This pull request updates the synthorg wipe command to an interactive factory-reset flow. Container startup is no longer unconditional before wiping; startup may be prompted for backup or optionally prompted after wipe to restart and open the setup wizard. The implementation adds helpers for detecting and starting containers, waiting for backend health, centralized prompt execution, and refactors tarball creation with improved error wrapping. README, design docs, and the user guide are updated to reflect the interactive backup and optional restart behavior.

Suggested labels

autorelease: tagged

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: improving UX for the wipe command through interactive prompts, which aligns with the primary changes throughout the changeset.
Description check ✅ Passed The description comprehensively covers the key changes in the pull request and is clearly related to the changeset modifications.
Docstring Coverage ✅ Passed Docstring coverage is 80.00% which is sufficient. The required threshold is 40.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the user experience of the synthorg wipe command by introducing interactive prompts at key stages. The changes ensure that users have more control and clearer feedback during the factory-reset process, particularly regarding backup creation, container startup, and post-wipe actions. This makes the wipe command safer and more intuitive, aligning defaults with recommended practices and providing better error visibility.

Highlights

  • Backup Default Behavior: The default option for creating a backup before wiping has been changed to 'Yes', making the recommended behavior the default.
  • Interactive Container Startup for Backup: Containers are no longer automatically started before a backup prompt. Users are now explicitly asked if they wish to start containers for the backup process if they are not already running.
  • Optional Post-Wipe Container Restart: After a wipe operation, restarting containers is now optional, with the user being prompted 'Start containers now?' (defaulting to Yes) instead of an automatic restart.
  • Improved Error Handling for Container Status: The containersRunning function now returns errors when Docker communication fails, providing clearer diagnostics instead of silently discarding issues.
  • Enhanced Backup Copy Failure Message: The error message for backup copy failures has been improved to distinguish between a backup existing in the container but failing to copy, and a complete backup creation failure.
  • Code Refactoring for createTarGz: The createTarGz function has been refactored by extracting a writeTarEntry helper, improving modularity and adhering to function length guidelines.
  • New runForm Helper for Prompts: A new runForm helper function has been introduced to centralize and simplify the I/O stream wiring for all interactive prompt methods.
  • Documentation Updates: Relevant documentation files (organization.md, user_guide.md, README.md, operations.md) have been updated to reflect the new interactive wipe command flow.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@Aureliolo Aureliolo temporarily deployed to cloudflare-preview March 22, 2026 23:43 — with GitHub Actions Inactive
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request significantly improves the user experience of the wipe command by introducing interactive prompts for backup and container management. The refactoring to create helper functions like runForm and break down ensureRunning is a great step towards better code clarity and maintainability. I've identified a couple of issues in the new logic flow that could lead to confusing user experiences or incorrect behavior. My comments provide suggestions to address these points.

Comment on lines +250 to +252
if err != nil {
wc.errOut.Warn(fmt.Sprintf("Could not check container status: %v", err))
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The error from wc.containersRunning() is logged as a warning, but then execution continues as if there was no error and running is false. This is incorrect. If there's an error checking container status (e.g., the Docker daemon is not running), we cannot know if containers are running or not. The function should propagate this error to the caller to halt the process, rather than making an incorrect assumption and potentially trying to start containers that are already running.

Suggested change
if err != nil {
wc.errOut.Warn(fmt.Sprintf("Could not check container status: %v", err))
}
if err != nil {
return fmt.Errorf("could not check container status: %w", err)
}

Comment on lines +262 to +264
if !startOK {
return wc.askContinueWithoutBackup()
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

When a user selects "No, skip backup" in the promptStartForBackup prompt, startOK becomes false. The current implementation then calls wc.askContinueWithoutBackup(), which incorrectly tells the user "Backup failed...". This is a confusing user experience, as the backup didn't fail but was intentionally skipped.

To fix this, I suggest introducing a new sentinel error, for example errBackupSkippedByUser, which should be returned here. The caller, offerBackup, should then be updated to check for this specific error and gracefully exit the backup flow, allowing the wipe to proceed.

Here's how you could implement it:

  1. Define the new sentinel error at the top of the file:

    var errBackupSkippedByUser = errors.New("backup skipped by user")
  2. Update this function to return the new error (as in the suggestion below).

  3. Update offerBackup to handle this new error at line 232:

    if err := wc.ensureRunningForBackup(); err != nil {
        if errors.Is(err, errBackupSkippedByUser) {
            return nil // User skipped backup, so continue with wipe.
        }
        return err
    }
Suggested change
if !startOK {
return wc.askContinueWithoutBackup()
}
if !startOK {
return errBackupSkippedByUser
}

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 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/wipe.go`:
- Around line 138-143: The post-wipe path currently calls pullStartAndWait(...)
which skips the image verification/pinning done by wc.startContainers(); change
the branch so that when startAfter is true you invoke wc.startContainers()
(which runs verifyAndPinImages()) instead of calling pullStartAndWait(), or
alternatively call wc.verifyAndPinImages() before pullStartAndWait() to ensure
images are pinned—update the call in the startAfter branch surrounding
pullStartAndWait to use wc.startContainers()/verifyAndPinImages() so the
verified startup path is preserved.
- Around line 244-266: The current ensureRunningForBackup implementation returns
immediately when wc.startContainers() fails, which prevents falling back to the
existing “continue without backup?” flow; change it so failures from
startContainers are handled the same as a user-declined start: capture the error
from wc.startContainers(), warn the user (using wc.errOut.Warn/Printf with the
error), then call and return wc.askContinueWithoutBackup() (or a parameterized
continue-without-backup helper) instead of returning the error; update
ensureRunningForBackup to call promptStartForBackup(), and on start failure
invoke askContinueWithoutBackup() so both the !startOK and startContainers error
paths use the same confirmation flow (referencing ensureRunningForBackup,
promptStartForBackup, startContainers, and askContinueWithoutBackup).
- Around line 45-57: Update the one-line command summary in the wipeCmd
cobra.Command by changing the Short field to match the new flow described in
Long; replace the current "Factory-reset: wipe all data and re-open the setup
wizard" with a concise summary that reflects the optional post-wipe behavior
(for example: "Factory-reset: wipe all data; optionally re-open the setup
wizard" or similar) so the short help and the detailed Long description stay
consistent.
🪄 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: 96c975c6-268a-403b-b0a5-411faa8fe62d

📥 Commits

Reviewing files that changed from the base of the PR and between f53da9f and b0fec01.

📒 Files selected for processing (5)
  • README.md
  • cli/cmd/wipe.go
  • docs/design/operations.md
  • docs/design/organization.md
  • docs/user_guide.md
📜 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). (2)
  • GitHub Check: CLI Test (windows-latest)
  • GitHub Check: Analyze (python)
🧰 Additional context used
📓 Path-based instructions (1)
cli/**/*.go

📄 CodeRabbit inference engine (CLAUDE.md)

Go CLI: use Cobra commands. Never use cd cli in Bash commands -- use go -C cli instead.

Files:

  • cli/cmd/wipe.go
🧠 Learnings (7)
📚 Learning: 2026-03-19T07:12:14.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T07:12:14.508Z
Learning: Applies to src/synthorg/**/*.py : Package structure: src/synthorg/ organized as: api/ (REST+WebSocket, Litestar), auth/ (auth subpackage), backup/ (scheduled/manual backups), budget/ (cost tracking, CFO), cli/ (superseded by Go CLI), communication/ (message bus, meetings), config/ (YAML loading), core/ (domain models, resilience config), engine/ (orchestration, task state, coordination, approval gates, stagnation detection, context budget, compaction), hr/ (hiring, performance, promotion), memory/ (pluggable backend, Mem0, retrieval, consolidation), persistence/ (operational data, SQLite, settings), observability/ (logging, correlation, sinks), providers/ (LLM abstraction, LiteLLM, auth types, presets, runtime CRUD), settings/ (runtime-editable, typed definitions, encryption, config bridge), security/ (SecOps, rule engine, output scanning, progressive trust, autonomy levels), templates/ (company templates, personalities), tools/ (registry, built-in tools, git, sandbox, code_runner, MCP...

Applied to files:

  • docs/user_guide.md
  • README.md
  • docs/design/organization.md
📚 Learning: 2026-03-19T07:12:14.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T07:12:14.508Z
Learning: Applies to docker/Dockerfile.sandbox : Docker sandbox: `synthorg-sandbox` — Python 3.14 + Node.js + git, non-root (UID 10001), agent code execution sandbox

Applied to files:

  • README.md
📚 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:

  • docs/design/operations.md
📚 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:

  • docs/design/operations.md
📚 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:

  • docs/design/operations.md
📚 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:

  • docs/design/operations.md
📚 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: CLI workflow (`.github/workflows/cli.yml`) runs Go lint (golangci-lint + go vet) + test (race, coverage) + build (cross-compile matrix) + vulnerability check (govulncheck) + fuzz testing. Cross-compiles for linux/darwin/windows × amd64/arm64. GoReleaser release on v* tags with cosign keyless signing and SLSA L3 attestations.

Applied to files:

  • docs/design/operations.md
🧬 Code graph analysis (1)
cli/cmd/wipe.go (2)
cli/internal/docker/client.go (2)
  • ComposeExecOutput (106-113)
  • Info (22-29)
cli/internal/health/check.go (1)
  • WaitForHealthy (22-52)

Aureliolo and others added 2 commits March 23, 2026 07:03
Backup now defaults to yes, containers only start when the user
agrees, and post-wipe restart is optional instead of automatic.

Pre-reviewed by 3 agents, 7 findings addressed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… Gemini

- Use wc.startContainers() for post-wipe startup (was skipping image verification)
- Parameterize askContinueWithoutBackup with context-specific prompt titles
- Fall through to "continue without backup?" on Docker error and startContainers failure
- Update Short/Long descriptions and doc comments for optional restart flow
- Chain runForm builder calls for future-proof huh library compatibility
- Clean up corrupt archive file if f.Close() fails on success path
- Use if-scoped err declaration in promptSavePath

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Aureliolo Aureliolo force-pushed the feat/improve-cli-wipe branch from b0fec01 to 34ab58a Compare March 23, 2026 06:08
@Aureliolo Aureliolo temporarily deployed to cloudflare-preview March 23, 2026 06:09 — with GitHub Actions Inactive
@Aureliolo Aureliolo merged commit bbd4d2d into main Mar 23, 2026
41 checks passed
@Aureliolo Aureliolo deleted the feat/improve-cli-wipe branch March 23, 2026 06:13
@Aureliolo Aureliolo temporarily deployed to cloudflare-preview March 23, 2026 06:13 — with GitHub Actions Inactive
Aureliolo added a commit that referenced this pull request Mar 23, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.4.9](v0.4.8...v0.4.9)
(2026-03-23)


### Features

* add consultancy and data team template archetypes
([#764](#764))
([81dc75f](81dc75f))
* add personality presets for new template archetypes
([#758](#758))
([de4e661](de4e661))
* improve wipe command UX with interactive prompts
([#759](#759))
([bbd4d2d](bbd4d2d))


### Bug Fixes

* stable channel detects update for dev builds
([#753](#753))
([f53da9f](f53da9f))


### Documentation

* add version banner to docs header
([#761](#761))
([8f8c1f8](8f8c1f8))


### Maintenance

* adopt new features from web dependency upgrades
([#763](#763))
([1bb6336](1bb6336))

---
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants