[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7ERTY4794YEX0QVV8QT2AB6":3,"skill-same:01M7ERTY4794YEX0QVV8QT2AB6":47},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":26,"commitSha":27,"skillDirectory":28,"forksCount":14,"repositoryHtmlUrl":29,"repositoryHomepageUrl":6,"ownerHtmlUrl":30,"ownerBlogUrl":6,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M7ERTY4794YEX0QVV8QT2AB6","diagram-state",null,"Draw the state machine of one entity, with states extracted from its enum, union or constants and each transition cited at the code that performs it or marked inferred. Use for \"what states can X be in\", \"how does X move between them\", or before adding a state or transition.","Ventorius\u002Fven-stack","Ventorius","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F5689509?v=4","01M7ERRDPQ5YXCNXJZWEKQNP50","Sebastian Basznianin","01M7ERRDQ9S0ZD9YMH1RN1WVP7",0,"MIT","https:\u002F\u002Fgithub.com\u002FVentorius\u002Fven-stack\u002Fblob\u002Fmain\u002Fplugins\u002Fven\u002Fskills\u002Fdiagram-state\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: diagram-state\ndescription: Draw the state machine of one entity, with states extracted from its enum, union or constants and each transition cited at the code that performs it or marked inferred. Use for \"what states can X be in\", \"how does X move between them\", or before adding a state or transition.\nmetadata:\n  layer: L3\n---\n\n# Diagram state\n\nStates come from the code that declares them. Transitions come from the code that changes them. A transition you can't point to is inferred, and it must look inferred.\n\nThe answer is a page, not a diagram in chat. Before you reply, open **diagram-deps** and write the page its badge protocol calls **Rendering**; the reply is the badge, a short summary and the page's path. A request to keep it short or quick shortens the summary, not this step.\n\n## 1. Find the states\n\n1. Find the declaration of the entity's states: an enum, a union type, or a set of constants. Map the entity's domain name to code with `$(ven-profile path)\u002FGLOSSARY.md`, then search with `ven-profile adapter code.search --var pattern=\u003Ctype or field name>`.\n2. List its members with `ven-profile adapter symbols.list --file \u003Cpath>`, which prints `name kind line`. Each state cites its declaring line.\n3. A state value used in code but missing from the declaration (a bare literal somewhere else) is a finding. Draw it with an `undeclared` note.\n\nOn exit 3 from either adapter, read the declaring file and search yourself, per the no-adapter rule of the badge protocol in **diagram-deps**.\n\n## 2. Find the transitions\n\nFor each state, find every place that sets the entity's state field to it. At each site, read the guard to learn the source state.\n\n- **Cited:** the site shows the source (a guard, a match arm, a conditional write that filters on the current state) and the target. Cite the line that writes the target.\n- **Inferred:** the target is clear but the source is not (no guard, or a write that accepts any state). Draw it with a `?` after its label.\n- **Initial state:** where the entity is created or its default is declared. Cite that line on the `[*]` edge.\n- A write that accepts any state is one row under the diagram (\"any state → archived\"), not an edge from every state.\n\n## 3. Draw and check\n\n```mermaid\nstateDiagram-v2\n  [*] --> draft: create\n  draft --> published: publish\n  published --> archived: archive\n  draft --> archived: archive ?\n```\n\nPut the claim table that **citation-check** builds under the diagram: one row per state declaration and per cited transition. Run **citation-check**. The caption counts transitions: `HYBRID (3\u002F4 edges cited)` while an inferred edge is on screen.\n\nA saved state diagram has only cited transitions. Before saving per the badge protocol (as `state-\u003Centity>`), drop each inferred edge from the diagram and list it under \"Inferred transitions, not in the diagram\" with the line that made you suspect it.\n\n## 4. Findings\n\nAfter the diagram, list what the picture reveals:\n\n- States with no incoming transition (unreachable) and states with no outgoing one that are not meant to be final.\n- Undeclared states, and transitions that skip a guard the others have.\n- Writes that accept any state, since they bypass the machine.\n\nRender it per **Rendering** in the badge protocol of **diagram-deps**.\n","# Diagram state\n\nStates come from the code that declares them. Transitions come from the code that changes them. A transition you can't point to is inferred, and it must look inferred.\n\nThe answer is a page, not a diagram in chat. Before you reply, open **diagram-deps** and write the page its badge protocol calls **Rendering**; the reply is the badge, a short summary and the page's path. A request to keep it short or quick shortens the summary, not this step.\n\n## 1. Find the states\n\n1. Find the declaration of the entity's states: an enum, a union type, or a set of constants. Map the entity's domain name to code with `$(ven-profile path)\u002FGLOSSARY.md`, then search with `ven-profile adapter code.search --var pattern=\u003Ctype or field name>`.\n2. List its members with `ven-profile adapter symbols.list --file \u003Cpath>`, which prints `name kind line`. Each state cites its declaring line.\n3. A state value used in code but missing from the declaration (a bare literal somewhere else) is a finding. Draw it with an `undeclared` note.\n\nOn exit 3 from either adapter, read the declaring file and search yourself, per the no-adapter rule of the badge protocol in **diagram-deps**.\n\n## 2. Find the transitions\n\nFor each state, find every place that sets the entity's state field to it. At each site, read the guard to learn the source state.\n\n- **Cited:** the site shows the source (a guard, a match arm, a conditional write that filters on the current state) and the target. Cite the line that writes the target.\n- **Inferred:** the target is clear but the source is not (no guard, or a write that accepts any state). Draw it with a `?` after its label.\n- **Initial state:** where the entity is created or its default is declared. Cite that line on the `[*]` edge.\n- A write that accepts any state is one row under the diagram (\"any state → archived\"), not an edge from every state.\n\n## 3. Draw and check\n\n```mermaid\nstateDiagram-v2\n  [*] --> draft: create\n  draft --> published: publish\n  published --> archived: archive\n  draft --> archived: archive ?\n```\n\nPut the claim table that **citation-check** builds under the diagram: one row per state declaration and per cited transition. Run **citation-check**. The caption counts transitions: `HYBRID (3\u002F4 edges cited)` while an inferred edge is on screen.\n\nA saved state diagram has only cited transitions. Before saving per the badge protocol (as `state-\u003Centity>`), drop each inferred edge from the diagram and list it under \"Inferred transitions, not in the diagram\" with the line that made you suspect it.\n\n## 4. Findings\n\nAfter the diagram, list what the picture reveals:\n\n- States with no incoming transition (unreachable) and states with no outgoing one that are not meant to be final.\n- Undeclared states, and transitions that skip a guard the others have.\n- Writes that accept any state, since they bypass the machine.\n\nRender it per **Rendering** in the badge protocol of **diagram-deps**.\n",{"name":5,"metadata":24,"description":7},{"layer":25},"L3","main","e57e3dd5c8aec0fe40658397aee9fd9b1d77bb60","plugins\u002Fven\u002Fskills\u002Fdiagram-state","https:\u002F\u002Fgithub.com\u002FVentorius\u002Fven-stack","https:\u002F\u002Fgithub.com\u002FVentorius","Heavy testing believer. Workflow automation fan. Fullstack JS developer.","2026-11-04 04:05:46",{"source":8,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add Ventorius\u002Fven-stack --skill diagram-state",{"tool":39,"command":40},"bunx","bunx skills add Ventorius\u002Fven-stack --skill diagram-state",{"tool":42,"command":43},"pnpm","pnpm dlx skills add Ventorius\u002Fven-stack --skill diagram-state","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FVentorius\u002Fven-stack\u002Fblob\u002Fmain\u002Fplugins\u002Fven\u002Fskills\u002Fdiagram-state\u002FSKILL.md",true,[],[48,55,62,69,76,83],{"skillNo":49,"name":50,"nameZh":6,"description":51,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":54,"publishedAt":19},"01M7ES1P06ZPAGTT7YS4V6MS32","yeet","Take every local change green through the repo's own checks, slice it into conventional commits, push, and with --pr open a pull request on the code host. Use only when the user explicitly asks to yeet, or to commit and push everything; never on your own initiative.","https:\u002F\u002Fgithub.com\u002FVentorius\u002Fven-stack\u002Fblob\u002Fmain\u002Fplugins\u002Fven\u002Fskills\u002Fyeet\u002FSKILL.md",[],[],{"skillNo":56,"name":57,"nameZh":6,"description":58,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":59,"categories":60,"keywords":61,"publishedAt":19},"01M7ES1JHVQEN3YYMRZEBM2E79","write-docs","Write or update documentation from the code: gather facts, pick the shape for the reader, write it plain, and prove every command and path in it. Use when asked to document a repo, module or feature, or to bring stale docs up to date.","https:\u002F\u002Fgithub.com\u002FVentorius\u002Fven-stack\u002Fblob\u002Fmain\u002Fplugins\u002Fven\u002Fskills\u002Fwrite-docs\u002FSKILL.md",[],[],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":19},"01M7ES1DD3YVMF1MY7D51R6516","why","Find why code is shaped the way it is (design rationale, trade-offs, regressions, odd thresholds) from history, tickets, docs and chat, citing every claim and stating its confidence. Use for 'why does X work this way', 'why did we pick Y', or before changing code whose purpose is unclear.","https:\u002F\u002Fgithub.com\u002FVentorius\u002Fven-stack\u002Fblob\u002Fmain\u002Fplugins\u002Fven\u002Fskills\u002Fwhy\u002FSKILL.md",[],[],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":19},"01M7ES18XVRZGQ0V1BBZH63Q8W","verify","Prove a change works with the check that matches its type, do the read-back, and log the pass against the exact tree. Use when a change is ready to call done, before review, commit or stopping, and whenever ven-decisions end refuses an unverified tree.","https:\u002F\u002Fgithub.com\u002FVentorius\u002Fven-stack\u002Fblob\u002Fmain\u002Fplugins\u002Fven\u002Fskills\u002Fverify\u002FSKILL.md",[],[],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":82,"publishedAt":19},"01M7ES15Z3W8QTJH4CRAJ53D2G","unslop","Cut AI writing tells (filler, model vocabulary, metaphor nouns, hedging, formatting tics) from text while keeping every fact. Use when editing or checking any prose before it ships: docs, PR bodies, reports, skill text.","https:\u002F\u002Fgithub.com\u002FVentorius\u002Fven-stack\u002Fblob\u002Fmain\u002Fplugins\u002Fven\u002Fskills\u002Funslop\u002FSKILL.md",[],[],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":19},"01M7ES12GT9WD9NE2X3M1B29ZZ","type-discipline","Apply when designing types or data shapes, reviewing a signature, or handling outside data, in any language. Make wrong states fail early: in the compiler for typed languages, in validated runtime contracts for untyped ones.","https:\u002F\u002Fgithub.com\u002FVentorius\u002Fven-stack\u002Fblob\u002Fmain\u002Fplugins\u002Fven\u002Fskills\u002Ftype-discipline\u002FSKILL.md",[],[]]