guardian-framework 0.1.139 → 0.1.141

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
@@ -3206,7 +3206,7 @@ __export(exports_package, {
3206
3206
  bin: () => bin,
3207
3207
  author: () => author
3208
3208
  });
3209
- var name = "guardian-framework", version = "0.1.139", 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;
3209
+ var name = "guardian-framework", version = "0.1.141", 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;
3210
3210
  var init_package = __esm(() => {
3211
3211
  exports = {
3212
3212
  ".": {
@@ -11102,7 +11102,7 @@ function analyzeChanges(targetDir, manifest, templateFiles, context, options) {
11102
11102
  if (!filePath.startsWith(".pi/"))
11103
11103
  continue;
11104
11104
  const fullPath = path9.join(targetDir, filePath);
11105
- if (isUserOwnedPiPath(filePath)) {
11105
+ if (fs10.existsSync(fullPath) && isUserOwnedPiPath(filePath)) {
11106
11106
  changes.push({
11107
11107
  path: filePath,
11108
11108
  action: "preserve",
@@ -11122,7 +11122,7 @@ function analyzeChanges(targetDir, manifest, templateFiles, context, options) {
11122
11122
  changes.push({ path: filePath, action: "regenerate", reason: "Export file" });
11123
11123
  continue;
11124
11124
  }
11125
- if (record.category === "user") {
11125
+ if (record.category === "user" && fs10.existsSync(fullPath)) {
11126
11126
  changes.push({
11127
11127
  path: filePath,
11128
11128
  action: "preserve",
package/dist/exports.js CHANGED
@@ -1991,7 +1991,7 @@ __export(exports_package, {
1991
1991
  bin: () => bin,
1992
1992
  author: () => author
1993
1993
  });
1994
- var name = "guardian-framework", version = "0.1.139", 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;
1994
+ var name = "guardian-framework", version = "0.1.141", 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;
1995
1995
  var init_package = __esm(() => {
1996
1996
  exports = {
1997
1997
  ".": {
@@ -10226,7 +10226,7 @@ function analyzeChanges(targetDir, manifest, templateFiles, context, options) {
10226
10226
  if (!filePath.startsWith(".pi/"))
10227
10227
  continue;
10228
10228
  const fullPath = path5.join(targetDir, filePath);
10229
- if (isUserOwnedPiPath(filePath)) {
10229
+ if (fs6.existsSync(fullPath) && isUserOwnedPiPath(filePath)) {
10230
10230
  changes.push({
10231
10231
  path: filePath,
10232
10232
  action: "preserve",
@@ -10246,7 +10246,7 @@ function analyzeChanges(targetDir, manifest, templateFiles, context, options) {
10246
10246
  changes.push({ path: filePath, action: "regenerate", reason: "Export file" });
10247
10247
  continue;
10248
10248
  }
10249
- if (record.category === "user") {
10249
+ if (record.category === "user" && fs6.existsSync(fullPath)) {
10250
10250
  changes.push({
10251
10251
  path: filePath,
10252
10252
  action: "preserve",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "guardian-framework",
3
- "version": "0.1.139",
3
+ "version": "0.1.141",
4
4
  "description": "Token-optimized agentic framework scaffolder with pi-first architecture",
5
5
  "type": "module",
6
6
  "main": "dist/exports.js",
@@ -1823,21 +1823,35 @@ export default function (pi: ExtensionAPI) {
1823
1823
  }
1824
1824
  const docText = fs.readFileSync(path.join(modulesDir, docFile), "utf-8");
1825
1825
  const catNames = svcByCtx.get(ctx)!;
1826
+ // Scope to the Application/Service Layer section — module docs
1827
+ // legitimately title it "### Application Layer (`application/`)"
1828
+ // or "### Service Layer (application)".
1829
+ const secMatch = docText.match(/###\s+(?:Application|Service)\s+Layer[^\n]*\n([\s\S]*?)(?=\n##\s|$)/i);
1830
+ const section = secMatch ? secMatch[1] : docText;
1831
+ // Catalog rows: markdown table rows whose FIRST cell is the service
1832
+ // name. This is the real invariant (the service is presented as a
1833
+ // row in the catalog table) — not a specific header wording.
1834
+ const rowServices = new Set<string>();
1835
+ for (const line of section.split("\n")) {
1836
+ if (!line.trim().startsWith("|")) continue;
1837
+ const first = (line.split("|")[1] ?? "").trim().replace(/^`|`$/g, "");
1838
+ if (first && !/^-+$/.test(first)) rowServices.add(first);
1839
+ }
1826
1840
  let miss = 0;
1827
- for (const nm of catNames) if (!docText.includes(nm)) miss++;
1828
- if (miss > 0) { checks.push(" FAIL " + docFile + " missing " + miss + " catalog service name(s): " + catNames.filter((n) => !docText.includes(n)).join(", ")); issues += miss; }
1829
- if (!docText.includes("Service (canonical)")) {
1830
- checks.push(" FAIL " + docFile + " has no Application Layer catalog block (header 'Service (canonical)') for " + catNames.length + " catalog services");
1831
- issues++;
1841
+ for (const nm of catNames) {
1842
+ if (!rowServices.has(nm)) {
1843
+ checks.push(" FAIL " + docFile + ": catalog service " + nm + " is not presented as a row in the Application Layer catalog section" +
1844
+ (docText.includes(nm) ? " (the name appears in the doc, but not as a catalog row)" : ""));
1845
+ miss++;
1846
+ }
1832
1847
  }
1833
- // Parse catalog table rows: | `Service` | use case | fr | Status | Delivered by |
1834
- const block = docText.slice(docText.indexOf("### Application Layer") >= 0 ? docText.indexOf("### Application Layer") : 0);
1835
- for (const line of block.split("\n")) {
1848
+ issues += miss;
1849
+ // Implemented-seam / planned-pointer checks apply only to WIDE
1850
+ // catalog rows (5-column: Service | use case | FR | Status |
1851
+ // Delivered by). A 3-column catalog is accepted as-is.
1852
+ for (const line of section.split("\n")) {
1836
1853
  if (!line.trim().startsWith("|")) continue;
1837
1854
  const cells = line.split("|").map((c) => c.trim());
1838
- // Locate the mapsToFr column (FR-00x[, FR-00y]*) — use-case
1839
- // text may contain escaped pipes (\|) which naive split
1840
- // fragments, so fixed indexes are unreliable.
1841
1855
  const frIdx = cells.findIndex((c, i) => i >= 2 && /^((FR|NFR)-\d[\d, ]*)(,\s*(FR|NFR)-\d[\d, ]*)*$/.test(c));
1842
1856
  if (cells.length < 6 || frIdx < 0) continue;
1843
1857
  const svcName = cells[1].replace(/^`|`$/g, "");
@@ -1865,7 +1879,8 @@ export default function (pi: ExtensionAPI) {
1865
1879
  }
1866
1880
  }
1867
1881
  }
1868
- checks.push(issues === 0
1882
+
1883
+ checks.push(issues === 0
1869
1884
  ? " PASS Catalog blocks + seams verified for all " + svcV.length + " application services"
1870
1885
  : " FAIL " + issues + " catalog/seam issue(s)");
1871
1886
  if (issues > 0) allPassed = false;
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-09-25T17:15:00Z",
2
+ "timestamp": "2026-09-25T19:29:02Z",
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": 0,
11
+ "duration_seconds": 1,
12
12
  "results": [
13
13
  {
14
14
  "name": "check_mr_traceability.sh",