@plot-pm/board 0.6.0-rc.94 → 0.6.0-rc.95
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 +1 -1
- package/plot-plan-meta.sh +23 -7
package/package.json
CHANGED
package/plot-plan-meta.sh
CHANGED
|
@@ -45,8 +45,14 @@
|
|
|
45
45
|
# file the path given
|
|
46
46
|
# format canonical | frontmatter | none
|
|
47
47
|
# phase_raw primary phase value as written ("" if absent)
|
|
48
|
-
# phase normalized: draft|approved|delivered|released|
|
|
49
|
-
# superseded|UNKNOWN|NONE
|
|
48
|
+
# phase normalized: draft|design|approved|delivered|released|
|
|
49
|
+
# rejected|superseded|UNKNOWN|NONE
|
|
50
|
+
# `design` is a phase of its own, not a synonym for anything:
|
|
51
|
+
# a plan in Design cannot yet be handed to development because
|
|
52
|
+
# it needs a spec, a spike or a tracer bullet first. That is a
|
|
53
|
+
# different statement from "approved and nobody has started",
|
|
54
|
+
# which is a queue. (`ready-for-review`/`in-review` DO
|
|
55
|
+
# normalize onto `approved` — those are synonyms; this is not.)
|
|
50
56
|
# phase_alt_raw secondary value when the file carries two (front matter
|
|
51
57
|
# status: AND phase:), else ""
|
|
52
58
|
# phase_alt normalized phase_alt_raw (NONE when absent)
|
|
@@ -101,6 +107,12 @@
|
|
|
101
107
|
# `Released:` or front matter `released:` — date and version).
|
|
102
108
|
# Empty until /plot-release records it; the tag stays the git
|
|
103
109
|
# truth and this merely reflects it.
|
|
110
|
+
# design_raw the design transition record as written (`## Status`
|
|
111
|
+
# `Design:` or front matter `design:` — who/when, and what the
|
|
112
|
+
# design work is); "" if absent. Reported for any plan that
|
|
113
|
+
# carries the line, whatever its phase: a plan that WENT
|
|
114
|
+
# THROUGH design keeps the record after moving on, exactly as
|
|
115
|
+
# `approved_raw` outlives the Approved phase.
|
|
104
116
|
# approved_raw the approval transition record as written (`## Status`
|
|
105
117
|
# `Approved:` or front matter `approved:` — who/when/channel,
|
|
106
118
|
# e.g. "2026-07-30, alice, in-session"); "" if absent
|
|
@@ -153,7 +165,7 @@ if [ ${#files[@]} -eq 0 ] && [ ${#missing[@]} -eq 0 ]; then
|
|
|
153
165
|
fi
|
|
154
166
|
|
|
155
167
|
for f in ${missing[@]+"${missing[@]}"}; do
|
|
156
|
-
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":[],"issues":[],"changelog":[],"review_raw":"","review":"NONE","impl_raw":"","impl":"NONE","approved_raw":"","released_raw":"","delivered_raw":"","started_raw":[]}\n' \
|
|
168
|
+
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":[],"issues":[],"changelog":[],"review_raw":"","review":"NONE","impl_raw":"","impl":"NONE","design_raw":"","approved_raw":"","released_raw":"","delivered_raw":"","started_raw":[]}\n' \
|
|
157
169
|
"$(printf '%s' "$f" | sed 's/\\/\\\\/g; s/"/\\"/g')"
|
|
158
170
|
done
|
|
159
171
|
|
|
@@ -181,7 +193,7 @@ function norm_phase(raw, lower, toks, n, i, t) {
|
|
|
181
193
|
for (i = 1; i <= n; i++) {
|
|
182
194
|
t = toks[i]
|
|
183
195
|
gsub(/^[^a-z]+/, "", t); gsub(/[^a-z-]+$/, "", t)
|
|
184
|
-
if (t ~ /^(draft|approved|delivered|released|rejected|superseded)$/) return t
|
|
196
|
+
if (t ~ /^(draft|design|approved|delivered|released|rejected|superseded)$/) return t
|
|
185
197
|
if (t == "ready-for-review" || t == "in-review") return "approved"
|
|
186
198
|
}
|
|
187
199
|
return "UNKNOWN"
|
|
@@ -226,11 +238,11 @@ function reset_state() {
|
|
|
226
238
|
fm_status = ""; fm_phase = ""; fm_type = ""
|
|
227
239
|
fm_title = ""; fm_sprint = ""; fm_story = ""; fm_assignee = ""
|
|
228
240
|
fm_review = ""; fm_impl = ""; fm_approved = ""; fm_started = ""; fm_released = ""
|
|
229
|
-
fm_delivered = ""
|
|
241
|
+
fm_delivered = ""; fm_design = ""
|
|
230
242
|
canon_phase = ""; canon_type = ""
|
|
231
243
|
canon_sprint = ""; canon_story = ""; canon_assignee = ""
|
|
232
244
|
canon_review = ""; canon_impl = ""; canon_approved = ""; canon_released = ""
|
|
233
|
-
canon_delivered = ""
|
|
245
|
+
canon_delivered = ""; canon_design = ""
|
|
234
246
|
h1_title = ""
|
|
235
247
|
# "" means the plan carries no readable round — NOT zero. Emitted by omitting
|
|
236
248
|
# the field, so a consumer cannot mistake "never interrogated" for "asked
|
|
@@ -247,7 +259,7 @@ function reset_state() {
|
|
|
247
259
|
fm_changelog = ""
|
|
248
260
|
delete changelog; n_changelog = 0; changelog_seen = 0; cl_open = 0
|
|
249
261
|
}
|
|
250
|
-
function emit_record( fmt, praw, palt_raw, traw, title, sprint, story, assignee, review, impl, approved, delivered, issue, i, j, out, sorted_b, sorted_p, sorted_i, nb, np, ni) {
|
|
262
|
+
function emit_record( fmt, praw, palt_raw, traw, title, sprint, story, assignee, review, impl, design, approved, delivered, issue, i, j, out, sorted_b, sorted_p, sorted_i, nb, np, ni) {
|
|
251
263
|
if (fm_status != "" || fm_phase != "") {
|
|
252
264
|
fmt = "frontmatter"
|
|
253
265
|
praw = (fm_status != "") ? fm_status : fm_phase
|
|
@@ -266,6 +278,7 @@ function emit_record( fmt, praw, palt_raw, traw, title, sprint, story, assigne
|
|
|
266
278
|
assignee = strip_placeholder((fm_assignee != "") ? fm_assignee : canon_assignee)
|
|
267
279
|
review = strip_placeholder((fm_review != "") ? fm_review : canon_review)
|
|
268
280
|
impl = strip_placeholder((fm_impl != "") ? fm_impl : canon_impl)
|
|
281
|
+
design = strip_placeholder((fm_design != "") ? fm_design : canon_design)
|
|
269
282
|
approved = strip_placeholder((fm_approved != "") ? fm_approved : canon_approved)
|
|
270
283
|
released = strip_placeholder((fm_released != "") ? fm_released : canon_released)
|
|
271
284
|
delivered = strip_placeholder((fm_delivered != "") ? fm_delivered : canon_delivered)
|
|
@@ -345,6 +358,7 @@ function emit_record( fmt, praw, palt_raw, traw, title, sprint, story, assigne
|
|
|
345
358
|
out = out "]"
|
|
346
359
|
out = out ",\"review_raw\":\"" jesc(review) "\",\"review\":\"" norm_review(review) "\""
|
|
347
360
|
out = out ",\"impl_raw\":\"" jesc(impl) "\",\"impl\":\"" norm_impl(impl) "\""
|
|
361
|
+
out = out ",\"design_raw\":\"" jesc(design) "\""
|
|
348
362
|
out = out ",\"approved_raw\":\"" jesc(approved) "\""
|
|
349
363
|
out = out ",\"released_raw\":\"" jesc(released) "\""
|
|
350
364
|
out = out ",\"delivered_raw\":\"" jesc(delivered) "\""
|
|
@@ -376,6 +390,7 @@ in_fm {
|
|
|
376
390
|
else if (lower ~ /^assignee:/ && fm_assignee == "") fm_assignee = val_after_colon($0)
|
|
377
391
|
else if (lower ~ /^review:/ && fm_review == "") fm_review = val_after_colon($0)
|
|
378
392
|
else if (lower ~ /^impl:/ && fm_impl == "") fm_impl = val_after_colon($0)
|
|
393
|
+
else if (lower ~ /^design:/ && fm_design == "") fm_design = val_after_colon($0)
|
|
379
394
|
else if (lower ~ /^approved:/ && fm_approved == "") fm_approved = val_after_colon($0)
|
|
380
395
|
else if (lower ~ /^released:/ && fm_released == "") fm_released = val_after_colon($0)
|
|
381
396
|
else if (lower ~ /^delivered:/ && fm_delivered == "") fm_delivered = val_after_colon($0)
|
|
@@ -437,6 +452,7 @@ section == "status" {
|
|
|
437
452
|
else if (lower ~ /^[ \t]*[-*]?[ \t]*\**issue[:*]/ && canon_issue == "") canon_issue = val_after_colon($0)
|
|
438
453
|
else if (lower ~ /^[ \t]*[-*]?[ \t]*\**review[:*]/ && canon_review == "") canon_review = val_after_colon($0)
|
|
439
454
|
else if (lower ~ /^[ \t]*[-*]?[ \t]*\**impl[:*]/ && canon_impl == "") canon_impl = val_after_colon($0)
|
|
455
|
+
else if (lower ~ /^[ \t]*[-*]?[ \t]*\**design[:*]/ && canon_design == "") canon_design = val_after_colon($0)
|
|
440
456
|
else if (lower ~ /^[ \t]*[-*]?[ \t]*\**approved[:*]/ && canon_approved == "") canon_approved = val_after_colon($0)
|
|
441
457
|
else if (lower ~ /^[ \t]*[-*]?[ \t]*\**released[:*]/ && canon_released == "") canon_released = val_after_colon($0)
|
|
442
458
|
else if (lower ~ /^[ \t]*[-*]?[ \t]*\**delivered[:*]/ && canon_delivered == "") canon_delivered = val_after_colon($0)
|