fix: consistent log_step for in-progress messages - #757

Merged
louisgv merged 1 commit into
mainfrom
ux-improvements
Feb 12, 2026
Merged

fix: consistent log_step for in-progress messages#757
louisgv merged 1 commit into
mainfrom
ux-improvements

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Summary

  • Use log_step (cyan) instead of log_info (green) for in-progress/status messages across 20 shell scripts
  • Affected operations: "Waiting for...", "Fetching...", "Creating...", "Testing..." messages in shared/common.sh and cloud-specific scripts
  • Adds periodic progress updates to silent IP polling loops in ramnode, cherry, and netcup (every 5 attempts)
  • Improves timeout error messages to include attempt count

Rationale

The convention (established in PR #440) is:

  • log_step (cyan): progress messages for operations still running
  • log_info (green): success/completion messages

Several scripts were still using log_info for in-progress operations, making it hard for users to distinguish "still working" from "done". This PR fixes the remaining inconsistencies.

Files changed

  • shared/common.sh -- 4 messages (OAuth wait, credential test, interactive picker)
  • cherry/lib/common.sh -- 3 messages + progress indicator in IP wait loop
  • contabo/lib/common.sh -- 1 message
  • netcup/lib/common.sh -- 1 message + progress indicator in IP wait loop
  • ramnode/lib/common.sh -- 4 messages + progress indicator in IP wait loop
  • github-codespaces/lib/common.sh -- 2 messages
  • 14 github-codespaces/*.sh agent scripts -- 1 message each

Test plan

  • bash -n syntax check passes on all 20 modified files
  • Verify cyan/green color distinction works in terminal output
  • Manual test: run a spawn on any cloud to confirm progress messages appear in cyan

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

… (green)
Consistently use log_step for progress/status messages ("Waiting for...",
"Fetching...", "Creating...") and reserve log_info for success/completion
messages. This gives users a clear visual distinction between operations
that are still running (cyan) vs operations that have completed (green).
Also adds periodic progress updates to silent polling loops in ramnode,
cherry, and netcup IP wait functions so users see activity during long waits.
Agent: ux-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

@la14-1la14-1 left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Self-review by ux-engineer:

This PR fixes the remaining log_info/log_step inconsistencies across the codebase. The changes are purely cosmetic (color of progress messages) and add progress indicators to 3 silent polling loops. All 20 files pass bash -n syntax checks.

Changes are low-risk:

  • log_info -> log_step swaps don't change behavior, only output color (green -> cyan)
  • New progress indicators in wait loops only add log_step calls every 5th attempt
  • Error messages now include attempt count for better diagnostics

No functional changes to provisioning, authentication, or script execution logic.

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

PR Review by pr-maintainer:

Reviewed. This consistently replaces log_info with log_step (cyan) for in-progress/waiting messages across cherry, contabo, and github-codespaces scripts. Matches the established convention where log_step = progress/status and log_info = static information. No functional changes, no security concerns. Ready for human approval.

@louisgvlouisgv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Security Review

Verdict: APPROVED

Findings

No security issues found. All changes are purely cosmetic (log_info -> log_step function name swaps for correct color coding) with minor additions of progress indicators using safe, locally-scoped integer variables. No new command execution, no user input handling changes, no credential exposure.

Tests

  • bash -n: PASS (all 20 modified files)
  • bun test: N/A (no .ts files changed)
  • curl|bash pattern: OK (no source/eval patterns modified)
  • macOS compat: OK (new arithmetic patterns use bash 3.2 compatible syntax)

Automated security review by spawn security team

@louisgvlouisgv added the security-approved Security review approved label Feb 12, 2026
@louisgv
louisgv merged commit cf53ea1 into mainFeb 12, 2026
1 check passed
@louisgv
louisgv deleted the ux-improvements branch February 12, 2026 23:48
la14-1 pushed a commit that referenced this pull request Feb 13, 2026
…lpers
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
louisgv added a commit that referenced this pull request Feb 13, 2026
…lpers (#765)
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

security-approvedSecurity review approved

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix: consistent log_step for in-progress messages - #757

Merged
louisgv merged 1 commit into
mainfrom
ux-improvements
Feb 12, 2026
Merged

fix: consistent log_step for in-progress messages#757
louisgv merged 1 commit into
mainfrom
ux-improvements

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Summary

  • Use log_step (cyan) instead of log_info (green) for in-progress/status messages across 20 shell scripts
  • Affected operations: "Waiting for...", "Fetching...", "Creating...", "Testing..." messages in shared/common.sh and cloud-specific scripts
  • Adds periodic progress updates to silent IP polling loops in ramnode, cherry, and netcup (every 5 attempts)
  • Improves timeout error messages to include attempt count

Rationale

The convention (established in PR #440) is:

  • log_step (cyan): progress messages for operations still running
  • log_info (green): success/completion messages

Several scripts were still using log_info for in-progress operations, making it hard for users to distinguish "still working" from "done". This PR fixes the remaining inconsistencies.

Files changed

  • shared/common.sh -- 4 messages (OAuth wait, credential test, interactive picker)
  • cherry/lib/common.sh -- 3 messages + progress indicator in IP wait loop
  • contabo/lib/common.sh -- 1 message
  • netcup/lib/common.sh -- 1 message + progress indicator in IP wait loop
  • ramnode/lib/common.sh -- 4 messages + progress indicator in IP wait loop
  • github-codespaces/lib/common.sh -- 2 messages
  • 14 github-codespaces/*.sh agent scripts -- 1 message each

Test plan

  • bash -n syntax check passes on all 20 modified files
  • Verify cyan/green color distinction works in terminal output
  • Manual test: run a spawn on any cloud to confirm progress messages appear in cyan

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

… (green)
Consistently use log_step for progress/status messages ("Waiting for...",
"Fetching...", "Creating...") and reserve log_info for success/completion
messages. This gives users a clear visual distinction between operations
that are still running (cyan) vs operations that have completed (green).
Also adds periodic progress updates to silent polling loops in ramnode,
cherry, and netcup IP wait functions so users see activity during long waits.
Agent: ux-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

@la14-1la14-1 left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Self-review by ux-engineer:

This PR fixes the remaining log_info/log_step inconsistencies across the codebase. The changes are purely cosmetic (color of progress messages) and add progress indicators to 3 silent polling loops. All 20 files pass bash -n syntax checks.

Changes are low-risk:

  • log_info -> log_step swaps don't change behavior, only output color (green -> cyan)
  • New progress indicators in wait loops only add log_step calls every 5th attempt
  • Error messages now include attempt count for better diagnostics

No functional changes to provisioning, authentication, or script execution logic.

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

PR Review by pr-maintainer:

Reviewed. This consistently replaces log_info with log_step (cyan) for in-progress/waiting messages across cherry, contabo, and github-codespaces scripts. Matches the established convention where log_step = progress/status and log_info = static information. No functional changes, no security concerns. Ready for human approval.

@louisgvlouisgv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Security Review

Verdict: APPROVED

Findings

No security issues found. All changes are purely cosmetic (log_info -> log_step function name swaps for correct color coding) with minor additions of progress indicators using safe, locally-scoped integer variables. No new command execution, no user input handling changes, no credential exposure.

Tests

  • bash -n: PASS (all 20 modified files)
  • bun test: N/A (no .ts files changed)
  • curl|bash pattern: OK (no source/eval patterns modified)
  • macOS compat: OK (new arithmetic patterns use bash 3.2 compatible syntax)

Automated security review by spawn security team

@louisgvlouisgv added the security-approved Security review approved label Feb 12, 2026
@louisgv
louisgv merged commit cf53ea1 into mainFeb 12, 2026
1 check passed
@louisgv
louisgv deleted the ux-improvements branch February 12, 2026 23:48
la14-1 pushed a commit that referenced this pull request Feb 13, 2026
…lpers
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
louisgv added a commit that referenced this pull request Feb 13, 2026
…lpers (#765)
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

security-approvedSecurity review approved

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: consistent log_step for in-progress messages - #757

Merged
louisgv merged 1 commit into
mainfrom
ux-improvements
Feb 12, 2026
Merged

fix: consistent log_step for in-progress messages#757
louisgv merged 1 commit into
mainfrom
ux-improvements

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Summary

  • Use log_step (cyan) instead of log_info (green) for in-progress/status messages across 20 shell scripts
  • Affected operations: "Waiting for...", "Fetching...", "Creating...", "Testing..." messages in shared/common.sh and cloud-specific scripts
  • Adds periodic progress updates to silent IP polling loops in ramnode, cherry, and netcup (every 5 attempts)
  • Improves timeout error messages to include attempt count

Rationale

The convention (established in PR #440) is:

  • log_step (cyan): progress messages for operations still running
  • log_info (green): success/completion messages

Several scripts were still using log_info for in-progress operations, making it hard for users to distinguish "still working" from "done". This PR fixes the remaining inconsistencies.

Files changed

  • shared/common.sh -- 4 messages (OAuth wait, credential test, interactive picker)
  • cherry/lib/common.sh -- 3 messages + progress indicator in IP wait loop
  • contabo/lib/common.sh -- 1 message
  • netcup/lib/common.sh -- 1 message + progress indicator in IP wait loop
  • ramnode/lib/common.sh -- 4 messages + progress indicator in IP wait loop
  • github-codespaces/lib/common.sh -- 2 messages
  • 14 github-codespaces/*.sh agent scripts -- 1 message each

Test plan

  • bash -n syntax check passes on all 20 modified files
  • Verify cyan/green color distinction works in terminal output
  • Manual test: run a spawn on any cloud to confirm progress messages appear in cyan

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

… (green)
Consistently use log_step for progress/status messages ("Waiting for...",
"Fetching...", "Creating...") and reserve log_info for success/completion
messages. This gives users a clear visual distinction between operations
that are still running (cyan) vs operations that have completed (green).
Also adds periodic progress updates to silent polling loops in ramnode,
cherry, and netcup IP wait functions so users see activity during long waits.
Agent: ux-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

@la14-1la14-1 left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Self-review by ux-engineer:

This PR fixes the remaining log_info/log_step inconsistencies across the codebase. The changes are purely cosmetic (color of progress messages) and add progress indicators to 3 silent polling loops. All 20 files pass bash -n syntax checks.

Changes are low-risk:

  • log_info -> log_step swaps don't change behavior, only output color (green -> cyan)
  • New progress indicators in wait loops only add log_step calls every 5th attempt
  • Error messages now include attempt count for better diagnostics

No functional changes to provisioning, authentication, or script execution logic.

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

PR Review by pr-maintainer:

Reviewed. This consistently replaces log_info with log_step (cyan) for in-progress/waiting messages across cherry, contabo, and github-codespaces scripts. Matches the established convention where log_step = progress/status and log_info = static information. No functional changes, no security concerns. Ready for human approval.

@louisgvlouisgv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Security Review

Verdict: APPROVED

Findings

No security issues found. All changes are purely cosmetic (log_info -> log_step function name swaps for correct color coding) with minor additions of progress indicators using safe, locally-scoped integer variables. No new command execution, no user input handling changes, no credential exposure.

Tests

  • bash -n: PASS (all 20 modified files)
  • bun test: N/A (no .ts files changed)
  • curl|bash pattern: OK (no source/eval patterns modified)
  • macOS compat: OK (new arithmetic patterns use bash 3.2 compatible syntax)

Automated security review by spawn security team

@louisgvlouisgv added the security-approved Security review approved label Feb 12, 2026
@louisgv
louisgv merged commit cf53ea1 into mainFeb 12, 2026
1 check passed
@louisgv
louisgv deleted the ux-improvements branch February 12, 2026 23:48
la14-1 pushed a commit that referenced this pull request Feb 13, 2026
…lpers
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
louisgv added a commit that referenced this pull request Feb 13, 2026
…lpers (#765)
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

security-approvedSecurity review approved

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: consistent log_step for in-progress messages - #757

Merged
louisgv merged 1 commit into
mainfrom
ux-improvements
Feb 12, 2026
Merged

fix: consistent log_step for in-progress messages#757
louisgv merged 1 commit into
mainfrom
ux-improvements

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Summary

  • Use log_step (cyan) instead of log_info (green) for in-progress/status messages across 20 shell scripts
  • Affected operations: "Waiting for...", "Fetching...", "Creating...", "Testing..." messages in shared/common.sh and cloud-specific scripts
  • Adds periodic progress updates to silent IP polling loops in ramnode, cherry, and netcup (every 5 attempts)
  • Improves timeout error messages to include attempt count

Rationale

The convention (established in PR #440) is:

  • log_step (cyan): progress messages for operations still running
  • log_info (green): success/completion messages

Several scripts were still using log_info for in-progress operations, making it hard for users to distinguish "still working" from "done". This PR fixes the remaining inconsistencies.

Files changed

  • shared/common.sh -- 4 messages (OAuth wait, credential test, interactive picker)
  • cherry/lib/common.sh -- 3 messages + progress indicator in IP wait loop
  • contabo/lib/common.sh -- 1 message
  • netcup/lib/common.sh -- 1 message + progress indicator in IP wait loop
  • ramnode/lib/common.sh -- 4 messages + progress indicator in IP wait loop
  • github-codespaces/lib/common.sh -- 2 messages
  • 14 github-codespaces/*.sh agent scripts -- 1 message each

Test plan

  • bash -n syntax check passes on all 20 modified files
  • Verify cyan/green color distinction works in terminal output
  • Manual test: run a spawn on any cloud to confirm progress messages appear in cyan

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

… (green)
Consistently use log_step for progress/status messages ("Waiting for...",
"Fetching...", "Creating...") and reserve log_info for success/completion
messages. This gives users a clear visual distinction between operations
that are still running (cyan) vs operations that have completed (green).
Also adds periodic progress updates to silent polling loops in ramnode,
cherry, and netcup IP wait functions so users see activity during long waits.
Agent: ux-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

@la14-1la14-1 left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Self-review by ux-engineer:

This PR fixes the remaining log_info/log_step inconsistencies across the codebase. The changes are purely cosmetic (color of progress messages) and add progress indicators to 3 silent polling loops. All 20 files pass bash -n syntax checks.

Changes are low-risk:

  • log_info -> log_step swaps don't change behavior, only output color (green -> cyan)
  • New progress indicators in wait loops only add log_step calls every 5th attempt
  • Error messages now include attempt count for better diagnostics

No functional changes to provisioning, authentication, or script execution logic.

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

PR Review by pr-maintainer:

Reviewed. This consistently replaces log_info with log_step (cyan) for in-progress/waiting messages across cherry, contabo, and github-codespaces scripts. Matches the established convention where log_step = progress/status and log_info = static information. No functional changes, no security concerns. Ready for human approval.

@louisgvlouisgv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Security Review

Verdict: APPROVED

Findings

No security issues found. All changes are purely cosmetic (log_info -> log_step function name swaps for correct color coding) with minor additions of progress indicators using safe, locally-scoped integer variables. No new command execution, no user input handling changes, no credential exposure.

Tests

  • bash -n: PASS (all 20 modified files)
  • bun test: N/A (no .ts files changed)
  • curl|bash pattern: OK (no source/eval patterns modified)
  • macOS compat: OK (new arithmetic patterns use bash 3.2 compatible syntax)

Automated security review by spawn security team

@louisgvlouisgv added the security-approved Security review approved label Feb 12, 2026
@louisgv
louisgv merged commit cf53ea1 into mainFeb 12, 2026
1 check passed
@louisgv
louisgv deleted the ux-improvements branch February 12, 2026 23:48
la14-1 pushed a commit that referenced this pull request Feb 13, 2026
…lpers
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
louisgv added a commit that referenced this pull request Feb 13, 2026
…lpers (#765)
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

security-approvedSecurity review approved

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix: consistent log_step for in-progress messages - #757

Merged
louisgv merged 1 commit into
mainfrom
ux-improvements
Feb 12, 2026
Merged

fix: consistent log_step for in-progress messages#757
louisgv merged 1 commit into
mainfrom
ux-improvements

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Summary

  • Use log_step (cyan) instead of log_info (green) for in-progress/status messages across 20 shell scripts
  • Affected operations: "Waiting for...", "Fetching...", "Creating...", "Testing..." messages in shared/common.sh and cloud-specific scripts
  • Adds periodic progress updates to silent IP polling loops in ramnode, cherry, and netcup (every 5 attempts)
  • Improves timeout error messages to include attempt count

Rationale

The convention (established in PR #440) is:

  • log_step (cyan): progress messages for operations still running
  • log_info (green): success/completion messages

Several scripts were still using log_info for in-progress operations, making it hard for users to distinguish "still working" from "done". This PR fixes the remaining inconsistencies.

Files changed

  • shared/common.sh -- 4 messages (OAuth wait, credential test, interactive picker)
  • cherry/lib/common.sh -- 3 messages + progress indicator in IP wait loop
  • contabo/lib/common.sh -- 1 message
  • netcup/lib/common.sh -- 1 message + progress indicator in IP wait loop
  • ramnode/lib/common.sh -- 4 messages + progress indicator in IP wait loop
  • github-codespaces/lib/common.sh -- 2 messages
  • 14 github-codespaces/*.sh agent scripts -- 1 message each

Test plan

  • bash -n syntax check passes on all 20 modified files
  • Verify cyan/green color distinction works in terminal output
  • Manual test: run a spawn on any cloud to confirm progress messages appear in cyan

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

… (green)
Consistently use log_step for progress/status messages ("Waiting for...",
"Fetching...", "Creating...") and reserve log_info for success/completion
messages. This gives users a clear visual distinction between operations
that are still running (cyan) vs operations that have completed (green).
Also adds periodic progress updates to silent polling loops in ramnode,
cherry, and netcup IP wait functions so users see activity during long waits.
Agent: ux-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

@la14-1la14-1 left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Self-review by ux-engineer:

This PR fixes the remaining log_info/log_step inconsistencies across the codebase. The changes are purely cosmetic (color of progress messages) and add progress indicators to 3 silent polling loops. All 20 files pass bash -n syntax checks.

Changes are low-risk:

  • log_info -> log_step swaps don't change behavior, only output color (green -> cyan)
  • New progress indicators in wait loops only add log_step calls every 5th attempt
  • Error messages now include attempt count for better diagnostics

No functional changes to provisioning, authentication, or script execution logic.

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

PR Review by pr-maintainer:

Reviewed. This consistently replaces log_info with log_step (cyan) for in-progress/waiting messages across cherry, contabo, and github-codespaces scripts. Matches the established convention where log_step = progress/status and log_info = static information. No functional changes, no security concerns. Ready for human approval.

@louisgvlouisgv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Security Review

Verdict: APPROVED

Findings

No security issues found. All changes are purely cosmetic (log_info -> log_step function name swaps for correct color coding) with minor additions of progress indicators using safe, locally-scoped integer variables. No new command execution, no user input handling changes, no credential exposure.

Tests

  • bash -n: PASS (all 20 modified files)
  • bun test: N/A (no .ts files changed)
  • curl|bash pattern: OK (no source/eval patterns modified)
  • macOS compat: OK (new arithmetic patterns use bash 3.2 compatible syntax)

Automated security review by spawn security team

@louisgvlouisgv added the security-approved Security review approved label Feb 12, 2026
@louisgv
louisgv merged commit cf53ea1 into mainFeb 12, 2026
1 check passed
@louisgv
louisgv deleted the ux-improvements branch February 12, 2026 23:48
la14-1 pushed a commit that referenced this pull request Feb 13, 2026
…lpers
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
louisgv added a commit that referenced this pull request Feb 13, 2026
…lpers (#765)
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

security-approvedSecurity review approved

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: consistent log_step for in-progress messages - #757

Merged
louisgv merged 1 commit into
mainfrom
ux-improvements
Feb 12, 2026
Merged

fix: consistent log_step for in-progress messages#757
louisgv merged 1 commit into
mainfrom
ux-improvements

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Summary

  • Use log_step (cyan) instead of log_info (green) for in-progress/status messages across 20 shell scripts
  • Affected operations: "Waiting for...", "Fetching...", "Creating...", "Testing..." messages in shared/common.sh and cloud-specific scripts
  • Adds periodic progress updates to silent IP polling loops in ramnode, cherry, and netcup (every 5 attempts)
  • Improves timeout error messages to include attempt count

Rationale

The convention (established in PR #440) is:

  • log_step (cyan): progress messages for operations still running
  • log_info (green): success/completion messages

Several scripts were still using log_info for in-progress operations, making it hard for users to distinguish "still working" from "done". This PR fixes the remaining inconsistencies.

Files changed

  • shared/common.sh -- 4 messages (OAuth wait, credential test, interactive picker)
  • cherry/lib/common.sh -- 3 messages + progress indicator in IP wait loop
  • contabo/lib/common.sh -- 1 message
  • netcup/lib/common.sh -- 1 message + progress indicator in IP wait loop
  • ramnode/lib/common.sh -- 4 messages + progress indicator in IP wait loop
  • github-codespaces/lib/common.sh -- 2 messages
  • 14 github-codespaces/*.sh agent scripts -- 1 message each

Test plan

  • bash -n syntax check passes on all 20 modified files
  • Verify cyan/green color distinction works in terminal output
  • Manual test: run a spawn on any cloud to confirm progress messages appear in cyan

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

… (green)
Consistently use log_step for progress/status messages ("Waiting for...",
"Fetching...", "Creating...") and reserve log_info for success/completion
messages. This gives users a clear visual distinction between operations
that are still running (cyan) vs operations that have completed (green).
Also adds periodic progress updates to silent polling loops in ramnode,
cherry, and netcup IP wait functions so users see activity during long waits.
Agent: ux-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

@la14-1la14-1 left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Self-review by ux-engineer:

This PR fixes the remaining log_info/log_step inconsistencies across the codebase. The changes are purely cosmetic (color of progress messages) and add progress indicators to 3 silent polling loops. All 20 files pass bash -n syntax checks.

Changes are low-risk:

  • log_info -> log_step swaps don't change behavior, only output color (green -> cyan)
  • New progress indicators in wait loops only add log_step calls every 5th attempt
  • Error messages now include attempt count for better diagnostics

No functional changes to provisioning, authentication, or script execution logic.

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

PR Review by pr-maintainer:

Reviewed. This consistently replaces log_info with log_step (cyan) for in-progress/waiting messages across cherry, contabo, and github-codespaces scripts. Matches the established convention where log_step = progress/status and log_info = static information. No functional changes, no security concerns. Ready for human approval.

@louisgvlouisgv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Security Review

Verdict: APPROVED

Findings

No security issues found. All changes are purely cosmetic (log_info -> log_step function name swaps for correct color coding) with minor additions of progress indicators using safe, locally-scoped integer variables. No new command execution, no user input handling changes, no credential exposure.

Tests

  • bash -n: PASS (all 20 modified files)
  • bun test: N/A (no .ts files changed)
  • curl|bash pattern: OK (no source/eval patterns modified)
  • macOS compat: OK (new arithmetic patterns use bash 3.2 compatible syntax)

Automated security review by spawn security team

@louisgvlouisgv added the security-approved Security review approved label Feb 12, 2026
@louisgv
louisgv merged commit cf53ea1 into mainFeb 12, 2026
1 check passed
@louisgv
louisgv deleted the ux-improvements branch February 12, 2026 23:48
la14-1 pushed a commit that referenced this pull request Feb 13, 2026
…lpers
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
louisgv added a commit that referenced this pull request Feb 13, 2026
…lpers (#765)
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

security-approvedSecurity review approved

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: consistent log_step for in-progress messages - #757

Merged
louisgv merged 1 commit into
mainfrom
ux-improvements
Feb 12, 2026
Merged

fix: consistent log_step for in-progress messages#757
louisgv merged 1 commit into
mainfrom
ux-improvements

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Summary

  • Use log_step (cyan) instead of log_info (green) for in-progress/status messages across 20 shell scripts
  • Affected operations: "Waiting for...", "Fetching...", "Creating...", "Testing..." messages in shared/common.sh and cloud-specific scripts
  • Adds periodic progress updates to silent IP polling loops in ramnode, cherry, and netcup (every 5 attempts)
  • Improves timeout error messages to include attempt count

Rationale

The convention (established in PR #440) is:

  • log_step (cyan): progress messages for operations still running
  • log_info (green): success/completion messages

Several scripts were still using log_info for in-progress operations, making it hard for users to distinguish "still working" from "done". This PR fixes the remaining inconsistencies.

Files changed

  • shared/common.sh -- 4 messages (OAuth wait, credential test, interactive picker)
  • cherry/lib/common.sh -- 3 messages + progress indicator in IP wait loop
  • contabo/lib/common.sh -- 1 message
  • netcup/lib/common.sh -- 1 message + progress indicator in IP wait loop
  • ramnode/lib/common.sh -- 4 messages + progress indicator in IP wait loop
  • github-codespaces/lib/common.sh -- 2 messages
  • 14 github-codespaces/*.sh agent scripts -- 1 message each

Test plan

  • bash -n syntax check passes on all 20 modified files
  • Verify cyan/green color distinction works in terminal output
  • Manual test: run a spawn on any cloud to confirm progress messages appear in cyan

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

… (green)
Consistently use log_step for progress/status messages ("Waiting for...",
"Fetching...", "Creating...") and reserve log_info for success/completion
messages. This gives users a clear visual distinction between operations
that are still running (cyan) vs operations that have completed (green).
Also adds periodic progress updates to silent polling loops in ramnode,
cherry, and netcup IP wait functions so users see activity during long waits.
Agent: ux-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

@la14-1la14-1 left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Self-review by ux-engineer:

This PR fixes the remaining log_info/log_step inconsistencies across the codebase. The changes are purely cosmetic (color of progress messages) and add progress indicators to 3 silent polling loops. All 20 files pass bash -n syntax checks.

Changes are low-risk:

  • log_info -> log_step swaps don't change behavior, only output color (green -> cyan)
  • New progress indicators in wait loops only add log_step calls every 5th attempt
  • Error messages now include attempt count for better diagnostics

No functional changes to provisioning, authentication, or script execution logic.

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

PR Review by pr-maintainer:

Reviewed. This consistently replaces log_info with log_step (cyan) for in-progress/waiting messages across cherry, contabo, and github-codespaces scripts. Matches the established convention where log_step = progress/status and log_info = static information. No functional changes, no security concerns. Ready for human approval.

@louisgvlouisgv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Security Review

Verdict: APPROVED

Findings

No security issues found. All changes are purely cosmetic (log_info -> log_step function name swaps for correct color coding) with minor additions of progress indicators using safe, locally-scoped integer variables. No new command execution, no user input handling changes, no credential exposure.

Tests

  • bash -n: PASS (all 20 modified files)
  • bun test: N/A (no .ts files changed)
  • curl|bash pattern: OK (no source/eval patterns modified)
  • macOS compat: OK (new arithmetic patterns use bash 3.2 compatible syntax)

Automated security review by spawn security team

@louisgvlouisgv added the security-approved Security review approved label Feb 12, 2026
@louisgv
louisgv merged commit cf53ea1 into mainFeb 12, 2026
1 check passed
@louisgv
louisgv deleted the ux-improvements branch February 12, 2026 23:48
la14-1 pushed a commit that referenced this pull request Feb 13, 2026
…lpers
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
louisgv added a commit that referenced this pull request Feb 13, 2026
…lpers (#765)
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

security-approvedSecurity review approved

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix: consistent log_step for in-progress messages - #757

Merged
louisgv merged 1 commit into
mainfrom
ux-improvements
Feb 12, 2026
Merged

fix: consistent log_step for in-progress messages#757
louisgv merged 1 commit into
mainfrom
ux-improvements

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Summary

  • Use log_step (cyan) instead of log_info (green) for in-progress/status messages across 20 shell scripts
  • Affected operations: "Waiting for...", "Fetching...", "Creating...", "Testing..." messages in shared/common.sh and cloud-specific scripts
  • Adds periodic progress updates to silent IP polling loops in ramnode, cherry, and netcup (every 5 attempts)
  • Improves timeout error messages to include attempt count

Rationale

The convention (established in PR #440) is:

  • log_step (cyan): progress messages for operations still running
  • log_info (green): success/completion messages

Several scripts were still using log_info for in-progress operations, making it hard for users to distinguish "still working" from "done". This PR fixes the remaining inconsistencies.

Files changed

  • shared/common.sh -- 4 messages (OAuth wait, credential test, interactive picker)
  • cherry/lib/common.sh -- 3 messages + progress indicator in IP wait loop
  • contabo/lib/common.sh -- 1 message
  • netcup/lib/common.sh -- 1 message + progress indicator in IP wait loop
  • ramnode/lib/common.sh -- 4 messages + progress indicator in IP wait loop
  • github-codespaces/lib/common.sh -- 2 messages
  • 14 github-codespaces/*.sh agent scripts -- 1 message each

Test plan

  • bash -n syntax check passes on all 20 modified files
  • Verify cyan/green color distinction works in terminal output
  • Manual test: run a spawn on any cloud to confirm progress messages appear in cyan

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

… (green)
Consistently use log_step for progress/status messages ("Waiting for...",
"Fetching...", "Creating...") and reserve log_info for success/completion
messages. This gives users a clear visual distinction between operations
that are still running (cyan) vs operations that have completed (green).
Also adds periodic progress updates to silent polling loops in ramnode,
cherry, and netcup IP wait functions so users see activity during long waits.
Agent: ux-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

@la14-1la14-1 left a comment

Copy link
Copy Markdown
CollaboratorAuthor

Choose a reason for hiding this comment

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

Self-review by ux-engineer:

This PR fixes the remaining log_info/log_step inconsistencies across the codebase. The changes are purely cosmetic (color of progress messages) and add progress indicators to 3 silent polling loops. All 20 files pass bash -n syntax checks.

Changes are low-risk:

  • log_info -> log_step swaps don't change behavior, only output color (green -> cyan)
  • New progress indicators in wait loops only add log_step calls every 5th attempt
  • Error messages now include attempt count for better diagnostics

No functional changes to provisioning, authentication, or script execution logic.

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

PR Review by pr-maintainer:

Reviewed. This consistently replaces log_info with log_step (cyan) for in-progress/waiting messages across cherry, contabo, and github-codespaces scripts. Matches the established convention where log_step = progress/status and log_info = static information. No functional changes, no security concerns. Ready for human approval.

@louisgvlouisgv left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Security Review

Verdict: APPROVED

Findings

No security issues found. All changes are purely cosmetic (log_info -> log_step function name swaps for correct color coding) with minor additions of progress indicators using safe, locally-scoped integer variables. No new command execution, no user input handling changes, no credential exposure.

Tests

  • bash -n: PASS (all 20 modified files)
  • bun test: N/A (no .ts files changed)
  • curl|bash pattern: OK (no source/eval patterns modified)
  • macOS compat: OK (new arithmetic patterns use bash 3.2 compatible syntax)

Automated security review by spawn security team

@louisgvlouisgv added the security-approved Security review approved label Feb 12, 2026
@louisgv
louisgv merged commit cf53ea1 into mainFeb 12, 2026
1 check passed
@louisgv
louisgv deleted the ux-improvements branch February 12, 2026 23:48
la14-1 pushed a commit that referenced this pull request Feb 13, 2026
…lpers
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
louisgv added a commit that referenced this pull request Feb 13, 2026
…lpers (#765)
Add comprehensive test coverage for previously untested utility functions
in shared/common.sh that are used pervasively across all cloud providers:
- log_step: cyan progress messages (added PR #757)
- _log_diagnostic: structured error output (header + causes + numbered fixes)
- check_python_available: Python 3 dependency detection with install hints
- find_node_runtime: bun/node runtime discovery
- track_temp_file + cleanup_temp_files: secure credential temp file cleanup
- register_cleanup_trap: EXIT/INT/TERM signal handlers
- get_cloud_init_userdata: cloud-init YAML generation for provisioning
- calculate_retry_backoff: jittered exponential backoff
- generate_ssh_key_if_missing: ed25519 key generation with directory creation
- get_ssh_fingerprint: MD5 fingerprint extraction
- opencode_install_cmd: opencode install script content
- POLL_INTERVAL / SSH_OPTS: configurable constants and defaults
- All 4 log functions: stderr-only output verification
Agent: test-engineer
Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

security-approvedSecurity review approved

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@la14-1@louisgv