[{"data":1,"prerenderedAt":139},["ShallowReactive",2],{"$fzop5RFstnLjHZvu_EN4vRmPU8z0ASiYh_2ccyo9MozA":3},{"item":4,"meta":75},{"id":5,"title":6,"alt":7,"date":8,"design-phase":9,"designer":10,"era":11,"extension":12,"featured":13,"gallery":14,"image":19,"meta":39,"narrative":61,"project":62,"source-file":61,"stem":63,"subject":64,"tags":65,"tool":72,"type":73,"__hash__":74},"archive\u002Farchive\u002F2026-q4\u002F2026-10-02-c108-honest-states.md","Honest States — qdash Stops Saying “Fleet Is Clean” When It Doesn’t Know","qdash Findings with the backend unreachable: one amber banner — “Can’t reach qdash — showing nothing rather than a guess. Retrying…” — every severity count reads “—”, and the worklist shows “—” instead of an all-clear.","2026-10-02","1.0","mark","seed","md",false,[15,18,21,24,27,30,33,36],{"src":16,"alt":17},"\u002Fcycles\u002Fdesign\u002Fc108-before-findings-failed.png","Before: the same page with qdash answering 503 — “0 HIGH · 0 MEDIUM · 0 LOW · 0 PAST SLA” and “No findings. Fleet is clean. 🛡”, a reassurance nothing had measured.",{"src":19,"alt":20},"\u002Fcycles\u002Fdesign\u002Fc108-final-findings-failed.png","After: the banner names the problem once; every count and the worklist read “—”.",{"src":22,"alt":23},"\u002Fcycles\u002Fdesign\u002Fc108-final-posture-loading.png","Posture while loading: “—” in the five tiles and the score, skeleton rows in “What lowers the score” and the risk table — no green 100, no “All instrumented harnesses are hardened”.",{"src":25,"alt":26},"\u002Fcycles\u002Fdesign\u002Fc108-final-dlp-failed.png","Data Protection with qdash unreachable: tiles “—”, both access panels “—”, the paths table waiting — where it used to say “No sensitive file access ✓”.",{"src":28,"alt":29},"\u002Fcycles\u002Fdesign\u002Fc108-final-tool-detail-loading.png","A detail page while its record loads: skeleton rows (it used to render nothing at all).",{"src":31,"alt":32},"\u002Fcycles\u002Fdesign\u002Fc108-final-users-stale.png","Data on screen, then qdash drops: the roster stays, with a small floating “Last updated 11s ago · retrying” notice bottom-right.",{"src":34,"alt":35},"\u002Fcycles\u002Fdesign\u002Fc108-final-integration-routing-failed.png","A failed save: PagerDuty’s routing chip rejected — the chip reverts and a toast reads “Couldn’t change the routing for PagerDuty — qdash is unreachable.”",{"src":37,"alt":38},"\u002Fcycles\u002Fdesign\u002Fc108-final-evidence-export-failed.png","Another failed save surface: the evidence-packet export fails and a toast says so, with the reason.",{"body":40},{"type":41,"value":42,"toc":57},"minimark",[43],[44,45,46,47,51,52,56],"p",{},"c108 applied bible rule R31 — ",[48,49,50],"em",{},"states are honest, end to end"," — across the qdash app. Loading, failed and empty became three different states: “—” and skeleton rows while data loads, one banner when qdash is unreachable, the empty or all-clear copy only once the data has really arrived, and a failed save reported beside the control and in a toast. Two reusable checks keep it honest: every route loaded with ",[53,54,55],"code",{},"\u002Fapi"," held, failing and up, and twelve write paths forced to fail.",{"title":58,"searchDepth":59,"depth":59,"links":60},"",2,[],null,"dashboard","archive\u002F2026-q4\u002F2026-10-02-c108-honest-states","product",[66,67,68,69,70,71],"c108","qcontrol","honest-states","r31","toast","skeleton","Playwright capture","screengrab","qW5ebm49XrvsO-pOBVnMRH8QTiPEJmzgFEGQC67Zzrs",{"eras":76,"designers":99,"subjects":107,"projects":127},[77,84,91,94],{"id":78,"name":79,"description":80,"startDate":81,"endDate":82,"order":83},"ideation","Ideation","First dashboard and site mockups, pre-brand.","2022-01","2025-09",0,{"id":85,"name":86,"description":87,"startDate":88,"endDate":89,"order":90},"pre-seed","Pre-Seed","Establishing identity, voice, and visual language.","2025-10","2026-01",1,{"id":11,"name":92,"description":93,"startDate":89,"order":59},"Seed","Building the product and its interface.",{"id":95,"name":96,"description":97,"order":98},"post-seed","Post-Seed","Scaling the product and expanding reach.",3,[100,103],{"id":10,"name":101,"role":102},"Mark","Founder \u002F Design",{"id":104,"name":105,"role":106},"sarah","Sarah Parson","Illustration \u002F Design",[108,112,116,119,123],{"id":109,"label":110,"description":111},"front-site","Front Site","Public website and marketing pages.",{"id":113,"label":114,"description":115},"pitch-deck","Pitch Deck","Investor and partner presentations.",{"id":64,"label":117,"description":118},"Product","Application UI and dashboard.",{"id":120,"label":121,"description":122},"cli","Command Line Tools","Terminal interfaces and output.",{"id":124,"label":125,"description":126},"brand-system","Brand System","Style guide, brand documents, MCP server.",[128,132,135],{"id":129,"label":130,"description":131},"brochure-site","Brochure Site","Public marketing website — messaging, landing pages, campaigns.",{"id":62,"label":133,"description":134},"Dashboard","Product application UI — the tool customers use.",{"id":136,"label":137,"description":138},"brand","Brand","Brand system, style guides, design tokens, and tooling.",1794599288192]