skillset 0.13.3 → 0.13.4

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/dist/cli.js CHANGED
@@ -16974,6 +16974,7 @@ async function validateChangeCheck(rootPath, status, entries, options) {
16974
16974
  entries,
16975
16975
  issues: issues.sort(compareIssues),
16976
16976
  ok: !issues.some((issue) => issue.severity === "error"),
16977
+ stackedEvidence: stackedEvidenceGroups(validEntries, context),
16977
16978
  status
16978
16979
  };
16979
16980
  }
@@ -17117,6 +17118,28 @@ function findDuplicateIds(entries) {
17117
17118
  }
17118
17119
  return new Set([...counts].filter(([, count]) => count > 1).map(([id]) => id));
17119
17120
  }
17121
+ function stackedEvidenceGroups(entries, context) {
17122
+ const groups = new Map;
17123
+ for (const entry of entries) {
17124
+ for (const scope of entry.scopes) {
17125
+ const sourceHash = expectedHashForScope(scope, context);
17126
+ if (sourceHash === undefined || !(entry.sourceHashes.get(scope) ?? []).includes(sourceHash))
17127
+ continue;
17128
+ const key = `${scope}\x00${sourceHash}`;
17129
+ const existing = groups.get(key);
17130
+ if (existing === undefined) {
17131
+ groups.set(key, { paths: new Set([entry.path]), scope, sourceHash });
17132
+ continue;
17133
+ }
17134
+ existing.paths.add(entry.path);
17135
+ }
17136
+ }
17137
+ return [...groups.values()].filter((group) => group.paths.size > 1).map((group) => ({
17138
+ paths: [...group.paths].sort(compareStrings),
17139
+ scope: group.scope,
17140
+ sourceHash: group.sourceHash
17141
+ })).sort((left, right) => compareStrings(`${left.scope}\x00${left.sourceHash}`, `${right.scope}\x00${right.sourceHash}`));
17142
+ }
17120
17143
  function hasSeverityBearingRegion(regions) {
17121
17144
  return regions?.some((region) => region.severityBearing) === true;
17122
17145
  }
@@ -21275,6 +21298,9 @@ function printChangeCheck(report) {
21275
21298
  const path2 = issue.path === undefined ? "" : `${issue.path}: `;
21276
21299
  console.log(` ${issue.severity}: ${path2}${issue.code}: ${issue.message}`);
21277
21300
  }
21301
+ for (const group of report.stackedEvidence) {
21302
+ console.log(` stacked evidence: ${sourceUnitDisplay(group.scope)} ${group.sourceHash} shared by ${group.paths.length} pending entries: ${group.paths.join(", ")}`);
21303
+ }
21278
21304
  const errors = report.issues.filter((issue) => issue.severity === "error").length;
21279
21305
  const warnings = report.issues.length - errors;
21280
21306
  if (errors === 0) {
package/dist/create.js CHANGED
@@ -16974,6 +16974,7 @@ async function validateChangeCheck(rootPath, status, entries, options) {
16974
16974
  entries,
16975
16975
  issues: issues.sort(compareIssues),
16976
16976
  ok: !issues.some((issue) => issue.severity === "error"),
16977
+ stackedEvidence: stackedEvidenceGroups(validEntries, context),
16977
16978
  status
16978
16979
  };
16979
16980
  }
@@ -17117,6 +17118,28 @@ function findDuplicateIds(entries) {
17117
17118
  }
17118
17119
  return new Set([...counts].filter(([, count]) => count > 1).map(([id]) => id));
17119
17120
  }
17121
+ function stackedEvidenceGroups(entries, context) {
17122
+ const groups = new Map;
17123
+ for (const entry of entries) {
17124
+ for (const scope of entry.scopes) {
17125
+ const sourceHash = expectedHashForScope(scope, context);
17126
+ if (sourceHash === undefined || !(entry.sourceHashes.get(scope) ?? []).includes(sourceHash))
17127
+ continue;
17128
+ const key = `${scope}\x00${sourceHash}`;
17129
+ const existing = groups.get(key);
17130
+ if (existing === undefined) {
17131
+ groups.set(key, { paths: new Set([entry.path]), scope, sourceHash });
17132
+ continue;
17133
+ }
17134
+ existing.paths.add(entry.path);
17135
+ }
17136
+ }
17137
+ return [...groups.values()].filter((group) => group.paths.size > 1).map((group) => ({
17138
+ paths: [...group.paths].sort(compareStrings),
17139
+ scope: group.scope,
17140
+ sourceHash: group.sourceHash
17141
+ })).sort((left, right) => compareStrings(`${left.scope}\x00${left.sourceHash}`, `${right.scope}\x00${right.sourceHash}`));
17142
+ }
17120
17143
  function hasSeverityBearingRegion(regions) {
17121
17144
  return regions?.some((region) => region.severityBearing) === true;
17122
17145
  }
@@ -21275,6 +21298,9 @@ function printChangeCheck(report) {
21275
21298
  const path2 = issue.path === undefined ? "" : `${issue.path}: `;
21276
21299
  console.log(` ${issue.severity}: ${path2}${issue.code}: ${issue.message}`);
21277
21300
  }
21301
+ for (const group of report.stackedEvidence) {
21302
+ console.log(` stacked evidence: ${sourceUnitDisplay(group.scope)} ${group.sourceHash} shared by ${group.paths.length} pending entries: ${group.paths.join(", ")}`);
21303
+ }
21278
21304
  const errors = report.issues.filter((issue) => issue.severity === "error").length;
21279
21305
  const warnings = report.issues.length - errors;
21280
21306
  if (errors === 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillset",
3
- "version": "0.13.3",
3
+ "version": "0.13.4",
4
4
  "description": "Source-first compiler for Claude and Codex agent loadouts.",
5
5
  "type": "module",
6
6
  "files": [