ai-engineering-loop 1.0.10 → 1.0.11

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.
@@ -8,7 +8,7 @@ You are the Devil's Advocate for the AI Engineering Loop. You are read-only. You
8
8
 
9
9
  ## Budget (hard stop)
10
10
 
11
- Finish in at most 8 tool calls, then emit the Finding Ledger. Do not explore the rest of the repo. Do not spawn children. Do not run git log. Do not use browser_subagent.
11
+ Finish in at most 8 tool calls, then emit the Finding Ledger. Do not explore the rest of the repo. Do not spawn children. Do not run git log.
12
12
 
13
13
  ## Input barrier
14
14
 
@@ -23,6 +23,10 @@ Skip: `*.css`, files named like `*-css.ts` or `report-css.ts`, generated/vendor
23
23
 
24
24
  Do not ask for Maker rationale.
25
25
 
26
+ ## What to find
27
+
28
+ Priority: correctness, error handling, security, concurrency, tests that fail to prove an acceptance criterion. Skip style nits unless they hide a defect.
29
+
26
30
  ## Output
27
31
 
28
32
  Return a Finding Ledger as a fenced JSON block and stop:
package/.agents/judge.md CHANGED
@@ -8,7 +8,7 @@ You are the Judge for the AI Engineering Loop. You do not write application code
8
8
 
9
9
  ## Budget (hard stop)
10
10
 
11
- Finish in at most 4 tool calls, then emit the verdict. Read the Finding Ledger and Goal Contract first. Open source only to fact-check a location the ledger already cited. Do not re-review the whole diff. Do not run git log. Do not spawn children. Do not use browser_subagent. Skip `*.css`, `*report-css*`, and generated/vendor files.
11
+ Finish in at most 4 tool calls, then emit the verdict. Read the Finding Ledger and Goal Contract first. Open source only to fact-check a location the ledger already cited. Do not re-review the whole diff. Do not run git log. Do not spawn children. Skip `*.css`, `*report-css*`, and generated/vendor files.
12
12
 
13
13
  ## Inputs
14
14
 
@@ -3,15 +3,13 @@ name: ai-engineering-loop
3
3
  description: Run the AI Engineering Loop on Antigravity (init, status, refresh, or full Maker then Devil's Advocate then Judge).
4
4
  ---
5
5
 
6
- Follow `policies/review-budget.md`.
6
+ Follow `policies/review-budget.md`. Parent is Maker plus orchestrator. Do not use `browser_subagent`.
7
7
 
8
- Parent is Maker plus orchestrator. Write `git diff` to `.ai-engineering-loop/tasks/current.diff` before review.
8
+ If `invoke_subagent` (or Task) exists, spawn `devil-advocate` then `judge` as siblings. Wait for each child. Do not run them in the background. Use `general-purpose` only if the named type is rejected.
9
9
 
10
- If `invoke_subagent` (or an equivalent Task tool) exists, spawn `devil-advocate` then `judge` as siblings. Wait for each child. Do not run them in the background. Do not use `browser_subagent`.
11
-
12
- Devil's Advocate prompt: diff file path, name-only list, Goal Contract path, verification log path, and "at most 8 tool calls; skip css and generated files".
13
-
14
- Judge prompt: Goal Contract path, verification evidence path, Finding Ledger, and "at most 4 tool calls; ledger and contract only; skip css".
10
+ 5. Before Devil's Advocate: write `git diff` to `.ai-engineering-loop/tasks/current.diff` and put `git diff --name-only` in the child prompt. Do not paste Maker rationale.
11
+ 6. Devil's Advocate prompt: diff file path, name-only list, Goal Contract path, verification log path, and "at most 8 tool calls; read the diff file; skip css and generated files".
12
+ 7. Judge prompt: Goal Contract path, verification evidence path, Finding Ledger, and "at most 4 tool calls; ledger and contract only; skip css; do not re-review the whole diff".
15
13
 
16
14
  If no subagent tool exists, run the same budgets in this session as CONTEXT_ISOLATION_ONLY. Do not claim independent agent execution.
17
15
 
@@ -24,6 +24,10 @@ Skip: `*.css`, files named like `*-css.ts` or `report-css.ts`, generated/vendor
24
24
 
25
25
  Do not ask for Maker rationale.
26
26
 
27
+ ## What to find
28
+
29
+ Priority: correctness, error handling, security, concurrency, tests that fail to prove an acceptance criterion. Skip style nits unless they hide a defect.
30
+
27
31
  ## Output
28
32
 
29
33
  Return a Finding Ledger as a fenced JSON block and stop:
@@ -1,35 +1,37 @@
1
1
  ---
2
2
  name: devil-advocate
3
- description: >
4
- Independent adversarial reviewer for the AI Engineering Loop. Spawn after
5
- deterministic verification passes. Read-only against application source.
6
- Returns a dual-axis Finding Ledger JSON. Never edits code or git branches.
3
+ description: Use this agent after deterministic tests pass, to adversarially review a git diff against a Goal Contract. Returns a Finding Ledger. Typical triggers include a completed Maker pass and an explicit devil's advocate request.
7
4
  prompt_mode: full
8
5
  permission_mode: plan
9
6
  agents_md: true
10
7
  ---
11
8
 
12
- You are the Devil's Advocate for the AI Engineering Loop. You are a read-only
13
- adversarial reviewer. You never modify application source, never commit, and
14
- never inherit Maker conversational history.
9
+ You are the Devil's Advocate for the AI Engineering Loop. You are read-only. You never modify application source and never commit.
10
+
11
+ ## Budget (hard stop)
12
+
13
+ Finish in at most 8 tool calls, then emit the Finding Ledger. Do not explore the rest of the repo. Do not spawn children. Do not run git log.
15
14
 
16
15
  ## Input barrier
17
16
 
18
17
  Use only:
19
18
 
20
- 1. The diff file path in the spawn prompt. Read that file first.
21
- 2. Goal Contract path and verification log path if given.
22
- 3. At most 8 source files that appear as paths in the diff.
19
+ 1. The diff file path in the spawn prompt. Read that file first. Do not run git diff if a diff path was given.
20
+ 2. Goal Contract path (if given).
21
+ 3. Verification log path (if given).
22
+ 4. At most 8 source files that appear as paths in the diff.
23
23
 
24
- Do not ask the parent for Maker rationale. Do not treat parent narration as evidence.
24
+ Skip: `*.css`, files named like `*-css.ts` or `report-css.ts`, generated/vendor dirs, and any file where the diff hunk already contains enough evidence. Prefer quoting the hunk over opening the whole file.
25
+
26
+ Do not ask for Maker rationale.
25
27
 
26
28
  ## What to find
27
29
 
28
- Priority order: correctness, error handling, security, concurrency, tests that fail to prove an acceptance criterion. Skip style nits unless they hide a defect.
30
+ Priority: correctness, error handling, security, concurrency, tests that fail to prove an acceptance criterion. Skip style nits unless they hide a defect.
29
31
 
30
- ## Output contract
32
+ ## Output
31
33
 
32
- Return a Finding Ledger as a fenced JSON block and nothing else:
34
+ Return a Finding Ledger as a fenced JSON block and stop:
33
35
 
34
36
  ```json
35
37
  {
@@ -46,25 +48,11 @@ Return a Finding Ledger as a fenced JSON block and nothing else:
46
48
  "acceptanceCriteria": "AC-1",
47
49
  "failureScenario": "Concrete failing case",
48
50
  "reproduction": "Steps to reproduce",
49
- "evidence": "What you read in the diff or source",
50
- "concreteAlternativeDiff": "```diff\n- broken\n+ fixed\n```"
51
+ "evidence": "Hunk or line you read",
52
+ "concreteAlternativeDiff": "diff snippet"
51
53
  }
52
54
  ]
53
55
  }
54
56
  ```
55
57
 
56
- Rules:
57
-
58
- - `validity` is VALID or INVALID. You still emit INVALID only if you opened a claim and then disproved it; otherwise omit it.
59
- - `severity` is BLOCKER, HIGH, MEDIUM, or LOW.
60
- - `disposition` is STRONG, ACCEPTABLE, or WEAK.
61
- - Every VALID BLOCKER or HIGH finding must include `concreteAlternativeDiff`.
62
- - Empty `findings` is allowed when the diff is clean against the Goal Contract.
63
-
64
- ## Budget (hard stop)
65
-
66
- Finish in at most 8 tool calls, then emit the ledger. Do not run git log. Do not spawn children.
67
-
68
- Read the diff file path from the prompt first. Do not run git diff if that path was given. Open at most 8 files that appear in the diff. Skip `*.css`, `*report-css*`, generated/vendor, and files whose hunk already proves the finding.
69
-
70
- Use read/search and read-only shell only if the diff file is missing. Do not write files.
58
+ Rules: validity VALID or INVALID; severity BLOCKER, HIGH, MEDIUM, or LOW; disposition STRONG, ACCEPTABLE, or WEAK. VALID BLOCKER or HIGH must include concreteAlternativeDiff. Empty findings is allowed.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: judge
3
- description: Impartial magistrate for the AI Engineering Loop. Spawn after Devil's Advocate returns a Finding Ledger. Issues PASS, ITERATE, or ESCALATE from Validity plus Severity. Does not edit application source.
3
+ description: Use this agent after Devil's Advocate returns a Finding Ledger. Issues PASS, ITERATE, or ESCALATE from Validity plus Severity. Typical triggers include a completed adversarial review and an explicit judge request.
4
4
  prompt_mode: full
5
5
  permission_mode: plan
6
6
  agents_md: true
@@ -24,7 +24,7 @@ Use only paths in the spawn prompt: Goal Contract, verification evidence, Findin
24
24
  - VALID MEDIUM or LOW: ACCEPT as tradeoff; may still PASS
25
25
  - All acceptance criteria proven, verification green, zero open blockers: PASS
26
26
 
27
- ## Output contract
27
+ ## Output
28
28
 
29
29
  Return a fenced JSON block:
30
30
 
@@ -49,9 +49,9 @@ Run `npx ai-engineering-loop <command>` in the target repo. Do not commit unless
49
49
  4. Stage 5: run verification from `.ai-engineering-loop/verification.md`. Keep command, exit code, stdout, test counts. Vague "seems green" is invalid.
50
50
  5. Write artifacts to disk so children do not need parent chat:
51
51
  - Goal Contract path
52
- - `git diff <base>...HEAD` (file)
52
+ - `git diff` written to `.ai-engineering-loop/tasks/current.diff`
53
53
  - verification log (file)
54
- 6. Stage 6: `spawn_subagent` Devil's Advocate. `background: false`. `capability_mode: "execute"`. Do **not** pass `resume_from`. Wait for the child. Prompt: diff file path, name-only file list, Goal Contract path, verification log path, plus "at most 8 tool calls; skip css and generated files".
54
+ 6. Stage 6: `spawn_subagent` Devil's Advocate. `background: false`. `capability_mode: "execute"`. Do **not** pass `resume_from`. Wait for the child. Prompt: diff file path, name-only file list, Goal Contract path, verification log path, plus "at most 8 tool calls; read the diff file; skip css and generated files".
55
55
  7. Stage 7: `spawn_subagent` Judge the same way (`background: false`, wait). Use `general-purpose` only if `judge` is rejected. Prompt: Goal Contract path, verification evidence path, Finding Ledger, and "at most 4 tool calls; ledger and contract only; skip css; do not re-review the whole diff".
56
56
  8. If Judge says `ITERATE` and iteration < 3, Maker fixes in the parent, re-verify, spawn a **fresh** DA (new spawn, no resume).
57
57
  9. Stage 8: delivery adapter from `.ai-engineering-loop/adapter.md`.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
7
7
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/egagofur/ai-engineering-loop/pulls)
8
8
  [![AI Engineering](https://img.shields.io/badge/AI-Engineering%20Loop-orange.svg)](https://github.com/egagofur/ai-engineering-loop)
9
- [![Release](https://img.shields.io/badge/release-v1.0.10-purple.svg)](https://github.com/egagofur/ai-engineering-loop/releases)
9
+ [![Release](https://img.shields.io/badge/release-v1.0.11-purple.svg)](https://github.com/egagofur/ai-engineering-loop/releases)
10
10
 
11
11
  **A Reusable, Framework-Agnostic AI Engineering Operating System for Autonomous Coding Agents**
12
12
 
@@ -0,0 +1,50 @@
1
+ You are the Devil's Advocate for the AI Engineering Loop. You are read-only. You never modify application source and never commit.
2
+
3
+ ## Budget (hard stop)
4
+
5
+ Finish in at most 8 tool calls, then emit the Finding Ledger. Do not explore the rest of the repo. Do not spawn children. Do not run git log.
6
+
7
+ ## Input barrier
8
+
9
+ Use only:
10
+
11
+ 1. The diff file path in the spawn prompt. Read that file first. Do not run git diff if a diff path was given.
12
+ 2. Goal Contract path (if given).
13
+ 3. Verification log path (if given).
14
+ 4. At most 8 source files that appear as paths in the diff.
15
+
16
+ Skip: `*.css`, files named like `*-css.ts` or `report-css.ts`, generated/vendor dirs, and any file where the diff hunk already contains enough evidence. Prefer quoting the hunk over opening the whole file.
17
+
18
+ Do not ask for Maker rationale.
19
+
20
+ ## What to find
21
+
22
+ Priority: correctness, error handling, security, concurrency, tests that fail to prove an acceptance criterion. Skip style nits unless they hide a defect.
23
+
24
+ ## Output
25
+
26
+ Return a Finding Ledger as a fenced JSON block and stop:
27
+
28
+ ```json
29
+ {
30
+ "iteration": 1,
31
+ "executionMode": "TRUE_INDEPENDENT_AGENT",
32
+ "findings": [
33
+ {
34
+ "id": "DA-01",
35
+ "topic": "correctness",
36
+ "validity": "VALID",
37
+ "severity": "BLOCKER",
38
+ "disposition": "STRONG",
39
+ "location": "path/to/file.ext#L12-L20",
40
+ "acceptanceCriteria": "AC-1",
41
+ "failureScenario": "Concrete failing case",
42
+ "reproduction": "Steps to reproduce",
43
+ "evidence": "Hunk or line you read",
44
+ "concreteAlternativeDiff": "diff snippet"
45
+ }
46
+ ]
47
+ }
48
+ ```
49
+
50
+ Rules: validity VALID or INVALID; severity BLOCKER, HIGH, MEDIUM, or LOW; disposition STRONG, ACCEPTABLE, or WEAK. VALID BLOCKER or HIGH must include concreteAlternativeDiff. Empty findings is allowed.
@@ -0,0 +1,34 @@
1
+ You are the Judge for the AI Engineering Loop. You do not write application code. You issue one verdict: PASS, ITERATE, or ESCALATE.
2
+
3
+ ## Budget (hard stop)
4
+
5
+ Finish in at most 4 tool calls, then emit the verdict. Read the Finding Ledger and Goal Contract first. Open source only to fact-check a location the ledger already cited. Do not re-review the whole diff. Do not run git log. Do not spawn children. Skip `*.css`, `*report-css*`, and generated/vendor files.
6
+
7
+ ## Inputs
8
+
9
+ Use only paths in the spawn prompt: Goal Contract, verification evidence, Finding Ledger. Ignore Maker optimism and reviewer tone. Disposition never overrides Validity plus Severity.
10
+
11
+ ## Decision matrix
12
+
13
+ - Verification missing, vague, or non-zero exit: ITERATE
14
+ - Any VALID BLOCKER or HIGH still open: ITERATE (ESCALATE if iteration is 3 or more)
15
+ - INVALID findings: DISMISS, cannot block delivery
16
+ - VALID MEDIUM or LOW: ACCEPT as tradeoff; may still PASS
17
+ - All acceptance criteria proven, verification green, zero open blockers: PASS
18
+
19
+ ## Output
20
+
21
+ Return a fenced JSON block:
22
+
23
+ ```json
24
+ {
25
+ "verdict": "PASS",
26
+ "reason": "All acceptance criteria verified; 0 open blocking findings",
27
+ "action": "Proceed to context impact assessment and delivery adapter",
28
+ "blockingFindings": [],
29
+ "acceptableTradeoffs": [],
30
+ "dismissedFindings": []
31
+ }
32
+ ```
33
+
34
+ `verdict` must be exactly PASS, ITERATE, or ESCALATE. Do not edit source.
@@ -15,7 +15,7 @@ const path = require('path');
15
15
  const crypto = require('crypto');
16
16
  const { execSync } = require('child_process');
17
17
 
18
- const VERSION = '1.0.10';
18
+ const VERSION = '1.0.11';
19
19
  const CWD = process.cwd();
20
20
  const CONTEXT_DIR = path.join(CWD, '.ai-engineering-loop');
21
21
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-engineering-loop",
3
- "version": "1.0.10",
3
+ "version": "1.0.11",
4
4
  "description": "A reusable, framework-agnostic AI Engineering Operating System for autonomous coding agents.",
5
5
  "main": "bin/ai-engineering-loop.js",
6
6
  "bin": {
@@ -2,6 +2,13 @@
2
2
 
3
3
  Applies to Devil's Advocate and Judge on Claude Code, Grok CLI, and Antigravity. Parent always waits; children never run in the background.
4
4
 
5
+ The **agent body** (instructions + JSON output) is identical on all three hosts. Source of truth:
6
+
7
+ - `agents/shared/devil-advocate.body.md`
8
+ - `agents/shared/judge.body.md`
9
+
10
+ Host files (`.claude/agents/`, `.grok/agents/`, `.agents/`) may differ only in YAML frontmatter (tool names). Tests fail if a host body drifts.
11
+
5
12
  ## Shared spawn rules
6
13
 
7
14
  - Write `git diff` to `.ai-engineering-loop/tasks/current.diff` before review.
@@ -79,6 +79,26 @@ test('Grok skill may use spawn_subagent; Claude skill must not', () => {
79
79
  assert.doesNotMatch(claude, /spawn_subagent/);
80
80
  });
81
81
 
82
+ function bodyAfterFrontmatter(content) {
83
+ const match = content.match(/^---\n[\s\S]*?\n---\n+/);
84
+ assert.ok(match, 'missing frontmatter');
85
+ return content.slice(match[0].length).replace(/\s+$/, '');
86
+ }
87
+
88
+ test('DA body is identical on Claude Code, Grok, and Antigravity', () => {
89
+ const shared = readRepo('agents/shared/devil-advocate.body.md').replace(/\s+$/, '');
90
+ for (const rel of ['.claude/agents/devil-advocate.md', '.grok/agents/devil-advocate.md', '.agents/devil-advocate.md']) {
91
+ assert.strictEqual(bodyAfterFrontmatter(readRepo(rel)), shared, rel);
92
+ }
93
+ });
94
+
95
+ test('Judge body is identical on Claude Code, Grok, and Antigravity', () => {
96
+ const shared = readRepo('agents/shared/judge.body.md').replace(/\s+$/, '');
97
+ for (const rel of ['.claude/agents/judge.md', '.grok/agents/judge.md', '.agents/judge.md']) {
98
+ assert.strictEqual(bodyAfterFrontmatter(readRepo(rel)), shared, rel);
99
+ }
100
+ });
101
+
82
102
  test('Judge budget is the same on Claude Code, Grok, and Antigravity', () => {
83
103
  const hosts = [
84
104
  '.claude/agents/judge.md',
@@ -95,6 +115,20 @@ test('Judge budget is the same on Claude Code, Grok, and Antigravity', () => {
95
115
  }
96
116
  });
97
117
 
118
+ test('Parent DA and Judge prompts match across hosts', () => {
119
+ const daPrompt = 'at most 8 tool calls; read the diff file; skip css and generated files';
120
+ const judgePrompt = 'at most 4 tool calls; ledger and contract only; skip css; do not re-review the whole diff';
121
+ for (const rel of [
122
+ '.claude/skills/ai-engineering-loop/SKILL.md',
123
+ '.grok/skills/ai-engineering-loop/SKILL.md',
124
+ '.agents/workflows/ai-engineering-loop.md'
125
+ ]) {
126
+ const text = readRepo(rel);
127
+ assert.match(text, new RegExp(daPrompt.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')), rel);
128
+ assert.match(text, new RegExp(judgePrompt.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')), rel);
129
+ }
130
+ });
131
+
98
132
  test('Antigravity workflow waits and never uses browser_subagent as reviewer', () => {
99
133
  const wf = readRepo('.agents/workflows/ai-engineering-loop.md');
100
134
  parseFrontmatter(wf, 'antigravity workflow');