Conversation
Previously, prepare-version computed the version but each build job recalculated it from VERSION + BUILD_NUMBER. This caused mismatches when triggered by tags (tag version != run_number). Now: - prepare-version computes version once - All build jobs receive APP_VERSION env var - Gradle uses APP_VERSION if set, else falls back to local computation - Ensures artifact names match actual binary versions 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Add comprehensive About section as the last tab in settings navigation: - Application info (version, release channel) - System info (OS, architecture, Java version/vendor) - Clickable links (GitHub repo, releases, issues) - Keyboard shortcuts table with platform-aware keys - License information (Apache 2.0 + LGPLv3) - Acknowledgments (JediTerm, Compose Multiplatform, ICU4J, Meslo Nerd Font) 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Code Review: Add About BossTerm Section to SettingsThank you for this contribution! Overall, this is a well-implemented feature that adds valuable application information to the settings panel. The code is clean, follows established patterns, and provides a good user experience. Strengths1. Excellent Code Quality
2. Smart Platform Awareness
3. Good UX Design
4. Comprehensive Information
5. Build System Improvements
Minor Suggestions (Optional)1. Hardcoded Release ChannelAboutSection.kt:43 - Release channel is hardcoded to "stable". Consider deriving from Version.preRelease to automatically show "beta" for pre-release versions. 2. Error HandlingAboutSection.kt:148-152 - Silent exception handling for browser opening. Consider logging errors for debugging purposes. 3. Java Version DisplayAboutSection.kt:52-53 - Consider showing Java runtime name as well (helps identify JBR, OpenJDK, Temurin, etc.) 4. Version Display FallbackFor development builds, consider showing a "development" indicator if version is exactly "1.0.0" (the fallback value). Security ReviewNo security concerns. Uses Desktop.browse() safely with hardcoded URLs and proper exception handling. PerformanceExcellent performance with proper use of remember{} for OS detection, lazy Version.CURRENT loading, and minimal recomposition triggers. Test CoverageManual test plan is present in PR description. Consider adding unit tests for platform detection logic in future PRs. Final VerdictRecommendation: APPROVE with Minor Suggestions This PR is production-ready with high code quality. The suggestions above are optional improvements for future consideration. Required Before Merge: None - code is ready to merge Optional Enhancements (can be done in follow-up PRs):
Code Quality MetricsCode Quality: 5/5 - Clean, idiomatic Compose code Great work on this feature! The About section is a valuable addition that improves user experience and provides important application information. The code follows best practices and integrates seamlessly with the existing settings infrastructure. |
- Derive release channel from Version.preRelease (shows "beta" for pre-release) - Show "(dev)" indicator for fallback version 1.0.0 - Add Java Runtime name to system info (identifies JBR, OpenJDK, etc.) - Log errors when browser opening fails 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Code Review - PR #117: Add About BossTerm SectionOverall Assessment✅ Strong PR - Well-structured implementation with good attention to detail. The About section is comprehensive and follows existing patterns. Code Quality & Best Practices✅ Strengths
Issues & Recommendations🔴 Critical: Missing ImportLocation: SettingsCategory.ABOUT -> AboutSection()Problem: Fix: import ai.rever.bossterm.compose.settings.sections.AboutSection
|
Working directory inheritance now works without shell OSC 7 configuration: - Added getPid() and getWorkingDirectory() to ProcessHandle interface - Implemented process CWD detection via /proc/<pid>/cwd (Linux) and lsof (macOS) - TabController.getActiveWorkingDirectory() now falls back to process query - Split panes also use the fallback mechanism The setting "Inherit Working Directory" now works immediately without requiring shell integration setup. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Code Review: About BossTerm SectionOverall AssessmentThis is a well-structured PR that adds a comprehensive "About" section to the settings panel. The implementation is clean, follows the project's conventions, and provides valuable user-facing information. Recommendation: Approve with minor suggestions for consideration. Strengths1. Excellent Code Organization
2. Platform Awareness
3. Robust Error Handling
4. Build System Improvements
Issues & Concerns1. Working Directory Detection: Potential Resource Leak (Medium Priority)File: val proc = ProcessBuilder("lsof", "-a", "-p", pid.toString(), "-d", "cwd", "-Fn")
.redirectErrorStream(true)
.start()
val output = proc.inputStream.bufferedReader().readText()
proc.waitFor()Issue: Process streams are not explicitly closed, which can lead to file descriptor leaks with repeated calls. Recommendation: osName.contains("mac") -> {
val proc = ProcessBuilder("lsof", "-a", "-p", pid.toString(), "-d", "cwd", "-Fn")
.redirectErrorStream(true)
.start()
try {
proc.inputStream.use { inputStream ->
val output = inputStream.bufferedReader().readText()
proc.waitFor()
output.lines()
.find { it.startsWith("n/") }
?.substring(1)
}
} finally {
proc.destroy()
}
}2. Version Display Logic Hardcodes Dev Detection (Low Priority)File: if (version.major == 1 && version.minor == 0 && version.patch == 0 && version.preRelease == null) {
"$base (dev)"
}Issue: This hardcodes the assumption that 1.0.0 means dev builds. If the project eventually releases a real 1.0.0 stable version, this will incorrectly display "(dev)". Recommendation: Add a dedicated val versionDisplay = remember {
val base = version.toString()
// Check if it's a snapshot/dev build
if (base.endsWith("-SNAPSHOT") || System.getenv("APP_VERSION") == null) {
"$base (dev)"
} else {
base
}
}3. Missing Windows Support for Working Directory (Medium Priority)File: The Recommendation: Add Windows support using WMI or osName.contains("windows") -> {
val proc = ProcessBuilder("wmic", "process", "where", "ProcessId=$pid", "get", "ExecutablePath")
.redirectErrorStream(true)
.start()
// Parse output and extract directory
// Note: This gets executable path, not CWD - Windows CWD tracking is complex
null // For now, document limitation
}4. Keyboard Shortcuts: Missing Split Pane Shortcuts (Low Priority)File: The shortcuts table doesn't include split pane operations, which are documented as a major feature in CLAUDE.md:
Recommendation: Add a "Splits" category if these shortcuts exist in the action registry. 5. Test Coverage: No Unit Tests for New Code (Medium Priority)The PR adds 394 lines of new code with no accompanying tests. While UI components are harder to test, consider:
Recommendation: Add a test file like Security Considerations✅ Desktop.browse() Usage is SecureThe hardcoded URLs in ✅ Process Execution is SafeThe
|
New tabs now always start in home directory. Only splits inherit working directory (controlled by splitInheritWorkingDirectory setting). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Code Review: feat: Add About BossTerm section to settingsOverall, this is a well-structured PR that adds valuable user-facing features. The code quality is good, but I have several important concerns and suggestions. Strengths
Critical Issues1. Working Directory Behavior Change (Breaking Change)The changes in TabbedTerminal.kt lines 114, 228, 329 remove working directory inheritance for new tabs entirely by calling createTab() without workingDir parameter. Issue: According to CLAUDE.md, OSC 7 tracking should enable new tabs to inherit CWD from the active tab. This change breaks that feature. Impact: Users who configured OSC 7 shell integration will find that new tabs no longer inherit the working directory - this is a regression. Recommendation: Revert this change or add a setting to control the behavior. The original implementation that passed workingDir was correct. 2. Race Condition in Process Working Directory QueryThe shell process can change its working directory via cd commands. Querying /proc/pid/cwd or lsof gives the CWD of the parent process, not the current shells working directory after cd commands. Example:
Recommendation: This is acceptable as a fallback when OSC 7 is not configured, but the comment should clarify this limitation in the documentation. 3. Version Detection Logic IssueThe code at AboutSection.kt:44-49 hardcodes the assumption that 1.0.0 is the fallback dev version. If the project ever releases a legitimate 1.0.0 stable version, this will incorrectly label it as dev. Recommendation: Check if APP_VERSION env var is set instead of hardcoding version numbers. 4. Missing Error Handling for lsofThe lsof call at PlatformServices.desktop.kt:242-251 has no timeout on waitFor(). If lsof hangs, the thread blocks indefinitely. Recommendation: Add timeout with waitFor(500, TimeUnit.MILLISECONDS) and destroyForcibly() if it times out. Medium Priority Issues5. Desktop.browse() Not Checked for SupportDesktop.browse() may not be supported on all platforms (headless systems, some Linux desktops). Recommendation: Check Desktop.isDesktopSupported() and isSupported(Desktop.Action.BROWSE) before calling browse(). 6. GitHub Release Workflow Environment Variable NamingThe workflow changes from BUILD_NUMBER to APP_VERSION. Verify that the prepare-version job correctly constructs the full version including patch number. Minor Suggestions
Security Considerations
Overall AssessmentCode Quality: 7/10 (good structure, needs refinement) Recommendation:
Thanks for the contribution! The About section is a great addition. Please address the critical issues, especially the working directory inheritance regression. |
🤖 Generated with [Claude Code](https://claude.com/claude-code)
PR Review: Add About BossTerm Section to SettingsOverviewThis PR adds a comprehensive "About" section to the settings panel, along with significant build system improvements for version management and enhancements to working directory tracking. Overall, this is a well-structured and polished addition to the application. ✅ Strengths1. Excellent UI/UX Design
2. Comprehensive Information DisplayThe About section includes all the right information:
3. Build System ImprovementsThe version management refactor in
4. Working Directory EnhancementsThe additions to
|
| Issue | Severity | Status |
|---|---|---|
| URL validation in LinkRow | Low→High (if reused) | |
| Command injection in lsof | Very Low | ✅ Acceptable risk |
| Desktop.browse() abuse | Low | ✅ Mitigated by hardcoded URLs |
📊 Overall Assessment
Code Quality: ⭐⭐⭐⭐½ (4.5/5)
Security: ⭐⭐⭐⭐ (4/5) - Minor URL validation concern
Performance: ⭐⭐⭐⭐⭐ (5/5) - No concerns
Test Coverage: ⭐⭐½ (2.5/5) - Missing tests
Documentation: ⭐⭐⭐⭐⭐ (5/5) - Excellent inline docs
Overall: ⭐⭐⭐⭐ (4/5)
✅ Recommendation
Approve with requested changes:
Must Fix:
- Revert tab CWD inheritance removal OR add user setting OR update documentation (Issue feat: Terminal rendering improvements + 4 high-priority features (#2, #3, #4, #5) #1)
Should Fix:
- Add URL scheme validation to
LinkRow(Issue 🔍 Implement text search/find functionality (Ctrl+F) #2) - Fix version 1.0.0 detection logic (Issue 🔗 Implement hyperlink detection and click handling #3)
Nice to Have:
- Add timeout to
lsofcall (Issue ⚙️ Implement user settings and configuration system #4) - Add null safety to OS info (Issue 🌏 Implement IME (Input Method Editor) support for CJK languages #5)
- Add unit tests for new features
🎉 Final Thoughts
This is a high-quality PR that adds significant value to BossTerm. The About section is polished, informative, and follows Material 3 design principles. The build system improvements are well thought out. The main concern is the behavioral regression in tab creation (Issue #1), which should be addressed before merging.
Great work overall! 🚀
Summary
Changes
SettingsCategory.kt: AddedABOUTenum with Favorite iconSettingsPanel.kt: Added routing case for About sectionAboutSection.kt(new): 268-line composable with 6 sectionsTest plan
🤖 Generated with Claude Code