@storybloq/storybloq 1.2.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -40,7 +40,7 @@ The real cost isn't wasted setup time. It's repeated mistakes, relitigated desig
40
40
  Every project gets a `.story/` directory of JSON and markdown files. Tickets, issues, roadmap phases, session handovers, and lessons learned all live there, tracked by git, readable by any AI.
41
41
 
42
42
  - **CLI:** `storybloq` - inspect and mutate `.story/` from the terminal.
43
- - **MCP server:** 43 tools Claude Code and Codex can call directly, no subprocess spawning.
43
+ - **MCP server:** 49 tools Claude Code and Codex can call directly, no subprocess spawning.
44
44
  - **Skill:** `/story` in Claude Code or `$story` in Codex loads project state at the start of every session.
45
45
  - **Mac app:** native sidebar that watches `.story/` and updates live while your AI client works (separate product, free on the App Store).
46
46
 
@@ -154,6 +154,7 @@ All commands accept `--format json|md` (default `md`). Pipe JSON through `jq` fo
154
154
  | `storybloq ticket blocked` | All currently blocked tickets |
155
155
  | `storybloq ticket create --title --type --phase [--description] [--blocked-by] [--parent-ticket]` | Create |
156
156
  | `storybloq ticket update <id> [--status] [--title] [--phase] [--order] ...` | Update |
157
+ | `storybloq ticket meta get\|set\|unset <id> [path] [value]` | Manage custom passthrough metadata |
157
158
  | `storybloq ticket delete <id> [--force]` | Delete |
158
159
 
159
160
  ### Issues
@@ -164,6 +165,7 @@ All commands accept `--format json|md` (default `md`). Pipe JSON through `jq` fo
164
165
  | `storybloq issue get <id>` | Issue detail |
165
166
  | `storybloq issue create --title --severity --impact [--components] [--related-tickets] [--location]` | Create |
166
167
  | `storybloq issue update <id> [--status] [--title] [--severity] ...` | Update |
168
+ | `storybloq issue meta get\|set\|unset <id> [path] [value]` | Manage custom passthrough metadata |
167
169
  | `storybloq issue delete <id>` | Delete |
168
170
 
169
171
  ### Notes and lessons
@@ -195,15 +197,15 @@ codex mcp add storybloq --env STORYBLOQ_CLIENT=codex -- storybloq --mcp
195
197
 
196
198
  The server imports the same TypeScript modules as the CLI directly, so there's no subprocess overhead. It auto-discovers the project root by walking up from the working directory to the nearest `.story/` parent.
197
199
 
198
- **43 tools** grouped by responsibility:
200
+ **49 tools** grouped by responsibility:
199
201
 
200
202
  ### Read (no side effects)
201
203
 
202
- `storybloq_status` · `storybloq_phase_list` · `storybloq_phase_current` · `storybloq_phase_tickets` · `storybloq_ticket_list` · `storybloq_ticket_get` · `storybloq_ticket_next` · `storybloq_ticket_blocked` · `storybloq_issue_list` · `storybloq_issue_get` · `storybloq_note_list` · `storybloq_note_get` · `storybloq_lesson_list` · `storybloq_lesson_get` · `storybloq_lesson_digest` · `storybloq_handover_list` · `storybloq_handover_latest` · `storybloq_handover_get` · `storybloq_blocker_list` · `storybloq_validate` · `storybloq_recap` · `storybloq_recommend` · `storybloq_export` · `storybloq_selftest`
204
+ `storybloq_status` · `storybloq_phase_list` · `storybloq_phase_current` · `storybloq_phase_tickets` · `storybloq_ticket_list` · `storybloq_ticket_get` · `storybloq_ticket_meta_get` · `storybloq_ticket_next` · `storybloq_ticket_blocked` · `storybloq_issue_list` · `storybloq_issue_get` · `storybloq_issue_meta_get` · `storybloq_note_list` · `storybloq_note_get` · `storybloq_lesson_list` · `storybloq_lesson_get` · `storybloq_lesson_digest` · `storybloq_handover_list` · `storybloq_handover_latest` · `storybloq_handover_get` · `storybloq_blocker_list` · `storybloq_validate` · `storybloq_recap` · `storybloq_recommend` · `storybloq_export` · `storybloq_selftest`
203
205
 
204
206
  ### Write (mutate `.story/`)
205
207
 
206
- `storybloq_snapshot` · `storybloq_handover_create` · `storybloq_ticket_create` · `storybloq_ticket_update` · `storybloq_issue_create` · `storybloq_issue_update` · `storybloq_note_create` · `storybloq_note_update` · `storybloq_lesson_create` · `storybloq_lesson_update` · `storybloq_lesson_reinforce` · `storybloq_phase_create`
208
+ `storybloq_snapshot` · `storybloq_handover_create` · `storybloq_ticket_create` · `storybloq_ticket_update` · `storybloq_ticket_meta_set` · `storybloq_ticket_meta_unset` · `storybloq_issue_create` · `storybloq_issue_update` · `storybloq_issue_meta_set` · `storybloq_issue_meta_unset` · `storybloq_note_create` · `storybloq_note_update` · `storybloq_lesson_create` · `storybloq_lesson_update` · `storybloq_lesson_reinforce` · `storybloq_phase_create`
207
209
 
208
210
  ### Autonomous mode + review + observability
209
211
 
@@ -303,6 +305,8 @@ Full type definitions ship with the package (`exports.types`).
303
305
 
304
306
  Each record is its own file. IDs are sequential within type (`T-001`, `T-002`, ...). Relationships are single-canonical-owner: a ticket's `blockedBy` field points at blocker tickets, and the reverse (who-blocks-me) is derived by scanning.
305
307
 
308
+ Ticket and issue records preserve unknown JSON fields. Use `storybloq ticket meta` and `storybloq issue meta` to read or mutate those custom passthrough fields without touching core Storybloq fields. Values are JSON, and dot paths address nested objects, for example `storybloq ticket meta set T-001 integration.linear '"ABC-123"'`.
309
+
306
310
  ## Example workflow
307
311
 
308
312
  ```bash