From c8ef0ab030794579f28b4c454c5ad890b6d540ba Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 15:00:29 -0500 Subject: [PATCH 01/23] feat(p01-t01): add docs tool pack installer --- .../commands/init/tools/docs/index.test.ts | 151 ++++++++++++++ .../cli/src/commands/init/tools/docs/index.ts | 189 ++++++++++++++++++ .../init/tools/docs/install-docs.test.ts | 120 +++++++++++ .../commands/init/tools/docs/install-docs.ts | 62 ++++++ .../cli/src/commands/init/tools/index.test.ts | 22 +- packages/cli/src/commands/init/tools/index.ts | 30 ++- .../tools/shared/bundle-consistency.test.ts | 12 ++ .../init/tools/shared/skill-manifest.ts | 11 +- 8 files changed, 589 insertions(+), 8 deletions(-) create mode 100644 packages/cli/src/commands/init/tools/docs/index.test.ts create mode 100644 packages/cli/src/commands/init/tools/docs/index.ts create mode 100644 packages/cli/src/commands/init/tools/docs/install-docs.test.ts create mode 100644 packages/cli/src/commands/init/tools/docs/install-docs.ts diff --git a/packages/cli/src/commands/init/tools/docs/index.test.ts b/packages/cli/src/commands/init/tools/docs/index.test.ts new file mode 100644 index 00000000..ee310738 --- /dev/null +++ b/packages/cli/src/commands/init/tools/docs/index.test.ts @@ -0,0 +1,151 @@ +import type { CommandContext, GlobalOptions } from '@app/command-context'; +import { + createLoggerCapture, + type LoggerCapture, +} from '@commands/__tests__/helpers'; +import type { MultiSelectChoice } from '@commands/shared/shared.prompts'; +import type { Scope } from '@shared/types'; +import { Command } from 'commander'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +import { createInitToolsDocsCommand } from './index'; +import { DOCS_SKILLS } from './install-docs'; + +interface HarnessOptions { + scope?: Scope; + interactive?: boolean; + selectResponses?: Array; + confirmResponses?: boolean[]; +} + +function createHarness(options: HarnessOptions = {}): { + capture: LoggerCapture; + command: Command; + selectManyWithAbort: ReturnType; + confirmAction: ReturnType; + installDocs: ReturnType; +} { + const capture = createLoggerCapture(); + const selectResponses = [ + ...(options.selectResponses ?? [['oat-docs-analyze']]), + ]; + const confirmResponses = [...(options.confirmResponses ?? [true])]; + + const selectManyWithAbort = vi.fn( + async (_message: string, _choices: MultiSelectChoice[]) => + selectResponses.shift() ?? ['oat-docs-analyze'], + ); + const confirmAction = vi.fn(async () => confirmResponses.shift() ?? true); + const installDocs = vi.fn(async () => ({ + copiedSkills: ['oat-docs-analyze'], + updatedSkills: [], + skippedSkills: [], + outdatedSkills: [], + })); + + const command = createInitToolsDocsCommand({ + buildCommandContext: (globalOptions: GlobalOptions): CommandContext => ({ + scope: (globalOptions.scope ?? options.scope ?? 'all') as Scope, + dryRun: false, + verbose: globalOptions.verbose ?? false, + json: globalOptions.json ?? false, + cwd: globalOptions.cwd ?? '/tmp/workspace', + home: '/tmp/home', + interactive: options.interactive ?? !(globalOptions.json ?? false), + logger: capture.logger, + }), + resolveProjectRoot: vi.fn(async () => '/tmp/workspace'), + resolveScopeRoot: vi.fn((_scope: 'project' | 'user', _cwd, home) => home), + resolveAssetsRoot: vi.fn(async () => '/tmp/assets'), + installDocs, + selectManyWithAbort, + confirmAction, + }); + + return { + capture, + command, + selectManyWithAbort, + confirmAction, + installDocs, + }; +} + +async function runCommand( + command: Command, + args: string[] = [], + globalArgs: string[] = [], +): Promise { + const program = new Command() + .name('oat') + .option('--json') + .option('--verbose') + .option('--scope ') + .option('--cwd ') + .exitOverride(); + + const init = new Command('init'); + const tools = new Command('tools'); + tools.addCommand(command); + init.addCommand(tools); + program.addCommand(init); + + await program.parseAsync([...globalArgs, 'init', 'tools', 'docs', ...args], { + from: 'user', + }); +} + +describe('createInitToolsDocsCommand', () => { + let originalExitCode: number | undefined; + + beforeEach(() => { + originalExitCode = process.exitCode; + process.exitCode = undefined; + }); + + afterEach(() => { + process.exitCode = originalExitCode; + }); + + it('interactive mode shows multi-select with all checked', async () => { + const { command, selectManyWithAbort } = createHarness({ + interactive: true, + }); + + await runCommand(command, [], ['--scope', 'project']); + + expect(selectManyWithAbort).toHaveBeenCalledTimes(1); + const choices = selectManyWithAbort.mock.calls[0]?.[1] as Array<{ + value: string; + checked?: boolean; + }>; + expect( + choices.find((choice) => choice.value === 'oat-docs-analyze')?.checked, + ).toBe(true); + }); + + it('non-interactive installs all docs skills', async () => { + const { command, selectManyWithAbort, installDocs } = createHarness({ + interactive: false, + }); + + await runCommand(command, [], ['--scope', 'project']); + + expect(selectManyWithAbort).not.toHaveBeenCalled(); + expect(installDocs).toHaveBeenCalledWith( + expect.objectContaining({ + skills: [...DOCS_SKILLS], + }), + ); + }); + + it('--scope user works', async () => { + const { command, installDocs } = createHarness({ interactive: false }); + + await runCommand(command, [], ['--scope', 'user']); + + expect(installDocs).toHaveBeenCalledWith( + expect.objectContaining({ targetRoot: '/tmp/home' }), + ); + }); +}); diff --git a/packages/cli/src/commands/init/tools/docs/index.ts b/packages/cli/src/commands/init/tools/docs/index.ts new file mode 100644 index 00000000..a2d664b3 --- /dev/null +++ b/packages/cli/src/commands/init/tools/docs/index.ts @@ -0,0 +1,189 @@ +import { + buildCommandContext, + type CommandContext, + type GlobalOptions, +} from '@app/command-context'; +import { + confirmAction, + type MultiSelectChoice, + type PromptContext, + selectManyWithAbort, +} from '@commands/shared/shared.prompts'; +import { readGlobalOptions } from '@commands/shared/shared.utils'; +import { resolveAssetsRoot } from '@fs/assets'; +import { resolveProjectRoot, resolveScopeRoot } from '@fs/paths'; +import { Command } from 'commander'; + +import { + DOCS_SKILLS, + installDocs as defaultInstallDocs, + type InstallDocsOptions, + type InstallDocsResult, +} from './install-docs'; + +interface InitToolsDocsOptions { + force?: boolean; +} + +type DocsScope = 'project' | 'user'; + +interface InitToolsDocsDependencies { + buildCommandContext: (options: GlobalOptions) => CommandContext; + resolveProjectRoot: (cwd: string) => Promise; + resolveScopeRoot: (scope: DocsScope, cwd: string, home: string) => string; + resolveAssetsRoot: () => Promise; + installDocs: (options: InstallDocsOptions) => Promise; + selectManyWithAbort: ( + message: string, + choices: MultiSelectChoice[], + ctx: PromptContext, + ) => Promise; + confirmAction: (message: string, ctx: PromptContext) => Promise; +} + +const DEFAULT_DEPENDENCIES: InitToolsDocsDependencies = { + buildCommandContext, + resolveProjectRoot, + resolveScopeRoot, + resolveAssetsRoot, + installDocs: defaultInstallDocs, + selectManyWithAbort, + confirmAction, +}; + +function resolveScope(context: CommandContext): DocsScope { + return context.scope === 'user' ? 'user' : 'project'; +} + +function reportSuccess( + context: CommandContext, + scope: DocsScope, + targetRoot: string, + assetsRoot: string, + selectedSkills: string[], + result: InstallDocsResult, +): void { + if (context.json) { + context.logger.json({ + status: 'ok', + scope, + targetRoot, + assetsRoot, + selectedSkills, + result, + }); + return; + } + + context.logger.info('Installed docs tool pack.'); + context.logger.info(`Scope: ${scope}`); + context.logger.info(`Target root: ${targetRoot}`); + context.logger.info( + `Selected skills: ${selectedSkills.join(', ') || '(none)'}`, + ); + context.logger.info( + `Skills: copied=${result.copiedSkills.length}, updated=${result.updatedSkills.length}, skipped=${result.skippedSkills.length}`, + ); + context.logger.info(`Run: oat sync --scope ${scope}`); +} + +async function runInitToolsDocs( + context: CommandContext, + options: InitToolsDocsOptions, + dependencies: InitToolsDocsDependencies, +): Promise { + try { + const scope = resolveScope(context); + const targetRoot = + scope === 'project' + ? await dependencies.resolveProjectRoot(context.cwd) + : dependencies.resolveScopeRoot('user', context.cwd, context.home); + + const selectedSkills = context.interactive + ? await dependencies.selectManyWithAbort( + 'Select docs skills to install', + DOCS_SKILLS.map((skill) => ({ + label: skill, + value: skill, + checked: true, + })), + { interactive: context.interactive }, + ) + : [...DOCS_SKILLS]; + + if (selectedSkills === null) { + if (!context.json) { + context.logger.info('Cancelled: no docs skills installed.'); + } + process.exitCode = 0; + return; + } + + if (selectedSkills.length === 0) { + if (!context.json) { + context.logger.info('No docs skills selected.'); + } + process.exitCode = 0; + return; + } + + if (options.force && context.interactive) { + const confirmed = await dependencies.confirmAction( + `Force overwrite existing docs assets in ${scope} scope?`, + { interactive: context.interactive }, + ); + if (!confirmed) { + if (!context.json) { + context.logger.info('Cancelled: no files were overwritten.'); + } + process.exitCode = 0; + return; + } + } + + const assetsRoot = await dependencies.resolveAssetsRoot(); + const result = await dependencies.installDocs({ + assetsRoot, + targetRoot, + skills: selectedSkills, + force: options.force, + }); + + reportSuccess( + context, + scope, + targetRoot, + assetsRoot, + selectedSkills, + result, + ); + process.exitCode = 0; + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + if (context.json) { + context.logger.json({ status: 'error', message }); + } else { + context.logger.error(message); + } + process.exitCode = 1; + } +} + +export function createInitToolsDocsCommand( + overrides: Partial = {}, +): Command { + const dependencies: InitToolsDocsDependencies = { + ...DEFAULT_DEPENDENCIES, + ...overrides, + }; + + return new Command('docs') + .description('Install OAT docs workflow skills') + .option('--force', 'Overwrite existing files where applicable') + .action(async (options: InitToolsDocsOptions, command: Command) => { + const context = dependencies.buildCommandContext( + readGlobalOptions(command), + ); + await runInitToolsDocs(context, options, dependencies); + }); +} diff --git a/packages/cli/src/commands/init/tools/docs/install-docs.test.ts b/packages/cli/src/commands/init/tools/docs/install-docs.test.ts new file mode 100644 index 00000000..fb572bc5 --- /dev/null +++ b/packages/cli/src/commands/init/tools/docs/install-docs.test.ts @@ -0,0 +1,120 @@ +import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; + +import { afterEach, describe, expect, it } from 'vitest'; + +import { installDocs } from './install-docs'; + +const tempDirs: string[] = []; + +async function makeTempDir(): Promise { + const dir = await mkdtemp(join(tmpdir(), 'oat-docs-pack-')); + tempDirs.push(dir); + return dir; +} + +async function seedAssets(assetsRoot: string): Promise { + await mkdir(join(assetsRoot, 'skills', 'oat-docs-analyze'), { + recursive: true, + }); + await mkdir(join(assetsRoot, 'skills', 'oat-docs-apply'), { + recursive: true, + }); + await writeFile( + join(assetsRoot, 'skills', 'oat-docs-analyze', 'SKILL.md'), + '---\nname: oat-docs-analyze\nversion: 1.0.0\n---\n', + 'utf8', + ); + await writeFile( + join(assetsRoot, 'skills', 'oat-docs-apply', 'SKILL.md'), + '---\nname: oat-docs-apply\nversion: 1.0.0\n---\n', + 'utf8', + ); +} + +describe('installDocs', () => { + afterEach(async () => { + await Promise.all( + tempDirs.map(async (dir) => { + await rm(dir, { recursive: true, force: true }); + }), + ); + tempDirs.length = 0; + }); + + it('copies selected docs skills at project scope', async () => { + const root = await makeTempDir(); + const assetsRoot = join(root, 'assets'); + const targetRoot = join(root, 'project-target'); + await seedAssets(assetsRoot); + + const result = await installDocs({ + assetsRoot, + targetRoot, + skills: ['oat-docs-analyze'], + }); + + expect(result.copiedSkills).toEqual(['oat-docs-analyze']); + expect(result.outdatedSkills).toEqual([]); + await expect( + readFile( + join(targetRoot, '.agents', 'skills', 'oat-docs-analyze', 'SKILL.md'), + 'utf8', + ), + ).resolves.toContain('oat-docs-analyze'); + }); + + it('copies selected docs skills at user scope', async () => { + const root = await makeTempDir(); + const assetsRoot = join(root, 'assets'); + const targetRoot = join(root, 'user-target'); + await seedAssets(assetsRoot); + + const result = await installDocs({ + assetsRoot, + targetRoot, + skills: ['oat-docs-apply'], + }); + + expect(result.copiedSkills).toEqual(['oat-docs-apply']); + expect(result.outdatedSkills).toEqual([]); + await expect( + readFile( + join(targetRoot, '.agents', 'skills', 'oat-docs-apply', 'SKILL.md'), + 'utf8', + ), + ).resolves.toContain('oat-docs-apply'); + }); + + it('tracks outdated docs skills when bundled version is newer', async () => { + const root = await makeTempDir(); + const assetsRoot = join(root, 'assets'); + const targetRoot = join(root, 'target'); + await seedAssets(assetsRoot); + await installDocs({ + assetsRoot, + targetRoot, + skills: ['oat-docs-analyze'], + }); + + await writeFile( + join(assetsRoot, 'skills', 'oat-docs-analyze', 'SKILL.md'), + '---\nname: oat-docs-analyze\nversion: 1.1.0\n---\n', + 'utf8', + ); + + const result = await installDocs({ + assetsRoot, + targetRoot, + skills: ['oat-docs-analyze'], + }); + + expect(result.copiedSkills).toEqual([]); + expect(result.updatedSkills).toEqual([]); + expect(result.skippedSkills).toEqual([]); + expect(result.outdatedSkills).toEqual([ + { name: 'oat-docs-analyze', installed: '1.0.0', bundled: '1.1.0' }, + ]); + }); +}); diff --git a/packages/cli/src/commands/init/tools/docs/install-docs.ts b/packages/cli/src/commands/init/tools/docs/install-docs.ts new file mode 100644 index 00000000..2aa97f80 --- /dev/null +++ b/packages/cli/src/commands/init/tools/docs/install-docs.ts @@ -0,0 +1,62 @@ +import { join } from 'node:path'; + +import { copyDirWithVersionCheck } from '@commands/init/tools/shared/copy-helpers'; +import { DOCS_SKILLS } from '@commands/init/tools/shared/skill-manifest'; + +export { DOCS_SKILLS }; + +export interface InstallDocsOptions { + assetsRoot: string; + targetRoot: string; + skills: string[]; + force?: boolean; +} + +export interface InstallDocsResult { + copiedSkills: string[]; + updatedSkills: string[]; + skippedSkills: string[]; + outdatedSkills: Array<{ + name: string; + installed: string | null; + bundled: string | null; + }>; +} + +export async function installDocs( + options: InstallDocsOptions, +): Promise { + const force = options.force ?? false; + const result: InstallDocsResult = { + copiedSkills: [], + updatedSkills: [], + skippedSkills: [], + outdatedSkills: [], + }; + + for (const skill of options.skills) { + const source = join(options.assetsRoot, 'skills', skill); + const destination = join(options.targetRoot, '.agents', 'skills', skill); + const resultWithVersion = await copyDirWithVersionCheck( + source, + destination, + force, + ); + + if (resultWithVersion.status === 'copied') { + result.copiedSkills.push(skill); + } else if (resultWithVersion.status === 'updated') { + result.updatedSkills.push(skill); + } else if (resultWithVersion.status === 'outdated') { + result.outdatedSkills.push({ + name: skill, + installed: resultWithVersion.installedVersion ?? null, + bundled: resultWithVersion.bundledVersion ?? null, + }); + } else { + result.skippedSkills.push(skill); + } + } + + return result; +} diff --git a/packages/cli/src/commands/init/tools/index.test.ts b/packages/cli/src/commands/init/tools/index.test.ts index 995ea931..9f2a4870 100644 --- a/packages/cli/src/commands/init/tools/index.test.ts +++ b/packages/cli/src/commands/init/tools/index.test.ts @@ -21,7 +21,7 @@ function createHarness(options: HarnessOptions = {}) { const capture = createLoggerCapture(); const packSelection = [ ...(options.packSelection ?? [ - ['core', 'ideas', 'workflows', 'utility', 'research'], + ['core', 'ideas', 'docs', 'workflows', 'utility', 'research'], ]), ]; const scopeSelection = [...(options.scopeSelection ?? ['project'])]; @@ -30,7 +30,7 @@ function createHarness(options: HarnessOptions = {}) { async (_message: string, _choices: MultiSelectChoice[]) => { const next = packSelection.shift(); return next === undefined - ? ['core', 'ideas', 'workflows', 'utility', 'research'] + ? ['core', 'ideas', 'docs', 'workflows', 'utility', 'research'] : next; }, ); @@ -48,6 +48,12 @@ function createHarness(options: HarnessOptions = {}) { outdatedSkills: [], docsStatus: 'copied' as const, })); + const installDocs = vi.fn(async () => ({ + copiedSkills: ['oat-docs-analyze'], + updatedSkills: [], + skippedSkills: [], + outdatedSkills: [], + })); const installIdeas = vi.fn(async () => ({ copiedSkills: ['oat-idea-new'], updatedSkills: [], @@ -138,6 +144,7 @@ function createHarness(options: HarnessOptions = {}) { selectManyWithAbort, selectWithAbort, installCore, + installDocs, installIdeas, installWorkflows, installUtility, @@ -158,6 +165,7 @@ function createHarness(options: HarnessOptions = {}) { selectManyWithAbort, selectWithAbort, installCore, + installDocs, installIdeas, installWorkflows, installUtility, @@ -206,11 +214,12 @@ describe('createInitToolsCommand', () => { process.exitCode = originalExitCode; }); - it('registers core, ideas, project-management, workflows, utility, and research subcommands', () => { + it('registers core, ideas, docs, project-management, workflows, utility, and research subcommands', () => { const { command } = createHarness(); const subcommands = command.commands.map((subcommand) => subcommand.name()); expect(subcommands).toContain('core'); expect(subcommands).toContain('ideas'); + expect(subcommands).toContain('docs'); expect(subcommands).toContain('project-management'); expect(subcommands).toContain('workflows'); expect(subcommands).toContain('utility'); @@ -234,6 +243,9 @@ describe('createInitToolsCommand', () => { expect( choices.some((choice) => choice.label.includes('[project|user]')), ).toBe(true); + expect(choices.find((choice) => choice.value === 'docs')?.checked).toBe( + true, + ); expect( choices.find((choice) => choice.value === 'project-management')?.checked, ).toBe(false); @@ -248,6 +260,7 @@ describe('createInitToolsCommand', () => { const { command, installCore, + installDocs, installIdeas, installWorkflows, installUtility, @@ -264,6 +277,9 @@ describe('createInitToolsCommand', () => { expect(installIdeas).toHaveBeenCalledWith( expect.objectContaining({ targetRoot: '/tmp/workspace' }), ); + expect(installDocs).toHaveBeenCalledWith( + expect.objectContaining({ targetRoot: '/tmp/workspace' }), + ); expect(installWorkflows).toHaveBeenCalledWith( expect.objectContaining({ targetRoot: '/tmp/workspace' }), ); diff --git a/packages/cli/src/commands/init/tools/index.ts b/packages/cli/src/commands/init/tools/index.ts index b1800559..956af348 100644 --- a/packages/cli/src/commands/init/tools/index.ts +++ b/packages/cli/src/commands/init/tools/index.ts @@ -36,6 +36,13 @@ import { type InstallCoreOptions, type InstallCoreResult, } from './core/install-core'; +import { createInitToolsDocsCommand } from './docs'; +import { + DOCS_SKILLS, + installDocs as defaultInstallDocs, + type InstallDocsOptions, + type InstallDocsResult, +} from './docs/install-docs'; import { createInitToolsIdeasCommand } from './ideas'; import { installIdeas as defaultInstallIdeas, @@ -73,6 +80,7 @@ type InstallScope = 'project' | 'user'; export type ToolPack = | 'core' | 'ideas' + | 'docs' | 'workflows' | 'utility' | 'project-management' @@ -94,6 +102,7 @@ interface InitToolsDependencies { ctx: PromptContext, ) => Promise; installCore: (options: InstallCoreOptions) => Promise; + installDocs: (options: InstallDocsOptions) => Promise; installIdeas: (options: InstallIdeasOptions) => Promise; installWorkflows: ( options: InstallWorkflowsOptions, @@ -144,6 +153,7 @@ function formatVersionForDisplay(version: string | null): string { const PACK_CHOICES: MultiSelectChoice[] = [ { label: 'Core [user]', value: 'core', checked: true }, { label: 'Ideas [project|user]', value: 'ideas', checked: true }, + { label: 'Docs [project|user]', value: 'docs', checked: true }, { label: 'Project Management [project]', value: 'project-management', @@ -162,6 +172,7 @@ const DEFAULT_DEPENDENCIES: InitToolsDependencies = { selectManyWithAbort, selectWithAbort, installCore: defaultInstallCore, + installDocs: defaultInstallDocs, installIdeas: defaultInstallIdeas, installWorkflows: defaultInstallWorkflows, installUtility: defaultInstallUtility, @@ -178,6 +189,7 @@ const DEFAULT_DEPENDENCIES: InitToolsDependencies = { const USER_ELIGIBLE_PACKS: ReadonlySet = new Set([ 'ideas', + 'docs', 'utility', 'research', ]); @@ -311,6 +323,7 @@ async function updateOutdatedSkills( const PACK_DESCRIPTIONS: Record = { core: 'Diagnostics and documentation (oat-doctor, oat-docs)', + docs: 'Documentation and instruction governance workflows', workflows: 'Project lifecycle (create, discover, plan, implement, review, complete)', ideas: 'Idea capture and refinement', @@ -377,7 +390,7 @@ export async function runInitTools( PACK_CHOICES, { interactive: context.interactive }, )) ?? []) - : ['core', 'ideas', 'workflows', 'utility', 'research']; + : ['core', 'ideas', 'docs', 'workflows', 'utility', 'research']; if (!context.interactive) { selectedPacks.push('project-management'); @@ -431,6 +444,18 @@ export async function runInitTools( } } + if (selectedPacks.includes('docs')) { + const targetRoot = packRoot('docs'); + const docsResult = await dependencies.installDocs({ + assetsRoot, + targetRoot, + skills: [...DOCS_SKILLS], + }); + for (const skill of docsResult.outdatedSkills) { + outdatedSkills.push({ ...skill, targetRoot }); + } + } + if (selectedPacks.includes('workflows')) { const workflowsResult = await dependencies.installWorkflows({ assetsRoot, @@ -621,10 +646,11 @@ export function createInitToolsCommand( return new Command('tools') .description( - 'Install OAT tool packs (core, ideas, workflows, utility, project-management, research)', + 'Install OAT tool packs (core, ideas, docs, workflows, utility, project-management, research)', ) .addCommand(createInitToolsCoreCommand()) .addCommand(createInitToolsIdeasCommand()) + .addCommand(createInitToolsDocsCommand()) .addCommand(createInitToolsProjectManagementCommand()) .addCommand(createInitToolsWorkflowsCommand()) .addCommand(createInitToolsUtilityCommand()) diff --git a/packages/cli/src/commands/init/tools/shared/bundle-consistency.test.ts b/packages/cli/src/commands/init/tools/shared/bundle-consistency.test.ts index 291d211d..baed4165 100644 --- a/packages/cli/src/commands/init/tools/shared/bundle-consistency.test.ts +++ b/packages/cli/src/commands/init/tools/shared/bundle-consistency.test.ts @@ -4,6 +4,7 @@ import { join } from 'node:path'; import { describe, expect, it } from 'vitest'; import { CORE_SKILLS } from '../core/install-core'; +import { DOCS_SKILLS } from '../docs/install-docs'; import { IDEA_SKILLS } from '../ideas/install-ideas'; import { PROJECT_MANAGEMENT_SKILLS } from '../project-management/install-project-management'; import { RESEARCH_SKILLS } from '../research/install-research'; @@ -83,6 +84,16 @@ describe('bundle-assets.sh consistency', () => { ).toEqual([]); }); + it('bundles every docs skill', () => { + const missing = DOCS_SKILLS.filter( + (skill) => !bundleSkills.includes(skill), + ); + expect( + missing, + `Missing from bundle-assets.sh SKILLS array: ${missing.join(', ')}`, + ).toEqual([]); + }); + it('bundles every utility skill', () => { const missing = UTILITY_SKILLS.filter( (skill) => !bundleSkills.includes(skill), @@ -128,6 +139,7 @@ describe('bundle-assets.sh consistency', () => { ...CORE_SKILLS, ...WORKFLOW_SKILLS, ...IDEA_SKILLS, + ...DOCS_SKILLS, ...UTILITY_SKILLS, ...PROJECT_MANAGEMENT_SKILLS, ...RESEARCH_SKILLS, diff --git a/packages/cli/src/commands/init/tools/shared/skill-manifest.ts b/packages/cli/src/commands/init/tools/shared/skill-manifest.ts index fe40f3a0..f94c5f3c 100644 --- a/packages/cli/src/commands/init/tools/shared/skill-manifest.ts +++ b/packages/cli/src/commands/init/tools/shared/skill-manifest.ts @@ -69,14 +69,19 @@ export const IDEA_SKILLS = [ export const CORE_SKILLS = ['oat-docs', 'oat-doctor'] as const; -// ── Utility pack ─────────────────────────────────────────────────── +// ── Docs pack ───────────────────────────────────────────────────── -export const UTILITY_SKILLS = [ - 'create-agnostic-skill', +export const DOCS_SKILLS = [ 'oat-agent-instructions-analyze', 'oat-agent-instructions-apply', 'oat-docs-analyze', 'oat-docs-apply', +] as const; + +// ── Utility pack ─────────────────────────────────────────────────── + +export const UTILITY_SKILLS = [ + 'create-agnostic-skill', 'oat-repo-maintainability-review', 'oat-review-provide', 'oat-review-receive', From 645a43bdad3fd67c6f9e848270e615912ae21340 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 15:01:27 -0500 Subject: [PATCH 02/23] chore(oat): update tracking artifacts for p01-t01 --- .../shared/docs-pack-split/implementation.md | 239 +++++++++++++++ .oat/projects/shared/docs-pack-split/plan.md | 281 ++++++++++++++++++ .oat/projects/shared/docs-pack-split/state.md | 53 ++++ 3 files changed, 573 insertions(+) create mode 100644 .oat/projects/shared/docs-pack-split/implementation.md create mode 100644 .oat/projects/shared/docs-pack-split/plan.md create mode 100644 .oat/projects/shared/docs-pack-split/state.md diff --git a/.oat/projects/shared/docs-pack-split/implementation.md b/.oat/projects/shared/docs-pack-split/implementation.md new file mode 100644 index 00000000..b2d28adc --- /dev/null +++ b/.oat/projects/shared/docs-pack-split/implementation.md @@ -0,0 +1,239 @@ +--- +oat_status: in_progress +oat_ready_for: null +oat_blockers: [] +oat_last_updated: 2026-03-20 +oat_current_task_id: p01-t02 +oat_generated: false +--- + +# Implementation: docs-pack-split + +**Started:** 2026-03-20 +**Last Updated:** 2026-03-20 + +> This document is used to resume interrupted implementation sessions. +> +> Conventions: +> +> - `oat_current_task_id` always points at the **next plan task to do** (not the last completed task). +> - When all plan tasks are complete, set `oat_current_task_id: null`. +> - Reviews are **not** plan tasks. Track review status in `plan.md` under `## Reviews` (e.g., `| final | code | passed | ... |`). +> - Keep phase/task statuses consistent with the Progress Overview table so restarts resume correctly. +> - Before running the `oat-project-pr-final` skill, ensure `## Final Summary (for PR/docs)` is filled with what was actually implemented. + +## Progress Overview + +| Phase | Status | Tasks | Completed | +| ------- | ----------- | ----- | --------- | +| Phase 1 | in_progress | 2 | 1/2 | +| Phase 2 | pending | 2 | 0/2 | + +**Total:** 1/4 tasks completed + +--- + +## Phase 1: Add the Docs Pack to the CLI Model + +**Status:** in_progress +**Started:** 2026-03-20 + +### Phase Summary (fill when phase is complete) + +**Outcome (what changed):** + +- {2-5 bullets describing user-visible / behavior-level changes delivered in this phase} + +**Key files touched:** + +- `{path}` - {why} + +**Verification:** + +- Run: `{command(s)}` +- Result: {pass/fail + notes} + +**Notes / Decisions:** + +- {trade-offs or deviations discovered during implementation} + +### Task p01-t01: Introduce the `docs` pack manifest and installer command + +**Status:** completed +**Commit:** 983e23bc564ffe09328fc189f00876ee2d0c2deb + +**Outcome (required when completed):** + +- Added a first-class `docs` pack installer command under `oat init tools` + with project/user scope behavior matching the current user-eligible packs. +- Split docs and agent-instructions analyze/apply skills out of + `UTILITY_SKILLS` into a dedicated `DOCS_SKILLS` manifest entry. +- Wired the main init-tools command to recognize `docs` in pack selection, + default non-interactive installs, and AGENTS.md tool-pack descriptions. +- Added dedicated installer tests plus updated init-tools and bundle + consistency coverage for the new pack. + +**Files changed:** + +- `packages/cli/src/commands/init/tools/docs/index.ts` - new docs-pack command +- `packages/cli/src/commands/init/tools/docs/index.test.ts` - command tests +- `packages/cli/src/commands/init/tools/docs/install-docs.ts` - docs skill installer +- `packages/cli/src/commands/init/tools/docs/install-docs.test.ts` - installer tests +- `packages/cli/src/commands/init/tools/index.ts` - main pack registration and install flow +- `packages/cli/src/commands/init/tools/index.test.ts` - init-tools expectations +- `packages/cli/src/commands/init/tools/shared/skill-manifest.ts` - new pack manifest split +- `packages/cli/src/commands/init/tools/shared/bundle-consistency.test.ts` - bundle coverage for docs pack + +**Verification:** + +- Run: `pnpm --filter @oat/cli exec vitest run src/commands/init/tools/docs/install-docs.test.ts src/commands/init/tools/docs/index.test.ts src/commands/init/tools/index.test.ts src/commands/init/tools/shared/bundle-consistency.test.ts` +- Result: pass +- Run: `pnpm --filter @oat/cli lint && pnpm --filter @oat/cli type-check` +- Result: pass + +**Notes / Decisions:** + +- Used direct `vitest` execution for task-owned files because the package test + script fan-outs into unrelated suites that belong to later plan tasks. +- Kept `oat-docs` in `core` while making `docs` a user-eligible pack. + +--- + +### Task p01-t02: Propagate `docs` pack support through tool management and legacy removal flows + +**Status:** pending +**Commit:** - + +**Notes:** + +- Update scanning, list/update/remove flows, legacy `remove skills --pack`, and + help snapshots after the new pack exists in the installer path. + +--- + +## Phase 2: Decouple Shared Assets and Refresh Documentation + +**Status:** pending +**Started:** - + +### Task p02-t01: Move the shared tracking helper to a neutral location and update skill references + +**Status:** pending +**Commit:** - + +--- + +### Task p02-t02: Update product docs and examples for the new pack layout + +**Status:** pending +**Commit:** - + +--- + +## Orchestration Runs + +> This section is used by `oat-project-subagent-implement` to log parallel execution runs. +> Each run appends a new subsection — never overwrite prior entries. +> For single-thread execution (via `oat-project-implement`), this section remains empty. + + + + +--- + +## Implementation Log + +Chronological log of implementation progress. + +### 2026-03-20 + +**Session Start:** {time} + +- [x] p01-t01: Introduce the `docs` pack manifest and installer command - 983e23bc +- [ ] p01-t02: Propagate `docs` pack support through tool management and legacy removal flows +- [ ] p02-t01: Move the shared tracking helper to a neutral location and update skill references +- [ ] p02-t02: Update product docs and examples for the new pack layout + +**What changed (high level):** + +- Quick-mode OAT project scaffolded for the docs-pack split +- Discovery captured and approved path selected +- Implementation plan generated with four executable tasks +- Added the `docs` pack installer, manifest split, and task-owned test coverage + +**Decisions:** + +- Keep `oat-docs` in `core` and move the four analyze/apply workflows into a + new `docs` pack +- Treat helper relocation as first-class implementation work so the new pack + has no hidden dependency on `oat-agent-instructions-analyze` +- Use direct `vitest` file execution for task verification when the package + script would pull in unrelated suites from later tasks + +**Follow-ups / TODO:** + +- Confirm the best neutral shared-script home before implementing `p02-t01` +- Sweep for any remaining pack mentions outside the currently identified docs pages + +**Blockers:** + +- None - plan is ready for implementation + +**Session End:** {time} + +--- + +### 2026-03-20 + +**Session Start:** {time} + +{Continue log...} + +--- + +## Deviations from Plan + +Document any deviations from the original plan. + +| Task | Planned | Actual | Reason | +| ---- | ------- | ------ | ------ | +| - | - | - | - | + +## Test Results + +Track test execution during implementation. + +| Phase | Tests Run | Passed | Failed | Coverage | +| ----- | --------- | ------ | ------ | -------- | +| 1 | - | - | - | - | +| 2 | - | - | - | - | + +## Final Summary (for PR/docs) + +**What shipped:** + +- Not yet implemented + +**Behavioral changes (user-facing):** + +- Not yet implemented + +**Key files / modules:** + +- `packages/cli/src/commands/init/tools/` - pack installer and manifest work +- `packages/cli/src/commands/tools/` - pack lifecycle and scan/update/remove behavior +- `apps/oat-docs/docs/` - end-user docs for the new pack layout + +**Verification performed:** + +- Planning only - no implementation verification yet + +**Design deltas (if any):** + +- No design artifact used in this quick-mode project + +## References + +- Plan: `plan.md` +- Design: `design.md` +- Spec: `spec.md` diff --git a/.oat/projects/shared/docs-pack-split/plan.md b/.oat/projects/shared/docs-pack-split/plan.md new file mode 100644 index 00000000..e56e78b8 --- /dev/null +++ b/.oat/projects/shared/docs-pack-split/plan.md @@ -0,0 +1,281 @@ +--- +oat_status: complete +oat_ready_for: oat-project-implement +oat_blockers: [] +oat_last_updated: 2026-03-20 +oat_phase: plan +oat_phase_status: complete +oat_plan_hill_phases: ['p02'] # phases to pause AFTER completing (empty = every phase) +oat_plan_source: quick # spec-driven | quick | imported +oat_import_reference: null # e.g., references/imported-plan.md +oat_import_source_path: null # original source path provided by user +oat_import_provider: null # codex | cursor | claude | null +oat_generated: false +--- + +# Implementation Plan: docs-pack-split + +> Execute this plan using `oat-project-implement` (sequential) or `oat-project-subagent-implement` (parallel), with phase checkpoints and review gates. + +**Goal:** Split docs-related analyze/apply workflows into a dedicated `docs` +tool pack while keeping `oat-docs` in `core`, then update supporting CLI +commands, shared assets, and end-user documentation so pack behavior and docs +stay aligned. + +**Architecture:** Extend the existing pack model by adding a first-class `docs` +pack alongside the current bundled packs, then propagate that new pack through +installer commands, pack scanning and lifecycle commands, shared helper asset +locations, and the docs/help surface. + +**Tech Stack:** TypeScript CLI commands and Vitest tests in `packages/cli`, +shell asset bundling scripts, Markdown docs in `apps/oat-docs/docs`, and skill +metadata under `.agents/skills`. + +**Commit Convention:** `{type}({scope}): {description}` - e.g., `feat(p01-t01): add user auth endpoint` + +## Planning Checklist + +- [x] Confirmed HiLL checkpoints with user +- [x] Set `oat_plan_hill_phases` in frontmatter + +--- + +## Phase 1: Add the Docs Pack to the CLI Model + +### Task p01-t01: Introduce the `docs` pack manifest and installer command + +**Files:** + +- Create: `packages/cli/src/commands/init/tools/docs/index.ts` +- Create: `packages/cli/src/commands/init/tools/docs/index.test.ts` +- Create: `packages/cli/src/commands/init/tools/docs/install-docs.ts` +- Create: `packages/cli/src/commands/init/tools/docs/install-docs.test.ts` +- Modify: `packages/cli/src/commands/init/tools/shared/skill-manifest.ts` +- Modify: `packages/cli/src/commands/init/tools/index.ts` +- Modify: `packages/cli/src/commands/init/tools/shared/bundle-consistency.test.ts` + +**Step 1: Write test (RED)** + +Add failing tests for the new `docs` pack manifest, installer behavior, and +init-tools command registration. + +Run: `pnpm --filter @oat/cli test -- src/commands/init/tools/docs/install-docs.test.ts src/commands/init/tools/docs/index.test.ts src/commands/init/tools/index.test.ts src/commands/init/tools/shared/bundle-consistency.test.ts` +Expected: Test fails (RED) + +**Step 2: Implement (GREEN)** + +Add `DOCS_SKILLS`, implement the new docs-pack installer command, wire the pack +into init-tools selection and descriptions, and keep bundle consistency tests in +sync with the new manifest. + +Run: `pnpm --filter @oat/cli test -- src/commands/init/tools/docs/install-docs.test.ts src/commands/init/tools/docs/index.test.ts src/commands/init/tools/index.test.ts src/commands/init/tools/shared/bundle-consistency.test.ts` +Expected: Test passes (GREEN) + +**Step 3: Refactor** + +Refine pack descriptions and installer defaults so `docs` reads consistently +next to `core`, `utility`, and the other bundled packs. + +**Step 4: Verify** + +Run: `pnpm --filter @oat/cli lint && pnpm --filter @oat/cli type-check` +Expected: No errors + +**Step 5: Commit** + +```bash +git add packages/cli/src/commands/init/tools +git commit -m "feat(p01-t01): add docs tool pack installer" +``` + +--- + +### Task p01-t02: Propagate `docs` pack support through tool management and legacy removal flows + +**Files:** + +- Modify: `packages/cli/src/commands/tools/shared/types.ts` +- Modify: `packages/cli/src/commands/tools/shared/scan-tools.ts` +- Modify: `packages/cli/src/commands/tools/shared/scan-tools.test.ts` +- Modify: `packages/cli/src/commands/tools/list/list-tools.test.ts` +- Modify: `packages/cli/src/commands/tools/update/index.ts` +- Modify: `packages/cli/src/commands/tools/update/update-tools.test.ts` +- Modify: `packages/cli/src/commands/tools/remove/index.ts` +- Modify: `packages/cli/src/commands/tools/remove/remove-tools.test.ts` +- Modify: `packages/cli/src/commands/remove/skills/remove-skills.ts` +- Modify: `packages/cli/src/commands/remove/skills/remove-skills.test.ts` +- Modify: `packages/cli/src/commands/help-snapshots.test.ts` + +**Step 1: Write test (RED)** + +Add or update failing tests that expect `docs` pack membership in scan/list +results, tool update/remove pack validation, legacy `remove skills --pack` +support, and help snapshot output. + +**Step 2: Implement (GREEN)** + +Update pack unions, scanners, pack validators, and help text so the new pack is +handled anywhere pack names are parsed or displayed. + +**Step 3: Refactor** + +Remove duplicated pack-name literals where practical so future pack additions do +not require as much manual synchronization. + +**Step 4: Verify** + +Run: `pnpm --filter @oat/cli test -- src/commands/tools/shared/scan-tools.test.ts src/commands/tools/list/list-tools.test.ts src/commands/tools/update/update-tools.test.ts src/commands/tools/remove/remove-tools.test.ts src/commands/remove/skills/remove-skills.test.ts src/commands/help-snapshots.test.ts` +Expected: Updated pack management tests and help snapshots pass + +**Step 5: Commit** + +```bash +git add packages/cli/src/commands/tools packages/cli/src/commands/remove packages/cli/src/commands/help-snapshots.test.ts +git commit -m "feat(p01-t02): wire docs pack through tool management" +``` + +--- + +## Phase 2: Decouple Shared Assets and Refresh Documentation + +### Task p02-t01: Move the shared tracking helper to a neutral location and update skill references + +**Files:** + +- Create or move: neutral shared tracking helper location +- Modify: `.agents/skills/oat-agent-instructions-analyze/SKILL.md` +- Modify: `.agents/skills/oat-agent-instructions-apply/SKILL.md` +- Modify: `.agents/skills/oat-docs-analyze/SKILL.md` +- Modify: `.agents/skills/oat-docs-apply/SKILL.md` +- Modify: `packages/cli/scripts/bundle-assets.sh` +- Modify: any tests or asset expectations that depend on the helper path + +**Step 1: Write test (RED)** + +Add or update checks that fail while docs skills still reference a helper inside +another skill's directory or while the neutral helper is not bundled correctly. + +Run: `rg -n "oat-agent-instructions-analyze/scripts/resolve-tracking.sh|resolve-tracking.sh" .agents/skills packages/cli/scripts` +Expected: Current references reveal the old cross-pack coupling + +**Step 2: Implement (GREEN)** + +Move the tracking helper to a neutral shared location, update all skill +references, and ensure bundled assets include the helper from its new home. + +Run: `rg -n "resolve-tracking.sh" .agents/skills packages/cli/scripts .oat/scripts` +Expected: Only the new shared path is referenced + +**Step 3: Refactor** + +Tighten helper-path comments and reference notes in the skill docs so future +pack reorganizations do not recreate a hidden dependency. + +**Step 4: Verify** + +Run: `pnpm --filter @oat/cli test -- src/commands/init/tools/shared/bundle-consistency.test.ts && pnpm --filter @oat/cli type-check` +Expected: Asset and CLI checks pass with the helper in its neutral location + +**Step 5: Commit** + +```bash +git add .agents/skills .oat/scripts packages/cli/scripts +git commit -m "refactor(p02-t01): decouple docs pack helper path" +``` + +--- + +### Task p02-t02: Update product docs and examples for the new pack layout + +**Files:** + +- Modify: `README.md` +- Modify: `apps/oat-docs/docs/guide/tool-packs.md` +- Modify: `apps/oat-docs/docs/guide/getting-started.md` +- Modify: `apps/oat-docs/docs/guide/cli-reference.md` +- Modify: `apps/oat-docs/docs/guide/documentation/quickstart.md` +- Modify: `apps/oat-docs/docs/guide/documentation/workflows.md` +- Modify: any additional docs pages that still present the moved skills as part + of `utility` + +**Step 1: Write test (RED)** + +Identify stale docs references to `utility` for docs workflows and stale pack +lists that do not mention `docs`. + +Run: `rg -n "utility pack installs|core, ideas, workflows, utility|project-management, research|oat init tools utility|docs analysis and apply skills installed via the utility pack" README.md apps/oat-docs/docs` +Expected: Existing docs still reflect the pre-split pack model + +**Step 2: Implement (GREEN)** + +Update pack lists, installation examples, and docs workflow guidance so user +documentation matches the new `core`/`docs`/`utility` split. + +Run: `rg -n "oat init tools docs|docs pack|utility pack installs" README.md apps/oat-docs/docs` +Expected: Docs references reflect the new pack and no stale guidance remains in +the touched pages + +**Step 3: Refactor** + +Trim duplicate explanations where a single canonical pack description page can +be referenced instead of restating the same taxonomy. + +**Step 4: Verify** + +Run: `pnpm --filter oat-docs docs:lint && pnpm build:docs` +Expected: Markdown lint and docs build pass + +**Step 5: Commit** + +```bash +git add README.md apps/oat-docs/docs +git commit -m "docs(p02-t02): document docs tool pack split" +``` + +--- + +## Reviews + +{Track reviews here after running the oat-project-review-provide and oat-project-review-receive skills.} + +{Keep both code + artifact rows below. Add additional code rows (p03, p04, etc.) as needed, but do not delete `spec`/`design`.} + +| Scope | Type | Status | Date | Artifact | +| ------ | -------- | ------- | ---- | -------- | +| p01 | code | pending | - | - | +| p02 | code | pending | - | - | +| final | code | pending | - | - | +| spec | artifact | pending | - | - | +| design | artifact | pending | - | - | + +**Status values:** `pending` → `received` → `fixes_added` → `fixes_completed` → `passed` + +**Meaning:** + +- `received`: review artifact exists (not yet converted into fix tasks) +- `fixes_added`: fix tasks were added to the plan (work queued) +- `fixes_completed`: fix tasks implemented, awaiting re-review +- `passed`: re-review run and recorded as passing (no Critical/Important) + +--- + +## Implementation Complete + +**Summary:** + +- Phase 1: 2 tasks - add the docs pack to installer, scanning, update/remove, + and help surfaces +- Phase 2: 2 tasks - decouple shared helper assets and update repository/docs + guidance + +**Total: 4 tasks** + +Ready for code review and merge. + +--- + +## References + +- Discovery: `discovery.md` +- Design: `design.md` (not used in this quick-mode project) +- Spec: `spec.md` (not used in this quick-mode project) diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md new file mode 100644 index 00000000..7f2edc10 --- /dev/null +++ b/.oat/projects/shared/docs-pack-split/state.md @@ -0,0 +1,53 @@ +--- +oat_current_task: p01-t02 +oat_last_commit: 983e23bc564ffe09328fc189f00876ee2d0c2deb +oat_blockers: [] +associated_issues: [] # [{type: backlog|project|jira|linear, ref: "identifier"}] +oat_hill_checkpoints: [] # Configured: which phases require human-in-the-loop lifecycle approval +oat_hill_completed: [] # Progress: which HiLL checkpoints have been completed +oat_parallel_execution: false +oat_phase: implement # Current phase: discovery | spec | design | plan | implement +oat_phase_status: in_progress # Status: in_progress | complete +oat_execution_mode: single-thread # single-thread | subagent-driven +oat_workflow_mode: quick # spec-driven | quick | import +oat_workflow_origin: native # native | imported +oat_docs_updated: null # null | skipped | complete — documentation sync status +oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation +oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived +oat_project_state_updated: '2026-03-20T20:00:29Z' # ISO 8601 UTC timestamp — updated on every state.md mutation +oat_generated: false +--- + +# Project State: docs-pack-split + +**Status:** Implementing +**Started:** 2026-03-20 +**Last Updated:** 2026-03-20 + +## Current Phase + +Implementation in progress for quick workflow mode + +## Artifacts + +- **Discovery:** `discovery.md` (complete) +- **Spec:** Not created (quick workflow) +- **Design:** Not created (straight-to-plan path) +- **Plan:** `plan.md` (complete, checkpoints: `["p02"]`) +- **Implementation:** `implementation.md` (initialized) + +## Progress + +- ✓ Quick-mode project scaffolded +- ✓ Discovery captured +- ✓ Plan generated +- ✓ `p01-t01` complete +- ⧗ Implementing `p01-t02` + +## Blockers + +None + +## Next Milestone + +Complete `p01-t02` and finish Phase 1 From 90c872e6b8d9c4ce83062bc9afb3701a6c07d604 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 15:03:18 -0500 Subject: [PATCH 03/23] feat(p01-t02): wire docs pack through tool management --- .../cli/src/commands/help-snapshots.test.ts | 17 +++++++------ .../remove/skills/remove-skills.test.ts | 9 +++++++ .../commands/remove/skills/remove-skills.ts | 9 ++++--- .../commands/tools/list/list-tools.test.ts | 2 +- .../cli/src/commands/tools/remove/index.ts | 3 ++- .../tools/remove/remove-tools.test.ts | 2 +- .../commands/tools/shared/scan-tools.test.ts | 25 ++++++++++++++++++- .../src/commands/tools/shared/scan-tools.ts | 2 ++ .../cli/src/commands/tools/shared/types.ts | 1 + .../cli/src/commands/tools/update/index.ts | 3 ++- .../tools/update/update-tools.test.ts | 2 +- 11 files changed, 58 insertions(+), 17 deletions(-) diff --git a/packages/cli/src/commands/help-snapshots.test.ts b/packages/cli/src/commands/help-snapshots.test.ts index d8fd1949..bcebcd55 100644 --- a/packages/cli/src/commands/help-snapshots.test.ts +++ b/packages/cli/src/commands/help-snapshots.test.ts @@ -78,7 +78,7 @@ describe('help output snapshots', () => { -h, --help display help for command Commands: - tools Install OAT tool packs (core, ideas, workflows, utility, + tools Install OAT tool packs (core, ideas, docs, workflows, utility, project-management, research) " `); @@ -287,7 +287,7 @@ describe('help output snapshots', () => { Remove installed skills by pack Options: - --pack Skill pack to remove (ideas|workflows|utility|research) + --pack Skill pack to remove (ideas|docs|workflows|utility|research) --dry-run Preview removal without applying -h, --help display help for command " @@ -597,8 +597,8 @@ describe('help output snapshots', () => { info Show details for an installed tool update [options] [name] Update installed tools to bundled versions remove [options] [name] Remove installed tools - install [options] Install OAT tool packs (core, ideas, workflows, - utility, project-management, research) + install [options] Install OAT tool packs (core, ideas, docs, + workflows, utility, project-management, research) help [command] display help for command " `); @@ -644,8 +644,8 @@ describe('help output snapshots', () => { expect(help).toMatchInlineSnapshot(` "Usage: oat tools install [options] [command] - Install OAT tool packs (core, ideas, workflows, utility, project-management, - research) + Install OAT tool packs (core, ideas, docs, workflows, utility, + project-management, research) Options: --no-sync Skip auto-sync after install @@ -655,6 +655,7 @@ describe('help output snapshots', () => { core [options] Install OAT core skills (diagnostics, docs) ideas [options] Install OAT ideas skills, templates, and idea workflow files + docs [options] Install OAT docs workflow skills project-management [options] Install OAT project-management skills and templates workflows [options] Install OAT workflows skills, agents, @@ -681,7 +682,7 @@ describe('help output snapshots', () => { Options: --pack Remove all tools in a pack - (core|ideas|workflows|utility|project-management|research) + (core|ideas|docs|workflows|utility|project-management|research) --all Remove all installed tools --dry-run Preview removals without applying --no-sync Skip auto-sync after removal @@ -706,7 +707,7 @@ describe('help output snapshots', () => { Options: --pack Update all tools in a pack - (core|ideas|workflows|utility|project-management|research) + (core|ideas|docs|workflows|utility|project-management|research) --all Update all outdated tools --dry-run Preview updates without applying --no-sync Skip auto-sync after update diff --git a/packages/cli/src/commands/remove/skills/remove-skills.test.ts b/packages/cli/src/commands/remove/skills/remove-skills.test.ts index c937349e..4d3db14d 100644 --- a/packages/cli/src/commands/remove/skills/remove-skills.test.ts +++ b/packages/cli/src/commands/remove/skills/remove-skills.test.ts @@ -3,6 +3,7 @@ import { createLoggerCapture, type LoggerCapture, } from '@commands/__tests__/helpers'; +import { DOCS_SKILLS } from '@commands/init/tools/docs/install-docs'; import { RESEARCH_SKILLS } from '@commands/init/tools/research/install-research'; import { UTILITY_SKILLS } from '@commands/init/tools/utility/install-utility'; import { WORKFLOW_SKILLS } from '@commands/init/tools/workflows/install-workflows'; @@ -103,6 +104,14 @@ describe('createRemoveSkillsCommand', () => { expect(process.exitCode).toBe(0); }); + it('runs remove-skill workflow for docs pack members', async () => { + const { command, runRemoveSkill } = createHarness({ interactive: false }); + await runCommand(command, [], ['--pack', 'docs']); + + expect(runRemoveSkill).toHaveBeenCalledTimes(DOCS_SKILLS.length); + expect(process.exitCode).toBe(0); + }); + it('asks for confirmation when interactive and pack has more than 3 skills', async () => { const { command, confirmAction, runRemoveSkill, capture } = createHarness({ interactive: true, diff --git a/packages/cli/src/commands/remove/skills/remove-skills.ts b/packages/cli/src/commands/remove/skills/remove-skills.ts index 387d3293..88d0e56d 100644 --- a/packages/cli/src/commands/remove/skills/remove-skills.ts +++ b/packages/cli/src/commands/remove/skills/remove-skills.ts @@ -1,4 +1,5 @@ import { buildCommandContext, type CommandContext } from '@app/command-context'; +import { DOCS_SKILLS } from '@commands/init/tools/docs/install-docs'; import { IDEA_SKILLS } from '@commands/init/tools/ideas/install-ideas'; import { RESEARCH_SKILLS } from '@commands/init/tools/research/install-research'; import { UTILITY_SKILLS } from '@commands/init/tools/utility/install-utility'; @@ -21,10 +22,11 @@ interface RemoveSkillsOptions { dryRun?: boolean; } -type PackName = 'ideas' | 'workflows' | 'utility' | 'research'; +type PackName = 'ideas' | 'docs' | 'workflows' | 'utility' | 'research'; const PACK_SKILLS: Record = { ideas: IDEA_SKILLS, + docs: DOCS_SKILLS, workflows: WORKFLOW_SKILLS, utility: UTILITY_SKILLS, research: RESEARCH_SKILLS, @@ -56,6 +58,7 @@ function createDependencies(): RemoveSkillsDependencies { function isPackName(value: string): value is PackName { return ( value === 'ideas' || + value === 'docs' || value === 'workflows' || value === 'utility' || value === 'research' @@ -74,7 +77,7 @@ export function createRemoveSkillsCommand( .description('Remove installed skills by pack') .requiredOption( '--pack ', - 'Skill pack to remove (ideas|workflows|utility|research)', + 'Skill pack to remove (ideas|docs|workflows|utility|research)', ) .option('--dry-run', 'Preview removal without applying') .action(async (options: RemoveSkillsOptions, command: Command) => { @@ -86,7 +89,7 @@ export function createRemoveSkillsCommand( const rawPack = (options.pack ?? '').toLowerCase(); if (!isPackName(rawPack)) { throw new Error( - `Invalid pack: ${options.pack}. Expected one of: ideas, workflows, utility, research.`, + `Invalid pack: ${options.pack}. Expected one of: ideas, docs, workflows, utility, research.`, ); } diff --git a/packages/cli/src/commands/tools/list/list-tools.test.ts b/packages/cli/src/commands/tools/list/list-tools.test.ts index d0fcc05c..7f8969a0 100644 --- a/packages/cli/src/commands/tools/list/list-tools.test.ts +++ b/packages/cli/src/commands/tools/list/list-tools.test.ts @@ -54,7 +54,7 @@ describe('runListTools', () => { ...sampleTool, name: 'oat-docs-analyze', scope: 'user', - pack: 'utility', + pack: 'docs', }, ], }); diff --git a/packages/cli/src/commands/tools/remove/index.ts b/packages/cli/src/commands/tools/remove/index.ts index 3ef8cc46..d2218eb9 100644 --- a/packages/cli/src/commands/tools/remove/index.ts +++ b/packages/cli/src/commands/tools/remove/index.ts @@ -56,6 +56,7 @@ const defaultSyncDependencies: AutoSyncDependencies = { const VALID_PACKS = [ 'core', 'ideas', + 'docs', 'workflows', 'utility', 'project-management', @@ -71,7 +72,7 @@ export function createToolsRemoveCommand( .argument('[name]', 'Tool name to remove') .option( '--pack ', - 'Remove all tools in a pack (core|ideas|workflows|utility|project-management|research)', + 'Remove all tools in a pack (core|ideas|docs|workflows|utility|project-management|research)', ) .option('--all', 'Remove all installed tools') .option('--dry-run', 'Preview removals without applying') diff --git a/packages/cli/src/commands/tools/remove/remove-tools.test.ts b/packages/cli/src/commands/tools/remove/remove-tools.test.ts index 04f4880f..58253855 100644 --- a/packages/cli/src/commands/tools/remove/remove-tools.test.ts +++ b/packages/cli/src/commands/tools/remove/remove-tools.test.ts @@ -120,7 +120,7 @@ describe('removeTools', () => { type: 'agent', pack: 'workflows', }), - createTool({ name: 'oat-docs-analyze', pack: 'utility' }), + createTool({ name: 'oat-docs-analyze', pack: 'docs' }), ]; const deps = createDeps({ project: tools }); diff --git a/packages/cli/src/commands/tools/shared/scan-tools.test.ts b/packages/cli/src/commands/tools/shared/scan-tools.test.ts index c668eacd..53c15729 100644 --- a/packages/cli/src/commands/tools/shared/scan-tools.test.ts +++ b/packages/cli/src/commands/tools/shared/scan-tools.test.ts @@ -244,7 +244,7 @@ describe('scanTools', () => { expect(result[0]!.pack).toBe('workflows'); }); - it('detects utility skills pack membership', async () => { + it('detects docs skills pack membership', async () => { const deps = createMockDeps({ readdir: async (path: string) => { if (path.includes('.agents/skills')) return ['oat-docs-analyze']; @@ -264,6 +264,29 @@ describe('scanTools', () => { dependencies: deps, }); + expect(result[0]!.pack).toBe('docs'); + }); + + it('detects utility skills pack membership', async () => { + const deps = createMockDeps({ + readdir: async (path: string) => { + if (path.includes('.agents/skills')) return ['create-agnostic-skill']; + return []; + }, + dirExists: async (path: string) => { + if (path.includes('assets/skills/create-agnostic-skill')) return true; + return false; + }, + getSkillVersion: async () => '1.0.0', + }); + + const result = await scanTools({ + scope: 'user', + scopeRoot: '/home/user', + assetsRoot: '/assets', + dependencies: deps, + }); + expect(result[0]!.pack).toBe('utility'); }); diff --git a/packages/cli/src/commands/tools/shared/scan-tools.ts b/packages/cli/src/commands/tools/shared/scan-tools.ts index 563a4f81..552b6da2 100644 --- a/packages/cli/src/commands/tools/shared/scan-tools.ts +++ b/packages/cli/src/commands/tools/shared/scan-tools.ts @@ -2,6 +2,7 @@ import { readdir } from 'node:fs/promises'; import { join } from 'node:path'; import { CORE_SKILLS } from '@commands/init/tools/core/install-core'; +import { DOCS_SKILLS } from '@commands/init/tools/docs/install-docs'; import { IDEA_SKILLS } from '@commands/init/tools/ideas/install-ideas'; import { RESEARCH_AGENTS, @@ -59,6 +60,7 @@ const defaultDependencies: ScanToolsDependencies = { function resolveSkillPack(name: string): PackName | 'custom' { if ((CORE_SKILLS as readonly string[]).includes(name)) return 'core'; if ((IDEA_SKILLS as readonly string[]).includes(name)) return 'ideas'; + if ((DOCS_SKILLS as readonly string[]).includes(name)) return 'docs'; if ((WORKFLOW_SKILLS as readonly string[]).includes(name)) return 'workflows'; if ((UTILITY_SKILLS as readonly string[]).includes(name)) return 'utility'; if ((PROJECT_MANAGEMENT_SKILLS as readonly string[]).includes(name)) diff --git a/packages/cli/src/commands/tools/shared/types.ts b/packages/cli/src/commands/tools/shared/types.ts index e814df12..b70fb96d 100644 --- a/packages/cli/src/commands/tools/shared/types.ts +++ b/packages/cli/src/commands/tools/shared/types.ts @@ -3,6 +3,7 @@ import type { ConcreteScope } from '@shared/types'; export type PackName = | 'core' | 'ideas' + | 'docs' | 'workflows' | 'utility' | 'project-management' diff --git a/packages/cli/src/commands/tools/update/index.ts b/packages/cli/src/commands/tools/update/index.ts index e4c853a1..711f3084 100644 --- a/packages/cli/src/commands/tools/update/index.ts +++ b/packages/cli/src/commands/tools/update/index.ts @@ -56,6 +56,7 @@ const defaultSyncDependencies: AutoSyncDependencies = { const VALID_PACKS = [ 'core', 'ideas', + 'docs', 'workflows', 'utility', 'project-management', @@ -71,7 +72,7 @@ export function createToolsUpdateCommand( .argument('[name]', 'Tool name to update') .option( '--pack ', - 'Update all tools in a pack (core|ideas|workflows|utility|project-management|research)', + 'Update all tools in a pack (core|ideas|docs|workflows|utility|project-management|research)', ) .option('--all', 'Update all outdated tools') .option('--dry-run', 'Preview updates without applying') diff --git a/packages/cli/src/commands/tools/update/update-tools.test.ts b/packages/cli/src/commands/tools/update/update-tools.test.ts index cde57d45..a394516c 100644 --- a/packages/cli/src/commands/tools/update/update-tools.test.ts +++ b/packages/cli/src/commands/tools/update/update-tools.test.ts @@ -175,7 +175,7 @@ describe('updateTools', () => { createTool({ name: 'oat-project-new', pack: 'workflows' }), createTool({ name: 'oat-docs-analyze', - pack: 'utility', + pack: 'docs', status: 'current', }), ]; From cc6b5765e619d220ed7512632f02713bb04c549d Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 15:04:38 -0500 Subject: [PATCH 04/23] chore(oat): update tracking artifacts for p01 completion --- .../shared/docs-pack-split/implementation.md | 89 +++++++++++++++---- .oat/projects/shared/docs-pack-split/state.md | 11 +-- 2 files changed, 76 insertions(+), 24 deletions(-) diff --git a/.oat/projects/shared/docs-pack-split/implementation.md b/.oat/projects/shared/docs-pack-split/implementation.md index b2d28adc..fe66a16a 100644 --- a/.oat/projects/shared/docs-pack-split/implementation.md +++ b/.oat/projects/shared/docs-pack-split/implementation.md @@ -3,7 +3,7 @@ oat_status: in_progress oat_ready_for: null oat_blockers: [] oat_last_updated: 2026-03-20 -oat_current_task_id: p01-t02 +oat_current_task_id: p02-t01 oat_generated: false --- @@ -26,36 +26,54 @@ oat_generated: false | Phase | Status | Tasks | Completed | | ------- | ----------- | ----- | --------- | -| Phase 1 | in_progress | 2 | 1/2 | -| Phase 2 | pending | 2 | 0/2 | +| Phase 1 | completed | 2 | 2/2 | +| Phase 2 | in_progress | 2 | 0/2 | -**Total:** 1/4 tasks completed +**Total:** 2/4 tasks completed --- ## Phase 1: Add the Docs Pack to the CLI Model -**Status:** in_progress +**Status:** completed **Started:** 2026-03-20 -### Phase Summary (fill when phase is complete) +### Phase Summary **Outcome (what changed):** -- {2-5 bullets describing user-visible / behavior-level changes delivered in this phase} +- Added a dedicated `docs` pack to the installer model without moving + foundational `oat-docs` out of `core`. +- Split docs and agent-instructions workflow skills out of `utility` and into + pack-aware CLI metadata plus installer flows. +- Propagated the new pack name through tool scanning, update/remove targeting, + legacy `remove skills --pack`, and CLI help output. **Key files touched:** -- `{path}` - {why} +- `packages/cli/src/commands/init/tools/` - new docs pack installer and main + pack registration +- `packages/cli/src/commands/tools/shared/scan-tools.ts` - pack detection for installed tools +- `packages/cli/src/commands/tools/update/index.ts` - update pack validation +- `packages/cli/src/commands/tools/remove/index.ts` - remove pack validation +- `packages/cli/src/commands/remove/skills/remove-skills.ts` - legacy skill-pack removal support +- `packages/cli/src/commands/help-snapshots.test.ts` - CLI help expectations **Verification:** -- Run: `{command(s)}` -- Result: {pass/fail + notes} +- Run: `pnpm --filter @oat/cli exec vitest run src/commands/init/tools/docs/install-docs.test.ts src/commands/init/tools/docs/index.test.ts src/commands/init/tools/index.test.ts src/commands/init/tools/shared/bundle-consistency.test.ts` +- Result: pass +- Run: `pnpm --filter @oat/cli exec vitest run src/commands/tools/shared/scan-tools.test.ts src/commands/tools/list/list-tools.test.ts src/commands/tools/update/update-tools.test.ts src/commands/tools/remove/remove-tools.test.ts src/commands/remove/skills/remove-skills.test.ts src/commands/help-snapshots.test.ts` +- Result: pass +- Run: `pnpm --filter @oat/cli lint && pnpm --filter @oat/cli type-check` +- Result: pass **Notes / Decisions:** -- {trade-offs or deviations discovered during implementation} +- Direct `vitest` execution remains the reliable way to verify task-owned files + without picking up unrelated suites from later plan tasks. +- Help snapshot updates are part of pack-management scope because the pack names + are user-facing CLI contract, not optional follow-up docs. ### Task p01-t01: Introduce the `docs` pack manifest and installer command @@ -101,20 +119,51 @@ oat_generated: false ### Task p01-t02: Propagate `docs` pack support through tool management and legacy removal flows -**Status:** pending -**Commit:** - +**Status:** completed +**Commit:** e254abe52c00f88cf2a736c94096eafd88cf0fcc + +**Outcome (required when completed):** + +- Added `docs` as a recognized pack across installed-tool scanning and tool info + typing, so moved skills no longer show up as `custom`. +- Updated update/remove command pack validation and help text to accept the new + `docs` pack name. +- Extended legacy `oat remove skills --pack` support to handle `docs`. +- Updated downstream test fixtures and help snapshots to reflect the new pack + taxonomy consistently. -**Notes:** +**Files changed:** + +- `packages/cli/src/commands/tools/shared/types.ts` - pack type union +- `packages/cli/src/commands/tools/shared/scan-tools.ts` - docs pack resolution +- `packages/cli/src/commands/tools/shared/scan-tools.test.ts` - docs and utility pack expectations +- `packages/cli/src/commands/tools/list/list-tools.test.ts` - docs-pack list sample +- `packages/cli/src/commands/tools/update/index.ts` - docs pack validation +- `packages/cli/src/commands/tools/update/update-tools.test.ts` - docs pack fixture +- `packages/cli/src/commands/tools/remove/index.ts` - docs pack validation +- `packages/cli/src/commands/tools/remove/remove-tools.test.ts` - docs pack fixture +- `packages/cli/src/commands/remove/skills/remove-skills.ts` - docs pack legacy removal support +- `packages/cli/src/commands/remove/skills/remove-skills.test.ts` - docs pack removal test +- `packages/cli/src/commands/help-snapshots.test.ts` - CLI help snapshots + +**Verification:** -- Update scanning, list/update/remove flows, legacy `remove skills --pack`, and - help snapshots after the new pack exists in the installer path. +- Run: `pnpm --filter @oat/cli exec vitest run src/commands/tools/shared/scan-tools.test.ts src/commands/tools/list/list-tools.test.ts src/commands/tools/update/update-tools.test.ts src/commands/tools/remove/remove-tools.test.ts src/commands/remove/skills/remove-skills.test.ts src/commands/help-snapshots.test.ts` +- Result: pass +- Run: `pnpm --filter @oat/cli lint && pnpm --filter @oat/cli type-check` +- Result: pass + +**Notes / Decisions:** + +- Updated user-facing help snapshots in the same task because pack-name drift in + help output would otherwise immediately break the CLI contract. --- ## Phase 2: Decouple Shared Assets and Refresh Documentation -**Status:** pending -**Started:** - +**Status:** in_progress +**Started:** 2026-03-20 ### Task p02-t01: Move the shared tracking helper to a neutral location and update skill references @@ -150,7 +199,7 @@ Chronological log of implementation progress. **Session Start:** {time} - [x] p01-t01: Introduce the `docs` pack manifest and installer command - 983e23bc -- [ ] p01-t02: Propagate `docs` pack support through tool management and legacy removal flows +- [x] p01-t02: Propagate `docs` pack support through tool management and legacy removal flows - e254abe5 - [ ] p02-t01: Move the shared tracking helper to a neutral location and update skill references - [ ] p02-t02: Update product docs and examples for the new pack layout @@ -160,6 +209,8 @@ Chronological log of implementation progress. - Discovery captured and approved path selected - Implementation plan generated with four executable tasks - Added the `docs` pack installer, manifest split, and task-owned test coverage +- Wired the `docs` pack through scanning, update/remove flows, legacy removal, + and CLI help output **Decisions:** diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md index 7f2edc10..e21d3cd4 100644 --- a/.oat/projects/shared/docs-pack-split/state.md +++ b/.oat/projects/shared/docs-pack-split/state.md @@ -1,6 +1,6 @@ --- -oat_current_task: p01-t02 -oat_last_commit: 983e23bc564ffe09328fc189f00876ee2d0c2deb +oat_current_task: p02-t01 +oat_last_commit: e254abe52c00f88cf2a736c94096eafd88cf0fcc oat_blockers: [] associated_issues: [] # [{type: backlog|project|jira|linear, ref: "identifier"}] oat_hill_checkpoints: [] # Configured: which phases require human-in-the-loop lifecycle approval @@ -14,7 +14,7 @@ oat_workflow_origin: native # native | imported oat_docs_updated: null # null | skipped | complete — documentation sync status oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived -oat_project_state_updated: '2026-03-20T20:00:29Z' # ISO 8601 UTC timestamp — updated on every state.md mutation +oat_project_state_updated: '2026-03-20T20:03:29Z' # ISO 8601 UTC timestamp — updated on every state.md mutation oat_generated: false --- @@ -42,7 +42,8 @@ Implementation in progress for quick workflow mode - ✓ Discovery captured - ✓ Plan generated - ✓ `p01-t01` complete -- ⧗ Implementing `p01-t02` +- ✓ Phase 1 complete +- ⧗ Implementing `p02-t01` ## Blockers @@ -50,4 +51,4 @@ None ## Next Milestone -Complete `p01-t02` and finish Phase 1 +Complete `p02-t01` and continue Phase 2 From 161b742b5a3f52037f0dd9ac65d3b7b4b2916fe6 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 15:09:26 -0500 Subject: [PATCH 05/23] refactor(p02-t01): decouple docs pack helper path --- .../oat-agent-instructions-analyze/SKILL.md | 10 +++-- .../oat-agent-instructions-apply/SKILL.md | 9 +++-- .agents/skills/oat-docs-analyze/SKILL.md | 6 +-- .agents/skills/oat-docs-apply/SKILL.md | 4 +- .../skills/oat-repo-knowledge-index/SKILL.md | 4 +- .../scripts/resolve-tracking.sh | 22 +++------- packages/cli/scripts/bundle-assets.sh | 2 +- .../commands/init/tools/docs/index.test.ts | 3 ++ .../cli/src/commands/init/tools/docs/index.ts | 3 ++ .../init/tools/docs/install-docs.test.ts | 9 +++++ .../commands/init/tools/docs/install-docs.ts | 40 +++++++++++++++++-- .../init/tools/shared/skill-manifest.ts | 3 ++ .../tools/workflows/install-workflows.test.ts | 10 ++--- 13 files changed, 84 insertions(+), 41 deletions(-) rename {.agents/skills/oat-agent-instructions-analyze => .oat}/scripts/resolve-tracking.sh (88%) mode change 100755 => 100644 diff --git a/.agents/skills/oat-agent-instructions-analyze/SKILL.md b/.agents/skills/oat-agent-instructions-analyze/SKILL.md index 32e9f398..304d2839 100644 --- a/.agents/skills/oat-agent-instructions-analyze/SKILL.md +++ b/.agents/skills/oat-agent-instructions-analyze/SKILL.md @@ -77,6 +77,7 @@ or fill in missing evidence gaps on its own. ```bash SCRIPT_DIR=".agents/skills/oat-agent-instructions-analyze/scripts" +TRACKING_SCRIPT=".oat/scripts/resolve-tracking.sh" PROVIDERS=$(bash "$SCRIPT_DIR/resolve-providers.sh" --non-interactive) # Or with explicit override: # PROVIDERS=$(bash "$SCRIPT_DIR/resolve-providers.sh" --providers claude,cursor) @@ -87,7 +88,7 @@ If running interactively (user invoked the skill directly), omit `--non-interact **Resolve analysis mode (delta vs full):** ```bash -TRACKING=$(bash "$SCRIPT_DIR/resolve-tracking.sh" read agentInstructions) +TRACKING=$(bash "$TRACKING_SCRIPT" read agentInstructions) ``` - If `TRACKING` is non-empty, extract `commitHash` from the JSON. @@ -439,11 +440,12 @@ The markdown artifact and companion bundle together are the contract for apply. **Update tracking:** ```bash -ROOT_TARGET=$(bash "$SCRIPT_DIR/resolve-tracking.sh" root) +TRACKING_SCRIPT=".oat/scripts/resolve-tracking.sh" +ROOT_TARGET=$(bash "$TRACKING_SCRIPT" root) ROOT_HASH=$(echo "$ROOT_TARGET" | jq -r '.commitHash') ROOT_BRANCH=$(echo "$ROOT_TARGET" | jq -r '.baseBranch') -bash "$SCRIPT_DIR/resolve-tracking.sh" write \ +bash "$TRACKING_SCRIPT" write \ agentInstructions \ "$ROOT_HASH" \ "$ROOT_BRANCH" \ @@ -493,6 +495,6 @@ Next step: Run oat-agent-instructions-apply to act on these findings. - Bundle summary template: `references/bundle-summary-template.md` - Bundle manifest template: `references/recommendations-manifest-template.yaml` - Recommendation pack template: `references/recommendation-pack-template.md` -- Tracking script: `scripts/resolve-tracking.sh` +- Tracking script: `.oat/scripts/resolve-tracking.sh` - Provider resolution: `scripts/resolve-providers.sh` - File discovery: `scripts/resolve-instruction-files.sh` diff --git a/.agents/skills/oat-agent-instructions-apply/SKILL.md b/.agents/skills/oat-agent-instructions-apply/SKILL.md index 98fcc041..397861d0 100644 --- a/.agents/skills/oat-agent-instructions-apply/SKILL.md +++ b/.agents/skills/oat-agent-instructions-apply/SKILL.md @@ -156,6 +156,7 @@ Then stop. ```bash SCRIPT_DIR=".agents/skills/oat-agent-instructions-analyze/scripts" +TRACKING_SCRIPT=".oat/scripts/resolve-tracking.sh" PROVIDERS=$(bash "$SCRIPT_DIR/resolve-providers.sh" --non-interactive) ``` @@ -460,12 +461,12 @@ PR creation failed. To create manually: **Update tracking:** ```bash -SCRIPT_DIR=".agents/skills/oat-agent-instructions-analyze/scripts" -ROOT_TARGET=$(bash "$SCRIPT_DIR/resolve-tracking.sh" root) +TRACKING_SCRIPT=".oat/scripts/resolve-tracking.sh" +ROOT_TARGET=$(bash "$TRACKING_SCRIPT" root) ROOT_HASH=$(echo "$ROOT_TARGET" | jq -r '.commitHash') ROOT_BRANCH=$(echo "$ROOT_TARGET" | jq -r '.baseBranch') -bash "$SCRIPT_DIR/resolve-tracking.sh" write \ +bash "$TRACKING_SCRIPT" write \ agentInstructionsApply \ "$ROOT_HASH" \ "$ROOT_BRANCH" \ @@ -503,4 +504,4 @@ Apply complete. - Analysis artifact: `.oat/repo/analysis/agent-instructions-*.md` - Templates: `references/instruction-file-templates/` - Apply plan template: `references/apply-plan-template.md` -- Tracking script: `scripts/resolve-tracking.sh` (symlink to analyze skill) +- Tracking script: `.oat/scripts/resolve-tracking.sh` diff --git a/.agents/skills/oat-docs-analyze/SKILL.md b/.agents/skills/oat-docs-analyze/SKILL.md index 62045d9a..58b9ab2a 100644 --- a/.agents/skills/oat-docs-analyze/SKILL.md +++ b/.agents/skills/oat-docs-analyze/SKILL.md @@ -92,7 +92,7 @@ Prefer the OAT docs app when multiple MkDocs apps exist and one is clearly the a Resolve tracking and analysis mode using the shared helper: ```bash -TRACKING_SCRIPT=".agents/skills/oat-agent-instructions-analyze/scripts/resolve-tracking.sh" +TRACKING_SCRIPT=".oat/scripts/resolve-tracking.sh" TRACKING=$(bash "$TRACKING_SCRIPT" read docs 2>/dev/null || true) ``` @@ -307,7 +307,7 @@ Populate the artifact with: Update docs tracking using the shared helper: ```bash -TRACKING_SCRIPT=".agents/skills/oat-agent-instructions-analyze/scripts/resolve-tracking.sh" +TRACKING_SCRIPT=".oat/scripts/resolve-tracking.sh" ROOT_TARGET=$(bash "$TRACKING_SCRIPT" root) ROOT_HASH=$(echo "$ROOT_TARGET" | jq -r '.commitHash') ROOT_BRANCH=$(echo "$ROOT_TARGET" | jq -r '.baseBranch') @@ -352,4 +352,4 @@ Next step: Run oat-docs-apply to act on these findings. - Analysis artifact template: `references/analysis-artifact-template.md` - Quality checklist: `references/quality-checklist.md` - Directory criteria: `references/directory-assessment-criteria.md` -- Shared tracking helper: `.agents/skills/oat-agent-instructions-analyze/scripts/resolve-tracking.sh` +- Shared tracking helper: `.oat/scripts/resolve-tracking.sh` diff --git a/.agents/skills/oat-docs-apply/SKILL.md b/.agents/skills/oat-docs-apply/SKILL.md index 04323087..6068325b 100644 --- a/.agents/skills/oat-docs-apply/SKILL.md +++ b/.agents/skills/oat-docs-apply/SKILL.md @@ -301,7 +301,7 @@ PR creation failed. To create manually: Update shared tracking: ```bash -TRACKING_SCRIPT=".agents/skills/oat-agent-instructions-analyze/scripts/resolve-tracking.sh" +TRACKING_SCRIPT=".oat/scripts/resolve-tracking.sh" ROOT_TARGET=$(bash "$TRACKING_SCRIPT" root) ROOT_HASH=$(echo "$ROOT_TARGET" | jq -r '.commitHash') ROOT_BRANCH=$(echo "$ROOT_TARGET" | jq -r '.baseBranch') @@ -336,4 +336,4 @@ Next step: Re-run oat-docs-analyze if you want a post-apply verification artifac ## References - Apply plan template: `references/apply-plan-template.md` -- Shared tracking helper: `.agents/skills/oat-agent-instructions-analyze/scripts/resolve-tracking.sh` +- Shared tracking helper: `.oat/scripts/resolve-tracking.sh` diff --git a/.agents/skills/oat-repo-knowledge-index/SKILL.md b/.agents/skills/oat-repo-knowledge-index/SKILL.md index 8e53a0cf..dbba77df 100644 --- a/.agents/skills/oat-repo-knowledge-index/SKILL.md +++ b/.agents/skills/oat-repo-knowledge-index/SKILL.md @@ -675,11 +675,11 @@ Generated from commit: {MERGE_BASE_SHA}" Record the knowledge index run in the shared tracking manifest: ```bash -ROOT_TARGET=$(bash .agents/skills/oat-agent-instructions-analyze/scripts/resolve-tracking.sh root) +ROOT_TARGET=$(bash .oat/scripts/resolve-tracking.sh root) ROOT_HASH=$(echo "$ROOT_TARGET" | jq -r '.commitHash') ROOT_BRANCH=$(echo "$ROOT_TARGET" | jq -r '.baseBranch') -bash .agents/skills/oat-agent-instructions-analyze/scripts/resolve-tracking.sh \ +bash .oat/scripts/resolve-tracking.sh \ write knowledgeIndex "$ROOT_HASH" "$ROOT_BRANCH" full \ --artifact-path ".oat/repo/knowledge/" ``` diff --git a/.agents/skills/oat-agent-instructions-analyze/scripts/resolve-tracking.sh b/.oat/scripts/resolve-tracking.sh old mode 100755 new mode 100644 similarity index 88% rename from .agents/skills/oat-agent-instructions-analyze/scripts/resolve-tracking.sh rename to .oat/scripts/resolve-tracking.sh index 97834dde..e60bcf27 --- a/.agents/skills/oat-agent-instructions-analyze/scripts/resolve-tracking.sh +++ b/.oat/scripts/resolve-tracking.sh @@ -29,11 +29,9 @@ set -euo pipefail -# Resolve repo root and tracking file path REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)" TRACKING_FILE="${REPO_ROOT}/.oat/tracking.json" -# Ensure jq is available if ! command -v jq &>/dev/null; then echo "Error: jq is required but not found in PATH" >&2 exit 1 @@ -139,7 +137,6 @@ cmd_write() { local mode="${4:?Missing mode}" shift 4 - # Parse optional --artifact-path flag before variadic formats local artifact_path="" if [[ "${1:-}" == "--artifact-path" ]]; then artifact_path="${2:?Missing artifact path value after --artifact-path}" @@ -148,7 +145,6 @@ cmd_write() { local formats=("$@") - # Normalize tracking target to root branch tip to keep commitHash resolvable. local normalized_branch normalized_hash normalized_branch="$(detect_root_branch)" normalized_hash="$(resolve_root_commit_hash "$normalized_branch")" @@ -160,7 +156,6 @@ cmd_write() { base_branch="$normalized_branch" commit_hash="$normalized_hash" - # Build formats JSON array local formats_json="[]" if [[ ${#formats[@]} -gt 0 ]]; then formats_json=$(printf '%s\n' "${formats[@]}" | jq -R . | jq -s .) @@ -169,7 +164,6 @@ cmd_write() { local timestamp timestamp="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" - # Read existing or initialize local existing if [[ -f "$TRACKING_FILE" ]] && jq empty "$TRACKING_FILE" 2>/dev/null; then existing="$(cat "$TRACKING_FILE")" @@ -178,7 +172,6 @@ cmd_write() { existing='{"version":1}' fi - # Merge operation entry (include artifactPath only if provided) if [[ -n "$artifact_path" ]]; then echo "$existing" | jq \ --arg op "$operation" \ @@ -216,17 +209,18 @@ cmd_write() { echo "Updated $TRACKING_FILE [$operation]" } -# Dispatch subcommand case "${1:-}" in init) - cmd_init + shift + cmd_init "$@" ;; read) shift cmd_read "$@" ;; root) - cmd_root + shift + cmd_root "$@" ;; write) shift @@ -234,12 +228,6 @@ case "${1:-}" in ;; *) echo "Usage: resolve-tracking.sh {init|read|root|write} [args...]" >&2 - echo "" >&2 - echo "Commands:" >&2 - echo " init Create tracking.json if missing" >&2 - echo " read Read operation entry" >&2 - echo " root Print root branch + commit as JSON" >&2 - echo " write [--artifact-path

] [fmts]" >&2 - exit 1 + exit 2 ;; esac diff --git a/packages/cli/scripts/bundle-assets.sh b/packages/cli/scripts/bundle-assets.sh index 8bddb1a6..87c55fdb 100755 --- a/packages/cli/scripts/bundle-assets.sh +++ b/packages/cli/scripts/bundle-assets.sh @@ -80,7 +80,7 @@ if [ -d "${REPO_ROOT}/apps/oat-docs/docs" ]; then cp -R "${REPO_ROOT}/apps/oat-docs/docs/." "${ASSETS}/docs/" fi -for script in generate-oat-state.sh generate-thin-index.sh; do +for script in generate-oat-state.sh generate-thin-index.sh resolve-tracking.sh; do SOURCE_SCRIPT="${REPO_ROOT}/.oat/scripts/${script}" if [ -f "${SOURCE_SCRIPT}" ]; then cp "${SOURCE_SCRIPT}" "${ASSETS}/scripts/" diff --git a/packages/cli/src/commands/init/tools/docs/index.test.ts b/packages/cli/src/commands/init/tools/docs/index.test.ts index ee310738..6b879792 100644 --- a/packages/cli/src/commands/init/tools/docs/index.test.ts +++ b/packages/cli/src/commands/init/tools/docs/index.test.ts @@ -41,6 +41,9 @@ function createHarness(options: HarnessOptions = {}): { updatedSkills: [], skippedSkills: [], outdatedSkills: [], + copiedScripts: ['resolve-tracking.sh'], + updatedScripts: [], + skippedScripts: [], })); const command = createInitToolsDocsCommand({ diff --git a/packages/cli/src/commands/init/tools/docs/index.ts b/packages/cli/src/commands/init/tools/docs/index.ts index a2d664b3..c5e98dba 100644 --- a/packages/cli/src/commands/init/tools/docs/index.ts +++ b/packages/cli/src/commands/init/tools/docs/index.ts @@ -84,6 +84,9 @@ function reportSuccess( context.logger.info( `Skills: copied=${result.copiedSkills.length}, updated=${result.updatedSkills.length}, skipped=${result.skippedSkills.length}`, ); + context.logger.info( + `Scripts: copied=${result.copiedScripts.length}, updated=${result.updatedScripts.length}, skipped=${result.skippedScripts.length}`, + ); context.logger.info(`Run: oat sync --scope ${scope}`); } diff --git a/packages/cli/src/commands/init/tools/docs/install-docs.test.ts b/packages/cli/src/commands/init/tools/docs/install-docs.test.ts index fb572bc5..af5aeb39 100644 --- a/packages/cli/src/commands/init/tools/docs/install-docs.test.ts +++ b/packages/cli/src/commands/init/tools/docs/install-docs.test.ts @@ -21,6 +21,7 @@ async function seedAssets(assetsRoot: string): Promise { await mkdir(join(assetsRoot, 'skills', 'oat-docs-apply'), { recursive: true, }); + await mkdir(join(assetsRoot, 'scripts'), { recursive: true }); await writeFile( join(assetsRoot, 'skills', 'oat-docs-analyze', 'SKILL.md'), '---\nname: oat-docs-analyze\nversion: 1.0.0\n---\n', @@ -31,6 +32,11 @@ async function seedAssets(assetsRoot: string): Promise { '---\nname: oat-docs-apply\nversion: 1.0.0\n---\n', 'utf8', ); + await writeFile( + join(assetsRoot, 'scripts', 'resolve-tracking.sh'), + '#!/bin/sh\necho tracking\n', + 'utf8', + ); } describe('installDocs', () => { @@ -56,6 +62,7 @@ describe('installDocs', () => { }); expect(result.copiedSkills).toEqual(['oat-docs-analyze']); + expect(result.copiedScripts).toEqual(['resolve-tracking.sh']); expect(result.outdatedSkills).toEqual([]); await expect( readFile( @@ -78,6 +85,7 @@ describe('installDocs', () => { }); expect(result.copiedSkills).toEqual(['oat-docs-apply']); + expect(result.copiedScripts).toEqual(['resolve-tracking.sh']); expect(result.outdatedSkills).toEqual([]); await expect( readFile( @@ -113,6 +121,7 @@ describe('installDocs', () => { expect(result.copiedSkills).toEqual([]); expect(result.updatedSkills).toEqual([]); expect(result.skippedSkills).toEqual([]); + expect(result.skippedScripts).toEqual(['resolve-tracking.sh']); expect(result.outdatedSkills).toEqual([ { name: 'oat-docs-analyze', installed: '1.0.0', bundled: '1.1.0' }, ]); diff --git a/packages/cli/src/commands/init/tools/docs/install-docs.ts b/packages/cli/src/commands/init/tools/docs/install-docs.ts index 2aa97f80..a1c966f9 100644 --- a/packages/cli/src/commands/init/tools/docs/install-docs.ts +++ b/packages/cli/src/commands/init/tools/docs/install-docs.ts @@ -1,9 +1,16 @@ import { join } from 'node:path'; -import { copyDirWithVersionCheck } from '@commands/init/tools/shared/copy-helpers'; -import { DOCS_SKILLS } from '@commands/init/tools/shared/skill-manifest'; +import { + copyDirWithVersionCheck, + copyFileWithStatus, +} from '@commands/init/tools/shared/copy-helpers'; +import { + DOCS_SCRIPTS, + DOCS_SKILLS, +} from '@commands/init/tools/shared/skill-manifest'; +import { fileExists } from '@fs/io'; -export { DOCS_SKILLS }; +export { DOCS_SCRIPTS, DOCS_SKILLS }; export interface InstallDocsOptions { assetsRoot: string; @@ -21,6 +28,9 @@ export interface InstallDocsResult { installed: string | null; bundled: string | null; }>; + copiedScripts: string[]; + updatedScripts: string[]; + skippedScripts: string[]; } export async function installDocs( @@ -32,6 +42,9 @@ export async function installDocs( updatedSkills: [], skippedSkills: [], outdatedSkills: [], + copiedScripts: [], + updatedScripts: [], + skippedScripts: [], }; for (const skill of options.skills) { @@ -58,5 +71,26 @@ export async function installDocs( } } + for (const script of DOCS_SCRIPTS) { + const source = join(options.assetsRoot, 'scripts', script); + const destination = join(options.targetRoot, '.oat', 'scripts', script); + const sourceExists = await fileExists(source); + + if (!sourceExists) { + result.skippedScripts.push(script); + continue; + } + + const copyStatus = await copyFileWithStatus(source, destination, force); + + if (copyStatus === 'copied') { + result.copiedScripts.push(script); + } else if (copyStatus === 'updated') { + result.updatedScripts.push(script); + } else { + result.skippedScripts.push(script); + } + } + return result; } diff --git a/packages/cli/src/commands/init/tools/shared/skill-manifest.ts b/packages/cli/src/commands/init/tools/shared/skill-manifest.ts index f94c5f3c..67c88235 100644 --- a/packages/cli/src/commands/init/tools/shared/skill-manifest.ts +++ b/packages/cli/src/commands/init/tools/shared/skill-manifest.ts @@ -54,6 +54,7 @@ export const WORKFLOW_TEMPLATES = [ export const WORKFLOW_SCRIPTS = [ 'generate-oat-state.sh', 'generate-thin-index.sh', + 'resolve-tracking.sh', ] as const; // ── Ideas pack ───────────────────────────────────────────────────── @@ -78,6 +79,8 @@ export const DOCS_SKILLS = [ 'oat-docs-apply', ] as const; +export const DOCS_SCRIPTS = ['resolve-tracking.sh'] as const; + // ── Utility pack ─────────────────────────────────────────────────── export const UTILITY_SKILLS = [ diff --git a/packages/cli/src/commands/init/tools/workflows/install-workflows.test.ts b/packages/cli/src/commands/init/tools/workflows/install-workflows.test.ts index ab186aac..2fdea511 100644 --- a/packages/cli/src/commands/init/tools/workflows/install-workflows.test.ts +++ b/packages/cli/src/commands/init/tools/workflows/install-workflows.test.ts @@ -78,7 +78,7 @@ describe('installWorkflows', () => { tempDirs.length = 0; }); - it('copies all workflow skills, 2 agents, 6 templates, and 2 scripts on fresh install', async () => { + it('copies all workflow skills, 2 agents, 6 templates, and 3 scripts on fresh install', async () => { const root = await makeTempDir(); const assetsRoot = join(root, 'assets'); const targetRoot = join(root, 'target'); @@ -90,7 +90,7 @@ describe('installWorkflows', () => { expect(result.outdatedSkills).toEqual([]); expect(result.copiedAgents).toHaveLength(2); expect(result.copiedTemplates).toHaveLength(6); - expect(result.copiedScripts).toHaveLength(2); + expect(result.copiedScripts).toHaveLength(3); expect(result.projectsRootInitialized).toBe(true); }); @@ -250,7 +250,7 @@ describe('installWorkflows', () => { const result = await installWorkflows({ assetsRoot, targetRoot }); expect(result.copiedScripts).toEqual([]); - expect(result.skippedScripts).toHaveLength(2); + expect(result.skippedScripts).toHaveLength(3); }); it('skips all items on idempotent re-run', async () => { @@ -270,7 +270,7 @@ describe('installWorkflows', () => { expect(second.outdatedSkills).toEqual([]); expect(second.skippedAgents).toHaveLength(2); expect(second.skippedTemplates).toHaveLength(6); - expect(second.skippedScripts).toHaveLength(2); + expect(second.skippedScripts).toHaveLength(3); }); it('overwrites with force=true, tracking updated arrays', async () => { @@ -296,7 +296,7 @@ describe('installWorkflows', () => { expect(result.outdatedSkills).toEqual([]); expect(result.updatedAgents).toHaveLength(2); expect(result.updatedTemplates).toHaveLength(6); - expect(result.updatedScripts).toHaveLength(2); + expect(result.updatedScripts).toHaveLength(3); }); it('tracks outdated skills without overwriting when not forced', async () => { From 873327d79be50c7679aba7d4d6b1c2e867df1f1c Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 15:11:28 -0500 Subject: [PATCH 06/23] chore(oat): update tracking artifacts for p02-t01 --- .../shared/docs-pack-split/implementation.md | 58 ++++++++++++++++--- .oat/projects/shared/docs-pack-split/state.md | 13 +++-- 2 files changed, 56 insertions(+), 15 deletions(-) diff --git a/.oat/projects/shared/docs-pack-split/implementation.md b/.oat/projects/shared/docs-pack-split/implementation.md index fe66a16a..789acfc4 100644 --- a/.oat/projects/shared/docs-pack-split/implementation.md +++ b/.oat/projects/shared/docs-pack-split/implementation.md @@ -3,7 +3,7 @@ oat_status: in_progress oat_ready_for: null oat_blockers: [] oat_last_updated: 2026-03-20 -oat_current_task_id: p02-t01 +oat_current_task_id: p02-t02 oat_generated: false --- @@ -27,9 +27,9 @@ oat_generated: false | Phase | Status | Tasks | Completed | | ------- | ----------- | ----- | --------- | | Phase 1 | completed | 2 | 2/2 | -| Phase 2 | in_progress | 2 | 0/2 | +| Phase 2 | in_progress | 2 | 1/2 | -**Total:** 2/4 tasks completed +**Total:** 3/4 tasks completed --- @@ -167,8 +167,47 @@ oat_generated: false ### Task p02-t01: Move the shared tracking helper to a neutral location and update skill references -**Status:** pending -**Commit:** - +**Status:** completed +**Commit:** 30234c42dc042de5fccc62b79532830c3e3d2d87 + +**Outcome (required when completed):** + +- Moved the shared tracking resolver to `.oat/scripts/resolve-tracking.sh` so + docs workflows no longer depend on an internal path owned by + `oat-agent-instructions-analyze`. +- Updated docs, agent-instructions, and repo-knowledge-index skill references + to point at the neutral helper location. +- Extended the docs-pack installer and workflow asset expectations so the + shared helper is bundled and installed into `.oat/scripts`. +- Updated task-owned tests and bundling logic to treat the helper as a shared + asset rather than a skill-private script. + +**Files changed:** + +- `.oat/scripts/resolve-tracking.sh` - new neutral helper location +- `.agents/skills/oat-agent-instructions-analyze/SKILL.md` - helper reference update +- `.agents/skills/oat-agent-instructions-apply/SKILL.md` - helper reference update +- `.agents/skills/oat-docs-analyze/SKILL.md` - helper reference update +- `.agents/skills/oat-docs-apply/SKILL.md` - helper reference update +- `.agents/skills/oat-repo-knowledge-index/SKILL.md` - helper reference update +- `packages/cli/src/commands/init/tools/shared/skill-manifest.ts` - shared script manifest entries +- `packages/cli/src/commands/init/tools/docs/install-docs.ts` - docs-pack shared-script installation +- `packages/cli/src/commands/init/tools/docs/index.ts` - installer result reporting +- `packages/cli/src/commands/init/tools/docs/install-docs.test.ts` - shared-script installer coverage +- `packages/cli/src/commands/init/tools/docs/index.test.ts` - command output expectations +- `packages/cli/src/commands/init/tools/workflows/install-workflows.test.ts` - workflow shared-script expectations +- `packages/cli/scripts/bundle-assets.sh` - bundled shared helper asset + +**Verification:** + +- Run: `pnpm --filter @oat/cli exec vitest run src/commands/init/tools/docs/install-docs.test.ts src/commands/init/tools/docs/index.test.ts src/commands/init/tools/workflows/install-workflows.test.ts` +- Result: pass +- Run: `pnpm --filter @oat/cli lint && pnpm --filter @oat/cli type-check` +- Result: pass +- Run: `rg -n "oat-agent-instructions-analyze/scripts/resolve-tracking\\.sh" .agents/skills packages/cli/scripts .oat/scripts -S` +- Result: no matches +- Run: `rg -n "\\.oat/scripts/resolve-tracking\\.sh" .agents/skills .oat/scripts packages/cli/scripts -S` +- Result: only neutral helper references found --- @@ -200,7 +239,7 @@ Chronological log of implementation progress. - [x] p01-t01: Introduce the `docs` pack manifest and installer command - 983e23bc - [x] p01-t02: Propagate `docs` pack support through tool management and legacy removal flows - e254abe5 -- [ ] p02-t01: Move the shared tracking helper to a neutral location and update skill references +- [x] p02-t01: Move the shared tracking helper to a neutral location and update skill references - 30234c42 - [ ] p02-t02: Update product docs and examples for the new pack layout **What changed (high level):** @@ -211,19 +250,20 @@ Chronological log of implementation progress. - Added the `docs` pack installer, manifest split, and task-owned test coverage - Wired the `docs` pack through scanning, update/remove flows, legacy removal, and CLI help output +- Moved the shared tracking helper to `.oat/scripts` and updated bundled skill + references plus docs-pack installation to use the neutral path **Decisions:** - Keep `oat-docs` in `core` and move the four analyze/apply workflows into a new `docs` pack -- Treat helper relocation as first-class implementation work so the new pack - has no hidden dependency on `oat-agent-instructions-analyze` +- Use `.oat/scripts` as the neutral shared-helper home so installer packs and + skill docs can reference the same stable path - Use direct `vitest` file execution for task verification when the package script would pull in unrelated suites from later tasks **Follow-ups / TODO:** -- Confirm the best neutral shared-script home before implementing `p02-t01` - Sweep for any remaining pack mentions outside the currently identified docs pages **Blockers:** diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md index e21d3cd4..72daa76a 100644 --- a/.oat/projects/shared/docs-pack-split/state.md +++ b/.oat/projects/shared/docs-pack-split/state.md @@ -1,9 +1,9 @@ --- -oat_current_task: p02-t01 -oat_last_commit: e254abe52c00f88cf2a736c94096eafd88cf0fcc +oat_current_task: p02-t02 +oat_last_commit: 30234c42dc042de5fccc62b79532830c3e3d2d87 oat_blockers: [] associated_issues: [] # [{type: backlog|project|jira|linear, ref: "identifier"}] -oat_hill_checkpoints: [] # Configured: which phases require human-in-the-loop lifecycle approval +oat_hill_checkpoints: ['p02'] # Configured: which phases require human-in-the-loop lifecycle approval oat_hill_completed: [] # Progress: which HiLL checkpoints have been completed oat_parallel_execution: false oat_phase: implement # Current phase: discovery | spec | design | plan | implement @@ -14,7 +14,7 @@ oat_workflow_origin: native # native | imported oat_docs_updated: null # null | skipped | complete — documentation sync status oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived -oat_project_state_updated: '2026-03-20T20:03:29Z' # ISO 8601 UTC timestamp — updated on every state.md mutation +oat_project_state_updated: '2026-03-20T20:10:54Z' # ISO 8601 UTC timestamp — updated on every state.md mutation oat_generated: false --- @@ -43,7 +43,8 @@ Implementation in progress for quick workflow mode - ✓ Plan generated - ✓ `p01-t01` complete - ✓ Phase 1 complete -- ⧗ Implementing `p02-t01` +- ✓ `p02-t01` complete +- ⧗ Implementing `p02-t02` ## Blockers @@ -51,4 +52,4 @@ None ## Next Milestone -Complete `p02-t01` and continue Phase 2 +Complete `p02-t02` and reach the Phase 2 checkpoint From de8214d8601276e481b9e8e9b5a84d7f635ef95b Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 15:14:22 -0500 Subject: [PATCH 07/23] docs(p02-t02): document docs tool pack split --- .../scripts/resolve-tracking.sh | 1 - .agents/skills/oat-doctor/SKILL.md | 15 ++++++--- README.md | 2 +- apps/oat-docs/docs/guide/cli-reference.md | 2 +- .../docs/guide/documentation/quickstart.md | 20 +++++++---- .../docs/guide/documentation/workflows.md | 3 ++ apps/oat-docs/docs/guide/getting-started.md | 2 +- apps/oat-docs/docs/guide/tool-packs.md | 33 ++++++++++++++++--- 8 files changed, 59 insertions(+), 19 deletions(-) delete mode 120000 .agents/skills/oat-agent-instructions-apply/scripts/resolve-tracking.sh diff --git a/.agents/skills/oat-agent-instructions-apply/scripts/resolve-tracking.sh b/.agents/skills/oat-agent-instructions-apply/scripts/resolve-tracking.sh deleted file mode 120000 index 6b2433f4..00000000 --- a/.agents/skills/oat-agent-instructions-apply/scripts/resolve-tracking.sh +++ /dev/null @@ -1 +0,0 @@ -../../oat-agent-instructions-analyze/scripts/resolve-tracking.sh \ No newline at end of file diff --git a/.agents/skills/oat-doctor/SKILL.md b/.agents/skills/oat-doctor/SKILL.md index 93020209..c92f0529 100644 --- a/.agents/skills/oat-doctor/SKILL.md +++ b/.agents/skills/oat-doctor/SKILL.md @@ -167,10 +167,14 @@ Ideas pack skills: - oat-idea-new, oat-idea-ideate, oat-idea-summarize, oat-idea-scratchpad -Utility pack skills: +Docs pack skills: -- create-agnostic-skill, oat-agent-instructions-analyze, oat-agent-instructions-apply +- oat-agent-instructions-analyze, oat-agent-instructions-apply - oat-docs-analyze, oat-docs-apply + +Utility pack skills: + +- create-agnostic-skill - oat-repo-maintainability-review, oat-review-provide - oat-review-receive, oat-review-receive-remote @@ -205,9 +209,10 @@ OAT ▸ DOCTOR SUMMARY | Pack | Scope | Skills | Status | | --------- | ------- | ------ | -------- | | core | user | 2/2 | current | +| docs | project | 4/4 | current | | workflows | project | 26/26 | current | | ideas | user | 4/4 | current | -| utility | project | 9/9 | outdated | +| utility | project | 5/5 | outdated | ## Outdated Skills @@ -217,8 +222,8 @@ OAT ▸ DOCTOR SUMMARY ## Available But Not Installed -- **utility** pack: oat-docs-analyze, oat-docs-apply (2 skills available) - → Run: oat tools update --scope {scope} +- **docs** pack: oat-docs-analyze, oat-docs-apply, oat-agent-instructions-analyze, oat-agent-instructions-apply (4 skills available) + → Run: oat tools install docs --scope {scope} ## Configuration diff --git a/README.md b/README.md index e99ea99a..9f3c81fd 100644 --- a/README.md +++ b/README.md @@ -175,7 +175,7 @@ pnpm run cli -- tools update --all Notes: -- `tools install` installs OAT skills/agents/templates/scripts by pack (`core`, `ideas`, `workflows`, `utility`, `research`) and auto-syncs provider views. The core pack (diagnostics, docs) always installs at user scope. +- `tools install` installs OAT skills/agents/templates/scripts by pack (`core`, `docs`, `ideas`, `workflows`, `utility`, `project-management`, `research`) and auto-syncs provider views. The core pack (diagnostics, passive docs access) always installs at user scope. - `tools outdated` shows which installed tools have available updates. - `tools update --all` updates all outdated tools to bundled versions. - Use `--no-sync` on any mutation command to skip auto-sync. diff --git a/apps/oat-docs/docs/guide/cli-reference.md b/apps/oat-docs/docs/guide/cli-reference.md index 70cdf3d2..db374e9e 100644 --- a/apps/oat-docs/docs/guide/cli-reference.md +++ b/apps/oat-docs/docs/guide/cli-reference.md @@ -55,7 +55,7 @@ Use the `oat tools` group to manage bundled OAT assets: - `oat tools list` - list installed tools, versions, pack membership, and update state - `oat tools info ` - inspect one installed skill or agent - `oat tools outdated` - show only assets with available updates -- `oat tools install` - install bundled packs such as `core`, `ideas`, `workflows`, `utility`, `project-management`, or `research` +- `oat tools install` - install bundled packs such as `core`, `docs`, `ideas`, `workflows`, `utility`, `project-management`, or `research` - `oat tools update` - update a named tool, a whole pack, or everything - `oat tools remove` - remove installed assets diff --git a/apps/oat-docs/docs/guide/documentation/quickstart.md b/apps/oat-docs/docs/guide/documentation/quickstart.md index 54d0f72b..578a9571 100644 --- a/apps/oat-docs/docs/guide/documentation/quickstart.md +++ b/apps/oat-docs/docs/guide/documentation/quickstart.md @@ -15,7 +15,7 @@ If you are developing inside the OAT repo itself, replace `oat ...` with - a docs app scaffolded with OAT defaults (Fumadocs or MkDocs) - `index.md`-driven navigation -- docs analysis and apply skills installed via the utility pack +- docs analysis and apply skills installed via the docs pack - a repeatable workflow for finding gaps, verifying claims, and applying docs changes ## 1. Initialize OAT in the repo @@ -28,19 +28,27 @@ This sets up the base OAT structure used by the CLI and installed tool packs. ## 2. Install the docs workflow skills -Fastest direct path: +Preferred direct path: ```bash -oat init tools utility +oat tools install docs ``` Interactive path: ```bash -oat init tools +oat tools install ``` -The utility pack installs `oat-docs-analyze` and `oat-docs-apply`. +Legacy pack-specific path: + +```bash +oat init tools docs +``` + +The docs pack installs `oat-docs-analyze`, `oat-docs-apply`, +`oat-agent-instructions-analyze`, and `oat-agent-instructions-apply`. For this +quickstart, the docs pair is the part you need immediately. ## 3. Scaffold the docs app @@ -140,7 +148,7 @@ Important: ## Typical loop 1. `oat init --scope project` -2. `oat init tools utility` +2. `oat tools install docs` 3. `oat docs init --app-name my-docs` 4. (optional) `oat docs migrate --docs-dir docs --config mkdocs.yml --apply` 5. Author docs with `index.md` + `## Contents` diff --git a/apps/oat-docs/docs/guide/documentation/workflows.md b/apps/oat-docs/docs/guide/documentation/workflows.md index fad39372..20ed46b6 100644 --- a/apps/oat-docs/docs/guide/documentation/workflows.md +++ b/apps/oat-docs/docs/guide/documentation/workflows.md @@ -8,6 +8,9 @@ description: 'Docs CLI helpers and skills for analysis and controlled documentat OAT’s docs workflow combines deterministic CLI helpers with higher-judgment skills for analysis and controlled updates. +Install the workflow skills with `oat tools install docs` (preferred) or +`oat init tools docs` before using the analyze/apply flow in a new repo. + ## Docs workflow pieces ### CLI helpers diff --git a/apps/oat-docs/docs/guide/getting-started.md b/apps/oat-docs/docs/guide/getting-started.md index 96afab75..802ce6a1 100644 --- a/apps/oat-docs/docs/guide/getting-started.md +++ b/apps/oat-docs/docs/guide/getting-started.md @@ -36,7 +36,7 @@ After core initialization completes, `oat init` can enter an interactive guided **Steps (each independently skippable):** -1. **Tool packs** — install OAT tool packs. The core pack (diagnostics, docs) is checked by default and always installs at user scope. Other packs (ideas, workflows, utility, research) install at project scope. +1. **Tool packs** — install OAT tool packs. The core pack (diagnostics, passive docs access) is checked by default and always installs at user scope. Other packs (`docs`, `ideas`, `workflows`, `utility`, `project-management`, `research`) install at project scope. 2. **Local paths** — multi-select from default gitignored artifact paths (analysis, PR, reviews, ideas). Pre-existing paths are pre-checked; only new paths are added. 3. **Provider sync** — sync provider project views via `oat sync --scope project`. 4. **Summary** — reports what was configured: active providers, tool packs status, local paths added/existing, and provider sync status. Includes suggested next steps. diff --git a/apps/oat-docs/docs/guide/tool-packs.md b/apps/oat-docs/docs/guide/tool-packs.md index 531fe975..f936be5a 100644 --- a/apps/oat-docs/docs/guide/tool-packs.md +++ b/apps/oat-docs/docs/guide/tool-packs.md @@ -10,9 +10,10 @@ This page covers CLI commands that manage bundled OAT tool packs and installed O ## Bundled packs at a glance - `core` - foundational diagnostics and docs access (`oat-doctor`, `oat-docs`) +- `docs` - docs and agent-instructions governance workflows - `workflows` - project lifecycle skills, reviewer agents, and core project templates - `ideas` - lightweight ideation and promotion flows -- `utility` - standalone docs, review, and repo-maintenance helpers +- `utility` - review and repo-maintenance helpers - `project-management` - file-backed backlog/reference skills plus backlog and roadmap templates - `research` - research, analysis, comparison, and synthesis skills @@ -29,7 +30,7 @@ Purpose: Key behavior: - Scans installed skills and agents across project and user scopes -- Displays version, pack (`core`, `ideas`, `workflows`, `utility`, `project-management`, `research`, `custom`), and status (`current`, `outdated`, `newer`, `not-bundled`) +- Displays version, pack (`core`, `docs`, `ideas`, `workflows`, `utility`, `project-management`, `research`, `custom`), and status (`current`, `outdated`, `newer`, `not-bundled`) - Supports `--scope` filtering and `--json` output ### `oat tools outdated` @@ -60,12 +61,12 @@ Key behavior: Purpose: -- Install bundled OAT tool packs (`core`, `ideas`, `workflows`, `utility`, `project-management`, `research`) +- Install bundled OAT tool packs (`core`, `docs`, `ideas`, `workflows`, `utility`, `project-management`, `research`) Key behavior: - Same pack selection and install flow as `oat init tools` -- Pack-oriented install subcommands: `core`, `ideas`, `workflows`, `utility`, `project-management`, `research` +- Pack-oriented install subcommands: `core`, `docs`, `ideas`, `workflows`, `utility`, `project-management`, `research` - Tracks installed vs bundled skill versions and reports outdated skills - Interactive runs can prompt to update selected outdated skills - Auto-sync runs automatically after successful install (provider views are updated) @@ -112,6 +113,30 @@ Key behavior: - Installation also bundles OAT documentation to `~/.oat/docs/` for the oat-docs skill. - `oat tools update --pack core` refreshes both skills and `~/.oat/docs/` documentation. +## Docs pack + +The `docs` pack contains active documentation and instruction-governance +workflows: + +- **oat-docs-analyze** — Analyze a docs surface for contract coverage, nav + drift, stale claims, and coverage gaps. +- **oat-docs-apply** — Apply only approved, evidence-backed docs-analysis + recommendations. +- **oat-agent-instructions-analyze** — Evaluate `AGENTS.md` and provider + instruction coverage, quality, and drift. +- **oat-agent-instructions-apply** — Generate or update approved instruction + files from an analysis artifact. + +Key behavior: + +- Docs pack installs at the selected scope, typically `project`. +- It complements the `core` pack: `oat-docs` answers questions from bundled + docs, while the `docs` pack adds analyze/apply workflows. +- `oat tools install docs` is the preferred install path; `oat init tools docs` + remains available for backward compatibility. +- `oat tools update --pack docs` and `oat tools remove --pack docs` manage the + workflow skills as a unit. + ### Auto-sync behavior All mutation commands (`install`, `update`, `remove`) automatically run `oat sync --scope ` after successful operations. This ensures provider views stay in sync with canonical assets without manual intervention. From 589d320e6fc58ff9f8f29b98c101bea24b97b45c Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 15:16:13 -0500 Subject: [PATCH 08/23] chore(oat): update tracking artifacts for p02 completion --- .../shared/docs-pack-split/implementation.md | 100 +++++++++++++++--- .oat/projects/shared/docs-pack-split/state.md | 20 ++-- 2 files changed, 98 insertions(+), 22 deletions(-) diff --git a/.oat/projects/shared/docs-pack-split/implementation.md b/.oat/projects/shared/docs-pack-split/implementation.md index 789acfc4..aa35b7fb 100644 --- a/.oat/projects/shared/docs-pack-split/implementation.md +++ b/.oat/projects/shared/docs-pack-split/implementation.md @@ -1,9 +1,9 @@ --- -oat_status: in_progress -oat_ready_for: null +oat_status: complete +oat_ready_for: oat-project-review-provide oat_blockers: [] oat_last_updated: 2026-03-20 -oat_current_task_id: p02-t02 +oat_current_task_id: null oat_generated: false --- @@ -24,12 +24,12 @@ oat_generated: false ## Progress Overview -| Phase | Status | Tasks | Completed | -| ------- | ----------- | ----- | --------- | -| Phase 1 | completed | 2 | 2/2 | -| Phase 2 | in_progress | 2 | 1/2 | +| Phase | Status | Tasks | Completed | +| ------- | --------- | ----- | --------- | +| Phase 1 | completed | 2 | 2/2 | +| Phase 2 | completed | 2 | 2/2 | -**Total:** 3/4 tasks completed +**Total:** 4/4 tasks completed --- @@ -162,9 +162,44 @@ oat_generated: false ## Phase 2: Decouple Shared Assets and Refresh Documentation -**Status:** in_progress +**Status:** completed **Started:** 2026-03-20 +### Phase Summary + +**Outcome (what changed):** + +- Updated the product docs to describe the new `docs` pack and its role next to + `core` and `utility`. +- Switched docs-workflow quickstarts to prefer `oat tools install docs` while + keeping `oat init tools docs` documented as the legacy pack-specific path. +- Refreshed the `oat-doctor` skill’s pack inventory and examples so its + user-facing guidance matches the new pack split. +- Removed the last stale helper symlink from `oat-agent-instructions-apply`, + which unblocked the full docs build after the helper relocation. + +**Key files touched:** + +- `README.md` - repo quickstart pack list +- `apps/oat-docs/docs/guide/tool-packs.md` - bundled-pack contract and docs-pack section +- `apps/oat-docs/docs/guide/getting-started.md` - guided setup pack descriptions +- `apps/oat-docs/docs/guide/cli-reference.md` - tool install pack list +- `apps/oat-docs/docs/guide/documentation/quickstart.md` - preferred docs-pack installation flow +- `apps/oat-docs/docs/guide/documentation/workflows.md` - docs workflow prerequisite guidance +- `.agents/skills/oat-doctor/SKILL.md` - user-facing pack inventory examples +- `.agents/skills/oat-agent-instructions-apply/scripts/resolve-tracking.sh` - removed stale symlink + +**Verification:** + +- Run: `rg -n -e 'utility pack' -e 'oat init tools utility' -e 'docs analysis and apply skills installed via the utility pack' README.md apps/oat-docs/docs .agents/skills` +- Result: no matches +- Run: `rg -n -e 'oat tools install docs' -e 'oat init tools docs' -e 'docs pack installs' README.md apps/oat-docs/docs .agents/skills` +- Result: expected docs-pack references found +- Run: `pnpm --filter oat-docs docs:lint` +- Result: pass +- Run: `pnpm build:docs` +- Result: pass + ### Task p02-t01: Move the shared tracking helper to a neutral location and update skill references **Status:** completed @@ -213,8 +248,45 @@ oat_generated: false ### Task p02-t02: Update product docs and examples for the new pack layout -**Status:** pending -**Commit:** - +**Status:** completed +**Commit:** ce0a6352baa7a3939d75302648fb516850028739 + +**Outcome (required when completed):** + +- Updated the README and OAT docs app pages to present `docs` as a first-class + pack and to remove stale guidance that routed docs workflows through + `utility`. +- Added a dedicated docs-pack explanation covering its analyze/apply workflows + and the distinction between passive `oat-docs` access in `core` and active + docs/instructions workflows in `docs`. +- Switched docs-workflow quickstarts and workflow pages to prefer + `oat tools install docs`, while retaining `oat init tools docs` as the + backward-compatible pack-specific path. +- Updated the `oat-doctor` skill’s user-facing pack inventory and removed the + stale helper symlink in `oat-agent-instructions-apply` so the full docs build + no longer pulled a dead helper path. + +**Files changed:** + +- `README.md` - quickstart pack list +- `apps/oat-docs/docs/guide/tool-packs.md` - docs pack contract and install examples +- `apps/oat-docs/docs/guide/getting-started.md` - guided setup pack list +- `apps/oat-docs/docs/guide/cli-reference.md` - tool install examples +- `apps/oat-docs/docs/guide/documentation/quickstart.md` - docs-pack quickstart flow +- `apps/oat-docs/docs/guide/documentation/workflows.md` - docs workflow prerequisite note +- `.agents/skills/oat-doctor/SKILL.md` - pack inventory examples +- `.agents/skills/oat-agent-instructions-apply/scripts/resolve-tracking.sh` - removed stale symlink + +**Verification:** + +- Run: `rg -n -e 'utility pack' -e 'oat init tools utility' -e 'docs analysis and apply skills installed via the utility pack' README.md apps/oat-docs/docs .agents/skills` +- Result: no matches +- Run: `rg -n -e 'oat tools install docs' -e 'oat init tools docs' -e 'docs pack installs' README.md apps/oat-docs/docs .agents/skills` +- Result: expected docs-pack references found +- Run: `pnpm --filter oat-docs docs:lint` +- Result: pass +- Run: `pnpm build:docs` +- Result: pass --- @@ -240,7 +312,7 @@ Chronological log of implementation progress. - [x] p01-t01: Introduce the `docs` pack manifest and installer command - 983e23bc - [x] p01-t02: Propagate `docs` pack support through tool management and legacy removal flows - e254abe5 - [x] p02-t01: Move the shared tracking helper to a neutral location and update skill references - 30234c42 -- [ ] p02-t02: Update product docs and examples for the new pack layout +- [x] p02-t02: Update product docs and examples for the new pack layout - ce0a6352 **What changed (high level):** @@ -252,6 +324,8 @@ Chronological log of implementation progress. and CLI help output - Moved the shared tracking helper to `.oat/scripts` and updated bundled skill references plus docs-pack installation to use the neutral path +- Updated repo/docs guidance for the new pack layout and removed the final + stale helper symlink that blocked full docs builds **Decisions:** @@ -264,7 +338,7 @@ Chronological log of implementation progress. **Follow-ups / TODO:** -- Sweep for any remaining pack mentions outside the currently identified docs pages +- Pause at the configured `p02` checkpoint before entering review/finalization flow **Blockers:** diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md index 72daa76a..772c42a3 100644 --- a/.oat/projects/shared/docs-pack-split/state.md +++ b/.oat/projects/shared/docs-pack-split/state.md @@ -1,32 +1,33 @@ --- -oat_current_task: p02-t02 -oat_last_commit: 30234c42dc042de5fccc62b79532830c3e3d2d87 +oat_current_task: null +oat_last_commit: ce0a6352baa7a3939d75302648fb516850028739 oat_blockers: [] associated_issues: [] # [{type: backlog|project|jira|linear, ref: "identifier"}] oat_hill_checkpoints: ['p02'] # Configured: which phases require human-in-the-loop lifecycle approval oat_hill_completed: [] # Progress: which HiLL checkpoints have been completed oat_parallel_execution: false oat_phase: implement # Current phase: discovery | spec | design | plan | implement -oat_phase_status: in_progress # Status: in_progress | complete +oat_phase_status: complete # Status: in_progress | complete oat_execution_mode: single-thread # single-thread | subagent-driven oat_workflow_mode: quick # spec-driven | quick | import oat_workflow_origin: native # native | imported -oat_docs_updated: null # null | skipped | complete — documentation sync status +oat_docs_updated: complete # null | skipped | complete — documentation sync status oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived -oat_project_state_updated: '2026-03-20T20:10:54Z' # ISO 8601 UTC timestamp — updated on every state.md mutation +oat_project_state_updated: '2026-03-20T20:14:48Z' # ISO 8601 UTC timestamp — updated on every state.md mutation oat_generated: false --- # Project State: docs-pack-split -**Status:** Implementing +**Status:** Awaiting p02 checkpoint **Started:** 2026-03-20 **Last Updated:** 2026-03-20 ## Current Phase -Implementation in progress for quick workflow mode +Implementation tasks are complete for quick workflow mode; paused at the +configured `p02` human checkpoint before review/finalization. ## Artifacts @@ -44,7 +45,8 @@ Implementation in progress for quick workflow mode - ✓ `p01-t01` complete - ✓ Phase 1 complete - ✓ `p02-t01` complete -- ⧗ Implementing `p02-t02` +- ✓ `p02-t02` complete +- ⧗ Awaiting `p02` checkpoint approval ## Blockers @@ -52,4 +54,4 @@ None ## Next Milestone -Complete `p02-t02` and reach the Phase 2 checkpoint +Confirm the `p02` checkpoint, then continue into review/finalization From 2b826c5e3d78b7304e26bf7f6d08f2703659dd92 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 16:21:58 -0500 Subject: [PATCH 09/23] chore(oat): record final review artifact --- .oat/projects/shared/docs-pack-split/plan.md | 14 +-- .../reviews/final-review-2026-03-20.md | 87 +++++++++++++++++++ 2 files changed, 94 insertions(+), 7 deletions(-) create mode 100644 .oat/projects/shared/docs-pack-split/reviews/final-review-2026-03-20.md diff --git a/.oat/projects/shared/docs-pack-split/plan.md b/.oat/projects/shared/docs-pack-split/plan.md index e56e78b8..0f3342b6 100644 --- a/.oat/projects/shared/docs-pack-split/plan.md +++ b/.oat/projects/shared/docs-pack-split/plan.md @@ -240,13 +240,13 @@ git commit -m "docs(p02-t02): document docs tool pack split" {Keep both code + artifact rows below. Add additional code rows (p03, p04, etc.) as needed, but do not delete `spec`/`design`.} -| Scope | Type | Status | Date | Artifact | -| ------ | -------- | ------- | ---- | -------- | -| p01 | code | pending | - | - | -| p02 | code | pending | - | - | -| final | code | pending | - | - | -| spec | artifact | pending | - | - | -| design | artifact | pending | - | - | +| Scope | Type | Status | Date | Artifact | +| ------ | -------- | -------- | ---------- | ---------------------------------- | +| p01 | code | pending | - | - | +| p02 | code | pending | - | - | +| final | code | received | 2026-03-20 | reviews/final-review-2026-03-20.md | +| spec | artifact | pending | - | - | +| design | artifact | pending | - | - | **Status values:** `pending` → `received` → `fixes_added` → `fixes_completed` → `passed` diff --git a/.oat/projects/shared/docs-pack-split/reviews/final-review-2026-03-20.md b/.oat/projects/shared/docs-pack-split/reviews/final-review-2026-03-20.md new file mode 100644 index 00000000..a6307248 --- /dev/null +++ b/.oat/projects/shared/docs-pack-split/reviews/final-review-2026-03-20.md @@ -0,0 +1,87 @@ +--- +oat_generated: true +oat_generated_at: 2026-03-20 +oat_review_scope: final +oat_review_type: code +oat_project: .oat/projects/shared/docs-pack-split +--- + +# Code Review: final (595435e2..HEAD) + +**Reviewed:** 2026-03-20 +**Scope:** Final review of all four tasks (p01-t01, p01-t02, p02-t01, p02-t02) +**Files reviewed:** 38 +**Commits:** 8 (983e23bc..0b07f98e) + +## Summary + +The implementation is solid and complete. All four planned tasks have been executed: the `docs` pack exists as a first-class CLI concept, pack scanning/update/remove/help surfaces recognize it, the shared tracking helper has been relocated to a neutral path, and documentation has been updated throughout. One minor stale description string was found in the init-tools PACK_DESCRIPTIONS constant. All 116 task-owned tests pass; lint and type-check are clean. + +## Findings + +### Critical + +None + +### Important + +None + +### Minor + +- **Stale utility pack description in PACK_DESCRIPTIONS** (`packages/cli/src/commands/init/tools/index.ts:332`) + - Issue: The `utility` entry in `PACK_DESCRIPTIONS` reads `'Standalone utilities (reviews, docs analysis, agent instructions)'` but docs analysis and agent instructions skills have been moved to the `docs` pack. The parenthetical no longer matches the actual `UTILITY_SKILLS` contents (`create-agnostic-skill`, `oat-repo-maintainability-review`, `oat-review-provide`, `oat-review-receive`, `oat-review-receive-remote`). + - Suggestion: Update to something like `'Standalone utilities (skill authoring, maintainability review, code reviews)'` to match the actual pack contents. This string is rendered into the AGENTS.md tool-packs section for every project that runs `oat init tools`. + +- **Incomplete pack enum in oat-doctor SKILL.md** (`.agents/skills/oat-doctor/SKILL.md:89`) + - Issue: The JSON parsing guidance says `pack (core/ideas/workflows/utility/custom)` but the actual `PackName` type includes `docs`, `project-management`, and `research`. While `docs` is part of this PR's scope, the missing `project-management` and `research` entries predate this change. + - Suggestion: Update the line to `pack (core/docs/ideas/workflows/utility/project-management/research/custom)` to match the current `PackName` type union. At minimum, adding `docs` is in scope for this PR. + +## Requirements/Design Alignment + +**Evidence sources used:** `discovery.md`, `plan.md`, `implementation.md` (quick workflow mode; no spec or design artifacts) + +### Requirements Coverage + +| Requirement | Status | Notes | +| ------------------------------------------------------------------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------ | +| `docs` pack exists and can be installed same as other packs | implemented | `DOCS_SKILLS` manifest, installer command, `oat init tools docs`, `oat tools install docs` all work | +| Four analyze/apply skills recognized as `docs` pack by scan/list/update/remove | implemented | `resolveSkillPack` in `scan-tools.ts` checks `DOCS_SKILLS`; update/remove `VALID_PACKS` include `docs` | +| Moved skills no longer depend on internal helper path in another pack | implemented | All skill SKILL.md files reference `.oat/scripts/resolve-tracking.sh`; old path has zero matches in skill/CLI files | +| End-user docs and help snapshots consistently describe the new pack layout | implemented | Help snapshots pass; docs pages updated; README updated | +| `oat-docs` remains in `core` | implemented | `CORE_SKILLS` still contains `oat-docs`; `DOCS_SKILLS` does not | +| Pack is user-eligible (project or user scope) | implemented | `USER_ELIGIBLE_PACKS` set includes `docs`; `PACK_CHOICES` marks it `[project\|user]` | +| Legacy `oat remove skills --pack docs` supported | implemented | `PACK_SKILLS` map and `isPackName` guard both include `docs` | +| Shared helper at neutral location | implemented | `.oat/scripts/resolve-tracking.sh` exists; bundled via `bundle-assets.sh`; installed by both workflow and docs pack installers | +| No hidden cross-pack runtime dependency | implemented | `DOCS_SCRIPTS` explicitly installs `resolve-tracking.sh` alongside docs skills | +| Help text updated for update/remove commands | implemented | `--pack` help strings include `docs`; inline snapshot tests pass | +| Bundle consistency maintained | implemented | `bundle-consistency.test.ts` covers docs skills; orphan check includes `DOCS_SKILLS` in the union | +| Docs pages reflect new pack model | implemented | `tool-packs.md`, `getting-started.md`, `cli-reference.md`, `quickstart.md`, `workflows.md` all updated | + +### Extra Work (not in declared requirements) + +- Updated `oat-doctor` SKILL.md pack inventory and examples (not explicitly in plan, but clearly within the discovery's "CLI and docs stay aligned" success criterion). +- Removed stale symlink at `.agents/skills/oat-agent-instructions-apply/scripts/resolve-tracking.sh` (cleanup needed for docs build to pass; reasonable scope inclusion). + +Both are minor scope additions that support the declared success criteria. No significant scope creep. + +## Verification Commands + +Run these to verify the implementation: + +```bash +# Run all task-owned tests (116 tests across 10 files) +cd /Users/thomas.stang/.codex/worktrees/1096/open-agent-toolkit && pnpm --filter @oat/cli exec vitest run src/commands/init/tools/docs/install-docs.test.ts src/commands/init/tools/docs/index.test.ts src/commands/init/tools/index.test.ts src/commands/init/tools/shared/bundle-consistency.test.ts src/commands/tools/shared/scan-tools.test.ts src/commands/tools/list/list-tools.test.ts src/commands/tools/update/update-tools.test.ts src/commands/tools/remove/remove-tools.test.ts src/commands/remove/skills/remove-skills.test.ts src/commands/help-snapshots.test.ts + +# Lint and type-check +cd /Users/thomas.stang/.codex/worktrees/1096/open-agent-toolkit && pnpm --filter @oat/cli lint && pnpm --filter @oat/cli type-check + +# Verify no stale old helper path references remain +cd /Users/thomas.stang/.codex/worktrees/1096/open-agent-toolkit && rg -n "oat-agent-instructions-analyze/scripts/resolve-tracking" .agents/skills packages/cli/scripts .oat/scripts + +# Verify docs build passes +cd /Users/thomas.stang/.codex/worktrees/1096/open-agent-toolkit && pnpm build:docs + +# Verify no stale utility-pack docs references +cd /Users/thomas.stang/.codex/worktrees/1096/open-agent-toolkit && rg -n "utility pack installs|installed via the utility pack|oat init tools utility" README.md apps/oat-docs/docs .agents/skills +``` From e60b87836ea8f03e9673cca4f92201b294ae224c Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 16:32:22 -0500 Subject: [PATCH 10/23] chore(oat): receive final review findings --- .../shared/docs-pack-split/implementation.md | 86 ++++++++++++++++-- .oat/projects/shared/docs-pack-split/plan.md | 87 +++++++++++++++++-- .../reviews/final-review-2026-03-20.md | 87 ------------------- .oat/projects/shared/docs-pack-split/state.md | 17 ++-- 4 files changed, 165 insertions(+), 112 deletions(-) delete mode 100644 .oat/projects/shared/docs-pack-split/reviews/final-review-2026-03-20.md diff --git a/.oat/projects/shared/docs-pack-split/implementation.md b/.oat/projects/shared/docs-pack-split/implementation.md index aa35b7fb..d0b41a71 100644 --- a/.oat/projects/shared/docs-pack-split/implementation.md +++ b/.oat/projects/shared/docs-pack-split/implementation.md @@ -1,9 +1,9 @@ --- -oat_status: complete -oat_ready_for: oat-project-review-provide +oat_status: in_progress +oat_ready_for: null oat_blockers: [] oat_last_updated: 2026-03-20 -oat_current_task_id: null +oat_current_task_id: p03-t01 oat_generated: false --- @@ -24,12 +24,13 @@ oat_generated: false ## Progress Overview -| Phase | Status | Tasks | Completed | -| ------- | --------- | ----- | --------- | -| Phase 1 | completed | 2 | 2/2 | -| Phase 2 | completed | 2 | 2/2 | +| Phase | Status | Tasks | Completed | +| ------- | ----------- | ----- | --------- | +| Phase 1 | completed | 2 | 2/2 | +| Phase 2 | completed | 2 | 2/2 | +| Phase 3 | in_progress | 2 | 0/2 | -**Total:** 4/4 tasks completed +**Total:** 4/6 tasks completed --- @@ -301,6 +302,41 @@ oat_generated: false --- +## Review Received: final + +**Date:** 2026-03-20 +**Review artifact:** reviews/archived/final-review-2026-03-20.md + +**Findings:** + +- Critical: 0 +- Important: 0 +- Medium: 0 +- Minor: 2 + +**New tasks added:** `p03-t01`, `p03-t02` + +**Deferred Findings (Minor):** + +- None. User chose to convert all final-review minor findings into fix tasks. + +**Finding disposition map:** + +- `m1` -> converted (`p03-t01`) - correct the stale `utility` pack description + in `PACK_DESCRIPTIONS` +- `m2` -> converted (`p03-t02`) - align `oat-doctor` pack enum guidance with + the current `PackName` union + +**Next:** Execute fix tasks via the `oat-project-implement` skill. + +After the fix tasks are complete: + +- Update the review row status to `fixes_completed` +- Re-run `oat-project-review-provide code final` then + `oat-project-review-receive` to reach `passed` + +--- + ## Implementation Log Chronological log of implementation progress. @@ -356,6 +392,40 @@ Chronological log of implementation progress. --- +### 2026-03-20 + +**Session Start:** {time} + +- [x] final review received and parsed +- [x] m1 converted to `p03-t01` +- [x] m2 converted to `p03-t02` +- [ ] Execute `p03-t01` +- [ ] Execute `p03-t02` + +**What changed (high level):** + +- Processed the active final code review artifact +- Added a dedicated review-fixes phase with two small follow-up tasks +- Reset implementation state to resume at `p03-t01` + +**Decisions:** + +- Converted both final-review minor findings into tasks instead of deferring + them so the final gate can be cleared cleanly on re-review +- Added fixes as a dedicated `Phase 3: Review Fixes` rather than mutating prior + phase summaries retroactively + +**Follow-ups / TODO:** + +- Implement `p03-t01` and `p03-t02` +- Re-run final code review after fixes land + +**Blockers:** + +- None + +--- + ## Deviations from Plan Document any deviations from the original plan. diff --git a/.oat/projects/shared/docs-pack-split/plan.md b/.oat/projects/shared/docs-pack-split/plan.md index 0f3342b6..6dbc0f42 100644 --- a/.oat/projects/shared/docs-pack-split/plan.md +++ b/.oat/projects/shared/docs-pack-split/plan.md @@ -234,19 +234,86 @@ git commit -m "docs(p02-t02): document docs tool pack split" --- +## Phase 3: Review Fixes + +### Task p03-t01: (review) Update the utility pack description to match the split + +**Files:** + +- Modify: `packages/cli/src/commands/init/tools/index.ts` + +**Step 1: Understand the issue** + +Review finding: The `utility` entry in `PACK_DESCRIPTIONS` still says `docs +analysis` and `agent instructions`, even though those skills moved to the +`docs` pack. +Location: `packages/cli/src/commands/init/tools/index.ts:332` + +**Step 2: Implement fix** + +Update the `utility` pack description so it reflects the actual pack contents +after the split, such as skill authoring, maintainability review, and code +reviews. + +**Step 3: Verify** + +Run: `pnpm --filter @oat/cli exec vitest run src/commands/init/tools/index.test.ts src/commands/help-snapshots.test.ts` +Expected: init-tools output and help snapshots still pass with the corrected +description + +**Step 4: Commit** + +```bash +git add packages/cli/src/commands/init/tools/index.ts packages/cli/src/commands/help-snapshots.test.ts +git commit -m "fix(p03-t01): correct utility pack description" +``` + +--- + +### Task p03-t02: (review) Expand oat-doctor pack guidance to match PackName + +**Files:** + +- Modify: `.agents/skills/oat-doctor/SKILL.md` + +**Step 1: Understand the issue** + +Review finding: The `oat-doctor` JSON parsing guidance still lists a truncated +pack enum and omits `docs`, `project-management`, and `research`. +Location: `.agents/skills/oat-doctor/SKILL.md:89` + +**Step 2: Implement fix** + +Update the pack enum guidance so it matches the current `PackName` union used +by the CLI. + +**Step 3: Verify** + +Run: `rg -n "pack \\(core/docs/ideas/workflows/utility/project-management/research/custom\\)" .agents/skills/oat-doctor/SKILL.md` +Expected: the updated pack enum is present in the skill guidance + +**Step 4: Commit** + +```bash +git add .agents/skills/oat-doctor/SKILL.md +git commit -m "fix(p03-t02): align oat-doctor pack guidance" +``` + +--- + ## Reviews {Track reviews here after running the oat-project-review-provide and oat-project-review-receive skills.} {Keep both code + artifact rows below. Add additional code rows (p03, p04, etc.) as needed, but do not delete `spec`/`design`.} -| Scope | Type | Status | Date | Artifact | -| ------ | -------- | -------- | ---------- | ---------------------------------- | -| p01 | code | pending | - | - | -| p02 | code | pending | - | - | -| final | code | received | 2026-03-20 | reviews/final-review-2026-03-20.md | -| spec | artifact | pending | - | - | -| design | artifact | pending | - | - | +| Scope | Type | Status | Date | Artifact | +| ------ | -------- | ----------- | ---------- | ------------------------------------------- | +| p01 | code | pending | - | - | +| p02 | code | pending | - | - | +| final | code | fixes_added | 2026-03-20 | reviews/archived/final-review-2026-03-20.md | +| spec | artifact | pending | - | - | +| design | artifact | pending | - | - | **Status values:** `pending` → `received` → `fixes_added` → `fixes_completed` → `passed` @@ -267,10 +334,12 @@ git commit -m "docs(p02-t02): document docs tool pack split" and help surfaces - Phase 2: 2 tasks - decouple shared helper assets and update repository/docs guidance +- Phase 3: 2 tasks - close final review drift in pack descriptions and + `oat-doctor` guidance -**Total: 4 tasks** +**Total: 6 tasks** -Ready for code review and merge. +Ready for review-fix implementation. --- diff --git a/.oat/projects/shared/docs-pack-split/reviews/final-review-2026-03-20.md b/.oat/projects/shared/docs-pack-split/reviews/final-review-2026-03-20.md deleted file mode 100644 index a6307248..00000000 --- a/.oat/projects/shared/docs-pack-split/reviews/final-review-2026-03-20.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -oat_generated: true -oat_generated_at: 2026-03-20 -oat_review_scope: final -oat_review_type: code -oat_project: .oat/projects/shared/docs-pack-split ---- - -# Code Review: final (595435e2..HEAD) - -**Reviewed:** 2026-03-20 -**Scope:** Final review of all four tasks (p01-t01, p01-t02, p02-t01, p02-t02) -**Files reviewed:** 38 -**Commits:** 8 (983e23bc..0b07f98e) - -## Summary - -The implementation is solid and complete. All four planned tasks have been executed: the `docs` pack exists as a first-class CLI concept, pack scanning/update/remove/help surfaces recognize it, the shared tracking helper has been relocated to a neutral path, and documentation has been updated throughout. One minor stale description string was found in the init-tools PACK_DESCRIPTIONS constant. All 116 task-owned tests pass; lint and type-check are clean. - -## Findings - -### Critical - -None - -### Important - -None - -### Minor - -- **Stale utility pack description in PACK_DESCRIPTIONS** (`packages/cli/src/commands/init/tools/index.ts:332`) - - Issue: The `utility` entry in `PACK_DESCRIPTIONS` reads `'Standalone utilities (reviews, docs analysis, agent instructions)'` but docs analysis and agent instructions skills have been moved to the `docs` pack. The parenthetical no longer matches the actual `UTILITY_SKILLS` contents (`create-agnostic-skill`, `oat-repo-maintainability-review`, `oat-review-provide`, `oat-review-receive`, `oat-review-receive-remote`). - - Suggestion: Update to something like `'Standalone utilities (skill authoring, maintainability review, code reviews)'` to match the actual pack contents. This string is rendered into the AGENTS.md tool-packs section for every project that runs `oat init tools`. - -- **Incomplete pack enum in oat-doctor SKILL.md** (`.agents/skills/oat-doctor/SKILL.md:89`) - - Issue: The JSON parsing guidance says `pack (core/ideas/workflows/utility/custom)` but the actual `PackName` type includes `docs`, `project-management`, and `research`. While `docs` is part of this PR's scope, the missing `project-management` and `research` entries predate this change. - - Suggestion: Update the line to `pack (core/docs/ideas/workflows/utility/project-management/research/custom)` to match the current `PackName` type union. At minimum, adding `docs` is in scope for this PR. - -## Requirements/Design Alignment - -**Evidence sources used:** `discovery.md`, `plan.md`, `implementation.md` (quick workflow mode; no spec or design artifacts) - -### Requirements Coverage - -| Requirement | Status | Notes | -| ------------------------------------------------------------------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------ | -| `docs` pack exists and can be installed same as other packs | implemented | `DOCS_SKILLS` manifest, installer command, `oat init tools docs`, `oat tools install docs` all work | -| Four analyze/apply skills recognized as `docs` pack by scan/list/update/remove | implemented | `resolveSkillPack` in `scan-tools.ts` checks `DOCS_SKILLS`; update/remove `VALID_PACKS` include `docs` | -| Moved skills no longer depend on internal helper path in another pack | implemented | All skill SKILL.md files reference `.oat/scripts/resolve-tracking.sh`; old path has zero matches in skill/CLI files | -| End-user docs and help snapshots consistently describe the new pack layout | implemented | Help snapshots pass; docs pages updated; README updated | -| `oat-docs` remains in `core` | implemented | `CORE_SKILLS` still contains `oat-docs`; `DOCS_SKILLS` does not | -| Pack is user-eligible (project or user scope) | implemented | `USER_ELIGIBLE_PACKS` set includes `docs`; `PACK_CHOICES` marks it `[project\|user]` | -| Legacy `oat remove skills --pack docs` supported | implemented | `PACK_SKILLS` map and `isPackName` guard both include `docs` | -| Shared helper at neutral location | implemented | `.oat/scripts/resolve-tracking.sh` exists; bundled via `bundle-assets.sh`; installed by both workflow and docs pack installers | -| No hidden cross-pack runtime dependency | implemented | `DOCS_SCRIPTS` explicitly installs `resolve-tracking.sh` alongside docs skills | -| Help text updated for update/remove commands | implemented | `--pack` help strings include `docs`; inline snapshot tests pass | -| Bundle consistency maintained | implemented | `bundle-consistency.test.ts` covers docs skills; orphan check includes `DOCS_SKILLS` in the union | -| Docs pages reflect new pack model | implemented | `tool-packs.md`, `getting-started.md`, `cli-reference.md`, `quickstart.md`, `workflows.md` all updated | - -### Extra Work (not in declared requirements) - -- Updated `oat-doctor` SKILL.md pack inventory and examples (not explicitly in plan, but clearly within the discovery's "CLI and docs stay aligned" success criterion). -- Removed stale symlink at `.agents/skills/oat-agent-instructions-apply/scripts/resolve-tracking.sh` (cleanup needed for docs build to pass; reasonable scope inclusion). - -Both are minor scope additions that support the declared success criteria. No significant scope creep. - -## Verification Commands - -Run these to verify the implementation: - -```bash -# Run all task-owned tests (116 tests across 10 files) -cd /Users/thomas.stang/.codex/worktrees/1096/open-agent-toolkit && pnpm --filter @oat/cli exec vitest run src/commands/init/tools/docs/install-docs.test.ts src/commands/init/tools/docs/index.test.ts src/commands/init/tools/index.test.ts src/commands/init/tools/shared/bundle-consistency.test.ts src/commands/tools/shared/scan-tools.test.ts src/commands/tools/list/list-tools.test.ts src/commands/tools/update/update-tools.test.ts src/commands/tools/remove/remove-tools.test.ts src/commands/remove/skills/remove-skills.test.ts src/commands/help-snapshots.test.ts - -# Lint and type-check -cd /Users/thomas.stang/.codex/worktrees/1096/open-agent-toolkit && pnpm --filter @oat/cli lint && pnpm --filter @oat/cli type-check - -# Verify no stale old helper path references remain -cd /Users/thomas.stang/.codex/worktrees/1096/open-agent-toolkit && rg -n "oat-agent-instructions-analyze/scripts/resolve-tracking" .agents/skills packages/cli/scripts .oat/scripts - -# Verify docs build passes -cd /Users/thomas.stang/.codex/worktrees/1096/open-agent-toolkit && pnpm build:docs - -# Verify no stale utility-pack docs references -cd /Users/thomas.stang/.codex/worktrees/1096/open-agent-toolkit && rg -n "utility pack installs|installed via the utility pack|oat init tools utility" README.md apps/oat-docs/docs .agents/skills -``` diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md index 772c42a3..a1771e14 100644 --- a/.oat/projects/shared/docs-pack-split/state.md +++ b/.oat/projects/shared/docs-pack-split/state.md @@ -1,5 +1,5 @@ --- -oat_current_task: null +oat_current_task: p03-t01 oat_last_commit: ce0a6352baa7a3939d75302648fb516850028739 oat_blockers: [] associated_issues: [] # [{type: backlog|project|jira|linear, ref: "identifier"}] @@ -7,27 +7,27 @@ oat_hill_checkpoints: ['p02'] # Configured: which phases require human-in-the-lo oat_hill_completed: [] # Progress: which HiLL checkpoints have been completed oat_parallel_execution: false oat_phase: implement # Current phase: discovery | spec | design | plan | implement -oat_phase_status: complete # Status: in_progress | complete +oat_phase_status: in_progress # Status: in_progress | complete oat_execution_mode: single-thread # single-thread | subagent-driven oat_workflow_mode: quick # spec-driven | quick | import oat_workflow_origin: native # native | imported oat_docs_updated: complete # null | skipped | complete — documentation sync status oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived -oat_project_state_updated: '2026-03-20T20:14:48Z' # ISO 8601 UTC timestamp — updated on every state.md mutation +oat_project_state_updated: '2026-03-20T21:30:38Z' # ISO 8601 UTC timestamp — updated on every state.md mutation oat_generated: false --- # Project State: docs-pack-split -**Status:** Awaiting p02 checkpoint +**Status:** Review fixes queued **Started:** 2026-03-20 **Last Updated:** 2026-03-20 ## Current Phase -Implementation tasks are complete for quick workflow mode; paused at the -configured `p02` human checkpoint before review/finalization. +Final review feedback has been received and converted into follow-up +implementation work. ## Artifacts @@ -46,7 +46,8 @@ configured `p02` human checkpoint before review/finalization. - ✓ Phase 1 complete - ✓ `p02-t01` complete - ✓ `p02-t02` complete -- ⧗ Awaiting `p02` checkpoint approval +- ✓ Final review received +- ⧗ Implementing `p03-t01` ## Blockers @@ -54,4 +55,4 @@ None ## Next Milestone -Confirm the `p02` checkpoint, then continue into review/finalization +Complete `p03-t01` and continue the review-fix loop From 6f67d1b52bfd7f498d1238a5edb47402b7d22e17 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 17:43:59 -0500 Subject: [PATCH 11/23] fix(p03-t01): correct utility pack description --- packages/cli/src/commands/init/tools/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/commands/init/tools/index.ts b/packages/cli/src/commands/init/tools/index.ts index 956af348..2f04c603 100644 --- a/packages/cli/src/commands/init/tools/index.ts +++ b/packages/cli/src/commands/init/tools/index.ts @@ -329,7 +329,8 @@ const PACK_DESCRIPTIONS: Record = { ideas: 'Idea capture and refinement', 'project-management': 'Local backlog, roadmap, and reference doc management (oat-pjm-* skills)', - utility: 'Standalone utilities (reviews, docs analysis, agent instructions)', + utility: + 'Standalone utilities (skill authoring, maintainability review, code reviews)', research: 'Research, analysis, verification, and synthesis', }; From 1d013c2d2fae593955c3ae5c781b8935e0f48684 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 17:44:43 -0500 Subject: [PATCH 12/23] chore(oat): update tracking artifacts for p03-t01 --- .../shared/docs-pack-split/implementation.md | 54 ++++++++++++++++--- .oat/projects/shared/docs-pack-split/state.md | 11 ++-- 2 files changed, 54 insertions(+), 11 deletions(-) diff --git a/.oat/projects/shared/docs-pack-split/implementation.md b/.oat/projects/shared/docs-pack-split/implementation.md index d0b41a71..e430b425 100644 --- a/.oat/projects/shared/docs-pack-split/implementation.md +++ b/.oat/projects/shared/docs-pack-split/implementation.md @@ -3,7 +3,7 @@ oat_status: in_progress oat_ready_for: null oat_blockers: [] oat_last_updated: 2026-03-20 -oat_current_task_id: p03-t01 +oat_current_task_id: p03-t02 oat_generated: false --- @@ -28,9 +28,9 @@ oat_generated: false | ------- | ----------- | ----- | --------- | | Phase 1 | completed | 2 | 2/2 | | Phase 2 | completed | 2 | 2/2 | -| Phase 3 | in_progress | 2 | 0/2 | +| Phase 3 | in_progress | 2 | 1/2 | -**Total:** 4/6 tasks completed +**Total:** 5/6 tasks completed --- @@ -291,6 +291,47 @@ oat_generated: false --- +## Phase 3: Review Fixes + +**Status:** in_progress +**Started:** 2026-03-20 + +### Task p03-t01: (review) Update the utility pack description to match the split + +**Status:** completed +**Commit:** fa480c4ed59dc32d1e9469353aaf4cdbe672bf24 + +**Outcome (required when completed):** + +- Updated the `utility` pack description so it no longer claims the pack + contains docs-analysis and agent-instructions workflows. +- Reworded the description to match the actual post-split utility-pack + contents: skill authoring, maintainability review, and code reviews. + +**Files changed:** + +- `packages/cli/src/commands/init/tools/index.ts` - corrected the utility-pack + description constant used by generated tool-pack guidance + +**Verification:** + +- Run: `pnpm --filter @oat/cli exec vitest run src/commands/init/tools/index.test.ts src/commands/help-snapshots.test.ts` +- Result: pass + +**Notes / Decisions:** + +- The targeted test run covered the user-facing description drift without + requiring any additional fixture changes. + +--- + +### Task p03-t02: (review) Expand oat-doctor pack guidance to match PackName + +**Status:** pending +**Commit:** - + +--- + ## Orchestration Runs > This section is used by `oat-project-subagent-implement` to log parallel execution runs. @@ -399,14 +440,15 @@ Chronological log of implementation progress. - [x] final review received and parsed - [x] m1 converted to `p03-t01` - [x] m2 converted to `p03-t02` -- [ ] Execute `p03-t01` +- [x] Execute `p03-t01` - fa480c4e - [ ] Execute `p03-t02` **What changed (high level):** - Processed the active final code review artifact - Added a dedicated review-fixes phase with two small follow-up tasks -- Reset implementation state to resume at `p03-t01` +- Corrected the stale `utility` pack description and advanced execution to + `p03-t02` **Decisions:** @@ -417,7 +459,7 @@ Chronological log of implementation progress. **Follow-ups / TODO:** -- Implement `p03-t01` and `p03-t02` +- Implement `p03-t02` - Re-run final code review after fixes land **Blockers:** diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md index a1771e14..160195e4 100644 --- a/.oat/projects/shared/docs-pack-split/state.md +++ b/.oat/projects/shared/docs-pack-split/state.md @@ -1,6 +1,6 @@ --- -oat_current_task: p03-t01 -oat_last_commit: ce0a6352baa7a3939d75302648fb516850028739 +oat_current_task: p03-t02 +oat_last_commit: fa480c4ed59dc32d1e9469353aaf4cdbe672bf24 oat_blockers: [] associated_issues: [] # [{type: backlog|project|jira|linear, ref: "identifier"}] oat_hill_checkpoints: ['p02'] # Configured: which phases require human-in-the-loop lifecycle approval @@ -14,7 +14,7 @@ oat_workflow_origin: native # native | imported oat_docs_updated: complete # null | skipped | complete — documentation sync status oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived -oat_project_state_updated: '2026-03-20T21:30:38Z' # ISO 8601 UTC timestamp — updated on every state.md mutation +oat_project_state_updated: '2026-03-20T22:43:59Z' # ISO 8601 UTC timestamp — updated on every state.md mutation oat_generated: false --- @@ -47,7 +47,8 @@ implementation work. - ✓ `p02-t01` complete - ✓ `p02-t02` complete - ✓ Final review received -- ⧗ Implementing `p03-t01` +- ✓ `p03-t01` complete +- ⧗ Implementing `p03-t02` ## Blockers @@ -55,4 +56,4 @@ None ## Next Milestone -Complete `p03-t01` and continue the review-fix loop +Complete `p03-t02` and request final re-review From 13ea57117d0da689eb621b0ba6d5ad1782af80f5 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 17:45:31 -0500 Subject: [PATCH 13/23] fix(p03-t02): align oat-doctor pack guidance --- .agents/skills/oat-doctor/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.agents/skills/oat-doctor/SKILL.md b/.agents/skills/oat-doctor/SKILL.md index c92f0529..30c51048 100644 --- a/.agents/skills/oat-doctor/SKILL.md +++ b/.agents/skills/oat-doctor/SKILL.md @@ -86,7 +86,7 @@ Read `$ARGUMENTS`: TOOLS_JSON=$(oat tools list --json --scope all 2>/dev/null || echo '{"tools":[]}') ``` -Parse the JSON output. Each tool has: `name`, `type` (skill/agent), `scope` (project/user), `version`, `bundledVersion`, `pack` (core/ideas/workflows/utility/custom), `status` (current/outdated/newer/not-bundled). +Parse the JSON output. Each tool has: `name`, `type` (skill/agent), `scope` (project/user), `version`, `bundledVersion`, `pack` (core/docs/ideas/workflows/utility/project-management/research/custom), `status` (current/outdated/newer/not-bundled). ### Step 2: Check for Outdated Skills From ce176a43e5cf582a2a05f0de64c57ea451c0e60c Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 17:46:12 -0500 Subject: [PATCH 14/23] chore(oat): update tracking artifacts for p03-t02 --- .../shared/docs-pack-split/implementation.md | 118 ++++++++++++++---- .oat/projects/shared/docs-pack-split/plan.md | 16 +-- .oat/projects/shared/docs-pack-split/state.md | 17 +-- 3 files changed, 108 insertions(+), 43 deletions(-) diff --git a/.oat/projects/shared/docs-pack-split/implementation.md b/.oat/projects/shared/docs-pack-split/implementation.md index e430b425..2e24778b 100644 --- a/.oat/projects/shared/docs-pack-split/implementation.md +++ b/.oat/projects/shared/docs-pack-split/implementation.md @@ -1,9 +1,9 @@ --- -oat_status: in_progress +oat_status: complete oat_ready_for: null oat_blockers: [] oat_last_updated: 2026-03-20 -oat_current_task_id: p03-t02 +oat_current_task_id: null oat_generated: false --- @@ -24,13 +24,13 @@ oat_generated: false ## Progress Overview -| Phase | Status | Tasks | Completed | -| ------- | ----------- | ----- | --------- | -| Phase 1 | completed | 2 | 2/2 | -| Phase 2 | completed | 2 | 2/2 | -| Phase 3 | in_progress | 2 | 1/2 | +| Phase | Status | Tasks | Completed | +| ------- | --------- | ----- | --------- | +| Phase 1 | completed | 2 | 2/2 | +| Phase 2 | completed | 2 | 2/2 | +| Phase 3 | completed | 2 | 2/2 | -**Total:** 5/6 tasks completed +**Total:** 6/6 tasks completed --- @@ -293,9 +293,34 @@ oat_generated: false ## Phase 3: Review Fixes -**Status:** in_progress +**Status:** completed **Started:** 2026-03-20 +### Phase Summary + +**Outcome (what changed):** + +- Cleared the two final-review minor findings without expanding scope beyond + the reported drift. +- Corrected the stale `utility` pack description in the CLI installer guidance + so generated tool-pack docs match the actual manifest split. +- Updated `oat-doctor` guidance to list the full current pack set used by the + CLI. + +**Key files touched:** + +- `packages/cli/src/commands/init/tools/index.ts` - corrected user-facing + utility-pack description +- `.agents/skills/oat-doctor/SKILL.md` - aligned pack enum guidance with the + `PackName` union + +**Verification:** + +- Run: `pnpm --filter @oat/cli exec vitest run src/commands/init/tools/index.test.ts src/commands/help-snapshots.test.ts` +- Result: pass +- Run: `rg -n -F "core/docs/ideas/workflows/utility/project-management/research/custom" .agents/skills/oat-doctor/SKILL.md` +- Result: pass + ### Task p03-t01: (review) Update the utility pack description to match the split **Status:** completed @@ -327,8 +352,30 @@ oat_generated: false ### Task p03-t02: (review) Expand oat-doctor pack guidance to match PackName -**Status:** pending -**Commit:** - +**Status:** completed +**Commit:** 29f26e8177973dc0aa971d8cefe6ee5035f2b205 + +**Outcome (required when completed):** + +- Expanded the `oat-doctor` guidance line to include `docs`, + `project-management`, and `research` in the documented pack enum. +- Brought the skill’s pack-model explanation back into sync with the CLI’s + current `PackName` union. + +**Files changed:** + +- `.agents/skills/oat-doctor/SKILL.md` - corrected pack enum guidance in the + JSON parsing instructions + +**Verification:** + +- Run: `rg -n -F "core/docs/ideas/workflows/utility/project-management/research/custom" .agents/skills/oat-doctor/SKILL.md` +- Result: pass + +**Notes / Decisions:** + +- Used an exact-string check instead of the original regex-shaped probe because + the markdown punctuation made the regex unnecessarily brittle. --- @@ -368,13 +415,13 @@ oat_generated: false - `m2` -> converted (`p03-t02`) - align `oat-doctor` pack enum guidance with the current `PackName` union -**Next:** Execute fix tasks via the `oat-project-implement` skill. +**Next:** Re-run `oat-project-review-provide code final`, then +`oat-project-review-receive` to close the final review gate. -After the fix tasks are complete: +Review-fix tasks are complete: -- Update the review row status to `fixes_completed` -- Re-run `oat-project-review-provide code final` then - `oat-project-review-receive` to reach `passed` +- The review row should now be `fixes_completed` +- The next lifecycle step is final re-review, not more implementation work --- @@ -441,14 +488,14 @@ Chronological log of implementation progress. - [x] m1 converted to `p03-t01` - [x] m2 converted to `p03-t02` - [x] Execute `p03-t01` - fa480c4e -- [ ] Execute `p03-t02` +- [x] Execute `p03-t02` - 29f26e81 **What changed (high level):** - Processed the active final code review artifact - Added a dedicated review-fixes phase with two small follow-up tasks -- Corrected the stale `utility` pack description and advanced execution to - `p03-t02` +- Corrected the stale `utility` pack description and the truncated + `oat-doctor` pack enum guidance **Decisions:** @@ -459,7 +506,6 @@ Chronological log of implementation progress. **Follow-ups / TODO:** -- Implement `p03-t02` - Re-run final code review after fixes land **Blockers:** @@ -480,34 +526,52 @@ Document any deviations from the original plan. Track test execution during implementation. -| Phase | Tests Run | Passed | Failed | Coverage | -| ----- | --------- | ------ | ------ | -------- | -| 1 | - | - | - | - | -| 2 | - | - | - | - | +| Phase | Tests Run | Passed | Failed | Coverage | +| ----- | ------------------------------ | ------ | ------ | ---------- | +| 1 | - | - | - | - | +| 2 | - | - | - | - | +| 3 | targeted verification commands | ✓ | 0 | task-owned | ## Final Summary (for PR/docs) **What shipped:** -- Not yet implemented +- Added a first-class `docs` tool pack while keeping `oat-docs` in `core` +- Propagated the new pack through install, scan, update, remove, and help + surfaces +- Moved the shared tracking helper to `.oat/scripts` +- Updated product docs and `oat-doctor` guidance to reflect the new pack layout +- Closed the final review drift with two small follow-up fixes **Behavioral changes (user-facing):** -- Not yet implemented +- Users can install and manage docs workflows via a dedicated `docs` pack +- Generated tool-pack guidance now describes `utility` accurately after the + split +- `oat-doctor` guidance now lists the full supported pack set **Key files / modules:** - `packages/cli/src/commands/init/tools/` - pack installer and manifest work - `packages/cli/src/commands/tools/` - pack lifecycle and scan/update/remove behavior - `apps/oat-docs/docs/` - end-user docs for the new pack layout +- `.oat/scripts/resolve-tracking.sh` - neutral shared helper location +- `.agents/skills/oat-doctor/SKILL.md` - updated pack guidance **Verification performed:** -- Planning only - no implementation verification yet +- Task-owned Vitest coverage for init-tools/docs-pack/help flows +- `pnpm --filter @oat/cli lint` +- `pnpm --filter @oat/cli type-check` +- `pnpm --filter oat-docs docs:lint` +- `pnpm build:docs` +- targeted `rg` checks for stale helper-path and pack-taxonomy drift **Design deltas (if any):** - No design artifact used in this quick-mode project +- Review-fix work added a dedicated `Phase 3` rather than mutating prior phase + task lists in place ## References diff --git a/.oat/projects/shared/docs-pack-split/plan.md b/.oat/projects/shared/docs-pack-split/plan.md index 6dbc0f42..73578228 100644 --- a/.oat/projects/shared/docs-pack-split/plan.md +++ b/.oat/projects/shared/docs-pack-split/plan.md @@ -307,13 +307,13 @@ git commit -m "fix(p03-t02): align oat-doctor pack guidance" {Keep both code + artifact rows below. Add additional code rows (p03, p04, etc.) as needed, but do not delete `spec`/`design`.} -| Scope | Type | Status | Date | Artifact | -| ------ | -------- | ----------- | ---------- | ------------------------------------------- | -| p01 | code | pending | - | - | -| p02 | code | pending | - | - | -| final | code | fixes_added | 2026-03-20 | reviews/archived/final-review-2026-03-20.md | -| spec | artifact | pending | - | - | -| design | artifact | pending | - | - | +| Scope | Type | Status | Date | Artifact | +| ------ | -------- | --------------- | ---------- | ------------------------------------------- | +| p01 | code | pending | - | - | +| p02 | code | pending | - | - | +| final | code | fixes_completed | 2026-03-20 | reviews/archived/final-review-2026-03-20.md | +| spec | artifact | pending | - | - | +| design | artifact | pending | - | - | **Status values:** `pending` → `received` → `fixes_added` → `fixes_completed` → `passed` @@ -339,7 +339,7 @@ git commit -m "fix(p03-t02): align oat-doctor pack guidance" **Total: 6 tasks** -Ready for review-fix implementation. +Ready for final re-review. --- diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md index 160195e4..f6f22721 100644 --- a/.oat/projects/shared/docs-pack-split/state.md +++ b/.oat/projects/shared/docs-pack-split/state.md @@ -1,6 +1,6 @@ --- -oat_current_task: p03-t02 -oat_last_commit: fa480c4ed59dc32d1e9469353aaf4cdbe672bf24 +oat_current_task: null +oat_last_commit: 29f26e8177973dc0aa971d8cefe6ee5035f2b205 oat_blockers: [] associated_issues: [] # [{type: backlog|project|jira|linear, ref: "identifier"}] oat_hill_checkpoints: ['p02'] # Configured: which phases require human-in-the-loop lifecycle approval @@ -14,20 +14,20 @@ oat_workflow_origin: native # native | imported oat_docs_updated: complete # null | skipped | complete — documentation sync status oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived -oat_project_state_updated: '2026-03-20T22:43:59Z' # ISO 8601 UTC timestamp — updated on every state.md mutation +oat_project_state_updated: '2026-03-20T22:45:31Z' # ISO 8601 UTC timestamp — updated on every state.md mutation oat_generated: false --- # Project State: docs-pack-split -**Status:** Review fixes queued +**Status:** Awaiting final re-review **Started:** 2026-03-20 **Last Updated:** 2026-03-20 ## Current Phase -Final review feedback has been received and converted into follow-up -implementation work. +All implementation and review-fix tasks are complete. Final re-review is the +next required gate. ## Artifacts @@ -48,7 +48,8 @@ implementation work. - ✓ `p02-t02` complete - ✓ Final review received - ✓ `p03-t01` complete -- ⧗ Implementing `p03-t02` +- ✓ `p03-t02` complete +- ⧗ Awaiting final re-review ## Blockers @@ -56,4 +57,4 @@ None ## Next Milestone -Complete `p03-t02` and request final re-review +Run final re-review and process it via `oat-project-review-receive` From 029bff8d3e86e689507ffee059bfbd54254cc59b Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 18:10:05 -0500 Subject: [PATCH 15/23] chore(oat): receive follow-up final review findings --- .../shared/docs-pack-split/implementation.md | 66 +++++++++++++++---- .oat/projects/shared/docs-pack-split/plan.md | 56 ++++++++++++---- .oat/projects/shared/docs-pack-split/state.md | 15 +++-- 3 files changed, 108 insertions(+), 29 deletions(-) diff --git a/.oat/projects/shared/docs-pack-split/implementation.md b/.oat/projects/shared/docs-pack-split/implementation.md index 2e24778b..88520ddf 100644 --- a/.oat/projects/shared/docs-pack-split/implementation.md +++ b/.oat/projects/shared/docs-pack-split/implementation.md @@ -1,9 +1,9 @@ --- -oat_status: complete +oat_status: in_progress oat_ready_for: null oat_blockers: [] oat_last_updated: 2026-03-20 -oat_current_task_id: null +oat_current_task_id: p03-t03 oat_generated: false --- @@ -24,13 +24,13 @@ oat_generated: false ## Progress Overview -| Phase | Status | Tasks | Completed | -| ------- | --------- | ----- | --------- | -| Phase 1 | completed | 2 | 2/2 | -| Phase 2 | completed | 2 | 2/2 | -| Phase 3 | completed | 2 | 2/2 | +| Phase | Status | Tasks | Completed | +| ------- | ----------- | ----- | --------- | +| Phase 1 | completed | 2 | 2/2 | +| Phase 2 | completed | 2 | 2/2 | +| Phase 3 | in_progress | 3 | 2/3 | -**Total:** 6/6 tasks completed +**Total:** 6/7 tasks completed --- @@ -293,19 +293,21 @@ oat_generated: false ## Phase 3: Review Fixes -**Status:** completed +**Status:** in_progress **Started:** 2026-03-20 ### Phase Summary **Outcome (what changed):** -- Cleared the two final-review minor findings without expanding scope beyond - the reported drift. +- Cleared the original two final-review minor findings without expanding scope + beyond the reported drift. - Corrected the stale `utility` pack description in the CLI installer guidance so generated tool-pack docs match the actual manifest split. - Updated `oat-doctor` guidance to list the full current pack set used by the CLI. +- A narrowed final re-review found one remaining `oat-doctor` + summary-manifest gap that is now queued as `p03-t03`. **Key files touched:** @@ -379,6 +381,13 @@ oat_generated: false --- +### Task p03-t03: (review) Complete oat-doctor summary pack manifest coverage + +**Status:** pending +**Commit:** - + +--- + ## Orchestration Runs > This section is used by `oat-project-subagent-implement` to log parallel execution runs. @@ -425,6 +434,35 @@ Review-fix tasks are complete: --- +## Review Received: final (re-review 2) + +**Date:** 2026-03-20 +**Review artifact:** reviews/archived/final-review-2026-03-20-v2.md + +**Findings:** + +- Critical: 0 +- Important: 1 +- Medium: 0 +- Minor: 0 + +**New tasks added:** `p03-t03` + +**Finding disposition map:** + +- `I1` -> converted (`p03-t03`) - complete the `oat-doctor` summary-mode + bundled-skill manifest so it includes `project-management` and `research` + +**Next:** Execute fix task `p03-t03` via the `oat-project-implement` skill. + +After the fix task is complete: + +- Update the review row status to `fixes_completed` +- Re-run `oat-project-review-provide code final` then + `oat-project-review-receive` to reach `passed` + +--- + ## Implementation Log Chronological log of implementation progress. @@ -489,6 +527,9 @@ Chronological log of implementation progress. - [x] m2 converted to `p03-t02` - [x] Execute `p03-t01` - fa480c4e - [x] Execute `p03-t02` - 29f26e81 +- [x] final re-review received and parsed +- [x] I1 converted to `p03-t03` +- [ ] Execute `p03-t03` **What changed (high level):** @@ -496,6 +537,8 @@ Chronological log of implementation progress. - Added a dedicated review-fixes phase with two small follow-up tasks - Corrected the stale `utility` pack description and the truncated `oat-doctor` pack enum guidance +- Processed the narrowed final re-review and queued one more bounded + `oat-doctor` summary-manifest fix **Decisions:** @@ -506,6 +549,7 @@ Chronological log of implementation progress. **Follow-ups / TODO:** +- Implement `p03-t03` - Re-run final code review after fixes land **Blockers:** diff --git a/.oat/projects/shared/docs-pack-split/plan.md b/.oat/projects/shared/docs-pack-split/plan.md index 73578228..596f7fbb 100644 --- a/.oat/projects/shared/docs-pack-split/plan.md +++ b/.oat/projects/shared/docs-pack-split/plan.md @@ -301,19 +301,53 @@ git commit -m "fix(p03-t02): align oat-doctor pack guidance" --- +### Task p03-t03: (review) Complete oat-doctor summary pack manifest coverage + +**Files:** + +- Modify: `.agents/skills/oat-doctor/SKILL.md` + +**Step 1: Understand the issue** + +Review finding: The `oat-doctor` summary-mode bundled-skill manifest and +example output still omit the `project-management` and `research` packs, even +after the enum line was corrected. +Location: `.agents/skills/oat-doctor/SKILL.md:170` + +**Step 2: Implement fix** + +Extend the Step 5 pack-manifest section and the Step 7 summary-mode example so +they include `project-management` and `research`, or otherwise make the +documented pack list match the shared CLI manifest. + +**Step 3: Verify** + +Run: `rg -n -e 'Project management pack skills' -e 'Research pack skills' .agents/skills/oat-doctor/SKILL.md && rg -n -F 'oat-pjm-add-backlog-item' .agents/skills/oat-doctor/SKILL.md && rg -n -F 'deep-research' .agents/skills/oat-doctor/SKILL.md` +Expected: the summary-manifest section and example output include the missing +packs and representative skills + +**Step 4: Commit** + +```bash +git add .agents/skills/oat-doctor/SKILL.md +git commit -m "fix(p03-t03): complete oat-doctor manifest guidance" +``` + +--- + ## Reviews {Track reviews here after running the oat-project-review-provide and oat-project-review-receive skills.} {Keep both code + artifact rows below. Add additional code rows (p03, p04, etc.) as needed, but do not delete `spec`/`design`.} -| Scope | Type | Status | Date | Artifact | -| ------ | -------- | --------------- | ---------- | ------------------------------------------- | -| p01 | code | pending | - | - | -| p02 | code | pending | - | - | -| final | code | fixes_completed | 2026-03-20 | reviews/archived/final-review-2026-03-20.md | -| spec | artifact | pending | - | - | -| design | artifact | pending | - | - | +| Scope | Type | Status | Date | Artifact | +| ------ | -------- | ----------- | ---------- | ---------------------------------------------- | +| p01 | code | pending | - | - | +| p02 | code | pending | - | - | +| final | code | fixes_added | 2026-03-20 | reviews/archived/final-review-2026-03-20-v2.md | +| spec | artifact | pending | - | - | +| design | artifact | pending | - | - | **Status values:** `pending` → `received` → `fixes_added` → `fixes_completed` → `passed` @@ -334,12 +368,12 @@ git commit -m "fix(p03-t02): align oat-doctor pack guidance" and help surfaces - Phase 2: 2 tasks - decouple shared helper assets and update repository/docs guidance -- Phase 3: 2 tasks - close final review drift in pack descriptions and - `oat-doctor` guidance +- Phase 3: 3 tasks - close final review drift in pack descriptions and + `oat-doctor` guidance, including the summary-manifest follow-up -**Total: 6 tasks** +**Total: 7 tasks** -Ready for final re-review. +Ready for review-fix implementation. --- diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md index f6f22721..37d25c18 100644 --- a/.oat/projects/shared/docs-pack-split/state.md +++ b/.oat/projects/shared/docs-pack-split/state.md @@ -1,5 +1,5 @@ --- -oat_current_task: null +oat_current_task: p03-t03 oat_last_commit: 29f26e8177973dc0aa971d8cefe6ee5035f2b205 oat_blockers: [] associated_issues: [] # [{type: backlog|project|jira|linear, ref: "identifier"}] @@ -14,20 +14,20 @@ oat_workflow_origin: native # native | imported oat_docs_updated: complete # null | skipped | complete — documentation sync status oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived -oat_project_state_updated: '2026-03-20T22:45:31Z' # ISO 8601 UTC timestamp — updated on every state.md mutation +oat_project_state_updated: '2026-03-20T23:08:14Z' # ISO 8601 UTC timestamp — updated on every state.md mutation oat_generated: false --- # Project State: docs-pack-split -**Status:** Awaiting final re-review +**Status:** Review fixes queued **Started:** 2026-03-20 **Last Updated:** 2026-03-20 ## Current Phase -All implementation and review-fix tasks are complete. Final re-review is the -next required gate. +The narrowed final re-review found one remaining bounded issue, which has been +converted into a follow-up implementation task. ## Artifacts @@ -49,7 +49,8 @@ next required gate. - ✓ Final review received - ✓ `p03-t01` complete - ✓ `p03-t02` complete -- ⧗ Awaiting final re-review +- ✓ Final re-review received +- ⧗ Implementing `p03-t03` ## Blockers @@ -57,4 +58,4 @@ None ## Next Milestone -Run final re-review and process it via `oat-project-review-receive` +Complete `p03-t03` and re-run final review From 582b59802cb520c0d5d8e466829d8b93a8e8c476 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 18:12:39 -0500 Subject: [PATCH 16/23] fix(p03-t03): complete oat-doctor manifest guidance --- .agents/skills/oat-doctor/SKILL.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.agents/skills/oat-doctor/SKILL.md b/.agents/skills/oat-doctor/SKILL.md index 30c51048..8f5fe8df 100644 --- a/.agents/skills/oat-doctor/SKILL.md +++ b/.agents/skills/oat-doctor/SKILL.md @@ -178,6 +178,16 @@ Utility pack skills: - oat-repo-maintainability-review, oat-review-provide - oat-review-receive, oat-review-receive-remote +Project management pack skills: + +- oat-pjm-add-backlog-item, oat-pjm-update-repo-reference +- oat-pjm-review-backlog + +Research pack skills: + +- analyze, compare, deep-research +- skeptic, synthesize + For each pack, determine: - **Installed:** all pack skills found in installed tools list @@ -212,6 +222,8 @@ OAT ▸ DOCTOR SUMMARY | docs | project | 4/4 | current | | workflows | project | 26/26 | current | | ideas | user | 4/4 | current | +| project-management | project | 3/3 | current | +| research | project | 5/5 | current | | utility | project | 5/5 | outdated | ## Outdated Skills @@ -224,6 +236,10 @@ OAT ▸ DOCTOR SUMMARY - **docs** pack: oat-docs-analyze, oat-docs-apply, oat-agent-instructions-analyze, oat-agent-instructions-apply (4 skills available) → Run: oat tools install docs --scope {scope} +- **project-management** pack: oat-pjm-add-backlog-item, oat-pjm-update-repo-reference, oat-pjm-review-backlog (3 skills available) + → Run: oat tools install project-management --scope {scope} +- **research** pack: analyze, compare, deep-research, skeptic, synthesize (5 skills available) + → Run: oat tools install research --scope {scope} ## Configuration From 7c4ab6de330604fec848db82ffaa5d9e6aad86f2 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 18:13:19 -0500 Subject: [PATCH 17/23] chore(oat): update tracking artifacts for p03-t03 --- .../shared/docs-pack-split/implementation.md | 67 +++++++++++++------ .oat/projects/shared/docs-pack-split/plan.md | 16 ++--- .oat/projects/shared/docs-pack-split/state.md | 17 ++--- 3 files changed, 64 insertions(+), 36 deletions(-) diff --git a/.oat/projects/shared/docs-pack-split/implementation.md b/.oat/projects/shared/docs-pack-split/implementation.md index 88520ddf..04e05f72 100644 --- a/.oat/projects/shared/docs-pack-split/implementation.md +++ b/.oat/projects/shared/docs-pack-split/implementation.md @@ -1,9 +1,9 @@ --- -oat_status: in_progress +oat_status: complete oat_ready_for: null oat_blockers: [] oat_last_updated: 2026-03-20 -oat_current_task_id: p03-t03 +oat_current_task_id: null oat_generated: false --- @@ -24,13 +24,13 @@ oat_generated: false ## Progress Overview -| Phase | Status | Tasks | Completed | -| ------- | ----------- | ----- | --------- | -| Phase 1 | completed | 2 | 2/2 | -| Phase 2 | completed | 2 | 2/2 | -| Phase 3 | in_progress | 3 | 2/3 | +| Phase | Status | Tasks | Completed | +| ------- | --------- | ----- | --------- | +| Phase 1 | completed | 2 | 2/2 | +| Phase 2 | completed | 2 | 2/2 | +| Phase 3 | completed | 3 | 3/3 | -**Total:** 6/7 tasks completed +**Total:** 7/7 tasks completed --- @@ -293,7 +293,7 @@ oat_generated: false ## Phase 3: Review Fixes -**Status:** in_progress +**Status:** completed **Started:** 2026-03-20 ### Phase Summary @@ -306,8 +306,8 @@ oat_generated: false so generated tool-pack docs match the actual manifest split. - Updated `oat-doctor` guidance to list the full current pack set used by the CLI. -- A narrowed final re-review found one remaining `oat-doctor` - summary-manifest gap that is now queued as `p03-t03`. +- Closed the narrowed re-review follow-up by extending `oat-doctor`'s + summary-mode manifest and example output to include the remaining packs. **Key files touched:** @@ -322,6 +322,8 @@ oat_generated: false - Result: pass - Run: `rg -n -F "core/docs/ideas/workflows/utility/project-management/research/custom" .agents/skills/oat-doctor/SKILL.md` - Result: pass +- Run: `rg -n -e 'Project management pack skills' -e 'Research pack skills' .agents/skills/oat-doctor/SKILL.md && rg -n -F 'oat-pjm-add-backlog-item' .agents/skills/oat-doctor/SKILL.md && rg -n -F 'deep-research' .agents/skills/oat-doctor/SKILL.md` +- Result: pass ### Task p03-t01: (review) Update the utility pack description to match the split @@ -383,8 +385,32 @@ oat_generated: false ### Task p03-t03: (review) Complete oat-doctor summary pack manifest coverage -**Status:** pending -**Commit:** - +**Status:** completed +**Commit:** 6d48c2ac9093963b02e757cb2ea48780f1de0fe1 + +**Outcome (required when completed):** + +- Added the missing `project-management` and `research` pack sections to the + summary-mode bundled-skill manifest guidance in `oat-doctor`. +- Updated the summary-mode dashboard example so the Installed Packs and + Available But Not Installed sections now include the missing packs and + representative skills. + +**Files changed:** + +- `.agents/skills/oat-doctor/SKILL.md` - completed the summary-mode manifest + and example output coverage + +**Verification:** + +- Run: `rg -n -e 'Project management pack skills' -e 'Research pack skills' .agents/skills/oat-doctor/SKILL.md && rg -n -F 'oat-pjm-add-backlog-item' .agents/skills/oat-doctor/SKILL.md && rg -n -F 'deep-research' .agents/skills/oat-doctor/SKILL.md` +- Result: pass + +**Notes / Decisions:** + +- Kept the fix entirely within the `oat-doctor` skill surface instead of + broadening scope into shared generation logic, because the review asked for + documentation parity rather than refactoring. --- @@ -453,9 +479,10 @@ Review-fix tasks are complete: - `I1` -> converted (`p03-t03`) - complete the `oat-doctor` summary-mode bundled-skill manifest so it includes `project-management` and `research` -**Next:** Execute fix task `p03-t03` via the `oat-project-implement` skill. +**Next:** Re-run `oat-project-review-provide code final`, then +`oat-project-review-receive` to close the final review gate. -After the fix task is complete: +Review-fix task is complete: - Update the review row status to `fixes_completed` - Re-run `oat-project-review-provide code final` then @@ -529,7 +556,7 @@ Chronological log of implementation progress. - [x] Execute `p03-t02` - 29f26e81 - [x] final re-review received and parsed - [x] I1 converted to `p03-t03` -- [ ] Execute `p03-t03` +- [x] Execute `p03-t03` - 6d48c2ac **What changed (high level):** @@ -538,7 +565,7 @@ Chronological log of implementation progress. - Corrected the stale `utility` pack description and the truncated `oat-doctor` pack enum guidance - Processed the narrowed final re-review and queued one more bounded - `oat-doctor` summary-manifest fix + `oat-doctor` summary-manifest fix, then implemented it **Decisions:** @@ -549,7 +576,6 @@ Chronological log of implementation progress. **Follow-ups / TODO:** -- Implement `p03-t03` - Re-run final code review after fixes land **Blockers:** @@ -585,14 +611,15 @@ Track test execution during implementation. surfaces - Moved the shared tracking helper to `.oat/scripts` - Updated product docs and `oat-doctor` guidance to reflect the new pack layout -- Closed the final review drift with two small follow-up fixes +- Closed the final review drift with three bounded follow-up fixes **Behavioral changes (user-facing):** - Users can install and manage docs workflows via a dedicated `docs` pack - Generated tool-pack guidance now describes `utility` accurately after the split -- `oat-doctor` guidance now lists the full supported pack set +- `oat-doctor` guidance now lists the full supported pack set and its summary + example includes the missing packs **Key files / modules:** diff --git a/.oat/projects/shared/docs-pack-split/plan.md b/.oat/projects/shared/docs-pack-split/plan.md index 596f7fbb..abf7fa5e 100644 --- a/.oat/projects/shared/docs-pack-split/plan.md +++ b/.oat/projects/shared/docs-pack-split/plan.md @@ -341,13 +341,13 @@ git commit -m "fix(p03-t03): complete oat-doctor manifest guidance" {Keep both code + artifact rows below. Add additional code rows (p03, p04, etc.) as needed, but do not delete `spec`/`design`.} -| Scope | Type | Status | Date | Artifact | -| ------ | -------- | ----------- | ---------- | ---------------------------------------------- | -| p01 | code | pending | - | - | -| p02 | code | pending | - | - | -| final | code | fixes_added | 2026-03-20 | reviews/archived/final-review-2026-03-20-v2.md | -| spec | artifact | pending | - | - | -| design | artifact | pending | - | - | +| Scope | Type | Status | Date | Artifact | +| ------ | -------- | --------------- | ---------- | ---------------------------------------------- | +| p01 | code | pending | - | - | +| p02 | code | pending | - | - | +| final | code | fixes_completed | 2026-03-20 | reviews/archived/final-review-2026-03-20-v2.md | +| spec | artifact | pending | - | - | +| design | artifact | pending | - | - | **Status values:** `pending` → `received` → `fixes_added` → `fixes_completed` → `passed` @@ -373,7 +373,7 @@ git commit -m "fix(p03-t03): complete oat-doctor manifest guidance" **Total: 7 tasks** -Ready for review-fix implementation. +Ready for final re-review. --- diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md index 37d25c18..47cfd15f 100644 --- a/.oat/projects/shared/docs-pack-split/state.md +++ b/.oat/projects/shared/docs-pack-split/state.md @@ -1,6 +1,6 @@ --- -oat_current_task: p03-t03 -oat_last_commit: 29f26e8177973dc0aa971d8cefe6ee5035f2b205 +oat_current_task: null +oat_last_commit: 6d48c2ac9093963b02e757cb2ea48780f1de0fe1 oat_blockers: [] associated_issues: [] # [{type: backlog|project|jira|linear, ref: "identifier"}] oat_hill_checkpoints: ['p02'] # Configured: which phases require human-in-the-loop lifecycle approval @@ -14,20 +14,20 @@ oat_workflow_origin: native # native | imported oat_docs_updated: complete # null | skipped | complete — documentation sync status oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived -oat_project_state_updated: '2026-03-20T23:08:14Z' # ISO 8601 UTC timestamp — updated on every state.md mutation +oat_project_state_updated: '2026-03-20T23:12:39Z' # ISO 8601 UTC timestamp — updated on every state.md mutation oat_generated: false --- # Project State: docs-pack-split -**Status:** Review fixes queued +**Status:** Awaiting final re-review **Started:** 2026-03-20 **Last Updated:** 2026-03-20 ## Current Phase -The narrowed final re-review found one remaining bounded issue, which has been -converted into a follow-up implementation task. +All implementation and review-fix tasks are complete again. Final re-review is +the next required gate. ## Artifacts @@ -50,7 +50,8 @@ converted into a follow-up implementation task. - ✓ `p03-t01` complete - ✓ `p03-t02` complete - ✓ Final re-review received -- ⧗ Implementing `p03-t03` +- ✓ `p03-t03` complete +- ⧗ Awaiting final re-review ## Blockers @@ -58,4 +59,4 @@ None ## Next Milestone -Complete `p03-t03` and re-run final review +Run final re-review and process it via `oat-project-review-receive` From 344b91b22c4b0d8a294770e599c5c84933962251 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 18:18:52 -0500 Subject: [PATCH 18/23] chore(oat): add discovery artifact --- .../shared/docs-pack-split/discovery.md | 184 ++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 .oat/projects/shared/docs-pack-split/discovery.md diff --git a/.oat/projects/shared/docs-pack-split/discovery.md b/.oat/projects/shared/docs-pack-split/discovery.md new file mode 100644 index 00000000..10bcc752 --- /dev/null +++ b/.oat/projects/shared/docs-pack-split/discovery.md @@ -0,0 +1,184 @@ +--- +oat_status: complete +oat_ready_for: oat-project-implement +oat_blockers: [] +oat_last_updated: 2026-03-20 +oat_generated: false +--- + +# Discovery: docs-pack-split + +## Initial Request + +Create a separate `docs` tool pack so documentation workflows no longer live in +the `utility` pack. Keep `oat-docs` in `core`, move the docs analyze/apply and +agent-instructions analyze/apply skills into the new pack, and then implement +the supporting CLI, scan/update/remove behavior, and documentation updates. + +## Solution Space + +The request started as exploratory because there were multiple reasonable pack +boundaries. + +### Approach 1: Keep Everything in `utility` + +**Description:** Leave both docs workflows and agent-instructions workflows in +the current `utility` pack. +**When this is the right choice:** Best if the priority is avoiding any CLI or +docs churn and the current categorization is acceptable. +**Tradeoffs:** Keeps the current conceptual mismatch where docs governance lives +in a generic utility bucket. + +### Approach 2: Move All Docs-Related Skills Into `docs` + +**Description:** Create a `docs` pack and move `oat-docs`, `oat-docs-*`, and +`oat-agent-instructions-*` into it. +**When this is the right choice:** Best if you want one pack to own both docs +access and docs authoring/governance workflows. +**Tradeoffs:** Weakens the current `core` story by moving foundational docs +access out of the always-available base pack. + +### Approach 3: Keep `oat-docs` in `core`, Move Analyze/Apply Workflows Into `docs` _(Recommended)_ + +**Description:** Preserve `core` as foundational access and diagnostics, then +create a dedicated `docs` pack for active analyze/apply workflows over docs +surfaces and agent instructions. +**When this is the right choice:** Best when you want clearer pack ownership +without changing the meaning of `core`. +**Tradeoffs:** Requires a moderate CLI/docs migration and forces us to resolve +the existing shared-helper coupling between docs and agent-instructions skills. + +### Chosen Direction + +**Approach:** Approach 3 +**Rationale:** It gives each pack a coherent product story: +`core` stays universal, `docs` becomes authoring/governance, and `utility` +shrinks back to generic maintenance helpers. +**User validated:** Yes + +## Options Considered + +### Option A: Make `docs` Pack User-Eligible + +**Description:** Keep the new `docs` pack user/project install eligible, like +the current `utility` pack. + +**Pros:** + +- Preserves current flexibility for people who want docs workflows everywhere +- Avoids a scope regression for existing users of the moved skills + +**Cons:** + +- Requires one more user-eligible pack in the pack selection UX + +**Chosen:** A + +**Summary:** The new pack should remain user/project eligible so the split does +not silently narrow how these workflows are installed today. + +### Option B: Keep the Shared Tracking Helper Under `oat-agent-instructions-analyze` + +**Description:** Leave the helper where it is and let docs skills continue to +reference it across pack boundaries. + +**Pros:** + +- Smallest code change + +**Cons:** + +- Creates a hidden cross-pack runtime dependency +- Makes the new `docs` pack conceptually leaky and harder to maintain + +**Chosen:** Neither + +**Summary:** Move the helper to a neutral shared scripts location as part of +the split so pack boundaries are real, not just labels. + +## Key Decisions + +1. **Pack boundary:** `oat-docs` remains in `core`; `oat-docs-analyze`, + `oat-docs-apply`, `oat-agent-instructions-analyze`, and + `oat-agent-instructions-apply` move to a new `docs` pack. +2. **Pack intent:** `docs` covers active documentation and instruction + governance workflows, not generic repo maintenance. +3. **Compatibility:** The split must update install, list, scan, update, + remove, help text, and human docs together so the CLI and docs stay aligned. +4. **Dependency hygiene:** Shared helper scripts must move to a neutral location + rather than remain inside one skill's private folder. + +## Constraints + +- Preserve existing behavior for `oat-docs` as foundational docs access in + `core`. +- Avoid hidden runtime coupling between separately installed packs. +- Keep the pack taxonomy understandable from CLI help and docs alone. +- Update tests alongside code so pack membership and asset bundling stay + enforced. + +## Success Criteria + +- A `docs` pack exists in the CLI and can be installed the same way as other + packs. +- The four analyze/apply skills are recognized as `docs` pack members by + scanning, listing, updating, and removing flows. +- The moved skills no longer depend on an internal helper path owned by another + pack. +- End-user docs and help snapshots consistently describe the new pack layout. + +## Out of Scope + +- Rewriting the behavior of the docs or agent-instructions workflows beyond what + is needed for the pack split and helper relocation. +- Reorganizing unrelated utility, research, or workflow packs. +- Introducing new documentation features beyond updated pack guidance. + +## Deferred Ideas + +- Consider a future `authoring` pack if skill creation and docs governance ever + want to be grouped under one higher-level category. +- Revisit whether legacy `oat remove skills --pack ...` ergonomics should be + modernized more broadly instead of only adding `docs`. + +## Open Questions + +- **Shared helper path:** Choose the exact neutral home for the tracking helper + during implementation based on the existing canonical script conventions. +- **Docs coverage:** Decide how broadly to update existing docs pages and + examples beyond the known pack and quickstart references if additional pack + mentions surface during implementation. + +## Assumptions + +- `docs` should remain user/project eligible because the source skills currently + come from the user-eligible `utility` pack. +- Quick workflow is sufficient because the scope is clear and no deeper + architecture artifact is needed before planning. + +## Risks + +- **Partial pack wiring:** A new pack can be added in one command surface but + missed in scan/update/remove/help flows. + - **Likelihood:** Medium + - **Impact:** High + - **Mitigation Ideas:** Plan explicit tasks for CLI install surfaces, + management commands, tests, and help snapshots. +- **Broken workflow references:** Moving the helper path can leave stale skill + references behind. + - **Likelihood:** Medium + - **Impact:** Medium + - **Mitigation Ideas:** Centralize helper relocation in its own task and + verify with repo-wide searches plus targeted tests. +- **Docs drift:** Product docs may continue to say "utility" after the pack + split ships. + - **Likelihood:** High + - **Impact:** Medium + - **Mitigation Ideas:** Treat docs updates as a first-class plan task, not a + cleanup item. + +## Next Steps + +Proceed directly to `plan.md`. Discovery resolved the pack boundary, no +lightweight design artifact is needed, and the remaining work is a clear +implementation sequence across CLI code, shared assets, and documentation. From 683a18c21cace1ee6272c6fcccc5f3a6df517fa5 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 18:29:27 -0500 Subject: [PATCH 19/23] chore(oat): record passing final re-review --- .../shared/docs-pack-split/implementation.md | 32 +++++++++++++++++-- .oat/projects/shared/docs-pack-split/plan.md | 14 ++++---- .oat/projects/shared/docs-pack-split/state.md | 15 +++++---- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/.oat/projects/shared/docs-pack-split/implementation.md b/.oat/projects/shared/docs-pack-split/implementation.md index 04e05f72..8f7f2d73 100644 --- a/.oat/projects/shared/docs-pack-split/implementation.md +++ b/.oat/projects/shared/docs-pack-split/implementation.md @@ -1,6 +1,6 @@ --- oat_status: complete -oat_ready_for: null +oat_ready_for: oat-project-pr-final oat_blockers: [] oat_last_updated: 2026-03-20 oat_current_task_id: null @@ -490,6 +490,33 @@ Review-fix task is complete: --- +## Review Received: final (re-review 3) + +**Date:** 2026-03-20 +**Review artifact:** reviews/archived/final-review-2026-03-20-v3.md + +**Findings:** + +- Critical: 0 +- Important: 0 +- Medium: 0 +- Minor: 0 + +**New tasks added:** none + +**Finding disposition map:** + +- No findings. Final re-review passed. + +**Next:** Generate the final PR description via `oat-project-pr-final`. + +Final review status: + +- The `final` review row is now `passed` +- Implementation work is complete and ready for PR/finalization + +--- + ## Implementation Log Chronological log of implementation progress. @@ -566,6 +593,7 @@ Chronological log of implementation progress. `oat-doctor` pack enum guidance - Processed the narrowed final re-review and queued one more bounded `oat-doctor` summary-manifest fix, then implemented it +- Final narrowed re-review passed with no remaining findings **Decisions:** @@ -576,7 +604,7 @@ Chronological log of implementation progress. **Follow-ups / TODO:** -- Re-run final code review after fixes land +- Generate the final PR description **Blockers:** diff --git a/.oat/projects/shared/docs-pack-split/plan.md b/.oat/projects/shared/docs-pack-split/plan.md index abf7fa5e..8400310e 100644 --- a/.oat/projects/shared/docs-pack-split/plan.md +++ b/.oat/projects/shared/docs-pack-split/plan.md @@ -341,13 +341,13 @@ git commit -m "fix(p03-t03): complete oat-doctor manifest guidance" {Keep both code + artifact rows below. Add additional code rows (p03, p04, etc.) as needed, but do not delete `spec`/`design`.} -| Scope | Type | Status | Date | Artifact | -| ------ | -------- | --------------- | ---------- | ---------------------------------------------- | -| p01 | code | pending | - | - | -| p02 | code | pending | - | - | -| final | code | fixes_completed | 2026-03-20 | reviews/archived/final-review-2026-03-20-v2.md | -| spec | artifact | pending | - | - | -| design | artifact | pending | - | - | +| Scope | Type | Status | Date | Artifact | +| ------ | -------- | ------- | ---------- | ---------------------------------------------- | +| p01 | code | pending | - | - | +| p02 | code | pending | - | - | +| final | code | passed | 2026-03-20 | reviews/archived/final-review-2026-03-20-v3.md | +| spec | artifact | pending | - | - | +| design | artifact | pending | - | - | **Status values:** `pending` → `received` → `fixes_added` → `fixes_completed` → `passed` diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md index 47cfd15f..a9aa7acc 100644 --- a/.oat/projects/shared/docs-pack-split/state.md +++ b/.oat/projects/shared/docs-pack-split/state.md @@ -7,27 +7,27 @@ oat_hill_checkpoints: ['p02'] # Configured: which phases require human-in-the-lo oat_hill_completed: [] # Progress: which HiLL checkpoints have been completed oat_parallel_execution: false oat_phase: implement # Current phase: discovery | spec | design | plan | implement -oat_phase_status: in_progress # Status: in_progress | complete +oat_phase_status: complete # Status: in_progress | complete oat_execution_mode: single-thread # single-thread | subagent-driven oat_workflow_mode: quick # spec-driven | quick | import oat_workflow_origin: native # native | imported oat_docs_updated: complete # null | skipped | complete — documentation sync status oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived -oat_project_state_updated: '2026-03-20T23:12:39Z' # ISO 8601 UTC timestamp — updated on every state.md mutation +oat_project_state_updated: '2026-03-20T23:28:27Z' # ISO 8601 UTC timestamp — updated on every state.md mutation oat_generated: false --- # Project State: docs-pack-split -**Status:** Awaiting final re-review +**Status:** Implementation complete **Started:** 2026-03-20 **Last Updated:** 2026-03-20 ## Current Phase -All implementation and review-fix tasks are complete again. Final re-review is -the next required gate. +Implementation tasks and final re-review are complete. The project is ready for +final PR generation. ## Artifacts @@ -51,7 +51,8 @@ the next required gate. - ✓ `p03-t02` complete - ✓ Final re-review received - ✓ `p03-t03` complete -- ⧗ Awaiting final re-review +- ✓ Final re-review passed +- ⧗ Ready for final PR generation ## Blockers @@ -59,4 +60,4 @@ None ## Next Milestone -Run final re-review and process it via `oat-project-review-receive` +Run `oat-project-pr-final` to generate the final PR description From f083f27f137dafe8eb686e846710af6acbf995df Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 18:58:00 -0500 Subject: [PATCH 20/23] chore(oat): prepare project for completion --- .oat/projects/shared/docs-pack-split/state.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md index a9aa7acc..50d29c8e 100644 --- a/.oat/projects/shared/docs-pack-split/state.md +++ b/.oat/projects/shared/docs-pack-split/state.md @@ -14,7 +14,7 @@ oat_workflow_origin: native # native | imported oat_docs_updated: complete # null | skipped | complete — documentation sync status oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived -oat_project_state_updated: '2026-03-20T23:28:27Z' # ISO 8601 UTC timestamp — updated on every state.md mutation +oat_project_state_updated: '2026-03-20T23:52:45Z' # ISO 8601 UTC timestamp — updated on every state.md mutation oat_generated: false --- @@ -60,4 +60,4 @@ None ## Next Milestone -Run `oat-project-pr-final` to generate the final PR description +Run `oat-project-complete`. From b752c67699917ccdc561029e855bba0cabbf4ba0 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 19:07:54 -0500 Subject: [PATCH 21/23] docs(docs-pack-split): update documentation from project artifacts --- AGENTS.md | 2 +- apps/oat-docs/docs/quickstart.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 7209d944..b60bb69e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -138,7 +138,7 @@ Projects live in `.oat/projects///` with: - Core files: `state.md`, `discovery.md`, `spec.md`, `design.md`, `plan.md`, `implementation.md` - Optional: `reviews/`, `pr/` -### Utility Skill Additions +### Docs Pack Workflows - `oat-docs-analyze` - Analyze a docs surface for `index.md` contract coverage, nav drift, and docs app readiness. - `oat-docs-apply` - Apply approved docs-analysis recommendations with branch, nav-sync, and PR workflow support. diff --git a/apps/oat-docs/docs/quickstart.md b/apps/oat-docs/docs/quickstart.md index 575545b9..1d4ded1e 100644 --- a/apps/oat-docs/docs/quickstart.md +++ b/apps/oat-docs/docs/quickstart.md @@ -46,7 +46,7 @@ pnpm run cli -- tools install project-management Notes: -- Installs OAT tool packs (`ideas`, `workflows`, `utility`, `project-management`, `research`) into canonical directories. +- Installs OAT tool packs (`docs`, `ideas`, `workflows`, `utility`, `project-management`, `research`) into canonical directories. The `core` pack is always installed at user scope for diagnostics and passive docs access. - `oat init tools` remains available as a backward-compatible install path. - If installed OAT skills are older than bundled versions, interactive runs prompt for selective updates. - Non-interactive runs report outdated skills without updating them. From 2b087409ea08b9a5ec77acb97633bfa0ae729a93 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 19:08:04 -0500 Subject: [PATCH 22/23] chore(docs-pack-split): mark docs updated --- .oat/projects/shared/docs-pack-split/state.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md index 50d29c8e..d9af62bf 100644 --- a/.oat/projects/shared/docs-pack-split/state.md +++ b/.oat/projects/shared/docs-pack-split/state.md @@ -14,7 +14,7 @@ oat_workflow_origin: native # native | imported oat_docs_updated: complete # null | skipped | complete — documentation sync status oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived -oat_project_state_updated: '2026-03-20T23:52:45Z' # ISO 8601 UTC timestamp — updated on every state.md mutation +oat_project_state_updated: '2026-03-21T00:07:44Z' # ISO 8601 UTC timestamp — updated on every state.md mutation oat_generated: false --- From f76427bd23697375391c054c79911530a32234d1 Mon Sep 17 00:00:00 2001 From: Thomas Stang Date: Fri, 20 Mar 2026 19:27:35 -0500 Subject: [PATCH 23/23] chore(oat): complete project lifecycle for docs-pack-split --- .../shared/docs-pack-split/discovery.md | 184 ----- .../shared/docs-pack-split/implementation.md | 679 ------------------ .oat/projects/shared/docs-pack-split/plan.md | 384 ---------- .oat/projects/shared/docs-pack-split/state.md | 63 -- 4 files changed, 1310 deletions(-) delete mode 100644 .oat/projects/shared/docs-pack-split/discovery.md delete mode 100644 .oat/projects/shared/docs-pack-split/implementation.md delete mode 100644 .oat/projects/shared/docs-pack-split/plan.md delete mode 100644 .oat/projects/shared/docs-pack-split/state.md diff --git a/.oat/projects/shared/docs-pack-split/discovery.md b/.oat/projects/shared/docs-pack-split/discovery.md deleted file mode 100644 index 10bcc752..00000000 --- a/.oat/projects/shared/docs-pack-split/discovery.md +++ /dev/null @@ -1,184 +0,0 @@ ---- -oat_status: complete -oat_ready_for: oat-project-implement -oat_blockers: [] -oat_last_updated: 2026-03-20 -oat_generated: false ---- - -# Discovery: docs-pack-split - -## Initial Request - -Create a separate `docs` tool pack so documentation workflows no longer live in -the `utility` pack. Keep `oat-docs` in `core`, move the docs analyze/apply and -agent-instructions analyze/apply skills into the new pack, and then implement -the supporting CLI, scan/update/remove behavior, and documentation updates. - -## Solution Space - -The request started as exploratory because there were multiple reasonable pack -boundaries. - -### Approach 1: Keep Everything in `utility` - -**Description:** Leave both docs workflows and agent-instructions workflows in -the current `utility` pack. -**When this is the right choice:** Best if the priority is avoiding any CLI or -docs churn and the current categorization is acceptable. -**Tradeoffs:** Keeps the current conceptual mismatch where docs governance lives -in a generic utility bucket. - -### Approach 2: Move All Docs-Related Skills Into `docs` - -**Description:** Create a `docs` pack and move `oat-docs`, `oat-docs-*`, and -`oat-agent-instructions-*` into it. -**When this is the right choice:** Best if you want one pack to own both docs -access and docs authoring/governance workflows. -**Tradeoffs:** Weakens the current `core` story by moving foundational docs -access out of the always-available base pack. - -### Approach 3: Keep `oat-docs` in `core`, Move Analyze/Apply Workflows Into `docs` _(Recommended)_ - -**Description:** Preserve `core` as foundational access and diagnostics, then -create a dedicated `docs` pack for active analyze/apply workflows over docs -surfaces and agent instructions. -**When this is the right choice:** Best when you want clearer pack ownership -without changing the meaning of `core`. -**Tradeoffs:** Requires a moderate CLI/docs migration and forces us to resolve -the existing shared-helper coupling between docs and agent-instructions skills. - -### Chosen Direction - -**Approach:** Approach 3 -**Rationale:** It gives each pack a coherent product story: -`core` stays universal, `docs` becomes authoring/governance, and `utility` -shrinks back to generic maintenance helpers. -**User validated:** Yes - -## Options Considered - -### Option A: Make `docs` Pack User-Eligible - -**Description:** Keep the new `docs` pack user/project install eligible, like -the current `utility` pack. - -**Pros:** - -- Preserves current flexibility for people who want docs workflows everywhere -- Avoids a scope regression for existing users of the moved skills - -**Cons:** - -- Requires one more user-eligible pack in the pack selection UX - -**Chosen:** A - -**Summary:** The new pack should remain user/project eligible so the split does -not silently narrow how these workflows are installed today. - -### Option B: Keep the Shared Tracking Helper Under `oat-agent-instructions-analyze` - -**Description:** Leave the helper where it is and let docs skills continue to -reference it across pack boundaries. - -**Pros:** - -- Smallest code change - -**Cons:** - -- Creates a hidden cross-pack runtime dependency -- Makes the new `docs` pack conceptually leaky and harder to maintain - -**Chosen:** Neither - -**Summary:** Move the helper to a neutral shared scripts location as part of -the split so pack boundaries are real, not just labels. - -## Key Decisions - -1. **Pack boundary:** `oat-docs` remains in `core`; `oat-docs-analyze`, - `oat-docs-apply`, `oat-agent-instructions-analyze`, and - `oat-agent-instructions-apply` move to a new `docs` pack. -2. **Pack intent:** `docs` covers active documentation and instruction - governance workflows, not generic repo maintenance. -3. **Compatibility:** The split must update install, list, scan, update, - remove, help text, and human docs together so the CLI and docs stay aligned. -4. **Dependency hygiene:** Shared helper scripts must move to a neutral location - rather than remain inside one skill's private folder. - -## Constraints - -- Preserve existing behavior for `oat-docs` as foundational docs access in - `core`. -- Avoid hidden runtime coupling between separately installed packs. -- Keep the pack taxonomy understandable from CLI help and docs alone. -- Update tests alongside code so pack membership and asset bundling stay - enforced. - -## Success Criteria - -- A `docs` pack exists in the CLI and can be installed the same way as other - packs. -- The four analyze/apply skills are recognized as `docs` pack members by - scanning, listing, updating, and removing flows. -- The moved skills no longer depend on an internal helper path owned by another - pack. -- End-user docs and help snapshots consistently describe the new pack layout. - -## Out of Scope - -- Rewriting the behavior of the docs or agent-instructions workflows beyond what - is needed for the pack split and helper relocation. -- Reorganizing unrelated utility, research, or workflow packs. -- Introducing new documentation features beyond updated pack guidance. - -## Deferred Ideas - -- Consider a future `authoring` pack if skill creation and docs governance ever - want to be grouped under one higher-level category. -- Revisit whether legacy `oat remove skills --pack ...` ergonomics should be - modernized more broadly instead of only adding `docs`. - -## Open Questions - -- **Shared helper path:** Choose the exact neutral home for the tracking helper - during implementation based on the existing canonical script conventions. -- **Docs coverage:** Decide how broadly to update existing docs pages and - examples beyond the known pack and quickstart references if additional pack - mentions surface during implementation. - -## Assumptions - -- `docs` should remain user/project eligible because the source skills currently - come from the user-eligible `utility` pack. -- Quick workflow is sufficient because the scope is clear and no deeper - architecture artifact is needed before planning. - -## Risks - -- **Partial pack wiring:** A new pack can be added in one command surface but - missed in scan/update/remove/help flows. - - **Likelihood:** Medium - - **Impact:** High - - **Mitigation Ideas:** Plan explicit tasks for CLI install surfaces, - management commands, tests, and help snapshots. -- **Broken workflow references:** Moving the helper path can leave stale skill - references behind. - - **Likelihood:** Medium - - **Impact:** Medium - - **Mitigation Ideas:** Centralize helper relocation in its own task and - verify with repo-wide searches plus targeted tests. -- **Docs drift:** Product docs may continue to say "utility" after the pack - split ships. - - **Likelihood:** High - - **Impact:** Medium - - **Mitigation Ideas:** Treat docs updates as a first-class plan task, not a - cleanup item. - -## Next Steps - -Proceed directly to `plan.md`. Discovery resolved the pack boundary, no -lightweight design artifact is needed, and the remaining work is a clear -implementation sequence across CLI code, shared assets, and documentation. diff --git a/.oat/projects/shared/docs-pack-split/implementation.md b/.oat/projects/shared/docs-pack-split/implementation.md deleted file mode 100644 index 8f7f2d73..00000000 --- a/.oat/projects/shared/docs-pack-split/implementation.md +++ /dev/null @@ -1,679 +0,0 @@ ---- -oat_status: complete -oat_ready_for: oat-project-pr-final -oat_blockers: [] -oat_last_updated: 2026-03-20 -oat_current_task_id: null -oat_generated: false ---- - -# Implementation: docs-pack-split - -**Started:** 2026-03-20 -**Last Updated:** 2026-03-20 - -> This document is used to resume interrupted implementation sessions. -> -> Conventions: -> -> - `oat_current_task_id` always points at the **next plan task to do** (not the last completed task). -> - When all plan tasks are complete, set `oat_current_task_id: null`. -> - Reviews are **not** plan tasks. Track review status in `plan.md` under `## Reviews` (e.g., `| final | code | passed | ... |`). -> - Keep phase/task statuses consistent with the Progress Overview table so restarts resume correctly. -> - Before running the `oat-project-pr-final` skill, ensure `## Final Summary (for PR/docs)` is filled with what was actually implemented. - -## Progress Overview - -| Phase | Status | Tasks | Completed | -| ------- | --------- | ----- | --------- | -| Phase 1 | completed | 2 | 2/2 | -| Phase 2 | completed | 2 | 2/2 | -| Phase 3 | completed | 3 | 3/3 | - -**Total:** 7/7 tasks completed - ---- - -## Phase 1: Add the Docs Pack to the CLI Model - -**Status:** completed -**Started:** 2026-03-20 - -### Phase Summary - -**Outcome (what changed):** - -- Added a dedicated `docs` pack to the installer model without moving - foundational `oat-docs` out of `core`. -- Split docs and agent-instructions workflow skills out of `utility` and into - pack-aware CLI metadata plus installer flows. -- Propagated the new pack name through tool scanning, update/remove targeting, - legacy `remove skills --pack`, and CLI help output. - -**Key files touched:** - -- `packages/cli/src/commands/init/tools/` - new docs pack installer and main - pack registration -- `packages/cli/src/commands/tools/shared/scan-tools.ts` - pack detection for installed tools -- `packages/cli/src/commands/tools/update/index.ts` - update pack validation -- `packages/cli/src/commands/tools/remove/index.ts` - remove pack validation -- `packages/cli/src/commands/remove/skills/remove-skills.ts` - legacy skill-pack removal support -- `packages/cli/src/commands/help-snapshots.test.ts` - CLI help expectations - -**Verification:** - -- Run: `pnpm --filter @oat/cli exec vitest run src/commands/init/tools/docs/install-docs.test.ts src/commands/init/tools/docs/index.test.ts src/commands/init/tools/index.test.ts src/commands/init/tools/shared/bundle-consistency.test.ts` -- Result: pass -- Run: `pnpm --filter @oat/cli exec vitest run src/commands/tools/shared/scan-tools.test.ts src/commands/tools/list/list-tools.test.ts src/commands/tools/update/update-tools.test.ts src/commands/tools/remove/remove-tools.test.ts src/commands/remove/skills/remove-skills.test.ts src/commands/help-snapshots.test.ts` -- Result: pass -- Run: `pnpm --filter @oat/cli lint && pnpm --filter @oat/cli type-check` -- Result: pass - -**Notes / Decisions:** - -- Direct `vitest` execution remains the reliable way to verify task-owned files - without picking up unrelated suites from later plan tasks. -- Help snapshot updates are part of pack-management scope because the pack names - are user-facing CLI contract, not optional follow-up docs. - -### Task p01-t01: Introduce the `docs` pack manifest and installer command - -**Status:** completed -**Commit:** 983e23bc564ffe09328fc189f00876ee2d0c2deb - -**Outcome (required when completed):** - -- Added a first-class `docs` pack installer command under `oat init tools` - with project/user scope behavior matching the current user-eligible packs. -- Split docs and agent-instructions analyze/apply skills out of - `UTILITY_SKILLS` into a dedicated `DOCS_SKILLS` manifest entry. -- Wired the main init-tools command to recognize `docs` in pack selection, - default non-interactive installs, and AGENTS.md tool-pack descriptions. -- Added dedicated installer tests plus updated init-tools and bundle - consistency coverage for the new pack. - -**Files changed:** - -- `packages/cli/src/commands/init/tools/docs/index.ts` - new docs-pack command -- `packages/cli/src/commands/init/tools/docs/index.test.ts` - command tests -- `packages/cli/src/commands/init/tools/docs/install-docs.ts` - docs skill installer -- `packages/cli/src/commands/init/tools/docs/install-docs.test.ts` - installer tests -- `packages/cli/src/commands/init/tools/index.ts` - main pack registration and install flow -- `packages/cli/src/commands/init/tools/index.test.ts` - init-tools expectations -- `packages/cli/src/commands/init/tools/shared/skill-manifest.ts` - new pack manifest split -- `packages/cli/src/commands/init/tools/shared/bundle-consistency.test.ts` - bundle coverage for docs pack - -**Verification:** - -- Run: `pnpm --filter @oat/cli exec vitest run src/commands/init/tools/docs/install-docs.test.ts src/commands/init/tools/docs/index.test.ts src/commands/init/tools/index.test.ts src/commands/init/tools/shared/bundle-consistency.test.ts` -- Result: pass -- Run: `pnpm --filter @oat/cli lint && pnpm --filter @oat/cli type-check` -- Result: pass - -**Notes / Decisions:** - -- Used direct `vitest` execution for task-owned files because the package test - script fan-outs into unrelated suites that belong to later plan tasks. -- Kept `oat-docs` in `core` while making `docs` a user-eligible pack. - ---- - -### Task p01-t02: Propagate `docs` pack support through tool management and legacy removal flows - -**Status:** completed -**Commit:** e254abe52c00f88cf2a736c94096eafd88cf0fcc - -**Outcome (required when completed):** - -- Added `docs` as a recognized pack across installed-tool scanning and tool info - typing, so moved skills no longer show up as `custom`. -- Updated update/remove command pack validation and help text to accept the new - `docs` pack name. -- Extended legacy `oat remove skills --pack` support to handle `docs`. -- Updated downstream test fixtures and help snapshots to reflect the new pack - taxonomy consistently. - -**Files changed:** - -- `packages/cli/src/commands/tools/shared/types.ts` - pack type union -- `packages/cli/src/commands/tools/shared/scan-tools.ts` - docs pack resolution -- `packages/cli/src/commands/tools/shared/scan-tools.test.ts` - docs and utility pack expectations -- `packages/cli/src/commands/tools/list/list-tools.test.ts` - docs-pack list sample -- `packages/cli/src/commands/tools/update/index.ts` - docs pack validation -- `packages/cli/src/commands/tools/update/update-tools.test.ts` - docs pack fixture -- `packages/cli/src/commands/tools/remove/index.ts` - docs pack validation -- `packages/cli/src/commands/tools/remove/remove-tools.test.ts` - docs pack fixture -- `packages/cli/src/commands/remove/skills/remove-skills.ts` - docs pack legacy removal support -- `packages/cli/src/commands/remove/skills/remove-skills.test.ts` - docs pack removal test -- `packages/cli/src/commands/help-snapshots.test.ts` - CLI help snapshots - -**Verification:** - -- Run: `pnpm --filter @oat/cli exec vitest run src/commands/tools/shared/scan-tools.test.ts src/commands/tools/list/list-tools.test.ts src/commands/tools/update/update-tools.test.ts src/commands/tools/remove/remove-tools.test.ts src/commands/remove/skills/remove-skills.test.ts src/commands/help-snapshots.test.ts` -- Result: pass -- Run: `pnpm --filter @oat/cli lint && pnpm --filter @oat/cli type-check` -- Result: pass - -**Notes / Decisions:** - -- Updated user-facing help snapshots in the same task because pack-name drift in - help output would otherwise immediately break the CLI contract. - ---- - -## Phase 2: Decouple Shared Assets and Refresh Documentation - -**Status:** completed -**Started:** 2026-03-20 - -### Phase Summary - -**Outcome (what changed):** - -- Updated the product docs to describe the new `docs` pack and its role next to - `core` and `utility`. -- Switched docs-workflow quickstarts to prefer `oat tools install docs` while - keeping `oat init tools docs` documented as the legacy pack-specific path. -- Refreshed the `oat-doctor` skill’s pack inventory and examples so its - user-facing guidance matches the new pack split. -- Removed the last stale helper symlink from `oat-agent-instructions-apply`, - which unblocked the full docs build after the helper relocation. - -**Key files touched:** - -- `README.md` - repo quickstart pack list -- `apps/oat-docs/docs/guide/tool-packs.md` - bundled-pack contract and docs-pack section -- `apps/oat-docs/docs/guide/getting-started.md` - guided setup pack descriptions -- `apps/oat-docs/docs/guide/cli-reference.md` - tool install pack list -- `apps/oat-docs/docs/guide/documentation/quickstart.md` - preferred docs-pack installation flow -- `apps/oat-docs/docs/guide/documentation/workflows.md` - docs workflow prerequisite guidance -- `.agents/skills/oat-doctor/SKILL.md` - user-facing pack inventory examples -- `.agents/skills/oat-agent-instructions-apply/scripts/resolve-tracking.sh` - removed stale symlink - -**Verification:** - -- Run: `rg -n -e 'utility pack' -e 'oat init tools utility' -e 'docs analysis and apply skills installed via the utility pack' README.md apps/oat-docs/docs .agents/skills` -- Result: no matches -- Run: `rg -n -e 'oat tools install docs' -e 'oat init tools docs' -e 'docs pack installs' README.md apps/oat-docs/docs .agents/skills` -- Result: expected docs-pack references found -- Run: `pnpm --filter oat-docs docs:lint` -- Result: pass -- Run: `pnpm build:docs` -- Result: pass - -### Task p02-t01: Move the shared tracking helper to a neutral location and update skill references - -**Status:** completed -**Commit:** 30234c42dc042de5fccc62b79532830c3e3d2d87 - -**Outcome (required when completed):** - -- Moved the shared tracking resolver to `.oat/scripts/resolve-tracking.sh` so - docs workflows no longer depend on an internal path owned by - `oat-agent-instructions-analyze`. -- Updated docs, agent-instructions, and repo-knowledge-index skill references - to point at the neutral helper location. -- Extended the docs-pack installer and workflow asset expectations so the - shared helper is bundled and installed into `.oat/scripts`. -- Updated task-owned tests and bundling logic to treat the helper as a shared - asset rather than a skill-private script. - -**Files changed:** - -- `.oat/scripts/resolve-tracking.sh` - new neutral helper location -- `.agents/skills/oat-agent-instructions-analyze/SKILL.md` - helper reference update -- `.agents/skills/oat-agent-instructions-apply/SKILL.md` - helper reference update -- `.agents/skills/oat-docs-analyze/SKILL.md` - helper reference update -- `.agents/skills/oat-docs-apply/SKILL.md` - helper reference update -- `.agents/skills/oat-repo-knowledge-index/SKILL.md` - helper reference update -- `packages/cli/src/commands/init/tools/shared/skill-manifest.ts` - shared script manifest entries -- `packages/cli/src/commands/init/tools/docs/install-docs.ts` - docs-pack shared-script installation -- `packages/cli/src/commands/init/tools/docs/index.ts` - installer result reporting -- `packages/cli/src/commands/init/tools/docs/install-docs.test.ts` - shared-script installer coverage -- `packages/cli/src/commands/init/tools/docs/index.test.ts` - command output expectations -- `packages/cli/src/commands/init/tools/workflows/install-workflows.test.ts` - workflow shared-script expectations -- `packages/cli/scripts/bundle-assets.sh` - bundled shared helper asset - -**Verification:** - -- Run: `pnpm --filter @oat/cli exec vitest run src/commands/init/tools/docs/install-docs.test.ts src/commands/init/tools/docs/index.test.ts src/commands/init/tools/workflows/install-workflows.test.ts` -- Result: pass -- Run: `pnpm --filter @oat/cli lint && pnpm --filter @oat/cli type-check` -- Result: pass -- Run: `rg -n "oat-agent-instructions-analyze/scripts/resolve-tracking\\.sh" .agents/skills packages/cli/scripts .oat/scripts -S` -- Result: no matches -- Run: `rg -n "\\.oat/scripts/resolve-tracking\\.sh" .agents/skills .oat/scripts packages/cli/scripts -S` -- Result: only neutral helper references found - ---- - -### Task p02-t02: Update product docs and examples for the new pack layout - -**Status:** completed -**Commit:** ce0a6352baa7a3939d75302648fb516850028739 - -**Outcome (required when completed):** - -- Updated the README and OAT docs app pages to present `docs` as a first-class - pack and to remove stale guidance that routed docs workflows through - `utility`. -- Added a dedicated docs-pack explanation covering its analyze/apply workflows - and the distinction between passive `oat-docs` access in `core` and active - docs/instructions workflows in `docs`. -- Switched docs-workflow quickstarts and workflow pages to prefer - `oat tools install docs`, while retaining `oat init tools docs` as the - backward-compatible pack-specific path. -- Updated the `oat-doctor` skill’s user-facing pack inventory and removed the - stale helper symlink in `oat-agent-instructions-apply` so the full docs build - no longer pulled a dead helper path. - -**Files changed:** - -- `README.md` - quickstart pack list -- `apps/oat-docs/docs/guide/tool-packs.md` - docs pack contract and install examples -- `apps/oat-docs/docs/guide/getting-started.md` - guided setup pack list -- `apps/oat-docs/docs/guide/cli-reference.md` - tool install examples -- `apps/oat-docs/docs/guide/documentation/quickstart.md` - docs-pack quickstart flow -- `apps/oat-docs/docs/guide/documentation/workflows.md` - docs workflow prerequisite note -- `.agents/skills/oat-doctor/SKILL.md` - pack inventory examples -- `.agents/skills/oat-agent-instructions-apply/scripts/resolve-tracking.sh` - removed stale symlink - -**Verification:** - -- Run: `rg -n -e 'utility pack' -e 'oat init tools utility' -e 'docs analysis and apply skills installed via the utility pack' README.md apps/oat-docs/docs .agents/skills` -- Result: no matches -- Run: `rg -n -e 'oat tools install docs' -e 'oat init tools docs' -e 'docs pack installs' README.md apps/oat-docs/docs .agents/skills` -- Result: expected docs-pack references found -- Run: `pnpm --filter oat-docs docs:lint` -- Result: pass -- Run: `pnpm build:docs` -- Result: pass - ---- - -## Phase 3: Review Fixes - -**Status:** completed -**Started:** 2026-03-20 - -### Phase Summary - -**Outcome (what changed):** - -- Cleared the original two final-review minor findings without expanding scope - beyond the reported drift. -- Corrected the stale `utility` pack description in the CLI installer guidance - so generated tool-pack docs match the actual manifest split. -- Updated `oat-doctor` guidance to list the full current pack set used by the - CLI. -- Closed the narrowed re-review follow-up by extending `oat-doctor`'s - summary-mode manifest and example output to include the remaining packs. - -**Key files touched:** - -- `packages/cli/src/commands/init/tools/index.ts` - corrected user-facing - utility-pack description -- `.agents/skills/oat-doctor/SKILL.md` - aligned pack enum guidance with the - `PackName` union - -**Verification:** - -- Run: `pnpm --filter @oat/cli exec vitest run src/commands/init/tools/index.test.ts src/commands/help-snapshots.test.ts` -- Result: pass -- Run: `rg -n -F "core/docs/ideas/workflows/utility/project-management/research/custom" .agents/skills/oat-doctor/SKILL.md` -- Result: pass -- Run: `rg -n -e 'Project management pack skills' -e 'Research pack skills' .agents/skills/oat-doctor/SKILL.md && rg -n -F 'oat-pjm-add-backlog-item' .agents/skills/oat-doctor/SKILL.md && rg -n -F 'deep-research' .agents/skills/oat-doctor/SKILL.md` -- Result: pass - -### Task p03-t01: (review) Update the utility pack description to match the split - -**Status:** completed -**Commit:** fa480c4ed59dc32d1e9469353aaf4cdbe672bf24 - -**Outcome (required when completed):** - -- Updated the `utility` pack description so it no longer claims the pack - contains docs-analysis and agent-instructions workflows. -- Reworded the description to match the actual post-split utility-pack - contents: skill authoring, maintainability review, and code reviews. - -**Files changed:** - -- `packages/cli/src/commands/init/tools/index.ts` - corrected the utility-pack - description constant used by generated tool-pack guidance - -**Verification:** - -- Run: `pnpm --filter @oat/cli exec vitest run src/commands/init/tools/index.test.ts src/commands/help-snapshots.test.ts` -- Result: pass - -**Notes / Decisions:** - -- The targeted test run covered the user-facing description drift without - requiring any additional fixture changes. - ---- - -### Task p03-t02: (review) Expand oat-doctor pack guidance to match PackName - -**Status:** completed -**Commit:** 29f26e8177973dc0aa971d8cefe6ee5035f2b205 - -**Outcome (required when completed):** - -- Expanded the `oat-doctor` guidance line to include `docs`, - `project-management`, and `research` in the documented pack enum. -- Brought the skill’s pack-model explanation back into sync with the CLI’s - current `PackName` union. - -**Files changed:** - -- `.agents/skills/oat-doctor/SKILL.md` - corrected pack enum guidance in the - JSON parsing instructions - -**Verification:** - -- Run: `rg -n -F "core/docs/ideas/workflows/utility/project-management/research/custom" .agents/skills/oat-doctor/SKILL.md` -- Result: pass - -**Notes / Decisions:** - -- Used an exact-string check instead of the original regex-shaped probe because - the markdown punctuation made the regex unnecessarily brittle. - ---- - -### Task p03-t03: (review) Complete oat-doctor summary pack manifest coverage - -**Status:** completed -**Commit:** 6d48c2ac9093963b02e757cb2ea48780f1de0fe1 - -**Outcome (required when completed):** - -- Added the missing `project-management` and `research` pack sections to the - summary-mode bundled-skill manifest guidance in `oat-doctor`. -- Updated the summary-mode dashboard example so the Installed Packs and - Available But Not Installed sections now include the missing packs and - representative skills. - -**Files changed:** - -- `.agents/skills/oat-doctor/SKILL.md` - completed the summary-mode manifest - and example output coverage - -**Verification:** - -- Run: `rg -n -e 'Project management pack skills' -e 'Research pack skills' .agents/skills/oat-doctor/SKILL.md && rg -n -F 'oat-pjm-add-backlog-item' .agents/skills/oat-doctor/SKILL.md && rg -n -F 'deep-research' .agents/skills/oat-doctor/SKILL.md` -- Result: pass - -**Notes / Decisions:** - -- Kept the fix entirely within the `oat-doctor` skill surface instead of - broadening scope into shared generation logic, because the review asked for - documentation parity rather than refactoring. - ---- - -## Orchestration Runs - -> This section is used by `oat-project-subagent-implement` to log parallel execution runs. -> Each run appends a new subsection — never overwrite prior entries. -> For single-thread execution (via `oat-project-implement`), this section remains empty. - - - - ---- - -## Review Received: final - -**Date:** 2026-03-20 -**Review artifact:** reviews/archived/final-review-2026-03-20.md - -**Findings:** - -- Critical: 0 -- Important: 0 -- Medium: 0 -- Minor: 2 - -**New tasks added:** `p03-t01`, `p03-t02` - -**Deferred Findings (Minor):** - -- None. User chose to convert all final-review minor findings into fix tasks. - -**Finding disposition map:** - -- `m1` -> converted (`p03-t01`) - correct the stale `utility` pack description - in `PACK_DESCRIPTIONS` -- `m2` -> converted (`p03-t02`) - align `oat-doctor` pack enum guidance with - the current `PackName` union - -**Next:** Re-run `oat-project-review-provide code final`, then -`oat-project-review-receive` to close the final review gate. - -Review-fix tasks are complete: - -- The review row should now be `fixes_completed` -- The next lifecycle step is final re-review, not more implementation work - ---- - -## Review Received: final (re-review 2) - -**Date:** 2026-03-20 -**Review artifact:** reviews/archived/final-review-2026-03-20-v2.md - -**Findings:** - -- Critical: 0 -- Important: 1 -- Medium: 0 -- Minor: 0 - -**New tasks added:** `p03-t03` - -**Finding disposition map:** - -- `I1` -> converted (`p03-t03`) - complete the `oat-doctor` summary-mode - bundled-skill manifest so it includes `project-management` and `research` - -**Next:** Re-run `oat-project-review-provide code final`, then -`oat-project-review-receive` to close the final review gate. - -Review-fix task is complete: - -- Update the review row status to `fixes_completed` -- Re-run `oat-project-review-provide code final` then - `oat-project-review-receive` to reach `passed` - ---- - -## Review Received: final (re-review 3) - -**Date:** 2026-03-20 -**Review artifact:** reviews/archived/final-review-2026-03-20-v3.md - -**Findings:** - -- Critical: 0 -- Important: 0 -- Medium: 0 -- Minor: 0 - -**New tasks added:** none - -**Finding disposition map:** - -- No findings. Final re-review passed. - -**Next:** Generate the final PR description via `oat-project-pr-final`. - -Final review status: - -- The `final` review row is now `passed` -- Implementation work is complete and ready for PR/finalization - ---- - -## Implementation Log - -Chronological log of implementation progress. - -### 2026-03-20 - -**Session Start:** {time} - -- [x] p01-t01: Introduce the `docs` pack manifest and installer command - 983e23bc -- [x] p01-t02: Propagate `docs` pack support through tool management and legacy removal flows - e254abe5 -- [x] p02-t01: Move the shared tracking helper to a neutral location and update skill references - 30234c42 -- [x] p02-t02: Update product docs and examples for the new pack layout - ce0a6352 - -**What changed (high level):** - -- Quick-mode OAT project scaffolded for the docs-pack split -- Discovery captured and approved path selected -- Implementation plan generated with four executable tasks -- Added the `docs` pack installer, manifest split, and task-owned test coverage -- Wired the `docs` pack through scanning, update/remove flows, legacy removal, - and CLI help output -- Moved the shared tracking helper to `.oat/scripts` and updated bundled skill - references plus docs-pack installation to use the neutral path -- Updated repo/docs guidance for the new pack layout and removed the final - stale helper symlink that blocked full docs builds - -**Decisions:** - -- Keep `oat-docs` in `core` and move the four analyze/apply workflows into a - new `docs` pack -- Use `.oat/scripts` as the neutral shared-helper home so installer packs and - skill docs can reference the same stable path -- Use direct `vitest` file execution for task verification when the package - script would pull in unrelated suites from later tasks - -**Follow-ups / TODO:** - -- Pause at the configured `p02` checkpoint before entering review/finalization flow - -**Blockers:** - -- None - plan is ready for implementation - -**Session End:** {time} - ---- - -### 2026-03-20 - -**Session Start:** {time} - -{Continue log...} - ---- - -### 2026-03-20 - -**Session Start:** {time} - -- [x] final review received and parsed -- [x] m1 converted to `p03-t01` -- [x] m2 converted to `p03-t02` -- [x] Execute `p03-t01` - fa480c4e -- [x] Execute `p03-t02` - 29f26e81 -- [x] final re-review received and parsed -- [x] I1 converted to `p03-t03` -- [x] Execute `p03-t03` - 6d48c2ac - -**What changed (high level):** - -- Processed the active final code review artifact -- Added a dedicated review-fixes phase with two small follow-up tasks -- Corrected the stale `utility` pack description and the truncated - `oat-doctor` pack enum guidance -- Processed the narrowed final re-review and queued one more bounded - `oat-doctor` summary-manifest fix, then implemented it -- Final narrowed re-review passed with no remaining findings - -**Decisions:** - -- Converted both final-review minor findings into tasks instead of deferring - them so the final gate can be cleared cleanly on re-review -- Added fixes as a dedicated `Phase 3: Review Fixes` rather than mutating prior - phase summaries retroactively - -**Follow-ups / TODO:** - -- Generate the final PR description - -**Blockers:** - -- None - ---- - -## Deviations from Plan - -Document any deviations from the original plan. - -| Task | Planned | Actual | Reason | -| ---- | ------- | ------ | ------ | -| - | - | - | - | - -## Test Results - -Track test execution during implementation. - -| Phase | Tests Run | Passed | Failed | Coverage | -| ----- | ------------------------------ | ------ | ------ | ---------- | -| 1 | - | - | - | - | -| 2 | - | - | - | - | -| 3 | targeted verification commands | ✓ | 0 | task-owned | - -## Final Summary (for PR/docs) - -**What shipped:** - -- Added a first-class `docs` tool pack while keeping `oat-docs` in `core` -- Propagated the new pack through install, scan, update, remove, and help - surfaces -- Moved the shared tracking helper to `.oat/scripts` -- Updated product docs and `oat-doctor` guidance to reflect the new pack layout -- Closed the final review drift with three bounded follow-up fixes - -**Behavioral changes (user-facing):** - -- Users can install and manage docs workflows via a dedicated `docs` pack -- Generated tool-pack guidance now describes `utility` accurately after the - split -- `oat-doctor` guidance now lists the full supported pack set and its summary - example includes the missing packs - -**Key files / modules:** - -- `packages/cli/src/commands/init/tools/` - pack installer and manifest work -- `packages/cli/src/commands/tools/` - pack lifecycle and scan/update/remove behavior -- `apps/oat-docs/docs/` - end-user docs for the new pack layout -- `.oat/scripts/resolve-tracking.sh` - neutral shared helper location -- `.agents/skills/oat-doctor/SKILL.md` - updated pack guidance - -**Verification performed:** - -- Task-owned Vitest coverage for init-tools/docs-pack/help flows -- `pnpm --filter @oat/cli lint` -- `pnpm --filter @oat/cli type-check` -- `pnpm --filter oat-docs docs:lint` -- `pnpm build:docs` -- targeted `rg` checks for stale helper-path and pack-taxonomy drift - -**Design deltas (if any):** - -- No design artifact used in this quick-mode project -- Review-fix work added a dedicated `Phase 3` rather than mutating prior phase - task lists in place - -## References - -- Plan: `plan.md` -- Design: `design.md` -- Spec: `spec.md` diff --git a/.oat/projects/shared/docs-pack-split/plan.md b/.oat/projects/shared/docs-pack-split/plan.md deleted file mode 100644 index 8400310e..00000000 --- a/.oat/projects/shared/docs-pack-split/plan.md +++ /dev/null @@ -1,384 +0,0 @@ ---- -oat_status: complete -oat_ready_for: oat-project-implement -oat_blockers: [] -oat_last_updated: 2026-03-20 -oat_phase: plan -oat_phase_status: complete -oat_plan_hill_phases: ['p02'] # phases to pause AFTER completing (empty = every phase) -oat_plan_source: quick # spec-driven | quick | imported -oat_import_reference: null # e.g., references/imported-plan.md -oat_import_source_path: null # original source path provided by user -oat_import_provider: null # codex | cursor | claude | null -oat_generated: false ---- - -# Implementation Plan: docs-pack-split - -> Execute this plan using `oat-project-implement` (sequential) or `oat-project-subagent-implement` (parallel), with phase checkpoints and review gates. - -**Goal:** Split docs-related analyze/apply workflows into a dedicated `docs` -tool pack while keeping `oat-docs` in `core`, then update supporting CLI -commands, shared assets, and end-user documentation so pack behavior and docs -stay aligned. - -**Architecture:** Extend the existing pack model by adding a first-class `docs` -pack alongside the current bundled packs, then propagate that new pack through -installer commands, pack scanning and lifecycle commands, shared helper asset -locations, and the docs/help surface. - -**Tech Stack:** TypeScript CLI commands and Vitest tests in `packages/cli`, -shell asset bundling scripts, Markdown docs in `apps/oat-docs/docs`, and skill -metadata under `.agents/skills`. - -**Commit Convention:** `{type}({scope}): {description}` - e.g., `feat(p01-t01): add user auth endpoint` - -## Planning Checklist - -- [x] Confirmed HiLL checkpoints with user -- [x] Set `oat_plan_hill_phases` in frontmatter - ---- - -## Phase 1: Add the Docs Pack to the CLI Model - -### Task p01-t01: Introduce the `docs` pack manifest and installer command - -**Files:** - -- Create: `packages/cli/src/commands/init/tools/docs/index.ts` -- Create: `packages/cli/src/commands/init/tools/docs/index.test.ts` -- Create: `packages/cli/src/commands/init/tools/docs/install-docs.ts` -- Create: `packages/cli/src/commands/init/tools/docs/install-docs.test.ts` -- Modify: `packages/cli/src/commands/init/tools/shared/skill-manifest.ts` -- Modify: `packages/cli/src/commands/init/tools/index.ts` -- Modify: `packages/cli/src/commands/init/tools/shared/bundle-consistency.test.ts` - -**Step 1: Write test (RED)** - -Add failing tests for the new `docs` pack manifest, installer behavior, and -init-tools command registration. - -Run: `pnpm --filter @oat/cli test -- src/commands/init/tools/docs/install-docs.test.ts src/commands/init/tools/docs/index.test.ts src/commands/init/tools/index.test.ts src/commands/init/tools/shared/bundle-consistency.test.ts` -Expected: Test fails (RED) - -**Step 2: Implement (GREEN)** - -Add `DOCS_SKILLS`, implement the new docs-pack installer command, wire the pack -into init-tools selection and descriptions, and keep bundle consistency tests in -sync with the new manifest. - -Run: `pnpm --filter @oat/cli test -- src/commands/init/tools/docs/install-docs.test.ts src/commands/init/tools/docs/index.test.ts src/commands/init/tools/index.test.ts src/commands/init/tools/shared/bundle-consistency.test.ts` -Expected: Test passes (GREEN) - -**Step 3: Refactor** - -Refine pack descriptions and installer defaults so `docs` reads consistently -next to `core`, `utility`, and the other bundled packs. - -**Step 4: Verify** - -Run: `pnpm --filter @oat/cli lint && pnpm --filter @oat/cli type-check` -Expected: No errors - -**Step 5: Commit** - -```bash -git add packages/cli/src/commands/init/tools -git commit -m "feat(p01-t01): add docs tool pack installer" -``` - ---- - -### Task p01-t02: Propagate `docs` pack support through tool management and legacy removal flows - -**Files:** - -- Modify: `packages/cli/src/commands/tools/shared/types.ts` -- Modify: `packages/cli/src/commands/tools/shared/scan-tools.ts` -- Modify: `packages/cli/src/commands/tools/shared/scan-tools.test.ts` -- Modify: `packages/cli/src/commands/tools/list/list-tools.test.ts` -- Modify: `packages/cli/src/commands/tools/update/index.ts` -- Modify: `packages/cli/src/commands/tools/update/update-tools.test.ts` -- Modify: `packages/cli/src/commands/tools/remove/index.ts` -- Modify: `packages/cli/src/commands/tools/remove/remove-tools.test.ts` -- Modify: `packages/cli/src/commands/remove/skills/remove-skills.ts` -- Modify: `packages/cli/src/commands/remove/skills/remove-skills.test.ts` -- Modify: `packages/cli/src/commands/help-snapshots.test.ts` - -**Step 1: Write test (RED)** - -Add or update failing tests that expect `docs` pack membership in scan/list -results, tool update/remove pack validation, legacy `remove skills --pack` -support, and help snapshot output. - -**Step 2: Implement (GREEN)** - -Update pack unions, scanners, pack validators, and help text so the new pack is -handled anywhere pack names are parsed or displayed. - -**Step 3: Refactor** - -Remove duplicated pack-name literals where practical so future pack additions do -not require as much manual synchronization. - -**Step 4: Verify** - -Run: `pnpm --filter @oat/cli test -- src/commands/tools/shared/scan-tools.test.ts src/commands/tools/list/list-tools.test.ts src/commands/tools/update/update-tools.test.ts src/commands/tools/remove/remove-tools.test.ts src/commands/remove/skills/remove-skills.test.ts src/commands/help-snapshots.test.ts` -Expected: Updated pack management tests and help snapshots pass - -**Step 5: Commit** - -```bash -git add packages/cli/src/commands/tools packages/cli/src/commands/remove packages/cli/src/commands/help-snapshots.test.ts -git commit -m "feat(p01-t02): wire docs pack through tool management" -``` - ---- - -## Phase 2: Decouple Shared Assets and Refresh Documentation - -### Task p02-t01: Move the shared tracking helper to a neutral location and update skill references - -**Files:** - -- Create or move: neutral shared tracking helper location -- Modify: `.agents/skills/oat-agent-instructions-analyze/SKILL.md` -- Modify: `.agents/skills/oat-agent-instructions-apply/SKILL.md` -- Modify: `.agents/skills/oat-docs-analyze/SKILL.md` -- Modify: `.agents/skills/oat-docs-apply/SKILL.md` -- Modify: `packages/cli/scripts/bundle-assets.sh` -- Modify: any tests or asset expectations that depend on the helper path - -**Step 1: Write test (RED)** - -Add or update checks that fail while docs skills still reference a helper inside -another skill's directory or while the neutral helper is not bundled correctly. - -Run: `rg -n "oat-agent-instructions-analyze/scripts/resolve-tracking.sh|resolve-tracking.sh" .agents/skills packages/cli/scripts` -Expected: Current references reveal the old cross-pack coupling - -**Step 2: Implement (GREEN)** - -Move the tracking helper to a neutral shared location, update all skill -references, and ensure bundled assets include the helper from its new home. - -Run: `rg -n "resolve-tracking.sh" .agents/skills packages/cli/scripts .oat/scripts` -Expected: Only the new shared path is referenced - -**Step 3: Refactor** - -Tighten helper-path comments and reference notes in the skill docs so future -pack reorganizations do not recreate a hidden dependency. - -**Step 4: Verify** - -Run: `pnpm --filter @oat/cli test -- src/commands/init/tools/shared/bundle-consistency.test.ts && pnpm --filter @oat/cli type-check` -Expected: Asset and CLI checks pass with the helper in its neutral location - -**Step 5: Commit** - -```bash -git add .agents/skills .oat/scripts packages/cli/scripts -git commit -m "refactor(p02-t01): decouple docs pack helper path" -``` - ---- - -### Task p02-t02: Update product docs and examples for the new pack layout - -**Files:** - -- Modify: `README.md` -- Modify: `apps/oat-docs/docs/guide/tool-packs.md` -- Modify: `apps/oat-docs/docs/guide/getting-started.md` -- Modify: `apps/oat-docs/docs/guide/cli-reference.md` -- Modify: `apps/oat-docs/docs/guide/documentation/quickstart.md` -- Modify: `apps/oat-docs/docs/guide/documentation/workflows.md` -- Modify: any additional docs pages that still present the moved skills as part - of `utility` - -**Step 1: Write test (RED)** - -Identify stale docs references to `utility` for docs workflows and stale pack -lists that do not mention `docs`. - -Run: `rg -n "utility pack installs|core, ideas, workflows, utility|project-management, research|oat init tools utility|docs analysis and apply skills installed via the utility pack" README.md apps/oat-docs/docs` -Expected: Existing docs still reflect the pre-split pack model - -**Step 2: Implement (GREEN)** - -Update pack lists, installation examples, and docs workflow guidance so user -documentation matches the new `core`/`docs`/`utility` split. - -Run: `rg -n "oat init tools docs|docs pack|utility pack installs" README.md apps/oat-docs/docs` -Expected: Docs references reflect the new pack and no stale guidance remains in -the touched pages - -**Step 3: Refactor** - -Trim duplicate explanations where a single canonical pack description page can -be referenced instead of restating the same taxonomy. - -**Step 4: Verify** - -Run: `pnpm --filter oat-docs docs:lint && pnpm build:docs` -Expected: Markdown lint and docs build pass - -**Step 5: Commit** - -```bash -git add README.md apps/oat-docs/docs -git commit -m "docs(p02-t02): document docs tool pack split" -``` - ---- - -## Phase 3: Review Fixes - -### Task p03-t01: (review) Update the utility pack description to match the split - -**Files:** - -- Modify: `packages/cli/src/commands/init/tools/index.ts` - -**Step 1: Understand the issue** - -Review finding: The `utility` entry in `PACK_DESCRIPTIONS` still says `docs -analysis` and `agent instructions`, even though those skills moved to the -`docs` pack. -Location: `packages/cli/src/commands/init/tools/index.ts:332` - -**Step 2: Implement fix** - -Update the `utility` pack description so it reflects the actual pack contents -after the split, such as skill authoring, maintainability review, and code -reviews. - -**Step 3: Verify** - -Run: `pnpm --filter @oat/cli exec vitest run src/commands/init/tools/index.test.ts src/commands/help-snapshots.test.ts` -Expected: init-tools output and help snapshots still pass with the corrected -description - -**Step 4: Commit** - -```bash -git add packages/cli/src/commands/init/tools/index.ts packages/cli/src/commands/help-snapshots.test.ts -git commit -m "fix(p03-t01): correct utility pack description" -``` - ---- - -### Task p03-t02: (review) Expand oat-doctor pack guidance to match PackName - -**Files:** - -- Modify: `.agents/skills/oat-doctor/SKILL.md` - -**Step 1: Understand the issue** - -Review finding: The `oat-doctor` JSON parsing guidance still lists a truncated -pack enum and omits `docs`, `project-management`, and `research`. -Location: `.agents/skills/oat-doctor/SKILL.md:89` - -**Step 2: Implement fix** - -Update the pack enum guidance so it matches the current `PackName` union used -by the CLI. - -**Step 3: Verify** - -Run: `rg -n "pack \\(core/docs/ideas/workflows/utility/project-management/research/custom\\)" .agents/skills/oat-doctor/SKILL.md` -Expected: the updated pack enum is present in the skill guidance - -**Step 4: Commit** - -```bash -git add .agents/skills/oat-doctor/SKILL.md -git commit -m "fix(p03-t02): align oat-doctor pack guidance" -``` - ---- - -### Task p03-t03: (review) Complete oat-doctor summary pack manifest coverage - -**Files:** - -- Modify: `.agents/skills/oat-doctor/SKILL.md` - -**Step 1: Understand the issue** - -Review finding: The `oat-doctor` summary-mode bundled-skill manifest and -example output still omit the `project-management` and `research` packs, even -after the enum line was corrected. -Location: `.agents/skills/oat-doctor/SKILL.md:170` - -**Step 2: Implement fix** - -Extend the Step 5 pack-manifest section and the Step 7 summary-mode example so -they include `project-management` and `research`, or otherwise make the -documented pack list match the shared CLI manifest. - -**Step 3: Verify** - -Run: `rg -n -e 'Project management pack skills' -e 'Research pack skills' .agents/skills/oat-doctor/SKILL.md && rg -n -F 'oat-pjm-add-backlog-item' .agents/skills/oat-doctor/SKILL.md && rg -n -F 'deep-research' .agents/skills/oat-doctor/SKILL.md` -Expected: the summary-manifest section and example output include the missing -packs and representative skills - -**Step 4: Commit** - -```bash -git add .agents/skills/oat-doctor/SKILL.md -git commit -m "fix(p03-t03): complete oat-doctor manifest guidance" -``` - ---- - -## Reviews - -{Track reviews here after running the oat-project-review-provide and oat-project-review-receive skills.} - -{Keep both code + artifact rows below. Add additional code rows (p03, p04, etc.) as needed, but do not delete `spec`/`design`.} - -| Scope | Type | Status | Date | Artifact | -| ------ | -------- | ------- | ---------- | ---------------------------------------------- | -| p01 | code | pending | - | - | -| p02 | code | pending | - | - | -| final | code | passed | 2026-03-20 | reviews/archived/final-review-2026-03-20-v3.md | -| spec | artifact | pending | - | - | -| design | artifact | pending | - | - | - -**Status values:** `pending` → `received` → `fixes_added` → `fixes_completed` → `passed` - -**Meaning:** - -- `received`: review artifact exists (not yet converted into fix tasks) -- `fixes_added`: fix tasks were added to the plan (work queued) -- `fixes_completed`: fix tasks implemented, awaiting re-review -- `passed`: re-review run and recorded as passing (no Critical/Important) - ---- - -## Implementation Complete - -**Summary:** - -- Phase 1: 2 tasks - add the docs pack to installer, scanning, update/remove, - and help surfaces -- Phase 2: 2 tasks - decouple shared helper assets and update repository/docs - guidance -- Phase 3: 3 tasks - close final review drift in pack descriptions and - `oat-doctor` guidance, including the summary-manifest follow-up - -**Total: 7 tasks** - -Ready for final re-review. - ---- - -## References - -- Discovery: `discovery.md` -- Design: `design.md` (not used in this quick-mode project) -- Spec: `spec.md` (not used in this quick-mode project) diff --git a/.oat/projects/shared/docs-pack-split/state.md b/.oat/projects/shared/docs-pack-split/state.md deleted file mode 100644 index d9af62bf..00000000 --- a/.oat/projects/shared/docs-pack-split/state.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -oat_current_task: null -oat_last_commit: 6d48c2ac9093963b02e757cb2ea48780f1de0fe1 -oat_blockers: [] -associated_issues: [] # [{type: backlog|project|jira|linear, ref: "identifier"}] -oat_hill_checkpoints: ['p02'] # Configured: which phases require human-in-the-loop lifecycle approval -oat_hill_completed: [] # Progress: which HiLL checkpoints have been completed -oat_parallel_execution: false -oat_phase: implement # Current phase: discovery | spec | design | plan | implement -oat_phase_status: complete # Status: in_progress | complete -oat_execution_mode: single-thread # single-thread | subagent-driven -oat_workflow_mode: quick # spec-driven | quick | import -oat_workflow_origin: native # native | imported -oat_docs_updated: complete # null | skipped | complete — documentation sync status -oat_project_created: '2026-03-20T19:21:10.139Z' # ISO 8601 UTC timestamp — set once at project creation -oat_project_completed: null # ISO 8601 UTC timestamp — set when project is completed/archived -oat_project_state_updated: '2026-03-21T00:07:44Z' # ISO 8601 UTC timestamp — updated on every state.md mutation -oat_generated: false ---- - -# Project State: docs-pack-split - -**Status:** Implementation complete -**Started:** 2026-03-20 -**Last Updated:** 2026-03-20 - -## Current Phase - -Implementation tasks and final re-review are complete. The project is ready for -final PR generation. - -## Artifacts - -- **Discovery:** `discovery.md` (complete) -- **Spec:** Not created (quick workflow) -- **Design:** Not created (straight-to-plan path) -- **Plan:** `plan.md` (complete, checkpoints: `["p02"]`) -- **Implementation:** `implementation.md` (initialized) - -## Progress - -- ✓ Quick-mode project scaffolded -- ✓ Discovery captured -- ✓ Plan generated -- ✓ `p01-t01` complete -- ✓ Phase 1 complete -- ✓ `p02-t01` complete -- ✓ `p02-t02` complete -- ✓ Final review received -- ✓ `p03-t01` complete -- ✓ `p03-t02` complete -- ✓ Final re-review received -- ✓ `p03-t03` complete -- ✓ Final re-review passed -- ⧗ Ready for final PR generation - -## Blockers - -None - -## Next Milestone - -Run `oat-project-complete`.