Skip to main content

section-doc-finalizer

Author phase-C FILE-LEVEL `index.md` and `complete.md` for ONE mainframe or IBM i (AS400) source from its per-section markdown set. LLM-driven. USE FOR: write IBM i or mainframe index.md, complete.md, file overview, program TOC, and phase-C per-file finalization. DO NOT USE FOR: per-section authoring, file-level diagrams, QA review, or portal build.

ソース情報

リポジトリ
microsoft/cobol-docs-pipeline-sample
ソースの最終更新活動
2026年7月16日 08:28
検出された SKILL.md の言語
英語
スター
1
フォーク
3

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

ファイルエクスプローラー
7 ファイル

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
section-doc-finalizer
description
Author phase-C FILE-LEVEL `index.md` and `complete.md` for ONE mainframe or IBM i (AS400) source from its per-section markdown set. LLM-driven. USE FOR: write IBM i or mainframe index.md, complete.md, file overview, program TOC, and phase-C per-file finalization. DO NOT USE FOR: per-section authoring, file-level diagrams, QA review, or portal build.
argument-hint
Source file path + optional --languages en,it. Writes docs/<lang>/<file>/index.md and docs/<lang>/<file>/complete.md per language. Default --languages en.
# Section Doc Finalizer (per-file, phase C) LLM-driven phase-C authoring skill. For ONE source file, produces the file-level `index.md` (navigable TOC + executive summary) and `complete.md` (single-file concatenation of every section) per requested language. EN is the source-of-truth; non-EN siblings are co-authored in the same LLM call. This is the **per-file finalizer scope** of the section-doc-writer family. The per-section [`section-doc-writer`](../section-doc-writer/SKILL.md) skill explicitly **forbids** authoring `index.md` / `complete.md`; that scope lives here. ## When to Use - Every per-section `.md` for the file has been authored and passed [`qa-reviewer`](../qa-reviewer/SKILL.md). - The user asks to "build the index", "produce complete.md", "finalize the program docs", "co-author IT index.md + complete.md", "write the landing page for DEMO100". Do **not** use this skill for: - Per-section markdown (`docs/<lang>/<file>/sections/*.md`) — owned by [`section-doc-writer`](../section-doc-writer/SKILL.md) per-section. - File-level overview `.mmd` diagrams — owned by [`diagram-renderer`](../diagram-renderer/SKILL.md). - Per-file QA review — owned by [`qa-reviewer`](../qa-reviewer/SKILL.md) per-file scope. - Portal aggregation across files — owned by phase N. ## Output Contract For file `<basename-with-ext>` and each language `<lang>` in `--languages`: ``` docs/<lang>/<basename-with-ext>/index.md docs/<lang>/<basename-with-ext>/complete.md ``` `index.md` MUST: - Open with `# <program_id or basename> — Functional Overview`. - Provide a `## Summary` (1–2 short paragraphs) and a `## Executive Summary` (3–6 paragraphs). - Provide a `## Sections` block listing every per-section file, grouped by division/section, with markdown links: `[A000-MAIN](sections/<sanitized>.md)`. - Provide a `## Call relationships` block with two evidence-backed tables: - `### Calls inside this program` from `facts_toc.internal_calls` (`PERFORM` and `GO TO` edges). - `### Calls between programs` from `facts_toc.inter_program_calls` (outbound and inbound COBOL, CICS, CL, and JCL execution edges). - Follow each non-empty table with an inline Mermaid `flowchart LR` generated from exactly the same normalized rows, so Markdown and portal consumers can see the graph without opening a separate artifact. - Show an explicit empty-state table row when either call collection is empty. - Embed the file-level overview diagrams as relative links to the `.mmd` files under `docs/_shared/<file>/diagrams/`. - Carry a `## Sources` block with `[^src-N]` footnotes pointing back to source line ranges (same citation style as per-section docs). `complete.md` MUST: - Be a deterministic concatenation of `index.md` followed by every `sections/*.md` in chunk-manifest order. - Inject a single `# Sections` H1 separator between the index body and the section bodies. - Re-base every per-section heading **down by one level** (H1 → H2, H2 → H3, …) so the document has exactly one top-level title. - Preserve the original `[^src-N]` footnote ids by namespacing them per section (e.g. `[^A000-MAIN-src-1]`) to avoid collisions. - Append a deterministic **`# Record types (TRK)`** catalog when the source emits SISBA tracciato records. A TRK record is a level-01 `facts.json` `data_records` entry named `REC-<3-digit code>-<file>` whose `<file>` suffix is a declared output file (this excludes working-storage flags such as `REC-103-CES-FLAG`). The catalog groups records by output file and links each to the embedded section anchor carrying its byte-level layout. This is the single point at which the tracciato catalog enters the pipeline so the phase-L technical-analysis writer — which reads `complete.md` only, never `functional-analysis.md` — can author its `trk-gestiti` section instead of stamping the not-applicable marker. The catalog is built by [scripts/assemble-complete.py](./scripts/assemble-complete.py), not the LLM. A companion JSON sidecar is emitted **only on EN** at `docs/_reviews/section-doc/<file>__index__inputs.json` capturing the bundle the LLM received (sections list, manifest hash, languages). ## Procedure 1. **Resolve inputs.** Required artifacts under `docs/_shared/<basename-with-ext>/`: - `chunk-manifest.json` — section ordering and division/section grouping. - `facts.json` — `program_id`, top-level paragraph/section list, `incoming_xref` summary for the executive summary. And under `docs/<lang>/<basename-with-ext>/sections/`: - At least one `*.md` per requested language. On any miss: exit `4` and tell the user to re-run the per-section step. 2. **Stale-input check.** Compare `chunk-manifest.json::sha256` with the on-disk source sha. If they differ, re-run phase A first. 3. **Assemble the prompt bundle.** Invoke [scripts/assemble-inputs.py](./scripts/assemble-inputs.py) — pure-deterministic packager. It loads the manifest, the facts TOC fields, and every per-section MD path + first-paragraph summary, and prints (or writes via `--out`) a single JSON object the LLM consumes: ```powershell python .github/skills/section-doc-finalizer/scripts/assemble-inputs.py ` --source repos/sample1/COBOL/DEMO100.CBL ` --languages en,it ` --out prompt-bundle.json ``` Flags: - `--source <path>` (required). - `--languages <comma-list>` — default `en`. EN is always first. - `--out <path>` — write to file (default: stdout). - `--profile <path>` — override profile.yaml. 4. **Author.** The `section-doc-finalizer` agent reads the bundle and writes `index.md` + `complete.md` per language. 5. **Validate mechanically.** Invoke [`qa-reviewer`](../qa-reviewer/SKILL.md) per-file scope on the produced documents. ## Bundle Schema ```jsonc { "bundle_version": "1.0", "source_path": "repos/sample1/COBOL/DEMO100.CBL", "source_kind": "cobol|cl|jcl|proc|copybook|bms", "program_id": "DEMO100", "manifest_sha": "<64-hex>", "languages": ["en", "it"], "toc": [ { "chunk_id": "DEMO100/procedure-division/MAIN-PROCESSING", "kind": "section", "name": "MAIN-PROCESSING", "parent_id": null, "start_line": 1547, "end_line": 1908, "section_md": { "en": "docs/en/DEMO100.CBL/sections/DEMO100__procedure-division__MAIN-PROCESSING.md", "it": "docs/it/DEMO100.CBL/sections/DEMO100__procedure-division__MAIN-PROCESSING.md" }, "summary_en": "First non-empty paragraph or Summary of the EN section MD (deterministic excerpt)." } /* one entry per chunk-manifest chunk, in manifest order */ ], "facts_toc": { "paragraphs": [/* facts.json top-level paragraphs list */], "incoming_xref":[/* facts.json incoming xref summary */], "calls": [/* facts.json outbound calls */], "internal_calls":[/* normalized PERFORM and GO TO rows */], "inter_program_calls":[/* normalized outbound and inbound program rows */] }, "diagrams_present": [ "docs/_shared/DEMO100.CBL/diagrams/call-graph.mmd", "docs/_shared/DEMO100.CBL/diagrams/inter-program-call-graph.mmd", "docs/_shared/DEMO100.CBL/diagrams/control-flow.mmd" ], "output_paths": { "en": { "index": "docs/en/DEMO100.CBL/index.md", "complete": "docs/en/DEMO100.CBL/complete.md" }, "it": { "index": "docs/it/DEMO100.CBL/index.md", "complete": "docs/it/DEMO100.CBL/complete.md" } }, "profile": { /* loaded profile.yaml */ } } ``` `summary_en` is a deterministic excerpt: the first non-heading, non-blank paragraph after the `## Summary` (or legacy `## TL;DR`) block of the EN section MD, truncated to 320 characters with a trailing ellipsis on overflow. ## Determinism Rules - Bundle packager is fully deterministic: toc iteration follows manifest order, language list is sorted with EN first, sha256 over canonical-JSON of the toc subset. - LLM authoring is non-deterministic; the **shape** (headings, ordering, Sources block, complete.md heading shift, footnote namespacing) is fixed. - Forbidden re-derivations: - Never re-sanitize chunk ids; always look up `chunks/index.json::chunks[].file`. - Never re-author per-section MDs from this skill. - Never load the full `facts.json` into the LLM bundle — only the `facts_toc` subset. ## Resources - [scripts/assemble-inputs.py](./scripts/assemble-inputs.py) — deterministic prompt-bundle packager. ## Common Pitfalls - **Authoring per-section content here.** This skill assembles + summarizes; it does NOT replace `section-doc-writer`. If a section MD is missing, fix it upstream first. - **Footnote collisions in complete.md.** Per-section footnote ids overlap by design (`[^src-1]` appears in every section). The complete.md MUST namespace them by section to keep Pandoc happy. - **Heading-level drift.** Forgetting to shift every per-section heading down by one in `complete.md` produces multiple H1s and breaks the portal TOC.
GitHubで見る