cortex-tms 2.4.1 → 2.5.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
@@ -1,6 +1,6 @@
1
1
  # Cortex TMS 🧠
2
2
 
3
- **The Universal AI-Optimized Project Boilerplate (v2.4.1)**
3
+ **The Universal AI-Optimized Project Boilerplate (v2.5.0)**
4
4
 
5
5
  Cortex TMS is an **interactive operating system for AI-assisted development**. It's not just documentation—it's an **activation layer** that turns your repository into a machine-legible project constitution with intelligent tooling for version management and AI collaboration.
6
6
 
@@ -47,7 +47,25 @@ Traditional repos drown AI agents in thousands of lines of historical tasks and
47
47
 
48
48
  ## 🛠️ CLI Commands
49
49
 
50
- Cortex TMS provides 5 production-ready commands:
50
+ Cortex TMS provides 6 production-ready commands:
51
+
52
+ ### `cortex-tms tutorial`
53
+ Interactive walkthrough teaching the "Cortex Way" - perfect for first-time users.
54
+
55
+ ```bash
56
+ cortex-tms tutorial # Start the guided tour
57
+ ```
58
+
59
+ **What You'll Learn**:
60
+ - Project Dashboard: Using `status` to see your cockpit
61
+ - AI Activation: Using `prompt` to activate project-aware AI agents
62
+ - Zero-Drift Governance: Automated version sync with `docs:sync`
63
+ - Health Checks: Understanding `validate` and the Archive Protocol
64
+ - Safe Migration: Fearless template upgrades with backup/rollback
65
+
66
+ **Navigation**: Use arrow keys and Enter to progress, select Exit to quit anytime
67
+
68
+ ---
51
69
 
52
70
  ### `cortex-tms init`
53
71
  Initialize TMS structure in your project with interactive scope selection.
@@ -75,11 +93,14 @@ cortex-tms status # Visual dashboard with progress bars
75
93
  ```
76
94
 
77
95
  ### `cortex-tms migrate`
78
- Intelligent version management—detect outdated templates and custom modifications.
96
+ Intelligent version management—detect outdated templates and automatically upgrade with safety backups.
79
97
 
80
98
  ```bash
81
- cortex-tms migrate # Analyze version status
82
- cortex-tms migrate --dry-run # Preview migration plan
99
+ cortex-tms migrate # Analyze version status
100
+ cortex-tms migrate --apply # Auto-upgrade OUTDATED files (creates backup)
101
+ cortex-tms migrate --apply --force # Upgrade ALL files including customized
102
+ cortex-tms migrate --rollback # Restore from backup (interactive selection)
103
+ cortex-tms migrate --dry-run # Preview migration plan
83
104
  ```
84
105
 
85
106
  **Status Categories**:
@@ -88,6 +109,12 @@ cortex-tms migrate --dry-run # Preview migration plan
88
109
  - `CUSTOMIZED`: Manual review needed (has user changes)
89
110
  - `MISSING`: Optional file not installed
90
111
 
112
+ **Safety Features**:
113
+ - Automatic backups in `.cortex/backups/` before any changes
114
+ - Timestamped snapshots with manifest files
115
+ - One-click rollback with interactive backup selection
116
+ - Confirmation prompts prevent accidental overwrites
117
+
91
118
  ### `cortex-tms prompt`
92
119
  Access project-aware AI prompts from the Essential 7 library.
93
120
 
@@ -318,9 +345,9 @@ MIT
318
345
 
319
346
  ## Status
320
347
 
321
- **Version**: 2.4.1 (Stable / Production Ready)
348
+ **Version**: 2.5.0 (Stable / Production Ready)
322
349
  **Last Updated**: 2026-01-14
323
350
  **Current Sprint**: v2.5 Planning - "Guidance & Growth"
324
351
  **Completed Sprints**: v2.1, v2.2, v2.3, v2.4 (see `docs/archive/`)
325
352
 
326
- <!-- @cortex-tms-version 2.4.1 -->
353
+ <!-- @cortex-tms-version 2.5.0 -->
package/bin/cortex-tms.js CHANGED
File without changes
package/dist/cli.js CHANGED
@@ -21,11 +21,13 @@ import { validateCommand } from './commands/validate.js';
21
21
  import { statusCommand } from './commands/status.js';
22
22
  import { migrateCommand } from './commands/migrate.js';
23
23
  import { promptCommand } from './commands/prompt.js';
24
+ import { tutorialCommand } from './commands/tutorial.js';
24
25
  program.addCommand(initCommand);
25
26
  program.addCommand(validateCommand);
26
27
  program.addCommand(statusCommand);
27
28
  program.addCommand(migrateCommand);
28
29
  program.addCommand(promptCommand);
30
+ program.addCommand(tutorialCommand);
29
31
  program.on('command:*', () => {
30
32
  console.error(chalk.red('\n❌ Invalid command:'), chalk.bold(program.args.join(' ')));
31
33
  console.log(chalk.gray('\nRun'), chalk.cyan('cortex-tms --help'), chalk.gray('to see available commands.'));
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AASA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAGtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAG9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CACV,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;IACzB,IAAI;IACJ,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CACzE;KACA,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,4BAA4B,CAAC;KAC3E,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAGlC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;IAC3B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,EACjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACnC,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC5G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAGH,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAG5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AASA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAGtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAG9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CACV,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;IACzB,IAAI;IACJ,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CACzE;KACA,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,4BAA4B,CAAC;KAC3E,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC,CAAC;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AAGpC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;IAC3B,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,EACjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CACnC,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC5G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAGH,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAG5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;AAK/E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,oBAAoB,IAAI,OAAO,CAa9C;AAKD,eAAO,MAAM,cAAc,SAAyB,CAAC"}
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;AAK/E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAgB,oBAAoB,IAAI,OAAO,CAe9C;AAKD,eAAO,MAAM,cAAc,SAAyB,CAAC"}
@@ -1,16 +1,20 @@
1
1
  import { Command } from 'commander';
2
2
  import chalk from 'chalk';
3
3
  import ora from 'ora';
4
+ import inquirer from 'inquirer';
4
5
  import { join } from 'path';
5
6
  import { existsSync } from 'fs';
6
7
  import { loadConfig, getScopePreset } from '../utils/config.js';
7
8
  import { getPackageVersion, extractVersion, getTemplatesDir } from '../utils/templates.js';
9
+ import { createBackup, listBackups, restoreBackup, formatBackupSize, getBackupSize } from '../utils/backup.js';
8
10
  import fs from 'fs-extra';
9
11
  export function createMigrateCommand() {
10
12
  const migrateCommand = new Command('migrate');
11
13
  migrateCommand
12
14
  .description('Upgrade TMS files to the current template version')
13
- .option('-f, --force', 'Force upgrade even for customized files')
15
+ .option('-a, --apply', 'Apply automatic upgrades (creates backup first)')
16
+ .option('-r, --rollback', 'Restore files from a previous backup')
17
+ .option('-f, --force', 'Force upgrade even for customized files (requires --apply)')
14
18
  .option('-v, --verbose', 'Show detailed output')
15
19
  .option('-d, --dry-run', 'Preview changes without applying them')
16
20
  .action(async (options) => {
@@ -21,7 +25,11 @@ export function createMigrateCommand() {
21
25
  export const migrateCommand = createMigrateCommand();
22
26
  async function runMigrate(options) {
23
27
  const cwd = process.cwd();
24
- const { force: _force = false, verbose: _verbose = false, dryRun = false } = options;
28
+ const { apply = false, rollback = false, force = false, verbose: _verbose = false, dryRun = false } = options;
29
+ if (rollback) {
30
+ await runRollback(cwd);
31
+ return;
32
+ }
25
33
  console.log(chalk.bold.cyan('\n🔄 Cortex TMS Migration\n'));
26
34
  if (dryRun) {
27
35
  console.log(chalk.yellow('🔍 DRY RUN MODE: No files will be modified.\n'));
@@ -72,12 +80,150 @@ async function runMigrate(options) {
72
80
  console.log(chalk.gray(` ℹ ${missing.length} file(s) not installed (optional)`));
73
81
  }
74
82
  if (dryRun) {
75
- printNextSteps(outdated.length, customized.length);
83
+ printNextSteps(outdated.length, customized.length, apply);
76
84
  return;
77
85
  }
78
- printNextSteps(outdated.length, customized.length);
86
+ if (apply) {
87
+ await applyMigration(cwd, migrations, targetVersion, force);
88
+ }
89
+ else {
90
+ printNextSteps(outdated.length, customized.length, apply);
91
+ }
79
92
  }
80
- function printNextSteps(outdatedCount, customizedCount) {
93
+ async function applyMigration(projectRoot, migrations, targetVersion, force) {
94
+ const outdated = migrations.filter((m) => m.status === 'OUTDATED');
95
+ const customized = migrations.filter((m) => m.status === 'CUSTOMIZED');
96
+ const filesToUpgrade = force ? [...outdated, ...customized] : outdated;
97
+ if (filesToUpgrade.length === 0) {
98
+ console.log(chalk.yellow('\n⚠️ No files to upgrade.\n'));
99
+ return;
100
+ }
101
+ console.log(chalk.bold('\n🔄 Files to be upgraded:\n'));
102
+ filesToUpgrade.forEach((file) => {
103
+ const icon = file.status === 'CUSTOMIZED' ? '⚠️ ' : '✓';
104
+ console.log(chalk.blue(` ${icon} ${file.path}`));
105
+ });
106
+ if (!force && customized.length > 0) {
107
+ console.log(chalk.yellow(`\n⚠️ ${customized.length} CUSTOMIZED file(s) skipped. Use --force to upgrade them.\n`));
108
+ }
109
+ console.log(chalk.bold('\n💾 Creating backup...\n'));
110
+ const spinner = ora('Backing up files...').start();
111
+ const filePaths = filesToUpgrade.map((m) => join(projectRoot, m.path));
112
+ const backupResult = await createBackup(projectRoot, filePaths, `migrate to v${targetVersion}`, targetVersion);
113
+ if (!backupResult.success) {
114
+ spinner.fail('Backup failed');
115
+ console.log(chalk.red('\n❌ Error:'), backupResult.error);
116
+ console.log(chalk.gray('Migration aborted to prevent data loss.\n'));
117
+ process.exit(1);
118
+ }
119
+ spinner.succeed(`Backup created: ${chalk.cyan(backupResult.backupPath)}`);
120
+ console.log(chalk.gray(` ${backupResult.filesBackedUp} file(s) backed up safely\n`));
121
+ console.log(chalk.bold('🚀 Applying upgrades...\n'));
122
+ const upgradeSpinner = ora('Updating files...').start();
123
+ let upgradedCount = 0;
124
+ const templatesDir = getTemplatesDir();
125
+ for (const migration of filesToUpgrade) {
126
+ const filePath = join(projectRoot, migration.path);
127
+ const templatePath = join(templatesDir, migration.path);
128
+ if (!existsSync(templatePath)) {
129
+ continue;
130
+ }
131
+ try {
132
+ await fs.copyFile(templatePath, filePath);
133
+ upgradedCount++;
134
+ }
135
+ catch (error) {
136
+ upgradeSpinner.warn(`Failed to upgrade ${migration.path}`);
137
+ console.log(chalk.yellow(` ${error instanceof Error ? error.message : 'Unknown error'}`));
138
+ }
139
+ }
140
+ upgradeSpinner.succeed(`Upgraded ${upgradedCount} file(s) to v${targetVersion}`);
141
+ console.log(chalk.green.bold('\n✨ Migration complete!\n'));
142
+ console.log(chalk.gray('💡 Tip: Review changes with:'));
143
+ console.log(chalk.cyan(' git diff\n'));
144
+ console.log(chalk.gray('💡 To rollback, run:'));
145
+ console.log(chalk.cyan(' cortex-tms migrate --rollback\n'));
146
+ }
147
+ async function runRollback(projectRoot) {
148
+ console.log(chalk.bold.cyan('\n⏪ Cortex TMS Rollback\n'));
149
+ const spinner = ora('Searching for backups...').start();
150
+ const backups = await listBackups(projectRoot);
151
+ if (backups.length === 0) {
152
+ spinner.fail('No backups found');
153
+ console.log(chalk.yellow('\n⚠️ No backup snapshots available.'));
154
+ console.log(chalk.gray('Backups are created automatically when using:'));
155
+ console.log(chalk.cyan(' cortex-tms migrate --apply\n'));
156
+ return;
157
+ }
158
+ spinner.succeed(`Found ${backups.length} backup(s)`);
159
+ const choices = await Promise.all(backups.slice(0, 5).map(async (backup) => {
160
+ const backupPath = join(projectRoot, '.cortex', 'backups', backup.timestamp);
161
+ const size = await getBackupSize(backupPath);
162
+ const formattedSize = formatBackupSize(size);
163
+ const fileCount = backup.files.length;
164
+ return {
165
+ name: `${chalk.cyan(backup.timestamp)} - ${chalk.gray(`v${backup.version}`)} - ${chalk.blue(`${fileCount} file(s)`)} - ${chalk.gray(formattedSize)}`,
166
+ value: backup.timestamp,
167
+ short: backup.timestamp,
168
+ };
169
+ }));
170
+ choices.push({
171
+ name: chalk.gray('Cancel'),
172
+ value: 'cancel',
173
+ short: 'Cancel',
174
+ });
175
+ const { selectedBackup } = await inquirer.prompt([
176
+ {
177
+ type: 'list',
178
+ name: 'selectedBackup',
179
+ message: 'Select a backup to restore:',
180
+ choices,
181
+ pageSize: 10,
182
+ },
183
+ ]);
184
+ if (selectedBackup === 'cancel') {
185
+ console.log(chalk.gray('\n✓ Rollback cancelled.\n'));
186
+ return;
187
+ }
188
+ const selectedManifest = backups.find((b) => b.timestamp === selectedBackup);
189
+ if (!selectedManifest) {
190
+ console.log(chalk.red('\n❌ Error:'), 'Backup not found.\n');
191
+ return;
192
+ }
193
+ console.log(chalk.bold('\n📋 Files to be restored:\n'));
194
+ selectedManifest.files.forEach((file) => {
195
+ console.log(chalk.blue(` ✓ ${file.relativePath}`));
196
+ });
197
+ const { confirmed } = await inquirer.prompt([
198
+ {
199
+ type: 'confirm',
200
+ name: 'confirmed',
201
+ message: chalk.yellow('This will overwrite current files. Continue?'),
202
+ default: false,
203
+ },
204
+ ]);
205
+ if (!confirmed) {
206
+ console.log(chalk.gray('\n✓ Rollback cancelled.\n'));
207
+ return;
208
+ }
209
+ console.log(chalk.bold('\n⏪ Restoring backup...\n'));
210
+ const restoreSpinner = ora('Restoring files...').start();
211
+ try {
212
+ const backupPath = join(projectRoot, '.cortex', 'backups', selectedBackup);
213
+ const restoredCount = await restoreBackup(backupPath);
214
+ restoreSpinner.succeed(`Restored ${restoredCount} file(s) from backup`);
215
+ console.log(chalk.green.bold('\n✨ Rollback complete!\n'));
216
+ console.log(chalk.gray('💡 Tip: Review restored files with:'));
217
+ console.log(chalk.cyan(' git diff\n'));
218
+ }
219
+ catch (error) {
220
+ restoreSpinner.fail('Rollback failed');
221
+ console.log(chalk.red('\n❌ Error:'), error instanceof Error ? error.message : 'Unknown error');
222
+ console.log(chalk.gray('Files may be partially restored.\n'));
223
+ process.exit(1);
224
+ }
225
+ }
226
+ function printNextSteps(outdatedCount, customizedCount, applyAvailable) {
81
227
  console.log(chalk.bold('\n📋 Next Steps:\n'));
82
228
  if (outdatedCount > 0) {
83
229
  console.log(chalk.blue(' 1. Review OUTDATED files marked above'));
@@ -89,8 +235,20 @@ function printNextSteps(outdatedCount, customizedCount) {
89
235
  }
90
236
  console.log(chalk.gray(` ${outdatedCount > 0 || customizedCount > 0 ? (outdatedCount > 0 && customizedCount > 0 ? '3' : '2') : '1'}. Check the latest templates at:`));
91
237
  console.log(chalk.cyan(' https://github.com/cortex-tms/cortex-tms/tree/main/templates'));
92
- console.log(chalk.bold.cyan('\n🚀 Coming in v2.5:'), chalk.gray('Automatic upgrades with backup/rollback'));
93
- console.log(chalk.gray(' For now, please manually review and update files as needed.\n'));
238
+ if (applyAvailable && (outdatedCount > 0 || customizedCount > 0)) {
239
+ console.log(chalk.bold.cyan('\n🚀 Automatic Upgrade Available:\n'));
240
+ if (outdatedCount > 0) {
241
+ console.log(chalk.blue(' cortex-tms migrate --apply'));
242
+ console.log(chalk.gray(' → Safely upgrade OUTDATED files (creates backup)\n'));
243
+ }
244
+ if (customizedCount > 0) {
245
+ console.log(chalk.yellow(' cortex-tms migrate --apply --force'));
246
+ console.log(chalk.gray(' → Upgrade ALL files including customized (use with caution)\n'));
247
+ }
248
+ }
249
+ else {
250
+ console.log(chalk.gray(' Or manually review and update files as needed.\n'));
251
+ }
94
252
  }
95
253
  async function analyzeFile(filePath, targetVersion) {
96
254
  const fileName = filePath.split('/').pop() || filePath;
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ export declare function createTutorialCommand(): Command;
3
+ export declare const tutorialCommand: Command;
4
+ //# sourceMappingURL=tutorial.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tutorial.d.ts","sourceRoot":"","sources":["../../src/commands/tutorial.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,wBAAgB,qBAAqB,IAAI,OAAO,CAU/C;AAKD,eAAO,MAAM,eAAe,SAA0B,CAAC"}
@@ -0,0 +1,203 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import inquirer from 'inquirer';
4
+ export function createTutorialCommand() {
5
+ const tutorialCommand = new Command('tutorial');
6
+ tutorialCommand
7
+ .description('Interactive walkthrough of Cortex TMS features')
8
+ .action(async () => {
9
+ await runTutorial();
10
+ });
11
+ return tutorialCommand;
12
+ }
13
+ export const tutorialCommand = createTutorialCommand();
14
+ async function runTutorial() {
15
+ console.log(chalk.bold.cyan('\n🎓 Welcome to Cortex TMS Tutorial\n'));
16
+ console.log(chalk.gray('This interactive guide will teach you the "Cortex Way"'));
17
+ console.log(chalk.gray('Press Enter to continue through lessons, or select Exit to quit.\n'));
18
+ const lessons = [
19
+ {
20
+ title: '📊 Lesson 1: The Project Dashboard',
21
+ content: [
22
+ 'Every Cortex TMS project has a visual dashboard showing:',
23
+ ' • Current scope (Nano/Standard/Enterprise)',
24
+ ' • Active tasks from NEXT-TASKS.md',
25
+ ' • Validation health status',
26
+ ' • Quick statistics at a glance',
27
+ '',
28
+ 'Think of this as your "Project Cockpit" - everything you need to know in one command.',
29
+ ],
30
+ command: 'cortex-tms status',
31
+ tip: 'Run this command whenever you return to a project to get oriented.',
32
+ },
33
+ {
34
+ title: '🤖 Lesson 2: AI Agent Activation',
35
+ content: [
36
+ 'Cortex TMS includes the "Essential 7" prompt library:',
37
+ ' • init-session - Start with context',
38
+ ' • feature - Implement with architectural anchors',
39
+ ' • debug - Troubleshoot systematically',
40
+ ' • review - Code review against patterns',
41
+ ' • refactor - Structural improvements',
42
+ ' • decision - Architecture decision records',
43
+ ' • finish - Execute maintenance protocol',
44
+ '',
45
+ 'Each prompt is project-aware, referencing YOUR docs.',
46
+ 'Prompts auto-copy to clipboard for instant paste!',
47
+ ],
48
+ command: 'cortex-tms prompt init-session',
49
+ tip: 'Customize prompts by editing PROMPTS.md in your project root.',
50
+ },
51
+ {
52
+ title: '🔄 Lesson 3: Zero-Drift Governance',
53
+ content: [
54
+ 'Version drift is the #1 cause of documentation errors.',
55
+ 'Cortex TMS eliminates this with automated version sync.',
56
+ '',
57
+ 'How it works:',
58
+ ' 1. Update package.json version (the Single Source of Truth)',
59
+ ' 2. Run the sync script',
60
+ ' 3. All docs automatically updated',
61
+ '',
62
+ 'CI validates sync on every PR - drift cannot merge!',
63
+ ],
64
+ command: 'pnpm run docs:sync',
65
+ tip: 'If CI blocks your PR, run docs:sync locally and commit the changes.',
66
+ },
67
+ {
68
+ title: '✅ Lesson 4: Project Health & The Archive Protocol',
69
+ content: [
70
+ 'The validate command checks project health:',
71
+ ' • Mandatory files exist',
72
+ ' • No placeholder text (e.g., [YOUR_PROJECT])',
73
+ ' • Configuration is valid',
74
+ ' • Archive status is healthy',
75
+ '',
76
+ 'The Archive Protocol (you just experienced this!):',
77
+ ' • CI blocks PRs if >10 completed tasks in NEXT-TASKS.md',
78
+ ' • This forces regular archival to docs/archive/',
79
+ ' • Keeps NEXT-TASKS.md focused on current work',
80
+ ' • Prevents technical debt accumulation',
81
+ '',
82
+ 'This is governance that enforces itself!',
83
+ ],
84
+ command: 'cortex-tms validate --strict',
85
+ tip: 'Run validate before commits to catch issues early.',
86
+ },
87
+ {
88
+ title: '🚀 Lesson 5: Safe Template Evolution',
89
+ content: [
90
+ 'Templates evolve, but your customizations matter.',
91
+ 'The Safe-Fail Migration Engine has 3 components:',
92
+ '',
93
+ '1. Backup Engine (automatic snapshots)',
94
+ ' • Timestamped backups in .cortex/backups/',
95
+ ' • Created BEFORE any changes',
96
+ ' • Manifest tracks what/why',
97
+ '',
98
+ '2. Apply Logic (smart upgrades)',
99
+ ' • Auto-upgrades OUTDATED files',
100
+ ' • Skips CUSTOMIZED files (unless --force)',
101
+ ' • Clear status reporting',
102
+ '',
103
+ '3. Rollback Command (one-click recovery)',
104
+ ' • Interactive backup selection',
105
+ ' • Preview before restore',
106
+ ' • Confirmation required',
107
+ '',
108
+ 'Upgrade fearlessly - recovery is one command away!',
109
+ ],
110
+ command: 'cortex-tms migrate',
111
+ tip: 'Always run migrate (no flags) first to see what needs updating.',
112
+ },
113
+ ];
114
+ let currentLesson = 0;
115
+ while (currentLesson < lessons.length) {
116
+ const lesson = lessons[currentLesson];
117
+ if (!lesson) {
118
+ break;
119
+ }
120
+ console.clear();
121
+ console.log(chalk.bold.cyan(`\n${lesson.title}\n`));
122
+ console.log(chalk.gray(`Lesson ${currentLesson + 1} of ${lessons.length}\n`));
123
+ lesson.content.forEach((line) => {
124
+ if (line === '') {
125
+ console.log();
126
+ }
127
+ else if (line.startsWith(' •')) {
128
+ console.log(chalk.blue(line));
129
+ }
130
+ else if (line.startsWith(' ')) {
131
+ console.log(chalk.gray(line));
132
+ }
133
+ else {
134
+ console.log(chalk.white(line));
135
+ }
136
+ });
137
+ if (lesson.command) {
138
+ console.log(chalk.bold.yellow('\n💻 Try this command:\n'));
139
+ console.log(chalk.cyan(` ${lesson.command}\n`));
140
+ }
141
+ if (lesson.tip) {
142
+ console.log(chalk.gray(`💡 Pro Tip: ${lesson.tip}\n`));
143
+ }
144
+ const isLast = currentLesson === lessons.length - 1;
145
+ const choices = isLast
146
+ ? [
147
+ { name: chalk.green('✓ Finish Tutorial'), value: 'next' },
148
+ { name: chalk.gray('← Previous Lesson'), value: 'prev' },
149
+ { name: chalk.red('Exit Tutorial'), value: 'exit' },
150
+ ]
151
+ : [
152
+ { name: chalk.green('→ Next Lesson'), value: 'next' },
153
+ ...(currentLesson > 0
154
+ ? [{ name: chalk.gray('← Previous Lesson'), value: 'prev' }]
155
+ : []),
156
+ { name: chalk.red('Exit Tutorial'), value: 'exit' },
157
+ ];
158
+ const { action } = await inquirer.prompt([
159
+ {
160
+ type: 'list',
161
+ name: 'action',
162
+ message: 'What would you like to do?',
163
+ choices,
164
+ },
165
+ ]);
166
+ if (action === 'exit') {
167
+ console.log(chalk.gray('\n✓ Tutorial exited. Run "cortex-tms tutorial" anytime to continue.\n'));
168
+ return;
169
+ }
170
+ else if (action === 'prev') {
171
+ currentLesson = Math.max(0, currentLesson - 1);
172
+ }
173
+ else if (action === 'next') {
174
+ if (isLast) {
175
+ break;
176
+ }
177
+ else {
178
+ currentLesson++;
179
+ }
180
+ }
181
+ }
182
+ console.clear();
183
+ console.log(chalk.bold.green('\n🎉 Tutorial Complete!\n'));
184
+ console.log(chalk.white('You now know the Cortex Way:'));
185
+ console.log(chalk.blue(' • Dashboard: cortex-tms status'));
186
+ console.log(chalk.blue(' • AI Activation: cortex-tms prompt'));
187
+ console.log(chalk.blue(' • Version Sync: pnpm run docs:sync'));
188
+ console.log(chalk.blue(' • Health Check: cortex-tms validate'));
189
+ console.log(chalk.blue(' • Migration: cortex-tms migrate'));
190
+ console.log();
191
+ console.log(chalk.gray('💡 Next Steps:'));
192
+ console.log(chalk.cyan(' 1. Run "cortex-tms status" to see your project dashboard'));
193
+ console.log(chalk.cyan(' 2. Run "cortex-tms prompt init-session" to start coding'));
194
+ console.log(chalk.cyan(' 3. Read NEXT-TASKS.md to see what to work on next'));
195
+ console.log();
196
+ console.log(chalk.gray('📚 For more details, see:'));
197
+ console.log(chalk.gray(' • CLAUDE.md (agent workflow)'));
198
+ console.log(chalk.gray(' • docs/core/ARCHITECTURE.md (technical design)'));
199
+ console.log(chalk.gray(' • docs/core/PATTERNS.md (coding standards)'));
200
+ console.log();
201
+ console.log(chalk.bold.cyan('Happy coding! 🚀\n'));
202
+ }
203
+ //# sourceMappingURL=tutorial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tutorial.js","sourceRoot":"","sources":["../../src/commands/tutorial.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface BackupFileInfo {
2
+ relativePath: string;
3
+ originalPath: string;
4
+ size: number;
5
+ reason: string;
6
+ }
7
+ export interface BackupManifest {
8
+ timestamp: string;
9
+ version: string;
10
+ reason: string;
11
+ files: BackupFileInfo[];
12
+ projectRoot: string;
13
+ }
14
+ export interface BackupResult {
15
+ success: boolean;
16
+ backupPath: string;
17
+ filesBackedUp: number;
18
+ error?: string;
19
+ }
20
+ export declare function createBackup(projectRoot: string, filesToBackup: string[], reason: string, version: string): Promise<BackupResult>;
21
+ export declare function restoreBackup(backupPath: string): Promise<number>;
22
+ export declare function listBackups(projectRoot: string): Promise<BackupManifest[]>;
23
+ export declare function pruneBackups(projectRoot: string, keepCount?: number): Promise<number>;
24
+ export declare function getBackupSize(backupPath: string): Promise<number>;
25
+ export declare function formatBackupSize(bytes: number): string;
26
+ //# sourceMappingURL=backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/utils/backup.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAWD,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC,CAwEvB;AAQD,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCvE;AAQD,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA0BhF;AASD,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAW,GACrB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAyBD,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAUvE;AAQD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWtD"}
@@ -0,0 +1,143 @@
1
+ import { join, dirname, relative } from 'path';
2
+ import { existsSync, mkdirSync } from 'fs';
3
+ import fs from 'fs-extra';
4
+ export async function createBackup(projectRoot, filesToBackup, reason, version) {
5
+ try {
6
+ const timestamp = generateTimestamp();
7
+ const backupDir = join(projectRoot, '.cortex', 'backups', timestamp);
8
+ if (!existsSync(backupDir)) {
9
+ mkdirSync(backupDir, { recursive: true });
10
+ }
11
+ const backedUpFiles = [];
12
+ for (const filePath of filesToBackup) {
13
+ if (!existsSync(filePath)) {
14
+ continue;
15
+ }
16
+ const relativePath = relative(projectRoot, filePath);
17
+ const destPath = join(backupDir, relativePath);
18
+ const destDir = dirname(destPath);
19
+ if (!existsSync(destDir)) {
20
+ mkdirSync(destDir, { recursive: true });
21
+ }
22
+ await fs.copyFile(filePath, destPath);
23
+ const stats = await fs.stat(filePath);
24
+ backedUpFiles.push({
25
+ relativePath,
26
+ originalPath: filePath,
27
+ size: stats.size,
28
+ reason: `Backup before ${reason}`,
29
+ });
30
+ }
31
+ const manifest = {
32
+ timestamp,
33
+ version,
34
+ reason,
35
+ files: backedUpFiles,
36
+ projectRoot,
37
+ };
38
+ const manifestPath = join(backupDir, 'manifest.json');
39
+ await fs.writeJson(manifestPath, manifest, { spaces: 2 });
40
+ return {
41
+ success: true,
42
+ backupPath: backupDir,
43
+ filesBackedUp: backedUpFiles.length,
44
+ };
45
+ }
46
+ catch (error) {
47
+ return {
48
+ success: false,
49
+ backupPath: '',
50
+ filesBackedUp: 0,
51
+ error: error instanceof Error ? error.message : 'Unknown error',
52
+ };
53
+ }
54
+ }
55
+ export async function restoreBackup(backupPath) {
56
+ const manifestPath = join(backupPath, 'manifest.json');
57
+ if (!existsSync(manifestPath)) {
58
+ throw new Error('Backup manifest not found');
59
+ }
60
+ const manifest = await fs.readJson(manifestPath);
61
+ let restoredCount = 0;
62
+ for (const fileInfo of manifest.files) {
63
+ const sourcePath = join(backupPath, fileInfo.relativePath);
64
+ const destPath = fileInfo.originalPath;
65
+ if (!existsSync(sourcePath)) {
66
+ continue;
67
+ }
68
+ const destDir = dirname(destPath);
69
+ if (!existsSync(destDir)) {
70
+ mkdirSync(destDir, { recursive: true });
71
+ }
72
+ await fs.copyFile(sourcePath, destPath);
73
+ restoredCount++;
74
+ }
75
+ return restoredCount;
76
+ }
77
+ export async function listBackups(projectRoot) {
78
+ const backupsDir = join(projectRoot, '.cortex', 'backups');
79
+ if (!existsSync(backupsDir)) {
80
+ return [];
81
+ }
82
+ const backupDirs = await fs.readdir(backupsDir);
83
+ const manifests = [];
84
+ for (const dir of backupDirs) {
85
+ const manifestPath = join(backupsDir, dir, 'manifest.json');
86
+ if (existsSync(manifestPath)) {
87
+ try {
88
+ const manifest = await fs.readJson(manifestPath);
89
+ manifests.push(manifest);
90
+ }
91
+ catch (error) {
92
+ continue;
93
+ }
94
+ }
95
+ }
96
+ return manifests.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
97
+ }
98
+ export async function pruneBackups(projectRoot, keepCount = 10) {
99
+ const backups = await listBackups(projectRoot);
100
+ if (backups.length <= keepCount) {
101
+ return 0;
102
+ }
103
+ const backupsDir = join(projectRoot, '.cortex', 'backups');
104
+ const toDelete = backups.slice(keepCount);
105
+ let deletedCount = 0;
106
+ for (const backup of toDelete) {
107
+ const backupDir = join(backupsDir, backup.timestamp);
108
+ if (existsSync(backupDir)) {
109
+ await fs.remove(backupDir);
110
+ deletedCount++;
111
+ }
112
+ }
113
+ return deletedCount;
114
+ }
115
+ function generateTimestamp() {
116
+ const now = new Date();
117
+ const year = now.getFullYear();
118
+ const month = String(now.getMonth() + 1).padStart(2, '0');
119
+ const day = String(now.getDate()).padStart(2, '0');
120
+ const hours = String(now.getHours()).padStart(2, '0');
121
+ const minutes = String(now.getMinutes()).padStart(2, '0');
122
+ const seconds = String(now.getSeconds()).padStart(2, '0');
123
+ return `${year}-${month}-${day}_${hours}${minutes}${seconds}`;
124
+ }
125
+ export async function getBackupSize(backupPath) {
126
+ const manifestPath = join(backupPath, 'manifest.json');
127
+ if (!existsSync(manifestPath)) {
128
+ return 0;
129
+ }
130
+ const manifest = await fs.readJson(manifestPath);
131
+ return manifest.files.reduce((total, file) => total + file.size, 0);
132
+ }
133
+ export function formatBackupSize(bytes) {
134
+ const units = ['B', 'KB', 'MB', 'GB'];
135
+ let size = bytes;
136
+ let unitIndex = 0;
137
+ while (size >= 1024 && unitIndex < units.length - 1) {
138
+ size /= 1024;
139
+ unitIndex++;
140
+ }
141
+ return `${size.toFixed(1)} ${units[unitIndex]}`;
142
+ }
143
+ //# sourceMappingURL=backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/utils/backup.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cortex-tms",
3
- "version": "2.4.1",
3
+ "version": "2.5.0",
4
4
  "description": "The Universal AI-Optimized Project Boilerplate - CLI tool for bootstrapping TMS-structured projects",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,6 +16,20 @@
16
16
  "engines": {
17
17
  "node": ">=18.0.0"
18
18
  },
19
+ "scripts": {
20
+ "build": "pnpm run cli:build",
21
+ "prepublishOnly": "pnpm run build",
22
+ "cli:dev": "tsx src/cli.ts",
23
+ "cli:build": "tsc -p tsconfig.cli.json",
24
+ "cli:test": "node bin/cortex-tms.js --help",
25
+ "docs:sync": "node scripts/sync-project.js",
26
+ "docs:check": "node scripts/sync-project.js --check",
27
+ "test": "vitest run",
28
+ "test:watch": "vitest",
29
+ "test:coverage": "vitest run --coverage",
30
+ "lint": "eslint src/**/*.ts",
31
+ "format": "prettier --write \"src/**/*.ts\""
32
+ },
19
33
  "keywords": [
20
34
  "documentation",
21
35
  "boilerplate",
@@ -54,16 +68,5 @@
54
68
  "tsx": "^4.19.2",
55
69
  "typescript": "^5.7.3",
56
70
  "vitest": "^4.0.17"
57
- },
58
- "scripts": {
59
- "build": "pnpm run cli:build",
60
- "cli:dev": "tsx src/cli.ts",
61
- "cli:build": "tsc -p tsconfig.cli.json",
62
- "cli:test": "node bin/cortex-tms.js --help",
63
- "test": "vitest run",
64
- "test:watch": "vitest",
65
- "test:coverage": "vitest run --coverage",
66
- "lint": "eslint src/**/*.ts",
67
- "format": "prettier --write \"src/**/*.ts\""
68
71
  }
69
- }
72
+ }
@@ -42,7 +42,13 @@ We need to decide on `[TOPIC]`. Draft a new Architecture Decision Record in `doc
42
42
 
43
43
  ## finish
44
44
 
45
- Task complete. Execute the Maintenance Protocol: update `NEXT-TASKS.md`, sync truth to `docs/core/`, and suggest the next priority.
45
+ Task complete. Execute the Maintenance Protocol:
46
+
47
+ 1. Run `pnpm run docs:sync` to ensure version integrity across documentation
48
+ 2. Update `NEXT-TASKS.md` with task status and next priorities
49
+ 3. Run `node bin/cortex-tms.js validate --strict` to verify project health
50
+ 4. Follow Git Protocol: commit with conventional format and co-authorship
51
+ 5. Suggest next priority from backlog
46
52
 
47
53
  ---
48
54
 
@@ -52,4 +58,4 @@ Task complete. Execute the Maintenance Protocol: update `NEXT-TASKS.md`, sync tr
52
58
  - Customize these prompts to match your team's vocabulary and workflow
53
59
  - Run `cortex-tms prompt --list` to see all available prompts
54
60
 
55
- <!-- @cortex-tms-version 2.3.0 -->
61
+ <!-- @cortex-tms-version 2.4.1 -->