{"_id":"@dloizides/katastasi","_rev":"4-0d39502f5aa5613a36cbb6064744b5ba","name":"@dloizides/katastasi","dist-tags":{"latest":"0.5.0"},"versions":{"0.2.0":{"name":"@dloizides/katastasi","version":"0.2.0","keywords":["requirements","traceability","rtm","testing","task-tracking","documentation","jira","confluence","mcp","ai-agents","ci","markdown"],"license":"MIT","_id":"@dloizides/katastasi@0.2.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/katastasi#readme","bugs":{"url":"https://github.com/openmindednewby/katastasi/issues"},"bin":{"acp":"dist/cli/index.js","kat":"dist/cli/index.js","acp-mcp":"dist/mcp/server.js","katastasi":"dist/cli/index.js","katastasi-mcp":"dist/mcp/server.js"},"dist":{"shasum":"7dd345795d75681ed64a24b9cca52b8eec1a3cc5","tarball":"https://registry.npmjs.org/@dloizides/katastasi/-/katastasi-0.2.0.tgz","fileCount":157,"integrity":"sha512-t77MPKjlGW8dDdY9BoxBP0+c5R2eqLwYV3LQa5aMmo/YusqCY1FYnaEecEbeEkeM6Tw9ZY9VCrWaIkw6NR02SQ==","signatures":[{"sig":"MEYCIQDhWjoS2Q4WNzYLGEWRNDxOMlIGTzboSlcKK+XHf0l4NgIhALTMVwohGI4v/QosvY30FstFH5Y4cNR8m1skQWkQEo6Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3942789},"type":"module","engines":{"node":">=20"},"gitHead":"8f2117d03a5a2e76f53350a1a531b4ae826bb855","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"npm run build && node --test \"test/**/*.test.js\"","build":"tsc -p tsconfig.json","prepare":"npm run build","start:mcp":"node dist/mcp/server.js","typecheck":"tsc -p tsconfig.json --noEmit","docker:build":"bash scripts/docker-build.sh","publish:both":"bash scripts/publish-npm.sh","docker:deploy":"bash scripts/docker-deploy-remote.sh","deploy:workflows":"node scripts/deploy-workflows.mjs"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/katastasi.git","type":"git"},"_npmVersion":"10.9.3","description":"Katastasi — open-source documentation, task-tracking, and testing framework. Local-first markdown source of truth; agent-native (MCP); syncs to Jira/Confluence/issues/CI. Answers: what is the real status — is this actually done and verified?","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","dotenv":"^16.4.5","commander":"^12.1.0","@modelcontextprotocol/sdk":"^1.18.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.0","@types/node":"^22.7.0"},"_npmOperationalInternal":{"tmp":"tmp/katastasi_0.2.0_1782077395810_0.039364494440935704","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@dloizides/katastasi","version":"0.3.0","keywords":["requirements","traceability","rtm","testing","task-tracking","documentation","jira","confluence","mcp","ai-agents","ci","markdown"],"license":"MIT","_id":"@dloizides/katastasi@0.3.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/katastasi#readme","bugs":{"url":"https://github.com/openmindednewby/katastasi/issues"},"bin":{"acp":"dist/cli/index.js","kat":"dist/cli/index.js","acp-mcp":"dist/mcp/server.js","katastasi":"dist/cli/index.js","katastasi-mcp":"dist/mcp/server.js"},"dist":{"shasum":"e29205cb35eb2187b6f1c1e73bdac33146edd487","tarball":"https://registry.npmjs.org/@dloizides/katastasi/-/katastasi-0.3.0.tgz","fileCount":181,"integrity":"sha512-ygNU47xpppnz1Vw5HlK4xmGrAWunrV1OHZoQuq8um/PJS3H5We8XjkxPOidgoYyU3fM6pNefcpI/E3zTmABcTQ==","signatures":[{"sig":"MEUCIQDL0iKWH0rMDhUx9sNGqDLTA44+zR3DezBpB3v97q1a/wIgUcEma4AJ2B3JNVcGaQstO9BtldkCxqD0b4s8aYbdPyw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4051063},"type":"module","engines":{"node":">=20"},"gitHead":"f21842f5ad8ed56127dedcee92d000247ba50adb","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"npm run build && node --test","build":"tsc -p tsconfig.json","prepare":"npm run build","start:mcp":"node dist/mcp/server.js","typecheck":"tsc -p tsconfig.json --noEmit","docker:build":"bash scripts/docker-build.sh","publish:both":"bash scripts/publish-npm.sh","docker:deploy":"bash scripts/docker-deploy-remote.sh","deploy:workflows":"node scripts/deploy-workflows.mjs"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/katastasi.git","type":"git"},"_npmVersion":"10.9.3","description":"Katastasi — open-source documentation, task-tracking, and testing framework. Local-first markdown source of truth; agent-native (MCP); syncs to Jira/Confluence/issues/CI. Answers: what is the real status — is this actually done and verified?","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","dotenv":"^16.4.5","commander":"^12.1.0","@modelcontextprotocol/sdk":"^1.18.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.0","@types/node":"^22.7.0"},"_npmOperationalInternal":{"tmp":"tmp/katastasi_0.3.0_1782152403501_0.29928586787508227","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@dloizides/katastasi","version":"0.4.0","keywords":["requirements","traceability","rtm","testing","task-tracking","documentation","jira","confluence","mcp","ai-agents","ci","markdown"],"license":"MIT","_id":"@dloizides/katastasi@0.4.0","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"homepage":"https://github.com/openmindednewby/katastasi#readme","bugs":{"url":"https://github.com/openmindednewby/katastasi/issues"},"bin":{"acp":"dist/cli/index.js","kat":"dist/cli/index.js","acp-mcp":"dist/mcp/server.js","katastasi":"dist/cli/index.js","katastasi-mcp":"dist/mcp/server.js"},"dist":{"shasum":"e85ed30429ac4b84c29cef7eaf38c75e1a87cc2a","tarball":"https://registry.npmjs.org/@dloizides/katastasi/-/katastasi-0.4.0.tgz","fileCount":226,"integrity":"sha512-+1wSC8BCsiZrYOXfubzuGfz6fZ0BDboQGZVo3DbJiI8nfobXiD/3alz2zcg+oxBdhZ69OqUAHln+2r8ls3cUGw==","signatures":[{"sig":"MEUCIFRW7Q/9wAP3Oas1JAPf8EuCG8z/A4dP72I8/pZUvTl1AiEAtNOQILByb6BpbdNf46jEN40PoJsYFQo+lN8rNN97tiM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4170833},"type":"module","engines":{"node":">=20"},"gitHead":"f2533601faf0ea0f0ab7d1dd7b725552e08181b6","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"npm run build && node --test","build":"tsc -p tsconfig.json","prepare":"npm run build","start:mcp":"node dist/mcp/server.js","typecheck":"tsc -p tsconfig.json --noEmit","docker:build":"bash scripts/docker-build.sh","publish:both":"bash scripts/publish-npm.sh","docker:deploy":"bash scripts/docker-deploy-remote.sh","deploy:workflows":"node scripts/deploy-workflows.mjs"},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"repository":{"url":"git+https://github.com/openmindednewby/katastasi.git","type":"git"},"_npmVersion":"10.9.3","description":"Katastasi — open-source documentation, task-tracking, and testing framework. Local-first markdown source of truth; agent-native (MCP); syncs to Jira/Confluence/issues/CI. Answers: what is the real status — is this actually done and verified?","directories":{},"_nodeVersion":"22.18.0","dependencies":{"zod":"^3.23.8","dotenv":"^16.4.5","commander":"^12.1.0","@modelcontextprotocol/sdk":"^1.18.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.0","@types/node":"^22.7.0"},"_npmOperationalInternal":{"tmp":"tmp/katastasi_0.4.0_1782157042360_0.05362387878748853","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@dloizides/katastasi","version":"0.5.0","description":"Katastasi — open-source documentation, task-tracking, and testing framework. Local-first markdown source of truth; agent-native (MCP); syncs to Jira/Confluence/issues/CI. Answers: what is the real status — is this actually done and verified?","license":"MIT","type":"module","bin":{"katastasi":"dist/cli/index.js","kat":"dist/cli/index.js","acp":"dist/cli/index.js","katastasi-mcp":"dist/mcp/server.js","acp-mcp":"dist/mcp/server.js"},"repository":{"type":"git","url":"git+https://github.com/openmindednewby/katastasi.git"},"homepage":"https://github.com/openmindednewby/katastasi#readme","bugs":{"url":"https://github.com/openmindednewby/katastasi/issues"},"keywords":["requirements","traceability","rtm","testing","task-tracking","documentation","jira","confluence","mcp","ai-agents","ci","markdown"],"engines":{"node":">=20"},"scripts":{"build":"tsc -p tsconfig.json","prepare":"npm run build","dev":"tsc -p tsconfig.json --watch","start:mcp":"node dist/mcp/server.js","deploy:workflows":"node scripts/deploy-workflows.mjs","docker:build":"bash scripts/docker-build.sh","docker:deploy":"bash scripts/docker-deploy-remote.sh","typecheck":"tsc -p tsconfig.json --noEmit","test":"npm run build && node --test","publish:both":"bash scripts/publish-npm.sh"},"dependencies":{"@modelcontextprotocol/sdk":"^1.18.0","commander":"^12.1.0","dotenv":"^16.4.5","zod":"^3.23.8"},"devDependencies":{"@types/node":"^22.7.0","typescript":"^5.6.0"},"_id":"@dloizides/katastasi@0.5.0","gitHead":"f6a09ce36c85d2efaf65e7f433d50e08379e72ec","_nodeVersion":"22.18.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-2GK3tazV4TJVVqwr0T8oMkft8dkN9qF/C1GbVSvMuwZWMIQcPxUmtFEMBbkk7J5ZoBqwzBl3b8ns+PY2uXPXQg==","shasum":"7b464c7638bbd70448e924e150f7094d8c318edb","tarball":"https://registry.npmjs.org/@dloizides/katastasi/-/katastasi-0.5.0.tgz","fileCount":289,"unpackedSize":4455762,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCID35gD434etFL72cC1R9YEpBmuvVwgGuWbsMHxQQ73WbAiEAoXccS2K3iRtkbof4Eh7xNL0p4E0AGiUsBKHNNTs9qcE="}]},"_npmUser":{"name":"dloizides","email":"loizidesdemetris@gmail.com"},"directories":{},"maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/katastasi_0.5.0_1782380593849_0.3035963153050585"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-21T21:29:55.611Z","modified":"2026-06-25T09:43:14.143Z","0.2.0":"2026-06-21T21:29:55.974Z","0.3.0":"2026-06-22T18:20:03.743Z","0.4.0":"2026-06-22T19:37:22.550Z","0.5.0":"2026-06-25T09:43:14.051Z"},"bugs":{"url":"https://github.com/openmindednewby/katastasi/issues"},"license":"MIT","homepage":"https://github.com/openmindednewby/katastasi#readme","keywords":["requirements","traceability","rtm","testing","task-tracking","documentation","jira","confluence","mcp","ai-agents","ci","markdown"],"repository":{"type":"git","url":"git+https://github.com/openmindednewby/katastasi.git"},"description":"Katastasi — open-source documentation, task-tracking, and testing framework. Local-first markdown source of truth; agent-native (MCP); syncs to Jira/Confluence/issues/CI. Answers: what is the real status — is this actually done and verified?","maintainers":[{"name":"dloizides","email":"loizidesdemetris@gmail.com"}],"readme":"# Katastasi\n\n**The open-source documentation, task-tracking & testing framework that keeps your project honest.**\n\n> *Katastasi* (Greek *κατάστασις*, \"status / state\") answers the question every team fumbles:\n> **what is the real status — is this actually done, and verified, right now?**\n\nLocal-first **markdown** is the source of truth (works fully offline, no SaaS, no Jira required).\nIt's **agent-native** (an MCP server so Claude/Copilot can drive it) and **integrates everywhere** —\nJira, Confluence, GitHub/GitLab issues, CI/CD, custom scripts — but those are optional projections you\nsync to, never prerequisites.\n\n```\nrequirements  ⇄  tasks  ⇄  tests  ⇄  results        (one traceable model, in markdown)\n      │             │          │\n   Confluence     Jira     your test suites           (optional, synced projections)\n```\n\nMIT-licensed and free to self-host. New here? See **[VISION.md](VISION.md)** for the full picture and\nroadmap.\n\n> **Coding agent or contributor?** Start with **[AGENTS.md](AGENTS.md)**.\n> **Adopting it on a team?** See the **[methodology](docs/METHODOLOGY.md)** — the per-feature loop\n> (onboard → design → implement → verify → sync) and where it slots into PRs/CI.\n\n---\n\n## Three pillars\n\n| Pillar | What you get |\n|---|---|\n| **📄 Documentation** | Markdown ⇄ Confluence/Jira, both ways, round-trippable, mermaid preserved. Interactive decision docs (`katastasi questions`). Optional AI-authored technical analysis. |\n| **✅ Task tracking** | A local, markdown task model (`.acp/tasks`) linked to requirements and tests, usable standalone **or** imported read-only from Jira. A task marked *done* whose requirements aren't verified is flagged ⚠️ — \"is done really done?\" at the task level. |\n| **🧪 Testing** | Links **and** runs your existing suites (Playwright/Jest/Vitest/node/xUnit), **plus a built-in requirement-first acceptance runner** (`katastasi test` — HTTP + CLI) — all joined to requirements at the git commit → a true, per-requirement status with regression detection. |\n\n## Get started\n\nNew to it? **[docs/GET_STARTED.md](docs/GET_STARTED.md)** has a copy-paste prompt for your AI agent\n(Claude Code / Copilot / Cursor) and the equivalent commands.\n\n## Install\n\n```bash\n# Run without installing (recommended)\nnpx katastasi trace init\nnpx katastasi --help\n\n# Or install globally\nnpm i -g katastasi            # also published as @dloizides/katastasi\n\n# Or Docker\ndocker run --rm -v \"$PWD:/work\" -w /work ghcr.io/openmindednewby/katastasi trace\n```\n\nBinary is **`katastasi`** (short alias **`kat`**; `acp` still works through the transition).\n\n## Quick start — requirements traceability\n\nAnswer *\"which requirements actually hold true, at this commit?\"* by linking your tests to requirements\n(a Jira epic, a markdown spec, `roadmap.html`, a Confluence page, or GitHub/GitLab issues) and joining\nthem with the test **results**.\n\n```bash\nkatastasi trace init                        # autodetect frameworks + requirements → acp-trace.json\nkatastasi trace serve                       # web portal: live dashboard + ▶ Run buttons + history\nkatastasi trace --run --fail-on regression  # CI: re-run suites, trace, fail on any regression\n```\n\nEach requirement is classified **✅ verified** / **❌ failing** / **🧪 unverified** / **📋 specified**,\nflagged **⚠️ drift** when it's declared *done* but isn't verified, and a requirement going\nverified → failing is a **⛔ regression**. Tag tests inline (`test('login works @PROJ-123', …)`,\n`[Trait(\"req\",\"PROJ-123\")]`) or list them in a mapping file. Full guide:\n**[docs/TRACEABILITY.md](docs/TRACEABILITY.md)** · 5-minute setup: **[docs/ONBOARDING.md](docs/ONBOARDING.md)**.\n\n## Business requirements → development-ready\n\nGather requirements from a mix of sources, find the gaps against the codebase, capture open decisions as\nan interactive form, then turn it all into a technical analysis + tasks + tagged test stubs:\n\n```bash\nkatastasi trace pull-requirements   # mixed sources (Jira/Confluence/md/issues/script) → local folder\nkatastasi trace gaps                # which requirements aren't in code / lack tests / aren't verified\nkatastasi pipeline                  # one command: gather → gaps → analyze → tech doc + tasks + tests\nkatastasi pipeline --ask            # two-pass: open-questions form first, then --answers\n```\n\n`katastasi analyze` (AI) produces a gap analysis, a Confluence-ready technical-analysis page, Jira tasks\n(acceptance criteria + use-case flow), and scaffolded tagged unit/e2e test stubs — local and/or\npublished. Guide: **[docs/TECH_ANALYSIS_FLOW.md](docs/TECH_ANALYSIS_FLOW.md)**.\n\n## Feature wizard (idea → dev-ready pack)\n\nOne guided flow that turns a feature + its requirements (Jira / Confluence / markdown) + the existing\ncode into a **dev-ready package** an agent or junior dev can execute without thinking hard — and a\nself-contained **HTML feature pack** the developer just reads, approves, and verifies.\n\n```bash\nkatastasi wizard                       # interactive: source → requirements → analyze → tasks → pack\nkatastasi wizard --feature \"Login\" --source jira --requirements pull   # scriptable\nkatastasi wizard check --source both   # are my Jira/Confluence credentials set? (how to fix if not)\n```\n\nIt gathers/creates requirements, runs `analyze` (a **system + per-use-case mermaid** data-flow + gap\nanalysis), creates **ordered, context-rich tasks** (code + Jira + Confluence inline, so a low-capability\nmodel can execute), and emits **unit / e2e / acceptance** stubs + **ready-made curls** — then writes\n`.acp/features/<name>/feature-pack.html` (+ a markdown mirror, + optional Confluence page). The developer\nopens it, reads the data-flow, ticks **approve**, runs the **curls** (copy button), ticks **verify**.\nFirst-time Jira/Confluence auth: **[docs/SOURCES_SETUP.md](docs/SOURCES_SETUP.md)**. Design + roadmap:\n**[docs/WIZARD-DESIGN.md](docs/WIZARD-DESIGN.md)**.\n\n## Task tracking\n\nLocal, markdown-first tasks that link to requirements and tests — and stay honest:\n\n```bash\nkatastasi task add \"Implement login\" --req PROJ-1   # → .acp/tasks/TASK-1.md\nkatastasi task set TASK-1 done\nkatastasi task board                                # → .acp/BOARD.md (kanban by status)\nkatastasi task verify --fail-on drift               # ⚠️ a done task whose reqs aren't verified fails CI\n```\n\nStatuses are configurable (`tasks.statuses`); IDs are global `TASK-<n>` or per-scope (`WEB-<n>`). Set\n`tasks.mode: jira` to import issues read-only (`katastasi task import`). `katastasi analyze` also drops\nits generated stories straight onto the board. Agents drive it all via the `task_*` MCP tools. Full\ndesign: **[docs/PHASE-1-DESIGN.md](docs/PHASE-1-DESIGN.md)**.\n\n## Acceptance testing (requirements that verify themselves)\n\nAttach an **executable acceptance test** to a requirement and `katastasi test` runs it — HTTP/REST calls\n(or CLI commands) with assertions — then writes JUnit results keyed by requirement, so `trace` flips the\nrequirement to **✅ verified** on pass (and clears any task drift). Existing Jest/Playwright suites keep\nbeing *linked*, not replaced.\n\n```bash\nkatastasi test                       # run .acp/tests specs + inline ```acp-test blocks → JUnit\nkatastasi test --req PROJ-1          # just one requirement\nkatastasi trace                      # fold the results into per-requirement status\n```\n\nAuthor them three ways — a spec file (`.acp/tests/PROJ-1.acp.json` / `.acp.yml` / a markdown table),\nor **inline** under a requirement, terse or JSON:\n\n````markdown\n## PROJ-1 — Login\n```acp-test\nPOST /login {\"user\":\"x\",\"pass\":\"bad\"} -> 401\n```\n````\n\nSteps assert status / JSON-path / header / body-contains, **capture** variables to chain (login → token →\nreuse), and read secrets from env via `{{env.NAME}}`. `baseUrl`, default headers, and a one-time login\n`setup` live in the config `runner` block. `katastasi analyze` generates these specs straight from the\nrequirements. Agents drive it via the `test_run` MCP tool. Full guide: **[docs/ACCEPTANCE.md](docs/ACCEPTANCE.md)**.\n\n## Integrations\n\n- **AI agents (MCP):** this repo *is* an MCP server (`katastasi-mcp`). Agents call `requirements_trace`,\n  `analyze`, `pull_requirements`, `scaffold_test`, `requirement_status`, `markdown_to_jira`,\n  `markdown_to_confluence`, and more. See **[docs/CLI_AND_MCP.md](docs/CLI_AND_MCP.md)** and\n  **[docs/AGENT_PROMPT.md](docs/AGENT_PROMPT.md)**.\n- **Jira & Confluence (both ways):** `pull-jira` / `pull-confluence` → markdown folders; edit; `push-folder`\n  back. Recursive + round-trippable.\n- **GitHub / GitLab issues:** as requirement sources (by label/milestone).\n- **CI/CD:** a published **GitHub Action** (`uses: openmindednewby/katastasi@v0.2.0`) plus GitLab CI and\n  pre-commit templates in **[docs/ci/](docs/ci/)**. Exit non-zero on regression.\n- **Custom scripts / services:** a `command` requirement source (run any script → requirements), an\n  `output.post` sink (POST the full report to your server), and a self-hosted `collector`.\n- **Local-only markdown:** requirements, runs, and reports are plain files you can commit. No external\n  service needed for the core.\n\n## AI authoring (optional add-on)\n\nThe original flow — describe a feature → AI writes a structured technical analysis → publish to\nConfluence + create Jira tickets — is retained as an optional module. It runs via the `claude` / `gh\nmodels` CLIs (no Docker/keys) or via self-hosted **n8n** (browser UI), with a 13-template registry and\nteam context profiles.\n\n![AI authoring workbench](docs/screenshot.png)\n\n```bash\n./scripts/cli-preview.sh \"Add user notification preferences\"        # Claude Code CLI\n./scripts/gh-models-preview.sh \"Add user notification preferences\"  # GitHub Models (free)\n```\n\nFull reference: **[docs/WORKFLOWS.md](docs/WORKFLOWS.md)** · **[docs/CLI_SETUP.md](docs/CLI_SETUP.md)** ·\n**[docs/SETUP.md](docs/SETUP.md)** · templates in [templates/](templates/), profiles in\n[team-profiles/](team-profiles/).\n\n## Roadmap\n\nKatastasi is built MVP-first — a releasable phase every 1–2 weeks. Full detail in **[VISION.md](VISION.md)**.\n\n- **Phase 0 ✅** — Rebrand & distribution: rename, npm + Docker + GitHub Action (0.2.0).\n- **Phase 1 ✅** — unified `.acp/` model + switchable local/Jira/hybrid **task tracking** (shipped 0.3.0).\n- **Phase 2 ✅** — requirement-first **acceptance test runner** (HTTP + CLI; shipped 0.4.0). See [docs/ACCEPTANCE.md](docs/ACCEPTANCE.md).\n- **Phase 3 ✅ (v1)** — **bidirectional sync** `.acp/tasks ⇄ GitHub issues / Jira` (3-way reconciler, revision-tracked, conflict-flagging, status round-trip). See [docs/SYNC.md](docs/SYNC.md). *(v2 field-merge, v3 interactive next.)*\n- **Phase 4 —** breadth (pytest/go/cypress, more CI) & polish.\n\n## Free & paid\n\nEverything in this repo is **MIT and free to self-host** — the entire CLI, MCP server, runner, sync, and\nlocal engine. Paid offerings are only: a **hosted cloud** (managed dashboard/collector), **support**, and\n**custom development**.\n\n## Contributing\n\nContributions welcome — see **[CONTRIBUTING.md](CONTRIBUTING.md)**. Good first steps: a new requirement\nsource, a test-framework adapter, or a CI template.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","readmeFilename":"README.md"}