[{"data":1,"prerenderedAt":372},["ShallowReactive",2],{"navigation_docs":3,"-audit-kelyphos-audit":92,"-audit-kelyphos-audit-surround-resolved":365,"daily-note-surround--audit-kelyphos-audit":94},[4,9,53,73,82,87],{"title":5,"path":6,"stem":5,"icon":7,"order":8},"Home","/home","i-lucide-home",0,{"title":10,"icon":11,"order":12,"path":13,"stem":14,"children":15,"page":52},"Guide","i-lucide-book-open",1,"/guide","1.guide",[16,22,28,34,40,46],{"title":17,"path":18,"stem":19,"icon":20,"order":21},"Installation","/guide/installation","1.guide/1.installation","i-lucide-download",10,{"title":23,"path":24,"stem":25,"icon":26,"order":27},"Shell State","/guide/shell-state","1.guide/2.shell-state","i-lucide-sliders-horizontal",20,{"title":29,"path":30,"stem":31,"icon":32,"order":33},"Defining Panels","/guide/panels","1.guide/3.panels","i-lucide-puzzle",30,{"title":35,"path":36,"stem":37,"icon":38,"order":39},"Appearance","/guide/appearance","1.guide/4.appearance","i-lucide-sparkles",40,{"title":41,"path":42,"stem":43,"icon":44,"order":45},"Keyboard Shortcuts","/guide/keybindings","1.guide/5.keybindings","i-lucide-keyboard",50,{"title":47,"path":48,"stem":49,"icon":50,"order":51},"Demo App","/guide/demo","1.guide/6.demo","i-lucide-monitor",60,false,{"title":54,"icon":55,"order":56,"path":57,"stem":58,"children":59,"page":52},"API Reference","i-lucide-code",2,"/api","2.api",[60,65,69],{"title":61,"path":62,"stem":63,"icon":64,"order":21},"KelyphosShellView","/api/kelyphos-shell-view","2.api/1.kelyphos-shell-view","i-lucide-layout-panel-left",{"title":66,"path":67,"stem":68,"icon":26,"order":27},"KelyphosShellState","/api/kelyphos-shell-state","2.api/2.kelyphos-shell-state",{"title":70,"path":71,"stem":72,"icon":32,"order":33},"KelyphosPanel","/api/kelyphos-panel","2.api/3.kelyphos-panel",{"title":74,"path":75,"stem":76,"children":77,"page":52},"Audit","/audit","3.audit",[78],{"title":79,"path":80,"stem":81},"KelyphosAudit","/audit/kelyphos_audit","3.audit/kelyphos_audit",{"title":83,"path":84,"stem":83,"icon":85,"order":86},"Changelog","/changelog","i-lucide-history",98,{"title":88,"path":89,"stem":88,"icon":90,"order":91},"About","/about","i-lucide-info",99,{"id":93,"title":79,"aliases":94,"body":95,"concluded":94,"date":94,"description":360,"documentation":94,"extension":361,"isBase":52,"links":94,"meta":362,"mtime":94,"navigation":94,"order":94,"outcome":94,"path":80,"project":94,"repository":94,"seo":363,"started":94,"status":94,"stem":81,"tags":94,"team":94,"type":94,"__hash__":364},"docs/3.audit/kelyphos_audit.md",null,{"type":96,"value":97,"toc":348},"minimark",[98,107,112,141,145,150,239,243,282,286,312,316,328,332],[99,100,101,102,106],"p",{},"Source-of-truth for the SwiftUI stack. 98 Swift files under ",[103,104,105],"code",{},"Sources/",".",[108,109,111],"h2",{"id":110},"recent-touch-points-phase-1-3-of-the-ipad-shortcuts-fix","Recent touch points (Phase 1-3 of the iPad-shortcuts fix)",[113,114,115,138],"ul",{},[116,117,118,121,122,125,126,129,130,133,134,137],"li",{},[103,119,120],{},"Sources/KelyphosKit/Shell/KelyphosShellView.swift"," — added ",[103,123,124],{},".focused($isFocused)"," + ",[103,127,128],{},".onAppear { isFocused = true }"," to make the publishing view explicitly focused so ",[103,131,132],{},".focusedSceneValue(\\.kelyphosShellState, state)"," reaches ",[103,135,136],{},"Commands"," on iPad. Confirmed working on iPad device by the user.",[116,139,140],{},"Diagnostic logging from Phase 1 stripped; build is clean.",[108,142,144],{"id":143},"findings","Findings",[146,147,149],"h3",{"id":148},"high-fix-or-revisit","High — fix or revisit",[113,151,152],{},[116,153,154,158,159,162,163,166,167,166,170,173,174,177,178,181,182,185,186,189,190,193,194,177,197,199,200,203,204,207,208,211,212,215,216],{},[155,156,157],"strong",{},"CMD+1..9 / CMD+OPT+1..9 / CMD+OPT+SHIFT+1..9 tab shortcuts may register disabled on iPad."," ",[103,160,161],{},"KelyphosCommands.swift:146,166,186"," gates each ",[103,164,165],{},"navTab(n)"," / ",[103,168,169],{},"inspTab(n)",[103,171,172],{},"utilTab(n)"," with ",[103,175,176],{},".disabled(n > (state?.navigatorTabCount ?? 0))",". ",[103,179,180],{},"navigatorTabCount"," defaults to ",[103,183,184],{},"0"," in ",[103,187,188],{},"KelyphosShellState.swift:83-85"," and is set to the real count inside ",[103,191,192],{},"ShellLifecycleModifier.onAppear"," at ",[103,195,196],{},"KelyphosShellView.swift:559-561",[103,198,136],{}," is evaluated against the scene context before that ",[103,201,202],{},".onAppear"," fires, and ",[103,205,206],{},".disabled(true)"," at registration prevents ",[103,209,210],{},".keyboardShortcut"," from firing on iPad even after the value flips. Verified in simulator on 2026-05-11: CMD+0 / CMD+SHIFT+P / CMD+OPT+0 / CMD+SHIFT+/ all fire and log; CMD+1/2/3 produce no log entries.",[213,214],"br",{},"Two options:",[113,217,218,228],{},[116,219,220,221,223,224,227],{},"(a) Pass tab counts into ",[103,222,66],{}," at construction in ",[103,225,226],{},"KelyphosShellConfiguration"," so they're correct at first eval.",[116,229,230,231,234,235,238],{},"(b) Remove ",[103,232,233],{},".disabled(...)"," from the helpers and guard inside each Button action with ",[103,236,237],{},"guard n \u003C= state.navigatorTabCount else { return }",". Smallest diff.",[146,240,242],{"id":241},"medium-confirm-cleanup","Medium — confirm / cleanup",[113,244,245,269],{},[116,246,247,193,253,256,257,260,261,264,265,268],{},[155,248,249,250],{},"Debounce save via ",[103,251,252],{},"DispatchQueue.main.asyncAfter",[103,254,255],{},"Sources/KelyphosKit/Core/KelyphosShellState.swift:180",". Used to coalesce ",[103,258,259],{},"UserDefaults"," writes after rapid state mutations. Pattern repeats in sema and kytos. Functionally fine, but a Combine ",[103,262,263],{},"debounce"," or ",[103,266,267],{},"Task.sleep","-based debouncer in Swift 6 would be more uniform. Flag for a later kit-level helper.",[116,270,271,277,278,281],{},[155,272,273,274],{},"Repeated ",[103,275,276],{},".commands { KelyphosCommands() }"," wiring in every sibling's app entry. Could be extracted into a ",[103,279,280],{},"KelyphosScene"," helper that bundles the commands + about/settings scenes. Not urgent.",[146,283,285],{"id":284},"low","Low",[113,287,288],{},[116,289,290,291,294,295,294,298,294,301,304,305,294,308,311],{},"Magic numbers in demo views: font sizes (",[103,292,293],{},"size: 32",", ",[103,296,297],{},"size: 48",[103,299,300],{},"size: 64",[103,302,303],{},"size: 11",") and spacings (",[103,306,307],{},"spacing: 16",[103,309,310],{},"spacing: 24",") without rationale comments. Demo target only — purely cosmetic.",[108,313,315],{"id":314},"recommendations","Recommendations",[317,318,319,322],"ol",{},[116,320,321],{},"Decide CMD+digit fix path (a or b above) — small diff either way.",[116,323,324,325,327],{},"Treat ",[103,326,66],{},"'s debounce-save as the canonical pattern and document it; sibling apps should use the same prefix-scoped persistence.",[108,329,331],{"id":330},"what-i-did-not-change","What I did not change",[113,333,334,341],{},[116,335,336,337,340],{},"Did not touch the CMD+digit ",[103,338,339],{},".disabled"," bug — user did not request a fix in this pass. Flagged here.",[116,342,343,344,347],{},"Did not refactor ",[103,345,346],{},"asyncAfter"," debounce — the pattern is intentional and stable.",{"title":349,"searchDepth":350,"depth":350,"links":351},"",3,[352,353,358,359],{"id":110,"depth":56,"text":111},{"id":143,"depth":56,"text":144,"children":354},[355,356,357],{"id":148,"depth":350,"text":149},{"id":241,"depth":350,"text":242},{"id":284,"depth":350,"text":285},{"id":314,"depth":56,"text":315},{"id":330,"depth":56,"text":331},"Source-of-truth for the SwiftUI stack. 98 Swift files under Sources/.","md",{},{"description":360},"dKK-6vKKGqOHGDxCuPDOyRIS7PlzryPES6cT-ZMWbYQ",[366,369],{"title":70,"description":367,"path":71,"navigation":368},"Protocol for type-safe panel tab definitions",{"title":70,"icon":32,"order":33},{"title":83,"description":370,"path":84,"navigation":371},"Release history and notable changes to Kelyphos",{"icon":85,"order":86},1778531038846]