feat(docs): generate Section 5 from function comment headers

The man-page-style comment header above each function in functions/*.fish
becomes the SSOT for that function's documentation. Writing a new function
and documenting it are now the same act.

- manualtools.parse_functions() parses every header carrying a # CATEGORY;
  absence of one is the opt-in, keeping bundled-plugin and prompt internals
  out of the manual with no exclusion list to maintain.
- build-manual.py generates entries for both --concat and --site, with
  **Dependencies:** rendered as links and a **Used by:** reverse index
  computed in one pass. Cross-category links are the navigation win.
- docs/manual/05-functions/*.md reduced to frontmatter-only stubs. Every
  intro measured zero words, so the category files were pure entry
  containers; ordering, titles, and helpKeywords routing are untouched.
- _first_sentence() unwraps the leading hard-wrapped paragraph and skips
  the whole Synopsis block, not just its label line. Site cards no longer
  truncate mid-clause or show a synopsis as their description.

Verification, per the design spec:
- test_concat_roundtrips_original scoped to sections 0-4 and 6-11. It
  guarded a format migration; this is a content migration.
- replaced by structural checks: one entry per categorised function, the
  required sections present, every category resolving to a stub with no
  stub empty, and every declared dependency resolving to a real function
  or a type -q-guarded binary.
- public functions lacking # CATEGORY warn rather than fail, so a new
  user-facing function going undocumented stays visible in CI.

24/24 checks pass. 94 entries generated from 94 parsed headers.

Also drops a stale claim from open-url's NOTES: config-help --html calls
xdg-open directly and has never called open-url.
This commit is contained in:
2026-07-26 04:12:48 -04:00
parent 00f70e8558
commit a65e05b661
24 changed files with 1594 additions and 1601 deletions
+3
View File
@@ -4,6 +4,9 @@
# CATEGORY
# 12-ai-and-developer-tools
#
# DEPENDENCIES
# agents-init
#
# SYNOPSIS
# agy [ARGS...]
#
+3
View File
@@ -4,6 +4,9 @@
# CATEGORY
# 12-ai-and-developer-tools
#
# DEPENDENCIES
# agents-init
#
# SYNOPSIS
# claude [ARGS...]
#
+3
View File
@@ -4,6 +4,9 @@
# CATEGORY
# 14-miscellaneous
#
# DEPENDENCIES
# config-settings
#
# SYNOPSIS
# config-toggle [args...]
#
+1 -2
View File
@@ -13,8 +13,7 @@
# main/master automatically if the current branch is orphaned.
#
# ARGUMENTS
# -h, --help Show help message
# -f, --force Force-delete unmerged branches too
# -h, --help Show help message
# -f, --force Force-delete unmerged orphaned branches (git branch -D)
#
# RETURNS
-2
View File
@@ -39,8 +39,6 @@
# open-url -v https://fish-config-docs.pages.dev/
#
# NOTES
# Used internally by config-help --html.
#
# Typo abbreviation: url-open (expands to open-url on space/enter).
function open-url --description 'Open a URL in the best available web browser'
argparse h/help s/silent v/verbose -- $argv
+3
View File
@@ -4,6 +4,9 @@
# CATEGORY
# 14-miscellaneous
#
# DEPENDENCIES
# open-url
#
# SYNOPSIS
# repo-open [-p|--print] [-r|--root]
# repo-open --help