Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Fixed

  • FootnoteId changed to numeric type for correct sorting (WI-2026-02-27-001)

[0.1.0] - 2026-02-23

Added

  • Draft RFC defining create-vs-update decision and idempotency semantics (WI-2026-02-11-014)
  • Specify conflict/retry behavior and status persistence requirements for republish (WI-2026-02-11-014)
  • CopyPasteAdapter with CopyFormat enum and KNOWN_PROFILES table (WI-2026-02-11-021)
  • 10 initial platform profiles (5 StyledHtml + 5 Markdown) (WI-2026-02-11-021)
  • type=manual custom platform support in registry (WI-2026-02-11-021)
  • profiles.toml with all 10 built-in copy-paste profiles (WI-2026-02-11-022)
  • build.rs generates BUILTIN_PROFILES static array from profiles.toml (WI-2026-02-11-022)
  • Add commented # enabled = false example in config.template.toml (WI-2026-02-11-023)
  • 14 new copypaste profiles (5 html + 9 markdown) (WI-2026-02-12-002)
  • HashNode adapter module with GraphQL API integration (WI-2026-02-12-003)
  • HashNode registered in AdapterRegistry with capability entry (WI-2026-02-12-003)
  • StorageConfig accessible via PublishContext per RFC-0004:C-STORAGE-CONFIG (WI-2026-02-12-005)
  • materialize_payload uploads External assets to S3 per RFC-0004:C-PIPELINE-INTEGRATION (WI-2026-02-12-005)
  • Asset references replaced with remote URLs in payload (WI-2026-02-12-005)
  • RFC-0002 v0.3.0 defines 9-stage AST-centric pipeline (WI-2026-02-12-006)
  • RFC-0004 v0.3.0 updates C-PIPELINE-INTEGRATION for AST modification (WI-2026-02-12-006)
  • AdapterPayload carries AST (Vec<HtmlElement>) not strings (WI-2026-02-12-006)
  • Materialize stage modifies AST nodes (ImageMarkerImage) (WI-2026-02-12-006)
  • Serialize trait method added to PlatformAdapter (WI-2026-02-12-006)
  • Shared resolve_asset_urls() modifies AST in Materialize (WI-2026-02-12-007)
  • Hashnode/Devto implement serialize_payload (AST→Markdown) (WI-2026-02-12-007)
  • WordPress implements serialize_payload (AST→HTML) (WI-2026-02-12-007)
  • Notion implements serialize_payload (AST→blocks) (WI-2026-02-12-007)
  • Confluence implements serialize_payload (AST→storage format) (WI-2026-02-12-007)
  • Attrs type alias and attrs field on all HtmlElement variants for HTML attribute preservation (WI-2026-02-12-008)
  • Helper constructors (paragraph_text, heading_text, etc.) for simplified element creation (WI-2026-02-12-008)
  • Add subst crate dependency with toml feature (WI-2026-02-12-013)
  • PlatformConfig::get_str() expands ${VAR} syntax (WI-2026-02-12-013)
  • StorageConfig fields support ${VAR} expansion (WI-2026-02-12-013)
  • Ghost adapter module with client, types, and tests (WI-2026-02-12-015)
  • Support Admin API for post CRUD (WI-2026-02-12-015)
  • Support tags and internal links (WI-2026-02-12-015)
  • publishAs field in GraphQL mutations (WI-2026-02-12-017)
  • DraftSupport enum and extend AdapterCapability (WI-2026-02-12-018)
  • published field to Config, PlatformConfig, ContentMeta, PostPlatformConfig (WI-2026-02-12-018)
  • resolve_published() with 5-level fallback chain (WI-2026-02-12-018)
  • data integrity guard for remote_status (WI-2026-02-12-018)
  • determine_lifecycle_action() implementing decision table (WI-2026-02-12-018)
  • Hashnode adapter lifecycle support with publishDraft mutation (WI-2026-02-12-018)
  • Dev.to, Ghost, WordPress, Confluence adapter lifecycle support (WI-2026-02-12-018)
  • Refactor status command to use comfy-table tabular view (WI-2026-02-12-020)
  • TUI module with ratatui (feature-gated) (WI-2026-02-12-020)
  • Post list view with navigation (WI-2026-02-12-020)
  • Post detail view with platform statuses (WI-2026-02-12-020)
  • Inline HTML preview using html2text (WI-2026-02-12-020)
  • Publish action with progress display (WI-2026-02-12-020)
  • Watch command auto-opens preview when platform specified (WI-2026-02-12-022)
  • Extract SVG elements from Typst HTML output (WI-2026-02-12-026)
  • Upload math SVG as Confluence attachments with content-hash naming (WI-2026-02-12-026)
  • Replace inline SVG with ac:image references in Confluence format (WI-2026-02-12-026)
  • Cache uploaded SVGs in asset_uploads table to avoid duplicates (WI-2026-02-12-026)
  • Support inline vs block math styling (WI-2026-02-12-026)
  • Notion math formula support via equation blocks (WI-2026-02-12-027)
  • Create preview_single_platform function as pipeline assembler (WI-2026-02-12-029)
  • Add prepare_preview_elements and build_preview to PlatformAdapter trait (WI-2026-02-12-029)
  • Validate assets are within project root (WI-2026-02-12-030)
  • 4 new theme CSS files (wechat-green, dark, notion, github) (WI-2026-02-13-001)
  • 5-level theme resolution chain (WI-2026-02-13-001)
  • default_theme field in profiles.toml (WI-2026-02-13-001)
  • Themes embedded at compile time via build.rs with user override support (WI-2026-02-13-001)
  • internal_link_target field in ContentMeta, PostPlatformConfig, Config, PlatformConfig (WI-2026-02-13-002)
  • resolve_href_for_copypaste and resolve_internal_link_target functions in internal_links.rs (WI-2026-02-13-002)
  • get_first_published_url in StatusTracker for alphabetical platform selection (WI-2026-02-13-002)
  • Unit tests for copypaste internal link resolution (WI-2026-02-13-002)
  • ResolvedConfig struct with all resolvable fields (WI-2026-02-13-003)
  • ResolvedConfig::resolve() implements 4-level chain for all fields (WI-2026-02-13-003)
  • Unit tests for ResolvedConfig resolution (WI-2026-02-13-003)
  • TransformRule enum with enumset for declarative AST transforms (WI-2026-02-13-006)
  • SerializeOptions with li_span_wrap flag in serialize.rs (WI-2026-02-13-006)
  • CopyPaste adapter supports AssetStrategy::External (WI-2026-02-13-007)
  • External assets replaced with storage URLs in output (WI-2026-02-13-007)
  • i18n module with Locale enum and t() function (WI-2026-02-13-008)
  • Locale detection from LANG/LC_ALL environment variable (WI-2026-02-13-008)
  • Chinese and English translations for preview UI strings (WI-2026-02-13-008)
  • Sorting module with SortField/SortOrder enums and sort function (WI-2026-02-13-009)
  • PostFilter struct with platform/status/tag/title_regex predicates (WI-2026-02-13-009)
  • TUI interactive sort with s/S keys (WI-2026-02-13-009)
  • Command aliases: ls for list, pub for publish, b for build, w for watch, pre for preview (WI-2026-02-13-009)
  • Short flags for list options (-s sort, -p platform, -t tag, -T title, -P published, -u pending) (WI-2026-02-13-009)
  • Short flag -d for publish –dry-run (WI-2026-02-13-009)
  • long_about and after_help with examples for list and publish commands (WI-2026-02-13-009)
  • Main CLI after_help with common workflows (WI-2026-02-13-009)
  • Adaptive compact platform display with short codes when table exceeds terminal width (WI-2026-02-13-009)
  • Platform short codes for known platforms (gh, wp, nt, etc.) with numbered fallback (p1, p2) for custom (WI-2026-02-13-009)
  • Legend printed after table in compact mode (WI-2026-02-13-009)
  • Create adapters.toml with 8 API adapters including short_code and local_output fields (WI-2026-02-13-010)
  • Add short_code field to all profiles in profiles.toml (WI-2026-02-13-010)
  • Update build.rs to generate builtin_adapters.rs from adapters.toml (WI-2026-02-13-010)
  • Create docs/guide/platforms/ directory structure (WI-2026-02-13-013)
  • Ghost platform guide with API key instructions (WI-2026-02-13-013)
  • Dev.to platform guide with API key instructions (WI-2026-02-13-013)
  • Notion platform guide with API key instructions (WI-2026-02-13-013)
  • WeChat platform guide (Chinese) (WI-2026-02-13-013)
  • Zhihu platform guide (Chinese) (WI-2026-02-13-013)
  • CSDN platform guide (Chinese) (WI-2026-02-13-013)
  • ADR-0001 accepted: dual storage + code_highlight capability (WI-2026-02-13-015)
  • code_highlight field in adapters.toml and profiles.toml (WI-2026-02-13-015)
  • CodeBlock stores both plain text and highlighted HTML (WI-2026-02-13-015)
  • Tests for inline and block math in Markdown (WI-2026-02-13-017)
  • Create typub-core subcrate with 6 capability enums and ThemeId newtype (WI-2026-02-13-018)
  • Create typub-html subcrate with html_utils modules (WI-2026-02-13-019)
  • workspace.package with common metadata (WI-2026-02-13-020)
  • MIT LICENSE file (WI-2026-02-13-020)
  • release.toml configuration (WI-2026-02-13-020)
  • Ghost image upload via /images/upload endpoint (WI-2026-02-13-023)
  • Ghost materialize_payload handles Upload strategy (WI-2026-02-13-023)
  • default_asset_strategy field to profiles.toml with fallback to embed (WI-2026-02-13-024)
  • Wire field through build.rs and BuiltinProfile struct (WI-2026-02-13-024)
  • MathRendering::Png variant in typub-core (WI-2026-02-13-026)
  • svg_to_png() function using resvg (WI-2026-02-13-026)
  • HTML serialization outputs PNG img tags (WI-2026-02-13-026)
  • ModelScope profile uses math_rendering=png (WI-2026-02-13-026)
  • RFC drafted with normative clauses for AdapterRegistrar API (WI-2026-02-14-003)
  • RFC specifies capability registration and lookup order (WI-2026-02-14-003)
  • RFC specifies backward compatibility constraints (WI-2026-02-14-003)
  • RFC drafted with crate boundary specifications (WI-2026-02-14-004)
  • RFC specifies shared adapter types crate (WI-2026-02-14-004)
  • RFC specifies migration path from current layout (WI-2026-02-14-004)
  • typub-adapters-core crate exists in crates/ (WI-2026-02-14-005)
  • typub-config crate exists in crates/ (WI-2026-02-14-005)
  • typub-storage crate exists in crates/ (WI-2026-02-14-005)
  • PlatformAdapter trait defined in typub-adapters-core (WI-2026-02-14-005)
  • AdapterRegistrar implemented per RFC-0006 (WI-2026-02-14-005)
  • typub-adapter-ghost crate extracted (WI-2026-02-14-006)
  • typub-adapter-notion crate extracted (WI-2026-02-14-006)
  • all 9 adapter crates extracted with register() functions (WI-2026-02-14-006)
  • feature gates configured per RFC-0007:C-FEATURE-GATES (WI-2026-02-14-006)
  • Create typub-log crate with tracing foundation (WI-2026-02-14-009)
  • Implement CliLayer for CLI-formatted output (WI-2026-02-14-009)
  • Define ProgressReporter trait in typub-log (WI-2026-02-14-009)
  • Unit tests and mock tests for Notion adapter core behaviors (WI-2026-02-14-012)
  • Unit tests and mock tests for Ghost adapter core behaviors (WI-2026-02-15-001)
  • Preview integration coverage maintained for Ghost adapter (WI-2026-02-15-001)
  • Add register() function in config.rs per RFC-0006 (WI-2026-02-15-002)
  • Unit tests for registration, asset strategy, render config, config validation, trait methods (WI-2026-02-15-002)
  • Preview snapshot integration test for WordPress adapter (WI-2026-02-15-002)
  • PNG math images upload for Upload/External strategies (WI-2026-02-17-001)
  • Confluence adapter uploads PNG math as attachments (WI-2026-02-17-001)
  • CopyPaste adapter with External strategy uploads PNG math (WI-2026-02-17-001)
  • math_rendering and math_delimiters fields in PlatformConfig (WI-2026-02-17-002)
  • supported_math_renderings in AdapterCapability (WI-2026-02-17-002)
  • resolve_math_rendering_from_config helper with validation (WI-2026-02-17-002)
  • ImageMarker display attribute for inline/block distinction (WI-2026-02-17-002)
  • Confluence PNG math support for inline and block (WI-2026-02-17-002)
  • InlineFragment::ImageMarker variant (WI-2026-02-17-003)
  • Astro adapter outputs Markdown with front-matter (WI-2026-02-17-004)
  • New static adapter generates standalone HTML (WI-2026-02-17-004)
  • –assets flag added to status command (WI-2026-02-17-005)
  • asset uploads displayed in table format when flag is set (WI-2026-02-17-005)
  • Add requires_config field to AdapterCapability (WI-2026-02-18-001)
  • Update all adapters with requires_config value (WI-2026-02-18-001)
  • Modify AdapterRegistry to auto-register platforms without config requirement (WI-2026-02-18-001)
  • Add helper methods default_xxx() for slices (WI-2026-02-18-002)
  • Strikethrough node type supported in content model (WI-2026-02-18-003)
  • Markdown renderer outputs text for strikethrough (WI-2026-02-18-003)
  • ListItem struct with recursive children field for nested list support (WI-2026-02-18-004)
  • TaskItem struct with checked field for task list support (WI-2026-02-18-004)
  • DefinitionItem struct for definition list (dl/dt/dd) support (WI-2026-02-18-004)
  • TableCell struct with colspan, rowspan, and align fields (WI-2026-02-18-004)
  • New inline fragments (Underline, Mark, Superscript, Subscript, Kbd, LineBreak) (WI-2026-02-18-004)
  • HTML parser handles nested ul/ol within li elements (WI-2026-02-18-004)
  • HTML parser handles task lists and definition lists (WI-2026-02-18-004)
  • Markdown renderer outputs correct nested list indentation (WI-2026-02-18-004)
  • All adapters updated with fallback handling for new types (WI-2026-02-18-004)
  • Parse block SVG as Paragraph with Svg fragment (WI-2026-02-19-002)
  • Add is_svg_block helper in adapters-core (WI-2026-02-19-002)
  • Create TextStyle enum and unify styled variants into InlineFragment::Styled (WI-2026-02-19-004)
  • Add convenience constructors (bold, italic, etc.) to InlineFragment (WI-2026-02-19-004)
  • Implement –debug-stage CLI option (WI-2026-02-19-005)
  • Support all pipeline stages: resolve, render, parse, transform, specialize, provision, materialize, serialize, publish, persist (WI-2026-02-19-005)
  • Dry-run mode copies assets to temp dir instead of skipping upload (WI-2026-02-19-006)
  • InlineFragment::Image has local_path: Option<PathBuf> field (WI-2026-02-20-001)
  • resolve_preview_image_paths() function in typub-html/transform.rs (WI-2026-02-20-001)
  • dev server serves /__asset__/* paths for preview images (WI-2026-02-20-001)
  • Add Details element to HtmlElement enum with summary and children (WI-2026-02-21-001)
  • Parse HTML details/summary elements (WI-2026-02-21-001)
  • Serialize Details to HTML (WI-2026-02-21-001)
  • Render Details in Markdown renderer (WI-2026-02-21-001)
  • Define and adopt AST v2 schema with typed attrs plus passthrough (WI-2026-02-21-004)
  • Remove ImageMarker/local_path execution semantics from core AST (WI-2026-02-21-004)
  • Introduce v2 core IR types in typub-html and make them the single source of truth for conformance serialization (WI-2026-02-21-004)
  • Support user-defined Typst preamble with layered resolution (WI-2026-02-22-001)
  • Preserve adapter defaults while allowing user preamble override/append behavior (WI-2026-02-22-001)

Changed

  • Clarify strict pipeline stage semantics in RFC-0002 (WI-2026-02-11-001)
  • Tighten status correctness and reconciliation wording (WI-2026-02-11-001)
  • Existing adapters implement stage-4 finalization and stage-5 publish hooks (WI-2026-02-11-002)
  • Pipeline execution no longer relies on legacy adapter fallback path (WI-2026-02-11-002)
  • Devto and WordPress split stage-4 payload finalization from stage-5 publish calls (WI-2026-02-11-003)
  • Notion and Confluence remove monolithic publish wrappers in favor of staged hooks (WI-2026-02-11-003)
  • PlatformAdapter trait removes monolithic publish method (WI-2026-02-11-004)
  • All adapters publish only via finalize_payload and publish_payload (WI-2026-02-11-004)
  • Stage-3 shared transforms execute in pipeline module (WI-2026-02-11-005)
  • Devto/WordPress remove duplicate adapter-local internal-link rewrite (WI-2026-02-11-005)
  • PublishResult URL is optional and status persistence handles absent URL (WI-2026-02-11-006)
  • Notion opts into shared stage-3 link rewrite and removes duplicate adapter-local rewrite (WI-2026-02-11-006)
  • Astro finalize_payload performs stage-4 shaping (assets+themed body) (WI-2026-02-11-007)
  • WeChat and Xiaohongshu finalize_payload are non-empty and carry publish-ready payload (WI-2026-02-11-007)
  • Remove default empty finalize_payload so every adapter must implement stage-4 (WI-2026-02-11-008)
  • Adapter capability matrix includes per-gap behavior semantics (warn+degrade vs hard error) (WI-2026-02-11-008)
  • CLI taxonomy compatibility warnings derive from capability gap policy (WI-2026-02-11-008)
  • Stage-3 runtime enforces internal-link unsupported behavior from capability policy (WI-2026-02-11-009)
  • Internal-link detection utility provides machine-checkable target discovery from rendered HTML (WI-2026-02-11-009)
  • Remove trait-level process_assets hook and keep stage-4 asset handling inside finalize_payload (WI-2026-02-11-010)
  • WordPress taxonomy remote-id shaping is moved into stage-4 finalize payload (WI-2026-02-11-010)
  • Remove dead internal-link fallback branches in Notion/Confluence when shared rewrite is enabled (WI-2026-02-11-010)
  • RFC-0002 pipeline stages define optional remote asset materialization stage between finalize and publish (WI-2026-02-11-011)
  • pipeline implementation comments align stage numbering with updated RFC contract (WI-2026-02-11-011)
  • RFC-0002:C-PIPELINE-STAGES lists short names for all seven stages (WI-2026-02-11-012)
  • RFC-0002:C-PIPELINE-STAGES uses one-word stage names suitable for code identifiers (WI-2026-02-11-013)
  • src/pipeline.rs stage comments use same one-word names as RFC (WI-2026-02-11-013)
  • RFC-0003 decision order prioritizes remote-id then deterministic platform key; cached URL is hint-only (WI-2026-02-11-015)
  • RFC-0003 mandates duplicate-create rejection as conflict (WI-2026-02-11-015)
  • Adapters prefer status remote-id as update target before deterministic lookup fallback (WI-2026-02-11-016)
  • Create path runs only after duplicate-safe precheck per adapter (WI-2026-02-11-016)
  • Extract RenderedOutput::html() helper to eliminate 12x duplicate error check (WI-2026-02-11-018)
  • Extract downcast_payload helper to eliminate 7x duplicate downcast boilerplate (WI-2026-02-11-018)
  • Extract Notion create_page_with_blocks helper to eliminate 3x block-split copy-paste (WI-2026-02-11-018)
  • Remove Notion elements_to_blocks duplication of Paragraph/ParagraphRich handling (WI-2026-02-11-018)
  • Remove dead Confluence elements_to_confluence_html indirection (WI-2026-02-11-018)
  • Use shared mime_type_from_path in Notion and Confluence instead of hand-rolled maps (WI-2026-02-11-018)
  • Extract CapabilitySupport::gap_behavior method to replace 3x copy-paste (WI-2026-02-11-018)
  • Replace module-level allow(dead_code) with targeted annotations (WI-2026-02-11-018)
  • add materialize_payload to PlatformAdapter trait with default pass-through (RFC-0002 Stage 5) (WI-2026-02-11-019)
  • wire Stage 5 materialize call in pipeline.rs between finalize and publish (WI-2026-02-11-019)
  • WordPress finalize_payload no longer makes remote API calls; tag/category resolution and asset upload moved to materialize_payload (C1) (WI-2026-02-11-019)
  • WordPress create_post and update_post merged into upsert_post (N3) (WI-2026-02-11-019)
  • WordPress auth-check pattern extracted to http_utils::ensure_success_with_auth_hint (N4) (WI-2026-02-11-019)
  • Dev.to adds title-based lookup fallback per RFC-0003 (C2) (WI-2026-02-11-019)
  • WeChat regex compilation uses LazyLock statics (N5) (WI-2026-02-11-019)
  • preview boilerplate extracted to shared helpers (C5) (WI-2026-02-11-019)
  • AdapterRegistry only constructs enabled adapters (C6) (WI-2026-02-11-019)
  • WordPress slug resolution extracted to helper (L1) (WI-2026-02-11-020)
  • Xiaohongshu preview uses write_preview_file (L5) (WI-2026-02-11-020)
  • AdapterRegistry error message clarified (L6) (WI-2026-02-11-020)
  • WeChat adapter migrated to CopyPasteProfile entry (WI-2026-02-11-021)
  • copypaste.rs uses generated code instead of hand-written KNOWN_PROFILES (WI-2026-02-11-022)
  • Rename enabled_platforms() to default_platforms() with updated semantics (WI-2026-02-11-023)
  • Specialize stages collect metadata only, no string serialization (WI-2026-02-12-007)
  • All HtmlElement text-bearing variants use Vec<InlineFragment> directly (removed plain/Rich split) (WI-2026-02-12-008)
  • InlineFragment::Link uses fragments Vec instead of text String for nested inline support (WI-2026-02-12-008)
  • HTML/Markdown/Notion/Confluence serializers updated for unified variants (WI-2026-02-12-008)
  • WordPress adapter split into wordpress/{mod,types,client,tests}.rs (WI-2026-02-12-012)
  • Hashnode adapter split into hashnode/{mod,types,client,tests}.rs (WI-2026-02-12-012)
  • DevTo adapter split into devto/{mod,types,client,tests}.rs (WI-2026-02-12-012)
  • Stage 7/8 adapter payload typing failures fail fast instead of defaulting to empty values (WI-2026-02-12-014)
  • Unify InlineSvg and Svg into single Svg type with inline attr (WI-2026-02-12-027)
  • Deduplicate HTML parsing logic in html_utils (WI-2026-02-12-027)
  • Notion API upgraded to 2025-09-03 (WI-2026-02-12-028)
  • Add PipelineMode enum to distinguish preview/publish contexts (WI-2026-02-12-029)
  • Extract shared pipeline stages into reusable functions (WI-2026-02-12-029)
  • Update all adapters to implement new trait methods (WI-2026-02-12-029)
  • Update cmd_preview to use preview_single_platform (WI-2026-02-12-029)
  • Rename config.toml to typub.toml in CLI default (WI-2026-02-12-030)
  • Update all source references from config.toml to typub.toml (WI-2026-02-12-030)
  • Store asset paths as relative to project root in status.db (WI-2026-02-12-030)
  • Extract inline CSS from adapters to _preview-*.css files (WI-2026-02-13-001)
  • UI/UX refinement of existing themes (WI-2026-02-13-001)
  • CopyPaste adapter enables shared link rewrite (supports_shared_link_rewrite -> true) (WI-2026-02-13-002)
  • Pipeline uses copypaste-specific resolution for copypaste platforms (WI-2026-02-13-002)
  • Config structure flattened - removed [general] section, content_dir/output_dir at root (WI-2026-02-13-002)
  • Remove standalone resolve_* functions, use ResolvedConfig (WI-2026-02-13-003)
  • Pipeline and adapters use ResolvedConfig instead of ad-hoc resolution (WI-2026-02-13-003)
  • compat_fn signature takes AST elements instead of HTML string (WI-2026-02-13-006)
  • Update all compat functions to operate on HtmlElement (WI-2026-02-13-006)
  • copypaste.rs and xiaohongshu.rs use i18n::t() for UI strings (WI-2026-02-13-008)
  • list command shows compact table with sort/filter/limit flags (WI-2026-02-13-009)
  • status command requires path and shows detailed single-post info (WI-2026-02-13-009)
  • crossterm moved to unconditional dependency for terminal width detection (WI-2026-02-13-009)
  • Update AdapterCapability and BuiltinProfile structs with short_code (WI-2026-02-13-010)
  • platform_short_code() uses generated data instead of hardcoded match (WI-2026-02-13-010)
  • is_local_output_platform() uses local_output field from adapters.toml (WI-2026-02-13-010)
  • build-book.sh for dynamic SUMMARY.md generation (WI-2026-02-13-013)
  • Convert root Cargo.toml to workspace with typub-core as member (WI-2026-02-13-018)
  • build.rs uses typed enums from typub-core instead of String fields (WI-2026-02-13-018)
  • Main crate re-exports enums from typub-core, preserving existing import paths (WI-2026-02-13-018)
  • Replace raw String theme fields with ThemeId newtype (WI-2026-02-13-018)
  • Add workspace.dependencies for unified version management (WI-2026-02-13-019)
  • All crates use workspace = true for shared dependencies (WI-2026-02-13-019)
  • Main crate re-exports typub_html as html_utils for path compatibility (WI-2026-02-13-019)
  • internal crates use version in workspace.dependencies (WI-2026-02-13-020)
  • all crates inherit workspace metadata (WI-2026-02-13-020)
  • Remove copy strategy from devto and wordpress adapters.toml (WI-2026-02-13-023)
  • Update CopyPasteAdapter to use per-profile default (WI-2026-02-13-024)
  • Ghost adapter reorganized into adapter/config/model modules following Notion exemplar (WI-2026-02-15-001)
  • WordPress adapter reorganized into adapter/config/model modules following Notion exemplar (WI-2026-02-15-002)
  • Centralize asset strategy resolution in main crate to a single path (WI-2026-02-15-004)
  • Eliminate duplicate internal_link_target resolution by routing through ResolvedConfig (WI-2026-02-15-004)
  • Use config-based project root for renderer instead of cwd (WI-2026-02-15-005)
  • Split pipeline module into stage-focused submodules without behavior changes (WI-2026-02-15-005)
  • Eliminate any remaining duplicate resolution logic in main crate (WI-2026-02-15-005)
  • Remove pure re-export config module and update imports (WI-2026-02-15-006)
  • Remove main-crate re-export-only aliases where unused (WI-2026-02-15-006)
  • TUI is enabled by default; typub-tui remains a standalone crate; typub-ui owns i18n (WI-2026-02-15-007)
  • Core build pipeline moved into typub-engine crate (WI-2026-02-15-007)
  • Update engine/tui/cli usages to new crate/module layout (WI-2026-02-15-008)
  • Remove display field from HtmlElement::ImageMarker (WI-2026-02-17-003)
  • convert_svg_to_png_markers generates correct marker types (WI-2026-02-17-003)
  • Recursive traversal in build_pending_asset_list_from_elements (WI-2026-02-17-003)
  • Recursive resolution in resolve_asset_urls (WI-2026-02-17-003)
  • Change BuiltinProfile asset_strategy to asset_strategies slice (WI-2026-02-18-002)
  • Change BuiltinProfile math_rendering to math_renderings slice (WI-2026-02-18-002)
  • Change BuiltinProfile math_delimiters to math_delimiters slice (WI-2026-02-18-002)
  • Standalone parses as Paragraph with single InlineImage (WI-2026-02-19-001)
  • Inline SvgInfo fields into InlineFragment::Svg variant (WI-2026-02-19-003)
  • Update all pattern matching to use unified Styled variant (WI-2026-02-19-004)
  • Update RFC-0008 to reflect unified styling approach (WI-2026-02-19-004)
  • convert_svg_to_png_markers uses relative paths instead of absolute (WI-2026-02-20-001)
  • preview_single_platform calls resolve_preview_image_paths after Specialize (WI-2026-02-20-001)
  • TransformRule renamed to SerializeRule in typub-html (WI-2026-02-21-002)
  • transform_rules renamed to serialize_rules in profiles.toml (WI-2026-02-21-002)
  • code_highlight derived from format instead of stored as field (WI-2026-02-21-002)
  • Pipeline transform/materialize/serialize stages run on v2 IR only with no legacy compatibility adapter layer (WI-2026-02-21-004)
  • Parser emits v2 Document directly; legacy HtmlElement/InlineFragment/ImageMarker constructors are removed from parse path (WI-2026-02-21-004)
  • typub-adapters-core and all first-party adapters compile and publish from v2 IR types (WI-2026-02-21-004)

Removed

  • Unused SVG hash/upload code from Confluence adapter (WI-2026-02-12-027)
  • Hashnode Copy strategy code path (not in supported list) (WI-2026-02-13-025)
  • Hashnode Embed strategy code path (not in supported list) (WI-2026-02-13-025)
  • Remove HtmlElement::Image and HtmlElement::ImageMarker variants (WI-2026-02-19-001)
  • Remove HtmlElement::Svg variant (WI-2026-02-19-002)
  • HTML file:// URL rewriting code from dev_server (WI-2026-02-20-001)
  • Remove legacy AST definitions and fallback conversion utilities after adapter migration completes (WI-2026-02-21-004)

Fixed

  • WeChat wechat_compat produces valid HTML for unstyled strong/em tags (WI-2026-02-11-018)
  • Notion find_existing_page propagates errors instead of swallowing them (WI-2026-02-11-018)
  • Notion and Confluence _ctx parameter renamed to ctx where used (N1) (WI-2026-02-11-019)
  • Notion check_status no longer mutates database schema (N2) (WI-2026-02-11-019)
  • Confluence check_status implemented using find_page_by_title (C3) (WI-2026-02-11-019)
  • Dev.to rejects asset_strategy=upload at config time (C4) (WI-2026-02-11-019)
  • Dev.to publish_payload uses title lookup when no cached ID (M1, RFC-0003) (WI-2026-02-11-020)
  • WeChat preview uses extract_preview_body for image rewriting (M2) (WI-2026-02-11-020)
  • Xiaohongshu preview logs warning on copy failure (M3) (WI-2026-02-11-020)
  • Dev.to find_article_by_title uses api_url helper (L2) (WI-2026-02-11-020)
  • http_utils ensure_success_with_auth_hint propagates body read errors (L3) (WI-2026-02-11-020)
  • WeChat outdated comment corrected (L4) (WI-2026-02-11-020)
  • watch command respects –platform flag and falls back to default platforms (WI-2026-02-11-025)
  • watch rebuilds for each target platform, not just astro (WI-2026-02-11-025)
  • Confluence materialize rewrites ImageMarker to Image in AST before serialize (WI-2026-02-12-009)
  • Notion upload materialize rewrites ImageMarker to Image in AST and blocks serialize reads resolved nodes (WI-2026-02-12-009)
  • Confluence and Notion materialize fail fast on asset upload errors and stop before serialize (WI-2026-02-12-009)
  • Deferred pending assets are built from AST ImageMarker references for deferred strategies (WI-2026-02-12-009)
  • Confluence serialize removes AST-HTML-AST round trip and remains AST-centric (WI-2026-02-12-011)
  • Shared adapter helper enforces unresolved ImageMarker guard before deferred serialize (WI-2026-02-12-011)
  • Adapter code organization aligns around pure formatter modules and stage-oriented payload flow (WI-2026-02-12-011)
  • Hashnode slug lookup propagates non-not-found errors instead of silently creating duplicates (WI-2026-02-12-014)
  • Confluence attachment materialization uses server-returned attachment title for rendered references (WI-2026-02-12-014)
  • External strategy triggers image_as_marker (WI-2026-02-12-016)
  • Local-output platforms show dash instead of pending (WI-2026-02-12-021)
  • TUI preview uses selected platform (WI-2026-02-12-021)
  • Output directory uses platform ID as subdirectory (WI-2026-02-12-022)
  • Math equations render as SVG in HTML output (WI-2026-02-12-023)
  • Markdown TeX math renders as SVG in HTML output (WI-2026-02-12-024)
  • Confluence republish updates existing attachments (WI-2026-02-12-025)
  • StorageConfig correctly merges global and per-platform config (WI-2026-02-13-003)
  • Remove .content wrapper from theme CSS and themes.rs (WI-2026-02-13-006)
  • WeChat preview output has no unsupported div/section tags (WI-2026-02-13-006)
  • Inline math renders inline in wechat preview (WI-2026-02-13-011)
  • External asset strategy resolves images correctly for zhihu (WI-2026-02-13-012)
  • Copy-paste HTML platforms preserve syntax highlighting (WI-2026-02-13-015)
  • LaTeX backslashes not double-escaped in Markdown output (WI-2026-02-13-017)
  • packages/math-to-string.typ created during init (WI-2026-02-13-021)
  • renderer ensures math-to-string.typ exists before compile (WI-2026-02-13-021)
  • Extra blank lines between list items removed (WI-2026-02-13-022)
  • Verify zero behavioral change for existing profiles (WI-2026-02-13-024)
  • Pipeline uses lifecycle action to determine correct remote_status (WI-2026-02-13-025)
  • build_preview default uses pipeline elements (WI-2026-02-14-002)
  • preview() method removed from trait (WI-2026-02-14-002)
  • src/adapters/{adapter}/ directories removed (WI-2026-02-14-007)
  • hardcoded factory array removed from AdapterRegistry::new() (WI-2026-02-14-007)
  • Adapter enum uses only External variant (WI-2026-02-14-007)
  • typub-storage uses typub-log instead of typub-ui (WI-2026-02-14-009)
  • typub-adapters-core no longer re-exports typub-ui (WI-2026-02-14-011)
  • All adapters use tracing macros (WI-2026-02-14-011)
  • Harmonize asset strategy resolution and error handling across adapters/core (WI-2026-02-15-003)
  • Normalize render_config defaults and marker behavior (WI-2026-02-15-003)
  • Standardize adapter test scaffolding (new_for_test) (WI-2026-02-15-003)
  • Fix Markdown clipboard handling for copypaste adapters (WI-2026-02-17-006)
  • Adapters detect single-image paragraph for block-level rendering (WI-2026-02-19-001)
  • Change Admonition.fragments to Admonition.children: Vec<HtmlElement> (WI-2026-02-20-003)
  • Update parse_admonition to use recursive block parsing (WI-2026-02-20-003)
  • Update Notion adapter to render children blocks inside callouts (WI-2026-02-20-003)
  • Update HTML/theme adapters for block-level admonition content (WI-2026-02-20-003)
  • Update adapters (Notion, Confluence, Ghost) for Details (WI-2026-02-21-001)
  • Remove extra <p> wrapper in Confluence admonition rendering (WI-2026-02-21-003)
  • Validation enforces heading range 1..=6, math source minimum validity, and resolvable asset references under v2 IR (WI-2026-02-21-004)
  • Deterministic serialization test coverage includes passthrough maps and style-set canonical order (WI-2026-02-21-004)