# Changelog 📝

## 0.70.1

- Fix coding-agent discovery so `imdone init` and `imdone clone` no longer fail when `codex` or `claude` is missing or not resolvable on the local PATH, letting setup continue

## 0.70.0

- Make GitHub PAT setup much easier to complete correctly: `imdone init` now gives direct classic and fine-grained token creation links, names the exact permissions imdone needs, calls out repository-selection requirements more clearly, includes PR permission guidance when provider sync needs it, and keeps the fine-grained link short enough to use more reliably in a terminal
- Let GitHub fine-grained PAT users actually sync real work instead of getting stuck on GraphQL-only behavior: repo-scoped refresh and pull paths now fall back to supported REST issue endpoints when GraphQL search returns nothing or is not accessible to the token
- Fix PR-backed GitHub attachment sync so uploads, attachment content updates, attachment link rewrites, and follow-up `imdone merge` runs all resolve to the right issue and publish the final post-merge working-tree content instead of silently leaving old attachment files or local `./attachments/...` links on GitHub
- Make `imdone push` easier to trust and scan by replacing the old disjointed per-provider output bursts with a single report-oriented summary, and align JSON output to the same issue-centered result model so automation and humans see the same grouped outcome

## 0.69.2

- Stop interrupting successful credential-required commands with a pre-run 1Password setup prompt, and instead show a non-blocking follow-up tip to run `imdone init --1password` while keeping the in-flow recommendation in `imdone init` and `imdone clone`

## 0.69.1

- Let the package expose both `imdone` and `imdone-cli` bins through explicit `./dist/...` mappings, so `npx` can launch the CLI reliably from the published package while teams keep the existing command path intact

## 0.69.0

- Let GitHub Issues setup accept Git-supported SSH repository remotes across `imdone init`, git-origin defaults, and GitHub URL handling, so SSH-first users can use forms like `git@github.com:owner/repo.git`, `ssh://git@github.com/owner/repo.git`, and `git+ssh://git@github.com/owner/repo.git` without falling back to HTTP assumptions, while invalid input now shows concrete accepted examples
- Let `imdone clone` retry the other acceptable Git remote formats for the same GitHub repo when the stored `.imdone-cli.yml` remote format fails first, so teams can recover from environment-specific HTTPS or SSH clone failures without manually rewriting the saved remote before onboarding

## 0.68.2

- Move the `imdone-cli` upgrade prompt to after the command completes, so users can finish the work they asked for first and then decide whether to upgrade instead of getting interrupted before pull, push, init, clone, or other real work even starts

## 0.68.1

- Make `imdone init` and post-clone setup feel safer for 1Password users: once `op` is detected and the user opts in, `imdone` now chooses the right vault, keeps sourced `op://...` defaults without copying them into the project unless the user explicitly overrides them, and avoids forcing duplicate local secret entry
- Let users reuse an existing 1Password item and field for Jira or GitHub credentials before falling back to typing a new value, so setup can point at secrets they already trust instead of making them recreate tokens or guess raw `op://...` references
- Make bundled HDD progress notes use full ISO date-time timestamps instead of date-only stamps, so plan pivots and implementation notes are easier to order and resume accurately within the same day

## 0.68.0

- Prompt `imdone hdd` users to confirm or switch the target story when no issue key is passed, with the saved active story preselected and a clean cancel path, so engineers can avoid launching the wrong HDD session without slowing down the common case
- Let `imdone` migrate Jira and GitHub provider credentials directly into 1Password with `imdone init --1password`, then resolve `op://...` references automatically during normal CLI runs so teams can stop depending on the old wrapper script path
- Prompt users toward the direct 1Password path when `op` is available but provider secrets are still stored plainly in `.env`, while allowing a one-time continue path for normal commands and requiring migration before config-rewriting update flows
- Stop copying the legacy `setup-1password-token.sh` and `imdone-1p` helper artifacts into refreshed backlogs, so bundled docs and project files point at the direct `op` integration instead of the retired wrapper workflow
- Replace the overlapping bundled `imdone` command skills with one repo-local `imdone` skill, so agents have one clear entry point for CLI-backed backlog work instead of choosing among competing skill prompts
- Make structured CLI output more automation-friendly by keeping JSON and YAML responses clean on `pull`, `push`, `add`, `list`, and `move`, adding `--format` support to `push`, and letting `test` verify every configured provider instead of assuming Jira only

## 0.67.1

- Fix GitHub-only `imdone pull` runs so newly discovered issues sync into the backlog reliably instead of failing before local issue folders are created, letting teams pull a fresh repo or a new slice of GitHub work without manual recovery

## 0.67.0

- Archive provider-backed work automatically when it is no longer active, including Jira issues completed through `imdone push`, GitHub issues or pull requests that come back done on refresh, and local provider-backed issues that disappear after a confirmed refresh, so `current-sprint/` stays aligned with what is actually still in progress
- Treat merged GitHub pull requests as completed even when they still carry a stale workflow label like `in-progress`, so merged PRs move to `DONE` and archive instead of lingering in the active backlog
- Let `imdone pull --gql "<github issue query>"` temporarily override the saved GitHub query for one pull run, so engineers can bring in a targeted GitHub issue or pull-request slice without changing the project's default sync scope
- Let one `imdone pull` run take both `--jql` and `--gql`, so mixed Jira/GitHub projects can temporarily override each provider independently without editing `.imdone/config.yml`
- Speed up mixed Jira and GitHub pulls by running one shared git refresh and commit envelope around the full pull, so syncing both providers does less repeated work and produces one cleaner pull commit
- Fix pull output so GitHub issues show up correctly alongside Jira issues, including in structured pull output where GitHub issue keys and timestamps were previously missing

## 0.66.3

- Fix `imdone hdd` so it stops the terminal spinner before launching Codex or Claude, preventing the HDD session handoff from keeping the CLI spinner running over the active AI agent session

## 0.66.2

- Fix the post-`pull` update notice so `imdone` stops its spinner before asking whether to run `imdone update`, preventing the CLI from appearing hung after a successful pull when bundled backlog files like `README.md` or `CHANGELOG.md` need refreshing

## 0.66.1

- Change `imdone show <issue-key>` to display local shared context from the repo, including issue and comments paths, attachment files, tags, and metadata, so engineers and AI agents can inspect one issue without leaving the terminal
- Prompt users to run `imdone update` after a top-level `imdone` command completes, so bundled backlog updates do not block the command they were trying to run first
- Keep long-running CLI commands visibly active by showing progress output and automatically restarting the spinner after info and warning messages, so `imdone` no longer looks hung when it is still working

## 0.66.0

- Launch Codex or Claude directly into the current HDD story with `imdone hdd [issueKey]`, so engineers can start an HDD-oriented coding session from the backlog without rebuilding the same prompt by hand
- Save the selected coding agent and active HDD story in `backlog/.imdone/hdd-skill.yml`, so later `imdone hdd` runs reopen the same working context with one command
- Add `imdone hdd --setup` to force reselecting the story key and coding agent when the saved HDD launch context needs to change
- Fix templated `imdone add` attachment creation across Jira and GitHub by waiting for the new issue to become provider-visible, pulling it through the normal sync path, and recognizing the local card reliably before template files are created
- Fix `imdone log` crashing on Jira changelog entries with missing author fields by falling back to another available author value and otherwise leaving the author blank, so teams can still inspect issue history when Jira changelog data is incomplete

## 0.65.12

- Fix `imdone pull` hanging indefinitely when processing issues or comments with problematic text patterns by moving parsing to worker threads that can be forcibly terminated after a timeout, so content that previously caused infinite regex loops now completes with placeholder content instead of blocking the entire sync
- Add SafeJiraParser with 5-second timeout protection per issue/comment, preventing catastrophic backtracking in regex patterns from hanging the CLI while still processing valid content successfully

## 0.65.7

- Fix `imdone pull` hanging on Jira issues with text containing many contractions (doesn't, didn't, hasn't) by replacing catastrophic-backtracking lazy quantifiers in the italicUnderscores regex with length-limited greedy matching, so changelog descriptions with repeated apostrophes parse in milliseconds instead of hanging indefinitely

## 0.65.5

- Add version logging to `imdone-debug` startup output, making it easier to identify CLI version in debug logs and troubleshoot version-specific issues
- Wrap all regex operations in JiraParser with timeout detection and diagnostic logging to identify potentially hung regex patterns during issue parsing
- Make `imdone-1p` wrapper automatically run `imdone-debug` when `--debug` flag is passed, so 1Password-backed projects get full debug logging without switching commands

## 0.65.1

- Fix `imdone-1p` so it resolves 1Password `op://` secrets into a temporary `.env` before launching `imdone`, letting teams run provider-sync commands successfully from a 1Password-managed backlog without manually exporting credentials first

## 0.65.0

- Copy the optional 1Password setup script and wrapper into each backlog during `imdone init` and `imdone update`, so teams can move Jira and GitHub tokens into 1Password and run imdone with resolved project-local secrets without keeping raw tokens in `.env`.
- Refresh bundled backlog files in place instead of creating `.bak` copies, so `imdone init` and `imdone update` no longer leave backup clutter behind for generated project docs and helper scripts.
- Prompt for `imdone update` when the installed CLI has newer bundled backlog files than the current project, so local docs, helper scripts, skills, and templates can refresh even when `origin/main` has no relevant changes.

## 0.64.1

- Let expired paid CLI licenses refresh automatically from imdone.io and replace the home license in `~/.imdone/.env`, so subscribed users can keep running provider-sync commands without manually pasting a new token into each backlog
- When a paid CLI license cannot be refreshed, explain the reason, open imdone.io in the user's default browser, and continue the command after activation so renewal and subscription recovery happen in one flow from the terminal
- Make `imdone init` respect an existing home license by leaving `IMDONE_LICENSE` out of the backlog `.env`, keeping license state machine-wide while project credentials stay project-local
- Make GitHub Issues setup faster by defaulting the GitHub URL to the repo's remote origin, deriving owner and repo from the entered URL, and skipping redundant owner/repo prompts when the URL already identifies the repository
- Prefer the GitHub repository URL entered during `imdone init` over the remote origin defaults, so the generated `.imdone/config.yml` points at the issue tracker the user chose and public GitHub URLs do not get written to `GITHUB_URL`

## 0.64.0

- Fix `imdone pull` hanging indefinitely when pulling Jira issues that contain code blocks with nested braces or unusual formatting in comments, so teams can now sync all their issues without having to manually clean up comment content in Jira first
- Make GitHub attachments branch-backed end to end by reading the current attachment set from the `imdone-attachments` branch, skipping machine-readable attachment ledger comments on push, and deleting old stable branch paths when attachments are renamed or deleted so stale GitHub files do not reappear on pull
- Remove the noisy npm `gitignore-fallback` warning during global installs by cleaning up the `monquery` dependency packaging path used through `imdone-core`

## 0.63.4

- Remove the deprecated `node-domexception` install warning by relying on the platform-native fetch support provided by modern Node.js through `imdone-core`.
- Fix GitHub attachment comment-ledger loading for stable attachment paths by preserving SHA values from ledger comments, so `imdone pull` refreshes changed attachment content even when the GitHub attachment URL stays the same.

## 0.63.3

- Fix GitHub stable-path attachment downloads so `imdone pull` detects content changes using SHA comparison instead of only checking URL and size, which was causing updated GitHub attachment content to stay stale locally after a successful push
- Store GitHub attachments using clean stable paths like `_imdone-attachments/{issue}/{filename}` without timestamped suffixes, so attachment URLs stay readable and GitHub file history tracks content changes through commits instead of creating new versioned files on every update

## 0.63.2

- Use stable GitHub attachment storage paths with SHA-based optimistic locking, so sibling links keep pointing at the same published filename while concurrent attachment edits are protected by GitHub's content SHA check
- Fix same-issue attachment links inside text attachments so GitHub rewrite and rename flows treat both `./file-name.ext` and bare `file-name.ext` as valid sibling attachment paths

## 0.63.1

- Give anonymous CLI users 50 provider syncs to try imdone, then 10 provider syncs per month forever on the same device without creating an account
- Show a clear Node.js upgrade message before initialization when the installed runtime is too old, instead of failing later with an internal path error
- Make the bundled HDD skill rely on Claude and Codex's built-in edit diffs, so artifact review messages list changed files and summarize the revision instead of replaying manual diffs in chat
- Copy `HDD-SKILL-CHEAT-SHEET.md` into the backlog during `imdone init` and `imdone update`, so teams get the latest bundled HDD quick-reference doc alongside the refreshed skills and templates
- Keep bundled HDD skill Mermaid diagrams easier to read in both light and dark mode by steering story diagrams toward theme-safe styling instead of hard-coded colors that disappear in one theme

## 0.63.0

- Let engineers list valid next statuses for a single issue with `imdone move --list-statuses` before attempting a workflow change, including script-friendly JSON/YAML/CSV output they can reuse in follow-up automation
- Keep `imdone move --list-transitions` as an equivalent alias for teams that think in Jira workflow terms instead of status names
- Show Jira users the exact issue-specific outgoing transitions available right now, while GitHub users see the workflow statuses already mapped in `.imdone/config.yml`, including the current mapped entry for visibility
- Make `imdone clone` preserve the provider already configured in the cloned `.imdone-cli.yml`, then prompt only for missing post-clone setup values instead of incorrectly falling back to Jira prompts
- Let GitHub-backed clones finish setup in one pass by prompting after clone for any missing GitHub owner, repo, and token values while leaving `gql` in the cloned config as the source of truth

## 0.62.0

- Help engineers working in Jira projects with custom workflows keep the exact workflow status in local issue files without polluting provider-side metadata, and prefer exact `statuses[*].jira` matches against that workflow name before falling back to the Jira status category
- Let engineers using GitHub express workflow state with labels like `code-review`, while keeping labels available as tags and preserving the existing open/closed fallback
- Keep GitHub workflow labels visible in local issue metadata by setting local `status` to the configured mapped label/tag on pull when that label/tag is present on the provider issue
- Keep Jira and GitHub workflow state aligned with the imdone kanban board by having `imdone push` update the provider status when an engineer moves a provider-backed issue to a different mapped local imdone list, improving imdone Desktop workflows where list changes happen visually
- Let `imdone move` for GitHub prompt from configured `statuses[*].github` mappings, so custom workflow labels use the same status-label sync path as local list moves
- Show every changelog section newer than the user's previously installed `imdone-cli` version after a prompt-driven upgrade, so skipped versions are visible before rerunning the original command

## 0.61.2

- Fix bundled skill, template, and doc refresh during `imdone update` and `imdone init` when `imdone-cli` is run through an `npm link` shim, so linked installs resolve bundled files from the real package location instead of incorrectly skipping every bundled item as missing
- Show concise terminal progress for each bundled item refreshed during `imdone update` and `imdone init`, so teams can see which docs, skills, and templates were copied and which ones were skipped

## 0.61.1

- Fix `imdone update` so bundled Codex and Claude skills, docs, and templates are refreshed reliably even when the backlog has no git `origin` remote, instead of silently skipping those bundled files during local-only updates

## 0.61.0

- Add `imdone add --list-sprints` so Jira users can print active sprint names and IDs before creating an issue with `--sprint-id`, instead of hunting for sprint IDs in Jira first
- Add `imdone add --list-issue-types` so Jira users can print valid issue types before scripting `--issue-type`, instead of guessing the exact provider value
- Update the bundled `imdone-add` skill and wrapper so local issue-creation workflows can use the new sprint and issue-type discovery modes instead of falling back to hand-built `imdone add` commands
- Keep GitHub attachment-to-attachment links working more reliably by rewriting same-issue attachment references to the current GitHub attachment URL, preserving stable URLs on content-only updates, and adding `imdone push --rewrite-attachment-links` to explicitly migrate and republish touched attachment bundles when needed
- Convert markdown repo file links that point out of the backlog and into the parent source repo into provider-friendly web links on push, then restore them back to local relative links on pull, across both Jira and GitHub issue bodies and text attachments.
- Add `imdone push --rewrite-repo-links` so touched issues can be explicitly republished when repo-link mapping needs to be refreshed without waiting for the issue markdown file itself to change.

## 0.60.0

- Make bundled HDD implementation plans explicitly use red/green/refactor so story execution stays test-first, easier to review, and less likely to skip the cleanup step after the first passing change
- Make `imdone status` work offline without leaking raw DNS errors, and show a friendly actionable connectivity message from network-required commands like `imdone pull` and `imdone push` when the internet is unavailable
- Fix GitHub attachment-to-attachment links inside uploaded attachment content so same-issue markdown links resolve to the current prefixed attachment filename on GitHub, including when an existing attachment is updated, while still leaving markdown image syntax `![]()` unchanged

## 0.59.0

- Add `tags` field to `imdone ls` JSON and YAML output so migration scripts and automation tools can read issue tags without parsing individual issue files
- Let `imdone-cli` look for `IMDONE_LICENSE` in `~/.imdone/.env` before the backlog `.env`, automatically migrate that license into a machine-level home config on first use, and keep unrelated project or Jira settings out of the new home file

## 0.58.2

- Fix prompt-driven `imdone-cli` upgrades so the changelog section is visibly shown after install by rendering the success headline separately from the longer release-notes body and rerun instruction

## 0.58.1

- Make bundled HDD review steps easier to inspect by applying the proposed artifact change first, listing the changed file paths for one-click editor navigation, and showing the normal terminal diff instead of pasting a rewritten draft back into chat

## 0.58.0

- Prompt HDD users to push after writing the first real plan or adding `Progress notes` in `attachments/plan.md` when phase-based sync prompting is enabled, so shared-context updates do not sit locally by accident
- Show the exact release notes for the version you just installed after a prompt-driven `imdone-cli` upgrade, and fall back to a support message instead of showing the wrong changelog section when no exact entry exists
- Make the bundled HDD workflow easier to resume for humans and AI by treating `attachments/plan.md` as the live source of truth for pivots and corrections, with `Progress notes` that capture both what changed and why
- Make bundled HDD story setup flow in a more decision-friendly order by defining the hypothesis before the vertical slice, then locking acceptance criteria before moving into assumptions and demo planning
- Keep HDD demos trustworthy as stories move into implementation by treating `attachments/demo.md` as one evolving proof artifact that gets revised to match the real built behavior instead of splitting into a second demo-planning step
- Make active HDD sessions easier to follow by showing a visible story indicator and an explicit progress-notes update message in user-facing guidance, so teams can tell which story is in scope and when resumability context changed
- Make HDD refinement prompts easier to read in terminal and editor workflows by dropping blockquote-style draft formatting from the bundled interaction guidance
- Show a success-level confirmation after an interactive prompt-driven upgrade completes, so the upgrade outcome reads like a completed action instead of a neutral status line
- Bundle only stock templates from the backlog source of truth, which keeps the packaged CLI templates stable and avoids shipping local project-specific templates by accident

## 0.57.0

- Let `imdone update` keep working in configured projects that have no git `origin` remote by skipping branch rebuild, refreshing bundled imdone files locally, and continuing into the normal provider pull
- Make the bundled HDD workflow easier to resume after interruptions by keeping outcome-defining story sections like Acceptance Criteria, Vertical Slice, Hypothesis, and Assumptions above the workflow checklist instead of burying that context inside checkbox items
- Make HDD closeout artifacts easier for humans and AI to recover by linking Measure Results and Retrospect directly to shared results notes in `success-metrics.md`
- Improve HDD handoff quality during implementation by treating `attachments/plan.md` as the live source of truth for pivots, including separate progress notes for what changed and implementation notes for why it changed
- Clarify when to create focused supporting attachments during HDD work so specialized test, rollout, API, review, or diagram context is preserved only when it materially improves resumability

## 0.56.1

- Fix attachment ignored-list replay so a later comment that adds an attachment back removes the stale ignored entry instead of leaving the live file blocked from pull

## 0.56.0

- Fix GitHub templated `imdone add` so new issues are created first, then pulled locally and templated reliably instead of failing to find the just-created card
- Wait for newly created GitHub issues to become available before the follow-up pull, and force the immediate post-create pull to include the new issue number so GitHub search indexing lag does not break template application
- Update the bundled `imdone-add` skill to use YAML-backed project defaults and keep its wrapper/config guidance aligned between Codex and Claude bundles
- Tighten the bundled HDD skill so Phase 2 planning and implementation explicitly prefer small DRY refactors in touched flows and use code-as-documentation defaults

## 0.55.0

- Prompt interactive users to upgrade immediately when a newer `imdone-cli` npm version is available, run the real global npm upgrade on confirmation, and tell them to rerun their original command after success
- Fall back cleanly when the automatic npm upgrade fails by showing the exact manual `npm i -g imdone-cli` command instead of leaving the user without a next step
- Let teams choose between phase-based push prompts and timed push reminders, with configurable intervals that match how often they want Jira kept up to date during HDD sessions
- Keep HDD workflow push behavior consistent across sessions by saving prompted setup to `.imdone/hdd-skill.yml`, so users do not have to re-answer the same sync-preference questions every time
- Make HDD closeout clearer by rendering not-applicable Definition of Done items with visible strike-through instead of leaving them looking unfinished
- Slim down the bundled HDD skill so it stays easier to load, easier to follow, and more consistent during longer sessions

## 0.54.0

- See issue lifecycle history locally in a human-readable `changelog.yml`, including started and completed timestamps that make cycle-time inputs visible without reopening Jira
- Generate archived cycle-time reports from local issue history with the bundled `cycle-time-report` skill, which produces a markdown report, SVG trend chart, and PDF output
- Keep Claude and Codex skill bundles aligned more reliably so the backlog-local AI workflows stay consistent across the tools teams actually use

## 0.53.1

- Reworked the bundled `hypothesis-driven-development` skill so it trains engineers toward product-engineering behavior: explicit user-valued outcomes, named product risk, thin slices, measurable evidence, and direct user-feedback paths
- Add story-level HDD feedback artifacts plus evaluator and bundling scripts so teams can capture workflow friction, handoff-risk reduction, and author feedback across HDD sessions
- Tighten the HDD guidance around outcome-first refinement, live plan updates, external-evidence gates, and reviewable shared context for implementation handoff

## 0.53.0

- Get prompted to run `imdone update` after successful top-level `imdone push` or `imdone pull` when `origin/main` has newer bundled imdone files, with a short summary before you decide
- Avoid false update prompts from working-branch differences by checking local `main` against `origin/main`
- Use a new bundled `imdone-template` skill in Claude Code and Codex, and get smoother HDD story setup through updated workflow guidance
- See clearer README and npm package messaging that positions imdone as a shared-context repo for AI and humans

## 0.52.0

- Fix Jira `imdone pull --jql ...` so the override is sent to Jira exactly as provided, without local key merging or provider-side wrapping
- Eliminate `Maximum call stack size exceeded` during large Jira override pulls by avoiding oversized local-card filters and matching existing cards from a bounded local provider card pool
- Change Jira pull refresh behavior to fetch already-synced local issues in bounded `key in (...)` batches instead of building one oversized combined JQL query
- Map Jira issues to TODO/DOING/DONE using `fields.status.statusCategory.name` so statuses like `Cancelled` follow their Jira status category
- Add regression coverage for raw JQL passthrough, bounded Jira refresh batching, and status-category-based Jira list mapping

## 0.51.0

- Added support for specific project shared context report
- Fixed failing `imdone clean` bug
- Cleaned up templates so they won't get changed by linter after `imdone update`

## 0.50.2

- Fix issue-directory renames so provider-side and push-side title changes converge on a single correctly named local folder instead of leaving duplicate same-key directories behind
- Preserve the kept issue directory during duplicate cleanup by only removing stale same-key siblings after the final target directory exists on disk
- Commit rename-side deleted files as part of the normal pull/push git flow so folder renames do not leave staged deletions behind in the backlog repository

## 0.50.1

- Create newly pulled done-mapped issues directly in the archive folder when archive is configured, for both Jira and GitHub
- Keep active issues creating under `current-sprint/` and preserve the fallback behavior when no archive folder is configured
- Avoid leaving stale `current-sprint/<issue>` directories behind for newly pulled done issues

## 0.50.0

- Add a Jira-only `--jql` override to `imdone pull` so one run can fetch a broader issue set for backlog refinement without changing the saved project query
- In mixed Jira/GitHub projects, apply the override only to the Jira pull and leave GitHub on its configured default query
- Keep the override temporary: a later plain `imdone pull` still uses the configured default Jira query
- Add focused pull tests covering default query behavior, one-run override behavior, and fallback to the saved query after the override run

## 0.49.0

- Jira now discovers the `Flagged` field, falls back to `Blocked` when needed, and persists that provider signal as local `blocked` metadata during `imdone pull`
- The shared-context-report now surfaces blocked work explicitly and adds deterministic unblock advice based on blocked metadata plus local story signals for communication gaps, mock-to-real integration, feature flags, or a neutral fallback
- Updated bundled skill and package documentation to describe blocked-work reporting and unblock guidance more clearly

## 0.48.0

- Added backlog-refinement skill
- Added diagramming in design phase of the hypothesis-driven-development skill

## 0.47.0

### GitHub Attachment Branch Storage

- Replace GitHub release-backed attachment storage with a dedicated `imdone-attachments` branch
- Store GitHub attachments under `_imdone-attachments/{issueNumber}/...` instead of creating or updating releases that can interfere with product release automation
- Keep the existing local `attachments/` workflow and comment-ledger model while shifting GitHub attachment URLs to branch-backed paths

### GitHub Attachment Pull Compatibility

- Fix GitHub attachment downloads to request contents from the `imdone-attachments` branch explicitly during `imdone pull`
- Support both current branch-backed attachment paths under `_imdone-attachments/...` and legacy raw branch URLs when reconstructing GitHub attachment download requests
- Tighten dual-provider routing so GitHub attachment flows do not leak into Jira-owned issues during push and pull

### GitHub Attachment Workflow

- Keep unique version-prefixed stored filenames for GitHub attachments so concurrent pushes do not overwrite each other
- Preserve old stored attachment versions while using the issue comment ledger to determine the current live attachment for pull and local link restoration

## 0.46.1

- Fix Jira attachment links in issue bodies so local attachment markdown links are converted reliably during push and restored correctly during pull
- Ensure the main branch is up to date and clean before runn imdone update
- Fail gracefully when there are no issues to pull during `imdone pull` instead of showing an error

## 0.46.0

### GitHub Changelog Routing Fix

- Fixed `imdone log` in mixed Jira/GitHub projects so GitHub issue numbers selected from the prompt or passed on the CLI are resolved to the GitHub adapter instead of falling through the default Jira adapter
- Updated 404 handling on the changelog path so GitHub-backed failures no longer show Jira credential guidance

### Hypothesis-Driven-Dev Workflow Skill

- Added the `hypothesis-driven-development` skill to guide a story through a structured delivery workflow across three phases: Before Building, During Build, and After Deploy
  - Helps developers define a vertical slice, hypothesis, success metrics, assumption checks, and demo plan before implementation
  - Keeps design, task breakdown, implementation progress, definition of done, and retrospective notes tied directly to the story as work evolves
  - Supports resumable, checkbox-driven execution so the workflow can pick up where the story left off
  - Bundled with the CLI skill assets for local use and distribution

### Dual provider support
- **Simultaneous Jira and GitHub support**: imdone-cli can now manage both Jira and GitHub issues within the same project
  - Issues from both providers are stored in the same backlog directory with provider-specific metadata
  - `imdone ls` and other commands seamlessly handle issues from both providers
  - Provider-specific commands (like `imdone add`) automatically prompt for provider selection when creating new issues
  - Configuration supports multiple providers with automatic detection based on git remote URL

### GitHub Enterprise

- Add GitHub Enterprise support

### GitHub Issues GA

- GitHub Issues integration is no longer experimental

### Relaxed `imdone init` Requirements

- `imdone init` no longer requires the current working directory to be a git repository

## 0.45.0

### Unified Filter Syntax for `imdone ls -q`

- **imdone filter syntax for all providers**: The `-q, --query` option now uses imdone's filter syntax for both Jira and GitHub, applied locally via `project.getAllCards`
  - Single query language works across all providers — no need to learn JQL or GitHub search syntax
  - Examples: `meta.status="open"`, `tag:bug`, `meta.assignedTo="username"`

### Reactions

- Make github reactions their own metadata values

### PR Support

- Use PR prefix on PR issue directories
- Add PR metadata to issues created from pull requests
- Only add reaction metadata if value is greater than 0

## 0.44.1

- Fix getting github attachments from private repos by using the correct API endpoint with authentication

## 0.44.0

### GitHub Attachment Support

Full bidirectional attachment synchronization for GitHub Issues, with concurrency-safe storage.

**Storage and upload:**
- Attachments are stored as assets on a per-issue GitHub release tagged `imdone-attachments-{issueNumber}` — one release per issue avoids GitHub's 1,000-asset-per-release limit
- Every upload uses a unique version-prefixed asset name: `{11-hex-epoch}{4-hex-random}-{filename}` (e.g., `000191a3b4c5d6e7-plan.md`), eliminating 422 conflicts when two users push the same file simultaneously
- Old release assets are **never deleted** — all versions are preserved in the release for history and auditability

**Pull / link rewriting:**
- On pull, the comment ledger is replayed to build a URL → original-filename map; versioned asset URLs are transparently resolved back to `./attachments/plan.md` — the prefix never appears in local files
- Local attachment links (`[plan.md](./attachments/plan.md)`) are converted to the versioned GitHub download URL on push, and back to the original local path on pull

**Comment ledger:**
- Every attachment event (added, modified, deleted, renamed) is recorded as a machine-readable comment on the issue
- The `Filename:` field always stores the original name; `URL:` stores the versioned download URL
- The ledger is the source of truth — `buildAttachmentState` replays it in order so the most recent event always wins
- After push, the new ledger comment appears in your local `comments-{key}.md` immediately — no pull required

**Concurrency safety:**
- Two users pushing the same attachment simultaneously each get a unique asset name — no last-write-wins data loss
- No delete step means no race conditions between delete and upload
- The comment ledger automatically resolves concurrent modifications — the most recent `modified` comment wins on the next pull

## 0.43.0

- Fix ls command to work when piping output to other commands (like grep) by disabling the spinner when stdout is not a TTY.
- Clean up favorites column display in ls output to prevent formatting issues when piping output.
- Provide details on git actions in output for clarity and debugging.
- Only add files in defaultDirectory (current-sprint) to staging area during merge, instead of all changes.
- Use :(exclude)${defaultDirectory}/** to exclude the default directory from the stash, on `imdone update`
- Add `/imdone-ls` claude skill for `imdone ls`
- Add `imdone status` command to show the changes in the defaultDirectory (current-sprint)

## 0.42.2

Fix vulnerabilities in dependencies.

## 0.42.1

Use the correct template names for attachements (eg. stock_partials_dod instead of dod)

## 0.42.0

### Attachment Versioning (No More 403 Errors)

**Breaking Change:** Attachment metadata format has changed from ID-keyed to filename-keyed with version tracking. Metadata is automatically migrated on first use with no data loss.

- **Eliminate 403 permission errors**: Team members can now modify attachments created by others without encountering "403 Unauthorized" errors
  - Upload new versions without deleting old ones (no delete permission required)
  - Old versions preserved in Jira for audit trail
  - Multiple versions supported - all visible in Jira UI
- **Multi-version tracking**: Metadata tracks all attachment versions per filename
  - Filename-keyed structure instead of ID-keyed
  - `current` pointer indicates most recent version
  - `versions` array stores complete version history with author info and timestamps
  - Auto-migration from old format on first use
- **Smart pull behavior**: Downloads only the most recent version when multiple exist
  - Keeps local filesystem clean (one file per attachment)
  - Sorts versions by creation date automatically
  - Metadata preserves full version history for reference
- **Team-wide sync via issue comments**: Deleted and renamed attachments automatically sync across team
  - When you delete or rename an attachment, a machine-readable comment is posted to Jira
  - All team members automatically sync these changes on their next pull
  - Prevents re-downloading deleted files across the entire team
  - No manual coordination needed - comments drive synchronization
  - Comment format includes: Action, Filename, Attachment ID
  - Local ignored list is automatically updated from issue comments

**What changed:**
- Modified attachments now upload new versions without deleting old ones
- Pull operations download only the most recent version of each attachment
- Metadata format migrated to support version arrays and ignored lists
- **Team-wide sync**: Deleted/renamed attachments post comments to Jira for automatic team synchronization
- Comments are parsed on pull to automatically update each team member's ignored list
- Old versions remain in Jira (team members automatically skip them on pull)

**Migration:**
- Automatic on first pull/push after upgrade
- No manual intervention required
- No data loss during migration
- Old metadata format still readable during transition

See [Attachment Versioning](README.md#-attachment-versioning) documentation for details.

## 0.41.0

### Branch Safety for Backlog Repository

- **Automatic branch switching**: All backlog git operations now happen on the `imdone-work` branch instead of `main`, preventing accidental commits to the shared default branch
  - Automatically creates and switches to `imdone-work` branch on first use
  - Applies to all commands that modify backlog files: `pull`, `push`, `add`, `update`, `merge`, `move`, `reset`
  - Smooth user experience with spinner feedback when switching branches
  - Reduces merge conflicts when multiple team members work simultaneously
  - Special handling for `init` and `clone` commands - initial setup commits go to `main`, then subsequent operations switch to `imdone-work`

### Template Selection Improvements

- **Smart template filtering**: Only show templates that contain `${markdown}` in template selection prompts, ensuring users only see templates that will create issues with content, improving the user experience and reducing confusion when selecting templates for issue creation

- **Automatic documentation update**: When `imdone update` runs, automatically copy documentation files from the package to the project directory, ensuring that users always have the latest documentation available in their project after an update, improving the user experience and keeping documentation up to date without requiring manual copying by users.

## 0.40.1

### Added
- **Smart placeholder creation for attachment links**: When templates reference      
  attachment files (like `hypothesis.md`, `plan.md`), placeholder files are
  automatically created with `<!-- place content here -->` markers, giving you a clear
  starting point for documentation

### Fixed
- **Automatic conflict resolution during issue creation**: No more manual merge
conflict resolution when creating issues with templates - the system intelligently
keeps the right content from Jira while preserving your local work
- **Jira attachment links**: Now converted to the proper Jira url format during sync, ensuring they work correctly in Jira without manual adjustments

### Improved
- **Cleaner issue creation experience**: Eliminated confusing warning messages about
missing attachments that were actually just template placeholders
- **Streamlined sync workflow**: Simplified the process of creating issues with
attachments - the system now handles all the complexity of syncing content between
local files and Jira automatically

## 0.40.0

### Template Auto-File Creation

- **Automatic file generation**: Templates can now automatically create files in the issue's `attachments/` directory using special link syntax
  - Syntax: `[Link Text](./attachments/filename.ext?template=<template_name>)`
  - Links with `?template=name` create files populated with template content
  - Links without template parameter create empty files
  - Template names support both `template_name` and `name` formats (prefix optional)
- **Works everywhere**: Feature available in both `imdone add` (when creating issues) and `imdone template` (when applying templates)
- **Smart variable replacement**: Template variables automatically replaced in generated files
  - `${markdown}` replaced with empty string for new files
  - `${meta.jira}`, `${meta.status}`, and other metadata variables replaced with actual values
  - Example: `## ✅ ${meta.jira} Definition of Done` becomes `## ✅ PROJ-123 Definition of Done`
- **Safe operations**: Existing files are never overwritten
- **Robust timing**: Retry logic with progress feedback ensures newly created issues are found even with provider API delays
  - Up to 10 retry attempts with 1-second intervals
  - User feedback every 3 attempts: "Waiting for issue PROJ-123 to be available locally (3/10)..."
  - Automatic project refresh between attempts
  - Fallback pull mechanism if initial attempts fail
- **Clear feedback**: Users see file creation progress and issue file paths for easy navigation
  - `✔ Created 6 attachment file(s) in .../attachments`
  - `ℹ 📄 Issue file: /path/to/issue-PROJ-123.md`

**Example template** (`lean-story.md`):
```markdown
### Step 1: Validate Vertical Slice
- [ ] **Vertical Slice Check** - [Slice Validation](./attachments/01-vertical-slice.md)

### Step 2: Define Success Metrics
- [ ] **Metrics & Analytics Plan** - [Metrics Document](./attachments/02-metrics.md)

### Step 3: Plan Implementation
- [ ] **Implementation Plan** - [Build Plan](./attachments/03-plan.md?template=story)
```

When applied, automatically creates 6 documents: `01-vertical-slice.md` (empty), `02-metrics.md` (empty), `03-plan.md` (with story template content), `04-results.md`, `05-learnings.md`, and `06-next-steps.md`.

### New Template

**`lean-story`** - Product-minded development workflow for execution
- Validate vertical slice: Ensure end-to-end value (UI → API → Database)
- Define success metrics BEFORE building
- Plan implementation with shippable increments
- Build, measure, and learn from real usage
- Focus on shipping in < 3 days
- 6 auto-created attachments: vertical-slice.md, metrics.md, plan.md, results.md, learnings.md, next-steps.md

Perfect for teams practicing continuous delivery and lean product development.

## 0.39.0

### Attachment Modification Workflow

- **Edit attachments locally**: Modify, delete, or rename Jira attachments directly in your file system
  - **Modify**: Edit files locally → `imdone push` uploads new version and deletes old version
  - **Delete**: Remove files from `attachments/` folder → `imdone push` deletes from Jira
  - **Rename**: Rename files locally → `imdone push` handles as delete old + upload new
  - **Add new**: Copy files into `attachments/` folder → `imdone push` uploads to Jira
- **Safety mechanism**: Upload-then-delete pattern ensures old versions are preserved if upload fails
  - New attachment is uploaded first
  - Old attachment is only deleted after successful upload
  - Prevents data loss during network failures or errors
- **Git-aware detection**: Uses git status captured before pull to properly detect deleted/renamed attachments
  - Resolves issues with git stash/pop cycle interfering with change detection
  - Handles cases where pull re-downloads attachments that were deleted locally
- **Automatic cleanup**: Orphaned attachments (deleted/renamed locally) are removed from Jira on push
- **User feedback**: Clear progress messages and summaries
  - `✓ Updated: PROJ-123/screenshot.png (125KB)`
  - `✓ Deleted: PROJ-123/old-file.pdf`
  - `✓ Renamed: PROJ-123/draft.png → PROJ-123/final.png`

## 0.38.0

### Unix-Style `ls` Command Enhancement

- **Familiar terminal behavior**: `imdone ls` now follows Unix `ls` conventions for a more intuitive command-line experience
- **New display flags**:
  - `-l` - Long format showing detailed issue information in table view (status, assignee, type, filename)
  - `-1` - One issue per line (compact KEY + PATH format)
  - `-t` - Sort by modification time (most recent first)
  - `-r` - Reverse sort order
- **Default format change**: Compact listing showing KEY and PATH (similar to `ls -1`)
- **Flag combinations**: Support for combined flags like `-lt` (long + time sort) and `-ltr` (long + time + reverse)
- **Backward compatibility**: Existing `--limit`, `--format`, and `--query` options work with new flags
- **Time-based sorting**: Issues sorted by `jiraUpdated` or `githubUpdated` metadata field when using `-t`

**Migration guide:**
- Old default table format → Use `imdone ls -l` for detailed table view
- Compact listing → Default behavior (or `imdone ls -1`)
- No breaking changes to command-line options or output formats

### Favorites Feature

- **Mark issues as favorites**: New `imdone favorite` command (alias: `f`) to mark issues for quick access
- **Filter by favorites**: `imdone ls --favorites` (or `imdone ls --fav`) shows only favorited issues
- **Visual indicators**: Favorited issues show a ★ symbol in all list views
- **Interactive prompts**:
  - Prompt for issue selection when adding favorites (shows all available issues)
  - Prompt for removal shows only favorited issues for easy selection
- **Personal workspace**: Favorites stored locally in `.imdone/favorites.yml` (git-ignored)
- **Provider support**: Works with both Jira (PROJECT-123) and GitHub (issue numbers)
- **Commands**:
  - `imdone favorite PROJ-123` - Add to favorites
  - `imdone favorite --remove` - Remove from favorites (interactive)
  - `imdone ls --favorites` - List only favorites
  - `imdone ls --fav -lt` - Favorites in long format, sorted by time

**When to use**: Perfect for users managing 10+ issues in current sprint who need to quickly focus on 2-3 active work items without scanning the full list.

### Path Sanitization Enhancement

- **Shell-safe directory names**: Issue directory paths now remove shell-problematic characters
  - Added `sanitizePathComponent` function to handle backticks, quotes, and parentheses
  - Prevents issues when running shell commands with issue paths
  - Example: `Issue (with parens)` → `Issue_with_parens`
  - Improves reliability of CLI operations that involve file paths

### Other Changes

- Implement `imdone log` for github issues.

## 0.37.0

- Fix comments files not generating properly
- Add gihub reactions metadata

## 0.36.0

### GitHub Provider Enhancements

- **`imdone add` GitHub support**: Fully supports creating GitHub Issues with template support
- **Provider-aware prompts**: Skip irrelevant options (no issue type or sprint/backlog prompts for GitHub)
- **Replay commands**: Tailored to provider capabilities
- **Template tags**: Automatically converted to GitHub labels
- **Provider capabilities system**: Graceful handling of provider differences

### Query Command Improvements

- **Provider-agnostic query option**: Changed `-j, --jql` to `-q, --query` in `imdone list/ls` command
  - Supports JQL for Jira: `imdone ls -q "project = PROJ AND assignee = currentUser()"`
  - Supports GitHub search syntax: `imdone ls -q "assignee:@me is:open label:bug"`
- **GitHub `@me` support**: Automatically resolves `assignee:@me` to your GitHub username
- **Query validation**: JQL validated for Jira; GitHub queries passed directly to API
- **Verbose mode**: Shows the actual query being executed (`--verbose` or `-v`)

### Configuration

- **GitHub query configuration**: Default query during init (`is:issue state:open`)
- **Auto-detection**: GitHub owner/repo detected from git remote origin URL 

## 0.35.0

- Implemented `imdone push` for GitHub issues
- Supports pushing issue content, labels, and comments

## 0.34.0

- Added experimental GitHub provider support
- `imdone init` now allows selecting GitHub as the provider
- `imdone pull` fully functional for GitHub issues
- Auto-detection of GitHub owner/repo from git remote origin URL

## 0.32.0

- Create ignore files with the proper splat pattern on init
- Import plugins properly for running in cli or desktop 

## 0.31.0

### Desktop Integration Improvements

- **Manual watcher control commands**: Added `imdone pause` and `imdone resume` commands
  - `imdone pause` - Manually pause the desktop watcher for extended operations
  - `imdone resume` - Resume the desktop watcher after manual pause
  - Provides explicit control over desktop/CLI coordination
  - Useful for manual conflict resolution or extended editing sessions

## 0.30.0

### Free Plan Enhancements

- **Expanded free plan capabilities**: Enhanced free tier to allow attachments and comments
  - Users on the free plan can now add comments to Jira issues
  - Attachment support is now available for free plan users
  - Improves user experience for small projects and teams evaluating imdone-cli

### Desktop Integration Improvements

- **Automatic desktop watcher pause**: Added `.imdonepause` file mechanism to prevent conflicts
  - Creates `.imdonepause` file in backlog directory before any imdone-cli command runs
  - Automatically removes the pause file when command completes (even on errors)
  - Prevents imdone desktop watcher from conflicting with CLI operations
  - Ensures clean synchronization between desktop and CLI tools

---

## 0.29.0

### Enhanced Clean Project Functionality

- **Simplified clean operation**: Streamlined the `imdone clean` command to focus on cleaning the default directory
  - Commit message changed to "Cleaned project files" for better clarity
  - Always commits deletions after cleaning, regardless of directory contents
- **Uncommitted changes protection**: Added safety check to prevent cleaning when there are uncommitted changes
  - Displays clear error message: "There are modified files. Commit or stash your changes before cleaning the project."
  - Prevents accidental data loss by ensuring working directory is clean before proceeding
  - Stack traces are logged for debugging but not shown to users

---

## 0.28.0

### Resolution Management for Jira Issues

- **Automatic Resolution Setting**: When moving issues to "Done" status, the resolution field is now automatically set to "Done" if no resolution exists
- **Custom Resolution Flag** (`-r, --resolution <value>`): Set a custom resolution when moving to Done status
  ```bash
  imdone move PROJ-123 Done --resolution "Fixed"
  ```
- **Skip Resolution Flag** (`--no-resolution`): Skip setting resolution even when moving to Done
  ```bash
  imdone move PROJ-123 Done --no-resolution
  ```
- **Interactive Resolution Prompting** (`-p, --prompt-resolution`): Interactively select from available Jira resolutions
  ```bash
  imdone move PROJ-123 Done --prompt-resolution
  ```
  - Fetches available resolutions from Jira API
  - Includes "Skip" option
  - Shows resolution descriptions
  - Graceful fallback to common resolutions if API fails

### Enhanced Move Command

- Respects existing resolutions (never overwrites)
- Non-blocking: move succeeds even if resolution setting fails
- Only prompts/sets resolution when moving to "Done" status category
- Supports multiple output formats (text, json, yaml, csv)

---

## 0.27.0

- **Multi-project support for issue creation**: Enhanced `imdone add` command to support multiple Jira projects
    - Added `--project-key` option to specify which project to create the issue in (e.g., `imdone add --project-key PROJ`)
    - Interactive project selection prompt when multiple projects are configured in Jira adapter
    - Automatically uses the only configured project when just one is available
    - Project key validation with helpful feedback for invalid project keys
    - Replay command now includes the selected project key for future non-interactive use
    - Sprint options are now fetched for the selected project, ensuring accurate sprint assignment

## 0.26.0

- **Fixed image rendering in Jira list items**: Enhanced markdown-to-Jira conversion to properly handle images within list items
  - Images that appear directly in ordered or unordered list items are now moved to separate lines during Jira sync
  - Ensures images render correctly in Jira, which doesn't support inline images within list items

## 0.25.0

- **Template System Enhancement**: Added `imdone template` command for applying templates to existing Jira issues
  - Interactive prompts for issue selection and template application  
  - Templates can include metadata (tags, custom fields) that gets merged with existing issue metadata
  - Template content can reference existing issue content using `${markdown}` placeholder
  - Includes default story template created during `imdone init`
  - Perfect for applying Definition of Done (DoD) templates to existing stories
- **JSON Metadata Format**: Switched from YAML to JSON for issue metadata in comment blocks
  - Improved parsing reliability and consistency
  - Better integration with JavaScript-based tooling
  - Maintains backwards compatibility during transition
- **Enhanced Documentation**: Updated "What you'll see" section in README with more accurate project structure examples

## 0.24.4

- Remove the "command requires a Pro license." message after `imdone pull`
- Show a list of issues after `imdone pull`

## 0.24.3

**1. Accurate Conversion of Jira Images**
- Jira image macros like `!image.png|width=100%!` are now correctly converted to HTML `<img>` tags (or Markdown image syntax) with all attributes preserved (width, height, alt, etc.).
- When converting back from Markdown/HTML images to Jira markup, all attributes are retained. This means users won’t lose image sizing or alt text when roundtripping content.

**2. Better Table Handling**
- Blank lines are automatically added before and after tables when converting to Markdown, ensuring that Markdown renders tables correctly and consistently.
- Tables followed by images or other content are formatted so that display issues are avoided.

**3. Improved Roundtrip Fidelity**
- Complex Jira content (tables, images, quotes, lists) can be converted to Markdown and back to Jira *without losing structure or formatting*. This includes edge cases with images, tables, and block quotes.

**4. Markdown Image Support**
- Markdown syntax for images (`![alt](url)`) is now supported and converted to Jira image macros when syncing content to Jira.
- HTML `<img>` tags with attributes are also supported, making the conversion more flexible and user-friendly.

## 0.24.2

- **Fixed blank lines getting removed from comments**

## 0.24.1

- **Fixed imdone clone**

## 0.24.0

- **Imdone CLI is free for up to 5 issues**: Updated licensing model to allow free usage for small projects
  - Projects with 5 or fewer issues are now free to use imdone-cli without a license
  - Larger projects still require a valid license token for full functionality
  - Simplifies onboarding for small teams and individual developers

## 0.23.3

- **Fixed comment formatting preservation**: Enhanced comment formatting to maintain proper nested bullet structure during push operations
  - Nested bullet formatting in comments is now preserved when syncing to Jira
  - Ensures consistent formatting behavior between issues and comments

## 0.23.2

- **Fixed inline code parsing**: Enhanced JiraParser to correctly handle inline code that starts and ends with curly braces
  - Prevents malformed rendering when code contains pattern like `{{variable}}`
  - Improved regex pattern to avoid conflicts with Jira markup syntax
- **Fixed header content parsing**: Improved inline parsing of content within markdown headers
  - Headers now preserve their content correctly during markdown-jira conversion
- **Enhanced table formatting in list output**: Improved the `imdone list` command table display with dynamic column sizing
  - All columns (except summary) now auto-size based on actual content width for optimal space usage
  - URL column configured to never wrap, ensuring URLs remain readable and copy-able
  - Removed unnecessary padding to create more compact, efficient table layout
  - Summary column remains fixed-width for consistent formatting while other columns adapt to content

## 0.23.1

- **Enhanced AI integration**: Added AI instructions to all generated issue content
  - Issues now include context instructions for better AI-assisted development

## 0.23.0

- **Fixed code preservation in markdown-jira conversion**: Enhanced JiraParser to properly protect code content from formatting conversion
  - Asterisks and other formatting characters in inline code (backticks) and code blocks now preserve correctly
  - Prevents constants like `MEDICARE*SECONDARY*PAYER_APPLIES` from being corrupted during roundtrip conversion
- **Fixed underscore preservation in identifiers**: Enhanced JiraParser italic regex to prevent snake_case variables from being converted to italics
  - Constants like `ONE_TWO_THREE_FOUR` and `SNAKE_CASE_VARIABLE_NAME` now preserve correctly
  - Improved regex pattern requires word boundaries around italic markers to avoid matching identifier underscores

## 0.22.0

- **Custom JQL support for list command**: Enhanced `imdone list` and `imdone ls` commands with custom JQL query capability
  - Added `--jql` option to override default project JQL configuration for flexible issue filtering
  - Added `--verbose` option to display the actual JQL query being executed
  - Comprehensive JQL validation with helpful error messages and examples
  - Support for complex queries including assignee filters, status filters, sprint filters, and date ranges
  - Automatic project key validation and suggestions for configured projects
  - Seamless integration with existing output formats (text, json, yaml, csv) and limit options
  - Examples include filtering by assignee, status, labels, sprints, priority, and creation date
- **Enhanced show command**: Improved `imdone show` command with better format support and interactive prompts
  - Added `--format` option support for structured output (json, yaml, csv, text)
  - Interactive issue selection when no issue key is provided on command line
  - Improved markdown formatting for text output
- **Improved move command**: Fixed status display issues in transition prompts
  - Corrected "from status" display to show accurate current status
- **Enhanced push feedback**: Updated table format after push operations
  - Push results now display in same format as `imdone ls` for consistency
- **Better project initialization**: Enhanced `imdone init` command safety
  - Prevents running `imdone init` when `.imdone-cli.yml` file exists in ancestor directories
  - Protects against accidentally creating nested or conflicting configurations

## 0.21.0

- **Improved file handling**: Enhanced `.gitignore` file formatting
  - Adds proper newline before appending content to `.gitignore` files for cleaner formatting
- **Enhanced Jira API compatibility**: Added automatic API version fallback for better enterprise support
  - Automatically falls back to `/rest/api/3/search/jql` when `/rest/api/2/search` returns 410 - GONE
  - Improves compatibility with newer Jira instances that have deprecated v2 search API

## 0.20.1

- **Enhanced user experience improvements**: Improved interactive prompts and user feedback throughout the CLI
  - Added comprehensive issue summaries to selection prompts for better context
  - Enhanced feedback messages during git and Jira operations to keep users informed
  - Improved error handling and user guidance for common scenarios
- **File handling optimization**: Enhanced gitignore and imdoneignore file management
  - Prevents duplicate entries when appending content to .gitignore and .imdoneignore files
  - Smart content checking ensures cleaner configuration files
- **Clear command enhancement**: Made `imdone clear` command more robust
  - Now safely handles cases where no current-sprint directory exists
  - Eliminates unnecessary errors and provides better user feedback
- **Documentation improvements**: Streamlined README.md Key Features section for better developer experience
  - More concise and focused feature descriptions
  - Better organization of developer-focused information

## 0.19.0

- **Enhanced output formatting**: Added `-f, --format` option to major commands for structured data output
  - Supported formats: `json`, `yaml`, `csv`, `text` (default)
  - Available on: `list`, `log`, `pull`, `add`, `move`, `reset` commands
  - Perfect for automation, scripting, and integration with other tools
- **Improved Jira table handling**: Fixed conversion issues with empty table cells from Jira to markdown
- **Better text formatting support**: Enhanced handling of bold and italic text without requiring spaces
- **Git commit enhancement**: All imdone operations now include version information in commit messages for better tracking

## 0.18.2

- Fixed bug `fatal: pathspec ...metadata.yml did not match any files`

## 0.18.0

- **Issue creation command**: Added `imdone add` command for creating new Jira issues directly from the CLI
  - Interactive prompts for template selection, issue type, location (backlog/sprint), and summary
  - Command-line options support for automation: `--template`, `--issue-type`, `--location`, `--sprint-id`, `--summary`
  - Template integration from `.imdone/templates` for consistent issue structure
  - Automatic sprint assignment when creating issues for active sprints
  - Displays replay command after creation showing exact options for future use without prompts

## 0.17.1

- **Fixed folder cleanup after status changes**: Resolved issue where issue folders weren't automatically removed after using `imdone move` command
  - Issue folders are now properly cleaned up immediately after status transitions
  - No longer requires running `imdone pull` to remove empty issue folders
  - Improves workspace organization and reduces clutter

## 0.17.0

- **Attachment upload support**: Added ability to upload new attachments to Jira during `imdone push`
  - Automatically detects new files in `attachments/` directories within issue folders
  - Uploads files to corresponding Jira issues and updates local metadata tracking
  - Includes author information (display name, email, account ID) in attachment metadata
  - Provides user feedback on successful uploads and handles errors gracefully
  - Maintains backwards compatibility with existing attachment download functionality

## 0.16.1

- **Fixed attachment download functionality**: Resolved critical issue with Jira attachment downloads
  - Fixed HTTP redirect handling in fetch adapter for binary downloads (Jira returns 303 redirects for attachments)
  - Enhanced file validation to ensure downloaded attachments match expected sizes
  - Improved error handling and debugging output for attachment download failures
  - Verified attachment downloads are properly saved to the configured `backlogDir` location
  - All attachment types (images, documents, etc.) now download correctly during `imdone pull`

## 0.16.0

- **Enhanced move command with fuzzy search**: Improved `imdone move` command with intelligent issue key selection
  - Added fuzzy search to issue key prompt for faster issue discovery
  - Automatically suggests existing issue keys from your project
  - Supports exact match, prefix match, contains match, and character sequence matching
  - Case-insensitive search with smart ranking
  - Fallback to manual input for new issue keys
- **Enhanced log command with interactive prompts**: Improved `imdone log` command with fuzzy search capabilities
  - Made issue key parameter optional - command now prompts for selection when not provided
  - Added fuzzy search functionality for issue key selection with intelligent ranking
  - Consistent user experience with the move command's interactive prompts
- **Attachment synchronization**: Added automatic attachment download during `imdone pull`
  - Downloads all issue attachments to local `attachments/` folders
  - Preserves original filenames and supports all attachment types
  - Graceful error handling for failed downloads

## 0.15.0

- **Issue status transitions**: Added `imdone move` command to change Jira issue statuses directly from the command line
  - Use `imdone move <issue-key> <status>` to move an issue to a specific status
  - Interactive prompts when arguments are not provided
  - Automatic discovery of available transitions for each issue
  - Support for case-insensitive status matching
  - Alias: `mv` for shorter commands
  - **Automatic sync**: After successfully changing an issue's status, the command automatically runs `imdone pull` to sync the updated status to your local files. If the selected status is the same as the current status, no changes are made and no sync occurs.

## 0.14.1

- Make sure rank is using the correct field (Not obsolete one)

## 0.14.0

- **Backlog ordering**: Enhanced `imdone list` to display issues in proper rank order, making it easier to find the next most important things to work on
- **Enhanced list command**: Added `--limit` option to `imdone list` and `imdone ls` commands for controlling the number of displayed tasks
  - Use `-l` or `--limit <number>` to show only the first N tasks
  - Helpful for large projects with many issues
  - Shows informative feedback when limiting results (e.g., "showing first 5")
- **Improved initialization flow**: Enhanced `imdone clone` and `imdone init` commands with better help text and guidance links
  - Clearer prompts and instructions for new users
  - Better onboarding experience for Jira integration setup
- **Comment file improvements**: Added HTML comment headers to comments files for better organization
- **Extended metadata support**: Added assignee and reporter information to issue metadata
  - `assignedTo`: Display name of the person assigned to the issue
  - `assignedToEmail`: Email address of the assignee
  - `reporter`: Display name of the person who created the issue
  - `reporterEmail`: Email address of the reporter
  - Automatic field detection and mapping from Jira

## 0.13.0

- **Comment requirements**: Added `commentRequired` metadata support to enforce comments on specific tasks
  - Tasks with `commentRequired:true` must have a comment before they can be pushed to Jira
  - Interactive prompts guide users to add required comments during `imdone push`
  - Comments are automatically added to the appropriate comments file and synced to Jira
  - Git hooks properly handle interactive prompts with terminal input redirection

## 0.12.2

- Only update .gitignore files on init if the content doesn't already exist
- Replace .env values on init

## 0.12.1

- Exclude order metadata from getting saved to jira

## 0.12.0

- Add comments to jira issues with `imdone push`

## 0.11.8

- **Git hooks integration**: Added `imdone hooks` command with setup and remove subcommands for automatic synchronization
  - Post-merge hook automatically runs `imdone pull` after successful git pull operations
  - Pre-push hook runs `imdone push` before git push and blocks push if imdone sync fails
  - Hooks use smart directory resolution to find `.imdone-cli.yml` in git repository or parent directories
  - Force overwrite option available with `--force` flag for existing hook management
- **Improved installation reliability**: Enhanced preinstall and postinstall scripts to run from correct directory
- **Optimized data handling**: Removed encodedText from data processing to avoid unnecessary removeMD operations and improve performance

## 0.11.6

- **Removed remark dependency**: Eliminated unnecessary dependency to reduce package size and improve installation speed
- **Fixed empty blockquote handling**: Resolved issue where empty blockquotes were being added to markdown files, now uses blank lines instead for cleaner formatting
- **Fixed ordered list numbering**: Corrected issue where ordered list numbering continued across separate lists instead of restarting at 1
- **Enhanced mixed list parsing**: Improved Jira parsing and generation for ordered lists nested within unordered lists
- **Automatic directory cleanup**: Empty directories in current-sprint folder are now automatically removed after `imdone pull` to keep workspace clean
- **Fixed concurrency race condition**: Resolved race condition in throttledPromiseAll function that could cause operations to appear completed before all async work finished

## 0.11.0

- **Standardized list formatting**: All list nesting now uses consistent 4-space indentation for better readability and Jira compatibility
- **Automated installation scripts**: Added pre and post install scripts to check for uncommitted changes and automatically run updates
- **Improved quote handling**: Fixed issue where blockquotes were being moved to incorrect sections in files
- **Better inline code processing**: Fixed inline code spans being incorrectly interpreted as markdown formatting
- **Multiple table support**: Enhanced support for documents containing multiple markdown tables
- **Updated ignore patterns**: Added `current-sprint/**/*` to ignore files for better git management
- **URL validation improvements**: Fixed error when Jira URL contains trailing slash during `imdone init`
- **Metadata in code blocks**: Metadata is now stored in code blocks on Jira side and properly populated on pull without adding code blocks to markdown
- **Comments file creation**: Automatically creates separate comments files during `imdone pull` for better organization
- **Enhanced markdown linting**: Improved linter to normalize tables and clean up mixed ordered/unordered lists
- **New directory structure**: Implemented organized folder structure in current-sprint directory with individual folders per Jira item

## 0.10.2

- Fix prefix being added by Jira in ordered and unordered lists

## 0.10.1

- line breaks in tables on the jira side were causing the tables to break on the markdown side
  - Convert line breaks to `<br>` tags in markdown

## 0.10.0

- **Enhanced markdown linting**: Integrated markdownlint for improved code formatting and consistency
  - Code blocks are automatically unindented and normalized to proper formatting
  - Enforces consistent markdown standards across all backlog files
- **Improved list command**: Enhanced `imdone list` (alias `ls`) with better formatting
  - Added status display (TODO, DOING, etc.) for each issue
  - Output now displays as a formatted table for better readability
- **Epic support**: Added epic linking and metadata tracking
  - Epic information is now included in issue metadata
  - Automatic detection of epic custom field configuration
  - Epic links are preserved during Jira synchronization
- **New show command**: Added `imdone show <ISSUE_KEY>` command (alias `s`)
  - Display detailed issue information including description, status, and comments
  - Provides comprehensive view of Jira issue data from the command line
