shapeup-sdlc 3.18.1 → 3.18.3
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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shapeup-sdlc-plugin",
|
|
3
3
|
"displayName": "ShapeUp SDLC Plugin",
|
|
4
|
-
"version": "3.18.
|
|
4
|
+
"version": "3.18.3",
|
|
5
5
|
"description": "Shape Up SDLC harness for Claude Code: shaping, intake, orient, scope-mapping, building (T0-verified, sandboxed, scope-contracted), evaluation and QA skills orchestrated by a tech-lead.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Liberty Nguyen",
|
package/hooks/safety-spine.mjs
CHANGED
|
@@ -106,14 +106,21 @@ function tokens(segment) {
|
|
|
106
106
|
* The program names answer it. Arguments are never recorded — they are where a secret, a token or a
|
|
107
107
|
* private path would be — and a basename says which tool ran without saying where it lives.
|
|
108
108
|
*
|
|
109
|
+
* A `\`-continued line is joined to the one before it FIRST, before any segment split — a shell
|
|
110
|
+
* reads `cmd \<newline> --flag x` as one logical line, and so must this. Splitting on the bare
|
|
111
|
+
* newline first (measured, live) read a multi-line `init run` as one "program" per physical line —
|
|
112
|
+
* `node`, then `--slug`, then `--auto-level`, each a flag misread as an executable — which is how
|
|
113
|
+
* a real dispatch and a garbled one produced the same "clean, permitted" shape in the ledger.
|
|
114
|
+
*
|
|
109
115
|
* @param {string} command - The raw Bash command.
|
|
110
116
|
* @returns {(string|null)} Program basenames joined by " | ", in order, duplicates kept; null when
|
|
111
117
|
* no segment yields one.
|
|
112
118
|
*/
|
|
113
119
|
export function programsOf(command) {
|
|
114
120
|
if (!command || typeof command !== "string") return null;
|
|
121
|
+
const joined = command.replace(/\\[ \t]*\n/g, " ");
|
|
115
122
|
const names = [];
|
|
116
|
-
for (const segment of
|
|
123
|
+
for (const segment of joined.split(/\s*(?:\|\||&&|;|\||\n)\s*/).filter(Boolean)) {
|
|
117
124
|
const first = commandTokens(segment)[0];
|
|
118
125
|
if (!first) continue;
|
|
119
126
|
const base = first.replace(/^["']|["']$/g, "").split("/").pop();
|
package/package.json
CHANGED
|
@@ -189,6 +189,16 @@ Per charter:
|
|
|
189
189
|
a charter is a license to deviate INSIDE its ground, not a script.
|
|
190
190
|
H.2 Suspected finding → reproduce it (≥1 clean repro) before recording. No repro →
|
|
191
191
|
log in session notes as "unconfirmed observation", NOT a finding.
|
|
192
|
+
- A claim that something is GONE / vanished / missing from the screen is not
|
|
193
|
+
reproduced by one tree read (DOM/layout dump) showing no match. Rule out that it
|
|
194
|
+
is merely COVERED first: dismiss whatever sits in front of it — keyboard, dialog,
|
|
195
|
+
sheet, toast, modal — and recheck, or confirm with a second signal (a screenshot,
|
|
196
|
+
scrolling it into view). A node absent from one read and present the moment the
|
|
197
|
+
overlay closes was never gone; that is not a finding, on any platform.
|
|
198
|
+
- A claim that a value SURVIVES a restart/relaunch is not reproduced by observing it
|
|
199
|
+
once after relaunching. Diff it against what a fresh instance shows from its own
|
|
200
|
+
seed/reset state first. A value that matches the seed is the app re-seeding
|
|
201
|
+
correctly, not evidence that anything persisted.
|
|
192
202
|
H.3 Confirmed → record it IMMEDIATELY (in the growing WorkResult, not batched to the end
|
|
193
203
|
of the hunt — a crashed session must not lose confirmed findings):
|
|
194
204
|
|
|
@@ -352,3 +362,8 @@ No verdict line exists in this file by design. The Hunter's last words:
|
|
|
352
362
|
7. **Never invent severity from code reading.** Every finding has a live repro on the
|
|
353
363
|
running app.
|
|
354
364
|
8. **Never gate on Test Surface.** Its absence degrades the hunt; it never blocks it.
|
|
365
|
+
9. **Never call something gone from one tree read.** A DOM/layout dump has no concept of
|
|
366
|
+
what covers a node — rule out an overlay (keyboard, dialog, sheet, toast) before an
|
|
367
|
+
absence counts as reproduced (H.2).
|
|
368
|
+
10. **Never call a value "surviving" a relaunch without diffing the seed.** A value that
|
|
369
|
+
matches the fresh/reset state after a restart is not persistence (H.2).
|