[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6N9DRC374NBA73MSGQV7TWW":3,"skill-same:01M6N9DRC374NBA73MSGQV7TWW":64},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6N9DRC374NBA73MSGQV7TWW","bubbles-technical-prose",null,"Write generated technical prose that a reader can act on without re-reading. Use when authoring or reviewing spec.md, design.md, report.md, scopes.md, managed docs, agent modules, refusal messages, or result-envelope narrative. Covers sentence length, banned punctuation, active voice, one instruction per sentence, and note-versus-warning form. Never applies to verbatim evidence, human-owned uservalidation.md, or release-packet narrative.","pkirsanov\u002Fsmackerel","pkirsanov","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F138962?v=4","01M6N8NAPD2KXMVC17X6GJ0WZ5","01M6N8NATQ9SAZ00H9D61R0TPV",1,"MIT","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fbubbles-technical-prose\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"bubbles technical prose","technical","prose","active","result","managed","can","re","form","narrative","warning","human","design","modules","evidence","never","use","generated","messages","release","2026-11-10 10:12:30",false,"---\nname: bubbles-technical-prose\ndescription: Write generated technical prose that a reader can act on without re-reading. Use when authoring or reviewing spec.md, design.md, report.md, scopes.md, managed docs, agent modules, refusal messages, or result-envelope narrative. Covers sentence length, banned punctuation, active voice, one instruction per sentence, and note-versus-warning form. Never applies to verbatim evidence, human-owned uservalidation.md, or release-packet narrative.\n---\n\n# Bubbles Technical Prose\n\n## Goal\n\nMake generated prose unambiguous on first read. Every artifact this framework\nproduces is technical prose that another agent or a human must act on. Prose\nthat has to be re-read is a defect, and it is the one defect no test catches.\n\n## Portability\n\nPortable governance skill. It contains no project paths, commands, hosts, or\nports.\n\n---\n\n## Where this ranks\n\nRead [`analytical-rigor.md`](..\u002F..\u002Fagents\u002Fbubbles_shared\u002Fanalytical-rigor.md)\nfirst. The Four Rigor Rules are Tier 1. Form is Tier 2. Form never outranks\nRule 3.\n\nA clean, confident, well-punctuated, hollow paragraph is still a failed\nanalysis. Never reword a finding to satisfy a rule on this page. If a rule here\nand an honest finding conflict, the finding wins and the rule yields.\n\n---\n\n## The rules\n\n### Sentence length\n\nUse 20 words maximum for a procedural or instructional sentence. Use 25 words\nmaximum for a descriptive sentence.\n\nCount words, not clauses. A long sentence usually holds two instructions. Split\nit.\n\n### Punctuation\n\nDo not use a semicolon in prose. Split the sentence, or use a list.\n\n**The em dash is permitted.** The source standard says so directly: *\"You can\nuse all standard English punctuation marks except the semicolon (;).\"* No other\npunctuation mark is restricted.\n\nThis matters because a popular retelling of the standard claims it bans the em\ndash. That claim is wrong. Adopting it would invent a constraint the standard\ndoes not contain and would flag thousands of conforming sentences as defects.\nDo not re-import the folk version.\n\n### Voice\n\nWrite in the active voice. Write a procedure in the imperative.\n\n- Write: `Run the guard before the transition.`\n- Do not write: `The guard should be run before the transition.`\n\n### Verbs\n\nA verb describes an action. Do not turn a verb into a noun and then attach a\nweak verb to it.\n\n- Write: `Validate the manifest.`\n- Do not write: `Perform validation of the manifest.`\n\nDo not stack auxiliaries. `will have been able to be run` names no action a\nreader can take.\n\nDo not use a phrasal verb where a single verb exists.\n\n- Write `start`, not `kick off`. Write `investigate`, not `look into`. Write\n  `cancel`, not `call off`.\n\n### One instruction per sentence\n\nA sentence carries one instruction. A paragraph carries six sentences at most.\n\nIf a step has a condition, put the condition first and the action second, in\none sentence. If it has two conditions, use two sentences.\n\n### Notes, warnings, cautions\n\nA note informs. A warning and a caution instruct.\n\n- A note gives information the reader may want. It has no imperative.\n- A warning states what will injure a person. It is imperative.\n- A caution states what will damage the system or the data. It is imperative.\n\nNever bury an instruction in a note. A reader who skips notes must not lose a\nrequired step.\n\n### Do not compress by deleting words\n\nDo not drop articles, subjects, or verbs to shorten a sentence. `Guard rejects\ntransition missing evidence` is shorter and worse than `The guard rejects a\ntransition that has no evidence.`\n\nShorten by removing an idea that does not belong, never by removing the grammar\nthat carries it.\n\n### One name per concept\n\nUse one term for one concept everywhere in an artifact. Resolve the term against\nthe framework glossary before you invent a synonym.\n\nThe framework already distinguishes several near-synonyms deliberately. A\n**gate** is a policy. A **guard** is the script that enforces it. A **check** is\none assertion inside a run. Using them interchangeably destroys a distinction\nother agents rely on.\n\nPrefer `subagent` over `sub-agent`.\n\n---\n\n## Two corrections you must not undo\n\nThese are recorded because both errors are widely repeated, and both would\ncorrupt an implementation that copied them uncritically.\n\n1. **The standard does not ban the em dash.** Rule 8.1 excludes the semicolon\n   and nothing else. The word \"dash\" appears three times in 382 pages, never as\n   a prohibition.\n\n2. **A marketing-adjective blacklist is the wrong mechanism.** Words such as\n   `seamless`, `robust`, `powerful`, and `leverage` appear zero times in the\n   standard. They are excluded by a positive allowlist of approved words, not by\n   a list of banned ones. Any blacklist built inside this framework would be the\n   hand-maintained list the original argument objects to. Do not build one.\n\n---\n\n## When NOT to use\n\nThis skill does not apply to:\n\n- **`uservalidation.md`** — human-owned. Never reword what a person wrote.\n- **Verbatim evidence.** Terminal output, logs, diffs, and captured tool results\n  are quoted exactly. Rewording evidence to improve its prose is evidence\n  corruption, and both `bubbles-evidence-capture` and `bubbles-anti-fabrication`\n  forbid it.\n- **Release-packet narrative.** Vision, marketing, and business-plan sections\n  need voice. Flattening them removes their purpose.\n- **Anything quoted from an external source.** Quote it as written.\n- **Code, tables, and inline code spans.** These are not prose.\n\n---\n\n## Works well with\n\n- [`bubbles-skill-authoring`](..\u002Fbubbles-skill-authoring\u002FSKILL.md) — the shape\n  of the artifact you are writing.\n- [`bubbles-result-envelope`](..\u002Fbubbles-result-envelope\u002FSKILL.md) — the\n  narrative fields an envelope carries.\n- [`analytical-rigor.md`](..\u002F..\u002Fagents\u002Fbubbles_shared\u002Fanalytical-rigor.md) — the\n  Tier 1 substance floor that this skill sits under.\n\n---\n\n## The standard's own warning\n\nThe source standard states that it cannot be used alone: *\"It is intended to be\nused with other applicable specifications for technical publications, style\nguides, and official directives.\"* Its maintenance group adds that *\"if authors\nrely blindly on what checkers tell them, they are likely to write rubbish.\"*\n\nTreat this page the same way. It is additive to substance, never a substitute\nfor it.\n","# Bubbles Technical Prose\n\n## Goal\n\nMake generated prose unambiguous on first read. Every artifact this framework\nproduces is technical prose that another agent or a human must act on. Prose\nthat has to be re-read is a defect, and it is the one defect no test catches.\n\n## Portability\n\nPortable governance skill. It contains no project paths, commands, hosts, or\nports.\n\n---\n\n## Where this ranks\n\nRead [`analytical-rigor.md`](..\u002F..\u002Fagents\u002Fbubbles_shared\u002Fanalytical-rigor.md)\nfirst. The Four Rigor Rules are Tier 1. Form is Tier 2. Form never outranks\nRule 3.\n\nA clean, confident, well-punctuated, hollow paragraph is still a failed\nanalysis. Never reword a finding to satisfy a rule on this page. If a rule here\nand an honest finding conflict, the finding wins and the rule yields.\n\n---\n\n## The rules\n\n### Sentence length\n\nUse 20 words maximum for a procedural or instructional sentence. Use 25 words\nmaximum for a descriptive sentence.\n\nCount words, not clauses. A long sentence usually holds two instructions. Split\nit.\n\n### Punctuation\n\nDo not use a semicolon in prose. Split the sentence, or use a list.\n\n**The em dash is permitted.** The source standard says so directly: *\"You can\nuse all standard English punctuation marks except the semicolon (;).\"* No other\npunctuation mark is restricted.\n\nThis matters because a popular retelling of the standard claims it bans the em\ndash. That claim is wrong. Adopting it would invent a constraint the standard\ndoes not contain and would flag thousands of conforming sentences as defects.\nDo not re-import the folk version.\n\n### Voice\n\nWrite in the active voice. Write a procedure in the imperative.\n\n- Write: `Run the guard before the transition.`\n- Do not write: `The guard should be run before the transition.`\n\n### Verbs\n\nA verb describes an action. Do not turn a verb into a noun and then attach a\nweak verb to it.\n\n- Write: `Validate the manifest.`\n- Do not write: `Perform validation of the manifest.`\n\nDo not stack auxiliaries. `will have been able to be run` names no action a\nreader can take.\n\nDo not use a phrasal verb where a single verb exists.\n\n- Write `start`, not `kick off`. Write `investigate`, not `look into`. Write\n  `cancel`, not `call off`.\n\n### One instruction per sentence\n\nA sentence carries one instruction. A paragraph carries six sentences at most.\n\nIf a step has a condition, put the condition first and the action second, in\none sentence. If it has two conditions, use two sentences.\n\n### Notes, warnings, cautions\n\nA note informs. A warning and a caution instruct.\n\n- A note gives information the reader may want. It has no imperative.\n- A warning states what will injure a person. It is imperative.\n- A caution states what will damage the system or the data. It is imperative.\n\nNever bury an instruction in a note. A reader who skips notes must not lose a\nrequired step.\n\n### Do not compress by deleting words\n\nDo not drop articles, subjects, or verbs to shorten a sentence. `Guard rejects\ntransition missing evidence` is shorter and worse than `The guard rejects a\ntransition that has no evidence.`\n\nShorten by removing an idea that does not belong, never by removing the grammar\nthat carries it.\n\n### One name per concept\n\nUse one term for one concept everywhere in an artifact. Resolve the term against\nthe framework glossary before you invent a synonym.\n\nThe framework already distinguishes several near-synonyms deliberately. A\n**gate** is a policy. A **guard** is the script that enforces it. A **check** is\none assertion inside a run. Using them interchangeably destroys a distinction\nother agents rely on.\n\nPrefer `subagent` over `sub-agent`.\n\n---\n\n## Two corrections you must not undo\n\nThese are recorded because both errors are widely repeated, and both would\ncorrupt an implementation that copied them uncritically.\n\n1. **The standard does not ban the em dash.** Rule 8.1 excludes the semicolon\n   and nothing else. The word \"dash\" appears three times in 382 pages, never as\n   a prohibition.\n\n2. **A marketing-adjective blacklist is the wrong mechanism.** Words such as\n   `seamless`, `robust`, `powerful`, and `leverage` appear zero times in the\n   standard. They are excluded by a positive allowlist of approved words, not by\n   a list of banned ones. Any blacklist built inside this framework would be the\n   hand-maintained list the original argument objects to. Do not build one.\n\n---\n\n## When NOT to use\n\nThis skill does not apply to:\n\n- **`uservalidation.md`** — human-owned. Never reword what a person wrote.\n- **Verbatim evidence.** Terminal output, logs, diffs, and captured tool results\n  are quoted exactly. Rewording evidence to improve its prose is evidence\n  corruption, and both `bubbles-evidence-capture` and `bubbles-anti-fabrication`\n  forbid it.\n- **Release-packet narrative.** Vision, marketing, and business-plan sections\n  need voice. Flattening them removes their purpose.\n- **Anything quoted from an external source.** Quote it as written.\n- **Code, tables, and inline code spans.** These are not prose.\n\n---\n\n## Works well with\n\n- [`bubbles-skill-authoring`](..\u002Fbubbles-skill-authoring\u002FSKILL.md) — the shape\n  of the artifact you are writing.\n- [`bubbles-result-envelope`](..\u002Fbubbles-result-envelope\u002FSKILL.md) — the\n  narrative fields an envelope carries.\n- [`analytical-rigor.md`](..\u002F..\u002Fagents\u002Fbubbles_shared\u002Fanalytical-rigor.md) — the\n  Tier 1 substance floor that this skill sits under.\n\n---\n\n## The standard's own warning\n\nThe source standard states that it cannot be used alone: *\"It is intended to be\nused with other applicable specifications for technical publications, style\nguides, and official directives.\"* Its maintenance group adds that *\"if authors\nrely blindly on what checkers tell them, they are likely to write rubbish.\"*\n\nTreat this page the same way. It is additive to substance, never a substitute\nfor it.\n",{"name":5,"description":7},"main","ed893cc338281a0bb9bb9ecf3415716cb242bb3f",".claude\u002Fskills\u002Fbubbles-technical-prose",0,"https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel","https:\u002F\u002Fgithub.com\u002Fpkirsanov","2026-11-07 02:54:37",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add pkirsanov\u002Fsmackerel --skill bubbles-technical-prose",{"tool":56,"command":57},"bunx","bunx skills add pkirsanov\u002Fsmackerel --skill bubbles-technical-prose",{"tool":59,"command":60},"pnpm","pnpm dlx skills add pkirsanov\u002Fsmackerel --skill bubbles-technical-prose","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fbubbles-technical-prose\u002FSKILL.md",true,[],[65,95,123,151,172,199],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":76,"publishedAt":38},"01M6N9V5TBHQT20V5SCCJ1VRBC","smackerel-trace-capture","Wire Smackerel's concrete validate-plane stack into the framework trace-driven defect-discovery method. Use when running live-category tests (integration\u002Fe2e\u002Fe2e-ui\u002Fstress) against the ephemeral test stack; capturing SLO or trace evidence; hunting latency\u002Ferror\u002Fperf bugs from spans; querying the test-stack Jaeger or Prometheus; or touching `.specify\u002Fruntime\u002Fobservability`. Concrete smackerel endpoints + the exact `capture-slo.sh` command; do NOT duplicate `bubbles-observability-adapter` — this only adds the wiring.","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fsmackerel-trace-capture\u002FSKILL.md",[71],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[77,78,79,80,81,82,83,84,85,34,86,87,32,88,89,90,91,92,93,94],"trace","capture","smackerel trace capture","perf","observability","prometheus","specify","e2e","discovery","slo","only","do","latency","runtime","tests","adapter","error","bugs",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":104,"publishedAt":38},"01M6N9TZDEV26RZ7W34HEFPQE9","smackerel-no-defaults","Enforce Smackerel's NO-DEFAULTS \u002F fail-loud SST policy. Use when editing config, Docker Compose, deploy adapters, docs, instructions, skills, env handling, host bind addresses, or any runtime value that could be hidden by fallback syntax.","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fsmackerel-no-defaults\u002FSKILL.md",[101],{"categoryNo":102,"categoryName":103,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000011","运维与部署",[105,106,107,108,109,110,111,112,113,34,114,115,90,116,117,118,119,120,121,122],"smackerel no defaults","docker","policy","config","deploy","docker compose","syntax","editing","instructions","compose","enforce","bind","env","host","Adapters","sst","addresses","value",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":132,"publishedAt":38},"01M6N9TJRS5PF83JH2W4614D4W","bubbles-workflow-mode-resolution","Resolve a Bubbles workflow mode against `bubbles\u002Fworkflows.yaml`, including template inheritance, status ceilings, gate wiring, and decision policy. Use when picking a mode for a request, when a guard reports a mode-related failure, or when extending workflows.yaml with a new mode or template. Covers natural-language intent routing and the workflow registry consistency rules.","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fbubbles-workflow-mode-resolution\u002FSKILL.md",[129],{"categoryNo":130,"categoryName":131,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000023","Skill与智能体开发",[133,134,135,136,107,137,138,139,140,141,142,34,143,144,145,146,147,148,149,150],"workflow","resolution","mode","bubbles workflow mode resolution","workflows","routing","guard","template","decision","Rules","reports","intent","inheritance","with","consistency","natural-language","for","wiring",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":158,"publishedAt":38},"01M6N9TC98D6DJR0D64SSN0SN3","bubbles-workflow-execution-loops","Run per-round synchronous workflow execution loops correctly. Use when orchestrating a multi-round workflow, dispatching specialist subagents, handling round-based remediation, or interpreting a workflow mode's execution policy. Covers authorized direct execution, dispatch-and-wait, batch-then-summarize prohibition, and mapped-mode execution.","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fbubbles-workflow-execution-loops\u002FSKILL.md",[157],{"categoryNo":130,"categoryName":131,"taxonomyType":74,"taxonomyTypeDesc":75},[133,159,160,161,162,107,163,164,165,166,167,34,168,169,170,171,135],"execution","loops","bubbles workflow execution loops","summarize","run","batch","remediation","direct","subagents","dispatch","wait","multi","multi-round",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":182,"publishedAt":38},"01M6N9SYXQNJDQ1T1YT81JH2BG","bubbles-vscode-agent-constraints","Design agents that fit the VS Code Copilot Chat runtime instead of fighting it. Use when authoring or editing any `*.agent.md`; when adding `tools:`, `agents:`, `handoffs:`, `model:`, `user-invocable:`, or `disable-model-invocation:` frontmatter; when designing an orchestrator that dispatches specialists; when a design implies agent-calls-agent-calls-agent chaining; when a subagent dispatch silently no-ops or an agent cannot be selected in the dropdown; or when writing a governance rule about delegation that the runtime cannot actually enforce. Prevents multi-level-subagent designs, prose-only dispatch laws, and frontmatter\u002Fbody contradictions.","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fbubbles-vscode-agent-constraints\u002FSKILL.md",[178,181],{"categoryNo":179,"categoryName":180,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":130,"categoryName":131,"taxonomyType":74,"taxonomyTypeDesc":75},[183,184,185,30,186,187,188,189,190,191,192,193,112,194,87,90,195,196,197,198],"vscode","constraints","bubbles vscode agent constraints","writing","copilot","code","delegation","Tools","subagent","model","chaining","orchestrator","authoring","fit","subagent dispatch","frontmatter",{"skillNo":200,"name":201,"nameZh":6,"description":202,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":203,"categories":204,"keywords":205,"publishedAt":38},"01M6N9SD78SK12PRT9KBRZ6TB3","bubbles-upkeep-cadence","How to schedule, dispatch, and record recurring operational upkeep tasks (backup, restore-drill, BCDR-drill, patch-cycle, secret-rotation, flag-cleanup, compliance-sweep). Use when authoring or modifying `config\u002Fupkeep-calendar.yaml`, when investigating a missed task, when reading the upkeep ledger, or when adding a new task type.","https:\u002F\u002Fgithub.com\u002Fpkirsanov\u002Fsmackerel\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fbubbles-upkeep-cadence\u002FSKILL.md",[],[206,207,208,209,210,211,212,213,34,214,215,216,217,218,219,220,221,222,223,224],"cadence","bubbles upkeep cadence","tasks","cleanup","backup","sweep","schedule","recurring","patch","restore","task","cycle","record","missed","type","drill","how to","new task","rotation"]