markdown_composer 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +23 -0
- data/LICENSE.txt +21 -0
- data/README.md +278 -0
- data/ROADMAP.md +80 -0
- data/docs/_md_composer_architecture.md +50 -0
- data/docs/_md_composer_cheatsheet.md +72 -0
- data/docs/_md_composer_concepts.md +64 -0
- data/docs/_md_composer_dev_guide.md +55 -0
- data/docs/_md_composer_getting_started.md +114 -0
- data/docs/_md_composer_readme.md +93 -0
- data/docs/_md_composer_user_guide.md +65 -0
- data/docs/ai/md_composer_ai_audit.md +35 -0
- data/docs/ai/md_composer_ai_canonical_docs.md +44 -0
- data/docs/ai/md_composer_ai_source_map.md +39 -0
- data/docs/compose/md_composer_compose_actions.md +338 -0
- data/docs/compose/md_composer_compose_anatomy.md +156 -0
- data/docs/compose/md_composer_compose_buffer.md +81 -0
- data/docs/compose/md_composer_compose_examples.md +31 -0
- data/docs/compose/md_composer_compose_include.md +136 -0
- data/docs/compose/md_composer_compose_select.md +198 -0
- data/docs/compose/md_composer_compose_sources.md +161 -0
- data/docs/compose/md_composer_compose_targets.md +194 -0
- data/docs/examples/md_composer_example_basic_compose.md +57 -0
- data/docs/examples/md_composer_example_buffer_target_actions.md +83 -0
- data/docs/examples/md_composer_example_fixtures.md +62 -0
- data/docs/examples/md_composer_example_html_output.md +50 -0
- data/docs/examples/md_composer_example_modify.md +77 -0
- data/docs/examples/md_composer_example_multi_row_compose.md +67 -0
- data/docs/examples/md_composer_example_ruby_plans.md +62 -0
- data/docs/examples/md_composer_example_structured_data.md +68 -0
- data/docs/examples/md_composer_example_transforms.md +68 -0
- data/docs/examples/md_composer_example_yaml_json_rows.md +56 -0
- data/docs/examples/md_composer_examples_readme.md +45 -0
- data/docs/examples/md_composer_runnable_examples.md +374 -0
- data/docs/examples/md_composer_source_ruby_dsl.md +88 -0
- data/docs/reference/md_composer_nested.md +170 -0
- data/docs/reference/md_composer_reference_api.md +71 -0
- data/docs/reference/md_composer_reference_capabilities.md +63 -0
- data/docs/reference/md_composer_reference_diagnostics.md +54 -0
- data/docs/reference/md_composer_reference_plan_schema.md +75 -0
- data/docs/reference/md_composer_reference_registries.md +63 -0
- data/docs/reference/md_composer_take.md +221 -0
- data/docs/reference/md_composer_unit_tokens.md +228 -0
- data/docs/reference/md_composer_where.md +227 -0
- data/docs/transform/md_composer_transform_anatomy.md +112 -0
- data/docs/transform/md_composer_transform_examples.md +30 -0
- data/docs/transform/md_composer_transform_modes.md +83 -0
- data/docs/transform/md_composer_transform_options.md +142 -0
- data/docs/transform/md_composer_transform_scope.md +97 -0
- data/docs/transform/md_composer_transform_transforms.md +99 -0
- data/examples/README.md +20 -0
- data/examples/advanced_composer.rb +207 -0
- data/examples/basic_compose.rb +24 -0
- data/examples/complex_composer.rb +235 -0
- data/examples/example_support.rb +18 -0
- data/examples/fixtures/current.md +179 -0
- data/examples/fixtures/faq.md +58 -0
- data/examples/fixtures/guide.md +62 -0
- data/examples/fixtures/site_intro.md +29 -0
- data/examples/fixtures/source.html +22 -0
- data/examples/html_input.rb +26 -0
- data/examples/output/advanced_composer.md +76 -0
- data/examples/output/basic_compose.md +25 -0
- data/examples/output/complex_composer.md +85 -0
- data/examples/output/html_input.md +4 -0
- data/examples/output/source_list_dsl.md +126 -0
- data/examples/output/standard_composer.md +46 -0
- data/examples/output/standard_sources_buffer.md +31 -0
- data/examples/output/yaml_plan.md +43 -0
- data/examples/plans/basic.yml +20 -0
- data/examples/source_list_dsl.rb +41 -0
- data/examples/standard_composer.rb +42 -0
- data/examples/standard_sources_buffer.rb +62 -0
- data/examples/yaml_plan.rb +17 -0
- data/lib/markdown_composer/capabilities.rb +223 -0
- data/lib/markdown_composer/composition_buffer.rb +378 -0
- data/lib/markdown_composer/data_path.rb +313 -0
- data/lib/markdown_composer/diagnostics.rb +63 -0
- data/lib/markdown_composer/document_index/html_parser.rb +84 -0
- data/lib/markdown_composer/document_index/markdown_parser.rb +338 -0
- data/lib/markdown_composer/document_index.rb +94 -0
- data/lib/markdown_composer/executor.rb +284 -0
- data/lib/markdown_composer/markdown_renderer.rb +105 -0
- data/lib/markdown_composer/plan.rb +436 -0
- data/lib/markdown_composer/plan_builder.rb +111 -0
- data/lib/markdown_composer/registries/action_entries.rb +26 -0
- data/lib/markdown_composer/registries/condition_entries.rb +58 -0
- data/lib/markdown_composer/registries/registry.rb +69 -0
- data/lib/markdown_composer/registries/source_entries.rb +18 -0
- data/lib/markdown_composer/registries/support_values.rb +23 -0
- data/lib/markdown_composer/registries/take_entries.rb +31 -0
- data/lib/markdown_composer/registries/take_registry.rb +18 -0
- data/lib/markdown_composer/registries/target_entries.rb +40 -0
- data/lib/markdown_composer/registries/unit_token_entries.rb +62 -0
- data/lib/markdown_composer/registries/where_registry.rb +84 -0
- data/lib/markdown_composer/registries.rb +46 -0
- data/lib/markdown_composer/result.rb +34 -0
- data/lib/markdown_composer/selection_resolver.rb +181 -0
- data/lib/markdown_composer/source.rb +57 -0
- data/lib/markdown_composer/source_list_builder.rb +47 -0
- data/lib/markdown_composer/take.rb +129 -0
- data/lib/markdown_composer/transform_options.rb +66 -0
- data/lib/markdown_composer/transform_runner/content_placement.rb +63 -0
- data/lib/markdown_composer/transform_runner/field_interpolator.rb +213 -0
- data/lib/markdown_composer/transform_runner/heading_numbering.rb +106 -0
- data/lib/markdown_composer/transform_runner/scope_resolver.rb +87 -0
- data/lib/markdown_composer/transform_runner.rb +264 -0
- data/lib/markdown_composer/transforms/default_entries.rb +31 -0
- data/lib/markdown_composer/transforms/registry.rb +11 -0
- data/lib/markdown_composer/validator.rb +378 -0
- data/lib/markdown_composer/value_object.rb +15 -0
- data/lib/markdown_composer/version.rb +5 -0
- data/lib/markdown_composer/where.rb +313 -0
- data/lib/markdown_composer.rb +114 -0
- metadata +260 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Markdown Composer Getting Started
|
|
3
|
+
type: guide
|
|
4
|
+
status: current
|
|
5
|
+
updated: 2026-06-01
|
|
6
|
+
description: First practical steps for composing Markdown with Markdown Composer.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Markdown Composer Getting Started
|
|
10
|
+
|
|
11
|
+
### References
|
|
12
|
+
|
|
13
|
+
| What | Where |
|
|
14
|
+
|------|-------|
|
|
15
|
+
| Readme | [./_md_composer_readme.md](./_md_composer_readme.md) |
|
|
16
|
+
| Compose anatomy | [./compose/md_composer_compose_anatomy.md](./compose/md_composer_compose_anatomy.md) |
|
|
17
|
+
| Transform anatomy | [./transform/md_composer_transform_anatomy.md](./transform/md_composer_transform_anatomy.md) |
|
|
18
|
+
| Basic compose example | [./examples/md_composer_example_basic_compose.md](./examples/md_composer_example_basic_compose.md) |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 1. Install And Require
|
|
23
|
+
|
|
24
|
+
```ruby
|
|
25
|
+
require "markdown_composer"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The gem is headless. You provide sources and a plan; it returns Markdown, optional HTML, diagnostics, and errors.
|
|
29
|
+
|
|
30
|
+
## 2. Create A Source
|
|
31
|
+
|
|
32
|
+
A source is a hash with content and a source identity.
|
|
33
|
+
|
|
34
|
+
```ruby
|
|
35
|
+
sources = [
|
|
36
|
+
{
|
|
37
|
+
"key" => "guide",
|
|
38
|
+
"type" => "current",
|
|
39
|
+
"markdown" => "# Guide\n\n## Intro\n\nWelcome.\n\n## API\n\nUse it.\n"
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Use `current` for the main source. Use explicit keys when a plan needs more than one source.
|
|
45
|
+
|
|
46
|
+
## 3. Write A Compose Row
|
|
47
|
+
|
|
48
|
+
A compose row reads like this:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
From this Source, Select these units, Include these parts, then perform this Action at this Target.
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Minimal config:
|
|
55
|
+
|
|
56
|
+
```ruby
|
|
57
|
+
config = {
|
|
58
|
+
"compose" => [
|
|
59
|
+
{
|
|
60
|
+
"source" => "current",
|
|
61
|
+
"select" => "heading_2_section[first:1]",
|
|
62
|
+
"include" => "all",
|
|
63
|
+
"action" => "set"
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Expected output:
|
|
70
|
+
|
|
71
|
+
```markdown
|
|
72
|
+
## Intro
|
|
73
|
+
|
|
74
|
+
Welcome.
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## 4. Validate Before Saving
|
|
78
|
+
|
|
79
|
+
```ruby
|
|
80
|
+
validation = MarkdownComposer.validate(config: config, sources: sources)
|
|
81
|
+
abort validation[:errors].inspect unless validation[:valid]
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Validation catches unknown tokens, bad targets, missing transform options, YAML/JSON errors, and policy-gated features.
|
|
85
|
+
|
|
86
|
+
## 5. Add A Transform
|
|
87
|
+
|
|
88
|
+
Top-level transforms run after all compose rows have built the buffer.
|
|
89
|
+
|
|
90
|
+
```ruby
|
|
91
|
+
config = {
|
|
92
|
+
"compose" => [
|
|
93
|
+
{ "select" => "heading_2_section", "action" => "set" }
|
|
94
|
+
],
|
|
95
|
+
"transform" => [
|
|
96
|
+
{
|
|
97
|
+
"scope" => "output",
|
|
98
|
+
"transform" => "replace_text",
|
|
99
|
+
"mode" => "literal",
|
|
100
|
+
"options" => { "from" => "Welcome", "to" => "Hello" }
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## 6. Next Steps
|
|
107
|
+
|
|
108
|
+
| Need | Read |
|
|
109
|
+
|------|------|
|
|
110
|
+
| Learn row anatomy | [Compose anatomy](./compose/md_composer_compose_anatomy.md) |
|
|
111
|
+
| Learn transforms | [Transform anatomy](./transform/md_composer_transform_anatomy.md) |
|
|
112
|
+
| See complete examples | [Examples](./examples/md_composer_examples_readme.md) |
|
|
113
|
+
| Use Ruby DSL plans | [Ruby plans example](./examples/md_composer_example_ruby_plans.md) |
|
|
114
|
+
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Markdown Composer Readme
|
|
3
|
+
type: readme
|
|
4
|
+
status: current
|
|
5
|
+
updated: 2026-06-01
|
|
6
|
+
description: Public overview for the Markdown Composer gem documentation.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Markdown Composer Readme
|
|
10
|
+
|
|
11
|
+
### References
|
|
12
|
+
|
|
13
|
+
| What | Where |
|
|
14
|
+
|------|-------|
|
|
15
|
+
| Getting started | [./_md_composer_getting_started.md](./_md_composer_getting_started.md) |
|
|
16
|
+
| Compose anatomy | [./compose/md_composer_compose_anatomy.md](./compose/md_composer_compose_anatomy.md) |
|
|
17
|
+
| Transform anatomy | [./transform/md_composer_transform_anatomy.md](./transform/md_composer_transform_anatomy.md) |
|
|
18
|
+
| Examples | [./examples/md_composer_examples_readme.md](./examples/md_composer_examples_readme.md) |
|
|
19
|
+
| API reference | [./reference/md_composer_reference_api.md](./reference/md_composer_reference_api.md) |
|
|
20
|
+
| Unit tokens | [./reference/md_composer_unit_tokens.md](./reference/md_composer_unit_tokens.md) |
|
|
21
|
+
| Take modifiers | [./reference/md_composer_take.md](./reference/md_composer_take.md) |
|
|
22
|
+
| Where conditions | [./reference/md_composer_where.md](./reference/md_composer_where.md) |
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 1. What Markdown Composer Does
|
|
27
|
+
|
|
28
|
+
Markdown Composer is a headless Ruby gem for selecting, composing, modifying, and transforming Markdown or best-effort HTML content. It is useful when an application needs to build a new Markdown document from one or more sources without hand-writing string slicing logic.
|
|
29
|
+
|
|
30
|
+
The core model has two row types:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
Compose: Source -> Select -> Include -> Action -> Target
|
|
34
|
+
Transform: Scope -> Transform -> Mode -> Options
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Compose rows build a temporary output buffer. Transform rows reshape that buffer after composition.
|
|
38
|
+
|
|
39
|
+
## 2. Sixty-Second Example
|
|
40
|
+
|
|
41
|
+
```ruby
|
|
42
|
+
require "markdown_composer"
|
|
43
|
+
|
|
44
|
+
sources = [
|
|
45
|
+
{
|
|
46
|
+
"key" => "current",
|
|
47
|
+
"type" => "current",
|
|
48
|
+
"markdown" => "# Guide\n\n## Intro\n\nKeep this.\n\n## Draft\n\nSkip this.\n"
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
config = {
|
|
53
|
+
"compose" => [
|
|
54
|
+
{
|
|
55
|
+
"source" => "current",
|
|
56
|
+
"select" => "heading_2_section where title:equals(\"Intro\")",
|
|
57
|
+
"include" => "all",
|
|
58
|
+
"action" => "set"
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
"output" => "markdown"
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
result = MarkdownComposer.compose(sources: sources, config: config)
|
|
65
|
+
puts result.markdown
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Expected output:
|
|
69
|
+
|
|
70
|
+
```markdown
|
|
71
|
+
## Intro
|
|
72
|
+
|
|
73
|
+
Keep this.
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## 3. Where To Start
|
|
77
|
+
|
|
78
|
+
| If you want to... | Read |
|
|
79
|
+
|-------------------|------|
|
|
80
|
+
| Compose your first document | [Getting started](./_md_composer_getting_started.md) |
|
|
81
|
+
| Understand compose rows | [Compose anatomy](./compose/md_composer_compose_anatomy.md) |
|
|
82
|
+
| Learn each compose field | [Sources](./compose/md_composer_compose_sources.md), [Select](./compose/md_composer_compose_select.md), [Include](./compose/md_composer_compose_include.md), [Actions](./compose/md_composer_compose_actions.md), [Targets](./compose/md_composer_compose_targets.md) |
|
|
83
|
+
| Find every unit token | [Unit tokens](./reference/md_composer_unit_tokens.md) |
|
|
84
|
+
| Choose first, last, ranges, or positions | [Take modifiers](./reference/md_composer_take.md) |
|
|
85
|
+
| Filter selections, includes, targets, or scopes | [Where conditions](./reference/md_composer_where.md) |
|
|
86
|
+
| Transform composed output | [Transform anatomy](./transform/md_composer_transform_anatomy.md) |
|
|
87
|
+
| Use `modify` | [Modify examples](./examples/md_composer_example_modify.md) |
|
|
88
|
+
| Build a GUI | [Capabilities reference](./reference/md_composer_reference_capabilities.md) |
|
|
89
|
+
| Validate or debug configs | [Diagnostics reference](./reference/md_composer_reference_diagnostics.md) |
|
|
90
|
+
|
|
91
|
+
## 4. Public Documentation Shape
|
|
92
|
+
|
|
93
|
+
This `docs/` tree is the human-facing documentation set for GitHub and RubyGems readers. The `docs/ai/` directory is not the main reader path; it maps these public docs back to canonical audited source material.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Markdown Composer User Guide
|
|
3
|
+
type: user_guide
|
|
4
|
+
status: current
|
|
5
|
+
updated: 2026-06-01
|
|
6
|
+
description: Public user guide for learning Markdown Composer by task.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Markdown Composer User Guide
|
|
10
|
+
|
|
11
|
+
### References
|
|
12
|
+
|
|
13
|
+
| What | Where |
|
|
14
|
+
|------|-------|
|
|
15
|
+
| Getting started | [./_md_composer_getting_started.md](./_md_composer_getting_started.md) |
|
|
16
|
+
| Compose docs | [./compose/md_composer_compose_anatomy.md](./compose/md_composer_compose_anatomy.md) |
|
|
17
|
+
| Transform docs | [./transform/md_composer_transform_anatomy.md](./transform/md_composer_transform_anatomy.md) |
|
|
18
|
+
| Unit tokens | [./reference/md_composer_unit_tokens.md](./reference/md_composer_unit_tokens.md) |
|
|
19
|
+
| Take modifiers | [./reference/md_composer_take.md](./reference/md_composer_take.md) |
|
|
20
|
+
| Where conditions | [./reference/md_composer_where.md](./reference/md_composer_where.md) |
|
|
21
|
+
| Examples | [./examples/md_composer_examples_readme.md](./examples/md_composer_examples_readme.md) |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1. Learning Path
|
|
26
|
+
|
|
27
|
+
1. Start with [Getting started](./_md_composer_getting_started.md).
|
|
28
|
+
2. Learn [compose anatomy](./compose/md_composer_compose_anatomy.md).
|
|
29
|
+
3. Learn [selection](./compose/md_composer_compose_select.md), then the shared [unit tokens](./reference/md_composer_unit_tokens.md), [take modifiers](./reference/md_composer_take.md), and [where conditions](./reference/md_composer_where.md).
|
|
30
|
+
4. Learn [actions](./compose/md_composer_compose_actions.md) and [targets](./compose/md_composer_compose_targets.md).
|
|
31
|
+
5. Learn [transform anatomy](./transform/md_composer_transform_anatomy.md) and [options](./transform/md_composer_transform_options.md).
|
|
32
|
+
6. Copy a task from [examples](./examples/md_composer_examples_readme.md).
|
|
33
|
+
|
|
34
|
+
## 2. Common Tasks
|
|
35
|
+
|
|
36
|
+
| Task | Read |
|
|
37
|
+
|------|------|
|
|
38
|
+
| Pull one section from a document | [Basic compose](./examples/md_composer_example_basic_compose.md) |
|
|
39
|
+
| Build output from several rows | [Multi-row compose](./examples/md_composer_example_multi_row_compose.md) |
|
|
40
|
+
| Rewrite selected content while composing | [Modify](./examples/md_composer_example_modify.md) |
|
|
41
|
+
| Remove or transform content already in the buffer | [Buffer target actions](./examples/md_composer_example_buffer_target_actions.md) |
|
|
42
|
+
| Extract YAML/JSON values | [Structured data](./examples/md_composer_example_structured_data.md) |
|
|
43
|
+
| Use Ruby plans | [Ruby plans](./examples/md_composer_example_ruby_plans.md) |
|
|
44
|
+
|
|
45
|
+
## 3. Rules Of Thumb
|
|
46
|
+
|
|
47
|
+
| Rule | Why it helps |
|
|
48
|
+
|------|--------------|
|
|
49
|
+
| Build the buffer first, then transform it. | This keeps compose and transform concerns separate. |
|
|
50
|
+
| Prefer `heading_2_section` over `heading_2` when you want a heading and its body. | Heading tokens select only the heading node. Section tokens select the heading and content until the next same-or-higher heading. |
|
|
51
|
+
| Use `include` to narrow selected content. | `select` chooses units; `include` chooses what to keep from those units. |
|
|
52
|
+
| Use `modify` for selected-source transformations. | It is a compose action that transforms a temporary fragment before placing it. |
|
|
53
|
+
| Use `transform_buffer_target` for existing buffer content. | It transforms content already in the buffer by target. |
|
|
54
|
+
|
|
55
|
+
## 4. When You Get Stuck
|
|
56
|
+
|
|
57
|
+
Run validation and inspect diagnostics before guessing:
|
|
58
|
+
|
|
59
|
+
```ruby
|
|
60
|
+
validation = MarkdownComposer.validate(config: config, sources: sources)
|
|
61
|
+
pp validation[:errors]
|
|
62
|
+
pp validation[:diagnostics]
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Most authoring mistakes are field-specific: unknown selector, invalid target, missing transform option, or policy-gated feature.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Markdown Composer AI Audit Notes
|
|
3
|
+
type: reference
|
|
4
|
+
status: current
|
|
5
|
+
updated: 2026-06-01
|
|
6
|
+
description: Maintainer and AI audit notes for caveats in public Markdown Composer docs.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Markdown Composer AI Audit Notes
|
|
10
|
+
|
|
11
|
+
### References
|
|
12
|
+
|
|
13
|
+
| What | Where |
|
|
14
|
+
|------|-------|
|
|
15
|
+
| Source map | [./md_composer_ai_source_map.md](./md_composer_ai_source_map.md) |
|
|
16
|
+
| Capabilities reference | [../reference/md_composer_reference_capabilities.md](../reference/md_composer_reference_capabilities.md) |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 1. Required Public Caveats
|
|
21
|
+
|
|
22
|
+
| Caveat | Public docs that must mention it |
|
|
23
|
+
|--------|----------------------------------|
|
|
24
|
+
| `data_record` and `data_value` are transient `data_path(...)` result node types in standalone Markdown output. | Targets, include, structured data, registries, architecture |
|
|
25
|
+
| `set`, `append`, and `prepend` ignore supplied custom targets. | Actions |
|
|
26
|
+
| `remove_buffer_target` and `transform_buffer_target` use target as the meaningful address. | Actions, buffer, buffer examples |
|
|
27
|
+
| `modify target: in_place` requires original `source: "buffer"`. | Actions, targets, modify example |
|
|
28
|
+
| Semicolon option strings are first-class, not fallback-only. | Transform options |
|
|
29
|
+
| HTML link attribute modes are top-level HTML-output post-processing. | Transform modes, HTML output example |
|
|
30
|
+
| Some optional transform metadata is ahead of standalone runner behavior. | Transform anatomy, options, capabilities |
|
|
31
|
+
|
|
32
|
+
## 2. Code Accuracy Rule
|
|
33
|
+
|
|
34
|
+
Before publishing changed examples, run focused Ruby probes and the full gem test suite.
|
|
35
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Markdown Composer AI Canonical Docs
|
|
3
|
+
type: reference
|
|
4
|
+
status: current
|
|
5
|
+
updated: 2026-06-01
|
|
6
|
+
description: Maintainer and AI map of canonical Markdown Composer docs used as source material.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Markdown Composer AI Canonical Docs
|
|
10
|
+
|
|
11
|
+
### References
|
|
12
|
+
|
|
13
|
+
| What | Where |
|
|
14
|
+
|------|-------|
|
|
15
|
+
| Source map | [./md_composer_ai_source_map.md](./md_composer_ai_source_map.md) |
|
|
16
|
+
| Public readme | [../_md_composer_readme.md](../_md_composer_readme.md) |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 1. Canonical Source Location
|
|
21
|
+
|
|
22
|
+
The canonical project docs live outside this gem directory:
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
_docs/gems/markdown_composer/
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
This public `docs/` tree is the gem distribution docs set. It should be clear, task-based, and human-facing.
|
|
29
|
+
|
|
30
|
+
## 2. Canonical Files Used
|
|
31
|
+
|
|
32
|
+
| Topic | Canonical files |
|
|
33
|
+
|-------|-----------------|
|
|
34
|
+
| Overview | `_markdown_composer_readme.md`, `_markdown_composer_user_guide.md`, `_markdown_composer_cheatsheet.md` |
|
|
35
|
+
| Architecture | `_markdown_composer_architecture.md`, `reference/markdown_composer_capabilities.md`, `reference/markdown_composer_registries.md` |
|
|
36
|
+
| Compose | `reference/markdown_composer_compose.md`, sources, selection, include, actions, targets, take, where |
|
|
37
|
+
| Transform | `reference/markdown_composer_transforms.md`, capabilities, actions |
|
|
38
|
+
| Examples | `markdown_composer_examples.md` |
|
|
39
|
+
| Release | `release/markdown_composer_release_checklist.md` |
|
|
40
|
+
|
|
41
|
+
## 3. Do Not Publish This As The Main Entry
|
|
42
|
+
|
|
43
|
+
Link readers to [../_md_composer_readme.md](../_md_composer_readme.md), not to this file.
|
|
44
|
+
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Markdown Composer AI Source Map
|
|
3
|
+
type: reference
|
|
4
|
+
status: current
|
|
5
|
+
updated: 2026-06-01
|
|
6
|
+
description: Maintainer and AI source map for public Markdown Composer docs.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Markdown Composer AI Source Map
|
|
10
|
+
|
|
11
|
+
### References
|
|
12
|
+
|
|
13
|
+
| What | Where |
|
|
14
|
+
|------|-------|
|
|
15
|
+
| AI audit | [./md_composer_ai_audit.md](./md_composer_ai_audit.md) |
|
|
16
|
+
| Canonical docs map | [./md_composer_ai_canonical_docs.md](./md_composer_ai_canonical_docs.md) |
|
|
17
|
+
| Public readme | [../_md_composer_readme.md](../_md_composer_readme.md) |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 1. Purpose
|
|
22
|
+
|
|
23
|
+
This directory is for maintainers and AI agents. It is not the main public reader path.
|
|
24
|
+
|
|
25
|
+
Use it to trace public docs back to canonical audited source material under `_docs/gems/markdown_composer/` and gem code/tests.
|
|
26
|
+
|
|
27
|
+
## 2. Public-To-Canonical Map
|
|
28
|
+
|
|
29
|
+
| Public doc area | Canonical source material |
|
|
30
|
+
|-----------------|---------------------------|
|
|
31
|
+
| Root overview docs | `_docs/gems/markdown_composer/_markdown_composer_readme.md`, user guide, cheatsheet, architecture, dev guide |
|
|
32
|
+
| `compose/` | canonical compose, sources, selection, include, actions, targets, take, where docs |
|
|
33
|
+
| `transform/` | canonical transforms, capabilities, actions, targets docs |
|
|
34
|
+
| `examples/` | canonical examples plus focused tests |
|
|
35
|
+
| `reference/` | canonical API, plan schema, diagnostics, capabilities, registries, unit-token, take, and where-condition docs |
|
|
36
|
+
|
|
37
|
+
## 3. Update Rule
|
|
38
|
+
|
|
39
|
+
When code changes, update canonical source material and these public docs together. Do not let `docs/ai/` become a second public docs set.
|