"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[574],{921(e,n,t){t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"milestones","title":"Milestones","description":"Active","source":"@site/docs/milestones.md","sourceDirName":".","slug":"/milestones","permalink":"/rob/CmdForge/milestones","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"type":"milestones","project":"cmdforge","updated":"2026-01-17T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"Ideas & Exploration","permalink":"/rob/CmdForge/ideas-and-exploration"}}');var s=t(4848),r=t(8453);const o={type:"milestones",project:"cmdforge",updated:new Date("2026-01-17T00:00:00.000Z")},d="Milestones",l={},c=[{value:"Active",id:"active",level:2},{value:"Completed",id:"completed",level:2},{value:"M5: Testing & Polish",id:"m5-testing--polish",level:4},{value:"M0: Core Platform",id:"m0-core-platform",level:4},{value:"M1: Production Ready",id:"m1-production-ready",level:4},{value:"M2: Tool Discovery",id:"m2-tool-discovery",level:4},{value:"M3: Content & Automation",id:"m3-content--automation",level:4},{value:"M4: User Experience",id:"m4-user-experience",level:4}];function a(e){const n={code:"code",h1:"h1",h2:"h2",h4:"h4",header:"header",hr:"hr",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"milestones",children:"Milestones"})}),"\n",(0,s.jsx)(n.h2,{id:"active",children:"Active"}),"\n",(0,s.jsx)(n.p,{children:"(none)"}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"completed",children:"Completed"}),"\n",(0,s.jsx)(n.h4,{id:"m5-testing--polish",children:"M5: Testing & Polish"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": Q1 2027\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsxs)(n.p,{children:["Testing framework, theming, and version management. ",(0,s.jsx)(n.strong,{children:"Project dependencies"})," (completed): - ",(0,s.jsx)(n.code,{children:"cmdforge.yaml"})," manifest format for declaring tool dependencies - ",(0,s.jsx)(n.code,{children:"cmdforge install"})," to install all dependencies from manifest - ",(0,s.jsx)(n.code,{children:"cmdforge add official/toolname"})," to add a dependency to manifest - Automatic dependency checking before running meta-tools. ",(0,s.jsx)(n.strong,{children:"Tool testing framework"})," includes: - TestStepDialog for interactive step testing from GUI - Test button in Tool Builder to test individual steps - Variable input forms auto-detect ",(0,s.jsx)(n.code,{children:"{variable}"})," references from step templates - Multiple assertion types (not_empty, contains, valid_json, matches_regex, min/max_length, etc.) - Background execution with timing metrics - Output variable display and assertion pass/fail results - Provider override for testing with mock provider"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool testing framework"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Simple theming (external QSS files)"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Dark mode"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool versioning support"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Version constraints in manifests"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:["Project dependency system (",(0,s.jsx)(n.code,{children:"cmdforge install"}),")"]}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"cmdforge add"})," command"]}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Dependency resolution for meta-tools"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m0-core-platform",children:"M0: Core Platform"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": December 2025\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsx)(n.p,{children:"The foundational CmdForge platform with AI-powered CLI tool builder, YAML tool definitions, web UI, offline caching, and provider abstraction."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"YAML tool definition system"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"CLI entry point and subcommands"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Provider abstraction layer"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Offline caching for tools"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Web UI for tool browsing"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool execution engine"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m1-production-ready",children:"M1: Production Ready"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": February 2026\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsx)(n.p,{children:"Production deployment with proper server configuration, complete documentation, and improved reliability."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Public documentation"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Systemd service setup"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Gunicorn production server"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Systemd linger for persistence"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"CI/CD pipeline"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Error message improvements"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Source field display in web UI"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m2-tool-discovery",children:"M2: Tool Discovery"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": Q2 2026\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsxs)(n.p,{children:["Enable users to discover, rate, and share tools through a marketplace interface with curation to maintain quality. ",(0,s.jsx)(n.strong,{children:"Tool search and filtering"})," includes: - ",(0,s.jsx)(n.code,{children:"/api/v1/tags"})," endpoint for listing tags with counts - Advanced search with tag filtering (AND logic), multi-category (OR logic), owner, download range, date range - Faceted search responses with category/tag/owner counts - CLI: ",(0,s.jsx)(n.code,{children:"--tag"}),", ",(0,s.jsx)(n.code,{children:"--owner"}),", ",(0,s.jsx)(n.code,{children:"--min-downloads"}),", ",(0,s.jsx)(n.code,{children:"--popular"}),", ",(0,s.jsx)(n.code,{children:"--since"}),", ",(0,s.jsx)(n.code,{children:"--json"}),", ",(0,s.jsx)(n.code,{children:"--show-facets"})," options - CLI: ",(0,s.jsx)(n.code,{children:"registry tags"})," subcommand - Web UI: Filter sidebar with checkboxes, dropdowns, active filter chips, URL-based state ",(0,s.jsx)(n.strong,{children:"PySide6 GUI conversion"})," includes: - Modern desktop GUI replacing urwid TUI - Sidebar navigation (My Tools, Registry, Providers, Profiles) - Tool Builder with visual form for creating/editing tools - Keyboard shortcuts (Ctrl+N, Ctrl+S, Ctrl+R, Ctrl+1/2/3/4, Escape, Ctrl+Q) - Window geometry persistence ",(0,s.jsx)(n.strong,{children:"GUI Registry browser"})," includes: - Browse/search tools with category and sort filters - Star ratings display in table and details - Clickable tags for filtering - Installed indicator (\u2713) and update available (\u2191) - Pagination for large result sets - Publisher reputation info ",(0,s.jsx)(n.strong,{children:"GUI Publishing"})," includes: - Connect dialog with polling-based account pairing - Publish workflow with version selection - Full publish workflow with confirmation ",(0,s.jsx)(n.strong,{children:"Infrastructure improvements"}),": - ",(0,s.jsx)(n.code,{children:"Dockerfile.test-install"}),": Fresh environment for testing installer - ",(0,s.jsx)(n.code,{children:"Dockerfile.ready"}),": Pre-installed container for quick usage - ",(0,s.jsx)(n.code,{children:"install.sh"}),": Interactive installer with venv, PATH setup, optional example tools - Database migration: Auto-adds missing columns on server start ",(0,s.jsx)(n.strong,{children:"Registry curation system"})," includes: - Role-based access control (user, moderator, admin) - Tool moderation workflow (pending \u2192 approved/rejected/removed) - Publisher management (ban/unban, role changes) - Private/unlisted tool visibility (auto-approved, owner-only access) - Audit logging for all moderation actions - Admin web UI pages (pending queue, publishers, reports, audit log) - Report resolution workflow ",(0,s.jsx)(n.strong,{children:"App pairing/connection flow"})," includes: - ",(0,s.jsx)(n.code,{children:"cmdforge config connect "}),' CLI command - GUI Connect dialog with polling-based approval - Web UI "Connections" page (replaces API Tokens) - Device hostname tracking for connected apps ',(0,s.jsx)(n.strong,{children:"Tool ratings/reviews"})," includes: - 5-star rating system with review text - Average rating display on tool cards - Publisher reputation scores - Rating count and distribution ",(0,s.jsx)(n.strong,{children:"Tool marketplace UI enhancements"})," includes: - Browse all tools on page load - Category filter dropdown - Sort by popularity, rating, newest, name - Clickable tags for filtering - Installed/update indicators - Pagination controls ",(0,s.jsx)(n.strong,{children:"AI persona profiles"})," includes: - Profile dataclass with name, description, system_prompt - 8 built-in profiles (Comedian, Technical Writer, Teacher, Concise, Creative, Code Reviewer, Analyst) - Custom profile creation and storage - Profile selector in Prompt Step dialog - Profile injection during tool execution - Profiles page in GUI (Ctrl+4) ",(0,s.jsx)(n.strong,{children:"AI-assisted code generation"})," includes: - Split-view Code Step dialog (editor + AI assist panel) - Provider selector for AI calls - Smart prompt template with available variables - Background thread for non-blocking AI calls - Automatic markdown fence stripping - Python syntax checking before save"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool search and filtering"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"PySide6 GUI conversion"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"GUI Registry browser"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"GUI Publishing with connect flow"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Docker containers (test + ready)"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Interactive installer script"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Database migration system"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Registry curation system"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"App pairing/connection flow"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool ratings/reviews"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool marketplace UI enhancements"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"AI persona profiles"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"AI-assisted code generation"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m3-content--automation",children:"M3: Content & Automation"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": Q3 2026\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsxs)(n.p,{children:["Automated content ingestion and quality assurance for the tool ecosystem. ",(0,s.jsx)(n.strong,{children:"Import Fabric patterns"})," includes: - Run existing ",(0,s.jsx)(n.code,{children:"scripts/import_fabric.py"})," to populate registry - Automatic attribution with source fields (imported, MIT license, Daniel Miessler) - Category mapping based on pattern name prefixes - README generation with original pattern attribution ",(0,s.jsx)(n.strong,{children:"Auto-vetting pipeline"})," includes: - Integration with existing ",(0,s.jsx)(n.code,{children:"scrutiny.py"})," (honesty, transparency, scope, efficiency checks) - Integration with existing ",(0,s.jsx)(n.code,{children:"similarity.py"})," (duplicate detection) - Auto-approve/review/reject decision logic - Helpful suggestions for tool improvements ",(0,s.jsx)(n.strong,{children:"Scheduled sync"})," includes: - Periodic checks for Fabric repo updates - Automatic import of new patterns - Version tracking for updated patterns - Admin notifications for review queue"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Import Fabric patterns (233 total)"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Scheduled Fabric repo sync"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Auto-vetting pipeline integration"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Community tool submissions workflow"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Duplicate detection automation"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m4-user-experience",children:"M4: User Experience"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": Q4 2026\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (87%)"]}),"\n",(0,s.jsxs)(n.p,{children:["Visual improvements, interactive guidance, and missing registry features. ",(0,s.jsx)(n.strong,{children:"Collections CLI commands"})," includes: - ",(0,s.jsx)(n.code,{children:"cmdforge collections list"})," - List available collections with tool counts - ",(0,s.jsx)(n.code,{children:"cmdforge collections info "})," - Show collection details with tool list - ",(0,s.jsx)(n.code,{children:"cmdforge collections install "})," - Install all tools in a collection - ",(0,s.jsx)(n.code,{children:"--json"})," flag for machine-readable output - ",(0,s.jsx)(n.code,{children:"--pinned"})," flag to use pinned versions from collection ",(0,s.jsx)(n.strong,{children:"Admin collections management"})," includes: - Admin dashboard page at ",(0,s.jsx)(n.code,{children:"/dashboard/admin/collections"})," - Create/edit/delete collections via web UI - Tool reference input with version pinning - Admin API endpoints (GET/POST/PUT/DELETE) ",(0,s.jsx)(n.strong,{children:"Password reset flow"})," includes: - ",(0,s.jsx)(n.code,{children:"/forgot-password"})," page with email input form - ",(0,s.jsx)(n.code,{children:"/reset-password?token=xxx"})," page with new password form - API endpoints: request, validate, complete password reset - Email utility module (logs to console in dev mode, SMTP-ready for production) - Security: 1-hour token expiry, single-use tokens, rate limiting (5/hour per IP, 3/hour per email) - Session invalidation on password change - Email enumeration prevention (always returns success message) ",(0,s.jsx)(n.strong,{children:"Visual node-based editor"})," includes: - NodeGraphQt-based flow visualization (",(0,s.jsx)(n.code,{children:"flow_graph.py"}),") - Custom node types: InputNode, PromptNode, CodeNode, OutputNode - Visual connections showing data flow between steps - Double-click nodes to edit steps - Auto-layout with fit-to-view - Keyboard shortcuts (A: select all, F: fit view) - Context menu for common actions - Help banner overlay with controls ",(0,s.jsx)(n.strong,{children:"Drag-and-drop step reordering"})," includes: - Drag-drop reordering in list view - Reordering support from flow view - Variable dependency warnings when reordering breaks references - Automatic step index updates ",(0,s.jsx)(n.strong,{children:"Tool visualization improvements"})," includes: - Flow graph widget showing tool execution pipeline - Color-coded nodes by step type (indigo=prompt, green=code, purple=tool) - Input/output port visualization - Variable flow connections between steps ",(0,s.jsx)(n.strong,{children:"Tool composition and chaining UI"}),' includes: - ToolStep data class for calling other tools as pipeline steps - ToolStepDialog for configuring tool steps (tool selection, input mapping, args) - "Add Tool" button in Tool Builder alongside Add Prompt/Add Code - ToolNode in flow graph visualization (purple node) - Input template with variable substitution from previous steps - Argument passing with variable substitution - Provider override option for nested tool calls - Recursion depth protection (max 10 levels) - Dependency checking and missing tool warnings - Auto-populate dependencies when adding ToolStep in GUI - ',(0,s.jsx)(n.code,{children:"--auto-install"})," flag for automatic dependency installation at runtime ",(0,s.jsx)(n.strong,{children:"Interactive walkthroughs"})," includes: - First-time user onboarding - Guided tool creation tutorial - Feature discovery tooltips - Context-sensitive help"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Collections CLI commands"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Admin collections management UI"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Visual node-based step editor"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Interactive onboarding walkthroughs"}),(0,s.jsx)(n.td,{children:"Not Started"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool visualization improvements"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool composition and chaining UI"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Drag-and-drop step reordering"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Password reset flow"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453(e,n,t){t.d(n,{R:()=>o,x:()=>d});var i=t(6540);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]);