guardian-framework 0.1.85 → 0.1.87

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
@@ -3074,7 +3074,7 @@ function getStoredHash(record) {
3074
3074
  return hash ? hash.replace("sha256:", "") : null;
3075
3075
  }
3076
3076
  function categorizeFile(relativePath) {
3077
- const userEditable = ["agent/AGENTS.md", "context/project.md", "context/patterns.md", "domain/"];
3077
+ const userEditable = ["agent/AGENTS.md", "domain/"];
3078
3078
  if (userEditable.some((p3) => relativePath.includes(p3))) {
3079
3079
  return "user";
3080
3080
  }
@@ -3197,7 +3197,7 @@ __export(exports_package, {
3197
3197
  bin: () => bin,
3198
3198
  author: () => author
3199
3199
  });
3200
- var name = "guardian-framework", version = "0.1.85", 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;
3200
+ var name = "guardian-framework", version = "0.1.87", 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;
3201
3201
  var init_package = __esm(() => {
3202
3202
  exports = {
3203
3203
  ".": {
package/dist/exports.js CHANGED
@@ -1894,7 +1894,7 @@ function getStoredHash(record) {
1894
1894
  return hash ? hash.replace("sha256:", "") : null;
1895
1895
  }
1896
1896
  function categorizeFile(relativePath) {
1897
- const userEditable = ["agent/AGENTS.md", "context/project.md", "context/patterns.md", "domain/"];
1897
+ const userEditable = ["agent/AGENTS.md", "domain/"];
1898
1898
  if (userEditable.some((p2) => relativePath.includes(p2))) {
1899
1899
  return "user";
1900
1900
  }
@@ -1982,7 +1982,7 @@ __export(exports_package, {
1982
1982
  bin: () => bin,
1983
1983
  author: () => author
1984
1984
  });
1985
- var name = "guardian-framework", version = "0.1.85", 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;
1985
+ var name = "guardian-framework", version = "0.1.87", 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;
1986
1986
  var init_package = __esm(() => {
1987
1987
  exports = {
1988
1988
  ".": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "guardian-framework",
3
- "version": "0.1.85",
3
+ "version": "0.1.87",
4
4
  "description": "Token-optimized agentic framework scaffolder with pi-first architecture",
5
5
  "type": "module",
6
6
  "main": "dist/exports.js",
@@ -133,6 +133,30 @@ function isJavaProject(cwd?: string): boolean {
133
133
  }
134
134
  }
135
135
 
136
+ /** Get the test runner command for a project language. */
137
+ function testRunnerFromCwd(cwd?: string): string | null {
138
+ if (!cwd) return null;
139
+ try {
140
+ if (existsSync(join(cwd, "Cargo.toml"))) return "cargo test";
141
+ if (existsSync(join(cwd, "go.mod"))) return "go test";
142
+ if (existsSync(join(cwd, "pyproject.toml")) || existsSync(join(cwd, "requirements.txt"))) return "pytest";
143
+ if (existsSync(join(cwd, "package.json"))) return "bun test";
144
+ } catch {}
145
+ return null;
146
+ }
147
+
148
+ /** Get the implementation file suffix for a project language. */
149
+ function implSuffix(cwd?: string): string {
150
+ if (!cwd) return "ts";
151
+ try {
152
+ if (existsSync(join(cwd, "pom.xml")) || existsSync(join(cwd, "build.gradle")) || existsSync(join(cwd, "build.gradle.kts"))) return "java";
153
+ if (existsSync(join(cwd, "Cargo.toml"))) return "rs";
154
+ if (existsSync(join(cwd, "go.mod"))) return "go";
155
+ if (existsSync(join(cwd, "pyproject.toml")) || existsSync(join(cwd, "requirements.txt"))) return "py";
156
+ } catch {}
157
+ return "ts";
158
+ }
159
+
136
160
  // ── Issue Generation ──
137
161
 
138
162
  export function generateIssueMarkdown(
@@ -158,7 +182,7 @@ export function generateIssueMarkdown(
158
182
  // Language-aware test paths
159
183
  const isJava = isJavaProject(cwd);
160
184
  const testBaseDir = isJava ? "src/test/java" : "tests/unit";
161
- const testRunnerHint = isJava ? "mvn test" : "bun test";
185
+ const testRunnerHint = isJava ? "mvn test" : testRunnerFromCwd(cwd) || "bun test";
162
186
 
163
187
  const testLine = tdd
164
188
  ? ` - "update: ${testBaseDir}/ (failing tests already generated — make them pass)"`
@@ -252,7 +276,7 @@ ${yamlAcs}
252
276
  All Acceptance Criteria in that file must be satisfied before this issue is closed.
253
277
  Component focus: ${comp.name}.
254
278
  CONCRETE IMPLEMENTATIONS MUST BE CREATED — interface stubs from the contract freeze
255
- are not sufficient. Each domain service/aggregate needs a concrete .impl.${isJava ? "java" : "ts"} file.
279
+ are not sufficient. Each domain service/aggregate needs a concrete .impl.${implSuffix(cwd)} file.
256
280
 
257
281
  file_changes:
258
282
  - "create: src/${moduleId}/domain/"
@@ -307,7 +331,7 @@ ${stepsMarkdown}
307
331
  > **Agent instructions:**
308
332
  > 1. Open \`.pi/architecture/modules/${slice.module}.md\` — read the full Acceptance Criteria table
309
333
  > 2. Identify which rows are your responsibility for **${comp.name}**
310
- > 3. Create concrete implementation files (\`.impl.${isJava ? "java" : "ts"}\`) in \`src/${moduleId}/\` — the interface stubs from the contract freeze are NOT enough
334
+ > 3. Create concrete implementation files (\`.impl.${implSuffix(cwd)}\`) in \`src/${moduleId}/\` — the interface stubs from the contract freeze are NOT enough
311
335
  > 4. Each domain aggregate/service must have a working implementation with business logic
312
336
  > 5. Verify each AC row is satisfied in \`src/\` before marking done
313
337
  > 6. Run validators and create MR
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-07-16T19:23:13Z",
2
+ "timestamp": "2026-07-16T19:29:00Z",
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",
@@ -56,7 +56,7 @@
56
56
  "name": "cargo test --lib",
57
57
  "status": "fail",
58
58
  "message": "unit test failures",
59
- "duration": 0
59
+ "duration": 1
60
60
  },
61
61
  {
62
62
  "name": "integration",