ai-factory 2.5.0 โ†’ 2.6.0

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/README.md CHANGED
@@ -84,15 +84,13 @@ npx ai-factory init
84
84
  ### Upgrading from v1 to v2
85
85
 
86
86
  ```bash
87
- # 1) Update the CLI package
88
- npm install -g ai-factory@latest
89
-
90
- # 2) Migrate existing skills to v2 naming
91
87
  ai-factory upgrade
92
88
  ```
93
89
 
94
90
  `ai-factory upgrade` removes old bare-named skills (`commit`, `feature`, etc.) and installs new `aif-*` prefixed versions. Custom skills are preserved.
95
91
 
92
+ > **Note:** `ai-factory update` automatically checks npm for a newer CLI version and offers to install it before updating skills. You no longer need to run `npm install -g ai-factory@latest` manually.
93
+
96
94
  ### Example Workflow
97
95
 
98
96
  ```bash
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAYA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA0JnD"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAoHA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA6JnD"}
@@ -1,10 +1,116 @@
1
1
  import chalk from 'chalk';
2
2
  import path from 'path';
3
+ import { realpathSync } from 'fs';
4
+ import { execSync } from 'child_process';
5
+ import inquirer from 'inquirer';
3
6
  import { getCurrentVersion, loadConfig, saveConfig } from '../../core/config.js';
4
7
  import { getAvailableSkills, partitionSkills, updateSkills } from '../../core/installer.js';
5
8
  import { applyExtensionInjections } from '../../core/injections.js';
6
9
  import { getExtensionsDir, loadExtensionManifest } from '../../core/extensions.js';
7
10
  import { installExtensionSkillsForAllAgents, installSkillsForAllAgents, collectReplacedSkills, } from '../../core/extension-ops.js';
11
+ function parseVersion(v) {
12
+ const [core, ...rest] = v.split('-');
13
+ return {
14
+ parts: core.split('.').map(Number),
15
+ prerelease: rest.length > 0 ? rest.join('-') : null,
16
+ };
17
+ }
18
+ function isNewerVersion(latest, current) {
19
+ const l = parseVersion(latest);
20
+ const c = parseVersion(current);
21
+ for (let i = 0; i < 3; i++) {
22
+ if ((l.parts[i] ?? 0) > (c.parts[i] ?? 0))
23
+ return true;
24
+ if ((l.parts[i] ?? 0) < (c.parts[i] ?? 0))
25
+ return false;
26
+ }
27
+ // Equal major.minor.patch: prerelease is older than stable (semver ยง11)
28
+ if (c.prerelease && !l.prerelease)
29
+ return true;
30
+ if (!c.prerelease && l.prerelease)
31
+ return false;
32
+ return false;
33
+ }
34
+ async function getLatestVersion() {
35
+ try {
36
+ const response = await fetch('https://registry.npmjs.org/ai-factory/latest', {
37
+ signal: AbortSignal.timeout(5000),
38
+ });
39
+ if (!response.ok)
40
+ return null;
41
+ const data = await response.json();
42
+ if (!/^\d+\.\d+\.\d+(-[\w.]+)?$/.test(data.version))
43
+ return null;
44
+ return data.version;
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ function getInstallCommand(version) {
51
+ try {
52
+ const whichCmd = process.platform === 'win32' ? 'where' : 'which';
53
+ const binPath = execSync(`${whichCmd} ai-factory`, {
54
+ encoding: 'utf-8',
55
+ timeout: 5000,
56
+ stdio: ['pipe', 'pipe', 'pipe'],
57
+ }).split('\n')[0].trim();
58
+ const realPath = realpathSync(binPath).replaceAll('\\', '/');
59
+ if (realPath.includes('.bun/'))
60
+ return `bun add -g ai-factory@${version}`;
61
+ if (realPath.includes('/mise/'))
62
+ return `mise use -g npm:ai-factory@${version}`;
63
+ if (realPath.includes('/volta/'))
64
+ return `volta install ai-factory@${version}`;
65
+ if (realPath.includes('/pnpm/'))
66
+ return `pnpm add -g ai-factory@${version}`;
67
+ if (realPath.includes('/yarn/'))
68
+ return `yarn global add ai-factory@${version}`;
69
+ }
70
+ catch {
71
+ // Binary not found or symlink resolution failed, default to npm
72
+ }
73
+ return `npm install -g ai-factory@${version}`;
74
+ }
75
+ async function selfUpdate(currentVersion) {
76
+ const latestVersion = await getLatestVersion();
77
+ if (!latestVersion) {
78
+ console.log(chalk.dim('Could not check for new versions\n'));
79
+ return false;
80
+ }
81
+ if (!isNewerVersion(latestVersion, currentVersion)) {
82
+ console.log(chalk.dim('ai-factory is up to date\n'));
83
+ return false;
84
+ }
85
+ console.log(chalk.cyan(`๐Ÿ“ฆ New version available: ${currentVersion} โ†’ ${latestVersion}`));
86
+ if (!process.stdin.isTTY) {
87
+ console.log(chalk.dim('Non-interactive mode โ€” skipping self-update\n'));
88
+ return false;
89
+ }
90
+ const { shouldUpdate } = await inquirer.prompt([{
91
+ type: 'confirm',
92
+ name: 'shouldUpdate',
93
+ message: `Update ai-factory to ${latestVersion}?`,
94
+ default: true,
95
+ }]);
96
+ if (!shouldUpdate) {
97
+ console.log(chalk.dim('Skipping package update\n'));
98
+ return false;
99
+ }
100
+ try {
101
+ const installCmd = getInstallCommand(latestVersion);
102
+ console.log(chalk.dim(`\n$ ${installCmd}`));
103
+ execSync(installCmd, { stdio: 'inherit' });
104
+ console.log(chalk.green(`\nโœ“ Updated to ${latestVersion}`));
105
+ console.log(chalk.cyan('Please re-run `ai-factory update` to update skills with the new version.\n'));
106
+ process.exitCode = 75; // EX_TEMPFAIL โ€” signals caller to re-run
107
+ return true;
108
+ }
109
+ catch (error) {
110
+ console.log(chalk.yellow(`โš  Self-update failed: ${error.message}`));
111
+ return false;
112
+ }
113
+ }
8
114
  export async function updateCommand() {
9
115
  const projectDir = process.cwd();
10
116
  console.log(chalk.bold.blue('\n๐Ÿญ AI Factory - Update Skills\n'));
@@ -17,6 +123,9 @@ export async function updateCommand() {
17
123
  const currentVersion = getCurrentVersion();
18
124
  console.log(chalk.dim(`Config version: ${config.version}`));
19
125
  console.log(chalk.dim(`Package version: ${currentVersion}\n`));
126
+ const selfUpdated = await selfUpdate(currentVersion);
127
+ if (selfUpdated)
128
+ return;
20
129
  console.log(chalk.dim('Updating skills...\n'));
21
130
  try {
22
131
  const availableSkills = await getAvailableSkills();
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAuGA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAoHpD"}
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAuGA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAwIpD"}
@@ -98,9 +98,13 @@ export async function upgradeCommand() {
98
98
  process.exit(1);
99
99
  }
100
100
  // Step 1: Migrate legacy plan directories to .ai-factory/plans/
101
+ // Also ensure newer v2 working directories exist.
102
+ const aiFactoryDir = path.join(projectDir, '.ai-factory');
101
103
  const featuresDir = path.join(projectDir, '.ai-factory', 'features');
102
104
  const changesDir = path.join(projectDir, '.ai-factory', 'changes');
103
105
  const plansDir = path.join(projectDir, '.ai-factory', 'plans');
106
+ const evolutionsDir = path.join(aiFactoryDir, 'evolutions');
107
+ const skillContextDir = path.join(aiFactoryDir, 'skill-context');
104
108
  if (await fileExists(changesDir) && !(await fileExists(plansDir))) {
105
109
  await fs.move(changesDir, plansDir);
106
110
  console.log(chalk.green('โœ“ Renamed .ai-factory/changes/ โ†’ .ai-factory/plans/\n'));
@@ -109,6 +113,21 @@ export async function upgradeCommand() {
109
113
  await fs.move(featuresDir, plansDir);
110
114
  console.log(chalk.green('โœ“ Renamed .ai-factory/features/ โ†’ .ai-factory/plans/\n'));
111
115
  }
116
+ // Newer v2 structure used by /aif-evolve for incremental patch processing.
117
+ await fs.ensureDir(evolutionsDir);
118
+ await fs.ensureDir(skillContextDir);
119
+ const legacyCursorPath = path.join(aiFactoryDir, 'patch-cursor.json');
120
+ const cursorPath = path.join(evolutionsDir, 'patch-cursor.json');
121
+ if (await fileExists(legacyCursorPath)) {
122
+ if (!(await fileExists(cursorPath))) {
123
+ await fs.move(legacyCursorPath, cursorPath);
124
+ console.log(chalk.green('โœ“ Moved .ai-factory/patch-cursor.json โ†’ .ai-factory/evolutions/patch-cursor.json\n'));
125
+ }
126
+ else {
127
+ await removeFile(legacyCursorPath);
128
+ console.log(chalk.yellow(' WARN: Both cursor files existed; removed .ai-factory/patch-cursor.json and kept .ai-factory/evolutions/patch-cursor.json as source of truth\n'));
129
+ }
130
+ }
112
131
  const availableSkills = await getAvailableSkills();
113
132
  for (const agent of config.agents) {
114
133
  const agentConfig = getAgentConfig(agent.id);
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE5E,gEAAgE;AAChE,MAAM,eAAe,GAAG;IACtB,cAAc;IACd,gBAAgB;IAChB,kBAAkB;IAClB,IAAI;IACJ,QAAQ;IACR,WAAW;IACX,MAAM;IACN,QAAQ;IACR,SAAS;IACT,KAAK;IACL,WAAW;IACX,SAAS;IACT,QAAQ;IACR,oBAAoB;IACpB,iBAAiB;IACjB,MAAM;IACN,QAAQ;CACT,CAAC;AAEF,sDAAsD;AACtD,MAAM,0BAA0B,GAAG;IACjC,YAAY;IACZ,yBAAyB;IACzB,2BAA2B;IAC3B,6BAA6B;IAC7B,eAAe;IACf,mBAAmB;IACnB,sBAAsB;IACtB,iBAAiB;IACjB,mBAAmB;IACnB,gBAAgB;IAChB,sBAAsB;IACtB,oBAAoB;IACpB,iBAAiB;IACjB,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,+BAA+B;IAC/B,4BAA4B;IAC5B,mBAAmB;IACnB,+CAA+C;IAC/C,iBAAiB;IACjB,oBAAoB;CACrB,CAAC;AAEF,0EAA0E;AAC1E,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,QAAQ;IACR,SAAS;IACT,KAAK;IACL,WAAW;IACX,SAAS;IACT,MAAM;IACN,QAAQ;CACT,CAAC,CAAC;AAEH,KAAK,UAAU,kBAAkB,CAAC,UAAkB,EAAE,SAAiB,EAAE,SAAiB;IACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC;IAClF,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAWD,KAAK,UAAU,0BAA0B,CAAC,OAAkC;IAC1E,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IACzF,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,IAAI,cAAc,IAAI,MAAM,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,OAAO,uBAAuB,SAAS,KAAK,CAAC,CAAC,CAAC;QAC9E,YAAY,EAAE,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC/C,IAAI,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,OAAO,oBAAoB,SAAS,GAAG,CAAC,CAAC,CAAC;QACzE,YAAY,EAAE,CAAC;IACjB,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gEAAgE;IAChE,kDAAkD;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAEjE,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAClE,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,MAAM,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,2EAA2E;IAC3E,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAClC,MAAM,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAEpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;IACjE,IAAI,MAAM,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAC,CAAC;QACjH,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,CAAC,gBAAgB,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iJAAiJ,CAAC,CAAC,CAAC;QAC/K,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAEnD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,KAAK,CAAC,EAAE,KAAK,aAAa,CAAC;QACjD,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE5E,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,YAAY,IAAI,MAAM,0BAA0B,CAAC;gBAC/C,UAAU;gBACV,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,SAAS;gBACT,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,SAAS,EAAE,OAAO;gBAClB,cAAc,EAAE,aAAa,IAAI,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;aAClE,CAAC,CAAC;QACL,CAAC;QAED,4DAA4D;QAC5D,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;YACxC,UAAU,EAAE,aAAa;YACzB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;YAC9C,GAAG,0BAA0B;SAC9B,CAAC,CAAC,CAAC;QAEJ,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;YACtC,YAAY,IAAI,MAAM,0BAA0B,CAAC;gBAC/C,UAAU;gBACV,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,SAAS;gBACT,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,SAAS,EAAE,QAAQ;gBACnB,cAAc,EAAE,aAAa;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,iCAAiC,CAAC,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,aAAa,YAAY,yBAAyB,CAAC,CAAC,CAAC;QAC7F,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE1E,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACxE,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC;YAC1C,UAAU;YACV,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,eAAe;YACvB,OAAO,EAAE,KAAK,CAAC,EAAE;SAClB,CAAC,CAAC;QAEH,KAAK,CAAC,eAAe,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,YAAY,CAAC,CAAC;IAChE,CAAC;IAED,iEAAiE;IACjE,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC;IAChC,MAAM,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAErC,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAExD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE1F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC3D,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,8BAA8B,CAAC,CAAC,CAAC;YACpE,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-factory",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "type": "module",
5
5
  "description": "CLI tool for automating AI agent context setup in projects",
6
6
  "main": "dist/cli/index.js",
@@ -20,6 +20,18 @@ analyze recurring problems, tech-specific pitfalls, project conventions
20
20
  enhance skills with project-specific rules, guards, and patterns
21
21
  ```
22
22
 
23
+ ## Patch Consumption Policy
24
+
25
+ Use a two-layer learning model:
26
+
27
+ 1. **Raw patches** (`.ai-factory/patches/*.md`) are the source material.
28
+ 2. **Skill-context rules** (`.ai-factory/skill-context/*`) are the compact, reusable output.
29
+
30
+ Policy across workflow skills:
31
+ - `/aif-evolve` is the primary raw-patch analyzer. It processes patches **incrementally** using a cursor.
32
+ - `/aif-implement`, `/aif-fix`, and `/aif-improve` should prefer skill-context first; raw patches are fallback context only.
33
+ - Force full re-analysis only when needed (e.g., reset cursor and rerun evolve).
34
+
23
35
  ## Critical: Never Edit Built-in Skills Directly
24
36
 
25
37
  **NEVER modify any files inside built-in `aif-*` skill directories** (`skills/aif-*/`).
@@ -97,12 +109,49 @@ If any rule is violated โ€” fix the output before presenting it to the user.
97
109
 
98
110
  ### Step 1: Collect Intelligence
99
111
 
100
- **1.1: Read all patches**
112
+ **1.1: Read patches incrementally (cursor-based)**
101
113
 
102
114
  ```
103
115
  Glob: .ai-factory/patches/*.md
104
116
  ```
105
117
 
118
+ Cursor file:
119
+
120
+ ```
121
+ .ai-factory/evolutions/patch-cursor.json
122
+ ```
123
+
124
+ Recommended shape:
125
+
126
+ ```json
127
+ {
128
+ "last_processed_patch": "YYYY-MM-DD-HH.mm.md",
129
+ "updated_at": "YYYY-MM-DD HH:mm"
130
+ }
131
+ ```
132
+
133
+ Processing rules:
134
+
135
+ 1. Glob patch files and sort by filename ascending (timestamp format is lexical-friendly).
136
+ 2. If no cursor file exists โ†’ first run: read all patches.
137
+ 3. If cursor file exists and referenced patch is present โ†’ read only patches with filename `>` `last_processed_patch`.
138
+ 4. If cursor file exists but referenced patch is missing (deleted/renamed) โ†’ emit `WARN [evolve]` and do a full rescan.
139
+ 5. Historical edits/deletes for patches older than cursor are not reliably detectable without a saved baseline (snapshot/hash manifest). Do NOT emit this warning by default.
140
+ 6. Emit `WARN [evolve]` for historical drift only when a reliable baseline exists and drift is actually detected.
141
+ 7. Full rescan procedure: delete `.ai-factory/evolutions/patch-cursor.json`, then run `/aif-evolve` again.
142
+ 8. **Do not advance cursor in Step 1.1.** Cursor is updated only after successful apply/log write in Step 7.3.
143
+
144
+ **Overlap window (anti-miss guard):**
145
+
146
+ LLMs may miss prevention points on a single pass. To reduce the chance of "permanently skipping" a patch when running incrementally:
147
+
148
+ 9. When running in incremental mode (cursor exists and referenced patch is present), ALSO read the newest 5 patches by filename (tail-5 of the sorted patch list), then de-duplicate by filename.
149
+ 10. Track these separately in your own notes:
150
+ - "New patches" = patches with filename `>` `last_processed_patch`
151
+ - "Overlap patches" = tail-5 patches
152
+ - "Processed patches" = union(New, Overlap)
153
+ 11. Cursor updates in Step 7.3 MUST be based on "New patches" only (never advance cursor when only overlap patches were processed).
154
+
106
155
  Read every patch. For each one, extract:
107
156
  - **Problem categories** (null-check, async, validation, types, API, DB, etc.)
108
157
  - **Root cause patterns** (what classes of mistake were made)
@@ -112,7 +161,7 @@ Read every patch. For each one, extract:
112
161
  - **Tags**
113
162
 
114
163
  **Build a Prevention Point Registry** โ€” a flat list of ALL extracted prevention points across
115
- all patches. This registry is the primary input for Step 5 gap analysis.
164
+ the processed patch set in this run. This registry is the primary input for Step 5 gap analysis.
116
165
 
117
166
  ```
118
167
  | # | Patch | Prevention Point (specific action) | Target Skill(s) |
@@ -126,6 +175,8 @@ all patches. This registry is the primary input for Step 5 gap analysis.
126
175
  If a prevention point targets 2 skills, it appears once but with both skills listed โ€”
127
176
  and EACH skill must be checked independently in Step 5.
128
177
 
178
+ When the run is incremental, this registry reflects the processed patch set for this run (new + overlap). Use full rescan when you need full historical backfill.
179
+
129
180
  **1.2: Aggregate patterns**
130
181
 
131
182
  Group patches by tags and categories. Identify:
@@ -291,6 +342,8 @@ of the existing rule against each prevention point individually.
291
342
  **Verification:** After completing the registry scan, count: total prevention points,
292
343
  covered, uncovered. If uncovered > 0 โ€” these are gaps for Step 6.
293
344
 
345
+ Note: in incremental mode, counts represent this run's processed patch set. For full historical recount, run a full rescan.
346
+
294
347
  **5.2: Tech-stack gaps**
295
348
 
296
349
  Compare project tech stack against skill instructions:
@@ -376,7 +429,10 @@ Based on:
376
429
 
377
430
  **After presenting the full report, use `AskUserQuestion` to collect decisions:**
378
431
 
379
- For improvements โ€” ask: Yes apply all / Let me pick / No just save report
432
+ For improvements โ€” ask:
433
+ - Yes, apply all improvements
434
+ - Let me pick
435
+ - No, just save report (no changes applied)
380
436
 
381
437
  **If user chooses "Let me pick":** present improvements in batches of up to 4
382
438
  per `AskUserQuestion` call (same approach as Step 4 stale rules). For each
@@ -440,6 +496,27 @@ Create `.ai-factory/evolutions/YYYY-MM-DD-HH.mm.md`:
440
496
  mkdir -p .ai-factory/evolutions
441
497
  ```
442
498
 
499
+ After saving the evolution log, update cursor state:
500
+
501
+ Definitions:
502
+ - "New patches processed" = patches with filename `>` `last_processed_patch`.
503
+ - If no cursor exists (first run): "New patches" is the full patch list.
504
+ - Overlap patches do NOT count as "New patches".
505
+ - "Improvements applied" = at least one approved improvement was written to disk
506
+ (skill-context updated and/or custom skill SKILL.md edited).
507
+
508
+ Cursor update rules:
509
+
510
+ 1. If no new patches were processed, keep cursor unchanged.
511
+ 2. If new patches were processed:
512
+ - If improvements were applied: advance the cursor to the newest "New patch" filename.
513
+ - If no improvements were applied (e.g., user chose "No, just save report" or skipped all):
514
+ - Do NOT advance cursor by default.
515
+ - Ask the user whether to advance cursor anyway.
516
+ - Recommended: keep cursor unchanged to allow reruns (LLMs may miss prevention points).
517
+ - If the user explicitly chooses to advance anyway, write the cursor as usual.
518
+ 3. If execution fails before changes are finalized, do not advance cursor.
519
+
443
520
  ```markdown
444
521
  # Evolution: YYYY-MM-DD HH:mm
445
522
 
@@ -481,7 +558,7 @@ Improvements applied: Y
481
558
 
482
559
  ### Context Cleanup
483
560
 
484
- After completing evolution, suggest `/clear` or `/compact` โ€” context is heavy after reading all patches and skills.
561
+ After completing evolution, suggest `/clear` or `/compact` โ€” context is heavy after patch analysis and skill processing.
485
562
 
486
563
  ## Rules
487
564
 
@@ -499,7 +576,7 @@ After completing evolution, suggest `/clear` or `/compact` โ€” context is heavy
499
576
  Merges in Step 7 (combining narrow rules into a broader one) are allowed as long
500
577
  as all prevention points are preserved in the merged rule.
501
578
  12. **Installed only** โ€” do not evolve skills not installed in the project
502
- 13. **Ownership boundary** โ€” this command owns `.ai-factory/evolutions/*.md` and `.ai-factory/skill-context/*`; treat roadmap/rules/research/plan artifacts as read-only context unless explicitly asked
579
+ 13. **Ownership boundary** โ€” this command owns `.ai-factory/evolutions/*.md`, `.ai-factory/evolutions/patch-cursor.json`, and `.ai-factory/skill-context/*`; treat roadmap/rules/research/plan artifacts as read-only context unless explicitly asked
503
580
 
504
581
  ## Example
505
582
 
@@ -19,7 +19,8 @@ Fix a specific bug or problem in the codebase. Supports two modes: immediate fix
19
19
  **If the file EXISTS:**
20
20
  - Read `.ai-factory/FIX_PLAN.md`
21
21
  - Inform the user: "Found existing fix plan. Executing fix based on the plan."
22
- - **Skip Steps 0.1 through 1** โ€” go directly to **Step 2: Investigate the Codebase**, using the plan as your guide
22
+ - Skip **Step 1** (problem intake/mode choice), but still run **Step 0.1** to load context
23
+ - Then continue to **Step 2: Investigate the Codebase**, using the plan as your guide
23
24
  - Follow each step of the plan sequentially
24
25
  - After the fix is fully applied and verified, **delete** `.ai-factory/FIX_PLAN.md`:
25
26
  ```bash
@@ -41,13 +42,6 @@ Fix a specific bug or problem in the codebase. Supports two modes: immediate fix
41
42
  - Project architecture
42
43
  - Coding conventions
43
44
 
44
- **Read all patches from `.ai-factory/patches/`** if the directory exists:
45
- - Use `Glob` to find all `*.md` files in `.ai-factory/patches/`
46
- - Read each patch file to learn from past fixes
47
- - Pay attention to recurring patterns, root causes, and solutions
48
- - If the current problem resembles a past patch โ€” apply the same approach or avoid the same mistakes
49
- - This is your accumulated experience. Use it.
50
-
51
45
  **Read `.ai-factory/skill-context/aif-fix/SKILL.md`** โ€” MANDATORY if the file exists.
52
46
 
53
47
  This file contains project-specific rules accumulated by `/aif-evolve` from patches,
@@ -68,6 +62,16 @@ codebase conventions, and tech-stack analysis. These rules are tailored to the c
68
62
  **Enforcement:** After generating any output artifact, verify it against all skill-context rules.
69
63
  If any rule is violated โ€” fix the output before presenting it to the user.
70
64
 
65
+ **Patch fallback (limited, only when skill-context is missing):**
66
+
67
+ - If `.ai-factory/skill-context/aif-fix/SKILL.md` does not exist and `.ai-factory/patches/` exists:
68
+ - Use `Glob` to find `*.md` files in `.ai-factory/patches/`
69
+ - Sort patch filenames ascending (lexical), then select the last **10** (or fewer if less exist)
70
+ - Read those selected patch files only
71
+ - Prioritize recurring **Root Cause** and **Prevention** patterns
72
+ - If skill-context exists, do **not** read all patches by default.
73
+ - Optionally inspect a small, targeted subset of recent patches when tags/files clearly match the current bug.
74
+
71
75
  ### Step 1: Understand the Problem & Choose Mode
72
76
 
73
77
  From `$ARGUMENTS`, identify:
@@ -131,18 +131,6 @@ Based on choice:
131
131
  - **ALWAYS follow these rules** when implementing โ€” they override general patterns
132
132
  - Rules are short, actionable โ€” treat each as a hard requirement
133
133
 
134
- **Read all patches from `.ai-factory/patches/`** if the directory exists:
135
- - Use `Glob` to find all `*.md` files in `.ai-factory/patches/`
136
- - Read each patch to learn from past fixes and mistakes
137
- - Apply lessons learned: avoid patterns that caused bugs, use patterns that prevented them
138
- - Pay attention to **Root Cause** and **Prevention** sections โ€” they tell you what NOT to do
139
-
140
- **Use this context when implementing:**
141
- - Follow the specified tech stack
142
- - Use correct import patterns and conventions
143
- - Apply proper error handling and logging as specified
144
- - **Avoid pitfalls documented in patches** โ€” don't repeat past mistakes
145
-
146
134
  **Read `.ai-factory/skill-context/aif-implement/SKILL.md`** โ€” MANDATORY if the file exists.
147
135
 
148
136
  This file contains project-specific rules accumulated by `/aif-evolve` from patches,
@@ -163,6 +151,22 @@ codebase conventions, and tech-stack analysis. These rules are tailored to the c
163
151
  **Enforcement:** After generating any output artifact, verify it against all skill-context rules.
164
152
  If any rule is violated โ€” fix the output before presenting it to the user.
165
153
 
154
+ **Patch fallback (limited, only when skill-context is missing):**
155
+
156
+ - If `.ai-factory/skill-context/aif-implement/SKILL.md` does not exist and `.ai-factory/patches/` exists:
157
+ - Use `Glob` to find `*.md` files in `.ai-factory/patches/`
158
+ - Sort patch filenames ascending (lexical), then select the last **10** (or fewer if less exist)
159
+ - Read those selected patch files only
160
+ - Prioritize **Root Cause** and **Prevention** sections
161
+ - If skill-context exists, do **not** read all patches by default.
162
+ - Optionally read a few targeted recent patches only when a task clearly matches a known failure pattern.
163
+
164
+ **Use this context when implementing:**
165
+ - Follow the specified tech stack
166
+ - Use correct import patterns and conventions
167
+ - Apply proper error handling and logging as specified
168
+ - Avoid pitfalls documented in skill-context rules and relevant fallback patches
169
+
166
170
  ### Step 0.1: Find Plan File
167
171
 
168
172
  **If `$ARGUMENTS` contains `@<path>`:**
@@ -108,16 +108,17 @@ Read `.ai-factory/DESCRIPTION.md` if it exists:
108
108
  - Conventions
109
109
  - Non-functional requirements
110
110
 
111
- **1.3: Read patches (past mistakes)**
111
+ **1.3: Read patches (limited fallback)**
112
112
 
113
- ```
114
- Glob: .ai-factory/patches/*.md
115
- ```
113
+ Use patches as fallback context, not the default source:
116
114
 
117
- If patches exist, read them to understand:
118
- - What mistakes were made before
119
- - What patterns to avoid
120
- - What the plan should account for
115
+ - If `.ai-factory/skill-context/aif-improve/SKILL.md` does not exist and `.ai-factory/patches/` exists:
116
+ - `Glob: .ai-factory/patches/*.md`
117
+ - Sort patch filenames ascending (lexical), then select the last **10** (or fewer if less exist)
118
+ - Read those selected patch files only
119
+ - Focus on reusable Prevention/Root Cause patterns that affect planning quality
120
+ - If skill-context exists, do **not** read all patches by default.
121
+ - Optionally inspect a small targeted subset when refining around a known recurring issue.
121
122
 
122
123
  **Read `.ai-factory/skill-context/aif-improve/SKILL.md`** โ€” MANDATORY if the file exists.
123
124
 
@@ -227,13 +227,29 @@ Copy context files so the worktree has full AI context:
227
227
  ```bash
228
228
  WORKTREE="../${DIRNAME}-<branch-name-with-hyphens>"
229
229
 
230
+ # Ensure AI Factory directories exist before copy operations
231
+ mkdir -p "${WORKTREE}/.ai-factory"
232
+ mkdir -p "${WORKTREE}/.ai-factory/plans"
233
+ mkdir -p "${WORKTREE}/.ai-factory/patches"
234
+ mkdir -p "${WORKTREE}/.ai-factory/evolutions"
235
+
230
236
  # Project context
231
237
  cp .ai-factory/DESCRIPTION.md "${WORKTREE}/.ai-factory/DESCRIPTION.md" 2>/dev/null
232
238
  cp .ai-factory/ARCHITECTURE.md "${WORKTREE}/.ai-factory/ARCHITECTURE.md" 2>/dev/null
233
239
  cp .ai-factory/RESEARCH.md "${WORKTREE}/.ai-factory/RESEARCH.md" 2>/dev/null
234
240
 
235
- # Past lessons / patches
236
- cp -r .ai-factory/patches/ "${WORKTREE}/.ai-factory/patches/" 2>/dev/null
241
+ # Skill-context (primary learning context)
242
+ cp -r .ai-factory/skill-context/ "${WORKTREE}/.ai-factory/skill-context/" 2>/dev/null
243
+
244
+ # Note: do not copy patch-cursor.json into a truncated patch set.
245
+ # The parallel worktree copies only a limited number of patches for fallback context.
246
+ # Copying the evolve cursor without the full patch history can cause /aif-evolve to skip patches
247
+ # or trigger a partial rescan.
248
+
249
+ # Limited patch fallback: copy only recent patches (latest 10 by filename)
250
+ for patch in $(ls -1 .ai-factory/patches/*.md 2>/dev/null | sort | tail -n 10); do
251
+ cp "${patch}" "${WORKTREE}/.ai-factory/patches/"
252
+ done
237
253
 
238
254
  # Agent skills + settings
239
255
  cp -r .claude/ "${WORKTREE}/.claude/" 2>/dev/null
@@ -247,7 +263,6 @@ fi
247
263
  Create changes directory and switch:
248
264
 
249
265
  ```bash
250
- mkdir -p "${WORKTREE}/.ai-factory/plans"
251
266
  cd "${WORKTREE}"
252
267
  ```
253
268
 
@@ -7,21 +7,21 @@ Canonical contract for AI Factory workflow commands. This file defines:
7
7
 
8
8
  ## Command-to-Artifact Matrix
9
9
 
10
- | Command | Primary write ownership | Read-only context | Approved exceptions |
11
- |--------------------|------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
12
- | `aif` | `.ai-factory/DESCRIPTION.md`, `AGENTS.md` (setup map), skill installation and MCP config | Existing project files and context artifacts | May invoke `aif-architecture` to create/update `.ai-factory/ARCHITECTURE.md` during setup |
13
- | `aif-architecture` | `.ai-factory/ARCHITECTURE.md` | `.ai-factory/DESCRIPTION.md` | May update `DESCRIPTION.md` architecture pointer and `AGENTS.md` context table |
14
- | `aif-roadmap` | `.ai-factory/ROADMAP.md` | `.ai-factory/DESCRIPTION.md`, `.ai-factory/ARCHITECTURE.md` | `aif-implement` may mark completed milestones after implementation |
15
- | `aif-rules` | `.ai-factory/RULES.md` | Existing project context | None |
16
- | `aif-plan` | `.ai-factory/PLAN.md`, `.ai-factory/plans/<branch>.md` | `.ai-factory/DESCRIPTION.md`, `.ai-factory/ARCHITECTURE.md`, `.ai-factory/RESEARCH.md` | `aif-improve` may refine existing plan files |
17
- | `aif-implement` | Plan progress updates (checkboxes/task status) | `.ai-factory/RULES.md`, `.ai-factory/ARCHITECTURE.md`, `.ai-factory/DESCRIPTION.md`, patches | May update `.ai-factory/DESCRIPTION.md` and `.ai-factory/ARCHITECTURE.md` only when stack/structure changed; may update `.ai-factory/ROADMAP.md` milestone completion |
18
- | `aif-fix` | `.ai-factory/FIX_PLAN.md` (plan mode), `.ai-factory/patches/*.md` | `.ai-factory/DESCRIPTION.md`, existing patches | None (context artifacts remain read-only by default) |
19
- | `aif-evolve` | `.ai-factory/evolutions/*.md`, `.ai-factory/skill-context/*` | `.ai-factory/DESCRIPTION.md`, `.ai-factory/patches/*.md` | None |
20
- | `aif-docs` | `README.md`, `docs/*`, `AGENTS.md` documentation section | Project/context files for factual docs | None |
21
- | `aif-explore` | `.ai-factory/RESEARCH.md` only | All context and codebase files for analysis | None |
22
- | `aif-commit` | Git commit object/message only | Context artifacts are read-only gates | No context artifact writes by default |
23
- | `aif-review` | Review output/comments only | Context artifacts are read-only gates | No context artifact writes by default unless user explicitly asks |
24
- | `aif-verify` | Verification report output | Context artifacts are read-only gates | May move to fix flow after user confirmation; no default context artifact writes |
10
+ | Command | Primary write ownership | Read-only context | Approved exceptions |
11
+ |--------------------|----------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
12
+ | `aif` | `.ai-factory/DESCRIPTION.md`, `AGENTS.md` (setup map), skill installation and MCP config | Existing project files and context artifacts | May invoke `aif-architecture` to create/update `.ai-factory/ARCHITECTURE.md` during setup |
13
+ | `aif-architecture` | `.ai-factory/ARCHITECTURE.md` | `.ai-factory/DESCRIPTION.md` | May update `DESCRIPTION.md` architecture pointer and `AGENTS.md` context table |
14
+ | `aif-roadmap` | `.ai-factory/ROADMAP.md` | `.ai-factory/DESCRIPTION.md`, `.ai-factory/ARCHITECTURE.md` | `aif-implement` may mark completed milestones after implementation |
15
+ | `aif-rules` | `.ai-factory/RULES.md` | Existing project context | None |
16
+ | `aif-plan` | `.ai-factory/PLAN.md`, `.ai-factory/plans/<branch>.md` | `.ai-factory/DESCRIPTION.md`, `.ai-factory/ARCHITECTURE.md`, `.ai-factory/RESEARCH.md` | `aif-improve` may refine existing plan files |
17
+ | `aif-implement` | Plan progress updates (checkboxes/task status) | `.ai-factory/RULES.md`, `.ai-factory/ARCHITECTURE.md`, `.ai-factory/DESCRIPTION.md`, `.ai-factory/skill-context/*`, limited recent patches (fallback) | May update `.ai-factory/DESCRIPTION.md` and `.ai-factory/ARCHITECTURE.md` only when stack/structure changed; may update `.ai-factory/ROADMAP.md` milestone completion |
18
+ | `aif-fix` | `.ai-factory/FIX_PLAN.md` (plan mode), `.ai-factory/patches/*.md` | `.ai-factory/DESCRIPTION.md`, `.ai-factory/skill-context/*`, limited recent patches (fallback) | None (context artifacts remain read-only by default) |
19
+ | `aif-evolve` | `.ai-factory/evolutions/*.md`, `.ai-factory/evolutions/patch-cursor.json`, `.ai-factory/skill-context/*` | `.ai-factory/DESCRIPTION.md`, `.ai-factory/patches/*.md` (processed incrementally) | None |
20
+ | `aif-docs` | `README.md`, `docs/*`, `AGENTS.md` documentation section | Project/context files for factual docs | None |
21
+ | `aif-explore` | `.ai-factory/RESEARCH.md` only | All context and codebase files for analysis | None |
22
+ | `aif-commit` | Git commit object/message only | Context artifacts are read-only gates | No context artifact writes by default |
23
+ | `aif-review` | Review output/comments only | Context artifacts are read-only gates | No context artifact writes by default unless user explicitly asks |
24
+ | `aif-verify` | Verification report output | Context artifacts are read-only gates | May move to fix flow after user confirmation; no default context artifact writes |
25
25
 
26
26
  ## Artifact Update Policy (Recommended)
27
27