Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
c0f1712
docs: Add mdBook feature parity research and implementation plan
AlexMikhalev Aug 8, 2026
82de35d
docs: Add Phase 2.5 specification findings for increment B
AlexMikhalev Aug 8, 2026
06d3362
refactor(pipeline): decompose build into collect/preprocess/render/index
AlexMikhalev Aug 8, 2026
b8accbe
feat(book): SUMMARY.md book model with nested navigation
AlexMikhalev Aug 8, 2026
fe86858
fix(book): address dual-review findings for SUMMARY path safety
AlexMikhalev Aug 8, 2026
965aaeb
feat: CLI subcommands, relocatable output, themes and print (C/D/E)
AlexMikhalev Aug 8, 2026
866e956
fix: address C/D/E dual-review P1 redirect and host findings
AlexMikhalev Aug 8, 2026
cd7bcbc
docs: handover for mdBook parity A–E dual-reviewed stack
AlexMikhalev Aug 8, 2026
e90ec07
fix: relocatable links, book-directory validation and suffix-chapter …
AlexMikhalev Aug 8, 2026
6fb2b34
feat: suppress self-inflicted watch rebuilds, drop nav sentinel, wide…
AlexMikhalev Aug 8, 2026
6eeccae
feat: vendor Shoelace locally and embed default assets (D2)
AlexMikhalev Aug 8, 2026
a500d82
docs: record D2 revision and the include_dir dependency in the plan
AlexMikhalev Aug 8, 2026
e1f45be
fix: make each optional feature carry its own dependencies
AlexMikhalev Aug 8, 2026
23e741b
docs: plan E7 — load mermaid only on pages containing a diagram
AlexMikhalev Aug 8, 2026
7522a73
feat: load mermaid only on pages containing a diagram (E7)
AlexMikhalev Aug 8, 2026
7564c23
fix: real config defaults, html lang, and browser-verified E7
AlexMikhalev Aug 8, 2026
0374f56
feat: theme picker control and unsupported-key warnings
AlexMikhalev Aug 8, 2026
20e20e4
docs: replan the stashed SEO work as increment G
AlexMikhalev Aug 8, 2026
4a83c34
fix: address all findings from structural review round 4
AlexMikhalev Aug 8, 2026
696d30d
fix: build URLs with forward slashes, not platform separators
AlexMikhalev Aug 8, 2026
9776971
fix: escape authored SUMMARY.md text and enable template autoescaping
AlexMikhalev Aug 10, 2026
67e4c1d
fix: escape every URL that templates mark safe
AlexMikhalev Aug 10, 2026
aca695d
feat: complete increment E — syntax themes, additional assets, sideba…
AlexMikhalev Aug 11, 2026
16b5d4f
feat: increment G — page metadata, skip link, search gating
AlexMikhalev Aug 11, 2026
e5523f8
docs: correct increment G note — the stash is superseded, not dropped
AlexMikhalev Aug 11, 2026
3ede392
fix: contain paths to the book directory, not to src/
AlexMikhalev Aug 11, 2026
0e4ffb6
feat: accept mdBook's git-repository-url and edit-url-template
AlexMikhalev Aug 11, 2026
8650326
chore: trigger CI now that the workflow is enabled
AlexMikhalev Aug 11, 2026
89b4974
fix: four defects that only CI could find
AlexMikhalev Aug 11, 2026
388128b
fix: consistent CLI contract without tokio, and an environment-depend…
AlexMikhalev Aug 11, 2026
6461246
fix: address security advisories and Windows test portability
AlexMikhalev Aug 11, 2026
d38740e
test: compare book paths as URLs, not OS paths
AlexMikhalev Aug 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .agent/handoffs/2026-08-08-mdbook-parity-a.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Handover: mdBook parity A–E

**Date**: 2026-08-08
**Branch**: `task/2-summary-book-model`
**PRs**: Gitea #7, GitHub #27 (A-only was #6/#26)

## Completed
- A: pipeline decomposition (byte-identical)
- B: SUMMARY.md book model + dual-review security fixes
- C: CLI subcommands + path resolution
- D: path_to_root, heading IDs, 404, code-copy
- E: themes, keyboard, print, redirects

## Known gaps (plan-explicit or deferred)
- Full Shoelace vendor (CDN still used for Shoelace)
- Fold interactive collapse UI (config present)
- additional-css/js file copy (config keys present; inject partial)
- P2 {{#include}} preprocessing
- Increment F pulldown-cmark

## Unrelated stash
`git stash list` may still hold SEO/template WIP — do not drop.

## Resume
1. Merge PR #7 after CI
2. Close Gitea issues #1–#5
3. Optional: vendor Shoelace, wire additional-css/js fully, fold JS
38 changes: 38 additions & 0 deletions .agent/sessions/2026-08-08-mdbook-parity-a.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Session Start: mdBook parity Increment A

**Date**: 2026-08-08
**UTC Start**: 09:52:25 UTC
**Change Slug**: mdbook-parity-a
**Branch**: task/1-pipeline-decomposition
**Scope**: Increment A — decompose build pipeline into collect/preprocess/render/index
**Linked Issue**: https://git.terraphim.cloud/terraphim/md-book/issues/1

## Repository Context
- Current branch: task/1-pipeline-decomposition (from main @ 82de35d)
- Recent commits: docs for parity research/plan/spec findings
- Working tree: clean for A; unrelated SEO/template WIP stashed as stash@{0}
- Relevant artefacts: docs/plans/mdbook-parity-{research,implementation-plan}.md

## Planned Artifact Chain
- Research: docs/plans/mdbook-parity-research.md (done)
- Design: docs/plans/mdbook-parity-implementation-plan.md (done, approved)
- Spec: Phase 2.5 findings for B appended to plan (A has no separate spec)
- Verification: docs/verification/verification-report-mdbook-parity-a.md
- Validation: docs/validation/validation-report-mdbook-parity-a.md
- Review: docs/plans/review-mdbook-parity-a.md
- Handover: .agent/handoffs/2026-08-08-mdbook-parity-a.md

## Subtasks
1. [M] A1 Extract stages into pipeline/ + render/
2. [S] A2 Preprocess identity seam
3. [S] A3 Baseline benchmark / byte-identical gate
4. [S] Verification + PR

## Risks and Blockers
- Zoned::now() year in templates may affect byte compare across year boundary only
- Pagefind index may be non-deterministic; compare HTML excluding pagefind/
- Unrelated WIP stashed — do not drop stash

## Notes
- Research/design already approved; skip re-research
- Zero behaviour change is the gate
15 changes: 15 additions & 0 deletions .cargo/audit.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# cargo-audit configuration.
#
# Ignores are last-resort and each needs a reason and an exit route. Prefer
# updating the dependency; only list an advisory here when the fix sits behind
# an upstream release we do not control.

[advisories]
ignore = [
# quick-xml <0.41 reached only through syntect -> plist, which parses the
# syntax and theme definitions md-book ships, never user input. The fix
# needs plist to take a semver-major bump of quick-xml; revisit when
# syntect releases against plist >=2.
"RUSTSEC-2026-0194", # quadratic parse time on duplicate attribute names
"RUSTSEC-2026-0195", # unbounded namespace-declaration allocation
]
19 changes: 17 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,19 @@ jobs:

- name: Run integration tests
run: cargo test --test integration --features "tokio,search,syntax-highlighting"


- name: Run structural conformance tests
run: cargo test --test structure --features "tokio,search,syntax-highlighting"

- name: Run mdBook compatibility tests
run: |
cargo test --test mdbook_compatibility --features "tokio,search,syntax-highlighting"
cargo test --test mdbook_test_book --features "tokio,search,syntax-highlighting"

- name: Run end-to-end tests
run: cargo test --test e2e
run: |
cargo test --test e2e
cargo test --test mdbook_e2e --features "tokio,search,syntax-highlighting"
env:
RUST_LOG: debug

Expand Down Expand Up @@ -173,6 +183,11 @@ jobs:
features:
- "default"
- "server,watcher,search,syntax-highlighting"
# Single-feature builds: each optional feature must carry its own
# dependencies rather than relying on another feature to supply them
- "search,syntax-highlighting"
- "watcher"
- "core"
- "wasm-core"

steps:
Expand Down
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,12 @@ yarn-error.log*
# Temporary files
tmp/
temp/
test_*
# Build scratch directories, not test inputs. The bare `test_*` this replaces
# also matched tests/assets/test_book_1, so that fixture was never committed
# and the structure suite passed only on machines that happened to have it.
/test_*/
!/test_book_mdbook/
!tests/assets/**

# Test output
test-results/
Expand Down
Loading
Loading