selfdoc 0.4.0__tar.gz → 0.4.2__tar.gz

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.
Files changed (130) hide show
  1. {selfdoc-0.4.0/.rlsbl/bases → selfdoc-0.4.2}/.github/workflows/ci.yml +2 -1
  2. {selfdoc-0.4.0 → selfdoc-0.4.2}/.gitignore +6 -0
  3. {selfdoc-0.4.0 → selfdoc-0.4.2/.rlsbl/bases}/.github/workflows/ci.yml +2 -1
  4. {selfdoc-0.4.0 → selfdoc-0.4.2}/.rlsbl/bases/.gitignore +1 -0
  5. selfdoc-0.4.2/.rlsbl/bases/.rlsbl/changes/unreleased.jsonl +0 -0
  6. selfdoc-0.4.2/.rlsbl/bases/.rlsbl/hooks/pre-checks.sh +5 -0
  7. selfdoc-0.4.2/.rlsbl/bases/.rlsbl/hooks/pre-release.sh +8 -0
  8. selfdoc-0.4.2/.rlsbl/bases/.rlsbl/lint/go.toml +17 -0
  9. selfdoc-0.4.2/.rlsbl/bases/.rlsbl/lint/npm.toml +19 -0
  10. selfdoc-0.4.2/.rlsbl/bases/.rlsbl/lint/python.toml +25 -0
  11. {selfdoc-0.4.0 → selfdoc-0.4.2}/.rlsbl/bases/CLAUDE.md +1 -1
  12. selfdoc-0.4.2/.rlsbl/changes/.validated +1 -0
  13. selfdoc-0.4.2/.rlsbl/changes/0.1.0.jsonl +10 -0
  14. selfdoc-0.4.2/.rlsbl/changes/0.1.0.md +13 -0
  15. selfdoc-0.4.2/.rlsbl/changes/0.2.0.jsonl +12 -0
  16. selfdoc-0.4.2/.rlsbl/changes/0.2.0.md +15 -0
  17. selfdoc-0.4.2/.rlsbl/changes/0.3.0.jsonl +54 -0
  18. selfdoc-0.4.2/.rlsbl/changes/0.3.0.md +57 -0
  19. selfdoc-0.4.2/.rlsbl/changes/0.3.1.jsonl +2 -0
  20. selfdoc-0.4.2/.rlsbl/changes/0.3.1.md +5 -0
  21. selfdoc-0.4.2/.rlsbl/changes/0.4.0.jsonl +69 -0
  22. selfdoc-0.4.2/.rlsbl/changes/0.4.0.md +73 -0
  23. selfdoc-0.4.2/.rlsbl/changes/0.4.1.jsonl +2 -0
  24. selfdoc-0.4.2/.rlsbl/changes/0.4.1.md +3 -0
  25. selfdoc-0.4.2/.rlsbl/changes/0.4.2.jsonl +7 -0
  26. selfdoc-0.4.2/.rlsbl/changes/0.4.2.md +5 -0
  27. selfdoc-0.4.2/.rlsbl/changes/unreleased.jsonl +0 -0
  28. selfdoc-0.4.2/.rlsbl/config.json +7 -0
  29. selfdoc-0.4.2/.rlsbl/hashes.json +14 -0
  30. selfdoc-0.4.2/.rlsbl/hooks/pre-checks.sh +5 -0
  31. {selfdoc-0.4.0 → selfdoc-0.4.2}/.rlsbl/hooks/pre-release.sh +0 -4
  32. selfdoc-0.4.2/.rlsbl/lint/go.toml +17 -0
  33. selfdoc-0.4.2/.rlsbl/lint/npm.toml +19 -0
  34. selfdoc-0.4.2/.rlsbl/lint/python.toml +25 -0
  35. selfdoc-0.4.2/.rlsbl/version +1 -0
  36. selfdoc-0.4.2/.selfdoc/hashes/hashes.json +6 -0
  37. {selfdoc-0.4.0 → selfdoc-0.4.2}/CHANGELOG.md +57 -68
  38. {selfdoc-0.4.0 → selfdoc-0.4.2}/CLAUDE.md +1 -1
  39. {selfdoc-0.4.0 → selfdoc-0.4.2}/PKG-INFO +1 -1
  40. {selfdoc-0.4.0 → selfdoc-0.4.2}/docs/index.md +4 -0
  41. selfdoc-0.4.2/package-lock.json +19 -0
  42. {selfdoc-0.4.0 → selfdoc-0.4.2}/package.json +1 -1
  43. {selfdoc-0.4.0 → selfdoc-0.4.2}/pyproject.toml +1 -1
  44. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/git.py +19 -2
  45. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_git.py +37 -9
  46. selfdoc-0.4.2/todo/generate-claude-readme.md +90 -0
  47. selfdoc-0.4.0/.rlsbl/bases/.rlsbl/hooks/pre-release.sh +0 -31
  48. selfdoc-0.4.0/.rlsbl/hashes.json +0 -8
  49. selfdoc-0.4.0/.rlsbl/version +0 -1
  50. selfdoc-0.4.0/.selfdoc/hashes/hashes.json +0 -1
  51. {selfdoc-0.4.0 → selfdoc-0.4.2}/.claude/settings.json +0 -0
  52. {selfdoc-0.4.0 → selfdoc-0.4.2}/.github/workflows/publish.yml +0 -0
  53. {selfdoc-0.4.0 → selfdoc-0.4.2}/.rlsbl/bases/.claude/settings.json +0 -0
  54. {selfdoc-0.4.0 → selfdoc-0.4.2}/.rlsbl/bases/.github/workflows/publish.yml +0 -0
  55. {selfdoc-0.4.0 → selfdoc-0.4.2}/.rlsbl/bases/.rlsbl/hooks/post-release.sh +0 -0
  56. {selfdoc-0.4.0 → selfdoc-0.4.2}/.rlsbl/hooks/post-release.sh +0 -0
  57. {selfdoc-0.4.0 → selfdoc-0.4.2}/LICENSE +0 -0
  58. {selfdoc-0.4.0 → selfdoc-0.4.2}/README.md +0 -0
  59. {selfdoc-0.4.0 → selfdoc-0.4.2}/bin/cli.js +0 -0
  60. {selfdoc-0.4.0 → selfdoc-0.4.2}/demo/index.html +0 -0
  61. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/__init__.py +0 -0
  62. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/__main__.py +0 -0
  63. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/build.py +0 -0
  64. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/catalog.py +0 -0
  65. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/check.py +0 -0
  66. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/cli.py +0 -0
  67. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/config.py +0 -0
  68. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/content.py +0 -0
  69. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/deploy.py +0 -0
  70. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/directives.py +0 -0
  71. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/extractors/__init__.py +0 -0
  72. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/extractors/base.py +0 -0
  73. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/extractors/go.py +0 -0
  74. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/extractors/protocol.py +0 -0
  75. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/extractors/python.py +0 -0
  76. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/extractors/typescript.py +0 -0
  77. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/gen.py +0 -0
  78. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/gendata.py +0 -0
  79. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/html.py +0 -0
  80. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/resolver.py +0 -0
  81. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/staleness.py +0 -0
  82. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/strictcli_support.py +0 -0
  83. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/themes/__init__.py +0 -0
  84. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/themes/clean.css +0 -0
  85. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/themes/clean.json +0 -0
  86. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/themes/minimal.css +0 -0
  87. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/themes/minimal.json +0 -0
  88. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc/tokenizer.py +0 -0
  89. {selfdoc-0.4.0 → selfdoc-0.4.2}/selfdoc.json +0 -0
  90. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_build.py +0 -0
  91. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_catalog.py +0 -0
  92. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_check.py +0 -0
  93. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_cli.py +0 -0
  94. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_config.py +0 -0
  95. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_content.py +0 -0
  96. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_contrast.py +0 -0
  97. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_custom_directives.py +0 -0
  98. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_demo_panel.py +0 -0
  99. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_directives.py +0 -0
  100. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_extractors_protocol.py +0 -0
  101. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_gen.py +0 -0
  102. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_gendata.py +0 -0
  103. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_go_extractor.py +0 -0
  104. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_h1.py +0 -0
  105. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_python_extractor.py +0 -0
  106. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_search.py +0 -0
  107. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_staleness.py +0 -0
  108. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_strictcli_support.py +0 -0
  109. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_token_migration.py +0 -0
  110. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_tokenizer.py +0 -0
  111. {selfdoc-0.4.0 → selfdoc-0.4.2}/tests/test_ts_extractor.py +0 -0
  112. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/.done/auto-commit-hashes.md +0 -0
  113. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/.done/auto-generated-glossary.md +0 -0
  114. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/.done/auto-generation-gaps.md +0 -0
  115. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/.done/changelog-page.md +0 -0
  116. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/.done/coverage-go-typescript.md +0 -0
  117. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/.done/cross-page-term-linking.md +0 -0
  118. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/.done/lint-ignores-code-blocks.md +0 -0
  119. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/.done/reading-progress.md +0 -0
  120. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/.done/seo-geo-audit.md +0 -0
  121. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/.done/seo-linting-gaps.md +0 -0
  122. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/.done/sticky-table-column.md +0 -0
  123. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/.done/styling-and-release.md +0 -0
  124. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/atom-feed-filtering.md +0 -0
  125. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/brotli-dependency.md +0 -0
  126. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/css-redesign.md +0 -0
  127. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/gen-cli-descriptions.md +0 -0
  128. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/glossary-config-opt-in.md +0 -0
  129. {selfdoc-0.4.0 → selfdoc-0.4.2}/todo/sticky-column-striped-rows.md +0 -0
  130. {selfdoc-0.4.0 → selfdoc-0.4.2}/uv.lock +0 -0
@@ -11,12 +11,13 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  strategy:
13
13
  matrix:
14
+ # engines.node: >= 18
14
15
  node-version: [20, 22, 24]
15
16
  steps:
16
17
  - uses: actions/checkout@v6
17
18
  - uses: actions/setup-node@v6
18
19
  with:
19
20
  node-version: ${{ matrix.node-version }}
20
- - run: node -e "require('./package.json')"
21
+ - run: npm ci
21
22
  - run: npm test --if-present
22
23
  - run: npm audit --audit-level=moderate || true
@@ -31,4 +31,10 @@ docs/_build/
31
31
  .wrangler/
32
32
 
33
33
  # rlsbl
34
+ .rlsbl-notes-*.tmp
34
35
  .rlsbl/lock
36
+ .credentials.json
37
+ .*-cache.json
38
+ .env
39
+ .env.local
40
+ *.local-only
@@ -11,12 +11,13 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  strategy:
13
13
  matrix:
14
+ # engines.node: >= 18
14
15
  node-version: [20, 22, 24]
15
16
  steps:
16
17
  - uses: actions/checkout@v6
17
18
  - uses: actions/setup-node@v6
18
19
  with:
19
20
  node-version: ${{ matrix.node-version }}
20
- - run: node -e "require('./package.json')"
21
+ - run: npm ci
21
22
  - run: npm test --if-present
22
23
  - run: npm audit --audit-level=moderate || true
@@ -7,6 +7,7 @@ coverage/
7
7
  dist/
8
8
  *.egg-info/
9
9
  .rlsbl-notes-*.tmp
10
+ .rlsbl/lock
10
11
  .credentials.json
11
12
  .*-cache.json
12
13
  .env
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ # This hook runs BEFORE built-in pre-release checks (tests, lint).
4
+ # Use it for setup tasks: starting services, setting env vars, etc.
5
+ # Built-in checks run after this hook. Custom validation goes in pre-release.sh.
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ # Project-specific pre-release checks.
4
+ # Built-in checks (tests, lint) run automatically before this hook.
5
+ # Add custom validation here, e.g.:
6
+ # - Check for uncommitted documentation
7
+ # - Verify external service connectivity
8
+ # - Run integration tests not covered by the test suite
@@ -0,0 +1,17 @@
1
+ [forbidden-imports]
2
+ modules = [
3
+ "net/http",
4
+ "github.com/spf13/cobra",
5
+ "github.com/urfave/cli",
6
+ ]
7
+
8
+ [stdout]
9
+ enabled = true
10
+ ignore = []
11
+
12
+ [entry-point]
13
+ enabled = true
14
+ ignore = []
15
+
16
+ [files]
17
+ exclude = []
@@ -0,0 +1,19 @@
1
+ [forbidden-imports]
2
+ modules = [
3
+ "express",
4
+ "koa",
5
+ "hono",
6
+ "commander",
7
+ "yargs",
8
+ ]
9
+
10
+ [stdout]
11
+ enabled = true
12
+ ignore = []
13
+
14
+ [entry-point]
15
+ enabled = true
16
+ ignore = []
17
+
18
+ [files]
19
+ exclude = []
@@ -0,0 +1,25 @@
1
+ [forbidden-imports]
2
+ modules = [
3
+ "argparse",
4
+ "click",
5
+ "typer",
6
+ "flask",
7
+ "fastapi",
8
+ "django",
9
+ "uvicorn",
10
+ "granian",
11
+ "starlette",
12
+ "tornado",
13
+ "bottle",
14
+ ]
15
+
16
+ [stdout]
17
+ enabled = true
18
+ ignore = []
19
+
20
+ [entry-point]
21
+ enabled = true
22
+ ignore = []
23
+
24
+ [files]
25
+ exclude = []
@@ -1,4 +1,4 @@
1
- # selfdoc
1
+ # selfdocumenting
2
2
 
3
3
  ## Release workflow
4
4
 
@@ -0,0 +1 @@
1
+ 13feaaa6579b99403184ebbc22dae7a207a0075d
@@ -0,0 +1,10 @@
1
+ {"commits":["ae78b3ce28843daf5b21a09e48197bdf5a0f1137","50e62733eff586502d60784393a038c4c2e6ec91","095232b91ea56882280cfa42abfdd9e7845b2fec","20d08b4b21489ffc83f794c9592a98bd92d86b2d"],"user_facing":true,"description":"Python, Go, TypeScript/JS extractors","type":"feature"}
2
+ {"commits":["9ea6bd5d7b26693270fc38b8d0d905a97fe1e5eb","500a53298b83845aa1d0fa6b741d26755c2f87a6"],"user_facing":true,"description":"Custom directive plugins","type":"feature"}
3
+ {"commits":["05a4982f26d3ccecbae55a0b0c6c0da941f544a5"],"user_facing":true,"description":"`selfdoc check` coverage analysis","type":"feature"}
4
+ {"commits":["58c55ffd14aa6d93d0cf8a98e3d401670c3ea44c"],"user_facing":true,"description":"HTML generation with responsive CSS","type":"feature"}
5
+ {"commits":["a1e1a3365a856919f0eac5ac4fca06397fddb98c"],"user_facing":true,"description":"Deploy to Cloudflare Pages + GitHub Pages","type":"feature"}
6
+ {"commits":["c6c4ddb2335b0e90e73c3b3ad092406c334fae09"],"user_facing":true,"description":"SSE live reload in `selfdoc serve`","type":"feature"}
7
+ {"commits":["61b923bc745ccf0faafb1abc23bb83d1b92f2622"],"user_facing":true,"description":"Code-aware static site generator","type":"feature"}
8
+ {"commits":["58eba6c9092e6eb616a2a9a1df84a2167839c2eb"],"user_facing":true,"description":"`:::directive` syntax for embedding code-extracted content","type":"feature"}
9
+ {"commits":["d59d5ab9d9e18c6093e1286ab44930c237f4bdb8"],"user_facing":true,"description":"5 built-in directives (module, schema, test, cli, config)","type":"feature"}
10
+ {"commits":["172f6ed58ec73c9c145490edb13db415d05292a0","e58044dc796c0c199f2aa82d68c2bfbe7478af3a","970066c9f8c175dc9b36913278aaf7b3ab33f237","24894007b48e2e5861046e18948bd42444138d1a","baad8c307fbacaaaa31c418131a9f132bfaa5cd5","cef97f0284ef63a17e2ea50ff59f39f88d7702ed","9b26a61ff20bdd1399bdd7ae0ad5c181387f12bf","3c704c6d56be3210370a47c6be1e9cac47ff74dd","e044bb929975f616b2dfa4e401d11eccbdc4c1c1","86b7b7fa1fe55cd8d4b492ef935c8c7bee41691a"],"user_facing":false}
@@ -0,0 +1,13 @@
1
+ ## 0.1.0
2
+
3
+ ### Features
4
+
5
+ - Python, Go, TypeScript/JS extractors
6
+ - Custom directive plugins
7
+ - `selfdoc check` coverage analysis
8
+ - HTML generation with responsive CSS
9
+ - Deploy to Cloudflare Pages + GitHub Pages
10
+ - SSE live reload in `selfdoc serve`
11
+ - Code-aware static site generator
12
+ - `:::directive` syntax for embedding code-extracted content
13
+ - 5 built-in directives (module, schema, test, cli, config)
@@ -0,0 +1,12 @@
1
+ {"commits":["1c00b760d0cfae84190f75f6199176f1010230e6"],"user_facing":true,"description":"Theme system with per-project theming via `\"theme\"` in selfdoc.json and optional `docs/custom.css` overrides","type":"feature"}
2
+ {"commits":["8a89603db915e69a2f26d3ec7958cb37dfa92a87"],"user_facing":true,"description":"Syntax highlighting via highlight.js (light + dark themes)","type":"feature"}
3
+ {"commits":["e700d39fb9287d7a2143d66adae12fdfab9dfc62"],"user_facing":true,"description":"Google-style docstring formatting (Args, Returns, Raises rendered as structured lists)","type":"feature"}
4
+ {"commits":["d9f92cbd4a073993fd29af43c2794d1f790cb3a0"],"user_facing":true,"description":"Heading hierarchy: directive expansions use h2/h3/h4 instead of injecting h1","type":"feature"}
5
+ {"commits":["444f28b7d303533e143dcc18fc4480ffa2c9c3d7"],"user_facing":true,"description":"Module name mangling (`selfdoc.extractorsthon` bug)","type":"feature"}
6
+ {"commits":["e645dadb18607b945dbd5a7d570144a3f27f531c"],"user_facing":true,"description":"Nested `_build/_build` recursion when rebuilding","type":"feature"}
7
+ {"commits":["b1ecbbb8f94c4400565ec28f9f62595c203753f1","51d8335f45dd725bd07a08cc0c1ccf70b46a6f69"],"user_facing":true,"description":"Deploy supports `CF_ACCOUNT_ID` and `CF_PAGES_API_TOKEN` env var names (remapped to wrangler's expected names)","type":"feature"}
8
+ {"commits":["ea56606d8051baf6d2c38f6c919dfb0acf1a6d07"],"user_facing":true,"description":"Minimal theme: clean typography, dark mode, high-contrast, and reduced-motion variants (all auto-detected from OS preferences)","type":"feature"}
9
+ {"commits":["b518d0637cedefb1d9934a98133af1a7f7f21c27"],"user_facing":true,"description":"Top bar with project name and version badge","type":"feature"}
10
+ {"commits":["319971e2603ec16de81aae050b03ebd0055cc952"],"user_facing":true,"description":"Heading anchor links for deep linking","type":"feature"}
11
+ {"commits":["fc225c09e14f00e62ffc60f36cc2a00177ce5b3d"],"user_facing":true,"description":"CSS extracted to cacheable `style.css` instead of inlined per page","type":"feature"}
12
+ {"commits":["97eb815243ea150fcf086992ebe58aec04dc3841"],"user_facing":false}
@@ -0,0 +1,15 @@
1
+ ## 0.2.0
2
+
3
+ ### Features
4
+
5
+ - Theme system with per-project theming via `"theme"` in selfdoc.json and optional `docs/custom.css` overrides
6
+ - Syntax highlighting via highlight.js (light + dark themes)
7
+ - Google-style docstring formatting (Args, Returns, Raises rendered as structured lists)
8
+ - Heading hierarchy: directive expansions use h2/h3/h4 instead of injecting h1
9
+ - Module name mangling (`selfdoc.extractorsthon` bug)
10
+ - Nested `_build/_build` recursion when rebuilding
11
+ - Deploy supports `CF_ACCOUNT_ID` and `CF_PAGES_API_TOKEN` env var names (remapped to wrangler's expected names)
12
+ - Minimal theme: clean typography, dark mode, high-contrast, and reduced-motion variants (all auto-detected from OS preferences)
13
+ - Top bar with project name and version badge
14
+ - Heading anchor links for deep linking
15
+ - CSS extracted to cacheable `style.css` instead of inlined per page
@@ -0,0 +1,54 @@
1
+ {"commits":["caebcff8cdd31e6413fca319e67e07bfa0fe4f70","9a69a0369e8d0b6111fadd974a209ccbbcfe0861","caac7c240adbc43b22d1c4895254b4e63316a5d7","33e999a6765a67a292e3b1acea18b3f298837ac0","e3aaadb584cceab6104bb6f8ec1e9bfd1ab3425b"],"user_facing":true,"description":"`base_url` is now a required field in `selfdoc.json` (previously optional)","type":"feature"}
2
+ {"commits":["77e138dec3acdcaae4a284929fc2ed1ff30a049d","f9372ce76b3fc42a8c6372f3a4e98853926bf052","bf797f995df4e2aa27158dba8cf84f93c15db214"],"user_facing":true,"description":"Frontmatter `description` is now required on every page (auto-extraction removed); missing description is a build error","type":"feature"}
3
+ {"commits":["60771dabb5516e16369f21f67351419305359f4e","324c0dbf1e358d7418dcadfbba19cb5ced0227ad"],"user_facing":true,"description":"`selfdoc build` now fails on SEO lint warnings","type":"feature"}
4
+ {"commits":["2619efcd7b0d42b602632824332de4482b8f50e0","015a5597d6c40d504b337a7aafc1bcced12ab23b","57c7e718edb571223a74335e0fbefc43ee7f5f0e"],"user_facing":true,"description":"Subdirectory-based nested nav groups with collapsible sidebar sections, localStorage persistence, and frontmatter overrides (`nav_group`, `nav_order`)","type":"feature"}
5
+ {"commits":["21504c13524bbc55aa664b9b0934b5d395548555"],"user_facing":true,"description":"Configurable search trigger via `search` config field: `\"icon\"` (magnifying glass button), `\"bar\"` (text input with Cmd+K hint), or `\"hidden\"`","type":"feature"}
6
+ {"commits":["0d131c72d0ae8be13d6f6cf2b2017677ce24e42b"],"user_facing":true,"description":"Functional feedback widget via `feedback` config field with webhook POST and Google Analytics event support","type":"feature"}
7
+ {"commits":["1982b46e41a63764793004b6f3d5f9be760fa7b2"],"user_facing":true,"description":"Atom feed generation (`feed.xml`) with auto-discovery `<link>` tag in `<head>`","type":"feature"}
8
+ {"commits":["ac6485a0de73d2364de6de531d21fcde4f783550","a75fa71bdb87f8fe93152bcc162faa32eed8cf5e"],"user_facing":true,"description":"Definition list syntax (`term\\n: definition`) with glossary styling and DefinedTerm JSON-LD","type":"feature"}
9
+ {"commits":["f92114f2c491aff670e04968755773a59f92717d"],"user_facing":true,"description":"Inline stat markup (`==value==`) producing semantic `<data>` elements","type":"feature"}
10
+ {"commits":["da27d5477b8bdf088a2da0a5cbd4f7bd71bbf73f","29e8770c87089733d9b64bd07a74a7904dd6d367"],"user_facing":true,"description":"Code tabs for switching between language variants with localStorage persistence","type":"feature"}
11
+ {"commits":["e8ab4604aab3308b06964fae1ee03f3914b6162a"],"user_facing":true,"description":"Git branch auto-detection for edit links; configurable via `branch` config field","type":"feature"}
12
+ {"commits":["766777a719d7d46d759c28d78792755b53a79966","5223e6ec334b66981d7364d8d30770efc5862737","a2318b12e146cd77fe0c8e91b7be9c99e106c5df","09dfe8df82db49476a6cf666a906be1c8d15de86"],"user_facing":true,"description":"Rich OG card PNG generation with text overlay via predraw (optional dependency)","type":"feature"}
13
+ {"commits":["0516a601f823a2ff6219a415aafba106a7f4086b","2cfe248f12d110f1fe1f000593780769dc8649c4","e1b062c92254e5573937847069f36c1eb87ee59c"],"user_facing":true,"description":"SEO lint framework with 15 rules covering headings, descriptions, images, contrast, and structured data","type":"feature"}
14
+ {"commits":["c6a6313eb0348153960bdbfffa8cd21de21bb062","64a06f57f2c82bd69560ea28949c271e742810b2","04a0e16495770dbd6221bf5805d90ebbeaf47b87","c9b85969bedd79e55075fe2f9e0edd627a7291c1"],"user_facing":true,"description":"JSON-LD structured data: TechArticle, BreadcrumbList, WebSite, SoftwareSourceCode, Organization/Person, ItemList, DefinedTermSet","type":"feature"}
15
+ {"commits":["caf8643aa5b538e132a985f289c5ef8e65eb8f0a","3d750f10bea0f4d088bbeb751b274adebaa18ec5","1f6d0f4809e16f28100f56b70de7c1d5a0c8cf33","5ab397f045955ff3f377fbffc2b213a388f2bcc8","8c718513a5d516a6b77a877591de039afd536a88","588b8db20d84adf83c000e41a320f092f026be6c","36aa3499b5933afd2bd78bbdede061da1005851b"],"user_facing":true,"description":"Open Graph and Twitter Card meta tags with `og:locale`, `og:image:alt`, and auto-generated social card images","type":"feature"}
16
+ {"commits":["a217568277910f1816cb56e2dda020a573ff41cd","c28586550df64e5831f4b641156883207fbcdba0"],"user_facing":true,"description":"`robots.txt` with explicit AI crawler permissions (GPTBot, ClaudeBot, PerplexityBot, etc.)","type":"feature"}
17
+ {"commits":["fb8b63244317795809e5ec257b3ea991de3bab02","9ad0e7e890018f47d2545e782935e0216e5bbada"],"user_facing":true,"description":"Visible \"Last updated\" dates with `<time>` elements, `dateModified` in JSON-LD, and sitemap `lastmod`","type":"feature"}
18
+ {"commits":["76fa1f4cdfef4faed880c35307eb11c99f04f101","0d43900841969cf5436b7128590a44d0c56f922e"],"user_facing":true,"description":"`selfdoc check --ignore SEO007,SEO008` to suppress specific lint rules","type":"feature"}
19
+ {"commits":["9ed5c18a520e1ee41a4b50c61c4d83b3c44fa95c"],"user_facing":true,"description":"`selfdoc check --format json` for machine-readable output","type":"feature"}
20
+ {"commits":["7e5d1306b099f26694462b64eb375699bdfc578f"],"user_facing":true,"description":"Color-coded `selfdoc check` output (green/yellow/red by severity)","type":"feature"}
21
+ {"commits":["a2c46291f1904aab2abf6662689f70e8d647ee3d","2019bbdcc512bd34d67db6b0375d7621b73479f2"],"user_facing":true,"description":"New config fields: `lang` (BCP 47), `author`, `twitter`, `branch`, `search`, `feedback`","type":"feature"}
22
+ {"commits":["92e78abefa077efe1c0f3a8df1a46d6dffdc9705","d93935b49cd82dfee5fe88bb97a06f04ab73c0dc"],"user_facing":true,"description":"Sticky table headers no longer hide behind the fixed topbar","type":"feature"}
23
+ {"commits":["0baa65381a77d891d1a9c9a7ead919b13c28d272","1b80538e440986aebee17d079033d5f3e4ead022","6bea2d4fe77b3c0f3b45f2a167fe4d5f63a8a389"],"user_facing":true,"description":"Copy button now always visible on code blocks (was hidden until hover, invisible on touch)","type":"feature"}
24
+ {"commits":["0fbd0d77fc9445cbbf251e5c1e7b0e2487ab5594","82cee7e8be2a8c1e419e061f9e1b7103555a001e","80b8e30b03c6e1e8fe2686db6092562c5e662a46","e80f1333047116cac0c208b64a6fd1ee13ff421d"],"user_facing":true,"description":"Fixed dark mode contrast for all accent colors","type":"feature"}
25
+ {"commits":["4ddbd75c8e5221b4ef3ed07a9028f741f72c6865"],"user_facing":true,"description":"Fixed breadcrumb intermediate links pointing to non-existent directory index pages","type":"feature"}
26
+ {"commits":["80e0ebb6e3f5c2058fba390b159c97505842149f"],"user_facing":true,"description":"Build-time Pygments syntax highlighting (replaced client-side highlight.js)","type":"feature"}
27
+ {"commits":["9e17135fa0dc54f61c7c9740eafeeb9442476178","7fd9a993230a1c11c50ffb41b8237ecabf1e8596","882005cd80025505e795c463e30767e078dd5bab"],"user_facing":true,"description":"Build-time CSS, JS, and HTML minification with critical CSS inlining","type":"feature"}
28
+ {"commits":["d4d1342206a9745cf8755e885dbc649590227063"],"user_facing":true,"description":"Gzip and Brotli pre-compression of build output","type":"feature"}
29
+ {"commits":["3d96198629cb8019bac735670154c088d0cedbd5"],"user_facing":true,"description":"Search JS externalized to `search.js` with lazy index loading","type":"feature"}
30
+ {"commits":["4d1542309cfe53e798b68b0ad99346c9490c4c39"],"user_facing":true,"description":"Conditional JS inclusion based on page content","type":"feature"}
31
+ {"commits":["a4fe538074c11d52d84ad86ef810397a8d4c14ef"],"user_facing":true,"description":"ARIA labels on sidebar nav, TOC nav, and search dialog","type":"feature"}
32
+ {"commits":["2d46423d8de66d283d344b40bd4da4b7120a8d98"],"user_facing":true,"description":"Dynamic theme toggle ARIA label indicating current state","type":"feature"}
33
+ {"commits":["7a5137e7c695dcb392fdab891e308411858dafb0"],"user_facing":true,"description":"Roving tabindex on code tabs per WAI-ARIA pattern","type":"feature"}
34
+ {"commits":["2df37d3e06f36b5ec666391c2334078e0fed9a93","b62dc9b8b8ce1cc294b6237aadca9e38e30d0422"],"user_facing":true,"description":"Heading anchors visible on touch devices","type":"feature"}
35
+ {"commits":["617a169801e5b45300d526432d82642e83e8c5a9","b227ef59ec967fd5e70144274e91d33c6af04dfe"],"user_facing":true,"description":"Card-style prev/next navigation links","type":"feature"}
36
+ {"commits":["f609639c8ef83eb9bc8b5cab8a1c3b0bfb9302ce","2ebdc0c0612db4b4c6f2c88ac530e7a4b8fd0431"],"user_facing":true,"description":"Print stylesheet: 2cm margins, forced light colors, hidden breadcrumbs, code wrapping","type":"feature"}
37
+ {"commits":["4512d0a2061baff5f92996541448e350f45e5d76","9a8e210a54050f413a9afd51fb1021bda1f3b822"],"user_facing":true,"description":"Security headers and trailing slash redirects for Cloudflare Pages","type":"feature"}
38
+ {"commits":["a9f8329287c7fb70d1dc13f0e6a2c6f4173f4bbe"],"user_facing":true,"description":"Edit link shown at both top and bottom of content area","type":"feature"}
39
+ {"commits":["6538269846eefc2543f17965a4d279ec4542ff9d"],"user_facing":true,"description":"`llms.txt` and `llms-full.txt` for AI documentation ingestion","type":"feature"}
40
+ {"commits":["b62adfd673006acc2c60e0ef04422876710af995"],"user_facing":true,"description":"`selfdoc check` reports undocumented public symbols when coverage is below 100%","type":"feature"}
41
+ {"commits":["edbaf9bb51242ba86aa218f5bb4e517408a7892e"],"user_facing":true,"description":"`lint_ignore` config field for project-level lint rule suppression","type":"feature"}
42
+ {"commits":["9af7d53ae9e818d629e8f8c328d499123a7efc76"],"user_facing":true,"description":"Edit link and \"Last updated\" date no longer run together (flex layout with gap)","type":"feature"}
43
+ {"commits":["1b9028ef38e21c25e36a669a1beb009854b44d5b"],"user_facing":true,"description":"Search shows \"No results\" message instead of blank space","type":"feature"}
44
+ {"commits":["08ac2f8c54d2af91182698a8c0ac45eba3e6587f"],"user_facing":true,"description":"Search dialog closes when clicking a result link","type":"feature"}
45
+ {"commits":["87089a200454885cfca4f17361fbacef2b5e74ec"],"user_facing":true,"description":"Fixed code-block hover shadow invisible in dark mode","type":"feature"}
46
+ {"commits":["afb4db163dc8ae785a0e27e04a2497352db9a8dc"],"user_facing":true,"description":"Table `<caption>` derived from preceding heading for screen readers","type":"feature"}
47
+ {"commits":["d1997e04b6181943a5cdd0ec22f08a7ab2f0fd31"],"user_facing":true,"description":"44px minimum touch targets on all interactive elements","type":"feature"}
48
+ {"commits":["8d208c6696898e55eb02e4f0fb3147818a999c99"],"user_facing":true,"description":"Admonition icons (distinct SVG per type: info, lightbulb, warning triangle, octagon, exclamation)","type":"feature"}
49
+ {"commits":["caec48eedeb4077385e0c757ff99a5b2bfc504da"],"user_facing":true,"description":"Styled generic `<details>/<summary>` in content","type":"feature"}
50
+ {"commits":["3945f31a930790611f3d7f93c50c85c0a3d3bef5"],"user_facing":true,"description":"Styled standalone `<dfn>` tags outside glossary context","type":"feature"}
51
+ {"commits":["475d3454b4ecdfad67becf2b653976147d4422d0"],"user_facing":true,"description":"RSS feed link in site footer","type":"feature"}
52
+ {"commits":["af3efc02c3daae9273b629c0b97b89620f231379"],"user_facing":true,"description":"Fragment highlight animation when navigating to `#section` URLs","type":"feature"}
53
+ {"commits":["f33b0f2791a0e80d84b47341a1dd8dd5300157d8"],"user_facing":true,"description":"Topbar truncates long project names with ellipsis","type":"feature"}
54
+ {"commits":["10c2a16fa6848be083e1a9410c06fb25a1188a41","06905cacd1d4f7df67905fce3cf0d094565cd9e7","ef1169ac8f1dec5314e3c2d80176e90f921a1b36","7468ecc017a1f66a3f2a95c5c101112e93fe6824","d33fdd2e34945da7dcdad85fa9b7938c01049c19","c4b4606643f3e9db0db168db749a001c4485db5b","e7f1e630652721b725fd33cb344a4004e2ac1105","c1981a529e81d12fe4905767b28c42a5c0d1d925","35b224b25483623e028fb72c6d63489d91dc152a","7663d9dcc2e42c606dd8aa69ac364957be4bc780","1a38662d3f1a5e3288422d0bc3406a289d4281fc","f0413d4b715b16117d1a8503b07cfa01c56de21e","fbc3c4ac2e7f50bc607ba28ea550e612100fe345","f9928794403d7e05bee6c71a9919a89d2227865d","a4d0624259be77af943cce05bbdf47c7385a8b14","749e74238fe599c0f7859bddc2ce741bd6f4214f","c302b633158e056871d68573aeec910304b376e5","c2addfb75bd3ae2fd58c415f273713736a2a4bbe","4b0ec52589f5de9071f0753d8ecdd626e8027cb9","34c881b7395e64a2ad64da03076866b9d2306a54","f91044ed09096b880993c8bb467ba66071e83189","1bd78a4878f1d3066873d863e0b028e1d08862ea","5c135224a0f314698d70d8fc5875b993fc22b98d","5fc91de87f1fcddd7afda505d6bc7bae54258cdb","3d3ebcac77c827b62f00fd5a7444dd0d14eae9d8","51433b4dd1f67344b350d09af5857596560820c2","ad051a4dc1b650071d292978c00479d961e382c6","e3c6ad01adeb025f5c4c818af56c721bc91dc24a","ae7adaf4de9a025f85e5193e245c524ee42ade7a","fbdfaa1135e70059378ef35b083ef795c089f2b5"],"user_facing":false}
@@ -0,0 +1,57 @@
1
+ ## 0.3.0
2
+
3
+ ### Features
4
+
5
+ - `base_url` is now a required field in `selfdoc.json` (previously optional)
6
+ - Frontmatter `description` is now required on every page (auto-extraction removed); missing description is a build error
7
+ - `selfdoc build` now fails on SEO lint warnings
8
+ - Subdirectory-based nested nav groups with collapsible sidebar sections, localStorage persistence, and frontmatter overrides (`nav_group`, `nav_order`)
9
+ - Configurable search trigger via `search` config field: `"icon"` (magnifying glass button), `"bar"` (text input with Cmd+K hint), or `"hidden"`
10
+ - Functional feedback widget via `feedback` config field with webhook POST and Google Analytics event support
11
+ - Atom feed generation (`feed.xml`) with auto-discovery `<link>` tag in `<head>`
12
+ - Definition list syntax (`term\n: definition`) with glossary styling and DefinedTerm JSON-LD
13
+ - Inline stat markup (`==value==`) producing semantic `<data>` elements
14
+ - Code tabs for switching between language variants with localStorage persistence
15
+ - Git branch auto-detection for edit links; configurable via `branch` config field
16
+ - Rich OG card PNG generation with text overlay via predraw (optional dependency)
17
+ - SEO lint framework with 15 rules covering headings, descriptions, images, contrast, and structured data
18
+ - JSON-LD structured data: TechArticle, BreadcrumbList, WebSite, SoftwareSourceCode, Organization/Person, ItemList, DefinedTermSet
19
+ - Open Graph and Twitter Card meta tags with `og:locale`, `og:image:alt`, and auto-generated social card images
20
+ - `robots.txt` with explicit AI crawler permissions (GPTBot, ClaudeBot, PerplexityBot, etc.)
21
+ - Visible "Last updated" dates with `<time>` elements, `dateModified` in JSON-LD, and sitemap `lastmod`
22
+ - `selfdoc check --ignore SEO007,SEO008` to suppress specific lint rules
23
+ - `selfdoc check --format json` for machine-readable output
24
+ - Color-coded `selfdoc check` output (green/yellow/red by severity)
25
+ - New config fields: `lang` (BCP 47), `author`, `twitter`, `branch`, `search`, `feedback`
26
+ - Sticky table headers no longer hide behind the fixed topbar
27
+ - Copy button now always visible on code blocks (was hidden until hover, invisible on touch)
28
+ - Fixed dark mode contrast for all accent colors
29
+ - Fixed breadcrumb intermediate links pointing to non-existent directory index pages
30
+ - Build-time Pygments syntax highlighting (replaced client-side highlight.js)
31
+ - Build-time CSS, JS, and HTML minification with critical CSS inlining
32
+ - Gzip and Brotli pre-compression of build output
33
+ - Search JS externalized to `search.js` with lazy index loading
34
+ - Conditional JS inclusion based on page content
35
+ - ARIA labels on sidebar nav, TOC nav, and search dialog
36
+ - Dynamic theme toggle ARIA label indicating current state
37
+ - Roving tabindex on code tabs per WAI-ARIA pattern
38
+ - Heading anchors visible on touch devices
39
+ - Card-style prev/next navigation links
40
+ - Print stylesheet: 2cm margins, forced light colors, hidden breadcrumbs, code wrapping
41
+ - Security headers and trailing slash redirects for Cloudflare Pages
42
+ - Edit link shown at both top and bottom of content area
43
+ - `llms.txt` and `llms-full.txt` for AI documentation ingestion
44
+ - `selfdoc check` reports undocumented public symbols when coverage is below 100%
45
+ - `lint_ignore` config field for project-level lint rule suppression
46
+ - Edit link and "Last updated" date no longer run together (flex layout with gap)
47
+ - Search shows "No results" message instead of blank space
48
+ - Search dialog closes when clicking a result link
49
+ - Fixed code-block hover shadow invisible in dark mode
50
+ - Table `<caption>` derived from preceding heading for screen readers
51
+ - 44px minimum touch targets on all interactive elements
52
+ - Admonition icons (distinct SVG per type: info, lightbulb, warning triangle, octagon, exclamation)
53
+ - Styled generic `<details>/<summary>` in content
54
+ - Styled standalone `<dfn>` tags outside glossary context
55
+ - RSS feed link in site footer
56
+ - Fragment highlight animation when navigating to `#section` URLs
57
+ - Topbar truncates long project names with ellipsis
@@ -0,0 +1,2 @@
1
+ {"commits":["3b7d938e23a3e6262ac820eee9c9501d6d73f678"],"user_facing":true,"description":"npm package renamed from `selfdoc` to `selfdocumenting` (npm blocks `selfdoc` due to similarity with abandoned `self-doc` package). Install via `npm install -g selfdocumenting` or `npx selfdocumenting`. The CLI command remains `selfdoc`.","type":"feature"}
2
+ {"commits":["a726c122b4c388fee93cfd3f66cf721cbe85fed8","94c934a444a3055f45c50357dec87689ebb47e37","f41d54ea64d6fbc462551dd3fc4c125bf020c325"],"user_facing":false}
@@ -0,0 +1,5 @@
1
+ ## 0.3.1
2
+
3
+ ### Features
4
+
5
+ - npm package renamed from `selfdoc` to `selfdocumenting` (npm blocks `selfdoc` due to similarity with abandoned `self-doc` package). Install via `npm install -g selfdocumenting` or `npx selfdocumenting`. The CLI command remains `selfdoc`.
@@ -0,0 +1,69 @@
1
+ {"commits":["666324783b9d4f37133d53d37e854dd1efe41db5","c0206a28db280d5148816aad3e2e460a38a5b0ff","a6d353a8ee7477ae8d37a05d0f356428f2d4f309","22b404cd6fbb09d7e18e4e70f5ec65d9f40eef6f","cdfc40748b56a6ca9105bf793a126c9c95ad1a66","79bac0d976c73b5ed0be0af4a8f796b6903f618c","5fb7b923567ee737eb8b66dad996d3618777f288"],"user_facing":true,"description":"Directive syntax redesigned: new attribute-based format (`:-:`, `:<:`, `:>:`) with a formal directive catalog replacing the old `:::name arg` syntax. All existing directive blocks must be migrated. The `glossary` directive is now `list-glossary`.","type":"feature"}
2
+ {"commits":["358a2b4c47cea2558af1e6591bf1f85532aedc1e"],"user_facing":true,"description":"Custom directive scripts must update from `resolve(arg, config)` to `resolve(attrs, config, body)`. Body content is now forwarded.","type":"feature"}
3
+ {"commits":["be0983af15c5e7a144c2b176da19a50b63df9eaf","2dee526df35b35a2d1725b8019423e7951b641b0"],"user_facing":true,"description":"Extractors refactored to a `LanguageExtractor` protocol with a registry. Custom extractor integrations may need updating.","type":"feature"}
4
+ {"commits":["6f4fa6b4d07c737d42a8110969af985969189bbb","402e81ea2290e82f4485a5dd8446802e7d8c551d","bef0b8a0b503e6847f3f194ecd953f9c911f953e"],"user_facing":true,"description":"URL scheme changed from flat (`guide.html`) to directory-index (`guide/index.html`, served as `guide/`). All canonical URLs, sitemap entries, and internal links updated. External links pointing to old `.html` URLs will 404.","type":"feature"}
5
+ {"commits":["7007c922b9b6feef21cb0201e37a86d67afd9b99","ba13cfd9daa284d1625040563b39ac0a9524e072"],"user_facing":true,"description":"H1 headings are now auto-generated from the page title. The first `# heading` in Markdown is consumed as the title source (not rendered as-is). Multiple `#` headings in a single page now cause a build error.","type":"feature"}
6
+ {"commits":["f9ba480f4c7224c946cc93e362cea557a48f1642"],"user_facing":true,"description":"`selfdoc build` no longer exits 1 for lint warnings. Exit 1 is reserved for errors only. The `--warn-only` flag is deprecated (warnings are non-fatal by default).","type":"feature"}
7
+ {"commits":["ec3e5cb6bbc168f755d686dcad03be6d85fcbf6c","13e651bfbb8d5ab8eea0beb98608c1fe4719fe45","8724a4f3890302f6cb0bad9670cb67e33992da3e"],"user_facing":true,"description":"`selfdoc gen` command: auto-generates documentation pages from source code structure, with exclusion patterns, `generated: true` frontmatter, and stale file cleanup","type":"feature"}
8
+ {"commits":["664d97fa47f4b8f170b9a35a2be3c06bf1730b76"],"user_facing":true,"description":"`selfdoc gen-data` command: runs sandboxed scripts (via bubblewrap) to generate CSV/JSON data files for documentation","type":"feature"}
9
+ {"commits":["5fdcac42253562d9f284f9354bb47e97c49466c2","815728cca6eea6be1288e34fe0ded21ef3f2d578"],"user_facing":true,"description":"First-class strictcli support: auto-detects strictcli usage and generates CLI documentation pages","type":"feature"}
10
+ {"commits":["d20035f4fdfd75c536ba3031af70051f0f465510","23686ed9eb76e913bcf74ad18b9985b592a5f673"],"user_facing":true,"description":"Description staleness detection: `selfdoc check` warns (STALE001) when a page description no longer matches page content, tracked via content hashing in `.selfdoc/hashes/`","type":"feature"}
11
+ {"commits":["b37c30939a4d7c1518a4026b724c63f93daa0126"],"user_facing":true,"description":"Pluggable search engine: choose `\"builtin\"`, `\"fuse\"`, or `\"minisearch\"` via the `search_engine` config field","type":"feature"}
12
+ {"commits":["960e63ba3b62a9cfe54bc3f8ab3d2c8372df7d8f"],"user_facing":true,"description":"Landing page template: hero section with tagline, CTA button, and feature cards, configured via `branding` config field","type":"feature"}
13
+ {"commits":["9349003789793b55f3ceb576eb1a2a843304a58d"],"user_facing":true,"description":"Cross-page term linking: `<dfn>` definitions automatically linked across pages with dotted-underline `.term-link` styling","type":"feature"}
14
+ {"commits":["064fc82878725cf6446843e340d7644602ef215e"],"user_facing":true,"description":"Documentation coverage for Go (exported symbols) and TypeScript/JavaScript (`export` declarations), previously Python-only","type":"feature"}
15
+ {"commits":["aa8663104feb6090e6973fa8b5da13413e38ffdb"],"user_facing":true,"description":"Per-symbol coverage tracking with configurable `min_coverage` threshold","type":"feature"}
16
+ {"commits":["ae5299254add2fc666ea365a66bbdb956978f1a2"],"user_facing":true,"description":"Callout directives (note, tip, warning, danger, important) as first-class directive types","type":"feature"}
17
+ {"commits":["ba6e98afe96447dbe0d76264a5dc0bcc7fac9a93","bd79c10f4554b89c30b488f531222ae84d322690"],"user_facing":true,"description":"Feed filtering via `feed: false` frontmatter; changelog pages auto-detected and excluded by default","type":"feature"}
18
+ {"commits":["7a494163eac2ec4304d593c1609c8c9b2bc5fadb"],"user_facing":true,"description":"Reading progress bar fixed below the topbar","type":"feature"}
19
+ {"commits":["1af3955c31507e329c4cd97b7decd9d6c32f192e"],"user_facing":true,"description":"Scroll affordance gradients on overflowing code blocks and tables","type":"feature"}
20
+ {"commits":["f667d2ba444d20b625849624002bc6e443e17da8"],"user_facing":true,"description":"Sticky first column on horizontally-scrolling tables","type":"feature"}
21
+ {"commits":["0972dae5598380ad0ac8aa9fb4d152350f89cad7","b12903c2cc737e4ed10172f05138609b76cfbaa6"],"user_facing":true,"description":"`auto_detect` config field to disable step guide and API entry heuristics globally or per-page via `auto_steps`/`auto_api` frontmatter","type":"feature"}
22
+ {"commits":["a2fbf28591b53c1092daf0cc420b7a64943b1ac2","dd0861f3d34fa4f62ea4ffe1db9f9e87a0381813","de8921e2044d236b5b88f6e4b0daf9d8478f26c1","2f145d13e0737a251fb0c83a6441f9c5cfdfe2a4"],"user_facing":true,"description":"Markdown block tokenizer (`selfdoc/tokenizer.py`): standalone module with zero dependencies, 10 token types. Used internally for both HTML rendering and lint analysis.","type":"feature"}
23
+ {"commits":["579ba29b91e660215e76b7702c3f74daa9b26055","7bd32566f361842af0ff7ac1350a9d23f4bd00ae","6459b88334e4d08ee94b5a532a94cf5a7b64786f","624f5eee9ced0263334c45b3980363639797ee1d"],"user_facing":true,"description":"Auto-commit system: `selfdoc build`, `check`, `init`, `gen`, and `gen-data` now auto-commit changed project files (hashes, generated docs, generated data). Disable with `--no-commit`. Uses `safegit` when available, falls back to git.","type":"feature"}
24
+ {"commits":["e4217981327242aeeb97ee83b57408ceaccb4f4f","1abec30800407e19b71b2e553244244b6e089f8a"],"user_facing":true,"description":"Directive token support in tokenizer: `:::name arg` / `:::` blocks are recognized as structured tokens","type":"feature"}
25
+ {"commits":["8c4393ba73e0b3ac126e9ae22171b1f327d8d531"],"user_facing":true,"description":"SearchAction in WebSite JSON-LD on the homepage, enabling Google sitelinks search","type":"feature"}
26
+ {"commits":["95150c68f39cfb65db74b50cc58de07297a3a329","40ab8e292df5e4237912264be0577fe034922fe4","989d84b00a4b2db92eabf26ba3328b48bafb0a8b"],"user_facing":true,"description":"GitHub Pages security headers: `<meta http-equiv>` tags for X-Content-Type-Options, X-Frame-Options, and Content-Security-Policy injected when deploy target is `github-pages`","type":"feature"}
27
+ {"commits":["6fef50269f2bb4c2c45e0b1573ee7e393f795f1b"],"user_facing":true,"description":"WCAG contrast validation for user `custom.css`: SEO012 checks CSS variable overrides in `docs/custom.css` against theme backgrounds","type":"feature"}
28
+ {"commits":["fed7b48869a3981acc5851cc9685fb4155fb0c3e","7dd4aa11eb4bcef3d8c5cc72843e52676c410e1c"],"user_facing":true,"description":"High-contrast mode overrides: both themes override `--link`, `--text-secondary`, `--sidebar-text`, and `--sidebar-active` in `prefers-contrast: more` media query","type":"feature"}
29
+ {"commits":["c7a2d30ca00613223089875aef20ab5f2002461a"],"user_facing":true,"description":"Heading anchor IDs now deduplicate (appends `-1`, `-2` for repeated headings) and preserve Unicode characters","type":"feature"}
30
+ {"commits":["0505103790d7d809778e0668480d437375635a03"],"user_facing":true,"description":"Scrollspy correctly tracks headings when scrolling in both directions","type":"feature"}
31
+ {"commits":["2a5a7c54aba730089854f3f6292c3b1c30f01115"],"user_facing":true,"description":"Step guide detection tightened: keyword must appear at start of heading text, 200-char lookback (no more false positives on \"Next Steps\" or \"Troubleshooting Steps\")","type":"feature"}
32
+ {"commits":["9125fa32331204925501bc0c3e9812b8844e3941"],"user_facing":true,"description":"API entry wrapping tightened: requires identifier-like heading and single-line code block (no more false positives on tutorial sections)","type":"feature"}
33
+ {"commits":["f913a36f50d8f50af4e69761c50d1130290a8e58"],"user_facing":true,"description":"Prev/next links show directional labels (\"Previous\" / \"Next\") above page titles","type":"feature"}
34
+ {"commits":["8646841b641d5246114eeb7d84f872a2ae989040","57b8ba4033aa3bad9fb3010a467e80cf8ccb8d8c"],"user_facing":true,"description":"Admonition icons use CSS mask-image technique, adapting correctly to dark mode","type":"feature"}
35
+ {"commits":["1311c0180438b5ca78f1f3f50b9a9dd3be3ad0aa"],"user_facing":true,"description":"Diff highlighting uses `+`/`-` prefix symbols in addition to color","type":"feature"}
36
+ {"commits":["da581e4ef8a7fc43bc0513cfa48226a9b3df9519"],"user_facing":true,"description":"Collapsible section indicators replaced with 16x16px SVG chevrons (previously 8x12px CSS triangles)","type":"feature"}
37
+ {"commits":["0f617b38e2a5fd2076e822054b23f3c4950b6f36","05189c4a863a229d7bd75d82affda053cf3564d3","a49b7523cc70094301e718140ecc9c06832dd2f3","162c200f47b9e37afcbfa5ef64412f7d803073a4","e207ed6dfcc07e6b03fd823e33f984c8c5f255a2"],"user_facing":true,"description":"Clean theme link color (`#635bff`) barely passed WCAG AA in light mode (4.70:1) and failed in dark mode (4.23:1). New color `#5046e4` passes comfortably (6.29:1 light, 5.93:1 dark).","type":"feature"}
38
+ {"commits":["cd9cd73eb5ada98570e8c1d3e51772d59a27dadf","340f023b95e7d1d98cbb4aede8762df8d73b5e78","4304ec0451f294cb08d6c4f4ec719d3532fc92ff"],"user_facing":true,"description":"SEO lint false positives from fenced code blocks: heading counts (SEO001), heading level gaps (SEO002), empty alt text (SEO003), paragraph length (SEO007), empty sections (SEO011), and all other checks now use the tokenizer, making them immune to code block content","type":"feature"}
39
+ {"commits":["1dfeed4368b028f02c73181893aab65eaea64362"],"user_facing":true,"description":"SEO007 false positives on directive-heavy pages: when a heading is followed by a `:::directive` block, the short-paragraph warning is suppressed","type":"feature"}
40
+ {"commits":["9d7c0bcf5d66aa120aa2c91b1faa0bd6a6da57fb"],"user_facing":true,"description":"Statistics density check (SEO008) now evaluates prose content only, excluding code blocks","type":"feature"}
41
+ {"commits":["f54068bb534c8eb8e86db1ee65d7c1174b088390"],"user_facing":true,"description":"`md_to_html()` refactored from a 180-line line-walking loop into a clean tokenize-then-render pipeline","type":"feature"}
42
+ {"commits":["adfc067412347546f1c2ee3ff5f52b2feeb2a0ce"],"user_facing":true,"description":"`_redirects` file is no longer generated (directory-index URLs don't need trailing-slash redirects)","type":"feature"}
43
+ {"commits":["00a66be6a3b5e5027789446c882fefa2820f72cd"],"user_facing":true,"description":"`_headers` file is now only generated for `cloudflare-pages` deploy target","type":"feature"}
44
+ {"commits":["ae7a3a641d1b883060ba423d37c1d60a6e714331"],"user_facing":true,"description":"Auto-generated glossary page: collects all `<dfn>` terms site-wide into an alphabetical glossary with source links","type":"feature"}
45
+ {"commits":["74897510d7e34dabe2b74943658fa47aa3669579"],"user_facing":true,"description":"Changelog auto-detection: `CHANGELOG.md` in project root is automatically included as a documentation page","type":"feature"}
46
+ {"commits":["43a93d8302b1c6eac2754465b36312f97606ed9c"],"user_facing":true,"description":"`selfdoc build --warn-only` flag to treat lint warnings as non-fatal","type":"feature"}
47
+ {"commits":["954aefd563a1cf7c369c9a460dd72f3581853ff9"],"user_facing":true,"description":"Page progress indicator (\"Page X of Y\") between prev/next links","type":"feature"}
48
+ {"commits":["7523c7278c3c53b55052f04af093267ac4ae4b42"],"user_facing":true,"description":"Current page title shown in the topbar on non-index pages","type":"feature"}
49
+ {"commits":["257dee101ab0bb1073e7f7526cc5e069431af230"],"user_facing":true,"description":"URL-triggered search: navigate to `?q=term` to open search pre-filled with results","type":"feature"}
50
+ {"commits":["c20bdad56e773e005b84d39da5edb8ecdb9559b7"],"user_facing":true,"description":"Meta description auto-generation: pages without frontmatter `description` now get `<meta name=\"description\">` auto-extracted from the first paragraph","type":"feature"}
51
+ {"commits":["830289314238a526bbcff7bcfd4777b6ccb1ec3c"],"user_facing":true,"description":"Horizontal rule support: `---`, `***`, and `___` in Markdown now render as `<hr>`","type":"feature"}
52
+ {"commits":["08651f75f5bb4da433e60461ccfbc62cf9db8b58"],"user_facing":true,"description":"Code tab sync no longer infinite-loops with 3+ tab groups sharing a language","type":"feature"}
53
+ {"commits":["b7c63b3422c49a1899e2358bba7cb6ebb311fd43"],"user_facing":true,"description":"Heading copy-to-clipboard shows a toast notification","type":"feature"}
54
+ {"commits":["2c26729d2c9970f5ee63b73a776968b8552ae7b8"],"user_facing":true,"description":"Edit link opens in a new tab","type":"feature"}
55
+ {"commits":["33fda85e5f3d19194311f758ed74e3ea9ba2069d"],"user_facing":true,"description":"OG description falls back to first paragraph when no frontmatter description","type":"feature"}
56
+ {"commits":["4f0a7c47ed9de47fe266a69c92074d51b60de235"],"user_facing":true,"description":"Each admonition type has a distinct background color","type":"feature"}
57
+ {"commits":["f38467314db0bfdb534ac73092c5a504eb007af3"],"user_facing":true,"description":"Focus indicators use `:focus-visible` throughout (keyboard-only, no mouse outlines)","type":"feature"}
58
+ {"commits":["e81129f0f90dbb2ec404471844b00c926d6b7a95"],"user_facing":true,"description":"Sidebar active link has a visible background highlight","type":"feature"}
59
+ {"commits":["521dad0ee7f35ee4c9e0cd2c282efcab6a1e9d52"],"user_facing":true,"description":"Mobile sidebar traps focus within the overlay","type":"feature"}
60
+ {"commits":["341ccae830d7741fabdb856597432b3170108ff5"],"user_facing":true,"description":"Mobile sidebar closes on Escape key","type":"feature"}
61
+ {"commits":["06813377422a686703285b55d6435848f4dd6146"],"user_facing":true,"description":"Table rows highlight on hover","type":"feature"}
62
+ {"commits":["0080857f63910e47ea76d6f49dda5b6c287f7448"],"user_facing":true,"description":"Cmd+K label adapts to platform (shows Ctrl+K on Windows/Linux)","type":"feature"}
63
+ {"commits":["e015ddba6e22ffbc8241f791c3184f6d608e78dd"],"user_facing":true,"description":"\"Last updated\" date shown at the top of the page alongside breadcrumbs","type":"feature"}
64
+ {"commits":["c59aa6533583e73b0008962af9c265ae0586367c"],"user_facing":true,"description":"Search \"no results\" message includes guidance (\"Try different terms or browse the sidebar\")","type":"feature"}
65
+ {"commits":["ead839908ec109d16558023d7904a547f3d88794"],"user_facing":true,"description":"Feedback \"No\" response prompts for written feedback instead of just \"Thanks\"","type":"feature"}
66
+ {"commits":["418261317ca288a97651e85b84cc53a05a4d6fc8"],"user_facing":true,"description":"Negative feedback provides a text input for follow-up","type":"feature"}
67
+ {"commits":["a752a3bb5a5b3a0bdb0a2a1dd26f09c5d90d1174"],"user_facing":true,"description":"`<summary>` elements have `:focus-visible` outlines","type":"feature"}
68
+ {"commits":["bfac98bab192d21d24f6147ae44cd386dcc31220"],"user_facing":true,"description":"`<pre>` elements have `aria-label` describing the code language","type":"feature"}
69
+ {"commits":["8397ecd5172182f572443e6c9818b8b795c24d37"],"user_facing":true,"description":"`llms-full.txt` includes page boundaries with title headings and path comments","type":"feature"}
@@ -0,0 +1,73 @@
1
+ ## 0.4.0
2
+
3
+ ### Features
4
+
5
+ - Directive syntax redesigned: new attribute-based format (`:-:`, `:<:`, `:>:`) with a formal directive catalog replacing the old `:::name arg` syntax. All existing directive blocks must be migrated. The `glossary` directive is now `list-glossary`.
6
+ - Custom directive scripts must update from `resolve(arg, config)` to `resolve(attrs, config, body)`. Body content is now forwarded.
7
+ - Extractors refactored to a `LanguageExtractor` protocol with a registry. Custom extractor integrations may need updating.
8
+ - URL scheme changed from flat (`guide.html`) to directory-index (`guide/index.html`, served as `guide/`). All canonical URLs, sitemap entries, and internal links updated. External links pointing to old `.html` URLs will 404.
9
+ - H1 headings are now auto-generated from the page title. The first `# heading` in Markdown is consumed as the title source (not rendered as-is). Multiple `#` headings in a single page now cause a build error.
10
+ - `selfdoc build` no longer exits 1 for lint warnings. Exit 1 is reserved for errors only. The `--warn-only` flag is deprecated (warnings are non-fatal by default).
11
+ - `selfdoc gen` command: auto-generates documentation pages from source code structure, with exclusion patterns, `generated: true` frontmatter, and stale file cleanup
12
+ - `selfdoc gen-data` command: runs sandboxed scripts (via bubblewrap) to generate CSV/JSON data files for documentation
13
+ - First-class strictcli support: auto-detects strictcli usage and generates CLI documentation pages
14
+ - Description staleness detection: `selfdoc check` warns (STALE001) when a page description no longer matches page content, tracked via content hashing in `.selfdoc/hashes/`
15
+ - Pluggable search engine: choose `"builtin"`, `"fuse"`, or `"minisearch"` via the `search_engine` config field
16
+ - Landing page template: hero section with tagline, CTA button, and feature cards, configured via `branding` config field
17
+ - Cross-page term linking: `<dfn>` definitions automatically linked across pages with dotted-underline `.term-link` styling
18
+ - Documentation coverage for Go (exported symbols) and TypeScript/JavaScript (`export` declarations), previously Python-only
19
+ - Per-symbol coverage tracking with configurable `min_coverage` threshold
20
+ - Callout directives (note, tip, warning, danger, important) as first-class directive types
21
+ - Feed filtering via `feed: false` frontmatter; changelog pages auto-detected and excluded by default
22
+ - Reading progress bar fixed below the topbar
23
+ - Scroll affordance gradients on overflowing code blocks and tables
24
+ - Sticky first column on horizontally-scrolling tables
25
+ - `auto_detect` config field to disable step guide and API entry heuristics globally or per-page via `auto_steps`/`auto_api` frontmatter
26
+ - Markdown block tokenizer (`selfdoc/tokenizer.py`): standalone module with zero dependencies, 10 token types. Used internally for both HTML rendering and lint analysis.
27
+ - Auto-commit system: `selfdoc build`, `check`, `init`, `gen`, and `gen-data` now auto-commit changed project files (hashes, generated docs, generated data). Disable with `--no-commit`. Uses `safegit` when available, falls back to git.
28
+ - Directive token support in tokenizer: `:::name arg` / `:::` blocks are recognized as structured tokens
29
+ - SearchAction in WebSite JSON-LD on the homepage, enabling Google sitelinks search
30
+ - GitHub Pages security headers: `<meta http-equiv>` tags for X-Content-Type-Options, X-Frame-Options, and Content-Security-Policy injected when deploy target is `github-pages`
31
+ - WCAG contrast validation for user `custom.css`: SEO012 checks CSS variable overrides in `docs/custom.css` against theme backgrounds
32
+ - High-contrast mode overrides: both themes override `--link`, `--text-secondary`, `--sidebar-text`, and `--sidebar-active` in `prefers-contrast: more` media query
33
+ - Heading anchor IDs now deduplicate (appends `-1`, `-2` for repeated headings) and preserve Unicode characters
34
+ - Scrollspy correctly tracks headings when scrolling in both directions
35
+ - Step guide detection tightened: keyword must appear at start of heading text, 200-char lookback (no more false positives on "Next Steps" or "Troubleshooting Steps")
36
+ - API entry wrapping tightened: requires identifier-like heading and single-line code block (no more false positives on tutorial sections)
37
+ - Prev/next links show directional labels ("Previous" / "Next") above page titles
38
+ - Admonition icons use CSS mask-image technique, adapting correctly to dark mode
39
+ - Diff highlighting uses `+`/`-` prefix symbols in addition to color
40
+ - Collapsible section indicators replaced with 16x16px SVG chevrons (previously 8x12px CSS triangles)
41
+ - Clean theme link color (`#635bff`) barely passed WCAG AA in light mode (4.70:1) and failed in dark mode (4.23:1). New color `#5046e4` passes comfortably (6.29:1 light, 5.93:1 dark).
42
+ - SEO lint false positives from fenced code blocks: heading counts (SEO001), heading level gaps (SEO002), empty alt text (SEO003), paragraph length (SEO007), empty sections (SEO011), and all other checks now use the tokenizer, making them immune to code block content
43
+ - SEO007 false positives on directive-heavy pages: when a heading is followed by a `:::directive` block, the short-paragraph warning is suppressed
44
+ - Statistics density check (SEO008) now evaluates prose content only, excluding code blocks
45
+ - `md_to_html()` refactored from a 180-line line-walking loop into a clean tokenize-then-render pipeline
46
+ - `_redirects` file is no longer generated (directory-index URLs don't need trailing-slash redirects)
47
+ - `_headers` file is now only generated for `cloudflare-pages` deploy target
48
+ - Auto-generated glossary page: collects all `<dfn>` terms site-wide into an alphabetical glossary with source links
49
+ - Changelog auto-detection: `CHANGELOG.md` in project root is automatically included as a documentation page
50
+ - `selfdoc build --warn-only` flag to treat lint warnings as non-fatal
51
+ - Page progress indicator ("Page X of Y") between prev/next links
52
+ - Current page title shown in the topbar on non-index pages
53
+ - URL-triggered search: navigate to `?q=term` to open search pre-filled with results
54
+ - Meta description auto-generation: pages without frontmatter `description` now get `<meta name="description">` auto-extracted from the first paragraph
55
+ - Horizontal rule support: `---`, `***`, and `___` in Markdown now render as `<hr>`
56
+ - Code tab sync no longer infinite-loops with 3+ tab groups sharing a language
57
+ - Heading copy-to-clipboard shows a toast notification
58
+ - Edit link opens in a new tab
59
+ - OG description falls back to first paragraph when no frontmatter description
60
+ - Each admonition type has a distinct background color
61
+ - Focus indicators use `:focus-visible` throughout (keyboard-only, no mouse outlines)
62
+ - Sidebar active link has a visible background highlight
63
+ - Mobile sidebar traps focus within the overlay
64
+ - Mobile sidebar closes on Escape key
65
+ - Table rows highlight on hover
66
+ - Cmd+K label adapts to platform (shows Ctrl+K on Windows/Linux)
67
+ - "Last updated" date shown at the top of the page alongside breadcrumbs
68
+ - Search "no results" message includes guidance ("Try different terms or browse the sidebar")
69
+ - Feedback "No" response prompts for written feedback instead of just "Thanks"
70
+ - Negative feedback provides a text input for follow-up
71
+ - `<summary>` elements have `:focus-visible` outlines
72
+ - `<pre>` elements have `aria-label` describing the code language
73
+ - `llms-full.txt` includes page boundaries with title headings and path comments
@@ -0,0 +1,2 @@
1
+ {"commits":["53492ef093d43e3f4021da410541886a83ba4afc","666f3257150a37ff984868a91d2625c1cdf1a1dc"],"user_facing":false}
2
+ {"commits":["9e32c30dbac4da66004cdbeb0811a8c868b43595"],"user_facing":false}
@@ -0,0 +1,3 @@
1
+ ## 0.4.1
2
+
3
+ - No user-facing changes.
@@ -0,0 +1,7 @@
1
+ {"commits":["c49c0921c49011c8644a6bc7ddd6b71a0f660060"],"user_facing":false}
2
+ {"commits":["c5501cdc68770602dee65bf78614a6cb0262ab55"],"user_facing":false}
3
+ {"commits":["a32257fd22f1531003ec60ee9c4f00cf0a521c9b"],"user_facing":false}
4
+ {"commits":["1928ad226a3657c089941e017025ea49b846574e","bd31871260c794b8069521c1b8282c8648d2ecc1","f62fd7ba0ae9bb6d74e34222e00be481f6f86caf"],"user_facing":false}
5
+ {"commits":["23795ad5b0a0460a9fd800cbaa01b352654bb5d7"],"user_facing":false}
6
+ {"commits":["583c7fcfae40623860c9b3cdcfa32226fe30be3d"],"user_facing":true,"description":"Auto-commit prefers rlsbl commit when available, marking commits with Autogenerated trailer for changelog coverage exemption","type":"feature"}
7
+ {"commits":["6de2021cc4e20bb17450a37412740a76332e701a"],"user_facing":false}
@@ -0,0 +1,5 @@
1
+ ## 0.4.2
2
+
3
+ ### Features
4
+
5
+ - Auto-commit prefers rlsbl commit when available, marking commits with Autogenerated trailer for changelog coverage exemption
File without changes
@@ -0,0 +1,7 @@
1
+ {
2
+ "targets": [
3
+ "npm",
4
+ "pypi",
5
+ "docs"
6
+ ]
7
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ ".github/workflows/ci.yml": "cd338ccb3d56298b8b6211ca46de34cde8eda0defdd9c4dde8b6f9ad5e8af51d",
3
+ ".github/workflows/publish.yml": "ff275580a98127104d28ce4a9b2992ce6a30a5d96de9bfcaa1b95bee97e5e2da",
4
+ "CLAUDE.md": "d616e99c7bd5f1d8f03735c14f4cafa7cabac6886e8792f8a3200b04130d45af",
5
+ ".rlsbl/hooks/pre-release.sh": "bb20a1ea350e5ed30ede93498e4aff1d1397eaeb37397d4a7168a7c9006ac1a7",
6
+ ".rlsbl/hooks/post-release.sh": "b455f8511e0b2655509ecf5dcb0ab7da5bb7c961f47910ff8e00cab5bd51f833",
7
+ ".claude/settings.json": "78922a784ee78e9e50587e93628cd3b9d4dfbe49087adc4514e6781cea38cbb9",
8
+ ".gitignore": "93ad7821acce7a08b523cc3cae78af1baf10e049f0d82b12ca2d45497454597e",
9
+ ".rlsbl/hooks/pre-checks.sh": "60c57d4563263124530e6f33aca77550ea2161ad3b33b3ba6ad1c03fea9eb6e2",
10
+ ".rlsbl/lint/python.toml": "9cfbcef2e010d5fad243437bf2fd8df54a1fae70ee0762f9d11da70fe207501c",
11
+ ".rlsbl/lint/go.toml": "807d5cf760baad6d571a5bfd43cb163efe356f7462ba9f1918d72de45f62339f",
12
+ ".rlsbl/lint/npm.toml": "baa36014e65923d8cc5c8b83c77fa651da79351627570476402da66840027645",
13
+ ".rlsbl/changes/unreleased.jsonl": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
14
+ }
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ # This hook runs BEFORE built-in pre-release checks (tests, lint).
4
+ # Use it for setup tasks: starting services, setting env vars, etc.
5
+ # Built-in checks run after this hook. Custom validation goes in pre-release.sh.
@@ -1,8 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # Pre-release validation hook.
3
- # Runs before rlsbl creates a release. Exit non-zero to abort.
4
- # Detects project type and runs appropriate checks automatically.
5
-
6
2
  set -euo pipefail
7
3
 
8
4
  echo "Running pre-release checks..."