From 07befe0b7065da4f038fb6a0247c6a5c4a90cee6 Mon Sep 17 00:00:00 2001 From: Jakob Heuser Date: Sat, 5 Sep 2026 14:28:27 -0700 Subject: [PATCH 1/2] chore(openspec): move to 1.12.0 and write the Purposes it now requires `@fission-ai/openspec` was declared `^1.1.1` and locked at 1.2.0 while 1.12.0 was current, so ten minors of upstream work were sitting behind a stale lockfile. The bump alone turns `main` red. v1.11 taught `validate` to report a Purpose section still carrying the placeholder that `archive` writes for a new capability. It is a warning by default and `--strict` promotes it, and `Validate` runs `--strict`, so 1.12.0 measured 16 of 29 items failing with one cause between them: 16 [WARNING] overview Purpose section is still a placeholder So this writes those 16 Purposes. Twelve were the bare `TBD - created by archiving change X. Update Purpose after archive.` marker, and four carried a real sentence behind a `TBD` prefix. Each now says what the capability is for, drawn from the requirements the spec already holds. Purposes are edited in the main spec directly rather than through a delta, which is what upstream prescribes: a `## Purpose` in a delta is read only when the capability is created, so it cannot replace a standing one. After the rewrite, `pnpm openspec validate --all --strict` passes 28 of 28 and every requirement stays visible to the parser. Two upstream features arriving here are worth knowing about, and neither is wired up in this change: - `openspec validate --archived` (v1.9.0) checks that every archived change has its `tasks.md` boxes ticked. Run here it reports 5 of 56, and the failures are not sloppiness: three are work deliberately carried out of a change and recorded as such, including one annotated "Not done, and deliberately not blocking the archive." Adopting it as a gate needs a convention for deferred tasks first, which is a separate decision. - `openspec show --diff` (v1.11.0) isolates what a MODIFIED requirement actually changes, which is the tool version of the manual pre-archive inventory CLAUDE.md prescribes. --- openspec/specs/cli-agent-authoring/spec.md | 2 +- openspec/specs/cli-check/spec.md | 2 +- .../specs/cli-conformance-reference/spec.md | 2 +- openspec/specs/cli-detect/spec.md | 2 +- .../specs/cli-generated-rule-delivery/spec.md | 2 +- openspec/specs/cli-init/spec.md | 2 +- openspec/specs/cli-layout-export/spec.md | 2 +- openspec/specs/cli-nightly-builds/spec.md | 2 +- openspec/specs/cli-rule-format/spec.md | 15 +- openspec/specs/cli-rule-routing/spec.md | 2 +- openspec/specs/cli-rule-validation/spec.md | 2 +- .../specs/cli-runtime-binary-export/spec.md | 2 +- openspec/specs/cli-vale-rule-engine/spec.md | 5 +- openspec/specs/cli/spec.md | 2 +- openspec/specs/skill-update-engine/spec.md | 2 +- openspec/specs/vale-binary-packages/spec.md | 2 +- package.json | 2 +- pnpm-lock.yaml | 437 +++++++++++------- 18 files changed, 285 insertions(+), 202 deletions(-) diff --git a/openspec/specs/cli-agent-authoring/spec.md b/openspec/specs/cli-agent-authoring/spec.md index 6dab4518..a087616b 100644 --- a/openspec/specs/cli-agent-authoring/spec.md +++ b/openspec/specs/cli-agent-authoring/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD - created by archiving change agent-command-and-vale-authoring. Update Purpose after archive. +The recipes an agent follows to author a rule by hand, one for every engine a rule can be routed to. They write files rather than calling a writer, so a reader can see what lands on disk and why. ## Requirements diff --git a/openspec/specs/cli-check/spec.md b/openspec/specs/cli-check/spec.md index ae15db09..d2ff6019 100644 --- a/openspec/specs/cli-check/spec.md +++ b/openspec/specs/cli-check/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD — Defines the `taskless check` subcommand that validates project setup and runs ast-grep scanning to detect rule violations. +The `taskless check` subcommand: how it validates a project's setup and runs the configured engines across the repository to report rule violations. ## Requirements diff --git a/openspec/specs/cli-conformance-reference/spec.md b/openspec/specs/cli-conformance-reference/spec.md index 4e496bc9..213115b3 100644 --- a/openspec/specs/cli-conformance-reference/spec.md +++ b/openspec/specs/cli-conformance-reference/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD - created by archiving change reference-fixture-cases. Update Purpose after archive. +The conformance corpus published as `@taskless/cli/reference.json`, so an external grader can materialize a rule and judge it against the same fixtures the CLI runs, without transcribing our layout. ## Requirements diff --git a/openspec/specs/cli-detect/spec.md b/openspec/specs/cli-detect/spec.md index 8fef84e5..973be667 100644 --- a/openspec/specs/cli-detect/spec.md +++ b/openspec/specs/cli-detect/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD - created by archiving change local-rule-routing. Update Purpose after archive. +The `taskless detect` subcommand: an offline, deterministic read of a repository's signals, emitted as a stable JSON shape that other commands and agents branch on. ## Requirements diff --git a/openspec/specs/cli-generated-rule-delivery/spec.md b/openspec/specs/cli-generated-rule-delivery/spec.md index 7faf4d73..aefb4b86 100644 --- a/openspec/specs/cli-generated-rule-delivery/spec.md +++ b/openspec/specs/cli-generated-rule-delivery/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD - created by archiving change generator-payload-alignment. Update Purpose after archive. +How a rule generated by the service arrives on disk as a file set, and which destination paths the CLI refuses before it writes anything. ## Requirements diff --git a/openspec/specs/cli-init/spec.md b/openspec/specs/cli-init/spec.md index 914bf47c..ae5873f6 100644 --- a/openspec/specs/cli-init/spec.md +++ b/openspec/specs/cli-init/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD — Defines the `taskless init` subcommand that installs Taskless skills into a repository by detecting AI tools and writing skill files. +The `taskless init` subcommand: how it detects the AI tools present in a repository and installs the Taskless skills and commands for them. ## Requirements diff --git a/openspec/specs/cli-layout-export/spec.md b/openspec/specs/cli-layout-export/spec.md index 814c34c0..e0621ab8 100644 --- a/openspec/specs/cli-layout-export/spec.md +++ b/openspec/specs/cli-layout-export/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD - created by archiving change generator-payload-alignment. Update Purpose after archive. +The rule layout published as data rather than as knowledge a consumer copies. Where a rule lives, and what shape it has, can be read instead of transcribed. ## Requirements diff --git a/openspec/specs/cli-nightly-builds/spec.md b/openspec/specs/cli-nightly-builds/spec.md index 77603d0b..7a5d317b 100644 --- a/openspec/specs/cli-nightly-builds/spec.md +++ b/openspec/specs/cli-nightly-builds/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD - created by archiving change nightly-cli-builds. Update Purpose after archive. +How unreleased work on the default branch becomes an installable `@taskless/cli-nightly` package, and the properties that keep a nightly honest about the commit and the anticipated release it came from. ## Requirements diff --git a/openspec/specs/cli-rule-format/spec.md b/openspec/specs/cli-rule-format/spec.md index 3909f7b2..0c8b1275 100644 --- a/openspec/specs/cli-rule-format/spec.md +++ b/openspec/specs/cli-rule-format/spec.md @@ -2,8 +2,10 @@ ## Purpose -TBD - created by archiving change partition-rules-by-engine. Update Purpose after archive. +The on-disk shape of a rule: one directory per rule, partitioned by engine, with each engine's native config as the source of truth. + ## Requirements + ### Requirement: A rule's engine is determined by its containing directory The system SHALL dispatch each rule to the engine named by its top-level `.taskless//` directory, and SHALL NOT parse a rule file to determine its engine. @@ -77,11 +79,11 @@ When `taskless.json`'s `version` exceeds the highest migration the installed CLI The system SHALL store every rule as a directory at `.taskless/rules///`, holding the rule, any config that engine requires, and its tests under `.tests/`. -| Engine | Rule directory contents | -|-----------|--------------------------------------------------------------| -| `sg` | `.yml`, `.tests/-YYYYMMDD-test.yml` | -| `vale` | `.yml`, `.vale.ini`, `.tests/pass/*`, `.tests/fail/*` | -| `runtime` | `check.ts`, `captures/*.yml`, `.tests/…` | +| Engine | Rule directory contents | +| --------- | --------------------------------------------------------- | +| `sg` | `.yml`, `.tests/-YYYYMMDD-test.yml` | +| `vale` | `.yml`, `.vale.ini`, `.tests/pass/*`, `.tests/fail/*` | +| `runtime` | `check.ts`, `captures/*.yml`, `.tests/…` | One directory per rule is what lets a rule be addressed, reviewed, moved, or deleted as a single thing, and it is what makes `verify ` and `test ` possible without an id lookup. @@ -171,4 +173,3 @@ Each engine SHALL have one canonical on-disk location per rule — the rule dire - **WHEN** `verify` or `test` is given `.taskless/rules///` - **THEN** it operates on exactly that rule - **AND** the engine is determined from the path without reading the rule - diff --git a/openspec/specs/cli-rule-routing/spec.md b/openspec/specs/cli-rule-routing/spec.md index 5ce484a6..e64b6ecb 100644 --- a/openspec/specs/cli-rule-routing/spec.md +++ b/openspec/specs/cli-rule-routing/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD - created by archiving change local-rule-routing. Update Purpose after archive. +How the CLI decides where a new rule belongs, which engine authors it, and when it asks the user rather than guessing. ## Requirements diff --git a/openspec/specs/cli-rule-validation/spec.md b/openspec/specs/cli-rule-validation/spec.md index 25cb80f2..174b1ab4 100644 --- a/openspec/specs/cli-rule-validation/spec.md +++ b/openspec/specs/cli-rule-validation/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD - created by archiving change self-contained-rules. Update Purpose after archive. +How `verify` and `test` judge a rule: addressed by path rather than by id, run against the engine's own fixtures, and naming the constraint that a rejection violated. ## Requirements diff --git a/openspec/specs/cli-runtime-binary-export/spec.md b/openspec/specs/cli-runtime-binary-export/spec.md index 165b0008..6242cfc6 100644 --- a/openspec/specs/cli-runtime-binary-export/spec.md +++ b/openspec/specs/cli-runtime-binary-export/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD - created by archiving change node-runtimes-export. Update Purpose after archive. +How engine binaries are resolved and published, and how every export declares whether it needs a host runtime to work. ## Requirements diff --git a/openspec/specs/cli-vale-rule-engine/spec.md b/openspec/specs/cli-vale-rule-engine/spec.md index 86ae1f0d..86824359 100644 --- a/openspec/specs/cli-vale-rule-engine/spec.md +++ b/openspec/specs/cli-vale-rule-engine/spec.md @@ -2,8 +2,10 @@ ## Purpose -TBD - created by archiving change add-vale-rule-engine. Update Purpose after archive. +How Vale runs as a static-tier engine: its per-rule fixtures, its subprocess timeout, the run config it is given, and how its findings become engine-agnostic results. + ## Requirements + ### Requirement: Vale runs in the static tier without reconciliation or signing The system SHALL treat Vale as a static-tier engine — always run, with no server reconciliation or signature verification. Vale's `script` checks execute in a sandbox that exposes only pure-computation modules (`text`/`math`/`fmt`) with no host access, so a Vale rule is inert data equivalent in trust to a static ast-grep rule. @@ -180,4 +182,3 @@ Scope SHALL NOT be expressed inside the style file. Measured: Vale rejects unkno - **WHEN** a rule directory is removed - **THEN** no other rule's scope changes - **AND** no shared file needs editing - diff --git a/openspec/specs/cli/spec.md b/openspec/specs/cli/spec.md index b81f43d4..0794fc87 100644 --- a/openspec/specs/cli/spec.md +++ b/openspec/specs/cli/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD — Defines the structure and build requirements for the `@taskless/cli` package. +The shape of the `@taskless/cli` package itself: what it builds, what it publishes, and which entry points consumers are allowed to depend on. ## Requirements diff --git a/openspec/specs/skill-update-engine/spec.md b/openspec/specs/skill-update-engine/spec.md index 84aacab3..9a5899b9 100644 --- a/openspec/specs/skill-update-engine/spec.md +++ b/openspec/specs/skill-update-engine/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD — Defines the `taskless-update-engine` skill that invokes the CLI to request scaffold upgrades and reports results to the user. +The `taskless-update-engine` skill: how it asks the CLI for a scaffold upgrade and reports the outcome back to the user. ## Requirements diff --git a/openspec/specs/vale-binary-packages/spec.md b/openspec/specs/vale-binary-packages/spec.md index bb4fe4a0..3de6c3f8 100644 --- a/openspec/specs/vale-binary-packages/spec.md +++ b/openspec/specs/vale-binary-packages/spec.md @@ -2,7 +2,7 @@ ## Purpose -TBD - created by archiving change add-vale-binary-packages. Update Purpose after archive. +The per-platform packages carrying the Vale binary: how they are built, how fetched binaries are verified against committed checksums, and why publishing one changes nothing for a consumer. ## Requirements diff --git a/package.json b/package.json index b9007903..09febcc5 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "devDependencies": { "@changesets/cli": "^2.29.8", "@eslint/js": "^9.39.2", - "@fission-ai/openspec": "^1.1.1", + "@fission-ai/openspec": "^1.12.0", "@sentry/dotagents": "^1.19.0", "@types/node": "^25.3.0", "eslint": "^9.39.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eefad250..5b78f33d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ^9.39.2 version: 9.39.3 '@fission-ai/openspec': - specifier: ^1.1.1 - version: 1.2.0(@types/node@25.3.3) + specifier: ^1.12.0 + version: 1.12.0(@types/node@25.3.3) '@sentry/dotagents': specifier: ^1.19.0 version: 1.19.0 @@ -501,8 +501,8 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@fission-ai/openspec@1.2.0': - resolution: {integrity: sha512-2XDmPZcVY0Bs014lP9aoxe3VoEU8hFvqaBFxQaiJO2nhC8vTKCyo6sT/5YpQcOTfR/a64Hht2anTyqLR4eNhlg==} + '@fission-ai/openspec@1.12.0': + resolution: {integrity: sha512-oFE2Lj7WVSc87nSibk6qe9HjHIOlxhcPAXbPey44DlLvJzBl5+9BZVrNiozOwv++CQhW+MG0kuP1XLZ/uQrrWw==} engines: {node: '>=20.19.0'} hasBin: true @@ -522,49 +522,58 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@inquirer/ansi@1.0.2': - resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} - engines: {node: '>=18'} + '@inquirer/ansi@2.0.8': + resolution: {integrity: sha512-WpQM+Ti6Z40EFwwt+uL2p4UabT+W179zHp6HhLVOzfbwnVn05IPO/eXIZXGNqcT1jbQ15SujNLzQ39k4QPPxBQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} - '@inquirer/checkbox@4.3.2': - resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} - engines: {node: '>=18'} + '@inquirer/checkbox@5.2.4': + resolution: {integrity: sha512-oKT5RNeO9oKYizSyOxKb66IrKUsYVMQD2tnjllYW4wmSOe9WawfL3OE2p82JuvAyo+/nDIEem5P4Bm/ZIVYVew==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/confirm@5.1.21': - resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} - engines: {node: '>=18'} + '@inquirer/confirm@6.3.1': + resolution: {integrity: sha512-HvnOHal39DTenOVoRpIy8Z+n4YYfNa3Qhi/P8zFqn9/d1crpmQG0DPx34rwOeOFvotgKr9Vov/14OmKR/Iwfjw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/core@10.3.2': - resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} - engines: {node: '>=18'} + '@inquirer/core@11.2.1': + resolution: {integrity: sha512-Qd6GJT1yVyrZZCfN8W2qKF5ApmqryXRhRKCuip8h01x2w/esJQ2XIYc6f9abMIHgKQdBfFTSOdbHRLAhuM09UA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/editor@4.2.23': - resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} - engines: {node: '>=18'} + '@inquirer/core@12.0.2': + resolution: {integrity: sha512-9pBhkxE14uUlnHhs8lOt7qVPtS4caRY6CjADl8COejl9Mf7w8i6Uoe3DrljCqYtmYM3Iv2Q6EmPxx/oTYbvTAQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/expand@4.0.23': - resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} - engines: {node: '>=18'} + '@inquirer/editor@5.3.2': + resolution: {integrity: sha512-7ruKO5d/wxhGHxdCQ3eyP/aBNrPTZ+Ju7ERtnAwuIsu0RSLs6kotlTRkOxHatbD6sDaEEdwsD82pzFiT9ESIyQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@5.1.4': + resolution: {integrity: sha512-12o4aYnjWouoq0fyVhYIL+hwXAaga+kntA/wrijFmVvn2heinkdvkbEXRt1Ob/9IOJ285US5tntjfI/Ukt2YkA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -580,76 +589,85 @@ packages: '@types/node': optional: true - '@inquirer/figures@1.0.15': - resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} - engines: {node: '>=18'} + '@inquirer/external-editor@3.0.5': + resolution: {integrity: sha512-f3QQJRIX5ZEneBHNUIuPjmbdzHnmRFJA8r2dkcb8q+OM5Uv5KtnuAttQumnrjcBVBM3mcTX1CkmtAkU58VRZxg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true - '@inquirer/input@4.3.1': - resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} - engines: {node: '>=18'} + '@inquirer/figures@2.0.9': + resolution: {integrity: sha512-EAWgUTGQ/Umgga51dE3B2PUHbufuXarDfg86uVgoSgNHNNQnyFKcOrQLWVqYMghuSyHh8+2HUH0Js9cTC1WAdg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} + + '@inquirer/input@5.1.5': + resolution: {integrity: sha512-2MkYYFD1Owt1eRBwHhsLSutysRodWasA4DVpl42KJKGmzwBTXRYAIXujisrt0UW0UohUlMjNjLfMDbw4emRbfw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/number@3.0.23': - resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} - engines: {node: '>=18'} + '@inquirer/number@4.2.2': + resolution: {integrity: sha512-tjW1gMIQsFb/9Ie11i8SpuPARBdyCVfC5XOeVugWovrdm8CpjzN+A1CBX5QwCCN2mtNmpgDDCnuLCCT94cQ5zA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/password@4.0.23': - resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} - engines: {node: '>=18'} + '@inquirer/password@5.2.1': + resolution: {integrity: sha512-InA6nJxMCXPavPBiTKYHIsYiWz/mkIsk1rkI6pKp5w18gVawqrZOj7eSzSmPJa3j0pVxXm6RlrFP1BE9YeOixA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/prompts@7.10.1': - resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} - engines: {node: '>=18'} + '@inquirer/prompts@8.7.1': + resolution: {integrity: sha512-xJIKWyrFNUKj3R5VEub/iKodG9Sh/MbCeApZUbATJgHTw8YoAJ2gOT78HlvO6NMFiRvjm6ySM7aiAew/zVY0Sw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/rawlist@4.1.11': - resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} - engines: {node: '>=18'} + '@inquirer/rawlist@5.3.4': + resolution: {integrity: sha512-c4fDwOpQsjJDHjXdHJE1/xXH6w9/BAiyu3QKzH9Ww5Xm1q37mzyUNa20L7qdtM1ECi4e+oUEKjhK8hR37OMAMQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/search@3.2.2': - resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} - engines: {node: '>=18'} + '@inquirer/search@4.3.2': + resolution: {integrity: sha512-YIaEhWmfkdHEWOKwhF/oJar35FFTTrAdzNbJDo9lSsRT6E/obRPx9oVm4rkTMtlcJSqGYttNtLbcHQef9Qw2yw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/select@4.4.2': - resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} - engines: {node: '>=18'} + '@inquirer/select@5.2.4': + resolution: {integrity: sha512-L9ubNaJdoBsiom/AfPKq0QLHTkhhCFCtszzdVidGremrlJjPZfGlmvp+IULKIbnYjtVFWnvb4mhiEdNTZ12ugA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: '@types/node': optional: true - '@inquirer/type@3.0.10': - resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} - engines: {node: '>=18'} + '@inquirer/type@4.1.1': + resolution: {integrity: sha512-yJoHYrMnxIsJZCY+0Vb66Dy3he3kL3e2wOBKhoSwWWAzZAY82emlxwgprCtp6yRixvNRNq9ztfRWQYPNr3Go7A==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^20.17.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -677,9 +695,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@posthog/core@1.23.1': - resolution: {integrity: sha512-GViD5mOv/mcbZcyzz3z9CS0R79JzxVaqEz4sP5Dsea178M/j3ZWe6gaHDZB9yuyGfcmIMQ/8K14yv+7QrK4sQQ==} - '@posthog/core@1.24.6': resolution: {integrity: sha512-9WkcRKqmXSWIJcca6m3VwA9YbFd4HiG2hKEtDq6FcwEHlvfDhQQUZ5/sJZ47Fw8OtyNMHQ6rW4+COttk4Bg5NQ==} @@ -1100,6 +1115,9 @@ packages: chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + chardet@2.2.0: + resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} + check-error@2.1.3: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} @@ -1127,6 +1145,10 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-spinners@3.4.0: + resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} + engines: {node: '>=18.20'} + cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} @@ -1203,6 +1225,10 @@ packages: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} + diff@9.0.0: + resolution: {integrity: sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==} + engines: {node: '>=0.3.1'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1216,9 +1242,6 @@ packages: emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -1285,6 +1308,7 @@ packages: eslint@9.39.3: resolution: {integrity: sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true peerDependencies: jiti: '*' @@ -1354,14 +1378,23 @@ packages: fast-string-truncated-width@1.2.1: resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + fast-string-width@1.1.0: resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==} + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + fast-wrap-ansi@0.1.6: resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==} - fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} + + fastq@1.20.3: + resolution: {integrity: sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==} fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -1416,6 +1449,10 @@ packages: resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} engines: {node: '>=18'} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} + engines: {node: '>=18'} + get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} @@ -1482,6 +1519,10 @@ packages: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.3: + resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} + engines: {node: '>=0.10.0'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1517,10 +1558,6 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - is-fullwidth-code-point@4.0.0: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} @@ -1738,6 +1775,10 @@ packages: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} + log-symbols@7.0.1: + resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} + engines: {node: '>=18'} + log-update@6.1.0: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} @@ -1796,9 +1837,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} + mute-stream@3.0.0: + resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} + engines: {node: ^20.17.0 || >=22.9.0} nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} @@ -1856,6 +1897,10 @@ packages: resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} engines: {node: '>=18'} + ora@9.4.1: + resolution: {integrity: sha512-6VlU9MLXbjVQD04AZCMX28hVtA5bUoadvUqO76MUCVA0ilwJbMiHsITRPfyVm6p/BC0Av/BXMujx39WCe1LEqw==} + engines: {node: '>=20'} + outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} @@ -1957,10 +2002,6 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - posthog-node@5.26.0: - resolution: {integrity: sha512-DK1XF/RiunhvT57cFyPxW9OaliZzl5aREHFwY/AISL3MVOaDUb4wIccMn0G3ws3Ounen8iGH7xvzZQ0x2vEOEQ==} - engines: {node: ^20.20.0 || >=22.22.0} - posthog-node@5.28.11: resolution: {integrity: sha512-H4FOiqKUBO8SVXyXlU5tyifeS11hyTGVwBirFPR5rPtw8X6OFs5xVLx38YL7ZBLjaa9u8is+nIWXKBwWsZ2vlw==} engines: {node: ^20.20.0 || >=22.22.0} @@ -2132,18 +2173,22 @@ packages: resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} engines: {node: '>=18'} + stdin-discarder@0.3.2: + resolution: {integrity: sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==} + engines: {node: '>=18'} + string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - string-width@7.2.0: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} + string-width@8.2.2: + resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==} + engines: {node: '>=20'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2428,10 +2473,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - wrap-ansi@9.0.2: resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} @@ -2457,13 +2498,16 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + yoctocolors@2.2.0: + resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==} engines: {node: '>=18'} zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zod@4.5.4: + resolution: {integrity: sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA==} + snapshots: '@ast-grep/cli-darwin-arm64@0.45.2': @@ -2789,17 +2833,18 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@fission-ai/openspec@1.2.0(@types/node@25.3.3)': + '@fission-ai/openspec@1.12.0(@types/node@25.3.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.3) - '@inquirer/prompts': 7.10.1(@types/node@25.3.3) + '@inquirer/core': 11.2.1(@types/node@25.3.3) + '@inquirer/prompts': 8.7.1(@types/node@25.3.3) chalk: 5.6.2 commander: 14.0.3 + cross-spawn: 7.0.6 + diff: 9.0.0 fast-glob: 3.3.3 - ora: 8.2.0 - posthog-node: 5.26.0 - yaml: 2.8.2 - zod: 4.3.6 + ora: 9.4.1 + yaml: 2.9.0 + zod: 4.5.4 transitivePeerDependencies: - '@types/node' @@ -2814,51 +2859,60 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@inquirer/ansi@1.0.2': {} + '@inquirer/ansi@2.0.8': {} - '@inquirer/checkbox@4.3.2(@types/node@25.3.3)': + '@inquirer/checkbox@5.2.4(@types/node@25.3.3)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.3.3) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.3.3) - yoctocolors-cjs: 2.1.3 + '@inquirer/ansi': 2.0.8 + '@inquirer/core': 12.0.2(@types/node@25.3.3) + '@inquirer/figures': 2.0.9 + '@inquirer/type': 4.1.1(@types/node@25.3.3) optionalDependencies: '@types/node': 25.3.3 - '@inquirer/confirm@5.1.21(@types/node@25.3.3)': + '@inquirer/confirm@6.3.1(@types/node@25.3.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.3) - '@inquirer/type': 3.0.10(@types/node@25.3.3) + '@inquirer/core': 12.0.2(@types/node@25.3.3) + '@inquirer/type': 4.1.1(@types/node@25.3.3) optionalDependencies: '@types/node': 25.3.3 - '@inquirer/core@10.3.2(@types/node@25.3.3)': + '@inquirer/core@11.2.1(@types/node@25.3.3)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.3.3) + '@inquirer/ansi': 2.0.8 + '@inquirer/figures': 2.0.9 + '@inquirer/type': 4.1.1(@types/node@25.3.3) cli-width: 4.1.0 - mute-stream: 2.0.0 + fast-wrap-ansi: 0.2.2 + mute-stream: 3.0.0 signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 optionalDependencies: '@types/node': 25.3.3 - '@inquirer/editor@4.2.23(@types/node@25.3.3)': + '@inquirer/core@12.0.2(@types/node@25.3.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.3) - '@inquirer/external-editor': 1.0.3(@types/node@25.3.3) - '@inquirer/type': 3.0.10(@types/node@25.3.3) + '@inquirer/ansi': 2.0.8 + '@inquirer/figures': 2.0.9 + '@inquirer/type': 4.1.1(@types/node@25.3.3) + cli-width: 4.1.0 + fast-wrap-ansi: 0.2.2 + mute-stream: 3.0.0 + signal-exit: 4.1.0 optionalDependencies: '@types/node': 25.3.3 - '@inquirer/expand@4.0.23(@types/node@25.3.3)': + '@inquirer/editor@5.3.2(@types/node@25.3.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.3) - '@inquirer/type': 3.0.10(@types/node@25.3.3) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 12.0.2(@types/node@25.3.3) + '@inquirer/external-editor': 3.0.5(@types/node@25.3.3) + '@inquirer/type': 4.1.1(@types/node@25.3.3) + optionalDependencies: + '@types/node': 25.3.3 + + '@inquirer/expand@5.1.4(@types/node@25.3.3)': + dependencies: + '@inquirer/core': 12.0.2(@types/node@25.3.3) + '@inquirer/type': 4.1.1(@types/node@25.3.3) optionalDependencies: '@types/node': 25.3.3 @@ -2869,73 +2923,77 @@ snapshots: optionalDependencies: '@types/node': 25.3.3 - '@inquirer/figures@1.0.15': {} + '@inquirer/external-editor@3.0.5(@types/node@25.3.3)': + dependencies: + chardet: 2.2.0 + iconv-lite: 0.7.3 + optionalDependencies: + '@types/node': 25.3.3 + + '@inquirer/figures@2.0.9': {} - '@inquirer/input@4.3.1(@types/node@25.3.3)': + '@inquirer/input@5.1.5(@types/node@25.3.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.3) - '@inquirer/type': 3.0.10(@types/node@25.3.3) + '@inquirer/core': 12.0.2(@types/node@25.3.3) + '@inquirer/type': 4.1.1(@types/node@25.3.3) optionalDependencies: '@types/node': 25.3.3 - '@inquirer/number@3.0.23(@types/node@25.3.3)': + '@inquirer/number@4.2.2(@types/node@25.3.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.3) - '@inquirer/type': 3.0.10(@types/node@25.3.3) + '@inquirer/core': 12.0.2(@types/node@25.3.3) + '@inquirer/type': 4.1.1(@types/node@25.3.3) optionalDependencies: '@types/node': 25.3.3 - '@inquirer/password@4.0.23(@types/node@25.3.3)': + '@inquirer/password@5.2.1(@types/node@25.3.3)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.3.3) - '@inquirer/type': 3.0.10(@types/node@25.3.3) + '@inquirer/ansi': 2.0.8 + '@inquirer/core': 12.0.2(@types/node@25.3.3) + '@inquirer/type': 4.1.1(@types/node@25.3.3) optionalDependencies: '@types/node': 25.3.3 - '@inquirer/prompts@7.10.1(@types/node@25.3.3)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@25.3.3) - '@inquirer/confirm': 5.1.21(@types/node@25.3.3) - '@inquirer/editor': 4.2.23(@types/node@25.3.3) - '@inquirer/expand': 4.0.23(@types/node@25.3.3) - '@inquirer/input': 4.3.1(@types/node@25.3.3) - '@inquirer/number': 3.0.23(@types/node@25.3.3) - '@inquirer/password': 4.0.23(@types/node@25.3.3) - '@inquirer/rawlist': 4.1.11(@types/node@25.3.3) - '@inquirer/search': 3.2.2(@types/node@25.3.3) - '@inquirer/select': 4.4.2(@types/node@25.3.3) + '@inquirer/prompts@8.7.1(@types/node@25.3.3)': + dependencies: + '@inquirer/checkbox': 5.2.4(@types/node@25.3.3) + '@inquirer/confirm': 6.3.1(@types/node@25.3.3) + '@inquirer/editor': 5.3.2(@types/node@25.3.3) + '@inquirer/expand': 5.1.4(@types/node@25.3.3) + '@inquirer/input': 5.1.5(@types/node@25.3.3) + '@inquirer/number': 4.2.2(@types/node@25.3.3) + '@inquirer/password': 5.2.1(@types/node@25.3.3) + '@inquirer/rawlist': 5.3.4(@types/node@25.3.3) + '@inquirer/search': 4.3.2(@types/node@25.3.3) + '@inquirer/select': 5.2.4(@types/node@25.3.3) optionalDependencies: '@types/node': 25.3.3 - '@inquirer/rawlist@4.1.11(@types/node@25.3.3)': + '@inquirer/rawlist@5.3.4(@types/node@25.3.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.3) - '@inquirer/type': 3.0.10(@types/node@25.3.3) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 12.0.2(@types/node@25.3.3) + '@inquirer/type': 4.1.1(@types/node@25.3.3) optionalDependencies: '@types/node': 25.3.3 - '@inquirer/search@3.2.2(@types/node@25.3.3)': + '@inquirer/search@4.3.2(@types/node@25.3.3)': dependencies: - '@inquirer/core': 10.3.2(@types/node@25.3.3) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.3.3) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 12.0.2(@types/node@25.3.3) + '@inquirer/figures': 2.0.9 + '@inquirer/type': 4.1.1(@types/node@25.3.3) optionalDependencies: '@types/node': 25.3.3 - '@inquirer/select@4.4.2(@types/node@25.3.3)': + '@inquirer/select@5.2.4(@types/node@25.3.3)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.3.3) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.3.3) - yoctocolors-cjs: 2.1.3 + '@inquirer/ansi': 2.0.8 + '@inquirer/core': 12.0.2(@types/node@25.3.3) + '@inquirer/figures': 2.0.9 + '@inquirer/type': 4.1.1(@types/node@25.3.3) optionalDependencies: '@types/node': 25.3.3 - '@inquirer/type@3.0.10(@types/node@25.3.3)': + '@inquirer/type@4.1.1(@types/node@25.3.3)': optionalDependencies: '@types/node': 25.3.3 @@ -2967,11 +3025,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 - - '@posthog/core@1.23.1': - dependencies: - cross-spawn: 7.0.6 + fastq: 1.20.3 '@posthog/core@1.24.6': {} @@ -3367,6 +3421,8 @@ snapshots: chardet@2.1.1: {} + chardet@2.2.0: {} + check-error@2.1.3: {} ci-info@3.9.0: {} @@ -3387,6 +3443,8 @@ snapshots: cli-spinners@2.9.2: {} + cli-spinners@3.4.0: {} + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 @@ -3445,6 +3503,8 @@ snapshots: detect-libc@2.1.2: {} + diff@9.0.0: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -3458,8 +3518,6 @@ snapshots: emoji-regex@10.6.0: {} - emoji-regex@8.0.0: {} - enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -3650,15 +3708,25 @@ snapshots: fast-string-truncated-width@1.2.1: {} + fast-string-truncated-width@3.0.3: {} + fast-string-width@1.1.0: dependencies: fast-string-truncated-width: 1.2.1 + fast-string-width@3.0.2: + dependencies: + fast-string-truncated-width: 3.0.3 + fast-wrap-ansi@0.1.6: dependencies: fast-string-width: 1.1.0 - fastq@1.20.1: + fast-wrap-ansi@0.2.2: + dependencies: + fast-string-width: 3.0.2 + + fastq@1.20.3: dependencies: reusify: 1.1.0 @@ -3710,6 +3778,8 @@ snapshots: get-east-asian-width@1.5.0: {} + get-east-asian-width@1.6.0: {} + get-stream@8.0.1: {} get-tsconfig@4.13.6: @@ -3773,6 +3843,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.3: + dependencies: + safer-buffer: 2.1.2 + ignore@5.3.2: {} ignore@7.0.5: {} @@ -3796,13 +3870,11 @@ snapshots: is-extglob@2.1.1: {} - is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@4.0.0: {} is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 is-glob@4.0.3: dependencies: @@ -3974,6 +4046,11 @@ snapshots: chalk: 5.6.2 is-unicode-supported: 1.3.0 + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.2.0 + log-update@6.1.0: dependencies: ansi-escapes: 7.3.0 @@ -4025,7 +4102,7 @@ snapshots: ms@2.1.3: {} - mute-stream@2.0.0: {} + mute-stream@3.0.0: {} nanoid@3.3.11: {} @@ -4102,6 +4179,17 @@ snapshots: string-width: 7.2.0 strip-ansi: 7.2.0 + ora@9.4.1: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.4.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.3.2 + string-width: 8.2.2 + outdent@0.5.0: {} p-filter@2.1.0: @@ -4181,10 +4269,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - posthog-node@5.26.0: - dependencies: - '@posthog/core': 1.23.1 - posthog-node@5.28.11: dependencies: '@posthog/core': 1.24.6 @@ -4336,13 +4420,9 @@ snapshots: stdin-discarder@0.2.2: {} - string-argv@0.3.2: {} + stdin-discarder@0.3.2: {} - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 + string-argv@0.3.2: {} string-width@7.2.0: dependencies: @@ -4350,6 +4430,11 @@ snapshots: get-east-asian-width: 1.5.0 strip-ansi: 7.2.0 + string-width@8.2.2: + dependencies: + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -4610,12 +4695,6 @@ snapshots: word-wrap@1.2.5: {} - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 @@ -4632,6 +4711,8 @@ snapshots: yocto-queue@0.1.0: {} - yoctocolors-cjs@2.1.3: {} + yoctocolors@2.2.0: {} zod@4.3.6: {} + + zod@4.5.4: {} From a37da84da358e563f6177c8fde4e376d051822b1 Mon Sep 17 00:00:00 2001 From: Jakob Heuser Date: Sat, 5 Sep 2026 15:45:24 -0700 Subject: [PATCH 2/2] fix(openspec): let the cli Purpose name the behaviour it also governs The Purpose framed the capability as package shape alone, but the spec also holds requirements that are runtime behaviour rather than packaging: orgId resolution from the JWT, the identity resolution function, the global --anonymous flag, and stable error codes under --json. Fifteen of the sixteen Purposes in this change match their requirement list; this was the one that did not, because it is the one capability that genuinely mixes the two. A Purpose is a summary rather than an inventory, so this adds one clause for the behavioural half instead of listing it. --- openspec/specs/cli/spec.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openspec/specs/cli/spec.md b/openspec/specs/cli/spec.md index 0794fc87..89edbdbb 100644 --- a/openspec/specs/cli/spec.md +++ b/openspec/specs/cli/spec.md @@ -2,7 +2,7 @@ ## Purpose -The shape of the `@taskless/cli` package itself: what it builds, what it publishes, and which entry points consumers are allowed to depend on. +The shape of the `@taskless/cli` package itself: what it builds, what it publishes, and which entry points consumers are allowed to depend on. It also covers the behaviour every subcommand inherits rather than defines, including how the CLI resolves identity, what `--anonymous` changes, and the stable error codes it reports under `--json`. ## Requirements