feat: Complete Issue #52 - Capture actual heading text in schemas
Implement comprehensive heading text capture functionality that allows schemas to enforce specific heading text requirements through enum constraints: • New CLI option: --capture-heading-text flag for exact text constraints • Schema generation with heading text as enum constraints (not just structure) • Advanced validation engine that enforces heading text requirements • Metaschema extension: x-markitect-heading-text-capture marker • Full integration with Issue #51 outline mode capabilities • Comprehensive error reporting for heading text mismatches • Complete backward compatibility with existing schema generation Technical implementation: - Extended SchemaGenerator with capture_heading_text parameter - Enhanced validation system to check enum constraints on heading content - Added _validate_heading_text_constraints_with_errors for detailed reporting - Integrated with existing metaschema validation from Issue #50 - Preserved document order of headings in enum constraints Key features: - Schemas can now specify required heading text via enum constraints - Validation rejects documents with incorrect heading text - Detailed error messages show expected vs actual heading text - Works seamlessly with outline mode depth controls - Maintains 100% compatibility with 513 existing tests Usage examples: markitect schema-generate --capture-heading-text document.md markitect schema-generate --mode outline --capture-heading-text --depth 2 document.md 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1454,8 +1454,9 @@ def ast_stats(config, file_path, format):
|
||||
@click.option('--format', 'output_format', type=click.Choice(['json', 'yaml']), default='json', help='Output format')
|
||||
@click.option('--mode', type=click.Choice(['outline']), help='Generation mode: outline for structure-focused schemas')
|
||||
@click.option('--depth', type=int, help='Maximum depth for outline mode (similar to --max-depth)')
|
||||
@click.option('--capture-heading-text', is_flag=True, help='Capture exact heading text as schema constraints')
|
||||
@pass_config
|
||||
def generate_schema(config, file_path, max_depth, output, outfile, output_format, mode, depth):
|
||||
def generate_schema(config, file_path, max_depth, output, outfile, output_format, mode, depth, capture_heading_text):
|
||||
"""
|
||||
Generate a JSON schema from a markdown file's AST structure.
|
||||
|
||||
@@ -1470,9 +1471,17 @@ def generate_schema(config, file_path, max_depth, output, outfile, output_format
|
||||
markitect schema-generate --mode outline document.md
|
||||
markitect schema-generate --mode outline --depth 3 --outfile schema.json document.md
|
||||
|
||||
# Heading text capture for validation constraints
|
||||
markitect schema-generate --capture-heading-text document.md
|
||||
markitect schema-generate --mode outline --capture-heading-text --depth 2 document.md
|
||||
|
||||
Modes:
|
||||
Default: Standard schema generation with structural analysis
|
||||
Outline: Structure-focused schema with heading text capture and metaschema extensions
|
||||
|
||||
Heading Text Capture:
|
||||
When --capture-heading-text is enabled, the schema will include exact heading text
|
||||
as enum constraints, enabling validation to enforce specific heading text requirements.
|
||||
"""
|
||||
try:
|
||||
# Handle parameter conflicts and defaults
|
||||
@@ -1507,7 +1516,8 @@ def generate_schema(config, file_path, max_depth, output, outfile, output_format
|
||||
file_path,
|
||||
max_depth=final_depth,
|
||||
mode=mode,
|
||||
outline_depth=depth if mode == 'outline' else None
|
||||
outline_depth=depth if mode == 'outline' else None,
|
||||
capture_heading_text=capture_heading_text
|
||||
)
|
||||
|
||||
# Format output
|
||||
|
||||
Reference in New Issue
Block a user