[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-dot-quality":3,"mdc-f5fc4x-key":39,"related-repo-microsoft-dot-quality":1071,"related-org-microsoft-dot-quality":1142},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":28,"repoUrl":29,"updatedAt":30,"license":31,"forks":32,"topics":33,"repo":34,"sourceUrl":37,"mdContent":38},"dot-quality","enforce quality standards on DOT diagrams","Use when enforcing quality standards on DOT diagrams — checking completeness, structure, and visual clarity before sharing or committing",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,16,19,22,25],{"name":13,"slug":14,"type":15},"QA","qa","tag",{"name":17,"slug":18,"type":15},"Documentation","documentation",{"name":20,"slug":21,"type":15},"Diagrams","diagrams",{"name":23,"slug":24,"type":15},"Graphviz","graphviz",{"name":26,"slug":27,"type":15},"Visual Design","visual-design",2,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-bundle-dot-graph","2026-04-06T18:37:03.368919",null,5,[],{"repoUrl":29,"stars":28,"forks":32,"topics":35,"description":36},[],"DOT graph bundle for the Amplifier project","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Famplifier-bundle-dot-graph\u002Ftree\u002FHEAD\u002Fskills\u002Fdot-quality","---\nname: dot-quality\ndescription: Use when enforcing quality standards on DOT diagrams — checking completeness, structure, and visual clarity before sharing or committing\n---\n\n# DOT Quality Standards\n\n## Overview\n\nEvery DOT diagram makes structural claims. Those claims must be verifiable, complete, and unambiguous. Quality enforcement ensures diagrams communicate correctly — not just render correctly.\n\n**Core principle:** A diagram that renders without errors can still be wrong. Structural claims require titles, color requires legends, and shapes must match their semantic meaning.\n\n---\n\n## The Iron Law\n\n> **NO DIAGRAM WITHOUT A TITLE, NO COLOR WITHOUT A LEGEND**\n\nThese are not suggestions. A diagram without a title is anonymous — reviewers cannot reference it. A diagram with unexplained color is ambiguous — different readers draw different conclusions.\n\n---\n\n## Quality Checklist\n\n### Must Have — FAIL if missing\n\n- [ ] Graph has a `label=` attribute set to a meaningful title\n- [ ] `labelloc=t` is set (title appears at top, not bottom)\n- [ ] Every node has either a meaningful ID or an explicit `label=`\n- [ ] All edges convey accurate relationships (not aspirational or assumed)\n\n### Should Have — WARN if missing\n\n- [ ] `rankdir` is set explicitly (LR, TB, BT, or RL) — don't rely on defaults\n- [ ] Default node and edge attributes are declared at the top with `node [...]` and `edge [...]`\n- [ ] Shape vocabulary is consistent with the shape-meaning table below\n- [ ] If any color is used, a `cluster_legend` subgraph documents all colors used\n- [ ] Error and exception paths are drawn (not just the happy path)\n- [ ] External dependencies are shown, even if simplified\n\n### Nice to Have — INFO\n\n- [ ] `fontname` is set consistently (Helvetica or similar sans-serif)\n- [ ] `nodesep` and `ranksep` are tuned for readability\n- [ ] Cluster fill colors are distinct from node fill colors\n- [ ] A `\u002F\u002F comment` explains any non-obvious structural choice\n\n---\n\n## Line Count Targets\n\n| Diagram Type | Target | WARN at | FAIL at |\n|-------------|--------|---------|---------|\n| Overview \u002F context | 30–80 | 120 | 200 |\n| Architecture (detail) | 80–150 | 250 | 400 |\n| Inline (single concept) | 10–30 | 50 | 80 |\n| Quick sketch | 5–20 | 35 | 60 |\n\nDiagrams that exceed WARN thresholds should be split into overview + detail files.\n\n---\n\n## Anti-Pattern Red Flags\n\n| Flag | Problem | Fix |\n|------|---------|-----|\n| Floating node | Node with no edges — forgotten or placeholder | Connect it or remove it |\n| Mystery color | Color used without legend entry | Add to legend or remove color |\n| `label=\"\"` | Empty label — invisible node | Set a meaningful label |\n| Duplicate node IDs | Same ID used for different concepts | Rename to make IDs unique |\n| All nodes same shape | Shape vocabulary not being used | Apply shape-meaning table |\n| Edges without direction meaning | Arrow direction doesn't match data\u002Fcontrol flow | Reverse or relabel edges |\n| No title | Anonymous diagram — cannot be referenced | Add `label=` and `labelloc=t` |\n\n---\n\n## Shape Vocabulary Compliance\n\nShapes carry semantic meaning. Using the wrong shape creates ambiguity:\n\n| Shape | Meaning | Misuse to Avoid |\n|-------|---------|-----------------|\n| `box` \u002F `rectangle` | Service, process, component | Don't use for data stores |\n| `cylinder` | Database, file store, queue | Don't use for services |\n| `diamond` | Decision point, branch | Don't use for processes |\n| `ellipse` | Start \u002F end state, terminal | Don't use for services |\n| `doublecircle` | Final\u002Faccepted state (FSM) | Reserve for state machines |\n| `parallelogram` | External system, I\u002FO | Don't use for internal services |\n| `note` | Annotation, documentation node | Don't use for primary components |\n| `component` | Fan-out \u002F fan-in coordinator | Don't use for simple steps |\n| `point` | Initial state marker (FSM) | Reserve for state machines only |\n| `folder` | File group, repository | Don't use for services |\n\n---\n\n## The Quality Gate\n\nRun this 7-step check before every diagram is shared, committed, or embedded in documentation:\n\n1. **Render check** — `dot -Tsvg diagram.dot > \u002Fdev\u002Fnull` — zero errors\n2. **Title check** — `grep 'label=' diagram.dot` shows a non-empty title\n3. **Color check** — if any `fillcolor` or `color` attribute is set, `cluster_legend` exists\n4. **Shape check** — review each node shape against the Shape Vocabulary table\n5. **Float check** — every node has at least one edge (incoming or outgoing)\n6. **Path check** — error\u002Ffailure paths are present, not just the happy path\n7. **Size check** — line count is within target range for the diagram type\n",{"data":40,"body":41},{"name":4,"description":6},{"type":42,"children":43},"root",[44,53,60,66,77,81,87,99,104,107,113,120,189,195,282,288,357,360,366,496,501,504,510,678,681,687,692,945,948,954,959],{"type":45,"tag":46,"props":47,"children":49},"element","h1",{"id":48},"dot-quality-standards",[50],{"type":51,"value":52},"text","DOT Quality Standards",{"type":45,"tag":54,"props":55,"children":57},"h2",{"id":56},"overview",[58],{"type":51,"value":59},"Overview",{"type":45,"tag":61,"props":62,"children":63},"p",{},[64],{"type":51,"value":65},"Every DOT diagram makes structural claims. Those claims must be verifiable, complete, and unambiguous. Quality enforcement ensures diagrams communicate correctly — not just render correctly.",{"type":45,"tag":61,"props":67,"children":68},{},[69,75],{"type":45,"tag":70,"props":71,"children":72},"strong",{},[73],{"type":51,"value":74},"Core principle:",{"type":51,"value":76}," A diagram that renders without errors can still be wrong. Structural claims require titles, color requires legends, and shapes must match their semantic meaning.",{"type":45,"tag":78,"props":79,"children":80},"hr",{},[],{"type":45,"tag":54,"props":82,"children":84},{"id":83},"the-iron-law",[85],{"type":51,"value":86},"The Iron Law",{"type":45,"tag":88,"props":89,"children":90},"blockquote",{},[91],{"type":45,"tag":61,"props":92,"children":93},{},[94],{"type":45,"tag":70,"props":95,"children":96},{},[97],{"type":51,"value":98},"NO DIAGRAM WITHOUT A TITLE, NO COLOR WITHOUT A LEGEND",{"type":45,"tag":61,"props":100,"children":101},{},[102],{"type":51,"value":103},"These are not suggestions. A diagram without a title is anonymous — reviewers cannot reference it. A diagram with unexplained color is ambiguous — different readers draw different conclusions.",{"type":45,"tag":78,"props":105,"children":106},{},[],{"type":45,"tag":54,"props":108,"children":110},{"id":109},"quality-checklist",[111],{"type":51,"value":112},"Quality Checklist",{"type":45,"tag":114,"props":115,"children":117},"h3",{"id":116},"must-have-fail-if-missing",[118],{"type":51,"value":119},"Must Have — FAIL if missing",{"type":45,"tag":121,"props":122,"children":125},"ul",{"className":123},[124],"contains-task-list",[126,149,166,180],{"type":45,"tag":127,"props":128,"children":131},"li",{"className":129},[130],"task-list-item",[132,138,140,147],{"type":45,"tag":133,"props":134,"children":137},"input",{"disabled":135,"type":136},true,"checkbox",[],{"type":51,"value":139}," Graph has a ",{"type":45,"tag":141,"props":142,"children":144},"code",{"className":143},[],[145],{"type":51,"value":146},"label=",{"type":51,"value":148}," attribute set to a meaningful title",{"type":45,"tag":127,"props":150,"children":152},{"className":151},[130],[153,156,158,164],{"type":45,"tag":133,"props":154,"children":155},{"disabled":135,"type":136},[],{"type":51,"value":157}," ",{"type":45,"tag":141,"props":159,"children":161},{"className":160},[],[162],{"type":51,"value":163},"labelloc=t",{"type":51,"value":165}," is set (title appears at top, not bottom)",{"type":45,"tag":127,"props":167,"children":169},{"className":168},[130],[170,173,175],{"type":45,"tag":133,"props":171,"children":172},{"disabled":135,"type":136},[],{"type":51,"value":174}," Every node has either a meaningful ID or an explicit ",{"type":45,"tag":141,"props":176,"children":178},{"className":177},[],[179],{"type":51,"value":146},{"type":45,"tag":127,"props":181,"children":183},{"className":182},[130],[184,187],{"type":45,"tag":133,"props":185,"children":186},{"disabled":135,"type":136},[],{"type":51,"value":188}," All edges convey accurate relationships (not aspirational or assumed)",{"type":45,"tag":114,"props":190,"children":192},{"id":191},"should-have-warn-if-missing",[193],{"type":51,"value":194},"Should Have — WARN if missing",{"type":45,"tag":121,"props":196,"children":198},{"className":197},[124],[199,215,238,247,264,273],{"type":45,"tag":127,"props":200,"children":202},{"className":201},[130],[203,206,207,213],{"type":45,"tag":133,"props":204,"children":205},{"disabled":135,"type":136},[],{"type":51,"value":157},{"type":45,"tag":141,"props":208,"children":210},{"className":209},[],[211],{"type":51,"value":212},"rankdir",{"type":51,"value":214}," is set explicitly (LR, TB, BT, or RL) — don't rely on defaults",{"type":45,"tag":127,"props":216,"children":218},{"className":217},[130],[219,222,224,230,232],{"type":45,"tag":133,"props":220,"children":221},{"disabled":135,"type":136},[],{"type":51,"value":223}," Default node and edge attributes are declared at the top with ",{"type":45,"tag":141,"props":225,"children":227},{"className":226},[],[228],{"type":51,"value":229},"node [...]",{"type":51,"value":231}," and ",{"type":45,"tag":141,"props":233,"children":235},{"className":234},[],[236],{"type":51,"value":237},"edge [...]",{"type":45,"tag":127,"props":239,"children":241},{"className":240},[130],[242,245],{"type":45,"tag":133,"props":243,"children":244},{"disabled":135,"type":136},[],{"type":51,"value":246}," Shape vocabulary is consistent with the shape-meaning table below",{"type":45,"tag":127,"props":248,"children":250},{"className":249},[130],[251,254,256,262],{"type":45,"tag":133,"props":252,"children":253},{"disabled":135,"type":136},[],{"type":51,"value":255}," If any color is used, a ",{"type":45,"tag":141,"props":257,"children":259},{"className":258},[],[260],{"type":51,"value":261},"cluster_legend",{"type":51,"value":263}," subgraph documents all colors used",{"type":45,"tag":127,"props":265,"children":267},{"className":266},[130],[268,271],{"type":45,"tag":133,"props":269,"children":270},{"disabled":135,"type":136},[],{"type":51,"value":272}," Error and exception paths are drawn (not just the happy path)",{"type":45,"tag":127,"props":274,"children":276},{"className":275},[130],[277,280],{"type":45,"tag":133,"props":278,"children":279},{"disabled":135,"type":136},[],{"type":51,"value":281}," External dependencies are shown, even if simplified",{"type":45,"tag":114,"props":283,"children":285},{"id":284},"nice-to-have-info",[286],{"type":51,"value":287},"Nice to Have — INFO",{"type":45,"tag":121,"props":289,"children":291},{"className":290},[124],[292,308,331,340],{"type":45,"tag":127,"props":293,"children":295},{"className":294},[130],[296,299,300,306],{"type":45,"tag":133,"props":297,"children":298},{"disabled":135,"type":136},[],{"type":51,"value":157},{"type":45,"tag":141,"props":301,"children":303},{"className":302},[],[304],{"type":51,"value":305},"fontname",{"type":51,"value":307}," is set consistently (Helvetica or similar sans-serif)",{"type":45,"tag":127,"props":309,"children":311},{"className":310},[130],[312,315,316,322,323,329],{"type":45,"tag":133,"props":313,"children":314},{"disabled":135,"type":136},[],{"type":51,"value":157},{"type":45,"tag":141,"props":317,"children":319},{"className":318},[],[320],{"type":51,"value":321},"nodesep",{"type":51,"value":231},{"type":45,"tag":141,"props":324,"children":326},{"className":325},[],[327],{"type":51,"value":328},"ranksep",{"type":51,"value":330}," are tuned for readability",{"type":45,"tag":127,"props":332,"children":334},{"className":333},[130],[335,338],{"type":45,"tag":133,"props":336,"children":337},{"disabled":135,"type":136},[],{"type":51,"value":339}," Cluster fill colors are distinct from node fill colors",{"type":45,"tag":127,"props":341,"children":343},{"className":342},[130],[344,347,349,355],{"type":45,"tag":133,"props":345,"children":346},{"disabled":135,"type":136},[],{"type":51,"value":348}," A ",{"type":45,"tag":141,"props":350,"children":352},{"className":351},[],[353],{"type":51,"value":354},"\u002F\u002F comment",{"type":51,"value":356}," explains any non-obvious structural choice",{"type":45,"tag":78,"props":358,"children":359},{},[],{"type":45,"tag":54,"props":361,"children":363},{"id":362},"line-count-targets",[364],{"type":51,"value":365},"Line Count Targets",{"type":45,"tag":367,"props":368,"children":369},"table",{},[370,399],{"type":45,"tag":371,"props":372,"children":373},"thead",{},[374],{"type":45,"tag":375,"props":376,"children":377},"tr",{},[378,384,389,394],{"type":45,"tag":379,"props":380,"children":381},"th",{},[382],{"type":51,"value":383},"Diagram Type",{"type":45,"tag":379,"props":385,"children":386},{},[387],{"type":51,"value":388},"Target",{"type":45,"tag":379,"props":390,"children":391},{},[392],{"type":51,"value":393},"WARN at",{"type":45,"tag":379,"props":395,"children":396},{},[397],{"type":51,"value":398},"FAIL at",{"type":45,"tag":400,"props":401,"children":402},"tbody",{},[403,427,450,473],{"type":45,"tag":375,"props":404,"children":405},{},[406,412,417,422],{"type":45,"tag":407,"props":408,"children":409},"td",{},[410],{"type":51,"value":411},"Overview \u002F context",{"type":45,"tag":407,"props":413,"children":414},{},[415],{"type":51,"value":416},"30–80",{"type":45,"tag":407,"props":418,"children":419},{},[420],{"type":51,"value":421},"120",{"type":45,"tag":407,"props":423,"children":424},{},[425],{"type":51,"value":426},"200",{"type":45,"tag":375,"props":428,"children":429},{},[430,435,440,445],{"type":45,"tag":407,"props":431,"children":432},{},[433],{"type":51,"value":434},"Architecture (detail)",{"type":45,"tag":407,"props":436,"children":437},{},[438],{"type":51,"value":439},"80–150",{"type":45,"tag":407,"props":441,"children":442},{},[443],{"type":51,"value":444},"250",{"type":45,"tag":407,"props":446,"children":447},{},[448],{"type":51,"value":449},"400",{"type":45,"tag":375,"props":451,"children":452},{},[453,458,463,468],{"type":45,"tag":407,"props":454,"children":455},{},[456],{"type":51,"value":457},"Inline (single concept)",{"type":45,"tag":407,"props":459,"children":460},{},[461],{"type":51,"value":462},"10–30",{"type":45,"tag":407,"props":464,"children":465},{},[466],{"type":51,"value":467},"50",{"type":45,"tag":407,"props":469,"children":470},{},[471],{"type":51,"value":472},"80",{"type":45,"tag":375,"props":474,"children":475},{},[476,481,486,491],{"type":45,"tag":407,"props":477,"children":478},{},[479],{"type":51,"value":480},"Quick sketch",{"type":45,"tag":407,"props":482,"children":483},{},[484],{"type":51,"value":485},"5–20",{"type":45,"tag":407,"props":487,"children":488},{},[489],{"type":51,"value":490},"35",{"type":45,"tag":407,"props":492,"children":493},{},[494],{"type":51,"value":495},"60",{"type":45,"tag":61,"props":497,"children":498},{},[499],{"type":51,"value":500},"Diagrams that exceed WARN thresholds should be split into overview + detail files.",{"type":45,"tag":78,"props":502,"children":503},{},[],{"type":45,"tag":54,"props":505,"children":507},{"id":506},"anti-pattern-red-flags",[508],{"type":51,"value":509},"Anti-Pattern Red Flags",{"type":45,"tag":367,"props":511,"children":512},{},[513,534],{"type":45,"tag":371,"props":514,"children":515},{},[516],{"type":45,"tag":375,"props":517,"children":518},{},[519,524,529],{"type":45,"tag":379,"props":520,"children":521},{},[522],{"type":51,"value":523},"Flag",{"type":45,"tag":379,"props":525,"children":526},{},[527],{"type":51,"value":528},"Problem",{"type":45,"tag":379,"props":530,"children":531},{},[532],{"type":51,"value":533},"Fix",{"type":45,"tag":400,"props":535,"children":536},{},[537,555,573,595,613,631,649],{"type":45,"tag":375,"props":538,"children":539},{},[540,545,550],{"type":45,"tag":407,"props":541,"children":542},{},[543],{"type":51,"value":544},"Floating node",{"type":45,"tag":407,"props":546,"children":547},{},[548],{"type":51,"value":549},"Node with no edges — forgotten or placeholder",{"type":45,"tag":407,"props":551,"children":552},{},[553],{"type":51,"value":554},"Connect it or remove it",{"type":45,"tag":375,"props":556,"children":557},{},[558,563,568],{"type":45,"tag":407,"props":559,"children":560},{},[561],{"type":51,"value":562},"Mystery color",{"type":45,"tag":407,"props":564,"children":565},{},[566],{"type":51,"value":567},"Color used without legend entry",{"type":45,"tag":407,"props":569,"children":570},{},[571],{"type":51,"value":572},"Add to legend or remove color",{"type":45,"tag":375,"props":574,"children":575},{},[576,585,590],{"type":45,"tag":407,"props":577,"children":578},{},[579],{"type":45,"tag":141,"props":580,"children":582},{"className":581},[],[583],{"type":51,"value":584},"label=\"\"",{"type":45,"tag":407,"props":586,"children":587},{},[588],{"type":51,"value":589},"Empty label — invisible node",{"type":45,"tag":407,"props":591,"children":592},{},[593],{"type":51,"value":594},"Set a meaningful label",{"type":45,"tag":375,"props":596,"children":597},{},[598,603,608],{"type":45,"tag":407,"props":599,"children":600},{},[601],{"type":51,"value":602},"Duplicate node IDs",{"type":45,"tag":407,"props":604,"children":605},{},[606],{"type":51,"value":607},"Same ID used for different concepts",{"type":45,"tag":407,"props":609,"children":610},{},[611],{"type":51,"value":612},"Rename to make IDs unique",{"type":45,"tag":375,"props":614,"children":615},{},[616,621,626],{"type":45,"tag":407,"props":617,"children":618},{},[619],{"type":51,"value":620},"All nodes same shape",{"type":45,"tag":407,"props":622,"children":623},{},[624],{"type":51,"value":625},"Shape vocabulary not being used",{"type":45,"tag":407,"props":627,"children":628},{},[629],{"type":51,"value":630},"Apply shape-meaning table",{"type":45,"tag":375,"props":632,"children":633},{},[634,639,644],{"type":45,"tag":407,"props":635,"children":636},{},[637],{"type":51,"value":638},"Edges without direction meaning",{"type":45,"tag":407,"props":640,"children":641},{},[642],{"type":51,"value":643},"Arrow direction doesn't match data\u002Fcontrol flow",{"type":45,"tag":407,"props":645,"children":646},{},[647],{"type":51,"value":648},"Reverse or relabel edges",{"type":45,"tag":375,"props":650,"children":651},{},[652,657,662],{"type":45,"tag":407,"props":653,"children":654},{},[655],{"type":51,"value":656},"No title",{"type":45,"tag":407,"props":658,"children":659},{},[660],{"type":51,"value":661},"Anonymous diagram — cannot be referenced",{"type":45,"tag":407,"props":663,"children":664},{},[665,667,672,673],{"type":51,"value":666},"Add ",{"type":45,"tag":141,"props":668,"children":670},{"className":669},[],[671],{"type":51,"value":146},{"type":51,"value":231},{"type":45,"tag":141,"props":674,"children":676},{"className":675},[],[677],{"type":51,"value":163},{"type":45,"tag":78,"props":679,"children":680},{},[],{"type":45,"tag":54,"props":682,"children":684},{"id":683},"shape-vocabulary-compliance",[685],{"type":51,"value":686},"Shape Vocabulary Compliance",{"type":45,"tag":61,"props":688,"children":689},{},[690],{"type":51,"value":691},"Shapes carry semantic meaning. Using the wrong shape creates ambiguity:",{"type":45,"tag":367,"props":693,"children":694},{},[695,716],{"type":45,"tag":371,"props":696,"children":697},{},[698],{"type":45,"tag":375,"props":699,"children":700},{},[701,706,711],{"type":45,"tag":379,"props":702,"children":703},{},[704],{"type":51,"value":705},"Shape",{"type":45,"tag":379,"props":707,"children":708},{},[709],{"type":51,"value":710},"Meaning",{"type":45,"tag":379,"props":712,"children":713},{},[714],{"type":51,"value":715},"Misuse to Avoid",{"type":45,"tag":400,"props":717,"children":718},{},[719,749,771,793,814,836,858,880,902,924],{"type":45,"tag":375,"props":720,"children":721},{},[722,739,744],{"type":45,"tag":407,"props":723,"children":724},{},[725,731,733],{"type":45,"tag":141,"props":726,"children":728},{"className":727},[],[729],{"type":51,"value":730},"box",{"type":51,"value":732}," \u002F ",{"type":45,"tag":141,"props":734,"children":736},{"className":735},[],[737],{"type":51,"value":738},"rectangle",{"type":45,"tag":407,"props":740,"children":741},{},[742],{"type":51,"value":743},"Service, process, component",{"type":45,"tag":407,"props":745,"children":746},{},[747],{"type":51,"value":748},"Don't use for data stores",{"type":45,"tag":375,"props":750,"children":751},{},[752,761,766],{"type":45,"tag":407,"props":753,"children":754},{},[755],{"type":45,"tag":141,"props":756,"children":758},{"className":757},[],[759],{"type":51,"value":760},"cylinder",{"type":45,"tag":407,"props":762,"children":763},{},[764],{"type":51,"value":765},"Database, file store, queue",{"type":45,"tag":407,"props":767,"children":768},{},[769],{"type":51,"value":770},"Don't use for services",{"type":45,"tag":375,"props":772,"children":773},{},[774,783,788],{"type":45,"tag":407,"props":775,"children":776},{},[777],{"type":45,"tag":141,"props":778,"children":780},{"className":779},[],[781],{"type":51,"value":782},"diamond",{"type":45,"tag":407,"props":784,"children":785},{},[786],{"type":51,"value":787},"Decision point, branch",{"type":45,"tag":407,"props":789,"children":790},{},[791],{"type":51,"value":792},"Don't use for processes",{"type":45,"tag":375,"props":794,"children":795},{},[796,805,810],{"type":45,"tag":407,"props":797,"children":798},{},[799],{"type":45,"tag":141,"props":800,"children":802},{"className":801},[],[803],{"type":51,"value":804},"ellipse",{"type":45,"tag":407,"props":806,"children":807},{},[808],{"type":51,"value":809},"Start \u002F end state, terminal",{"type":45,"tag":407,"props":811,"children":812},{},[813],{"type":51,"value":770},{"type":45,"tag":375,"props":815,"children":816},{},[817,826,831],{"type":45,"tag":407,"props":818,"children":819},{},[820],{"type":45,"tag":141,"props":821,"children":823},{"className":822},[],[824],{"type":51,"value":825},"doublecircle",{"type":45,"tag":407,"props":827,"children":828},{},[829],{"type":51,"value":830},"Final\u002Faccepted state (FSM)",{"type":45,"tag":407,"props":832,"children":833},{},[834],{"type":51,"value":835},"Reserve for state machines",{"type":45,"tag":375,"props":837,"children":838},{},[839,848,853],{"type":45,"tag":407,"props":840,"children":841},{},[842],{"type":45,"tag":141,"props":843,"children":845},{"className":844},[],[846],{"type":51,"value":847},"parallelogram",{"type":45,"tag":407,"props":849,"children":850},{},[851],{"type":51,"value":852},"External system, I\u002FO",{"type":45,"tag":407,"props":854,"children":855},{},[856],{"type":51,"value":857},"Don't use for internal services",{"type":45,"tag":375,"props":859,"children":860},{},[861,870,875],{"type":45,"tag":407,"props":862,"children":863},{},[864],{"type":45,"tag":141,"props":865,"children":867},{"className":866},[],[868],{"type":51,"value":869},"note",{"type":45,"tag":407,"props":871,"children":872},{},[873],{"type":51,"value":874},"Annotation, documentation node",{"type":45,"tag":407,"props":876,"children":877},{},[878],{"type":51,"value":879},"Don't use for primary components",{"type":45,"tag":375,"props":881,"children":882},{},[883,892,897],{"type":45,"tag":407,"props":884,"children":885},{},[886],{"type":45,"tag":141,"props":887,"children":889},{"className":888},[],[890],{"type":51,"value":891},"component",{"type":45,"tag":407,"props":893,"children":894},{},[895],{"type":51,"value":896},"Fan-out \u002F fan-in coordinator",{"type":45,"tag":407,"props":898,"children":899},{},[900],{"type":51,"value":901},"Don't use for simple steps",{"type":45,"tag":375,"props":903,"children":904},{},[905,914,919],{"type":45,"tag":407,"props":906,"children":907},{},[908],{"type":45,"tag":141,"props":909,"children":911},{"className":910},[],[912],{"type":51,"value":913},"point",{"type":45,"tag":407,"props":915,"children":916},{},[917],{"type":51,"value":918},"Initial state marker (FSM)",{"type":45,"tag":407,"props":920,"children":921},{},[922],{"type":51,"value":923},"Reserve for state machines only",{"type":45,"tag":375,"props":925,"children":926},{},[927,936,941],{"type":45,"tag":407,"props":928,"children":929},{},[930],{"type":45,"tag":141,"props":931,"children":933},{"className":932},[],[934],{"type":51,"value":935},"folder",{"type":45,"tag":407,"props":937,"children":938},{},[939],{"type":51,"value":940},"File group, repository",{"type":45,"tag":407,"props":942,"children":943},{},[944],{"type":51,"value":770},{"type":45,"tag":78,"props":946,"children":947},{},[],{"type":45,"tag":54,"props":949,"children":951},{"id":950},"the-quality-gate",[952],{"type":51,"value":953},"The Quality Gate",{"type":45,"tag":61,"props":955,"children":956},{},[957],{"type":51,"value":958},"Run this 7-step check before every diagram is shared, committed, or embedded in documentation:",{"type":45,"tag":960,"props":961,"children":962},"ol",{},[963,981,998,1031,1041,1051,1061],{"type":45,"tag":127,"props":964,"children":965},{},[966,971,973,979],{"type":45,"tag":70,"props":967,"children":968},{},[969],{"type":51,"value":970},"Render check",{"type":51,"value":972}," — ",{"type":45,"tag":141,"props":974,"children":976},{"className":975},[],[977],{"type":51,"value":978},"dot -Tsvg diagram.dot > \u002Fdev\u002Fnull",{"type":51,"value":980}," — zero errors",{"type":45,"tag":127,"props":982,"children":983},{},[984,989,990,996],{"type":45,"tag":70,"props":985,"children":986},{},[987],{"type":51,"value":988},"Title check",{"type":51,"value":972},{"type":45,"tag":141,"props":991,"children":993},{"className":992},[],[994],{"type":51,"value":995},"grep 'label=' diagram.dot",{"type":51,"value":997}," shows a non-empty title",{"type":45,"tag":127,"props":999,"children":1000},{},[1001,1006,1008,1014,1016,1022,1024,1029],{"type":45,"tag":70,"props":1002,"children":1003},{},[1004],{"type":51,"value":1005},"Color check",{"type":51,"value":1007}," — if any ",{"type":45,"tag":141,"props":1009,"children":1011},{"className":1010},[],[1012],{"type":51,"value":1013},"fillcolor",{"type":51,"value":1015}," or ",{"type":45,"tag":141,"props":1017,"children":1019},{"className":1018},[],[1020],{"type":51,"value":1021},"color",{"type":51,"value":1023}," attribute is set, ",{"type":45,"tag":141,"props":1025,"children":1027},{"className":1026},[],[1028],{"type":51,"value":261},{"type":51,"value":1030}," exists",{"type":45,"tag":127,"props":1032,"children":1033},{},[1034,1039],{"type":45,"tag":70,"props":1035,"children":1036},{},[1037],{"type":51,"value":1038},"Shape check",{"type":51,"value":1040}," — review each node shape against the Shape Vocabulary table",{"type":45,"tag":127,"props":1042,"children":1043},{},[1044,1049],{"type":45,"tag":70,"props":1045,"children":1046},{},[1047],{"type":51,"value":1048},"Float check",{"type":51,"value":1050}," — every node has at least one edge (incoming or outgoing)",{"type":45,"tag":127,"props":1052,"children":1053},{},[1054,1059],{"type":45,"tag":70,"props":1055,"children":1056},{},[1057],{"type":51,"value":1058},"Path check",{"type":51,"value":1060}," — error\u002Ffailure paths are present, not just the happy path",{"type":45,"tag":127,"props":1062,"children":1063},{},[1064,1069],{"type":45,"tag":70,"props":1065,"children":1066},{},[1067],{"type":51,"value":1068},"Size check",{"type":51,"value":1070}," — line count is within target range for the diagram type",{"items":1072,"total":1141},[1073,1086,1097,1108,1116,1127],{"slug":1074,"name":1074,"fn":1075,"description":1076,"org":1077,"tags":1078,"stars":28,"repoUrl":29,"updatedAt":1085},"dot-as-analysis","analyze systems by reconciling DOT diagrams","Use when analyzing a system to surface hidden issues — draw what you believe exists, then reconcile against what actually exists",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1079,1082,1083,1084],{"name":1080,"slug":1081,"type":15},"Code Analysis","code-analysis",{"name":20,"slug":21,"type":15},{"name":23,"slug":24,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:37:07.174813",{"slug":1087,"name":1087,"fn":1088,"description":1089,"org":1090,"tags":1091,"stars":28,"repoUrl":29,"updatedAt":1096},"dot-graph-intelligence","analyze graph structures programmatically","Use when you need programmatic graph structure analysis — reachability, cycles, critical paths, and diffs without spending LLM tokens on structural questions code can answer",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1092,1093],{"name":1080,"slug":1081,"type":15},{"name":1094,"slug":1095,"type":15},"Graph Analysis","graph-analysis","2026-04-06T18:37:09.744416",{"slug":1098,"name":1098,"fn":1099,"description":1100,"org":1101,"tags":1102,"stars":28,"repoUrl":29,"updatedAt":1107},"dot-patterns","provide DOT templates for common diagrams","Use when you need copy-paste DOT templates for common diagram types — start from a working pattern rather than blank canvas",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1103,1104,1105,1106],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:37:04.633419",{"slug":4,"name":4,"fn":5,"description":6,"org":1109,"tags":1110,"stars":28,"repoUrl":29,"updatedAt":30},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1111,1112,1113,1114,1115],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"name":13,"slug":14,"type":15},{"name":26,"slug":27,"type":15},{"slug":1117,"name":1117,"fn":1118,"description":1119,"org":1120,"tags":1121,"stars":28,"repoUrl":29,"updatedAt":1126},"dot-syntax","provide DOT and Graphviz syntax reference","Use when writing or reading DOT\u002FGraphviz code and needing quick syntax reference — node declarations, edge syntax, attributes, subgraphs, HTML labels, and common gotchas",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1122,1123,1124,1125],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":23,"slug":24,"type":15},{"name":9,"slug":8,"type":15},"2026-04-06T18:37:05.896668",{"slug":1128,"name":1128,"fn":1129,"description":1130,"org":1131,"tags":1132,"stars":28,"repoUrl":29,"updatedAt":1140},"parallax-investigation","investigate complex systems with multi-agent analysis","Use when you need true understanding of a complex system — not a quick answer. Parallax Discovery is a multi-agent, multi-pass investigation methodology that combines three perspectives (code tracing, behavior observation, integration mapping) to produce verified, evidence-backed findings.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1133,1134,1137],{"name":1080,"slug":1081,"type":15},{"name":1135,"slug":1136,"type":15},"Debugging","debugging",{"name":1138,"slug":1139,"type":15},"Multi-Agent","multi-agent","2026-04-06T18:37:08.486158",6,{"items":1143,"total":1338},[1144,1166,1187,1208,1223,1240,1251,1264,1279,1294,1313,1326],{"slug":1145,"name":1145,"fn":1146,"description":1147,"org":1148,"tags":1149,"stars":1163,"repoUrl":1164,"updatedAt":1165},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1150,1153,1156,1157,1160],{"name":1151,"slug":1152,"type":15},"Engineering","engineering",{"name":1154,"slug":1155,"type":15},"Local Development","local-development",{"name":9,"slug":8,"type":15},{"name":1158,"slug":1159,"type":15},"Project Management","project-management",{"name":1161,"slug":1162,"type":15},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":1167,"name":1167,"fn":1168,"description":1169,"org":1170,"tags":1171,"stars":1184,"repoUrl":1185,"updatedAt":1186},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1172,1175,1178,1181],{"name":1173,"slug":1174,"type":15},".NET","net",{"name":1176,"slug":1177,"type":15},"Agents","agents",{"name":1179,"slug":1180,"type":15},"Azure","azure",{"name":1182,"slug":1183,"type":15},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":1188,"name":1188,"fn":1189,"description":1190,"org":1191,"tags":1192,"stars":1184,"repoUrl":1185,"updatedAt":1207},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1193,1196,1197,1200,1203,1204],{"name":1194,"slug":1195,"type":15},"Analytics","analytics",{"name":1179,"slug":1180,"type":15},{"name":1198,"slug":1199,"type":15},"Data Analysis","data-analysis",{"name":1201,"slug":1202,"type":15},"Java","java",{"name":9,"slug":8,"type":15},{"name":1205,"slug":1206,"type":15},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":1209,"name":1209,"fn":1210,"description":1211,"org":1212,"tags":1213,"stars":1184,"repoUrl":1185,"updatedAt":1222},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1214,1217,1218,1219],{"name":1215,"slug":1216,"type":15},"AI Infrastructure","ai-infrastructure",{"name":1179,"slug":1180,"type":15},{"name":1201,"slug":1202,"type":15},{"name":1220,"slug":1221,"type":15},"Security","security","2026-07-07T06:53:31.293235",{"slug":1224,"name":1224,"fn":1225,"description":1226,"org":1227,"tags":1228,"stars":1184,"repoUrl":1185,"updatedAt":1239},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1229,1230,1233,1234,1235,1238],{"name":1179,"slug":1180,"type":15},{"name":1231,"slug":1232,"type":15},"Compliance","compliance",{"name":1182,"slug":1183,"type":15},{"name":9,"slug":8,"type":15},{"name":1236,"slug":1237,"type":15},"Python","python",{"name":1220,"slug":1221,"type":15},"2026-07-18T05:14:23.017504",{"slug":1241,"name":1241,"fn":1242,"description":1243,"org":1244,"tags":1245,"stars":1184,"repoUrl":1185,"updatedAt":1250},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1246,1247,1248,1249],{"name":1194,"slug":1195,"type":15},{"name":1179,"slug":1180,"type":15},{"name":1182,"slug":1183,"type":15},{"name":1236,"slug":1237,"type":15},"2026-07-31T05:54:29.068751",{"slug":1252,"name":1252,"fn":1253,"description":1254,"org":1255,"tags":1256,"stars":1184,"repoUrl":1185,"updatedAt":1263},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1257,1260,1261,1262],{"name":1258,"slug":1259,"type":15},"API Development","api-development",{"name":1179,"slug":1180,"type":15},{"name":9,"slug":8,"type":15},{"name":1236,"slug":1237,"type":15},"2026-07-18T05:14:16.988376",{"slug":1265,"name":1265,"fn":1266,"description":1267,"org":1268,"tags":1269,"stars":1184,"repoUrl":1185,"updatedAt":1278},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1270,1271,1274,1277],{"name":1179,"slug":1180,"type":15},{"name":1272,"slug":1273,"type":15},"Computer Vision","computer-vision",{"name":1275,"slug":1276,"type":15},"Images","images",{"name":1236,"slug":1237,"type":15},"2026-07-18T05:14:18.007737",{"slug":1280,"name":1280,"fn":1281,"description":1282,"org":1283,"tags":1284,"stars":1184,"repoUrl":1185,"updatedAt":1293},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1285,1286,1289,1292],{"name":1179,"slug":1180,"type":15},{"name":1287,"slug":1288,"type":15},"Configuration","configuration",{"name":1290,"slug":1291,"type":15},"Feature Flags","feature-flags",{"name":1201,"slug":1202,"type":15},"2026-07-03T16:32:01.278468",{"slug":1295,"name":1295,"fn":1296,"description":1297,"org":1298,"tags":1299,"stars":1184,"repoUrl":1185,"updatedAt":1312},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1300,1303,1306,1309],{"name":1301,"slug":1302,"type":15},"Cosmos DB","cosmos-db",{"name":1304,"slug":1305,"type":15},"Database","database",{"name":1307,"slug":1308,"type":15},"NoSQL","nosql",{"name":1310,"slug":1311,"type":15},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":1314,"name":1314,"fn":1296,"description":1315,"org":1316,"tags":1317,"stars":1184,"repoUrl":1185,"updatedAt":1325},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1318,1319,1320,1321,1322],{"name":1301,"slug":1302,"type":15},{"name":1304,"slug":1305,"type":15},{"name":9,"slug":8,"type":15},{"name":1307,"slug":1308,"type":15},{"name":1323,"slug":1324,"type":15},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":1327,"name":1327,"fn":1328,"description":1329,"org":1330,"tags":1331,"stars":1184,"repoUrl":1185,"updatedAt":1337},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1332,1333,1334,1335,1336],{"name":1179,"slug":1180,"type":15},{"name":1301,"slug":1302,"type":15},{"name":1304,"slug":1305,"type":15},{"name":1201,"slug":1202,"type":15},{"name":1307,"slug":1308,"type":15},"2026-05-13T06:14:17.582229",267]