Summary
Unreported generator bug (no open PR). skills/INDEX.md directory tree lists files as if they were directories, and CI -Check locks the wrong output in.
Reporter note: 先徵求作者方向,我會根據意見再開 PR。
Evidence
skills/scripts/extract-summaries.ps1 (~lines 93–95):
foreach ($r in $rows) {
[void]$sb.AppendLine(("skills/{0}/" -f ($r.Path -replace '\\', '/')))
}
$r.Path is the skill file path (e.g. api-security/SKILL.md), so generated skills/INDEX.md contains:
skills/api-security/SKILL.md/
skills/apk-reverse/SKILL.md/
...
instead of:
skills/api-security/
skills/apk-reverse/
...
CI runs extract-summaries.ps1 -Check (ci.yml), which compares INDEX.md to this same generator → always green, so the drift gate cannot catch the wrong tree.
verify-doc-links.py does not treat fenced tree text as links, so it also passes.
Impact
- Auto-generated navigation index is wrong for humans and agents.
- The “INDEX is generated, do not hand-edit” contract currently enforces incorrect output.
Proposed fix (please confirm)
- Emit directory form, e.g. module dir from
Split-Path -Parent $r.Path → skills/api-security/.
- Regenerate
skills/INDEX.md in the same PR.
- Keep
-Check semantics (CI still requires INDEX matches generator).
Questions for you:
- Should the tree list only top-level
skills/*/ dirs, or also nested modules (reverse-engineering/dsl-vm-reverse/)?
- Any preference on trailing slash / Markdown code fence style?
I will open a PR only after your preference on nested modules.
Scope exclusion
Summary
Unreported generator bug (no open PR).
skills/INDEX.mddirectory tree lists files as if they were directories, and CI-Checklocks the wrong output in.Reporter note: 先徵求作者方向,我會根據意見再開 PR。
Evidence
skills/scripts/extract-summaries.ps1(~lines 93–95):$r.Pathis the skill file path (e.g.api-security/SKILL.md), so generatedskills/INDEX.mdcontains:instead of:
CI runs
extract-summaries.ps1 -Check(ci.yml), which compares INDEX.md to this same generator → always green, so the drift gate cannot catch the wrong tree.verify-doc-links.pydoes not treat fenced tree text as links, so it also passes.Impact
Proposed fix (please confirm)
Split-Path -Parent $r.Path→skills/api-security/.skills/INDEX.mdin the same PR.-Checksemantics (CI still requires INDEX matches generator).Questions for you:
skills/*/dirs, or also nested modules (reverse-engineering/dsl-vm-reverse/)?I will open a PR only after your preference on nested modules.
Scope exclusion
mainalready has frontmatter for that module.