valent-pipeline 0.19.34 → 0.19.35

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": "valent-pipeline",
3
- "version": "0.19.34",
3
+ "version": "0.19.35",
4
4
  "description": "v3 multi-agent AI pipeline for software development lifecycle",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,7 +16,7 @@ import { dirname, join, isAbsolute } from 'path';
16
16
  import { randomBytes } from 'crypto';
17
17
  import { parse as parseYaml } from 'yaml';
18
18
  import {
19
- runEvidence, pinGate, formatRunTrailer, formatRunDigest, resolveRoot, evidenceDir, latestRun, resolveRunForAssert, latestPins,
19
+ runEvidence, pinGate, formatRunTrailer, formatRunDigest, resolveRoot, evidenceDir, latestRun, resolveRunForAssert, detectLabelMultiplex, latestPins,
20
20
  verifyIntegrity, assertRules, assertRedRules, pinSourceDelta, snapshotFiles, buildProof, utcCompact,
21
21
  latestAssert, collectFailingCases, authenticateBaseline, verifyShipEvidence, sha256Hex,
22
22
  validStoryId, recordStageResults,
@@ -225,6 +225,19 @@ export async function evidenceAssertCmd(options) {
225
225
  process.exit(0);
226
226
  }
227
227
 
228
+ // Advisory (option C): residual label-multiplex at this SHA. Record-time auto-namespacing heals the
229
+ // common case (a sibling recorded AFTER the acceptance run); this catches one that recorded BEFORE it
230
+ // (so it kept the base label). Non-blocking — resolveRunForAssert already bound to the required-case
231
+ // run; the warning just surfaces the smell so the project fixes its labels at source.
232
+ try {
233
+ const mx = detectLabelMultiplex(evDir, { sha: run.record?.git?.sha, label });
234
+ if (mx.multiplexed) {
235
+ console.error(`evidence-assert: ⚠ label-multiplex — ${mx.suites.length} disjoint suites share label "${label}" ` +
236
+ `at SHA ${String(run.record?.git?.sha).slice(0, 8)} (runs ${mx.suites.map((s) => s.runId).join(', ')}). Bound to the ` +
237
+ `required-case run; give each suite a distinct --label in QA-B to retire this warning. (HARNESS-GAPS option C)`);
238
+ }
239
+ } catch { /* advisory only — never block the assert */ }
240
+
228
241
  // Re-parse the frozen reports from disk — machine-derived twice (at run time and here).
229
242
  const parsedReports = (run.record.reports || []).map((r) => {
230
243
  let parsed = null;
Binary file