#!/usr/bin/env node
// Knowledge Ratchet — Main Pipeline
// Runs the full cycle: extract → validate → promote → regress → migrate
// Use: node run.js [full|extract|validate|regress|migrate|status]
const { execSync } = require('child_process')
const path = require('path')
const DIR = __dirname
function run (script, args = '') {
console.log(`\n${'─'.repeat(60)}`)
console.log(`Running: ${script} ${args}`)
console.log('─'.repeat(60))
try {
const output = execSync(`node ${path.join(DIR, script)} ${args}`, {
encoding: 'utf8',
stdio: 'inherit'
})
} catch (e) {
console.error(`Failed: ${script}`)
}
}
const command = process.argv[2] || 'status'
switch (command) {
case 'full':
// Full pipeline: extract → validate → sync → regress → migrate
run('extract-patterns.js')
run('validate-principles.js')
run('promote.js', 'sync')
run('regress.js')
run('migrate-down.js')
run('contradiction-detector.js', 'pending')
console.log('\n' + '═'.repeat(60))
console.log('Pipeline complete.')
break
case 'extract':
run('extract-patterns.js')
break
case 'validate':
run('validate-principles.js')
break
case 'regress':
run('regress.js')
break
case 'migrate':
run('migrate-down.js')
break
case 'questions':
run('contradiction-detector.js', 'pending')
break
case 'promote':
run('promote.js', process.argv.slice(3).join(' '))
break
case 'status':
run('promote.js', 'list')
run('migrate-down.js', 'status')
run('contradiction-detector.js', 'pending')
break
default:
console.log('Knowledge Ratchet Pipeline')
console.log('')
console.log('Commands:')
console.log(' full Run full pipeline (extract → validate → sync → regress → migrate)')
console.log(' extract Extract patterns from feedback files')
console.log(' validate Run retrospective split test')
console.log(' regress Check correction rates per principle')
console.log(' migrate Check enforcement level escalation')
console.log(' questions List pending questions for user')
console.log(' promote Promote candidates (promote list | promote <index>)')
console.log(' status Show current state of all principles')
}