feat: classify recovered naming drift
This commit is contained in:
@@ -4,12 +4,13 @@ import { resolve } from 'node:path'
|
||||
const root = resolve(new URL('..', import.meta.url).pathname)
|
||||
const outputPath = resolve(root, 'config/freecad-active-work-queue.json')
|
||||
const load = (path) => readFile(resolve(root, path), 'utf8').then(JSON.parse)
|
||||
const [gui, workflowPlan, composite, correlation, production] = await Promise.all([
|
||||
const [gui, workflowPlan, composite, correlation, production, recoveredNaming] = await Promise.all([
|
||||
load('.cache/freecad/reference-desktop-gui-commands.json'),
|
||||
load('config/freecad-gui-workflow-plan.json'),
|
||||
load('config/freecad-composite-history-elementmap-oracle.json'),
|
||||
load('config/freecad-tsn-stage-correlation-oracle.json'),
|
||||
load('config/chrome-freecad-naming-production-verification.json'),
|
||||
load('config/freecad-recovered-naming-classification.json'),
|
||||
])
|
||||
|
||||
const guiShardTasks = gui.guiCommands.mergedShards.map((shard, index) => ({
|
||||
@@ -39,15 +40,25 @@ const workflowTasks = workflowTitles.map((title, index) => ({
|
||||
...(workflowProgress.get(`ORA-GUI-WF-${String(index).padStart(3, '0')}`).evidence.length > 0 ? { evidence: workflowProgress.get(`ORA-GUI-WF-${String(index).padStart(3, '0')}`).evidence } : {}),
|
||||
exit: index === 0 ? 'one command family and its exact task are recorded' : 'one native workflow fixture and its focused assertion pass',
|
||||
}))
|
||||
const workflowClosed = workflowTasks.every((task) => task.status === 'completed')
|
||||
const driftCases = composite.cases.filter((fixture) => fixture.mutation.metrics.namingRestorationDriftStages > 0)
|
||||
const classifications = new Map(recoveredNaming.classifications.map((entry) => [entry.caseId, entry]))
|
||||
if (classifications.size !== recoveredNaming.classifications.length) throw new Error('Recovered naming classifications contain duplicate cases.')
|
||||
for (const entry of recoveredNaming.classifications) {
|
||||
if (!driftCases.some(({ id }) => id === entry.caseId) || !['stable_semantics', 'allowed_evolution', 'implementation_defect'].includes(entry.classification)) throw new Error(`Recovered naming classification ${entry.caseId} is invalid.`)
|
||||
}
|
||||
const classifiedPrefix = driftCases.findIndex(({ id }) => !classifications.has(id))
|
||||
const completedDriftCases = classifiedPrefix < 0 ? driftCases.length : classifiedPrefix
|
||||
if (driftCases.slice(completedDriftCases).some(({ id }) => classifications.has(id))) throw new Error('Recovered naming classifications must form a contiguous serial prefix.')
|
||||
const driftTasks = driftCases.map((fixture, index) => ({
|
||||
id: `TSN-DRIFT-${String(index).padStart(3, '0')}`,
|
||||
title: `Classify recovered naming evolution for ${fixture.id}`,
|
||||
status: 'pending',
|
||||
status: index < completedDriftCases ? 'completed' : workflowClosed && index === completedDriftCases ? 'in_progress' : 'pending',
|
||||
dependencies: index === 0 ? ['ORA-GUI-WF-006'] : [`TSN-DRIFT-${String(index - 1).padStart(3, '0')}`],
|
||||
caseId: fixture.id,
|
||||
driftStages: fixture.mutation.metrics.namingRestorationDriftStages,
|
||||
driftOrdinals: fixture.mutation.metrics.namingRestorationDriftOrdinals,
|
||||
...(classifications.has(fixture.id) ? { classification: classifications.get(fixture.id).classification, evidence: ['config/freecad-recovered-naming-classification.json', classifications.get(fixture.id).reasonCode] } : {}),
|
||||
exit: 'the case is classified as stable semantics, allowed evolution, or an implementation defect',
|
||||
}))
|
||||
const productionDriftTasks = correlation.mutations
|
||||
@@ -86,8 +97,8 @@ const closureTasks = [
|
||||
]
|
||||
const milestones = [
|
||||
{ id: 'ORA-GUI-BASELINE', exactTask: 'EX-ORA-01', status: 'completed', tasks: [...setupTasks, ...guiShardTasks, ...closureTasks] },
|
||||
{ id: 'ORA-GUI-WORKFLOWS', exactTask: 'EX-ORA-01', status: 'in_progress', tasks: workflowTasks },
|
||||
{ id: 'TSN-RECOVERY-DRIFT', exactTask: 'EX-TSN-04', status: 'pending', tasks: [...driftTasks, ...productionDriftTasks] },
|
||||
{ id: 'ORA-GUI-WORKFLOWS', exactTask: 'EX-ORA-01', status: workflowClosed ? 'completed' : 'in_progress', tasks: workflowTasks },
|
||||
{ id: 'TSN-RECOVERY-DRIFT', exactTask: 'EX-TSN-04', status: workflowClosed ? 'in_progress' : 'pending', tasks: [...driftTasks, ...productionDriftTasks] },
|
||||
{ id: 'TSN-ORDERED-PAIRS', exactTask: 'EX-TSN-04', status: 'pending', tasks: transitionTasks },
|
||||
]
|
||||
const allTasks = milestones.flatMap((milestone) => milestone.tasks)
|
||||
@@ -97,7 +108,7 @@ if (!nextTask) throw new Error('FreeCAD active work queue requires one in-progre
|
||||
const queue = {
|
||||
schemaVersion: 1,
|
||||
baseline: { freecadVersion: '1.1.1', commit: '0108fd4b4850cc46e625b60e53cea7a7bbe69f8d' },
|
||||
updatedAt: '2026-08-14',
|
||||
updatedAt: '2026-08-15',
|
||||
generatedBy: 'scripts/generate-freecad-active-work-queue.mjs',
|
||||
policy: {
|
||||
maxInProgress: 1,
|
||||
|
||||
Reference in New Issue
Block a user