[{"data":1,"prerenderedAt":396},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fv1\u002Fserver-pro\u002Ffeatures":121,"\u002Fdocs\u002Fv1\u002Fserver-pro\u002Ffeatures-surround":391},[4],{"title":5,"path":6,"stem":7,"children":8,"page":44},"Docs","\u002Fdocs","docs",[9],{"title":10,"path":11,"stem":12,"children":13,"page":44},"V1","\u002Fdocs\u002Fv1","docs\u002Fv1",[14,18,22,45,58,80,93,111],{"title":15,"path":16,"stem":17},"Introduction","\u002Fdocs\u002Fv1\u002Fintroduction","docs\u002Fv1\u002F0.introduction",{"title":19,"path":20,"stem":21},"How It Works","\u002Fdocs\u002Fv1\u002Fhow-it-works","docs\u002Fv1\u002F1.how-it-works",{"title":23,"icon":24,"path":25,"stem":26,"children":27,"page":44},"Client","i-lucide-laptop","\u002Fdocs\u002Fv1\u002Fclient","docs\u002Fv1\u002F2.client",[28,32,36,40],{"title":29,"path":30,"stem":31},"Client Setup","\u002Fdocs\u002Fv1\u002Fclient\u002Fsetup","docs\u002Fv1\u002F2.client\u002F1.setup",{"title":33,"path":34,"stem":35},"Syncing","\u002Fdocs\u002Fv1\u002Fclient\u002Fsyncing","docs\u002Fv1\u002F2.client\u002F2.syncing",{"title":37,"path":38,"stem":39},"Events","\u002Fdocs\u002Fv1\u002Fclient\u002Fevents","docs\u002Fv1\u002F2.client\u002F3.events",{"title":41,"path":42,"stem":43},"Configuration","\u002Fdocs\u002Fv1\u002Fclient\u002Fconfiguration","docs\u002Fv1\u002F2.client\u002F4.configuration",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"Server","i-lucide-server","\u002Fdocs\u002Fv1\u002Fserver","docs\u002Fv1\u002F3.server",[51,55],{"title":52,"path":53,"stem":54},"Server Setup","\u002Fdocs\u002Fv1\u002Fserver\u002Fsetup","docs\u002Fv1\u002F3.server\u002F1.setup",{"title":41,"path":56,"stem":57},"\u002Fdocs\u002Fv1\u002Fserver\u002Fconfiguration","docs\u002Fv1\u002F3.server\u002F2.configuration",{"title":59,"icon":60,"badge":61,"path":62,"stem":63,"children":64,"page":44},"NativePHP","i-lucide-smartphone","Commercial","\u002Fdocs\u002Fv1\u002Fnativephp","docs\u002Fv1\u002F4.nativephp",[65,69,73,76],{"title":66,"path":67,"stem":68},"Overview","\u002Fdocs\u002Fv1\u002Fnativephp\u002Foverview","docs\u002Fv1\u002F4.nativephp\u002F1.overview",{"title":70,"path":71,"stem":72},"Setup","\u002Fdocs\u002Fv1\u002Fnativephp\u002Fsetup","docs\u002Fv1\u002F4.nativephp\u002F2.setup",{"title":41,"path":74,"stem":75},"\u002Fdocs\u002Fv1\u002Fnativephp\u002Fconfiguration","docs\u002Fv1\u002F4.nativephp\u002F3.configuration",{"title":77,"path":78,"stem":79},"Lifecycle & Events","\u002Fdocs\u002Fv1\u002Fnativephp\u002Flifecycle","docs\u002Fv1\u002F4.nativephp\u002F4.lifecycle",{"title":81,"icon":82,"badge":61,"path":83,"stem":84,"children":85,"page":44},"Server Pro","i-lucide-bar-chart-2","\u002Fdocs\u002Fv1\u002Fserver-pro","docs\u002Fv1\u002F5.server-pro",[86,89],{"title":66,"path":87,"stem":88},"\u002Fdocs\u002Fv1\u002Fserver-pro\u002Foverview","docs\u002Fv1\u002F5.server-pro\u002F1.overview",{"title":90,"path":91,"stem":92},"Features","\u002Fdocs\u002Fv1\u002Fserver-pro\u002Ffeatures","docs\u002Fv1\u002F5.server-pro\u002F2.features",{"title":94,"icon":95,"path":96,"stem":97,"children":98,"page":44},"Advanced","i-lucide-settings-2","\u002Fdocs\u002Fv1\u002Fadvanced","docs\u002Fv1\u002F6.advanced",[99,103,107],{"title":100,"path":101,"stem":102},"Service Container","\u002Fdocs\u002Fv1\u002Fadvanced\u002Fservice-container","docs\u002Fv1\u002F6.advanced\u002F0.service-container",{"title":104,"path":105,"stem":106},"Conflict Resolution","\u002Fdocs\u002Fv1\u002Fadvanced\u002Fconflict-resolution","docs\u002Fv1\u002F6.advanced\u002F1.conflict-resolution",{"title":108,"path":109,"stem":110},"Payload Mapping","\u002Fdocs\u002Fv1\u002Fadvanced\u002Fpayload-mapping","docs\u002Fv1\u002F6.advanced\u002F2.payload-mapping",{"title":112,"icon":113,"path":114,"stem":115,"children":116,"page":44},"Examples","i-lucide-book-open","\u002Fdocs\u002Fv1\u002Fexamples","docs\u002Fv1\u002F7.examples",[117],{"title":118,"path":119,"stem":120},"Task Manager","\u002Fdocs\u002Fv1\u002Fexamples\u002Ftask-manager","docs\u002Fv1\u002F7.examples\u002F1.task-manager",{"id":122,"title":90,"body":123,"description":383,"extension":384,"links":385,"meta":386,"navigation":387,"path":91,"seo":388,"stem":92,"__hash__":390},"docs\u002Fdocs\u002Fv1\u002F5.server-pro\u002F2.features.md",{"type":124,"value":125,"toc":372},"minimark",[126,131,135,154,162,165,169,172,195,198,200,204,207,218,221,223,227,230,241,244,246,250,256,277,280,282,286,289,365],[127,128,130],"h2",{"id":129},"sync-observability-dashboard","Sync observability dashboard",[132,133,134],"p",{},"An embedded Laravel sync observability dashboard that gives you a unified production view of sync activity across all clients:",[136,137,138,142,145,148,151],"ul",{},[139,140,141],"li",{},"Push and pull history with timestamps and client IDs",[139,143,144],{},"Request outcomes, mutation counts, snapshots, and durations",[139,146,147],{},"Top models and clients by sync volume",[139,149,150],{},"Conflict and failure rates",[139,152,153],{},"Five-minute health buckets across the last 24 hours",[132,155,156,157,161],{},"The dashboard is accessible at a configurable route prefix (default: ",[158,159,160],"code",{},"\u002Ftether\u002Fdashboard",") and is protected by standard Laravel middleware.",[163,164],"hr",{},[127,166,168],{"id":167},"request-and-mutation-inspection","Request and mutation inspection",[132,170,171],{},"Every captured sync request is logged with configurable payload redaction - you can inspect:",[136,173,174,177,180,183,186,189,192],{},[139,175,176],{},"Redacted incoming mutation payloads",[139,178,179],{},"Redacted raw request and response payloads",[139,181,182],{},"Server-side resolution outcome (applied \u002F rejected \u002F conflict)",[139,184,185],{},"Server state before and after mutation processing",[139,187,188],{},"Field-level diff views between captured payloads and stored state",[139,190,191],{},"Per-request execution timing and outcome summary",[139,193,194],{},"Paginated mutation lists for large request batches",[132,196,197],{},"This gives you a practical audit trail of what each client pushed, how the server processed it, and what changed.",[163,199],{},[127,201,203],{"id":202},"conflict-management-interface","Conflict management interface",[132,205,206],{},"The conflicts view surfaces every detected data conflict:",[136,208,209,212,215],{},[139,210,211],{},"Client payload and server state at the time of conflict",[139,213,214],{},"Rejection reason and request context",[139,216,217],{},"Historical conflict patterns per model and per client",[132,219,220],{},"Conflicts are recorded whether the default last-write-wins resolver or a custom resolver is used.",[163,222],{},[127,224,226],{"id":225},"failure-and-error-tracking","Failure and error tracking",[132,228,229],{},"Failed sync operations are captured with full context:",[136,231,232,235,238],{},[139,233,234],{},"Validation failures with field-level detail",[139,236,237],{},"Rejected mutation reasons",[139,239,240],{},"Request and mutation context for failed syncs",[132,242,243],{},"Failure patterns are grouped and surfaced so you can identify systematic issues (e.g. a model that consistently fails for a specific client).",[163,245],{},[127,247,249],{"id":248},"replay-and-debug-tools","Replay and debug tools",[132,251,252,255],{},[158,253,254],{},"tether\u002Fpro-server"," allows you to:",[136,257,258,265,271],{},[139,259,260,264],{},[261,262,263],"strong",{},"Preview"," each captured push mutation against the current database state.",[139,266,267,270],{},[261,268,269],{},"Apply a cloned live replay"," only when enabled in config and explicitly confirmed by the dashboard request.",[139,272,273,276],{},[261,274,275],{},"Audit the replay relationship"," between the original captured request and any cloned replay request.",[132,278,279],{},"Live replay clones mutation IDs before processing, so the original captured request remains intact and the cloned request can be inspected afterwards.",[163,281],{},[127,283,285],{"id":284},"sync-telemetry","Sync telemetry",[132,287,288],{},"Aggregated performance metrics available in the dashboard and via a metrics API endpoint:",[290,291,292,305],"table",{},[293,294,295],"thead",{},[296,297,298,302],"tr",{},[299,300,301],"th",{},"Metric",[299,303,304],{},"Description",[306,307,308,317,325,333,341,349,357],"tbody",{},[296,309,310,314],{},[311,312,313],"td",{},"Throughput",[311,315,316],{},"Total requests and mutations captured",[296,318,319,322],{},[311,320,321],{},"Latency",[311,323,324],{},"Average request duration",[296,326,327,330],{},[311,328,329],{},"Conflict rate",[311,331,332],{},"Percentage of captured requests with conflicts",[296,334,335,338],{},[311,336,337],{},"Failure rate",[311,339,340],{},"Percentage of captured requests that failed",[296,342,343,346],{},[311,344,345],{},"Health strip",[311,347,348],{},"Five-minute status buckets across the last 24h",[296,350,351,354],{},[311,352,353],{},"Top models",[311,355,356],{},"Highest-volume synced model names",[296,358,359,362],{},[311,360,361],{},"Top clients",[311,363,364],{},"Highest-volume client IDs",[132,366,367,368,371],{},"The metrics API is available at ",[158,369,370],{},"GET \u002Ftether\u002Fdashboard\u002Fmetrics",".",{"title":373,"searchDepth":374,"depth":375,"links":376},"",1,2,[377,378,379,380,381,382],{"id":129,"depth":375,"text":130},{"id":167,"depth":375,"text":168},{"id":202,"depth":375,"text":203},{"id":225,"depth":375,"text":226},{"id":248,"depth":375,"text":249},{"id":284,"depth":375,"text":285},"Explore tether\u002Fpro-server features: sync observability, mutation inspection, conflict debugging, replay previews, live replay, and health telemetry.","md",null,{"badge":61},true,{"title":389,"description":383},"tether\u002Fpro-server Features - Laravel Sync Dashboard and Replay","wVv5zYoRX5G_Qyc69dop5vkR0Lwtr7IlAVUmrywWHcc",[392,394],{"title":66,"path":87,"stem":88,"description":393,"children":-1},"Learn how tether\u002Fpro-server adds a production Laravel dashboard for sync history, request inspection, conflict review, replay, and telemetry.",{"title":100,"path":101,"stem":102,"description":395,"children":-1},"Inject and extend Tether services through Laravel's container, including sync engines, registries, HTTP clients, snapshot applicators, and queues.",1780481014781]