Skip to content

Configuration Guide

Configure tag prefixes, presets, sources, output, and custom taxonomies for @libar-dev/delivery-process.

Prerequisites: See README.md for installation and basic usage. Tag Reference: Run npx generate-tag-taxonomy -o TAG_TAXONOMY.md -f for a complete tag list. See TAXONOMY.md for concepts.


PresetTag PrefixCategoriesUse Case
libar-generic (default)@libar-docs-3Simple projects (this package)
generic@docs-3Simple projects with @docs- prefix
ddd-es-cqrs@libar-docs-21DDD/Event Sourcing architectures
delivery-process.config.ts
import { defineConfig } from '@libar-dev/delivery-process/config';
// Default: libar-generic preset (simple 3-category taxonomy)
export default defineConfig({
preset: 'libar-generic',
sources: {
typescript: ['src/**/*.ts'],
features: ['specs/*.feature'],
},
output: { directory: 'docs-generated' },
});
// DDD-ES-CQRS preset (full 21-category taxonomy)
export default defineConfig({
preset: 'ddd-es-cqrs',
sources: {
typescript: ['packages/*/src/**/*.ts'],
features: ['delivery-process/specs/**/*.feature'],
stubs: ['delivery-process/stubs/**/*.ts'],
},
output: { directory: 'docs-living', overwrite: true },
});
// Generic preset (simple taxonomy with @docs- prefix)
export default defineConfig({
preset: 'generic',
sources: { typescript: ['src/**/*.ts'] },
});
// Custom prefix with any taxonomy
export default defineConfig({
preset: 'libar-generic',
tagPrefix: '@acme-',
fileOptInTag: '@acme',
sources: { typescript: ['src/**/*.ts'] },
});

When using a preset, the preset’s categories replace the base taxonomy categories entirely (not merged):

PresetCategoriesCount
genericcore, api, infra3
libar-genericcore, api, infra3
ddd-es-cqrsFull DDD taxonomy21

Design decision: If you need DDD categories (ddd, event-sourcing, cqrs, saga, projection, decider, etc.), use the ddd-es-cqrs preset. The generic and libar-generic presets provide a simpler 3-category taxonomy.

All entry points use the same default:

Entry PointDefault PresetContext
defineConfig()libar-generic (3 categories)Config file
loadProjectConfig() fallback (no file)libar-generic (3 categories)CLI tools
This package’s config filelibar-generic (3 categories)Standalone package usage

Rationale: Simple defaults for most users. Use preset: 'ddd-es-cqrs' explicitly if you need the full 21-category DDD taxonomy.


The default preset used by this package. Same 3 categories as generic but with @libar-docs- prefix.

PropertyValue
Tag Prefix@libar-docs-
File Opt-In@libar-docs
Categories3 (core, api, infra)
/**
* @libar-docs
* @libar-docs-pattern PatternScanner
* @libar-docs-status completed
* @libar-docs-core
* @libar-docs-uses FileDiscovery, ASTParser
*/
export function scanPatterns(config: ScanConfig): Promise<ScanResult> { ... }

Same 3 categories as libar-generic but with @docs- prefix. Use when you prefer shorter tag names.

PropertyValue
Tag Prefix@docs-
File Opt-In@docs
Categories3 (core, api, infra)
/**
* @docs
* @docs-pattern PatternScanner
* @docs-status completed
* @docs-core
* @docs-uses FileDiscovery, ASTParser
*/
export function scanPatterns(config: ScanConfig): Promise<ScanResult> { ... }

Full taxonomy for domain-driven architectures with 21 categories.

PropertyValue
Tag Prefix@libar-docs-
File Opt-In@libar-docs
Categories21 (domain, ddd, bounded-context, event-sourcing, decider, cqrs, etc.)
/**
* @libar-docs
* @libar-docs-pattern TransformDataset
* @libar-docs-status completed
* @libar-docs-core
* @libar-docs-uses MasterDataset, ExtractedPattern
* @libar-docs-used-by Orchestrator
*/
export function transformToMasterDataset(input: TransformInput): MasterDataset { ... }

Category Reference: Run npx generate-tag-taxonomy -o TAG_TAXONOMY.md -f for the complete list. See TAXONOMY.md for concepts.


The defineConfig() function centralizes taxonomy, sources, output, and generator overrides in a single delivery-process.config.ts file. CLI tools discover this file automatically.

  1. Current directory: check delivery-process.config.ts, then .js
  2. Walk up to repo root (.git folder), checking each directory
  3. Fall back to libar-generic preset (3 categories, @libar-docs- prefix)
delivery-process.config.ts
import { defineConfig } from '@libar-dev/delivery-process/config';
export default defineConfig({
preset: 'libar-generic',
sources: {
typescript: ['src/**/*.ts'],
stubs: ['delivery-process/stubs/**/*.ts'],
features: ['delivery-process/specs/*.feature'],
},
output: {
directory: 'docs-generated',
overwrite: true,
},
});
FieldTypeDescription
typescriptstring[]Glob patterns for TypeScript source files (required)
featuresstring[]Glob patterns for Gherkin feature files
stubsstring[]Glob patterns for design stub files
excludestring[]Glob patterns to exclude from all scanning

Stubs are merged into TypeScript sources at resolution time. No parent directory traversal (..) is allowed in globs.

FieldTypeDefaultDescription
directorystring'docs/architecture'Output directory for generated docs
overwritebooleanfalseOverwrite existing files

Some generators need different sources than the base config. Use generatorOverrides for per-generator customization:

export default defineConfig({
preset: 'libar-generic',
sources: {
typescript: ['src/**/*.ts'],
features: ['delivery-process/specs/*.feature'],
},
output: { directory: 'docs-generated', overwrite: true },
generatorOverrides: {
changelog: {
additionalFeatures: ['delivery-process/decisions/*.feature'],
},
'doc-from-decision': {
replaceFeatures: ['delivery-process/decisions/*.feature'],
},
},
});
Override FieldDescription
additionalFeaturesFeature globs appended to base features
additionalInputTypeScript globs appended to base TypeScript sources
replaceFeaturesFeature globs used INSTEAD of base features
outputDirectoryOverride output directory for this generator

Constraint: replaceFeatures and additionalFeatures are mutually exclusive when both are non-empty.

my-monorepo/
├── delivery-process.config.ts # Repo: ddd-es-cqrs
└── packages/
└── my-package/
└── delivery-process.config.ts # Package: generic

CLI tools use the nearest config file to the working directory.


Keep a preset’s taxonomy but change the prefix:

export default defineConfig({
preset: 'libar-generic',
tagPrefix: '@team-',
fileOptInTag: '@team',
sources: { typescript: ['src/**/*.ts'] },
});
// Your annotations:
// /** @team */
// /** @team-pattern DualSourceExtractor */
// /** @team-core */

Define your own taxonomy:

export default defineConfig({
tagPrefix: '@docs-',
fileOptInTag: '@docs',
categories: [
{ tag: 'scanner', domain: 'Scanner', priority: 1, description: 'File scanning', aliases: [] },
{
tag: 'extractor',
domain: 'Extractor',
priority: 2,
description: 'Pattern extraction',
aliases: [],
},
{
tag: 'generator',
domain: 'Generator',
priority: 3,
description: 'Doc generation',
aliases: [],
},
],
sources: { typescript: ['src/**/*.ts'] },
});

For tools that need to load configuration files:

import { loadProjectConfig } from '@libar-dev/delivery-process/config';
const result = await loadProjectConfig(process.cwd());
if (!result.ok) {
console.error(result.error.message);
process.exit(1);
}
const resolved = result.value;
// resolved.instance - DeliveryProcessInstance (registry + regexBuilders)
// resolved.project - ResolvedProjectConfig (sources, output, generators)
// resolved.isDefault - true if no config file found
// resolved.configPath - config file path (if found)

For per-generator source resolution:

import { mergeSourcesForGenerator } from '@libar-dev/delivery-process/config';
const effectiveSources = mergeSourcesForGenerator(
resolved.project.sources,
'changelog',
resolved.project.generatorOverrides
);
// effectiveSources.typescript - merged TypeScript globs
// effectiveSources.features - merged or replaced feature globs

The legacy createDeliveryProcess() API is still exported and supported. Config files using the old format are detected automatically by loadProjectConfig() and wrapped in a ResolvedConfig with default project settings.

// Legacy format (still works)
import { createDeliveryProcess } from '@libar-dev/delivery-process';
export default createDeliveryProcess({ preset: 'ddd-es-cqrs' });

New projects should use defineConfig() for the unified configuration experience.


DocumentPurpose
README.mdInstallation and quick start
TAXONOMY.mdTag taxonomy concepts and API
ARCHITECTURE.mdPipeline and codec architecture
METHODOLOGY.mdDual-source ownership strategy