Download Latest Version v0.3.1 source code.zip (11.7 MB)
Email in envelope

Get an email when there's a new version of LoopTroop

Home / v0.2.3
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-05-26 16.4 kB
Release v0.2.3 source code.tar.gz 2026-05-26 3.7 MB
Release v0.2.3 source code.zip 2026-05-26 4.0 MB
Totals: 3 Items   7.7 MB 0

Summary

  • Added future-ticket safety around PR merge completion and final-test file effects so merged PRs and test-produced files are handled audibly and recoverably.
  • Format commands in system logs to match tool calls exactly, using identical colors (text-cyan-500) and rendering output/error blocks in standard structured sections (squares/boxes) regardless of length.
  • Render bead separators in the per-phase normal log view for CODING phase, matching the existing Full Log bead grouping behavior.
  • Resume execution-setup and final-test attempt counters correctly after an app restart, so logs show the true attempt number and the maxIterations guard is respected across restarts.
  • Fixed bead iteration countdown timer showing 00:00 on iteration 2+ by anchoring to the current iteration's start time (updatedAt) instead of the first iteration's start time (startedAt).
  • Pause the CODING bead countdown while a ticket is blocked by a continuable provider interruption, and show a paused-session cue instead.
  • Repair bare structured YAML list item keys before parsing so compatible model outputs no longer retry when they emitted an existing id/path as a scalar.
  • Show a live Current Activity strip above log views so model stalls, empty outputs, trusted timeout causes, and near-deadline warnings are visible while waiting.
  • Apply AI Response Timeout consistently to model-output waits across scan, planning, final-test generation, and PR drafting phases while keeping CODING on its bead iteration timeout.
  • Separate CODING iteration timeouts from OpenCode/provider interruptions so owned bead deadlines reset and retry while resumable provider stalls can still Continue.
  • Make the ticket location copy path button permanently visible in the ticket details view, and add an OS-agnostic 'Reveal in File Explorer' button next to it.
  • Show line count, interactive color legend, and copy button in the per-bead model log view.
  • Show index-based bead numbers next to bead titles and IDs in the beads details view (blocked by, blocks, and label matching lists) and draft views.
  • Fixed bead startedAt to preserve the first iteration's start time across retries instead of overwriting it on each attempt; changed bead createdAt to be set at approval time (when user clicks Approve) instead of on save or expansion.
  • Added and hardened npm run dev --lan for trusted local-network dashboard sharing with LAN URLs, a mobile QR code, and WSL-aware Windows portproxy diagnostics.
  • Let users collapse the left-panel Errors section even when a blocked ticket auto-opens it.
  • Reload only after sustained dashboard reconnect/loading recovery so transient warning flickers do not refresh the page.
  • Show exact sanitized OpenCode provider causes when generic provider errors can be matched to local OpenCode logs.
  • Make Continue recovery use exact OpenCode session lookup and show failed action reasons inline.
  • Allow Continue for blocked HTTP 402 Payment Required OpenCode provider errors when the original session is still active.
  • Show live npm run dev preflight progress so slow startup checks no longer look stalled.
  • Added a manual reload button next to "AI Models" in Configuration to force-refresh available OpenCode providers and models on demand.
  • Keep future .ticket/** metadata local to LoopTroop so ticket artifacts no longer get committed or pushed to target repository branches.
  • The DEBUG tab now shows every single log line from LoopTroop (all three channels) and OpenCode (all SDK stream events plus native server logs); OpenCode native logs are always written at DEBUG level to the log directory. Use npm run dev --opencode-logs=all to additionally print them to the console.
  • Added a high-priority roadmap item for an AI Gap-Fix Button on coverage warnings during approval statuses, letting the main AI implementer resolve unresolved coverage gaps in-place.
  • Successful git push commands now show a compact → push completed log entry instead of the verbose multi-line STDERR: remote messages block.
  • Show a visible notification in the ALL tab whenever an OpenCode session is restarted due to no response text being produced, making silent session resets visible across all workflow phases.
  • Added OpenCode Max Steps profile setting to cap the number of steps per OpenCode session; when set, LoopTroop writes a per-worktree opencode.json (git-excluded) before coding and removes it after; 0 means no limit (OpenCode default).
  • Fixed release validation coverage for the OpenCode Max Steps documentation link and normalized roadmap line endings.

Detailed Changes

Added

  • Added language-agnostic final-test file-effects auditing. Final-test structured output now accepts file_effects entries (candidate, temporary, or unexpected), records baseline/post-test dirty files in a final_test_file_effects_audit artifact, and blocks integration with FINAL_TEST_FILE_EFFECTS_UNCLASSIFIED when final testing leaves undeclared dirty files.
  • Added blocked-error recovery actions for unresolved final-test file effects: Include in PR writes a final_test_file_effects_override that treats unclassified final-test-produced files as candidate changes, while Discard and Continue removes/reverts only files proven by the audit to have been produced or changed during final testing.
  • emitOpenCodeSessionLogs now emits an audience: 'all' milestone notification when responseChars=0, making silent OpenCode session restarts visible in the ALL tab across all workflow phases (coding, PRD, interview, verification, PR drafting, etc.).
  • New OpenCode Max Steps profile setting (opencodeSteps, default 0): caps the number of steps per OpenCode session. When set to a non-zero value, LoopTroop writes opencode.json at the worktree root before coding starts (git-excluded via per-worktree local exclude) and removes it in a finally block after coding completes. 0 means no limit — matching OpenCode's default behavior.
  • Added opencodeSteps to DB schema (opencode_steps INTEGER DEFAULT 0), Drizzle ORM profile schema, Zod profile route schema, frontend Profile interface, numericFields config, buildInitialRawNumeric, and ProfileSetup.tsx with a NumericField control and inline hint.
  • Added OpenCode Max Steps section to docs/configuration.md covering steps-vs-messages semantics, trade-offs, and git-exclusion implementation detail.

Changed

  • PR merge completion now treats the GitHub merge as complete once GitHub reports the PR merged. Local base-branch sync runs afterward as a recoverable follow-up, and retries for already-merged PRs skip the remote merge call and resume local sync/cleanup.
  • New ticket worktrees now fetch origin before resolving their base and prefer origin/<baseBranch> when that remote ref is available.
  • Successful git push with informational remote STDERR is now rendered as a compact → push completed log entry in commandLogger, suppressing the verbose multi-line STDERR: block.
  • Changed command tag [CMD] and text colors to match tool logs (text-cyan-500) instead of text-zinc-500.
  • Bypassed the length/complexity filter (shouldRenderImplicitStdoutSection) in splitLegacyCommandBody to ensure compact command outputs are always rendered as structured STDOUT or ERROR boxes.
  • Updated PhaseLogPanel tests to align with the standard structured formatting of all command outputs.
  • Broadened the existing councilResponseTimeout setting into the user-facing AI Response Timeout, covering non-coding model-output prompts including relevant-files scanning, setup-plan drafting, final-test generation, and PR drafting; CODING and execution setup keep their dedicated timeout behavior.
  • Removed the hover-only opacity constraint from the copy path button in the ticket details view, making it permanently visible.
  • Show the 1-based index (bead number) next to dependency references (Blocked By, Blocks) and label matching lists in the bead details view trigger and hover cards to easily locate them in the main bead list.
  • Display index-based bead numbers next to dependencies (Blocked By, Blocks) in the collapsible Beads draft artifact details view.
  • Bead startedAt now preserves the first iteration's start timestamp across retries instead of being overwritten on each attempt. Only updatedAt reflects the latest attempt start time.
  • Bead createdAt is now stamped at approval time (when the user clicks Approve) instead of at save or expansion time. Beads start with createdAt: '' and receive their timestamp only when approved.
  • Ticket worktree artifacts under .ticket/** now stay local: project attach installs /.ticket/ in .git/info/exclude, and bead finalization excludes those files from commit capture while still preserving them across execution resets.

Added

  • Added bead delimiter separators to the per-phase normal log view for the CODING phase. Log entries are grouped by detected bead boundaries (from [SYS] Executing bead ... system lines) and each bead section is preceded by a Bead X/Y delimiter showing the bead title, matching the existing Full Log behavior. Incomplete future beads are hidden when runtime data is available, and the grouping respects the current tab filter so empty bead sections are omitted.
  • Added a compact Current Activity strip to phase and full log views, deriving waiting-for-first-model, provider retry timeout, provider-timeout-preserved, iteration-timeout, empty-output, workflow timeout, and near-timeout states from structured log events.
  • Added a 'Reveal in File Explorer' button next to the copy path button in the ticket details view.
  • Added a POST /api/files/open-path API endpoint that safely reveals files/folders in the user's native file explorer, supporting Windows, macOS, Linux, and WSL (including WSL path to Windows host conversion).
  • Added entry count, interactive color legend tooltip, and copy-to-clipboard button to the per-bead Log view (in the bead details pane) matching the standard dashboard phase/full log view headers.
  • Added a LAN sharing mode for npm run dev --lan, binding the frontend/docs dev servers to the local network, advertising reachable LAN URLs with a QR code, and keeping backend/OpenCode control-plane ports loopback-only behind the Vite proxy.
  • Replaced automatic WSL relay startup with a safe Windows portproxy one-liner for npm run dev --lan, avoiding suspicious PowerShell listener processes while explaining why WSL 172.x addresses are not directly reachable from other LAN devices and keeping the mobile QR code for the after-setup URL.
  • Added WSL LAN setup diagnostics that check whether the matching Windows network profile is Private, print the exact Set-NetConnectionProfile command when the profile is Public, run a Windows-side reachability self-test for the forwarded frontend/docs URLs, and explain that router/AP client isolation cannot be reliably detected from the dev machine.
  • Added a reload button with tooltip next to the "AI Models" heading in the Configuration panel. Clicking it clears the React Query cache and re-fetches the full model catalog from the OpenCode server, bypassing the 5-minute stale-time window.
  • The DEBUG tab now loads channel=all, which merges all three LoopTroop log files (execution-log.jsonl, execution-log.debug.jsonl, execution-log.ai.jsonl) plus OpenCode native server log lines filtered by the ticket's session IDs. Every LoopTroop log entry and every OpenCode SDK stream event is visible in a single chronological view. All content is loaded lazily on tab open; no other tabs are affected.
  • Added channel=all to the log API (GET /api/files/:ticketId/logs?channel=all). The server merges and deduplicates entries from all three LoopTroop log channels server-side, appends OpenCode native log entries (parsed from logfmt and tagged source: 'debug'), sorts by timestamp, and returns a single list. Phase/status filters still apply to LoopTroop entries but OpenCode native entries are always included.
  • Logged the previously-silent part_removed OpenCode SDK stream event to the debug channel, completing 100% SDK stream event coverage in logs.
  • OpenCode managed server is now always started with --log-level DEBUG, writing native logs at full verbosity to the OpenCode log directory so they are always available in the DEBUG tab. Use npm run dev --opencode-logs=all to additionally print them to the terminal. The --opencode-logs=all flag adds --print-logs to the OpenCode serve args.

Fixed

  • Fixed execution-setup and final-test attempt counters resetting to 1 after an app restart; both phases now resume from the correct attempt number derived from persisted retry notes, so the maxIterations guard is honoured across restarts.
  • Fixed bead iteration countdown timer showing 00:00 on iteration 2+ beads; the timer now anchors to updatedAt (updated at the start of each iteration session) instead of startedAt (frozen at the first iteration), so the remaining time is accurate across all iterations.
  • Fixed blocked CODING provider interruptions showing a live bead countdown while the ticket was paused; the header now hides the timer outside live CODING, and the error panel shows that the preserved session will resume with a fresh bead timer when Continue is available.
  • Repaired opt-in structured YAML lists when a model emits an existing bead/PRD id or relevant-file path as a bare sequence item followed by object fields, with dynamic parser warnings that name the affected parent list, line, scalar value, and primary key.
  • Hardened the WSL LAN sharing one-liner so it listens on detected Windows LAN addresses, clears stale wildcard 0.0.0.0 portproxy entries, starts the Windows IP Helper service, and forwards through Windows localhost into WSL instead of depending on a fragile current WSL NAT address.
  • Let the ticket navigator's auto-expanded Errors section be collapsed and reopened by the user while preserving auto-open behavior for newly active or selected errors.
  • Added guarded full-page recovery reloads after sustained backend reconnecting, live-update reconnecting, or post-initial ticket loading banners clear, with a 10-second session cooldown, a five-second minimum visible warning duration, and two 1.5-second backend health confirmation probes to avoid reload loops and transient false reconnect banners.
  • Enriched generic Provider returned error OpenCode failures by correlating the session with local OpenCode logs, surfacing sanitized HTTP/provider details while excluding prompts, request bodies, headers, credentials, cookies, and URL query strings.
  • Fixed Continue and owned-session reconnect checks to verify preserved OpenCode sessions by exact session ID instead of relying on session-list membership, and surfaced rejected workflow actions inline in the blocked-error view.
  • Made HTTP 402 Payment Required OpenCode provider blocks eligible for same-session Continue after payment or workspace access is restored, while keeping permanent 4xx request, auth, permission, model-not-found, and request-size failures non-continuable.
  • Fixed CODING timeout ownership so LoopTroop-owned per-iteration deadlines consume bead attempts, capture context-wipe notes, abandon the timed-out session, reset the worktree, and retry in a fresh owned session until BEAD_RETRY_BUDGET_EXHAUSTED, while true OpenCode/provider timeouts still preserve same-session Continue when eligible.
  • Fixed Current Activity timeout detection so timeout-like strings in model/tool/debug output no longer create false Workflow timeout banners; near-timeout warnings now use structured prompt deadline metadata and only appear during the final warning window.
  • Fixed stale Current Activity near-timeout warnings so completed prompts no longer keep showing active countdowns when revisiting a previous status, and terminal timeout elapsed values stay pinned to the diagnostic event.
  • Made npm run dev print immediate and phase-level preflight progress before bootstrap dependency checks, daily dependency/audit/OpenCode maintenance, stale-process cleanup, and port checks, with a final completion duration.
  • Updated ProfileSetup documentation-link test coverage for the OpenCode Max Steps configuration link and normalized docs/roadmap.md to LF-only line endings so release validation passes consistently.
Source: README.md, updated 2026-05-26