valent-pipeline 0.19.42 → 0.19.44
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
|
@@ -35,6 +35,7 @@ Write `stories/{story_id}/output/qa-test-spec.md` so QA-B can prove the fix:
|
|
|
35
35
|
- **Affected-AC tests:** the existing test cases for the violated AC(s) (reference the source story's `qa-test-spec.md`) — they must still pass.
|
|
36
36
|
- **Real-dependency evidence:** for each active profile, keep the profile's mandatory black-box check (live HTTP + real DB for `api`, real browser for `ui`, etc.) — a fix is only proven against the real boundary, not a mock. The defect class that caused the REJECT (CORS, serialization, auth header, wire-format) lives exactly there.
|
|
37
37
|
- Do NOT invent broad new coverage — the point is to prove the defect is gone and nothing regressed.
|
|
38
|
+
- **Embed each case ID in its test NAME** (same rule as `steps/qa-a/write-acceptance-tests.md` / `steps/bend/write-tests.md`): every regression + affected-AC case carries a `TC-…` id, and the test title MUST contain it — `it('TC-B1: P95 percentile uses the right rank', …)`. `check-spec-conformance` + `trace check` locate each spec'd case by its id in the EXECUTED junit test name; a case id that appears in no test name reads as a MISSING case and fails the evidence gate. State this explicitly in the spec so the dev embeds the ids up front — it is the recurring first-pass miss on bug fixes (a wasted rework cycle every time).
|
|
38
39
|
- Also write the spec manifest `stories/{story_id}/output/qa-test-spec.manifest.json` (same shape as `steps/qa-a/write-spec.md` Step 10, including each case's `ac` mapping to the minimal reqs manifest) — the spec-conformance and trace gates run on bug items too.
|
|
39
40
|
|
|
40
41
|
## Step 4: Hand off
|
package/src/lib/git-flow.js
CHANGED
|
@@ -460,6 +460,25 @@ export function startStory({ root, story, targetBranch = '', prefix = 'story/',
|
|
|
460
460
|
orphanMovedTo = aside;
|
|
461
461
|
}
|
|
462
462
|
git(root, ['worktree', 'add', wtPath, branch]);
|
|
463
|
+
// BUG-2 worktree variant (M-36/M-41, 2026-06-19): same fix as the non-worktree create path — a
|
|
464
|
+
// --from-story bug fix based on a source the TARGET has advanced past must inherit those target
|
|
465
|
+
// commits (the disposition's bug entries on the shared backlog), or `backlog ship --story <bug>`
|
|
466
|
+
// errors "not found". Here the branch lives in a WORKTREE, so the sync merge runs in the worktree
|
|
467
|
+
// checkout (wtPath), and BEFORE setupWorktree materializes .valent-pipeline/node_modules — a clean
|
|
468
|
+
// tree so no untracked file can block the merge. Same guards (create + basedOnStory + target-ahead);
|
|
469
|
+
// a conflict aborts cleanly in the worktree, leaving the branch at its base. Needed for parallel:2.
|
|
470
|
+
let refreshedFromTarget = false;
|
|
471
|
+
let refreshConflict = false;
|
|
472
|
+
if (creating && basedOnStory && branchExists(root, target) && !isMergedInto(root, target, branch)) {
|
|
473
|
+
try {
|
|
474
|
+
git(wtPath, ['merge', '--no-ff', '-m',
|
|
475
|
+
buildCommitMessage({ storyId: story, phase: 'sync', summary: `sync ${target} into ${branch} (inherit shared state from a behind base)` }), target]);
|
|
476
|
+
refreshedFromTarget = true;
|
|
477
|
+
} catch {
|
|
478
|
+
if (mergeInProgress(wtPath)) git(wtPath, ['merge', '--abort']);
|
|
479
|
+
refreshConflict = true;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
463
482
|
const setup = setupWorktree(root, wtPath, setupCommands);
|
|
464
483
|
if (creating) {
|
|
465
484
|
writeFlowRecord(wtPath, story, {
|
|
@@ -477,6 +496,8 @@ export function startStory({ root, story, targetBranch = '', prefix = 'story/',
|
|
|
477
496
|
return {
|
|
478
497
|
branch, base, target, worktree: wtPath, created: creating, resumed: !creating, snapshotSha,
|
|
479
498
|
...(orphanMovedTo ? { orphanMovedTo, warning: `orphaned worktree directory moved aside to ${orphanMovedTo} (crashed run; inspect/delete it manually)` } : {}),
|
|
499
|
+
...(refreshedFromTarget ? { refreshedFromTarget: true } : {}),
|
|
500
|
+
...(refreshConflict ? { refreshConflict: true } : {}),
|
|
480
501
|
...setup,
|
|
481
502
|
};
|
|
482
503
|
}
|