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.2
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-05-22 14.3 kB
Release v0.2.2 source code.tar.gz 2026-05-22 3.6 MB
Release v0.2.2 source code.zip 2026-05-22 4.0 MB
Totals: 3 Items   7.6 MB 0

Summary

  • Extracted magic numbers into named constants, consolidated a repeated Tailwind label class, and standardised boolean variable naming across the codebase.
  • Hardened workflow approval, audit, bead-finalization, archived-version, and cleanup boundaries with content hashes and visible cleanup warnings.
  • Documented the ticket-handler route split from a single file into focused route modules without changing workflow behavior.
  • Added profile-controlled OpenCode retry budgets so transient provider stalls block early with diagnostics and same-session Continue across OpenCode-backed phases.
  • Preserved underlying OpenCode provider/session causes on coding bead failures so parser or retry-budget wrappers no longer hide usage-limit style blockers.
  • Extended the ticket disk space card in the details view to allow expanding any category (Source Code, Phase Artifacts, or Execution Logs) to see which specific folders/files are occupying space, rendered in a beautiful HSL dark-mode monochrome interactive accordion.
  • Added a beautiful button and card to calculate and display ticket disk space usage with granular breakdown by logs, artifacts, and source code.
  • Made manual Retry preserve versioned logs and artifacts for every non-implementation failed status while keeping CODING bead-scoped.
  • Made documentation screenshots collapsible and clickable, with expanded bead error screenshots on the docs home page.
  • Consolidated changelog maintenance into the docs changelog while keeping a root pointer for discoverability.
  • Prevented first-interaction crashes when a lazy UI module fails to load during dev startup.
  • Made versioned coverage reports keep version transitions in order while defaulting to the latest check and suppressing stale open-gap lists.
  • Clarified the npm run dev startup summary with an explicit package release-age gate note.
  • Added a beautiful Changelog documentation page positioned above the Roadmap.
  • Made Full Answers parsing more resilient to malformed YAML formatting while preserving approved interview metadata.
  • Kept the left-panel Errors header compact while showing real bead counters in expanded coding-error labels.
  • Made OpenCode runtime setup permissive and self-healing while keeping missing execution tooling as a hard setup blocker.
  • Made OpenCode session startup more resilient with bounded app-wide retries and health diagnostics.
  • Added an opt-in npm run dev --opencode-logs=all mode for full managed OpenCode DEBUG logs in the terminal.
  • Audited and corrected all user-facing status descriptions, Details content, and documentation for accuracy and consistency.
  • Added a high-priority roadmap item for a Context Slimming Pipeline that audits per-phase input/output fields, strips unused data from canonical context while preserving it in companion artifacts, and classifies every field by downstream consumption.
  • Applied targeted reliability and safety fixes from an external audit: atomic write durability, git timeout hardening, ticket cancel race, interview null guard, and bead schema validation.

Detailed Changes

Changed

  • Extracted 9 magic numbers (GIT_CHECK_DEBOUNCE_MS, COUNTDOWN_TICK_MS, DROPDOWN_Z_INDEX, etc.) into named constants in src/lib/constants.ts.
  • Consolidated the repeated text-[10px] font-semibold uppercase tracking-[0.18em] text-muted-foreground Tailwind pattern (21 occurrences) into a .section-label @apply class in src/index.css.
  • Standardised all boolean state and derived variables across 21 components to use is/has/should prefixes (e.g. openisOpen, showHistoryisHistoryOpen, showModelTabshasModelTabs).

Added

  • Added SHA-256 content identity to approval snapshots/receipts and artifact read responses, required expectedContentSha256 approval payloads with stale-approval 409 responses, durable approval receipts for all approval gates, and append-only user_edit_receipt:* artifacts for manual artifact edits.
  • Added cleanup.status to cleanup reports and a top-level ticket cleanup summary so completed tickets can surface non-blocking cleanup warnings.
  • Added profile settings for OpenCode Retry Limit and OpenCode Retry Grace Window, exposed through the API, Configuration UI, and documentation with defaults of 10 retry events and 60 seconds.
  • Added recursive nested file and folder expansion directly in the ticket disk space details view, incorporating standard monochrome folder/file icons, exact size formatting, and custom collapsible sub-accordions with smooth transitions.
  • Added full recursive top-level and category child listings with sizes in the Hono ticket size API endpoint (/tickets/:id/size).
  • Added a ticket disk space calculation card under the Artifacts Location in details view with a premium themed button, interactive hover effects, live loading state, error alert banner, and on-demand recursive disk size computation broken down by Source Code, Phase Artifacts, and Execution Logs.
  • Added a GET /tickets/:id/size route to Hono backend for recursively measuring ticket worktree folders using safe non-symlink-following lstat concurrency, computing precise space breakdowns for logs, artifacts, and source files.
  • Added a robust integration test server/routes/__tests__/tickets.size.test.ts verifying exact and recursive file size aggregation and granular category splits.
  • Added two bead error screenshots to the docs home page and a docs-wide image lightbox so screenshots can be opened nearly full screen with a top-right close button.
  • Added a dedicated Changelog documentation page (docs/changelog.md) detailing LoopTroop's official release history starting from release 0.1.0.
  • Integrated /changelog route into both VitePress sidebar and top navbar navigation.
  • Added npm run dev --opencode-logs=all to print full managed OpenCode DEBUG logs with --print-logs --log-level DEBUG, plus LOOPTROOP_OPENCODE_LOGS=all for direct watcher launches.

Changed

  • Clarified that the workspace phase header's (details) button opens the canonical workflow metadata from shared/workflowMeta.ts, and aligned the state-machine and ticket-flow wording for approval and execution-setup statuses with the current UI copy.
  • Bead completion now means OpenCode success plus local finalization success: local commits are required when code changes exist, true no-op completions are allowed, push failures are warnings, and fatal finalization failures route through BEAD_FINALIZATION_FAILED instead of broadcasting bead_complete.
  • Archived phase-attempt artifacts are explicitly read-only, while current approval-edit routes continue to write only the active version.
  • Added "Context Slimming Pipeline" as a high-priority roadmap item in docs/roadmap.md for per-phase input/output field auditing, deterministic strip-and-store, and retry-path field classification.
  • Updated architecture and ticket-flow documentation to reference the focused server/routes/ticketHandlers/ module directory for user-triggered ticket actions.
  • Clarified the Configuration UI copy for OpenCode Provider Recovery so it explicitly mentions rate-limit, usage-limit, overload, timeout, and network retry events across phases.
  • Manual Retry from BLOCKED_ERROR now archives and creates fresh phase attempts for every non-implementation status, including runtime setup and post-implementation phases, while CODING keeps its existing failed-bead reset and retry history.
  • Wrapped the docs home-page screenshots in collapsed-by-default details sections so only each screenshot title is visible until expanded.
  • Made docs/changelog.md the canonical full changelog, including unreleased changes, and replaced the root CHANGELOG.md with a discoverability pointer.
  • npm run dev now prints a short multi-line package gate note in the startup summary, making it clearer that direct npm dependency updates and audit fixes wait until package releases are 7 days old while OpenCode updates immediately.
  • Updated @opencode-ai/sdk from 1.15.5 to 1.15.6.
  • npm run dev now starts managed OpenCode servers with OPENCODE_PERMISSION='"allow"' by default, while LOOPTROOP_OPENCODE_PERMISSION_MODE=inherit lets external permission policy pass through unchanged.
  • Workspace setup prompts now treat missing required command launchers as setup gaps, attempt user-space provisioning under .ticket/runtime/execution-setup/tool-cache, record reusable env.sh/run wrapper artifacts, and tell coding/final-test agents to run setup-dependent commands through the wrapper.
  • Execution setup retries now preserve the ticket-owned tool-cache while clearing stale profile and wrapper state, and stop early when the same tooling blocker repeats after provisioning fails.
  • Updated BLOCKED_ERROR status description to include the Continue action alongside Retry, with accurate detail on eligibility and session behavior; aligned DRAFTING_PRD description to note that structured retries are exhausted before a PRD draft is skipped.
  • Replaced all opaque internal prompt IDs (PROM4, PROM_CODING, PROM51, PROM25) with plain English descriptions in shared/workflowMeta.ts, docs/execution-loop.md, docs/ticket-flow.md, and docs/configuration.md; replaced internal constant names (BEAD_STATUS_SCHEMA_REMINDER, CONTINUE_CODING_SCHEMA_REMINDER, shouldUseStructuredRetry, buildContinuationPrompt, perIterationTimeoutMs) with conceptual descriptions in the CODING Details steps.
  • Removed stale COMPLETED note that incorrectly implied the candidate branch had not yet been merged (the merge decision is finalized in WAITING_PR_REVIEW before COMPLETED is reached).
  • Synced all eight out-of-date rows in the docs/state-machine.md Phase Descriptions table with their canonical description fields in shared/workflowMeta.ts.
  • Refined PRD coverage status description to clarify in-phase revision loop instead of implying cross-state transitions.
  • Clarified PRE_FLIGHT_CHECK status description to note the minimal AI connectivity probe instead of broadly stating "No AI context is passed."
  • Annotated dead GAPS_FOUND state machine transitions for PRD and beads coverage phases as defensive-safety artifacts since coverage loops internally.
  • Added JSDoc to all exported types, interfaces, and functions across shared/workflowMeta.ts, src/lib/workflowMeta.ts, WorkspacePhaseSummary.tsx, ticketMachine.ts, and ticketQueries.ts.
  • Documented the dynamic continue action injection on getAvailableWorkflowActions with a reference to addContinueActionWhenAvailable.
  • Annotated the unused votes context key as reserved and added a note to CONTEXT_KEY_LABELS.

Fixed

  • OpenCode session.status retry events for rate limits, usage limits, overload/capacity, temporary unavailability, timeouts, and network/socket failures now block through BLOCKED_ERROR after the configured budget, preserving provider diagnostics and active sessions for Continue when eligible.
  • Coding completion-marker and bead retry-budget failures now retain the latest underlying OpenCode provider/session diagnostic, such as usage-limit retries, in the blocked error details.
  • CODING now routes continuable OpenCode/provider retry exhaustion through the normal blocked-error path instead of converting it into bead retry exhaustion, while ordinary implementation failures keep the existing bead reset/retry behavior.
  • Active bead countdowns now reset their start timestamp when a new coding iteration/session begins, preventing the UI from sticking at 00:00/20:00 while later iterations continue.
  • Left-panel blocked-error headers now stop appending active bead identifiers after the count and Active badge, preventing long bead names from overflowing the navigator while preserving details in the expanded error view.
  • Coding error occurrence labels now use the ticket's runtime bead counters, so left-panel rows and blocked-error headers show labels such as Implementing (Bead 2/5) instead of the generic Bead ?/? fallback.
  • Lazy-loaded Configuration, ticket creation, project, and workspace views now automatically refresh once after recoverable dynamic-import/chunk-load failures, avoiding the root crash screen caused by transient first-load module fetch races.
  • Coverage reports now show the latest open-gap status by default after ordered version transitions, suppress stale open-gap lists when no gaps remain, and switch gap headings/lists to the selected v1 > v2 or v2 > v3 transition.
  • Fixed date rendering on the Changelog documentation page by formatting version dates as clean, standard parentheses text, avoiding raw unparsed HTML badge tags.
  • Full Answers normalization now restores canonical follow_up_rounds when a model emits malformed round metadata and repairs common multiline free_text YAML formatting without changing answer text.
  • Bead commits now exclude execution setup temp roots, reusable setup artifact roots, and legacy .cache/project-tooling/** files so temporary toolchains cannot be recorded as implementation work.
  • OpenCode session creation now retries the initial attempt up to three times with bounded backoff, collecting lightweight health diagnostics after failures while preserving cancellation and timeout behavior.

Security & Reliability

  • Ticket cancel now awaits active OpenCode session abort before executing destructive cleanup, eliminating the race where cleanup could run while sessions were still writing.
  • Interview batch async path now explicitly returns 404 when no session artifact is found, replacing the non-null assertion that could crash at runtime.
  • Bead plan PUT endpoint now validates each bead against a required-field schema (id, title, status, priority, dependencies) and rejects duplicate IDs, preventing malformed execution plans from being written.
  • Git operations now include a 30-second timeout and GIT_TERMINAL_PROMPT=0/GIT_ASKPASS=echo environment guards so locked repositories, credential prompts, or network filesystems cannot hang the server process; push operations use a 120-second timeout.
  • Atomic write helper now cleans up the .tmp file in all failure paths and fsyncs the parent directory after rename for crash-durable artifact persistence.

Source: README.md, updated 2026-05-22