guardian-framework 0.1.117 → 0.1.119

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.117", 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.119", 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.117", 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.119", 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.117",
3
+ "version": "0.1.119",
4
4
  "description": "Token-optimized agentic framework scaffolder with pi-first architecture",
5
5
  "type": "module",
6
6
  "main": "dist/exports.js",
@@ -422,6 +422,19 @@ export default function (pi: ExtensionAPI) {
422
422
  parsedJson = mergeRawJson(existing, parsedJson);
423
423
  } catch { /* ignore unreadable prior state */ }
424
424
  }
425
+ // Backfill business context from the explore stub if the agent never
426
+ // supplied it (front matter business_context survives across saves).
427
+ if (String(parsedJson.businessContext ?? "").trim() === "") {
428
+ const stubPath = path.join(ctx.cwd, ".pi", "domain", "exploration", sessionId + ".md");
429
+ if (fs.existsSync(stubPath)) {
430
+ try {
431
+ const stub = fs.readFileSync(stubPath, "utf-8");
432
+ const m = stub.match(/^business_context:\s*"((?:[^"\\]|\\.)*)"/m);
433
+ if (m) parsedJson.businessContext = m[1].replace(/\\"/g, '"');
434
+ } catch { /* ignore */ }
435
+ }
436
+ }
437
+
425
438
 
426
439
  const now = new Date().toISOString().split("T")[0];
427
440
  const explorationDir = path.join(ctx.cwd, ".pi", "domain", "exploration");
@@ -606,6 +619,30 @@ export default function (pi: ExtensionAPI) {
606
619
  addCheck("Modeling depth rules (ADR-008) - skipped", true, "no session raw.json");
607
620
  }
608
621
 
622
+ // 3b. Completeness advisory: flag empty core sections + which protocol
623
+ // pass fills them (empty by construction must not look like success).
624
+ const rawPath = path.join(ctx.cwd, ".pi", "domain", "exploration", sessionId + ".raw.json");
625
+ if (fs.existsSync(rawPath)) {
626
+ try {
627
+ const raw = JSON.parse(fs.readFileSync(rawPath, "utf-8")) as Record<string, unknown>;
628
+ const sections: Array<[string, string, string]> = [
629
+ ["boundedContexts", "bounded contexts", "strategic pass (step 1)"],
630
+ ["functionalRequirements", "functional requirements", "requirements pass (step 1b)"],
631
+ ["nonFunctionalRequirements", "non-functional requirements", "requirements pass (step 1b)"],
632
+ ["entities", "entities", "per-context pass (step 2)"],
633
+ ["domainEvents", "domain events", "per-context pass (step 2)"],
634
+ ["ubiquitousLanguage", "ubiquitous-language terms", "per-context pass (step 2)"],
635
+ ];
636
+ const empty = sections.filter(([key]) => !Array.isArray(raw[key]) || (raw[key] as unknown[]).length === 0);
637
+ if (empty.length > 0) {
638
+ const hint = empty
639
+ .map(([, label, pass]) => `${label} (${pass})`)
640
+ .join("; ");
641
+ checks.push(" NOTE empty sections — run the matching pass: " + hint);
642
+ }
643
+ } catch { /* ignore */ }
644
+ }
645
+
609
646
  // 4. Source code drift
610
647
  const scriptPath = path.join(ctx.cwd, ".pi", "scripts", "validate-ubiquitous-language.sh");
611
648
  if (fs.existsSync(scriptPath)) {
@@ -809,6 +846,7 @@ export default function (pi: ExtensionAPI) {
809
846
  "1. STRATEGIC PASS (this message): reply with ONLY this JSON, nothing else —",
810
847
  '```json',
811
848
  '{',
849
+ ' "businessContext": "one-line summary of the domain",',
812
850
  ' "actors": [{ "name": "...", "description": "...", "interactions": "..." }],',
813
851
  ' "assumptions": [{ "assumption": "...", "impactIfWrong": "...", "mitigation": "..." }],',
814
852
  ' "boundedContexts": [',
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-09-04T19:06:51Z",
2
+ "timestamp": "2026-09-04T19:42:16Z",
3
3
  "mode": "all",
4
4
  "stages_run": [],
5
5
  "summary": {
@@ -56,7 +56,7 @@
56
56
  "name": "cargo test --lib",
57
57
  "status": "fail",
58
58
  "message": "unit test failures",
59
- "duration": 1
59
+ "duration": 0
60
60
  },
61
61
  {
62
62
  "name": "integration",