craftar 0.30.0 → 0.31.0

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.
@@ -324,6 +324,9 @@ export async function nextSync(p) {
324
324
  /**
325
325
  * Which workspaces are concerned by a condition on their configuration (spec 25 §4.3).
326
326
  * Tests the MERGED configuration to decide, then checks `local` first, else `base` to name the file.
327
+ * The file-naming tests see one file's document and the merged configuration, so a condition that
328
+ * spans two fields (a profile and a removal) can be decided on the merged one and located in the
329
+ * file that holds the removal.
327
330
  * Arrays replace on merge, so with `base.x: [a]` and `local.x: []`, the merged config has `[]`
328
331
  * and the workspace is NOT concerned — even though `base` had `a`.
329
332
  * `missing` entries and stage-`config` errors count as `unchecked`.
@@ -356,17 +359,19 @@ export function concerned(planned, entries, test) {
356
359
  continue;
357
360
  }
358
361
  // Test the MERGED configuration first to decide if concerned (spec 25 §4.3)
359
- if (!test(merged.config))
362
+ if (!test(merged.config, merged.config))
360
363
  continue;
361
364
  // Concerned: find which file holds the entry (local first, then base)
362
- if (test(merged.local)) {
365
+ if (test(merged.local, merged.config)) {
363
366
  result.concerned.push({ path: entry.entry.path, file: "craftar.local.yaml" });
364
367
  }
365
- else if (test(merged.base)) {
368
+ else if (test(merged.base, merged.config)) {
366
369
  result.concerned.push({ path: entry.entry.path, file: "craftar.yaml" });
367
370
  }
368
- // No else: merged.config is built from base + local via deepMerge, so if test(merged.config)
369
- // passes, the value must exist in at least one of them. This branch cannot be reached.
371
+ // No else: unreachable while each part of a test that `doc` decides reads one located field (the rest from `merged`)
372
+ // — arrays replace on merge, so the part that passes on the merged value passes on the file it came from. A test that
373
+ // needs two `doc` fields at once (an AND), held in different files, reaches it and drops the workspace silently (the
374
+ // forge promote removal warning did, before it read `profile` from `merged`).
370
375
  }
371
376
  return result;
372
377
  }
@@ -1 +1 @@
1
- {"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/core/impact.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,mBAAmB,EACnB,MAAM,EACN,aAAa,EACb,YAAY,GAMb,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAKxC;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAoB,EAAE,OAAkB;IAC1E,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAC5E,CAAC;IACF,OAAO,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAChD,CAAC;AAmBD,gFAAgF;AAChF,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,GAAG,IAAc;IACnD,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,QAAkB,EAClB,UAAkB;IAElB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,GAAG,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACvE,IAAI,OAAO,KAAK,IAAI;YAAE,SAAS;QAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAChE,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,6CAA6C,CAAC,CAAC;gBAC5F,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,OAAe;IACnD,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE,CAAC;QAClC,gGAAgG;QAChG,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,QAAgB,EAChB,MAAyB,OAAO,CAAC,GAAG;IAEpC,uEAAuE;IACvE,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE9C,kCAAkC;IAClC,IAAI,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC,mBAAmB,KAAK,EAAE,EAAE,CAAC;QAC9D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;IACnE,CAAC;IAED,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,0BAA0B;IAC1B,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAErE,wDAAwD;IACxD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAClD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnC,6BAA6B;QAC7B,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI;YAAE,SAAS;QAEvC,IAAI,KAAK,GAAqB,IAAI,CAAC;QACnC,IAAI,GAAG,GAAkB,IAAI,CAAC;QAE9B,mBAAmB;QACnB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;YACxE,KAAK,GAAG,MAAM,CAAC;QACjB,CAAC;QACD,qBAAqB;aAChB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/E,KAAK,GAAG,QAAQ,CAAC;YACjB,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAE,CAAC;QAC9C,CAAC;QACD,oBAAoB;aACf,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACrC,0FAA0F;YAC1F,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC7B,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;gBAC9E,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;oBACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;wBACvB,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;wBACzC,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC7B,KAAK,GAAG,OAAO,CAAC;4BAChB,GAAG,GAAG,aAAa,CAAC;4BACpB,MAAM;wBACR,CAAC;oBACH,CAAC;oBACD,IAAI,KAAK;wBAAE,MAAM;gBACnB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;QAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;YAC7D,IAAI,MAAM,SAAS,CAAC,KAAK,CAAC;gBAAE,UAAU,GAAG,IAAI,CAAC;QAChD,CAAC;IACH,CAAC;IAED,eAAe;IACf,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpE,kBAAkB;IAClB,IAAI,KAAoB,CAAC;IACzB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,KAAK,GAAG,MAAM,CAAC;IACjB,CAAC;SAAM,IAAI,UAAU,EAAE,CAAC;QACtB,KAAK,GAAG,SAAS,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,MAAM,CAAC;IACjB,CAAC;IAED,sEAAsE;IACtE,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE9C,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;AACpE,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAyB,EAAE,KAAY;IACnE,MAAM,OAAO,GAAc,EAAE,CAAC;IAC9B,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;QAChC,IAAI,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACrD,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;gBACxC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;oBACxB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACnE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACnD,MAAM,EAAE,EAAE,CAAC,MAAM;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;aACpD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAQD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAe,EAAE,KAAc;IACtD,2BAA2B;IAC3B,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACtD,CAAC;IACD,+CAA+C;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IAC7D,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC9D,CAAC;IAED,8BAA8B;IAC9B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAE1E,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACtD,wBAAwB;YACxB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,kBAAkB;YAClB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,YAAY,CAAC,IAAI,EAAE,CAAC;IAEpB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAChE,CAAC;AAQD;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA8B;IAC7D,SAAS,EAAE,CAAC;IACZ,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,CAAC;IACZ,MAAM,EAAE,CAAC;IACT,cAAc,EAAE,CAAC;CAClB,CAAC;AACF,MAAM,gBAAgB,GAAiB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAiB,CAAC,IAAI,CAC3F,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAC5D,CAAC;AAEF,yGAAyG;AACzG,MAAM,CAAC,MAAM,gBAAgB,GAA2C,gBAAgB,CAAC,MAAM,CAC7F,CAAC,CAAC,EAAwC,EAAE,CAAC,CAAC,KAAK,WAAW,CAC/D,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,QAAsB;IAEtB,MAAM,MAAM,GAA6D,EAAE,CAAC;IAC5E,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC5B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAqD,EAAE,CAAC;IACpE,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,EAAgB;IAChD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,CAAU;IACvC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;IACvB,IAAI,IAAiB,CAAC;IACtB,IAAI,QAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,uHAAuH;QACvH,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,MAAM;YAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACpF,IAAI,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC/B,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,wFAAwF;QACxF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,CAAC;IAED,wDAAwD;IACxD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACnD,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CACvB,OAAkB,EAClB,OAAyB,EACzB,IAA+B;IAE/B,MAAM,MAAM,GAAoB,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAEzB,sBAAsB;QACtB,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QACD,iCAAiC;QACjC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QAED,8EAA8E;QAC9E,IAAI,MAAgC,CAAC;QACrC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;QAC9B,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAChE,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QAED,4EAA4E;QAC5E,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,SAAS;QAEnC,sEAAsE;QACtE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAChF,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,6FAA6F;QAC7F,uFAAuF;IACzF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,KAAY;IAEZ,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,EAAE,GAAyC;QAC/C,IAAI;QACJ,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK;QACL,MAAM,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,KAAK,CAAC,IAAI;YAClB,GAAG,EAAE,IAAI;YACT,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE,KAAK;YACd,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC;QACD,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM;KACP,CAAC;IACF,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"impact.js","sourceRoot":"","sources":["../../src/core/impact.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,11 @@
2
2
  * The one reader of `profile.integrations` (spec 33 §5.2): below schema 3 the block is ignored;
3
3
  * at 3 it selects integration recipes and derives params.
4
4
  *
5
- * This module is pure — it imports types and the schema constant only, never resolve.ts (which
6
- * imports it).
5
+ * This module is pure — it imports types, the schema constant and `findSecrets` only, never
6
+ * resolve.ts (which imports it).
7
7
  */
8
8
  import { FORGE_SCHEMA_INTEGRATIONS } from "../schema/index.js";
9
+ import { findSecrets } from "./secrets.js";
9
10
  /* ------------------------------------------------------------------ */
10
11
  /* Constants */
11
12
  /* ------------------------------------------------------------------ */
@@ -20,6 +21,24 @@ const SLOT_RE = /^[A-Za-z][A-Za-z0-9_]*$/;
20
21
  const KEY_RE = /^[A-Za-z0-9_]+$/;
21
22
  /** Kind: a string matching `^[a-z0-9][a-z0-9._-]*$`. */
22
23
  const KIND_RE = /^[a-z0-9][a-z0-9._-]*$/;
24
+ /**
25
+ * What a refused slot or key may be named by: a string shaped like a name and not a token of a
26
+ * known format (`findSecrets`); anything else — a URL pasted where a key goes, say — is named by
27
+ * its position, so a credential in it is never printed (tech-debt 2026-10-11 item 7; the user's
28
+ * ruling of 2026-10-17).
29
+ */
30
+ const NAME_LIKE = /^[A-Za-z0-9_.-]{1,64}$/;
31
+ /**
32
+ * Returns the name to show in an error message: JSON.stringify(name) when it looks like a name
33
+ * and is not a token of a known format (`findSecrets`), otherwise `#${index + 1}` with the
34
+ * "(not shown: not shaped like a name)" suffix.
35
+ */
36
+ function shownName(name, index) {
37
+ if (NAME_LIKE.test(name) && findSecrets(name).length === 0) {
38
+ return { shown: JSON.stringify(name), suffix: "" };
39
+ }
40
+ return { shown: `#${index + 1}`, suffix: " (not shown: not shaped like a name)" };
41
+ }
23
42
  /* ------------------------------------------------------------------ */
24
43
  /* Gate */
25
44
  /* ------------------------------------------------------------------ */
@@ -60,10 +79,13 @@ export function effectiveProfile(forge, profile) {
60
79
  const fromBlock = {};
61
80
  const blockKeys = [];
62
81
  // Process each slot in block order.
63
- for (const slot of Object.keys(block)) {
82
+ const slots = Object.keys(block);
83
+ for (let i = 0; i < slots.length; i++) {
84
+ const slot = slots[i];
64
85
  // 1. Validate slot name.
65
86
  if (!SLOT_RE.test(slot)) {
66
- throw new Error(`profile ${pName}: integrations key ${JSON.stringify(slot)} is not a slot name — letters, digits and _, starting with a letter`);
87
+ const { shown, suffix } = shownName(slot, i);
88
+ throw new Error(`profile ${pName}: integrations key ${shown} is not a slot name — letters, digits and _, starting with a letter${suffix}`);
67
89
  }
68
90
  const slotValue = block[slot];
69
91
  // 2. Validate slot value is a mapping.
@@ -73,10 +95,13 @@ export function effectiveProfile(forge, profile) {
73
95
  // Now we know slotValue is a plain object.
74
96
  const slotObj = slotValue;
75
97
  // Process each key inside the slot, in key order.
76
- for (const key of Object.keys(slotObj)) {
98
+ const keys = Object.keys(slotObj);
99
+ for (let j = 0; j < keys.length; j++) {
100
+ const key = keys[j];
77
101
  // 3. Validate key name.
78
102
  if (!KEY_RE.test(key)) {
79
- throw new Error(`profile ${pName}: integrations.${slot} key ${JSON.stringify(key)} is not a key name — letters, digits and _ only`);
103
+ const { shown, suffix } = shownName(key, j);
104
+ throw new Error(`profile ${pName}: integrations.${slot} key ${shown} is not a key name — letters, digits and _ only${suffix}`);
80
105
  }
81
106
  const val = slotObj[key];
82
107
  // 4. null / undefined is absent (skipped), kind: null included.
@@ -1 +1 @@
1
- {"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/core/integrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integrations.js","sourceRoot":"","sources":["../../src/core/integrations.ts"],"names":[],"mappings":"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"}
@@ -15,9 +15,13 @@ export const claudeCode = {
15
15
  for (const ing of ctx.aimed) {
16
16
  const m = ing.meta;
17
17
  switch (m.type) {
18
- case "rule":
19
- out.push(await textFile(ctx, ruleFile("claude-code", m), await ctx.text(ing, m.file), t, ing.ref));
18
+ case "rule": {
19
+ const body = await ctx.text(ing, m.file);
20
+ // If frontmatterRaw is set, serialize with it; otherwise emit body only (no generated paths:)
21
+ const doc = m.frontmatterRaw != null ? serializeFrontmatter({}, body, { raw: m.frontmatterRaw }) : body;
22
+ out.push(await textFile(ctx, ruleFile("claude-code", m), doc, t, ing.ref));
20
23
  break;
24
+ }
21
25
  case "agent": {
22
26
  const body = await ctx.text(ing, m.file);
23
27
  const fm = m.frontmatterRaw ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/emitters/claude-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/emitters/claude-code.ts"],"names":[],"mappings":"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"}
@@ -72,7 +72,8 @@ export async function importClaudeCode(opts) {
72
72
  report.created.push("craftar.yaml (workspace)");
73
73
  // Spec 29 §4.2: after the flush, and never able to fail an import that succeeded.
74
74
  if (opts.report) {
75
- report.kiro = await kiroReport({ workspaceRoot: opts.workspaceRoot, forgeRoot: opts.forgeRoot, profile: opts.profileName, targets: planned.targets });
75
+ const preferred = (report.preferKiro ?? []).map((x) => x.source.replace(/^\.kiro\/steering\//, "").replace(/\.md$/, ""));
76
+ report.kiro = await kiroReport({ workspaceRoot: opts.workspaceRoot, forgeRoot: opts.forgeRoot, profile: opts.profileName, targets: planned.targets, preferred });
76
77
  if (report.kiro.kind === "not-computed")
77
78
  report.warnings.push(`import report: Kiro sections not computed: ${report.kiro.message}`);
78
79
  }
@@ -110,11 +111,12 @@ async function planImport(opts, stage) {
110
111
  continue;
111
112
  const src = await readSource(path.join(steeringDir, f));
112
113
  const text = toLf(stripBom(src.text));
113
- const { data, body } = parseFrontmatter(text);
114
+ const { data, body, raw } = parseFrontmatter(text);
114
115
  steeringMeta.set(f.replace(/\.md$/, ""), {
115
116
  inclusion: data.inclusion ?? "always",
116
117
  fileMatchPattern: data.fileMatchPattern,
117
118
  generated: GENERATED_BANNER.test(body.slice(0, 300)),
119
+ setsInclusion: raw !== null && data.inclusion !== undefined,
118
120
  text,
119
121
  scan: src.scan,
120
122
  });
@@ -126,16 +128,27 @@ async function planImport(opts, stage) {
126
128
  continue;
127
129
  const name = f.replace(/\.md$/, "");
128
130
  const sm = steeringMeta.get(name);
129
- const emitted = await readEmitted(claudeDir, "rule", f, origin, sm ? { inclusion: sm.inclusion, fileMatchPattern: sm.fileMatchPattern } : undefined);
131
+ const emitted = await readEmitted(claudeDir, "rule", f, origin, sm ? { inclusion: sm.inclusion, fileMatchPattern: sm.fileMatchPattern, generated: sm.generated, setsInclusion: sm.setsInclusion } : undefined);
130
132
  if (!emitted)
131
133
  continue;
134
+ // Copy any warnings from readEmitted into the report
135
+ if (emitted.warnings) {
136
+ for (const w of emitted.warnings)
137
+ report.warnings.push(w);
138
+ }
132
139
  const ruleMeta = emitted.meta;
133
140
  read(emitted.meta, emitted.files, emitted.scan, (ref) => {
134
- ruleNames.push(ref.split("/")[1]);
135
- if (ruleMeta.inclusion === "fileMatch")
136
- scopedRules.set(ref, sm?.fileMatchPattern ?? "");
137
- else
141
+ // The output name: a variant's ref is <name>--<profile>, and the steering file it mirrors is <name> (spec 29 §19.6).
142
+ ruleNames.push(name);
143
+ // Use the rule's own fileMatchPattern (from paths: or from steering), joined with comma for stack recipe
144
+ if (ruleMeta.inclusion === "fileMatch") {
145
+ const pattern = ruleMeta.fileMatchPattern;
146
+ const patternStr = Array.isArray(pattern) ? pattern.join(",") : pattern ?? "";
147
+ scopedRules.set(ref, patternStr);
148
+ }
149
+ else {
138
150
  refs.base.push(ref);
151
+ }
139
152
  });
140
153
  }
141
154
  /* ---- agents ---- */
@@ -267,16 +280,29 @@ async function planImport(opts, stage) {
267
280
  if (!sm)
268
281
  throw new Error(`import: --prefer-kiro ${name}: there is no .kiro/steering/${name}.md to prefer`);
269
282
  const ruleText = q.files["rule.md"];
283
+ // The Claude file as written: a split rule's fence counts toward its lines
284
+ const ruleRaw = "frontmatterRaw" in q.meta ? q.meta.frontmatterRaw : undefined;
285
+ const ruleFileText = ruleRaw !== undefined ? `---\n${ruleRaw}\n---\n${ruleText}` : ruleText;
270
286
  const { text, offset } = preferKiro({ name, steering: sm.text, rules: new Set(rules.keys()), handSteering, banner });
271
287
  const source = `.kiro/steering/${name}.md`;
272
288
  q.files = { "rule.md": text };
273
289
  q.scan = scanOf("rule.md", sm);
274
290
  q.lineOffset = offset;
275
291
  q.meta = { ...q.meta, origin: origin(source) };
292
+ // A steering body written before rules kept their frontmatter apart still holds the fence: the
293
+ // text then carries it, as it did, and the rule's own copy is dropped so the file is not written twice.
294
+ if ("frontmatterRaw" in q.meta && q.meta.frontmatterRaw !== undefined && parseFrontmatter(text).raw !== null) {
295
+ const { frontmatterRaw: _dropped, ...rest } = q.meta;
296
+ q.meta = rest;
297
+ }
276
298
  const after = q.after;
277
299
  q.after = (ref) => {
278
300
  after(ref);
279
- preferred.push({ ref, source, steeringLines: textLines(sm.text), rule: `.claude/rules/${name}.md`, ruleLines: textLines(ruleText), differs: text !== ruleText });
301
+ // What sync will write to .claude/rules/<name>.md: if frontmatterRaw is still present, the fence
302
+ // wraps the body; otherwise the body alone (it may carry its own fence).
303
+ const raw = "frontmatterRaw" in q.meta ? q.meta.frontmatterRaw : undefined;
304
+ const written = raw !== undefined ? `---\n${raw}\n---\n${text}` : text;
305
+ preferred.push({ ref, source, steeringLines: textLines(sm.text), rule: `.claude/rules/${name}.md`, ruleLines: textLines(ruleFileText), differs: written !== ruleFileText });
280
306
  };
281
307
  }
282
308
  }
@@ -536,6 +562,63 @@ export class ForgeStage {
536
562
  }
537
563
  }
538
564
  }
565
+ /**
566
+ * A Claude rule's `paths:`, read from its raw frontmatter. `present` says the key is there; `value` is set only
567
+ * when it is usable — a non-empty string, or a non-empty list of non-empty strings. YAML is tried first; when it
568
+ * refuses the block (an unquoted `**` reads as an alias), the key is read by lines as Claude Code writes it: an
569
+ * inline value, or `- item` lines below, each unquoted and without a trailing ` # comment`.
570
+ */
571
+ export function rulePaths(rawText) {
572
+ if (rawText === null)
573
+ return { present: false };
574
+ const raw = toLf(rawText);
575
+ // A glob is one line: a block scalar's text is not one
576
+ const glob = (i) => typeof i === "string" && i.length > 0 && !i.includes("\n");
577
+ const usable = (p) => glob(p) || (Array.isArray(p) && p.length > 0 && p.every(glob));
578
+ try {
579
+ const data = parseYamlText("frontmatter", raw);
580
+ if (data === null || typeof data !== "object" || !Object.hasOwn(data, "paths"))
581
+ return { present: false };
582
+ const p = data.paths;
583
+ return usable(p) ? { present: true, value: p } : { present: true };
584
+ }
585
+ catch {
586
+ const lines = raw.split("\n");
587
+ const at = lines.findIndex((l) => /^paths:(\s|$)/.test(l));
588
+ if (at === -1)
589
+ return { present: false };
590
+ const scalar = (v) => {
591
+ const t = v.trim();
592
+ const q = /^(["'])(.*)\1(\s+#.*)?$/.exec(t);
593
+ if (q)
594
+ return q[2];
595
+ if (/^["']/.test(t))
596
+ return null; // an unclosed or mismatched quote
597
+ return t.replace(/\s+#.*$/, "");
598
+ };
599
+ const inline = lines[at].slice("paths:".length);
600
+ if (inline.trim() !== "" && !/^\s*#/.test(inline)) {
601
+ const v = /^\s*[[{|>]/.test(inline) ? null : scalar(inline);
602
+ return v ? { present: true, value: v } : { present: true };
603
+ }
604
+ const items = [];
605
+ let indent = null; // every item at the first one's indent, which may be the key's own
606
+ for (const line of lines.slice(at + 1)) {
607
+ if (line.trim() === "" || /^\s*#/.test(line))
608
+ continue;
609
+ if (/^\S/.test(line) && !/^-\s/.test(line))
610
+ break; // the next key
611
+ const item = /^(\s*)-\s+(.*)$/.exec(line);
612
+ if (item && indent === null)
613
+ indent = item[1];
614
+ const v = item && item[1] === indent ? scalar(item[2]) : null;
615
+ if (!v)
616
+ return { present: true };
617
+ items.push(v);
618
+ }
619
+ return items.length ? { present: true, value: items } : { present: true };
620
+ }
621
+ }
539
622
  /**
540
623
  * One ingredient as import reads it from a workspace's `.claude/` tree. `rel` is the path under
541
624
  * `.claude/<folder>/` (a file, or a skill's directory name). Returns `null` where `planImport`
@@ -546,17 +629,92 @@ export async function readEmitted(claudeDir, type, rel, origin, steering) {
546
629
  const name = rel.replace(/\.md$/, "");
547
630
  const src = await readSource(path.join(claudeDir, "rules", rel));
548
631
  const text = toLf(stripBom(src.text));
632
+ const parsed = parseFrontmatter(text);
633
+ const warnings = [];
634
+ const pathsResult = rulePaths(parsed.raw);
635
+ const hasPaths = pathsResult.present;
636
+ const pathsValue = pathsResult.value;
637
+ const pathsUsable = pathsValue !== undefined;
638
+ // Determine scope by precedence:
639
+ // 1. hand-written steering with frontmatter inclusion → use steering
640
+ // 2. usable paths: → use paths
641
+ // 3. generated steering → use steering
642
+ // 4. else "always"
643
+ let inclusion = "always";
644
+ let fileMatchPattern;
645
+ let frontmatterRaw;
646
+ // When paths: is usable, split it out whoever sets the scope (so kiro/AGENTS.md don't carry the paths: block)
647
+ // — unless the file ends at its closing fence with no newline, which the split could not write back.
648
+ const useFrontmatter = pathsUsable && text.startsWith(`---\n${parsed.raw}\n---\n`);
649
+ if (useFrontmatter) {
650
+ frontmatterRaw = parsed.raw ?? undefined;
651
+ }
652
+ // Helper to check if steering scope differs from paths scope.
653
+ // The kiro emitter writes a list as a comma-joined string, so we compare the steering pattern
654
+ // (which is always a string) against the paths value joined by comma.
655
+ const scopeDiffers = (steeringInclusion, steeringPattern) => {
656
+ if (!pathsUsable || pathsValue === undefined)
657
+ return false;
658
+ if (steeringInclusion !== "fileMatch")
659
+ return true;
660
+ // Compared as the kiro emitter writes a list: joined by ","
661
+ const joined = (p) => (Array.isArray(p) ? p.join(",") : p);
662
+ return joined(steeringPattern) !== joined(pathsValue);
663
+ };
664
+ if (steering && !steering.generated && steering.setsInclusion) {
665
+ // Case 1: hand-written steering with inclusion set - use steering's scope
666
+ inclusion = steering.inclusion;
667
+ fileMatchPattern = steering.fileMatchPattern;
668
+ // Warn if paths: differs from steering
669
+ if (pathsUsable && scopeDiffers(steering.inclusion, steering.fileMatchPattern)) {
670
+ warnings.push(`rule ${name}: .kiro/steering/${name}.md and paths: in .claude/rules/${name}.md disagree; the steering file's scope is kept`);
671
+ }
672
+ }
673
+ else if (pathsUsable && pathsValue !== undefined) {
674
+ // Case 2: usable paths: in rule
675
+ inclusion = "fileMatch";
676
+ fileMatchPattern = pathsValue;
677
+ // Warn about steering
678
+ if (steering) {
679
+ if (!steering.setsInclusion) {
680
+ // steering without inclusion set
681
+ warnings.push(`rule ${name}: .kiro/steering/${name}.md sets no inclusion; scope taken from paths: in .claude/rules/${name}.md`);
682
+ }
683
+ else if (steering.generated && scopeDiffers(steering.inclusion, steering.fileMatchPattern)) {
684
+ // generated steering with different scope
685
+ warnings.push(`rule ${name}: the generated .kiro/steering/${name}.md disagrees with paths: in .claude/rules/${name}.md; scope taken from paths:`);
686
+ }
687
+ }
688
+ }
689
+ else if (steering && steering.generated) {
690
+ // Case 3: generated steering
691
+ inclusion = steering.inclusion;
692
+ fileMatchPattern = steering.fileMatchPattern;
693
+ }
694
+ else if (steering) {
695
+ // Case 4: any steering file (hand-written, may have no inclusion) - use its pattern as main did
696
+ inclusion = steering.inclusion;
697
+ fileMatchPattern = steering.fileMatchPattern;
698
+ }
699
+ // else Case 5: no steering file at all → "always" (default)
700
+ // Warn about unusable paths (the scope then follows the rest of the precedence)
701
+ if (hasPaths && !pathsUsable) {
702
+ warnings.push(`rule ${name}: paths: in .claude/rules/${name}.md is not a string or a list of strings; ignored`);
703
+ }
549
704
  const meta = {
550
705
  type: "rule",
551
706
  name,
552
- inclusion: steering?.inclusion ?? "always",
553
- fileMatchPattern: steering?.fileMatchPattern,
707
+ inclusion,
708
+ fileMatchPattern,
554
709
  file: "rule.md",
710
+ ...(frontmatterRaw !== undefined ? { frontmatterRaw } : {}),
555
711
  targets: "*",
556
712
  tags: [],
557
713
  origin: origin(`.claude/rules/${rel}`),
558
714
  };
559
- return { meta, files: { "rule.md": text }, scan: scanOf("rule.md", src) };
715
+ // If using frontmatter (paths: is usable), store the body only; otherwise store whole text
716
+ const ruleContent = useFrontmatter ? parsed.body : text;
717
+ return { meta, files: { "rule.md": ruleContent }, scan: scanOf("rule.md", src), ...(warnings.length ? { warnings } : {}) };
560
718
  }
561
719
  if (type === "agent") {
562
720
  const src = await readSource(path.join(claudeDir, "agents", rel));
@@ -679,16 +837,26 @@ function addRef(list, ref) {
679
837
  if (ref)
680
838
  list.push(ref);
681
839
  }
840
+ /** Where a rule's `frontmatterRaw` was read: its Claude file, whatever file its body came from. */
841
+ function rawSource(meta) {
842
+ return meta.type === "rule" ? `.claude/rules/${outName(meta)}.md` : null;
843
+ }
844
+ /** A rule whose body was taken from its steering file (`--prefer-kiro`): the body's lines are that file's. */
845
+ function bodyFromSteering(meta) {
846
+ return meta.type === "rule" && (meta.origin?.path ?? "").startsWith(".kiro/steering/");
847
+ }
682
848
  /** First secret-like value in an ingredient about to be imported, described by location only. */
683
849
  export function secretIn(meta, files, scan = {}, lineOffset = 0) {
684
850
  const origin = meta.origin?.path ?? `${meta.type}/${meta.name}`;
685
851
  const raw = "frontmatterRaw" in meta ? meta.frontmatterRaw : undefined;
686
- // Bodies of agents and commands start after `---`, the raw block and the closing `---`; `lineOffset` is for a text
687
- // that starts lower in its source file for another reason (spec 29 §4.3).
688
- const bodyOffset = raw ? raw.split("\n").length + 2 : lineOffset;
852
+ // Bodies of agents, commands and split rules start after `---`, the raw block and the closing `---`; `lineOffset`
853
+ // is for a text that starts lower in its source file for another reason (spec 29 §4.3). A rule's raw block is
854
+ // always its Claude file's, while its body may come from a steering file (`--prefer-kiro`).
855
+ const rawWhere = rawSource(meta) ?? origin;
856
+ const bodyOffset = raw && !bodyFromSteering(meta) ? raw.split("\n").length + 2 : lineOffset;
689
857
  const texts = [];
690
858
  if (raw)
691
- texts.push({ where: origin, text: raw, offset: 1 });
859
+ texts.push({ where: rawWhere, text: raw, offset: 1 });
692
860
  for (const [rel, content] of Object.entries(files)) {
693
861
  const where = meta.type === "skill" && meta.layout === "dir" ? `${origin}${rel}` : origin;
694
862
  // A Buffer (non-allowlisted extensions such as .pem or .bat) goes through decodeForScan:
@@ -1022,15 +1190,19 @@ function resolvedParam(forge, profile, key, own) {
1022
1190
  }
1023
1191
  return Object.hasOwn(own, key) ? own[key] : undefined;
1024
1192
  }
1025
- /** The recipes a profile resolves inside the Forge; fails closed — a profile that does not resolve counts as using everything. */
1026
- export function recipesOf(forge, profile) {
1193
+ /** The recipes a profile resolves inside the Forge, or null when `resolve` throws — the profile does not resolve. */
1194
+ export function resolvedRecipes(forge, profile) {
1027
1195
  try {
1028
1196
  return new Set(resolve(forge, WorkspaceConfigSchema.parse({ forge: ".", profile })).recipes);
1029
1197
  }
1030
1198
  catch {
1031
- return { has: () => true };
1199
+ return null;
1032
1200
  }
1033
1201
  }
1202
+ /** The recipes a profile resolves inside the Forge; fails closed — a profile that does not resolve counts as using everything. */
1203
+ export function recipesOf(forge, profile) {
1204
+ return resolvedRecipes(forge, profile) ?? { has: () => true };
1205
+ }
1034
1206
  /**
1035
1207
  * The importing profile's effective params and sections before the run (`P`, `PS`; spec 10 §6.1, spec 11 §6.7,
1036
1208
  * spec 33 §5.3), and `blockKeys` — the `integrations.*` keys whose value comes from the block (spec 33 design.md
@@ -1071,7 +1243,7 @@ async function existingProfile(forge, profile, loaded) {
1071
1243
  */
1072
1244
  export function markerIn(meta, files, source, lineOffset = 0) {
1073
1245
  const raw = "frontmatterRaw" in meta ? meta.frontmatterRaw : undefined;
1074
- const offset = raw ? raw.split("\n").length + 2 : lineOffset;
1246
+ const offset = raw && !bodyFromSteering(meta) ? raw.split("\n").length + 2 : lineOffset;
1075
1247
  for (const [rel, content] of Object.entries(files)) {
1076
1248
  // the importer builds meta and file keys itself, with canonical names
1077
1249
  if (!bodyFile(meta, rel, null))