@plot-pm/board 0.3.1-rc.25 → 0.3.1-rc.26

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plot-pm/board",
3
- "version": "0.3.1-rc.25",
3
+ "version": "0.3.1-rc.26",
4
4
  "description": "Local Kanban board for Plot — a glanceable view of plan phases from docs/plans, with sprint and story filters",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/plot-plan-meta.sh CHANGED
@@ -83,6 +83,13 @@
83
83
  # approved_raw the approval transition record as written (`## Status`
84
84
  # `Approved:` or front matter `approved:` — who/when/channel,
85
85
  # e.g. "2026-07-30, alice, in-session"); "" if absent
86
+ # delivered_raw the delivery transition record as written (`## Status`
87
+ # `Delivered:` or front matter `delivered:` — a date, often
88
+ # bare); "" if absent. NOT the same statement as
89
+ # `phase: delivered`: a plan can carry the phase with the
90
+ # record left empty (a bookkeeping fault plot-reconcile-scan
91
+ # reports), and a consumer that needs a DATE must read this
92
+ # rather than infer one from the phase.
86
93
  # started_raw implementation-start records, one raw string per
87
94
  # `Started:` line in `## Status` (repeatable; front matter
88
95
  # `started:` contributes one entry); [] if absent.
@@ -115,7 +122,7 @@ if [ ${#files[@]} -eq 0 ] && [ ${#missing[@]} -eq 0 ]; then
115
122
  fi
116
123
 
117
124
  for f in ${missing[@]+"${missing[@]}"}; do
118
- printf '{"file":"%s","format":"none","error":"file not found","phase_raw":"","phase":"NONE","phase_alt_raw":"","phase_alt":"NONE","type":"","title":"","sprint":"","story":"","assignee":"","branches":[],"prs":[],"review_raw":"","review":"NONE","impl_raw":"","impl":"NONE","approved_raw":"","released_raw":"","started_raw":[]}\n' \
125
+ printf '{"file":"%s","format":"none","error":"file not found","phase_raw":"","phase":"NONE","phase_alt_raw":"","phase_alt":"NONE","type":"","title":"","sprint":"","story":"","assignee":"","branches":[],"prs":[],"review_raw":"","review":"NONE","impl_raw":"","impl":"NONE","approved_raw":"","released_raw":"","delivered_raw":"","started_raw":[]}\n' \
119
126
  "$(printf '%s' "$f" | sed 's/\\/\\\\/g; s/"/\\"/g')"
120
127
  done
121
128
 
@@ -188,9 +195,11 @@ function reset_state() {
188
195
  fm_status = ""; fm_phase = ""; fm_type = ""
189
196
  fm_title = ""; fm_sprint = ""; fm_story = ""; fm_assignee = ""
190
197
  fm_review = ""; fm_impl = ""; fm_approved = ""; fm_started = ""; fm_released = ""
198
+ fm_delivered = ""
191
199
  canon_phase = ""; canon_type = ""
192
200
  canon_sprint = ""; canon_story = ""; canon_assignee = ""
193
201
  canon_review = ""; canon_impl = ""; canon_approved = ""; canon_released = ""
202
+ canon_delivered = ""
194
203
  h1_title = ""
195
204
  in_fm = 0; section = ""; in_comment = 0; branches_seen = 0
196
205
  delete branches; n_branches = 0
@@ -199,7 +208,7 @@ function reset_state() {
199
208
  delete deferred_of; delete claimed_of; delete ordered_b; n_waves = 0
200
209
  delete started; n_started = 0
201
210
  }
202
- function emit_record( fmt, praw, palt_raw, traw, title, sprint, story, assignee, review, impl, approved, i, j, out, sorted_b, sorted_p, nb, np) {
211
+ function emit_record( fmt, praw, palt_raw, traw, title, sprint, story, assignee, review, impl, approved, delivered, i, j, out, sorted_b, sorted_p, nb, np) {
203
212
  if (fm_status != "" || fm_phase != "") {
204
213
  fmt = "frontmatter"
205
214
  praw = (fm_status != "") ? fm_status : fm_phase
@@ -220,6 +229,7 @@ function emit_record( fmt, praw, palt_raw, traw, title, sprint, story, assigne
220
229
  impl = strip_placeholder((fm_impl != "") ? fm_impl : canon_impl)
221
230
  approved = strip_placeholder((fm_approved != "") ? fm_approved : canon_approved)
222
231
  released = strip_placeholder((fm_released != "") ? fm_released : canon_released)
232
+ delivered = strip_placeholder((fm_delivered != "") ? fm_delivered : canon_delivered)
223
233
  if (fm_started != "" && strip_placeholder(fm_started) != "") started[++n_started] = fm_started
224
234
  # Insertion sort + dedupe (portable: no gawk asort).
225
235
  nb = 0
@@ -266,6 +276,7 @@ function emit_record( fmt, praw, palt_raw, traw, title, sprint, story, assigne
266
276
  out = out ",\"impl_raw\":\"" jesc(impl) "\",\"impl\":\"" norm_impl(impl) "\""
267
277
  out = out ",\"approved_raw\":\"" jesc(approved) "\""
268
278
  out = out ",\"released_raw\":\"" jesc(released) "\""
279
+ out = out ",\"delivered_raw\":\"" jesc(delivered) "\""
269
280
  out = out ",\"started_raw\":["
270
281
  for (i = 1; i <= n_started; i++) out = out (i > 1 ? "," : "") "\"" jesc(started[i]) "\""
271
282
  out = out "]}"
@@ -292,6 +303,7 @@ in_fm {
292
303
  else if (lower ~ /^impl:/ && fm_impl == "") fm_impl = val_after_colon($0)
293
304
  else if (lower ~ /^approved:/ && fm_approved == "") fm_approved = val_after_colon($0)
294
305
  else if (lower ~ /^released:/ && fm_released == "") fm_released = val_after_colon($0)
306
+ else if (lower ~ /^delivered:/ && fm_delivered == "") fm_delivered = val_after_colon($0)
295
307
  else if (lower ~ /^started:/ && fm_started == "") fm_started = val_after_colon($0)
296
308
  next
297
309
  }
@@ -320,6 +332,7 @@ section == "status" {
320
332
  else if (lower ~ /^[ \t]*[-*]?[ \t]*\**impl[:*]/ && canon_impl == "") canon_impl = val_after_colon($0)
321
333
  else if (lower ~ /^[ \t]*[-*]?[ \t]*\**approved[:*]/ && canon_approved == "") canon_approved = val_after_colon($0)
322
334
  else if (lower ~ /^[ \t]*[-*]?[ \t]*\**released[:*]/ && canon_released == "") canon_released = val_after_colon($0)
335
+ else if (lower ~ /^[ \t]*[-*]?[ \t]*\**delivered[:*]/ && canon_delivered == "") canon_delivered = val_after_colon($0)
323
336
  else if (lower ~ /^[ \t]*[-*]?[ \t]*\**started[:*]/) {
324
337
  _s = strip_placeholder(val_after_colon($0))
325
338
  if (_s != "") started[++n_started] = _s