guardian-framework 0.1.121 → 0.1.123

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
@@ -3202,7 +3202,7 @@ __export(exports_package, {
3202
3202
  bin: () => bin,
3203
3203
  author: () => author
3204
3204
  });
3205
- var name = "guardian-framework", version = "0.1.121", description = "Token-optimized agentic framework scaffolder with pi-first architecture", type = "module", main = "dist/exports.js", exports, types = "dist/exports.d.ts", bin, files, engines, scripts, publishConfig, pi, repository, homepage = "https://github.com/arman-jalili/guardian-framework#readme", bugs, dependencies, devDependencies, keywords, author = "Arman Wolkensteiner-Jalili", license = "MIT", package_default;
3205
+ var name = "guardian-framework", version = "0.1.123", description = "Token-optimized agentic framework scaffolder with pi-first architecture", type = "module", main = "dist/exports.js", exports, types = "dist/exports.d.ts", bin, files, engines, scripts, publishConfig, pi, repository, homepage = "https://github.com/arman-jalili/guardian-framework#readme", bugs, dependencies, devDependencies, keywords, author = "Arman Wolkensteiner-Jalili", license = "MIT", package_default;
3206
3206
  var init_package = __esm(() => {
3207
3207
  exports = {
3208
3208
  ".": {
package/dist/exports.js CHANGED
@@ -1987,7 +1987,7 @@ __export(exports_package, {
1987
1987
  bin: () => bin,
1988
1988
  author: () => author
1989
1989
  });
1990
- var name = "guardian-framework", version = "0.1.121", description = "Token-optimized agentic framework scaffolder with pi-first architecture", type = "module", main = "dist/exports.js", exports, types = "dist/exports.d.ts", bin, files, engines, scripts, publishConfig, pi, repository, homepage = "https://github.com/arman-jalili/guardian-framework#readme", bugs, dependencies, devDependencies, keywords, author = "Arman Wolkensteiner-Jalili", license = "MIT", package_default;
1990
+ var name = "guardian-framework", version = "0.1.123", description = "Token-optimized agentic framework scaffolder with pi-first architecture", type = "module", main = "dist/exports.js", exports, types = "dist/exports.d.ts", bin, files, engines, scripts, publishConfig, pi, repository, homepage = "https://github.com/arman-jalili/guardian-framework#readme", bugs, dependencies, devDependencies, keywords, author = "Arman Wolkensteiner-Jalili", license = "MIT", package_default;
1991
1991
  var init_package = __esm(() => {
1992
1992
  exports = {
1993
1993
  ".": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "guardian-framework",
3
- "version": "0.1.121",
3
+ "version": "0.1.123",
4
4
  "description": "Token-optimized agentic framework scaffolder with pi-first architecture",
5
5
  "type": "module",
6
6
  "main": "dist/exports.js",
@@ -51,11 +51,18 @@ function readJavaModulePackages(cwd: string): Record<string, string> {
51
51
  return {};
52
52
  }
53
53
 
54
- /** Resolve a module ID to its Java sub-package suffix. Throws if unknown. */
54
+ /**
55
+ * Resolve a module ID to its Java sub-package suffix. Explicit
56
+ * `javaModulePackages` entries win; otherwise derive a deterministic suffix
57
+ * from the module id (e.g. "governance-spine" -> "governancespine" under the
58
+ * manifest groupId) instead of failing greenfield epics.
59
+ */
55
60
  function javaModulePackage(cwd: string, moduleId: string): string {
56
61
  const mapping = readJavaModulePackages(cwd);
57
62
  const pkg = mapping[moduleId];
58
63
  if (pkg) return pkg;
64
+ const derived = (moduleId || "").replace(/[^A-Za-z0-9]/g, "").toLowerCase();
65
+ if (derived) return derived;
59
66
  throw new Error(
60
67
  `Unknown Java package for module "${moduleId}". ` +
61
68
  `Add it to the "javaModulePackages" field in guardian-manifest.json.`
@@ -436,6 +436,19 @@ export default function (pi: ExtensionAPI) {
436
436
  parsedJson.status = String(parsedJson.status ?? "draft");
437
437
  parsedJson.createdAt = parsedJson.createdAt ?? new Date().toISOString();
438
438
 
439
+ // Derive aggregate roots from the entities table — never let the
440
+ // rendered "## Aggregate Roots" contradict entities marked
441
+ // aggregate-root (the protocol passes don't carry this field).
442
+ const aggregateRootNames = (Array.isArray(parsedJson.entities) ? parsedJson.entities : [])
443
+ .filter((e) => String((e as Record<string, unknown>).type ?? "") === "aggregate-root")
444
+ .map((e) => String((e as Record<string, unknown>).name ?? ""))
445
+ .filter(Boolean);
446
+ if (aggregateRootNames.length > 0) {
447
+ parsedJson.aggregateRoots = aggregateRootNames.join(", ");
448
+ } else if (!String(parsedJson.aggregateRoots ?? "").trim()) {
449
+ parsedJson.aggregateRoots = "None identified yet.";
450
+ }
451
+
439
452
  // Backfill business context from the explore stub if the agent never
440
453
  // supplied it (front matter business_context survives across saves).
441
454
  if (String(parsedJson.businessContext ?? "").trim() === "") {
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-09-04T20:10:05Z",
2
+ "timestamp": "2026-09-05T07:57:08Z",
3
3
  "mode": "all",
4
4
  "stages_run": [],
5
5
  "summary": {
@@ -8,7 +8,7 @@
8
8
  "failed": 1,
9
9
  "skipped": 12
10
10
  },
11
- "duration_seconds": 1,
11
+ "duration_seconds": 0,
12
12
  "results": [
13
13
  {
14
14
  "name": "check_mr_traceability.sh",
@@ -68,7 +68,7 @@
68
68
  "name": "secret_scan",
69
69
  "status": "pass",
70
70
  "message": "",
71
- "duration": 1
71
+ "duration": 0
72
72
  },
73
73
  {
74
74
  "name": "dependency_audit",