openplanr 2.2639.4
Patch Changes
Positional artifact ids must now look like an artifact id such as
US-001(an uppercase prefix, a hyphen and three or more digits).planr <type> show|update,openplanr update,openplanr spec shape|show|status|destroy|attach-design|promote|sync,openplanr sprint refinement|diff|close|apply,openplanr template save,openplanr github pushandopenplanr linear pushreject anything else withE_ARTIFACT_ID_INVALIDinstead of printing another artifact for.*, resolving the bare prefixSPECto the first spec, or crashing on(. Artifact, Gherkin, spec, managed-block and id-prefix lookups now match names literally.The one-time migration of
~/.planr/credentials.jsonnow moves only the CLI's own keys and leaves other entries, such as the design engine'sopenai_api_key, in the file, deleting it only when nothing else remains. If an earlier run moved the design engine's key, store it again with the design engine'ssetupcommand or setOPENAI_API_KEY.--verbosenow prints the stack of a failed command and every cause it wraps, while the default output stays one line and--jsonoutput stays one envelope. JSON mode and theupgradeexemption from the inline upgrade offer are read from the parsed command instead of scanning the raw arguments, so an option value spelled--jsonno longer switches the output to JSON and an argument that is merely the wordupgradeno longer suppresses the offer. A thrown non-Errorvalue is reported as its text instead ofundefined, and--verboseexplains why the compatibility manifest could not be fetched or read.JSON the CLI reads from
gh,claudeandcodex, from the credential store and from the published compatibility manifest is now validated against a schema where it is parsed. A malformed or changed payload fails withE_EXTERNAL_JSON_INVALID, naming the command or file and each offending field, instead of aTypeErrordeep in a service; credential documents never echo their contents in the message. A legacy~/.planr/credentials.jsonthat cannot be read is now kept for a later migration instead of being deleted as empty, and an off-schema compatibility manifest is ignored rather than cached.openplanr template save --nameandopenplanr template deletenow accept only lowercase words joined by hyphens (such asrest-endpoint, at most 64 characters) and fail withE_TEMPLATE_NAME_INVALIDfor anything else, so a name like../../packageor an absolute path can no longer write or delete a file outside.planr/templates. Both commands refuse a templates directory that links outside the planning directory (E_TEMPLATE_DIR_OUTSIDE), andsavereplaces an existing template file atomically instead of writing through a link.openplanr operate dashboardandplanr-pipeline dashboardnow loadstartDashboardfromplanr-pipeline/dashboardinstead of the deprecated package-root alias. Behavior is unchanged; the command registry and its projection record the two changed command sources.The remaining source modules over 800 lines open with a short comment that names what the module owns and its entry points, and three module comments that misdescribed their files now match the code. Only comments change: code, exports and behaviour are unchanged, and the bundled dashboard assets differ only in their source-derived build id.
Source modules over 800 lines open with a short comment that names what the module owns and its entry points, and several stale comments now match the code. Only comments change: code, exports and behaviour are unchanged, and the bundled dashboard assets differ only in their source-derived build id.
PLANR_HOMEnow also relocates the CLI's runtime state and backups, the pipeline runtime lookup anddoctor, and design share custody, as it already did for the design engine and the review and dashboard daemons.OPENPLANR_HOMEis deprecated: whenPLANR_HOMEis unset it still resolves to$OPENPLANR_HOME/.planr, and it prints a one-time warning on stderr; when both are set,PLANR_HOMEwins. Design share custody kept underOPENPLANR_HOMEmoves from$OPENPLANR_HOME/design-sharesto$OPENPLANR_HOME/.planr/design-shares, so move that directory if you set the variable. The doctor skill documents both variables.