Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/aligned-team_cospec.json
T

1 line
89 KiB
JSON

{"repo": "aligned-team/cospec", "files": {"mise.toml": {"292c9231a6638957fb35fd658b1ec909bed9d328": {"t": 1785745350.349534, "n": 8171, "h": "7a44a75772823343", "c": "min_version = \"2026.4.1\"\nexperimental_monorepo_root = true\n\n[settings]\nexperimental = true\njobs = 8\nlockfile = true\nnpm.package_manager = \"bun\"\n\n[env]\nHK_MISE = \"1\"\nHK_PKL_BACKEND = \"pklr\"\n_.file = [{ path = \".env.local\", redact = true }]\n\n[tools]\nbun = \"1.3.14\"\n# The OpenSpec CLI cospec wraps. This mise entry is a dev/probe convenience; the\n# runtime copy is the pinned `@fission-ai/openspec` package dependency of\n# apps/cli, resolved by path (never $PATH) — see docs/architecture.md.\n\"npm:@fission-ai/openspec\" = \"1.5.0\"\n\"npm:@typescript/native-preview\" = \"7.0.0-dev.20260624.1\"\n\"npm:oxlint\" = \"1.71.0\"\n\"npm:oxfmt\" = \"0.56.0\"\n# Git hooks runner. >= 1.44.2 is required for the pklr cache-freshness fix\n# (jdx/hk#879) so edits to hk.pkl are picked up without a manual `hk cache clear`.\n\"aqua:jdx/hk\" = \"1.48.0\"\n\"aqua:jdx/usage\" = \"3.2.1\"\n# TOML formatter (used by the hk taplo step) — prebuilt binary via aqua. The\n# cargo backend builds from source on every cache miss, which is slow and flakes\n# on transient crates.io download failures. Same upstream, same `taplo` binary.\n\"aqua:tamasfe/taplo\" = \"0.10.0\"\n\"aqua:koalaman/shellcheck\" = \"0.10.0\"\n\"aqua:rhysd/actionlint\" = \"1.7.12\"\n\"aqua:cli/cli\" = \"2.91.0\"\n# Release-only tools (used by .github/workflows/release.yml's version + publish\n# jobs). Pinned like every other tool here — see docs/release.md — so a\n# dispatch is reproducible instead of resolving whatever upstream shipped that\n# day. Prebuilt binaries, no source compile.\n\"aqua:cocogitto/cocogitto\" = \"7.0.0\"\n\"github:jdx/communique\" = \"1.2.0\"\n\n[monorepo]\nconfig_roots = [\"apps/*\"]\n\n# Scripts in scripts/mise-tasks/ are invoked directly by toml tasks\n# (run = \"bash scripts/mise-tasks/...\"). An empty includes list stops mise from\n# auto-discovering them as duplicate tasks, so toml description fields stay\n# authoritative in `mise tasks ls`.\n[task_config]\nincludes = []\n\n[hooks]\npostinstall = \"hk install --mise\"\n\n# ───────────────────────────────────────────────\n# cospec entrypoint\n# ───────────────────────────────────────────────\n\n[tasks.cospec]\ndescription = \"Run cospec from source (mise run cospec -- <args>)\"\nrun = \"bun run apps/cli/src/index.ts --\"\n\n# ───────────────────────────────────────────────\n# Build\n# ───────────────────────────────────────────────\n\n[tasks.build]\ndescription = \"Build the cospec single-file executable (local convenience)\"\nrun = \"mise run //apps/cli:build\"\n\n# ───────────────────────────────────────────────\n# Docs site (VitePress, apps/docs)\n# ───────────────────────────────────────────────\n\n[tasks.\"docs:dev\"]\ndescription = \"Run the docs site dev server (VitePress)\"\nrun = \"bun run --filter @aligned-team/cospec-docs docs:dev\"\n\n[tasks.\"docs:build\"]\ndescription = \"Build the docs site for production (VitePress)\"\nrun = \"bun run --filter @aligned-team/cospec-docs docs:build\"\n\n# ───────────────────────────────────────────────\n# Lint / format\n# ───────────────────────────────────────────────\n\n[tasks.lint]\ndescription = \"Lint all TypeScript/JavaScript with oxlint\"\nrun = \"oxlint .\"\n\n[tasks.\"lint:fix\"]\ndescription = \"Auto-fix lint issues\"\nrun = \"oxlint --fix .\"\n\n[tasks.\"format:check\"]\ndescription = \"Check formatting — exits non-zero if any file differs\"\nrun = \"oxfmt --check .\"\n\n[tasks.\"format:fix\"]\ndescription = \"Format all files in place\"\nrun = \"oxfmt .\"\n\n[tasks.typecheck]\ndescription = \"Type-check all workspaces (apps/*) and the e2e eval sources with tsgo\"\nrun = [\"bun run --filter '*' typecheck\", \"tsgo --noEmit -p e2e/tsconfig.json\"]\n\n# ───────────────────────────────────────────────\n# Test\n# ───────────────────────────────────────────────\n\n# --timeout 30000 gives the subprocess-heavy suites headroom over bun's 5000ms\n# default: contract/integration tests each spawn the real pinned openspec binary\n# (~4.6s apiece) and reliably blow past 5s when `mise run check` runs the suites\n# concurrently. bun has no bunfig timeout key and setDefaultTimeout in a preload\n# does not propagate across files in a directory run, so the flag is set on every\n# `bun test` invocation (these tasks, which hk hooks and CI drive; plus the direct\n# unit run in ci.yml).\n[tasks.test]\ndescription = \"Run unit tests\"\nrun = \"bun test apps/cli/test/unit --timeout 30000\"\n\n[tasks.\"test:contract\"]\ndescription = \"Contract tests against the real pinned openspec binary\"\nrun = \"bun test apps/cli/test/contract --timeout 30000\"\n\n[tasks.\"test:integration\"]\ndescription = \"Integration tests over the 3 repo states + lifecycles\"\nrun = \"bun test apps/cli/test/integration --timeout 30000\"\n\n[tasks.\"test:pack\"]\ndescription = \"Pack smoke: bun pm pack -> tarball install -> bunx cospec\"\nrun = \"bun test apps/cli/test/integration/pack.test.ts --timeout 30000\"\n\n[tasks.\"test:pack:standalone\"]\ndescription = \"Bun-less standalone smoke: build host platform package, npm-install launcher + binary with bun stripped from PATH, run cospec\"\nrun = \"bun test apps/cli/test/integration/pack-standalone.test.ts --timeout 180000\"\n\n[tasks.\"test:release\"]\ndescription = \"Test the release:set-version script against a throwaway --root (no working-tree mutation)\"\nrun = \"bun test e2e/release --timeout 30000\"\n\n# ───────────────────────────────────────────────\n# Generate (canon -> managed files) + drift gate\n# ───────────────────────────────────────────────\n\n[tasks.generate]\ndescription = \"Regenerate managed files from canon (self-repo)\"\nrun = \"mise run cospec -- update\"\n\n[tasks.\"generate:check\"]\ndescription = \"Fail if any managed file drifts from canon (CI/pre-commit gate)\"\nrun = \"mise run cospec -- update --check\"\n\n[tasks.\"vendor:openspec\"]\ndescription = \"Regenerate the vendored self-contained openspec bundle the compiled binary embeds\"\nrun = \"bash scripts/mise-tasks/vendor/openspec\"\n\n[tasks.\"vendor:openspec:check\"]\ndescription = \"Fail if the committed openspec bundle drifts from a fresh build of the pin\"\nrun = \"bash scripts/mise-tasks/vendor/openspec --check\"\n\n[tasks.\"openspec:schema:validate\"]\ndescription = \"Structurally validate each composed schema with the raw openspec CLI\"\nrun = \"\"\"\nset -eu\nfor t in build chore ci docs feat fix perf refactor revert style test; do\n echo \"openspec schema validate $t\"\n openspec schema validate \"$t\"\ndone\n\"\"\"\n\n[tasks.\"cospec-validate-all\"]\ndescription = \"Strictly validate every change and spec in this repo\"\nrun = \"mise run cospec -- validate --all --strict\"\n\n# ───────────────────────────────────────────────\n# Agent context sync\n# ───────────────────────────────────────────────\n\n[tasks.\"agents:sync\"]\ndescription = \"Rewrite the shared block in CLAUDE.md/AGENTS.md from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync\"\n\n[tasks.\"agents:check\"]\ndescription = \"Fail if CLAUDE.md/AGENTS.md drift from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync --check\"\n\n# ───────────────────────────────────────────────\n# Commit / PR title linting\n# ───────────────────────────────────────────────\n\n[tasks.\"commit:check-title\"]\ndescription = \"Lint a PR/commit title (PR_TITLE env) against commitlint\"\nrun = 'printf \"%s\\n\" \"$PR_TITLE\" | bunx commitlint'\n\n# ───────────────────────────────────────────────\n# E2E eval (optional; exit-0 skip without DEEPSEEK_API_KEY)\n# ───────────────────────────────────────────────\n\n[tasks.\"eval:e2e\"]\ndescription = \"DeepSeek E2E eval of the shipped skills (advisory, never gates CI)\"\nrun = \"bun run e2e/eval/run.ts\"\n\n# ───────────────────────────────────────────────\n# Release\n# ───────────────────────────────────────────────\n\n[tasks.\"release:set-version\"]\ndescription = \"Stamp ONE release version (semver) into apps/cli/package.json and its bun.lock workspace entry. Idempotent. Usage: mise run release:set-version -- 1.2.3\"\nrun = \"bash scripts/mise-tasks/release/set-version\"\n\n# ───────────────────────────────────────────────\n# Composed CI gate\n# ───────────────────────────────────────────────\n\n[tasks.check]\ndescription = \"Full CI gate: lint + format + typecheck + tests + drift + openspec validation\"\ndepends = [\n \"lint\",\n \"format:check\",\n \"typecheck\",\n \"test\",\n \"test:contract\",\n \"test:integration\",\n \"test:release\",\n \"generate:check\",\n \"vendor:openspec:check\",\n \"agents:check\",\n \"cospec-validate-all\",\n \"openspec:schema:validate\",\n]\n"}, "29419a086b18107c93956cbcb176cee85faf8a41": {"t": 1785750585.172304, "n": 8171, "h": "7a44a75772823343", "c": "min_version = \"2026.4.1\"\nexperimental_monorepo_root = true\n\n[settings]\nexperimental = true\njobs = 8\nlockfile = true\nnpm.package_manager = \"bun\"\n\n[env]\nHK_MISE = \"1\"\nHK_PKL_BACKEND = \"pklr\"\n_.file = [{ path = \".env.local\", redact = true }]\n\n[tools]\nbun = \"1.3.14\"\n# The OpenSpec CLI cospec wraps. This mise entry is a dev/probe convenience; the\n# runtime copy is the pinned `@fission-ai/openspec` package dependency of\n# apps/cli, resolved by path (never $PATH) — see docs/architecture.md.\n\"npm:@fission-ai/openspec\" = \"1.5.0\"\n\"npm:@typescript/native-preview\" = \"7.0.0-dev.20260624.1\"\n\"npm:oxlint\" = \"1.71.0\"\n\"npm:oxfmt\" = \"0.56.0\"\n# Git hooks runner. >= 1.44.2 is required for the pklr cache-freshness fix\n# (jdx/hk#879) so edits to hk.pkl are picked up without a manual `hk cache clear`.\n\"aqua:jdx/hk\" = \"1.48.0\"\n\"aqua:jdx/usage\" = \"3.2.1\"\n# TOML formatter (used by the hk taplo step) — prebuilt binary via aqua. The\n# cargo backend builds from source on every cache miss, which is slow and flakes\n# on transient crates.io download failures. Same upstream, same `taplo` binary.\n\"aqua:tamasfe/taplo\" = \"0.10.0\"\n\"aqua:koalaman/shellcheck\" = \"0.10.0\"\n\"aqua:rhysd/actionlint\" = \"1.7.12\"\n\"aqua:cli/cli\" = \"2.91.0\"\n# Release-only tools (used by .github/workflows/release.yml's version + publish\n# jobs). Pinned like every other tool here — see docs/release.md — so a\n# dispatch is reproducible instead of resolving whatever upstream shipped that\n# day. Prebuilt binaries, no source compile.\n\"aqua:cocogitto/cocogitto\" = \"7.0.0\"\n\"github:jdx/communique\" = \"1.2.0\"\n\n[monorepo]\nconfig_roots = [\"apps/*\"]\n\n# Scripts in scripts/mise-tasks/ are invoked directly by toml tasks\n# (run = \"bash scripts/mise-tasks/...\"). An empty includes list stops mise from\n# auto-discovering them as duplicate tasks, so toml description fields stay\n# authoritative in `mise tasks ls`.\n[task_config]\nincludes = []\n\n[hooks]\npostinstall = \"hk install --mise\"\n\n# ───────────────────────────────────────────────\n# cospec entrypoint\n# ───────────────────────────────────────────────\n\n[tasks.cospec]\ndescription = \"Run cospec from source (mise run cospec -- <args>)\"\nrun = \"bun run apps/cli/src/index.ts --\"\n\n# ───────────────────────────────────────────────\n# Build\n# ───────────────────────────────────────────────\n\n[tasks.build]\ndescription = \"Build the cospec single-file executable (local convenience)\"\nrun = \"mise run //apps/cli:build\"\n\n# ───────────────────────────────────────────────\n# Docs site (VitePress, apps/docs)\n# ───────────────────────────────────────────────\n\n[tasks.\"docs:dev\"]\ndescription = \"Run the docs site dev server (VitePress)\"\nrun = \"bun run --filter @aligned-team/cospec-docs docs:dev\"\n\n[tasks.\"docs:build\"]\ndescription = \"Build the docs site for production (VitePress)\"\nrun = \"bun run --filter @aligned-team/cospec-docs docs:build\"\n\n# ───────────────────────────────────────────────\n# Lint / format\n# ───────────────────────────────────────────────\n\n[tasks.lint]\ndescription = \"Lint all TypeScript/JavaScript with oxlint\"\nrun = \"oxlint .\"\n\n[tasks.\"lint:fix\"]\ndescription = \"Auto-fix lint issues\"\nrun = \"oxlint --fix .\"\n\n[tasks.\"format:check\"]\ndescription = \"Check formatting — exits non-zero if any file differs\"\nrun = \"oxfmt --check .\"\n\n[tasks.\"format:fix\"]\ndescription = \"Format all files in place\"\nrun = \"oxfmt .\"\n\n[tasks.typecheck]\ndescription = \"Type-check all workspaces (apps/*) and the e2e eval sources with tsgo\"\nrun = [\"bun run --filter '*' typecheck\", \"tsgo --noEmit -p e2e/tsconfig.json\"]\n\n# ───────────────────────────────────────────────\n# Test\n# ───────────────────────────────────────────────\n\n# --timeout 30000 gives the subprocess-heavy suites headroom over bun's 5000ms\n# default: contract/integration tests each spawn the real pinned openspec binary\n# (~4.6s apiece) and reliably blow past 5s when `mise run check` runs the suites\n# concurrently. bun has no bunfig timeout key and setDefaultTimeout in a preload\n# does not propagate across files in a directory run, so the flag is set on every\n# `bun test` invocation (these tasks, which hk hooks and CI drive; plus the direct\n# unit run in ci.yml).\n[tasks.test]\ndescription = \"Run unit tests\"\nrun = \"bun test apps/cli/test/unit --timeout 30000\"\n\n[tasks.\"test:contract\"]\ndescription = \"Contract tests against the real pinned openspec binary\"\nrun = \"bun test apps/cli/test/contract --timeout 30000\"\n\n[tasks.\"test:integration\"]\ndescription = \"Integration tests over the 3 repo states + lifecycles\"\nrun = \"bun test apps/cli/test/integration --timeout 30000\"\n\n[tasks.\"test:pack\"]\ndescription = \"Pack smoke: bun pm pack -> tarball install -> bunx cospec\"\nrun = \"bun test apps/cli/test/integration/pack.test.ts --timeout 30000\"\n\n[tasks.\"test:pack:standalone\"]\ndescription = \"Bun-less standalone smoke: build host platform package, npm-install launcher + binary with bun stripped from PATH, run cospec\"\nrun = \"bun test apps/cli/test/integration/pack-standalone.test.ts --timeout 180000\"\n\n[tasks.\"test:release\"]\ndescription = \"Test the release:set-version script against a throwaway --root (no working-tree mutation)\"\nrun = \"bun test e2e/release --timeout 30000\"\n\n# ───────────────────────────────────────────────\n# Generate (canon -> managed files) + drift gate\n# ───────────────────────────────────────────────\n\n[tasks.generate]\ndescription = \"Regenerate managed files from canon (self-repo)\"\nrun = \"mise run cospec -- update\"\n\n[tasks.\"generate:check\"]\ndescription = \"Fail if any managed file drifts from canon (CI/pre-commit gate)\"\nrun = \"mise run cospec -- update --check\"\n\n[tasks.\"vendor:openspec\"]\ndescription = \"Regenerate the vendored self-contained openspec bundle the compiled binary embeds\"\nrun = \"bash scripts/mise-tasks/vendor/openspec\"\n\n[tasks.\"vendor:openspec:check\"]\ndescription = \"Fail if the committed openspec bundle drifts from a fresh build of the pin\"\nrun = \"bash scripts/mise-tasks/vendor/openspec --check\"\n\n[tasks.\"openspec:schema:validate\"]\ndescription = \"Structurally validate each composed schema with the raw openspec CLI\"\nrun = \"\"\"\nset -eu\nfor t in build chore ci docs feat fix perf refactor revert style test; do\n echo \"openspec schema validate $t\"\n openspec schema validate \"$t\"\ndone\n\"\"\"\n\n[tasks.\"cospec-validate-all\"]\ndescription = \"Strictly validate every change and spec in this repo\"\nrun = \"mise run cospec -- validate --all --strict\"\n\n# ───────────────────────────────────────────────\n# Agent context sync\n# ───────────────────────────────────────────────\n\n[tasks.\"agents:sync\"]\ndescription = \"Rewrite the shared block in CLAUDE.md/AGENTS.md from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync\"\n\n[tasks.\"agents:check\"]\ndescription = \"Fail if CLAUDE.md/AGENTS.md drift from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync --check\"\n\n# ───────────────────────────────────────────────\n# Commit / PR title linting\n# ───────────────────────────────────────────────\n\n[tasks.\"commit:check-title\"]\ndescription = \"Lint a PR/commit title (PR_TITLE env) against commitlint\"\nrun = 'printf \"%s\\n\" \"$PR_TITLE\" | bunx commitlint'\n\n# ───────────────────────────────────────────────\n# E2E eval (optional; exit-0 skip without DEEPSEEK_API_KEY)\n# ───────────────────────────────────────────────\n\n[tasks.\"eval:e2e\"]\ndescription = \"DeepSeek E2E eval of the shipped skills (advisory, never gates CI)\"\nrun = \"bun run e2e/eval/run.ts\"\n\n# ───────────────────────────────────────────────\n# Release\n# ───────────────────────────────────────────────\n\n[tasks.\"release:set-version\"]\ndescription = \"Stamp ONE release version (semver) into apps/cli/package.json and its bun.lock workspace entry. Idempotent. Usage: mise run release:set-version -- 1.2.3\"\nrun = \"bash scripts/mise-tasks/release/set-version\"\n\n# ───────────────────────────────────────────────\n# Composed CI gate\n# ───────────────────────────────────────────────\n\n[tasks.check]\ndescription = \"Full CI gate: lint + format + typecheck + tests + drift + openspec validation\"\ndepends = [\n \"lint\",\n \"format:check\",\n \"typecheck\",\n \"test\",\n \"test:contract\",\n \"test:integration\",\n \"test:release\",\n \"generate:check\",\n \"vendor:openspec:check\",\n \"agents:check\",\n \"cospec-validate-all\",\n \"openspec:schema:validate\",\n]\n"}, "492d6ecfd41160bc517ba11a71a747f497940906": {"t": 1785750586.2599344, "n": 7751, "h": "36d469ddfe2bf2aa", "c": "min_version = \"2026.4.1\"\nexperimental_monorepo_root = true\n\n[settings]\nexperimental = true\njobs = 8\nlockfile = true\nnpm.package_manager = \"bun\"\n\n[env]\nHK_MISE = \"1\"\nHK_PKL_BACKEND = \"pklr\"\n_.file = [{ path = \".env.local\", redact = true }]\n\n[tools]\nbun = \"1.3.14\"\n# The OpenSpec CLI cospec wraps. This mise entry is a dev/probe convenience; the\n# runtime copy is the pinned `@fission-ai/openspec` package dependency of\n# apps/cli, resolved by path (never $PATH) — see docs/architecture.md.\n\"npm:@fission-ai/openspec\" = \"1.5.0\"\n\"npm:@typescript/native-preview\" = \"7.0.0-dev.20260624.1\"\n\"npm:oxlint\" = \"1.71.0\"\n\"npm:oxfmt\" = \"0.56.0\"\n# Git hooks runner. >= 1.44.2 is required for the pklr cache-freshness fix\n# (jdx/hk#879) so edits to hk.pkl are picked up without a manual `hk cache clear`.\n\"aqua:jdx/hk\" = \"1.48.0\"\n\"aqua:jdx/usage\" = \"3.2.1\"\n# TOML formatter (used by the hk taplo step) — prebuilt binary via aqua. The\n# cargo backend builds from source on every cache miss, which is slow and flakes\n# on transient crates.io download failures. Same upstream, same `taplo` binary.\n\"aqua:tamasfe/taplo\" = \"0.10.0\"\n\"aqua:koalaman/shellcheck\" = \"0.10.0\"\n\"aqua:rhysd/actionlint\" = \"1.7.12\"\n\"aqua:cli/cli\" = \"2.91.0\"\n# Release-only tools (used by .github/workflows/release.yml's version + publish\n# jobs). Pinned like every other tool here — see docs/release.md — so a\n# dispatch is reproducible instead of resolving whatever upstream shipped that\n# day. Prebuilt binaries, no source compile.\n\"aqua:cocogitto/cocogitto\" = \"7.0.0\"\n\"github:jdx/communique\" = \"1.2.0\"\n\n[monorepo]\nconfig_roots = [\"apps/*\"]\n\n# Scripts in scripts/mise-tasks/ are invoked directly by toml tasks\n# (run = \"bash scripts/mise-tasks/...\"). An empty includes list stops mise from\n# auto-discovering them as duplicate tasks, so toml description fields stay\n# authoritative in `mise tasks ls`.\n[task_config]\nincludes = []\n\n[hooks]\npostinstall = \"hk install --mise\"\n\n# ───────────────────────────────────────────────\n# cospec entrypoint\n# ───────────────────────────────────────────────\n\n[tasks.cospec]\ndescription = \"Run cospec from source (mise run cospec -- <args>)\"\nrun = \"bun run apps/cli/src/index.ts --\"\n\n# ───────────────────────────────────────────────\n# Build\n# ───────────────────────────────────────────────\n\n[tasks.build]\ndescription = \"Build the cospec single-file executable (local convenience)\"\nrun = \"mise run //apps/cli:build\"\n\n# ───────────────────────────────────────────────\n# Lint / format\n# ───────────────────────────────────────────────\n\n[tasks.lint]\ndescription = \"Lint all TypeScript/JavaScript with oxlint\"\nrun = \"oxlint .\"\n\n[tasks.\"lint:fix\"]\ndescription = \"Auto-fix lint issues\"\nrun = \"oxlint --fix .\"\n\n[tasks.\"format:check\"]\ndescription = \"Check formatting — exits non-zero if any file differs\"\nrun = \"oxfmt --check .\"\n\n[tasks.\"format:fix\"]\ndescription = \"Format all files in place\"\nrun = \"oxfmt .\"\n\n[tasks.typecheck]\ndescription = \"Type-check all workspaces (apps/*) and the e2e eval sources with tsgo\"\nrun = [\"bun run --filter '*' typecheck\", \"tsgo --noEmit -p e2e/tsconfig.json\"]\n\n# ───────────────────────────────────────────────\n# Test\n# ───────────────────────────────────────────────\n\n# --timeout 30000 gives the subprocess-heavy suites headroom over bun's 5000ms\n# default: contract/integration tests each spawn the real pinned openspec binary\n# (~4.6s apiece) and reliably blow past 5s when `mise run check` runs the suites\n# concurrently. bun has no bunfig timeout key and setDefaultTimeout in a preload\n# does not propagate across files in a directory run, so the flag is set on every\n# `bun test` invocation (these tasks, which hk hooks and CI drive; plus the direct\n# unit run in ci.yml).\n[tasks.test]\ndescription = \"Run unit tests\"\nrun = \"bun test apps/cli/test/unit --timeout 30000\"\n\n[tasks.\"test:contract\"]\ndescription = \"Contract tests against the real pinned openspec binary\"\nrun = \"bun test apps/cli/test/contract --timeout 30000\"\n\n[tasks.\"test:integration\"]\ndescription = \"Integration tests over the 3 repo states + lifecycles\"\nrun = \"bun test apps/cli/test/integration --timeout 30000\"\n\n[tasks.\"test:pack\"]\ndescription = \"Pack smoke: bun pm pack -> tarball install -> bunx cospec\"\nrun = \"bun test apps/cli/test/integration/pack.test.ts --timeout 30000\"\n\n[tasks.\"test:pack:standalone\"]\ndescription = \"Bun-less standalone smoke: build host platform package, npm-install launcher + binary with bun stripped from PATH, run cospec\"\nrun = \"bun test apps/cli/test/integration/pack-standalone.test.ts --timeout 180000\"\n\n[tasks.\"test:release\"]\ndescription = \"Test the release:set-version script against a throwaway --root (no working-tree mutation)\"\nrun = \"bun test e2e/release --timeout 30000\"\n\n# ───────────────────────────────────────────────\n# Generate (canon -> managed files) + drift gate\n# ───────────────────────────────────────────────\n\n[tasks.generate]\ndescription = \"Regenerate managed files from canon (self-repo)\"\nrun = \"mise run cospec -- update\"\n\n[tasks.\"generate:check\"]\ndescription = \"Fail if any managed file drifts from canon (CI/pre-commit gate)\"\nrun = \"mise run cospec -- update --check\"\n\n[tasks.\"vendor:openspec\"]\ndescription = \"Regenerate the vendored self-contained openspec bundle the compiled binary embeds\"\nrun = \"bash scripts/mise-tasks/vendor/openspec\"\n\n[tasks.\"vendor:openspec:check\"]\ndescription = \"Fail if the committed openspec bundle drifts from a fresh build of the pin\"\nrun = \"bash scripts/mise-tasks/vendor/openspec --check\"\n\n[tasks.\"openspec:schema:validate\"]\ndescription = \"Structurally validate each composed schema with the raw openspec CLI\"\nrun = \"\"\"\nset -eu\nfor t in build chore ci docs feat fix perf refactor revert style test; do\n echo \"openspec schema validate $t\"\n openspec schema validate \"$t\"\ndone\n\"\"\"\n\n[tasks.\"cospec-validate-all\"]\ndescription = \"Strictly validate every change and spec in this repo\"\nrun = \"mise run cospec -- validate --all --strict\"\n\n# ───────────────────────────────────────────────\n# Agent context sync\n# ───────────────────────────────────────────────\n\n[tasks.\"agents:sync\"]\ndescription = \"Rewrite the shared block in CLAUDE.md/AGENTS.md from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync\"\n\n[tasks.\"agents:check\"]\ndescription = \"Fail if CLAUDE.md/AGENTS.md drift from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync --check\"\n\n# ───────────────────────────────────────────────\n# Commit / PR title linting\n# ───────────────────────────────────────────────\n\n[tasks.\"commit:check-title\"]\ndescription = \"Lint a PR/commit title (PR_TITLE env) against commitlint\"\nrun = 'printf \"%s\\n\" \"$PR_TITLE\" | bunx commitlint'\n\n# ───────────────────────────────────────────────\n# E2E eval (optional; exit-0 skip without DEEPSEEK_API_KEY)\n# ───────────────────────────────────────────────\n\n[tasks.\"eval:e2e\"]\ndescription = \"DeepSeek E2E eval of the shipped skills (advisory, never gates CI)\"\nrun = \"bun run e2e/eval/run.ts\"\n\n# ───────────────────────────────────────────────\n# Release\n# ───────────────────────────────────────────────\n\n[tasks.\"release:set-version\"]\ndescription = \"Stamp ONE release version (semver) into apps/cli/package.json and its bun.lock workspace entry. Idempotent. Usage: mise run release:set-version -- 1.2.3\"\nrun = \"bash scripts/mise-tasks/release/set-version\"\n\n# ───────────────────────────────────────────────\n# Composed CI gate\n# ───────────────────────────────────────────────\n\n[tasks.check]\ndescription = \"Full CI gate: lint + format + typecheck + tests + drift + openspec validation\"\ndepends = [\n \"lint\",\n \"format:check\",\n \"typecheck\",\n \"test\",\n \"test:contract\",\n \"test:integration\",\n \"test:release\",\n \"generate:check\",\n \"vendor:openspec:check\",\n \"agents:check\",\n \"cospec-validate-all\",\n \"openspec:schema:validate\",\n]\n"}, "2385f0c8a292cce040f54ba465d3ac6fc6ead813": {"t": 1785750587.3686368, "n": 7371, "h": "829dcce2e864b806", "c": "min_version = \"2026.4.1\"\nexperimental_monorepo_root = true\n\n[settings]\nexperimental = true\njobs = 8\nlockfile = true\nnpm.package_manager = \"bun\"\n\n[env]\nHK_MISE = \"1\"\nHK_PKL_BACKEND = \"pklr\"\n_.file = [{ path = \".env.local\", redact = true }]\n\n[tools]\nbun = \"1.3.14\"\n# The OpenSpec CLI cospec wraps. This mise entry is a dev/probe convenience; the\n# runtime copy is the pinned `@fission-ai/openspec` package dependency of\n# apps/cli, resolved by path (never $PATH) — see docs/architecture.md.\n\"npm:@fission-ai/openspec\" = \"1.5.0\"\n\"npm:@typescript/native-preview\" = \"7.0.0-dev.20260624.1\"\n\"npm:oxlint\" = \"1.71.0\"\n\"npm:oxfmt\" = \"0.56.0\"\n# Git hooks runner. >= 1.44.2 is required for the pklr cache-freshness fix\n# (jdx/hk#879) so edits to hk.pkl are picked up without a manual `hk cache clear`.\n\"aqua:jdx/hk\" = \"1.48.0\"\n\"aqua:jdx/usage\" = \"3.2.1\"\n# TOML formatter (used by the hk taplo step) — prebuilt binary via aqua. The\n# cargo backend builds from source on every cache miss, which is slow and flakes\n# on transient crates.io download failures. Same upstream, same `taplo` binary.\n\"aqua:tamasfe/taplo\" = \"0.10.0\"\n\"aqua:koalaman/shellcheck\" = \"0.10.0\"\n\"aqua:rhysd/actionlint\" = \"1.7.12\"\n\"aqua:cli/cli\" = \"2.91.0\"\n# Release-only tools (used by .github/workflows/release.yml's version + publish\n# jobs). Pinned like every other tool here — see docs/release.md — so a\n# dispatch is reproducible instead of resolving whatever upstream shipped that\n# day. Prebuilt binaries, no source compile.\n\"aqua:cocogitto/cocogitto\" = \"7.0.0\"\n\"github:jdx/communique\" = \"1.2.0\"\n\n[monorepo]\nconfig_roots = [\"apps/*\"]\n\n# Scripts in scripts/mise-tasks/ are invoked directly by toml tasks\n# (run = \"bash scripts/mise-tasks/...\"). An empty includes list stops mise from\n# auto-discovering them as duplicate tasks, so toml description fields stay\n# authoritative in `mise tasks ls`.\n[task_config]\nincludes = []\n\n[hooks]\npostinstall = \"hk install --mise\"\n\n# ───────────────────────────────────────────────\n# cospec entrypoint\n# ───────────────────────────────────────────────\n\n[tasks.cospec]\ndescription = \"Run cospec from source (mise run cospec -- <args>)\"\nrun = \"bun run apps/cli/src/index.ts --\"\n\n# ───────────────────────────────────────────────\n# Build\n# ───────────────────────────────────────────────\n\n[tasks.build]\ndescription = \"Build the cospec single-file executable (local convenience)\"\nrun = \"mise run //apps/cli:build\"\n\n# ───────────────────────────────────────────────\n# Lint / format\n# ───────────────────────────────────────────────\n\n[tasks.lint]\ndescription = \"Lint all TypeScript/JavaScript with oxlint\"\nrun = \"oxlint .\"\n\n[tasks.\"lint:fix\"]\ndescription = \"Auto-fix lint issues\"\nrun = \"oxlint --fix .\"\n\n[tasks.\"format:check\"]\ndescription = \"Check formatting — exits non-zero if any file differs\"\nrun = \"oxfmt --check .\"\n\n[tasks.\"format:fix\"]\ndescription = \"Format all files in place\"\nrun = \"oxfmt .\"\n\n[tasks.typecheck]\ndescription = \"Type-check all workspaces (apps/*) and the e2e eval sources with tsgo\"\nrun = [\"bun run --filter '*' typecheck\", \"tsgo --noEmit -p e2e/tsconfig.json\"]\n\n# ───────────────────────────────────────────────\n# Test\n# ───────────────────────────────────────────────\n\n# --timeout 30000 gives the subprocess-heavy suites headroom over bun's 5000ms\n# default: contract/integration tests each spawn the real pinned openspec binary\n# (~4.6s apiece) and reliably blow past 5s when `mise run check` runs the suites\n# concurrently. bun has no bunfig timeout key and setDefaultTimeout in a preload\n# does not propagate across files in a directory run, so the flag is set on every\n# `bun test` invocation (these tasks, which hk hooks and CI drive; plus the direct\n# unit run in ci.yml).\n[tasks.test]\ndescription = \"Run unit tests\"\nrun = \"bun test apps/cli/test/unit --timeout 30000\"\n\n[tasks.\"test:contract\"]\ndescription = \"Contract tests against the real pinned openspec binary\"\nrun = \"bun test apps/cli/test/contract --timeout 30000\"\n\n[tasks.\"test:integration\"]\ndescription = \"Integration tests over the 3 repo states + lifecycles\"\nrun = \"bun test apps/cli/test/integration --timeout 30000\"\n\n[tasks.\"test:pack\"]\ndescription = \"Pack smoke: bun pm pack -> tarball install -> bunx cospec\"\nrun = \"bun test apps/cli/test/integration/pack.test.ts --timeout 30000\"\n\n[tasks.\"test:pack:standalone\"]\ndescription = \"Bun-less standalone smoke: build host platform package, npm-install launcher + binary with bun stripped from PATH, run cospec\"\nrun = \"bun test apps/cli/test/integration/pack-standalone.test.ts --timeout 180000\"\n\n[tasks.\"test:release\"]\ndescription = \"Test the release:set-version script against a throwaway --root (no working-tree mutation)\"\nrun = \"bun test e2e/release --timeout 30000\"\n\n# ───────────────────────────────────────────────\n# Generate (canon -> managed files) + drift gate\n# ───────────────────────────────────────────────\n\n[tasks.generate]\ndescription = \"Regenerate managed files from canon (self-repo)\"\nrun = \"mise run cospec -- update\"\n\n[tasks.\"generate:check\"]\ndescription = \"Fail if any managed file drifts from canon (CI/pre-commit gate)\"\nrun = \"mise run cospec -- update --check\"\n\n[tasks.\"openspec:schema:validate\"]\ndescription = \"Structurally validate each composed schema with the raw openspec CLI\"\nrun = \"\"\"\nset -eu\nfor t in build chore ci docs feat fix perf refactor revert style test; do\n echo \"openspec schema validate $t\"\n openspec schema validate \"$t\"\ndone\n\"\"\"\n\n[tasks.\"cospec-validate-all\"]\ndescription = \"Strictly validate every change and spec in this repo\"\nrun = \"mise run cospec -- validate --all --strict\"\n\n# ───────────────────────────────────────────────\n# Agent context sync\n# ───────────────────────────────────────────────\n\n[tasks.\"agents:sync\"]\ndescription = \"Rewrite the shared block in CLAUDE.md/AGENTS.md from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync\"\n\n[tasks.\"agents:check\"]\ndescription = \"Fail if CLAUDE.md/AGENTS.md drift from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync --check\"\n\n# ───────────────────────────────────────────────\n# Commit / PR title linting\n# ───────────────────────────────────────────────\n\n[tasks.\"commit:check-title\"]\ndescription = \"Lint a PR/commit title (PR_TITLE env) against commitlint\"\nrun = 'printf \"%s\\n\" \"$PR_TITLE\" | bunx commitlint'\n\n# ───────────────────────────────────────────────\n# E2E eval (optional; exit-0 skip without DEEPSEEK_API_KEY)\n# ───────────────────────────────────────────────\n\n[tasks.\"eval:e2e\"]\ndescription = \"DeepSeek E2E eval of the shipped skills (advisory, never gates CI)\"\nrun = \"bun run e2e/eval/run.ts\"\n\n# ───────────────────────────────────────────────\n# Release\n# ───────────────────────────────────────────────\n\n[tasks.\"release:set-version\"]\ndescription = \"Stamp ONE release version (semver) into apps/cli/package.json and its bun.lock workspace entry. Idempotent. Usage: mise run release:set-version -- 1.2.3\"\nrun = \"bash scripts/mise-tasks/release/set-version\"\n\n# ───────────────────────────────────────────────\n# Composed CI gate\n# ───────────────────────────────────────────────\n\n[tasks.check]\ndescription = \"Full CI gate: lint + format + typecheck + tests + drift + openspec validation\"\ndepends = [\n \"lint\",\n \"format:check\",\n \"typecheck\",\n \"test\",\n \"test:contract\",\n \"test:integration\",\n \"test:release\",\n \"generate:check\",\n \"agents:check\",\n \"cospec-validate-all\",\n \"openspec:schema:validate\",\n]\n"}, "9769b5c9e91351e2238132fd898f23536c2e5274": {"t": 1785750588.4797757, "n": 7113, "h": "d4bf52266c5ecfdb", "c": "min_version = \"2026.4.1\"\nexperimental_monorepo_root = true\n\n[settings]\nexperimental = true\njobs = 8\nlockfile = true\nnpm.package_manager = \"bun\"\n\n[env]\nHK_MISE = \"1\"\nHK_PKL_BACKEND = \"pklr\"\n_.file = [{ path = \".env.local\", redact = true }]\n\n[tools]\nbun = \"1.3.14\"\n# The OpenSpec CLI cospec wraps. This mise entry is a dev/probe convenience; the\n# runtime copy is the pinned `@fission-ai/openspec` package dependency of\n# apps/cli, resolved by path (never $PATH) — see docs/architecture.md.\n\"npm:@fission-ai/openspec\" = \"1.5.0\"\n\"npm:@typescript/native-preview\" = \"7.0.0-dev.20260624.1\"\n\"npm:oxlint\" = \"1.71.0\"\n\"npm:oxfmt\" = \"0.56.0\"\n# Git hooks runner. >= 1.44.2 is required for the pklr cache-freshness fix\n# (jdx/hk#879) so edits to hk.pkl are picked up without a manual `hk cache clear`.\n\"aqua:jdx/hk\" = \"1.48.0\"\n\"aqua:jdx/usage\" = \"3.2.1\"\n# TOML formatter (used by the hk taplo step) — prebuilt binary via aqua. The\n# cargo backend builds from source on every cache miss, which is slow and flakes\n# on transient crates.io download failures. Same upstream, same `taplo` binary.\n\"aqua:tamasfe/taplo\" = \"0.10.0\"\n\"aqua:koalaman/shellcheck\" = \"0.10.0\"\n\"aqua:rhysd/actionlint\" = \"1.7.12\"\n\"aqua:cli/cli\" = \"2.91.0\"\n# Release-only tools (used by .github/workflows/release.yml's version + publish\n# jobs). Pinned like every other tool here — see docs/release.md — so a\n# dispatch is reproducible instead of resolving whatever upstream shipped that\n# day. Prebuilt binaries, no source compile.\n\"aqua:cocogitto/cocogitto\" = \"7.0.0\"\n\"github:jdx/communique\" = \"1.2.0\"\n\n[monorepo]\nconfig_roots = [\"apps/*\"]\n\n# Scripts in scripts/mise-tasks/ are invoked directly by toml tasks\n# (run = \"bash scripts/mise-tasks/...\"). An empty includes list stops mise from\n# auto-discovering them as duplicate tasks, so toml description fields stay\n# authoritative in `mise tasks ls`.\n[task_config]\nincludes = []\n\n[hooks]\npostinstall = \"hk install --mise\"\n\n# ───────────────────────────────────────────────\n# cospec entrypoint\n# ───────────────────────────────────────────────\n\n[tasks.cospec]\ndescription = \"Run cospec from source (mise run cospec -- <args>)\"\nrun = \"bun run apps/cli/src/index.ts --\"\n\n# ───────────────────────────────────────────────\n# Build\n# ───────────────────────────────────────────────\n\n[tasks.build]\ndescription = \"Build the cospec single-file executable (local convenience)\"\nrun = \"mise run //apps/cli:build\"\n\n# ───────────────────────────────────────────────\n# Lint / format\n# ───────────────────────────────────────────────\n\n[tasks.lint]\ndescription = \"Lint all TypeScript/JavaScript with oxlint\"\nrun = \"oxlint .\"\n\n[tasks.\"lint:fix\"]\ndescription = \"Auto-fix lint issues\"\nrun = \"oxlint --fix .\"\n\n[tasks.\"format:check\"]\ndescription = \"Check formatting — exits non-zero if any file differs\"\nrun = \"oxfmt --check .\"\n\n[tasks.\"format:fix\"]\ndescription = \"Format all files in place\"\nrun = \"oxfmt .\"\n\n[tasks.typecheck]\ndescription = \"Type-check all workspaces (apps/*) and the e2e eval sources with tsgo\"\nrun = [\"bun run --filter '*' typecheck\", \"tsgo --noEmit -p e2e/tsconfig.json\"]\n\n# ───────────────────────────────────────────────\n# Test\n# ───────────────────────────────────────────────\n\n# --timeout 30000 gives the subprocess-heavy suites headroom over bun's 5000ms\n# default: contract/integration tests each spawn the real pinned openspec binary\n# (~4.6s apiece) and reliably blow past 5s when `mise run check` runs the suites\n# concurrently. bun has no bunfig timeout key and setDefaultTimeout in a preload\n# does not propagate across files in a directory run, so the flag is set on every\n# `bun test` invocation (these tasks, which hk hooks and CI drive; plus the direct\n# unit run in ci.yml).\n[tasks.test]\ndescription = \"Run unit tests\"\nrun = \"bun test apps/cli/test/unit --timeout 30000\"\n\n[tasks.\"test:contract\"]\ndescription = \"Contract tests against the real pinned openspec binary\"\nrun = \"bun test apps/cli/test/contract --timeout 30000\"\n\n[tasks.\"test:integration\"]\ndescription = \"Integration tests over the 3 repo states + lifecycles\"\nrun = \"bun test apps/cli/test/integration --timeout 30000\"\n\n[tasks.\"test:pack\"]\ndescription = \"Pack smoke: bun pm pack -> tarball install -> bunx cospec\"\nrun = \"bun test apps/cli/test/integration/pack.test.ts --timeout 30000\"\n\n[tasks.\"test:release\"]\ndescription = \"Test the release:set-version script against a throwaway --root (no working-tree mutation)\"\nrun = \"bun test e2e/release --timeout 30000\"\n\n# ───────────────────────────────────────────────\n# Generate (canon -> managed files) + drift gate\n# ───────────────────────────────────────────────\n\n[tasks.generate]\ndescription = \"Regenerate managed files from canon (self-repo)\"\nrun = \"mise run cospec -- update\"\n\n[tasks.\"generate:check\"]\ndescription = \"Fail if any managed file drifts from canon (CI/pre-commit gate)\"\nrun = \"mise run cospec -- update --check\"\n\n[tasks.\"openspec:schema:validate\"]\ndescription = \"Structurally validate each composed schema with the raw openspec CLI\"\nrun = \"\"\"\nset -eu\nfor t in build chore ci docs feat fix perf refactor revert style test; do\n echo \"openspec schema validate $t\"\n openspec schema validate \"$t\"\ndone\n\"\"\"\n\n[tasks.\"cospec-validate-all\"]\ndescription = \"Strictly validate every change and spec in this repo\"\nrun = \"mise run cospec -- validate --all --strict\"\n\n# ───────────────────────────────────────────────\n# Agent context sync\n# ───────────────────────────────────────────────\n\n[tasks.\"agents:sync\"]\ndescription = \"Rewrite the shared block in CLAUDE.md/AGENTS.md from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync\"\n\n[tasks.\"agents:check\"]\ndescription = \"Fail if CLAUDE.md/AGENTS.md drift from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync --check\"\n\n# ───────────────────────────────────────────────\n# Commit / PR title linting\n# ───────────────────────────────────────────────\n\n[tasks.\"commit:check-title\"]\ndescription = \"Lint a PR/commit title (PR_TITLE env) against commitlint\"\nrun = 'printf \"%s\\n\" \"$PR_TITLE\" | bunx commitlint'\n\n# ───────────────────────────────────────────────\n# E2E eval (optional; exit-0 skip without DEEPSEEK_API_KEY)\n# ───────────────────────────────────────────────\n\n[tasks.\"eval:e2e\"]\ndescription = \"DeepSeek E2E eval of the shipped skills (advisory, never gates CI)\"\nrun = \"bun run e2e/eval/run.ts\"\n\n# ───────────────────────────────────────────────\n# Release\n# ───────────────────────────────────────────────\n\n[tasks.\"release:set-version\"]\ndescription = \"Stamp ONE release version (semver) into apps/cli/package.json and its bun.lock workspace entry. Idempotent. Usage: mise run release:set-version -- 1.2.3\"\nrun = \"bash scripts/mise-tasks/release/set-version\"\n\n# ───────────────────────────────────────────────\n# Composed CI gate\n# ───────────────────────────────────────────────\n\n[tasks.check]\ndescription = \"Full CI gate: lint + format + typecheck + tests + drift + openspec validation\"\ndepends = [\n \"lint\",\n \"format:check\",\n \"typecheck\",\n \"test\",\n \"test:contract\",\n \"test:integration\",\n \"test:release\",\n \"generate:check\",\n \"agents:check\",\n \"cospec-validate-all\",\n \"openspec:schema:validate\",\n]\n"}, "cd73cd96bd2b2a60bbaf9fb1e95c11a786202eb8": {"t": 1785750589.5642502, "n": 6210, "h": "28c411e38971521d", "c": "min_version = \"2026.4.1\"\nexperimental_monorepo_root = true\n\n[settings]\nexperimental = true\njobs = 8\nlockfile = true\nnpm.package_manager = \"bun\"\n\n[env]\nHK_MISE = \"1\"\nHK_PKL_BACKEND = \"pklr\"\n_.file = [{ path = \".env.local\", redact = true }]\n\n[tools]\nbun = \"1.3.14\"\n# The OpenSpec CLI cospec wraps. This mise entry is a dev/probe convenience; the\n# runtime copy is the pinned `@fission-ai/openspec` package dependency of\n# apps/cli, resolved by path (never $PATH) — see docs/architecture.md.\n\"npm:@fission-ai/openspec\" = \"1.5.0\"\n\"npm:@typescript/native-preview\" = \"7.0.0-dev.20260624.1\"\n\"npm:oxlint\" = \"1.71.0\"\n\"npm:oxfmt\" = \"0.56.0\"\n# Git hooks runner. >= 1.44.2 is required for the pklr cache-freshness fix\n# (jdx/hk#879) so edits to hk.pkl are picked up without a manual `hk cache clear`.\n\"aqua:jdx/hk\" = \"1.48.0\"\n\"aqua:jdx/usage\" = \"3.2.1\"\n# TOML formatter (used by the hk taplo step) — prebuilt binary via aqua. The\n# cargo backend builds from source on every cache miss, which is slow and flakes\n# on transient crates.io download failures. Same upstream, same `taplo` binary.\n\"aqua:tamasfe/taplo\" = \"0.10.0\"\n\"aqua:koalaman/shellcheck\" = \"0.10.0\"\n\"aqua:rhysd/actionlint\" = \"1.7.12\"\n\"aqua:cli/cli\" = \"2.91.0\"\n\n[monorepo]\nconfig_roots = [\"apps/*\"]\n\n# Scripts in scripts/mise-tasks/ are invoked directly by toml tasks\n# (run = \"bash scripts/mise-tasks/...\"). An empty includes list stops mise from\n# auto-discovering them as duplicate tasks, so toml description fields stay\n# authoritative in `mise tasks ls`.\n[task_config]\nincludes = []\n\n[hooks]\npostinstall = \"hk install --mise\"\n\n# ───────────────────────────────────────────────\n# cospec entrypoint\n# ───────────────────────────────────────────────\n\n[tasks.cospec]\ndescription = \"Run cospec from source (mise run cospec -- <args>)\"\nrun = \"bun run apps/cli/src/index.ts --\"\n\n# ───────────────────────────────────────────────\n# Build\n# ───────────────────────────────────────────────\n\n[tasks.build]\ndescription = \"Build the cospec single-file executable (local convenience)\"\nrun = \"mise run //apps/cli:build\"\n\n# ───────────────────────────────────────────────\n# Lint / format\n# ───────────────────────────────────────────────\n\n[tasks.lint]\ndescription = \"Lint all TypeScript/JavaScript with oxlint\"\nrun = \"oxlint .\"\n\n[tasks.\"lint:fix\"]\ndescription = \"Auto-fix lint issues\"\nrun = \"oxlint --fix .\"\n\n[tasks.\"format:check\"]\ndescription = \"Check formatting — exits non-zero if any file differs\"\nrun = \"oxfmt --check .\"\n\n[tasks.\"format:fix\"]\ndescription = \"Format all files in place\"\nrun = \"oxfmt .\"\n\n[tasks.typecheck]\ndescription = \"Type-check all workspaces (apps/*) and the e2e eval sources with tsgo\"\nrun = [\"bun run --filter '*' typecheck\", \"tsgo --noEmit -p e2e/tsconfig.json\"]\n\n# ───────────────────────────────────────────────\n# Test\n# ───────────────────────────────────────────────\n\n# --timeout 30000 gives the subprocess-heavy suites headroom over bun's 5000ms\n# default: contract/integration tests each spawn the real pinned openspec binary\n# (~4.6s apiece) and reliably blow past 5s when `mise run check` runs the suites\n# concurrently. bun has no bunfig timeout key and setDefaultTimeout in a preload\n# does not propagate across files in a directory run, so the flag is set on every\n# `bun test` invocation (these tasks, which hk hooks and CI drive; plus the direct\n# unit run in ci.yml).\n[tasks.test]\ndescription = \"Run unit tests\"\nrun = \"bun test apps/cli/test/unit --timeout 30000\"\n\n[tasks.\"test:contract\"]\ndescription = \"Contract tests against the real pinned openspec binary\"\nrun = \"bun test apps/cli/test/contract --timeout 30000\"\n\n[tasks.\"test:integration\"]\ndescription = \"Integration tests over the 3 repo states + lifecycles\"\nrun = \"bun test apps/cli/test/integration --timeout 30000\"\n\n[tasks.\"test:pack\"]\ndescription = \"Pack smoke: bun pm pack -> tarball install -> bunx cospec\"\nrun = \"bun test apps/cli/test/integration/pack.test.ts --timeout 30000\"\n\n# ───────────────────────────────────────────────\n# Generate (canon -> managed files) + drift gate\n# ───────────────────────────────────────────────\n\n[tasks.generate]\ndescription = \"Regenerate managed files from canon (self-repo)\"\nrun = \"mise run cospec -- update\"\n\n[tasks.\"generate:check\"]\ndescription = \"Fail if any managed file drifts from canon (CI/pre-commit gate)\"\nrun = \"mise run cospec -- update --check\"\n\n[tasks.\"openspec:schema:validate\"]\ndescription = \"Structurally validate each composed schema with the raw openspec CLI\"\nrun = \"\"\"\nset -eu\nfor t in build chore ci docs feat fix perf refactor revert style test; do\n echo \"openspec schema validate $t\"\n openspec schema validate \"$t\"\ndone\n\"\"\"\n\n[tasks.\"cospec-validate-all\"]\ndescription = \"Strictly validate every change and spec in this repo\"\nrun = \"mise run cospec -- validate --all --strict\"\n\n# ───────────────────────────────────────────────\n# Agent context sync\n# ───────────────────────────────────────────────\n\n[tasks.\"agents:sync\"]\ndescription = \"Rewrite the shared block in CLAUDE.md/AGENTS.md from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync\"\n\n[tasks.\"agents:check\"]\ndescription = \"Fail if CLAUDE.md/AGENTS.md drift from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync --check\"\n\n# ───────────────────────────────────────────────\n# Commit / PR title linting\n# ───────────────────────────────────────────────\n\n[tasks.\"commit:check-title\"]\ndescription = \"Lint a PR/commit title (PR_TITLE env) against commitlint\"\nrun = 'printf \"%s\\n\" \"$PR_TITLE\" | bunx commitlint'\n\n# ───────────────────────────────────────────────\n# E2E eval (optional; exit-0 skip without DEEPSEEK_API_KEY)\n# ───────────────────────────────────────────────\n\n[tasks.\"eval:e2e\"]\ndescription = \"DeepSeek E2E eval of the shipped skills (advisory, never gates CI)\"\nrun = \"bun run e2e/eval/run.ts\"\n\n# ───────────────────────────────────────────────\n# Composed CI gate\n# ───────────────────────────────────────────────\n\n[tasks.check]\ndescription = \"Full CI gate: lint + format + typecheck + tests + drift + openspec validation\"\ndepends = [\n \"lint\",\n \"format:check\",\n \"typecheck\",\n \"test\",\n \"test:contract\",\n \"test:integration\",\n \"generate:check\",\n \"agents:check\",\n \"cospec-validate-all\",\n \"openspec:schema:validate\",\n]\n"}, "0b769b8db50f532f07a6e625251ef00bd8e14ed4": {"t": 1785750591.6967056, "n": 6210, "h": "be8475e2f804ea82", "c": "min_version = \"2026.4.1\"\nexperimental_monorepo_root = true\n\n[settings]\nexperimental = true\njobs = 8\nlockfile = true\nnpm.package_manager = \"bun\"\n\n[env]\nHK_MISE = \"1\"\nHK_PKL_BACKEND = \"pklr\"\n_.file = [{ path = \".env.local\", redact = true }]\n\n[tools]\nbun = \"1.3.14\"\n# The OpenSpec CLI cospec wraps. This mise entry is a dev/probe convenience; the\n# runtime copy is the pinned `@fission-ai/openspec` package dependency of\n# apps/cli, resolved by path (never $PATH) — see docs/architecture.md.\n\"npm:@fission-ai/openspec\" = \"1.3.1\"\n\"npm:@typescript/native-preview\" = \"7.0.0-dev.20260624.1\"\n\"npm:oxlint\" = \"1.71.0\"\n\"npm:oxfmt\" = \"0.56.0\"\n# Git hooks runner. >= 1.44.2 is required for the pklr cache-freshness fix\n# (jdx/hk#879) so edits to hk.pkl are picked up without a manual `hk cache clear`.\n\"aqua:jdx/hk\" = \"1.48.0\"\n\"aqua:jdx/usage\" = \"3.2.1\"\n# TOML formatter (used by the hk taplo step) — prebuilt binary via aqua. The\n# cargo backend builds from source on every cache miss, which is slow and flakes\n# on transient crates.io download failures. Same upstream, same `taplo` binary.\n\"aqua:tamasfe/taplo\" = \"0.10.0\"\n\"aqua:koalaman/shellcheck\" = \"0.10.0\"\n\"aqua:rhysd/actionlint\" = \"1.7.12\"\n\"aqua:cli/cli\" = \"2.91.0\"\n\n[monorepo]\nconfig_roots = [\"apps/*\"]\n\n# Scripts in scripts/mise-tasks/ are invoked directly by toml tasks\n# (run = \"bash scripts/mise-tasks/...\"). An empty includes list stops mise from\n# auto-discovering them as duplicate tasks, so toml description fields stay\n# authoritative in `mise tasks ls`.\n[task_config]\nincludes = []\n\n[hooks]\npostinstall = \"hk install --mise\"\n\n# ───────────────────────────────────────────────\n# cospec entrypoint\n# ───────────────────────────────────────────────\n\n[tasks.cospec]\ndescription = \"Run cospec from source (mise run cospec -- <args>)\"\nrun = \"bun run apps/cli/src/index.ts --\"\n\n# ───────────────────────────────────────────────\n# Build\n# ───────────────────────────────────────────────\n\n[tasks.build]\ndescription = \"Build the cospec single-file executable (local convenience)\"\nrun = \"mise run //apps/cli:build\"\n\n# ───────────────────────────────────────────────\n# Lint / format\n# ───────────────────────────────────────────────\n\n[tasks.lint]\ndescription = \"Lint all TypeScript/JavaScript with oxlint\"\nrun = \"oxlint .\"\n\n[tasks.\"lint:fix\"]\ndescription = \"Auto-fix lint issues\"\nrun = \"oxlint --fix .\"\n\n[tasks.\"format:check\"]\ndescription = \"Check formatting — exits non-zero if any file differs\"\nrun = \"oxfmt --check .\"\n\n[tasks.\"format:fix\"]\ndescription = \"Format all files in place\"\nrun = \"oxfmt .\"\n\n[tasks.typecheck]\ndescription = \"Type-check all workspaces (apps/*) and the e2e eval sources with tsgo\"\nrun = [\"bun run --filter '*' typecheck\", \"tsgo --noEmit -p e2e/tsconfig.json\"]\n\n# ───────────────────────────────────────────────\n# Test\n# ───────────────────────────────────────────────\n\n# --timeout 30000 gives the subprocess-heavy suites headroom over bun's 5000ms\n# default: contract/integration tests each spawn the real pinned openspec binary\n# (~4.6s apiece) and reliably blow past 5s when `mise run check` runs the suites\n# concurrently. bun has no bunfig timeout key and setDefaultTimeout in a preload\n# does not propagate across files in a directory run, so the flag is set on every\n# `bun test` invocation (these tasks, which hk hooks and CI drive; plus the direct\n# unit run in ci.yml).\n[tasks.test]\ndescription = \"Run unit tests\"\nrun = \"bun test apps/cli/test/unit --timeout 30000\"\n\n[tasks.\"test:contract\"]\ndescription = \"Contract tests against the real pinned openspec binary\"\nrun = \"bun test apps/cli/test/contract --timeout 30000\"\n\n[tasks.\"test:integration\"]\ndescription = \"Integration tests over the 3 repo states + lifecycles\"\nrun = \"bun test apps/cli/test/integration --timeout 30000\"\n\n[tasks.\"test:pack\"]\ndescription = \"Pack smoke: bun pm pack -> tarball install -> bunx cospec\"\nrun = \"bun test apps/cli/test/integration/pack.test.ts --timeout 30000\"\n\n# ───────────────────────────────────────────────\n# Generate (canon -> managed files) + drift gate\n# ───────────────────────────────────────────────\n\n[tasks.generate]\ndescription = \"Regenerate managed files from canon (self-repo)\"\nrun = \"mise run cospec -- update\"\n\n[tasks.\"generate:check\"]\ndescription = \"Fail if any managed file drifts from canon (CI/pre-commit gate)\"\nrun = \"mise run cospec -- update --check\"\n\n[tasks.\"openspec:schema:validate\"]\ndescription = \"Structurally validate each composed schema with the raw openspec CLI\"\nrun = \"\"\"\nset -eu\nfor t in build chore ci docs feat fix perf refactor revert style test; do\n echo \"openspec schema validate $t\"\n openspec schema validate \"$t\"\ndone\n\"\"\"\n\n[tasks.\"cospec-validate-all\"]\ndescription = \"Strictly validate every change and spec in this repo\"\nrun = \"mise run cospec -- validate --all --strict\"\n\n# ───────────────────────────────────────────────\n# Agent context sync\n# ───────────────────────────────────────────────\n\n[tasks.\"agents:sync\"]\ndescription = \"Rewrite the shared block in CLAUDE.md/AGENTS.md from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync\"\n\n[tasks.\"agents:check\"]\ndescription = \"Fail if CLAUDE.md/AGENTS.md drift from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync --check\"\n\n# ───────────────────────────────────────────────\n# Commit / PR title linting\n# ───────────────────────────────────────────────\n\n[tasks.\"commit:check-title\"]\ndescription = \"Lint a PR/commit title (PR_TITLE env) against commitlint\"\nrun = 'printf \"%s\\n\" \"$PR_TITLE\" | bunx commitlint'\n\n# ───────────────────────────────────────────────\n# E2E eval (optional; exit-0 skip without DEEPSEEK_API_KEY)\n# ───────────────────────────────────────────────\n\n[tasks.\"eval:e2e\"]\ndescription = \"DeepSeek E2E eval of the shipped skills (advisory, never gates CI)\"\nrun = \"bun run e2e/eval/run.ts\"\n\n# ───────────────────────────────────────────────\n# Composed CI gate\n# ───────────────────────────────────────────────\n\n[tasks.check]\ndescription = \"Full CI gate: lint + format + typecheck + tests + drift + openspec validation\"\ndepends = [\n \"lint\",\n \"format:check\",\n \"typecheck\",\n \"test\",\n \"test:contract\",\n \"test:integration\",\n \"generate:check\",\n \"agents:check\",\n \"cospec-validate-all\",\n \"openspec:schema:validate\",\n]\n"}, "2fb6819bcca0dd9d2edd003e85259e517f0dcc38": {"t": 1785750592.7899559, "n": 6220, "h": "7603d5c45ada8b6c", "c": "min_version = \"2026.4.1\"\nexperimental_monorepo_root = true\n\n[settings]\nexperimental = true\njobs = 8\nlockfile = true\nnpm.package_manager = \"bun\"\n\n[env]\nHK_MISE = \"1\"\nHK_PKL_BACKEND = \"pklr\"\n_.file = [{ path = \".env.local\", redact = true }]\n\n[tools]\nbun = \"1.3.14\"\n# The OpenSpec CLI cospec wraps. This mise entry is a dev/probe convenience; the\n# runtime copy is the pinned `@fission-ai/openspec` package dependency of\n# apps/cli, resolved by path (never $PATH) — see docs/architecture.md.\n\"npm:@fission-ai/openspec\" = \"1.3.1\"\n\"npm:@typescript/native-preview\" = \"7.0.0-dev.20260624.1\"\n\"npm:oxlint\" = \"1.71.0\"\n\"npm:oxfmt\" = \"0.56.0\"\n# Git hooks runner. >= 1.44.2 is required for the pklr cache-freshness fix\n# (jdx/hk#879) so edits to hk.pkl are picked up without a manual `hk cache clear`.\n\"aqua:jdx/hk\" = \"1.48.0\"\n\"aqua:jdx/usage\" = \"3.2.1\"\n# TOML formatter (used by the hk taplo step) — prebuilt binary via aqua. The\n# cargo backend builds from source on every cache miss, which is slow and flakes\n# on transient crates.io download failures. Same upstream, same `taplo` binary.\n\"aqua:tamasfe/taplo\" = \"0.10.0\"\n\"aqua:koalaman/shellcheck\" = \"0.10.0\"\n\"aqua:rhysd/actionlint\" = \"1.7.12\"\n\"aqua:cli/cli\" = \"2.91.0\"\n\n[monorepo]\nconfig_roots = [\"apps/*\"]\n\n# Scripts in scripts/mise-tasks/ are invoked directly by toml tasks\n# (run = \"bash scripts/mise-tasks/...\"). An empty includes list stops mise from\n# auto-discovering them as duplicate tasks, so toml description fields stay\n# authoritative in `mise tasks ls`.\n[task_config]\nincludes = []\n\n[hooks]\npostinstall = \"hk install --mise\"\n\n# ───────────────────────────────────────────────\n# cospec entrypoint\n# ───────────────────────────────────────────────\n\n[tasks.cospec]\ndescription = \"Run cospec from source (mise run cospec -- <args>)\"\nrun = \"bun run apps/cli/src/index.ts --\"\n\n# ───────────────────────────────────────────────\n# Build\n# ───────────────────────────────────────────────\n\n[tasks.build]\ndescription = \"Build the cospec single-file executable (local convenience)\"\nrun = \"mise run //apps/cli:build\"\n\n# ───────────────────────────────────────────────\n# Lint / format\n# ───────────────────────────────────────────────\n\n[tasks.lint]\ndescription = \"Lint all TypeScript/JavaScript with oxlint\"\nrun = \"oxlint .\"\n\n[tasks.\"lint:fix\"]\ndescription = \"Auto-fix lint issues\"\nrun = \"oxlint --fix .\"\n\n[tasks.\"format:check\"]\ndescription = \"Check formatting — exits non-zero if any file differs\"\nrun = \"oxfmt --check .\"\n\n[tasks.\"format:fix\"]\ndescription = \"Format all files in place\"\nrun = \"oxfmt .\"\n\n[tasks.typecheck]\ndescription = \"Type-check all workspaces (apps/*) and the e2e eval sources with tsgo\"\nrun = [\"bun run --filter '*' typecheck\", \"tsgo --noEmit -p e2e/tsconfig.json\"]\n\n# ───────────────────────────────────────────────\n# Test\n# ───────────────────────────────────────────────\n\n# --timeout 30000 gives the subprocess-heavy suites headroom over bun's 5000ms\n# default: contract/integration tests each spawn the real pinned openspec binary\n# (~4.6s apiece) and reliably blow past 5s when `mise run check` runs the suites\n# concurrently. bun has no bunfig timeout key and setDefaultTimeout in a preload\n# does not propagate across files in a directory run, so the flag is set on every\n# `bun test` invocation (these tasks, which hk hooks and CI drive; plus the direct\n# unit run in ci.yml).\n[tasks.test]\ndescription = \"Run unit tests\"\nrun = \"bun test apps/cli/test/unit --timeout 30000\"\n\n[tasks.\"test:contract\"]\ndescription = \"Contract tests against the real pinned openspec binary\"\nrun = \"bun test apps/cli/test/contract --timeout 30000\"\n\n[tasks.\"test:integration\"]\ndescription = \"Integration tests over the 3 repo states + lifecycles\"\nrun = \"bun test apps/cli/test/integration --timeout 30000\"\n\n[tasks.\"test:pack\"]\ndescription = \"Pack smoke: bun pm pack -> tarball install -> bunx cospec\"\nrun = \"bun test apps/cli/test/integration/pack.test.ts --timeout 30000\"\n\n# ───────────────────────────────────────────────\n# Generate (canon -> managed files) + drift gate\n# ───────────────────────────────────────────────\n\n[tasks.generate]\ndescription = \"Regenerate managed files from canon (self-repo)\"\nrun = \"mise run cospec -- update\"\n\n[tasks.\"generate:check\"]\ndescription = \"Fail if any managed file drifts from canon (CI/pre-commit gate)\"\nrun = \"mise run cospec -- update --check\"\n\n[tasks.\"openspec:schema:validate\"]\ndescription = \"Structurally validate each composed schema with the raw openspec CLI\"\nrun = \"\"\"\nset -euo pipefail\nfor t in build chore ci docs feat fix perf refactor revert style test; do\n echo \"openspec schema validate $t\"\n openspec schema validate \"$t\"\ndone\n\"\"\"\n\n[tasks.\"cospec-validate-all\"]\ndescription = \"Strictly validate every change and spec in this repo\"\nrun = \"mise run cospec -- validate --all --strict\"\n\n# ───────────────────────────────────────────────\n# Agent context sync\n# ───────────────────────────────────────────────\n\n[tasks.\"agents:sync\"]\ndescription = \"Rewrite the shared block in CLAUDE.md/AGENTS.md from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync\"\n\n[tasks.\"agents:check\"]\ndescription = \"Fail if CLAUDE.md/AGENTS.md drift from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync --check\"\n\n# ───────────────────────────────────────────────\n# Commit / PR title linting\n# ───────────────────────────────────────────────\n\n[tasks.\"commit:check-title\"]\ndescription = \"Lint a PR/commit title (PR_TITLE env) against commitlint\"\nrun = 'printf \"%s\\n\" \"$PR_TITLE\" | bunx commitlint'\n\n# ───────────────────────────────────────────────\n# E2E eval (optional; exit-0 skip without DEEPSEEK_API_KEY)\n# ───────────────────────────────────────────────\n\n[tasks.\"eval:e2e\"]\ndescription = \"DeepSeek E2E eval of the shipped skills (advisory, never gates CI)\"\nrun = \"bun run e2e/eval/run.ts\"\n\n# ───────────────────────────────────────────────\n# Composed CI gate\n# ───────────────────────────────────────────────\n\n[tasks.check]\ndescription = \"Full CI gate: lint + format + typecheck + tests + drift + openspec validation\"\ndepends = [\n \"lint\",\n \"format:check\",\n \"typecheck\",\n \"test\",\n \"test:contract\",\n \"test:integration\",\n \"generate:check\",\n \"agents:check\",\n \"cospec-validate-all\",\n \"openspec:schema:validate\",\n]\n"}, "f728fd785f15819e7fe4aea761f36d8493422d0f": {"t": 1785750593.9419074, "n": 5646, "h": "e7b895ebae6de03b", "c": "min_version = \"2026.4.1\"\nexperimental_monorepo_root = true\n\n[settings]\nexperimental = true\njobs = 8\nlockfile = true\nnpm.package_manager = \"bun\"\n\n[env]\nHK_MISE = \"1\"\nHK_PKL_BACKEND = \"pklr\"\n_.file = [{ path = \".env.local\", redact = true }]\n\n[tools]\nbun = \"1.3.14\"\n# The OpenSpec CLI cospec wraps. This mise entry is a dev/probe convenience; the\n# runtime copy is the pinned `@fission-ai/openspec` package dependency of\n# apps/cli, resolved by path (never $PATH) — see docs/architecture.md.\n\"npm:@fission-ai/openspec\" = \"1.3.1\"\n\"npm:@typescript/native-preview\" = \"7.0.0-dev.20260624.1\"\n\"npm:oxlint\" = \"1.71.0\"\n\"npm:oxfmt\" = \"0.56.0\"\n# Git hooks runner. >= 1.44.2 is required for the pklr cache-freshness fix\n# (jdx/hk#879) so edits to hk.pkl are picked up without a manual `hk cache clear`.\n\"aqua:jdx/hk\" = \"1.48.0\"\n\"aqua:jdx/usage\" = \"3.2.1\"\n# TOML formatter (used by the hk taplo step) — prebuilt binary via aqua. The\n# cargo backend builds from source on every cache miss, which is slow and flakes\n# on transient crates.io download failures. Same upstream, same `taplo` binary.\n\"aqua:tamasfe/taplo\" = \"0.10.0\"\n\"aqua:koalaman/shellcheck\" = \"0.10.0\"\n\"aqua:rhysd/actionlint\" = \"1.7.12\"\n\"aqua:cli/cli\" = \"2.91.0\"\n\n[monorepo]\nconfig_roots = [\"apps/*\"]\n\n# Scripts in scripts/mise-tasks/ are invoked directly by toml tasks\n# (run = \"bash scripts/mise-tasks/...\"). An empty includes list stops mise from\n# auto-discovering them as duplicate tasks, so toml description fields stay\n# authoritative in `mise tasks ls`.\n[task_config]\nincludes = []\n\n[hooks]\npostinstall = \"hk install --mise\"\n\n# ───────────────────────────────────────────────\n# cospec entrypoint\n# ───────────────────────────────────────────────\n\n[tasks.cospec]\ndescription = \"Run cospec from source (mise run cospec -- <args>)\"\nrun = \"bun run apps/cli/src/index.ts --\"\n\n# ───────────────────────────────────────────────\n# Build\n# ───────────────────────────────────────────────\n\n[tasks.build]\ndescription = \"Build the cospec single-file executable (local convenience)\"\nrun = \"mise run //apps/cli:build\"\n\n# ───────────────────────────────────────────────\n# Lint / format\n# ───────────────────────────────────────────────\n\n[tasks.lint]\ndescription = \"Lint all TypeScript/JavaScript with oxlint\"\nrun = \"oxlint .\"\n\n[tasks.\"lint:fix\"]\ndescription = \"Auto-fix lint issues\"\nrun = \"oxlint --fix .\"\n\n[tasks.\"format:check\"]\ndescription = \"Check formatting — exits non-zero if any file differs\"\nrun = \"oxfmt --check .\"\n\n[tasks.\"format:fix\"]\ndescription = \"Format all files in place\"\nrun = \"oxfmt .\"\n\n[tasks.typecheck]\ndescription = \"Type-check all workspaces (apps/*) and the e2e eval sources with tsgo\"\nrun = [\"bun run --filter '*' typecheck\", \"tsgo --noEmit -p e2e/tsconfig.json\"]\n\n# ───────────────────────────────────────────────\n# Test\n# ───────────────────────────────────────────────\n\n[tasks.test]\ndescription = \"Run unit tests\"\nrun = \"bun test apps/cli/test/unit\"\n\n[tasks.\"test:contract\"]\ndescription = \"Contract tests against the real pinned openspec binary\"\nrun = \"bun test apps/cli/test/contract\"\n\n[tasks.\"test:integration\"]\ndescription = \"Integration tests over the 3 repo states + lifecycles\"\nrun = \"bun test apps/cli/test/integration\"\n\n[tasks.\"test:pack\"]\ndescription = \"Pack smoke: bun pm pack -> tarball install -> bunx cospec\"\nrun = \"bun test apps/cli/test/integration/pack.test.ts\"\n\n# ───────────────────────────────────────────────\n# Generate (canon -> managed files) + drift gate\n# ───────────────────────────────────────────────\n\n[tasks.generate]\ndescription = \"Regenerate managed files from canon (self-repo)\"\nrun = \"mise run cospec -- update\"\n\n[tasks.\"generate:check\"]\ndescription = \"Fail if any managed file drifts from canon (CI/pre-commit gate)\"\nrun = \"mise run cospec -- update --check\"\n\n[tasks.\"openspec:schema:validate\"]\ndescription = \"Structurally validate each composed schema with the raw openspec CLI\"\nrun = \"\"\"\nset -euo pipefail\nfor t in build chore ci docs feat fix perf refactor revert style test; do\n echo \"openspec schema validate $t\"\n openspec schema validate \"$t\"\ndone\n\"\"\"\n\n[tasks.\"cospec-validate-all\"]\ndescription = \"Strictly validate every change and spec in this repo\"\nrun = \"mise run cospec -- validate --all --strict\"\n\n# ───────────────────────────────────────────────\n# Agent context sync\n# ───────────────────────────────────────────────\n\n[tasks.\"agents:sync\"]\ndescription = \"Rewrite the shared block in CLAUDE.md/AGENTS.md from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync\"\n\n[tasks.\"agents:check\"]\ndescription = \"Fail if CLAUDE.md/AGENTS.md drift from .agents/shared.md\"\nrun = \"bash scripts/mise-tasks/agents/sync --check\"\n\n# ───────────────────────────────────────────────\n# Commit / PR title linting\n# ───────────────────────────────────────────────\n\n[tasks.\"commit:check-title\"]\ndescription = \"Lint a PR/commit title (PR_TITLE env) against commitlint\"\nrun = 'printf \"%s\\n\" \"$PR_TITLE\" | bunx commitlint'\n\n# ───────────────────────────────────────────────\n# E2E eval (optional; exit-0 skip without DEEPSEEK_API_KEY)\n# ───────────────────────────────────────────────\n\n[tasks.\"eval:e2e\"]\ndescription = \"DeepSeek E2E eval of the shipped skills (advisory, never gates CI)\"\nrun = \"bun run e2e/eval/run.ts\"\n\n# ───────────────────────────────────────────────\n# Composed CI gate\n# ───────────────────────────────────────────────\n\n[tasks.check]\ndescription = \"Full CI gate: lint + format + typecheck + tests + drift + openspec validation\"\ndepends = [\n \"lint\",\n \"format:check\",\n \"typecheck\",\n \"test\",\n \"test:contract\",\n \"test:integration\",\n \"generate:check\",\n \"agents:check\",\n \"cospec-validate-all\",\n \"openspec:schema:validate\",\n]\n"}, "58b7a4c2f91f019cc8dddc1c5b348291403a3fca": {"t": 1785750595.019017, "n": 2363, "h": "00550150d9add413", "c": "experimental_monorepo_root = true\n\n[monorepo]\nconfig_roots = [\n \"apps/*\",\n]\n\n[settings]\nexperimental = true\nlockfile = true\n\n[env]\nHK_MISE = \"1\"\nHK_PKL_BACKEND = \"pkl\"\n\n[tools]\nhk = \"1\"\npkl = \"0.31\"\n\"npm:@fission-ai/openspec\" = \"1\"\n\"npm:@commitlint/cli\" = \"20\"\n\"npm:@commitlint/config-conventional\" = \"20\"\nbun = \"1\"\noxlint = \"1\"\noxfmt = \"0.51\"\n\n[hooks]\npostinstall = \"hk install --mise\"\n\n[tasks.\"commitlint:edit\"]\ndescription = \"Validate one commit message file with commitlint\"\nusage = '''\narg \"<commit_msg_file>\" help=\"Path to the commit message file\"\n'''\nrun = \"\"\"\nset -euo pipefail\n\ncommitlint_config_dir=\"$(mise where npm:@commitlint/config-conventional)/lib/node_modules\"\nexport NODE_PATH=\"${commitlint_config_dir}${NODE_PATH:+:${NODE_PATH}}\"\ncommitlint --edit \"${usage_commit_msg_file}\"\n\"\"\"\n\n[tasks.\"openspec:validate-all\"]\ndescription = \"Strictly validate all OpenSpec changes and specs\"\nrun = \"openspec validate --all --strict\"\n\n[tasks.\"openspec:validate-changed\"]\ndescription = \"Strictly validate OpenSpec changes/specs touched by staged files in parallel\"\nrun = \"\"\"\nset -euo pipefail\n\nconcurrency=\"${OPENSPEC_CONCURRENCY:-6}\"\n\nitems=\"$(\n git diff --cached --name-only --diff-filter=ACMR -- \\\n 'openspec/changes/*' 'openspec/specs/*' \\\n | awk -F'/' '\n $2 == \"changes\" && $3 != \"\" && $3 != \"archive\" { print \"change \" $3 }\n $2 == \"specs\" && $3 != \"\" { print \"spec \" $3 }\n ' \\\n | sort -u\n)\"\n\nif [ -z \"$items\" ]; then\n echo \"openspec: no staged changes or specs; skipping validation.\"\n exit 0\nfi\n\nprintf '%s\\n' \"$items\" | xargs -P \"$concurrency\" -L 1 sh -c '\n kind=\"$1\"\n name=\"$2\"\n printf \"openspec: validating %s %s\\\\n\" \"$kind\" \"$name\"\n openspec validate \"$name\" --type \"$kind\" --strict\n' _\n\"\"\"\n\n[tasks.\"commitlint:history\"]\ndescription = \"Validate every commit on the current branch with commitlint\"\nrun = \"\"\"\nset -euo pipefail\n\ncommitlint_config_dir=\"$(mise where npm:@commitlint/config-conventional)/lib/node_modules\"\nexport NODE_PATH=\"${commitlint_config_dir}${NODE_PATH:+:${NODE_PATH}}\"\n\ntmp_dir=\"$(mktemp -d)\"\ncleanup() {\n rm -f \"$tmp_dir/root-message.txt\"\n rmdir \"$tmp_dir\"\n}\ntrap cleanup EXIT\n\nroot_sha=\"$(git rev-list --max-parents=0 --reverse HEAD | head -n 1)\"\ngit log -1 --format=%B \"$root_sha\" > \"$tmp_dir/root-message.txt\"\ncommitlint --edit \"$tmp_dir/root-message.txt\"\ncommitlint --from \"$root_sha\" --to HEAD\n\"\"\"\n"}, "753970c7df18bd778e0204ae2f677b3399f37d46": {"t": 1785750596.2593236, "n": 2241, "h": "aebe5a362ab78643", "c": "[settings]\nexperimental = true\n\n[env]\nHK_MISE = \"1\"\nHK_PKL_BACKEND = \"pkl\"\n\n[tools]\nbun = \"1\"\nhk = \"1\"\npkl = \"0.31\"\n\"npm:@fission-ai/openspec\" = \"1\"\n\"npm:@commitlint/cli\" = \"20\"\n\"npm:@commitlint/config-conventional\" = \"20\"\n\n[hooks]\npostinstall = \"hk install --mise\"\n\n[tasks.\"commitlint:edit\"]\ndescription = \"Validate one commit message file with commitlint\"\nusage = '''\narg \"<commit_msg_file>\" help=\"Path to the commit message file\"\n'''\nrun = \"\"\"\nset -euo pipefail\n\ncommitlint_config_dir=\"$(mise where npm:@commitlint/config-conventional)/lib/node_modules\"\nexport NODE_PATH=\"${commitlint_config_dir}${NODE_PATH:+:${NODE_PATH}}\"\ncommitlint --edit \"${usage_commit_msg_file}\"\n\"\"\"\n\n[tasks.\"openspec:validate-all\"]\ndescription = \"Strictly validate all OpenSpec changes and specs\"\nrun = \"openspec validate --all --strict\"\n\n[tasks.\"openspec:validate-changed\"]\ndescription = \"Strictly validate OpenSpec changes/specs touched by staged files in parallel\"\nrun = \"\"\"\nset -euo pipefail\n\nconcurrency=\"${OPENSPEC_CONCURRENCY:-6}\"\n\nitems=\"$(\n git diff --cached --name-only --diff-filter=ACMR -- \\\n 'openspec/changes/*' 'openspec/specs/*' \\\n | awk -F'/' '\n $2 == \"changes\" && $3 != \"\" && $3 != \"archive\" { print \"change \" $3 }\n $2 == \"specs\" && $3 != \"\" { print \"spec \" $3 }\n ' \\\n | sort -u\n)\"\n\nif [ -z \"$items\" ]; then\n echo \"openspec: no staged changes or specs; skipping validation.\"\n exit 0\nfi\n\nprintf '%s\\n' \"$items\" | xargs -P \"$concurrency\" -L 1 sh -c '\n kind=\"$1\"\n name=\"$2\"\n printf \"openspec: validating %s %s\\\\n\" \"$kind\" \"$name\"\n openspec validate \"$name\" --type \"$kind\" --strict\n' _\n\"\"\"\n\n[tasks.\"commitlint:history\"]\ndescription = \"Validate every commit on the current branch with commitlint\"\nrun = \"\"\"\nset -euo pipefail\n\ncommitlint_config_dir=\"$(mise where npm:@commitlint/config-conventional)/lib/node_modules\"\nexport NODE_PATH=\"${commitlint_config_dir}${NODE_PATH:+:${NODE_PATH}}\"\n\ntmp_dir=\"$(mktemp -d)\"\ncleanup() {\n rm -f \"$tmp_dir/root-message.txt\"\n rmdir \"$tmp_dir\"\n}\ntrap cleanup EXIT\n\nroot_sha=\"$(git rev-list --max-parents=0 --reverse HEAD | head -n 1)\"\ngit log -1 --format=%B \"$root_sha\" > \"$tmp_dir/root-message.txt\"\ncommitlint --edit \"$tmp_dir/root-message.txt\"\ncommitlint --from \"$root_sha\" --to HEAD\n\"\"\"\n"}, "346723138002bb76a0c132ed35097009cefacd3f": {"t": 1785750597.3280926, "n": 1311, "h": "3ed6f599a8d481d5", "c": "[settings]\nexperimental = true\n\n[env]\nHK_MISE = \"1\"\nHK_PKL_BACKEND = \"pkl\"\n\n[tools]\nbun = \"1\"\nhk = \"1\"\npkl = \"0.31\"\n\"npm:@fission-ai/openspec\" = \"1\"\n\"npm:@commitlint/cli\" = \"20\"\n\"npm:@commitlint/config-conventional\" = \"20\"\n\n[hooks]\npostinstall = \"hk install --mise\"\n\n[tasks.\"commitlint:edit\"]\ndescription = \"Validate one commit message file with commitlint\"\nusage = '''\narg \"<commit_msg_file>\" help=\"Path to the commit message file\"\n'''\nrun = \"\"\"\nset -euo pipefail\n\ncommitlint_config_dir=\"$(mise where npm:@commitlint/config-conventional)/lib/node_modules\"\nexport NODE_PATH=\"${commitlint_config_dir}${NODE_PATH:+:${NODE_PATH}}\"\ncommitlint --edit \"${usage_commit_msg_file}\"\n\"\"\"\n\n[tasks.\"commitlint:history\"]\ndescription = \"Validate every commit on the current branch with commitlint\"\nrun = \"\"\"\nset -euo pipefail\n\ncommitlint_config_dir=\"$(mise where npm:@commitlint/config-conventional)/lib/node_modules\"\nexport NODE_PATH=\"${commitlint_config_dir}${NODE_PATH:+:${NODE_PATH}}\"\n\ntmp_dir=\"$(mktemp -d)\"\ncleanup() {\n rm -f \"$tmp_dir/root-message.txt\"\n rmdir \"$tmp_dir\"\n}\ntrap cleanup EXIT\n\nroot_sha=\"$(git rev-list --max-parents=0 --reverse HEAD | head -n 1)\"\ngit log -1 --format=%B \"$root_sha\" > \"$tmp_dir/root-message.txt\"\ncommitlint --edit \"$tmp_dir/root-message.txt\"\ncommitlint --from \"$root_sha\" --to HEAD\n\"\"\"\n"}}}}