Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
A direct command skips the review prompt. Inspect the source before running it.
If status is success or partial: inject content verbatim.
If status is partial and content is synthesized, inject the content with a note indicating it was auto-generated.
Example: "This section was auto-generated based on available data."
If status is missing or content is empty: keep section heading and inject a bullet-prefixed fallback line. Default fallback: - No information was delivered for this section.
Components-specific fallbacks (mandatory): when injecting missing subsections under ## Components, emit targeted bullet sentences instead of the generic fallback. Use these exact sentences:
Callable Subprocesses missing -> - For this market extension we do not provide any callable subprocesses.
Dialog Components missing -> - For this market extension we do not provide any dialog components.
Rest Clients missing -> - For this market extension we do not provide any rest clients.
Web Services missing -> - For this market extension we do not provide any web services.
Maven Artifacts missing -> - For this market extension we do not provide any maven artifacts.
Rest Clients acceptance gate (mandatory): evaluate ### Rest Clients only from restClientsSection (extracted from config/rest-clients.yaml). Do not treat openApiSection as Rest Clients evidence.
Web Services acceptance gate (mandatory): evaluate ### Web Services only from webServicesSection (extracted from config/webservice-clients.yaml). Do not treat openApiSection as Web Services evidence.
Validate fragment quality before injection: reject pseudo-filled content (e.g., generic placeholders without extracted structure) and normalize to missing with the default fallback.
If requiredSubsections is provided, verify each subsection appears in content; for missing entries, append explicit placeholder lines under the correct section.
If preserveMode=verbatim, do not rewrap, renumber, or normalize markdown blocks.
If preserveMode!=verbatim, normalize ordered-list sequence before injection:
Detect broken list numbering (for example repeated top-level 1. items).
Renumber sequentially by indentation level so top-level steps render as 1., 2., 3. and nested steps stay nested.
Do not alter fenced code blocks, inline code, links, or image paths.
Resolve heading aliases from styleProfile and inject into the repository-native heading without changing the fragment content.
Demo section: Inject demoIntroSection directly under ## Demo. Always render heading ### Demo Workflows after demoIntroSection, then inject demoWorkflows fragment content (or fallback if missing).
Roles placement: Insert as bullet point at start of Setup section (before steps): - **Roles:** ...
OpenAPI placement: Insert as bullet point WITHIN Setup section (not separate ## Components section): - **OpenAPI:** Spec URL
If openApiSection is missing or empty, render exactly: - **OpenAPI:** No information was delivered for this section.
Canonical Rest Clients mapping (mandatory): render ### Rest Clients from restClientsSection content (extracted from config/rest-clients.yaml). This mapping is canonical and must be applied consistently across models.
Canonical Web Services mapping (mandatory): render ### Web Services from webServicesSection content (extracted from config/webservice-clients.yaml). This mapping is canonical and must be applied consistently across models.
Variables placement: Inject under ## Setup as ### Variables subsection (not standalone section) unless style profile explicitly requests standalone.
Image placement: If an image fragment is present with standalone=false, place image snippets in the target sections indicated by fragment placement hints (for example intro/demo/setup). If productImageSection status is missing or empty, do NOT create a standalone ## Images section. Instead, skip image section entirely. All images must be embedded within their related content sections (Setup, Demo, etc.).
Image embedding algorithm (required, step-aware for per-workflow demo images):
Algorithm Overview:
For each image in :
Example:
If an image has placement: demo:workflow-Document Splitting, assembler must find the ##### Document Splitting workflow block in the Demo section and insert the image after the numbered steps for that workflow.
If an image has placement: demo:workflow-Document Splitting:step-2, assembler must insert the image directly below step 2. in that workflow.
Critical image rule: Do not create a standalone ## Images section under any circumstances unless the template or fragment explicitly sets standalone=true. When productImageSection is missing/empty, simply omit the entire Images section from output — do not insert a fallback placeholder like "No images detected".
Components hierarchy rule: Always render ## Components and place ### Callable Subprocesses, ### Dialog Components, ### Rest Clients, ### Web Services, and ### Maven Artifacts beneath it.
Never render ## Callable Subprocesses as top-level heading.
Variables missing rule: Under ### Variables, if variablesSection is missing/empty, do not inject fallback text.
Never omit a section heading from the template. The assembler MUST always render heading ### Demo Workflows after demoIntroSection, even if the demoWorkflows fragment is missing or empty.
Remove unnecessary HTML comments (e.g., <!-- status: ... -->) from fragment content before injection. Never include timestamps, skill names, or other metadata in the final output.
Preserve the exact fenced variable block containing @variables.yaml@ if present.
Apply styleProfile when present to keep repository-native markdown conventions (ordered list style, OpenAPI style, callable-sub layout).
6.1 Prefer repository-native section placement when style profile indicates it (e.g., variables inside setup).
Write assembled result to target path.
Use full-file overwrite semantics (truncate then write complete assembled content).
Do not append to existing README content.
After write, validate duplicate safety: exactly one full-document start (# ...) should exist. If duplicate full-document starts are found, rewrite the file once with the same assembled content.
Acceptance validation: restClientsSection and webServicesSection must be validated independently from openApiSection; OpenAPI setup evidence does not satisfy Components coverage.
Treat content as pseudo-filled if it only states availability (e.g., "present in file", "see process file") without extracted details required by that section.
Pseudo-filled content must be normalized to missing and rendered with explicit fallback text.
Normalization must preserve section headings and template order.
Roles and OpenAPI must be presented as inline bullet points in Setup, NOT as separate sections.
Quality criteria
No scanning in this step.
No paraphrasing or reformatting of fragments.
Heading order follows the README Template Format in output-format.md strictly. The assembler MUST always render sections in this order, regardless of fragment extraction order:
Product description (productDescriptionSection)
Key features (keyFeatures)
Demo (demoIntroSection, then heading ### Demo Workflows, then demoWorkflows)
Components (### Callable Subprocesses from callableSubSection, ### Dialog Components from formComponentSection, ### Rest Clients from restClientsSection, ### Web Services from webServicesSection, ### Maven Artifacts from mavenArtifactSection)
If any fragment is missing, inject the fallback placeholder at the correct position.
Must keep all template headings even when fragment data is missing.
Must never read from or mutate approved README.md during assembly.
Must report subsection coverage gaps before writing final output.
Must not pass through ambiguous placeholder prose as successful extraction output.
Route image to target section based on placement prefix
For demo workflow images, find and embed image at exact step location
Placement Types & Embedding Logic:
Type 1: demo:workflow-<WorkflowName>:step-<N> (highest priority)
Goal: Insert image directly below numbered step N in specific workflow
Algorithm:
1. Parse placement → WorkflowName="Document Splitting", StepNumber=2
2. Scan Demo section for workflow heading: ##### Document Splitting
3. Within that workflow block, find step 2 line (e.g., "2. Upload or select a document...")
4. Insert image after step 2:
- Add blank line after step 2
- Insert image snippet: ""
- Add blank line after image
5. Adjust indentation to match workflow step indentation (3 spaces)
Example input (GENERIC - any workflow):
```markdown
##### Document Splitting
1. Launch the Document Splitting demo from the demo menu.
2. Upload or select a document from the file browser.
3. Configure splitting parameters (page range, orientation).
4. Review the split result and download the files.
Example output (image inserted after step 2):
##### Document Splitting1. Launch the Document Splitting demo from the demo menu.
2. Upload or select a document from the file browser.

3. Configure splitting parameters (page range, orientation).
4. Review the split result and download the files.
Note: This applies to ANY workflow - replace "Document Splitting" with your workflow name
**Type 2: `demo:workflow-<WorkflowName>`** (workflow-level, no step)
Goal: Insert image after all workflow steps (end of workflow block)
Algorithm:
Parse placement → WorkflowName="Data Validation"
Scan Demo section for workflow heading: ##### Data Validation
Find all numbered steps (1., 2., 3., ...)
Insert image after last step:
Add blank line
Insert image snippet
Add blank line
Example (works for any workflow):
Data Validation
Launch the Data Validation workflow.
Load your dataset or connect to data source.
Configure validation rules and thresholds.
Execute validation and review results.
**Type 3: `intro`**
Goal: Insert image after first paragraph of product description
Algorithm:
Locate productDescriptionSection content
Find first paragraph (text before first blank line)
Insert image after first paragraph:
Blank line, image, blank line
**Type 4: `demo`** (fallback without workflow match)
Goal: Insert image under ## Demo before ### Demo Workflows
Algorithm:
1. Locate ## Demo section heading
2. Find ### Demo Workflows subheading
3. Insert image between them
**Type 5: `setup`**
Goal: Insert image inside ## Setup near related step or config
**Workflow Name Matching (Robust & Fuzzy - GENERIC):**
Step 2: Compare normalized forms
- Exact match: if normalized_placement == normalized_heading → use it
- Substring match: if one is substring of other → use it
- Token match: if all tokens from one appear in other → use it
- Score-based: if multiple matches, pick highest scoring match
Step 3: If no match found
- Log warning: "Image placement 'demo:workflow-X' did not match any heading"
- Fallback: insert image under ## Demo before ### Demo Workflows
WORKS FOR ANY WORKFLOW - Examples:
- "Document Splitting" ↔ "DocumentSplitting.png"
- "Data Validation" ↔ "DataValidation.png"
- "Invoice Processing" ↔ "InvoiceProcessing.png"
**Step Number Extraction & Matching (GENERIC):**
Goal: Find exact line number in workflow to insert image
Algorithm:
1. Extract all numbered lines from workflow block (pattern: "1. ", "2. ", "3. ", etc.)
2. Match pattern: "^N. " (e.g., "2. " for step 2)
3. Find insertion point:
- Start from step line (e.g., "2. Select configuration options...")
- Scan forward until next numbered line (e.g., "3. Review...")
- OR end of workflow block
4. Insert image at that position with blank line before & after
Works for ANY workflow - Examples:
- Step 1: "1. Launch the demo..."
- Step 2: "2. Configure settings..."
- Step 3: "3. Execute the workflow..."
**Pseudo-code for step insertion (GENERIC - works for any workflow):**
```javascript
function insertImageAfterStep(workflowBlock, stepNum, imageSnippet) {
lines = workflowBlock.split('\n')
// Find step N line (pattern: "N. " at start of line)
for (i = 0; i < lines.length; i++) {
if (lines[i].match(new RegExp('^' + stepNum + '\\. '))) {
stepLineIndex = i
break
}
}
if (stepLineIndex == null) return null // step not found
// Find insertion point (after step content, before step N+1)
insertionIndex = stepLineIndex + 1
for (i = stepLineIndex + 1; i < lines.length; i++) {
if (lines[i].match(new RegExp('^' + (stepNum + 1) + '\\. '))) {
insertionIndex = i
break
}
}
// Insert image with blank lines
lines.splice(insertionIndex, 0, '', imageSnippet, '')
return lines.join('\n')
}
// WORKS FOR ANY PROJECT - example calls:
// - insertImageAfterStep(docSplittingBlock, 2, "")
// - insertImageAfterStep(invoiceBlock, 1, "")
// - insertImageAfterStep(validationBlock, 3, "")
Indentation Rules:
- Workflow step line: "1. ..." (0 indent)
- Image after step: "![...]()" (no forced indent)
- Blank line: "" (empty)
Example indentation:
1. Step one
2. Step two

3. Step three
Complete Example (Full Flow - GENERIC):
Input Fragment:
{
"section": "productImageSection",
"images": [
{
"path": "images/DocumentSplitting.png",
"placement": "demo:workflow-Document Splitting:step-2"
}
]
}
README Content (before):
### Demo Workflows
#### my-demo-module (any demo module)
##### Document Splitting
1. Launch the Document Splitting demo
2. Upload a document or select from library
3. Configure splitting parameters
4. Review and download results
README Content (after):
### Demo Workflows
#### my-demo-module
##### Document Splitting
1. Launch the Document Splitting demo
2. Upload a document or select from library

3. Configure splitting parameters
4. Review and download results
WORKS FOR ANY PROJECT - Just replace:
- "Document Splitting" with your workflow name
- "DocumentSplitting.png" with your image filename
- Step 2 with your target step number
Error Handling:
- If step number not found: log warning, insert after last step instead
- If workflow not found: log warning, insert under ## Demo fallback
- If image path invalid: skip image, log error
- If placement malformed: default to "demo" placement
Use images[] per-image placement hints when available. For each image in order:
If placement is demo:workflow-<WorkflowName>, find the workflow block in the Demo section with heading matching <WorkflowName> and insert the image snippet immediately after the step list for that workflow.
If placement is demo:workflow-<WorkflowName>:step-<N>, find the workflow block and insert the image snippet directly below numbered step N (same indentation level as workflow step attachments).
Matching algorithm (robust): Before attempting an exact match, normalize both the <WorkflowName> from the placement value and each demo workflow heading using the same rules: lowercase, remove punctuation (quotes, parentheses), collapse repeated whitespace, replace common punctuation with spaces, and trim. Compare normalized forms for equality; if no exact equality, then try substring match of token sequences (longest-first). This relaxed matching makes placements resilient to minor differences in punctuation, quoting, or diacritics.
If placement is intro, insert after the first paragraph of productDescriptionSection.
If placement is demo, insert under ## Demo before ### Demo Workflows (or close to the Demo section if no workflows exist).
If placement is setup, insert within ## Setup near the related step or at top of ### Variables if the image documents configuration.
If no matching heading is found after relaxed matching, fall back to the nearest parent section (productDescriptionSection, Demo, Setup). When falling back from demo:workflow-..., prefer inserting under ## Demo before ### Demo Workflows.
Insert the image snippet on a separate indented block: blank line, image line, blank line. Preserve the snippet exactly as provided by the fragment.
If multiple images target the same insertion point, append them in discovery order.
If standalone=true, create ## Images and place any images without explicit placements there; otherwise do not create ## Images.
Do not alter image paths or alt-text. Do not add captions unless the fragment includes them.
Before insertion, validate image path safety/resolvability from target README. If path is malformed, absolute, traversal-based (..), or unresolved, skip insertion of that image snippet.