[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M79S0J3JBFXJSRS44RF07PVH":3,"skill-same:01M79S0J3JBFXJSRS44RF07PVH":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":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":30,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M79S0J3JBFXJSRS44RF07PVH","architecture-decision-record",null,"Capture an architectural decision as an ADR once it has been reached — a choice that constrains future work, had viable alternatives that were rejected, and would be expensive to revisit. Use when a design discussion has converged on such a decision, when the user asks for an ADR, or when a recorded decision changes. Do NOT use for reversible implementation choices, library picks with no lasting constraint, or to minute a discussion that has not concluded.","dpalfery\u002Fkyber-weave","dpalfery","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F8592256?v=4","01M79RX47GSHMSDA5N4J22JXZ0","David Palfery","01M79RX486WGXFFRB4G5YCSCD5",23,"MIT","https:\u002F\u002Fgithub.com\u002Fdpalfery\u002Fkyber-weave\u002Fblob\u002Fmain\u002Fproducts\u002Fkyber-squad\u002Fskills\u002Farchitecture-decision-record\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: architecture-decision-record\ndescription: Capture an architectural decision as an ADR once it has been reached — a choice that constrains future work, had viable alternatives that were rejected, and would be expensive to revisit. Use when a design discussion has converged on such a decision, when the user asks for an ADR, or when a recorded decision changes. Do NOT use for reversible implementation choices, library picks with no lasting constraint, or to minute a discussion that has not concluded.\nlicense: MIT\n---\n\n# Architecture Decision Record\n\nAn ADR records **why** the system is shaped the way it is, for a reader who was not in the room and cannot ask.\n\n## ALWAYS apply the three tests before writing\n\nWrite an ADR only when a decision has been **reached** and meets all three:\n\n1. **It constrains future work.** Later changes must live with it.\n2. **Viable alternatives were rejected**, and the rejection is not self-evident.\n3. **It would be expensive to revisit** — reversing it means reworking code, data, or infrastructure.\n\nA decision that fails any test is a normal implementation choice. It belongs in the code and the component's documentation, not here.\n\n**NEVER open an ADR because a discussion started.** Agents and users weigh trade-offs constantly — which library, how to shape a service, whether to add a cache. Minuting all of that buries the handful of records that matter, and this repository's retrieval already ranks documents by standing. The trigger is *convergence*, not debate.\n\nWorked distinctions:\n\n| Situation | ADR? | Why |\n|---|---|---|\n| \"Should this service use a queue or direct calls?\" — still being argued | **No** | No decision yet. Wait for convergence. |\n| Decided: schema deploys as one idempotent SQL file, no migration framework | **Yes** | Constrains every future schema change; alternatives existed; reversing means retrofitting migrations. |\n| Chose `System.Text.Json` over `Newtonsoft.Json` in one service | **No** | Reversible in an afternoon, constrains nothing else. |\n| Decided: the browser never holds an access token; the BFF owns the session | **Yes** | A security boundary the whole front end is built around. |\n| Named a class `OrderProcessor` rather than `OrderService` | **No** | Not a decision, a preference. |\n| Decided: agent roles stay synchronised across all six harnesses | **Yes** | Every future agent change inherits the obligation. |\n\n## NEVER write one without approval\n\nThe ADR is a governed document and creating documentation requires user approval. Present the decision, the alternatives, and the consequences **in the conversation first**, and ask. Write the file only after an explicit yes.\n\nIf the user declines, do not write it and do not raise it again in the same session.\n\n## Placement and identity\n\nActive ADRs live in the path declared as **Architecture Decision Records** in the repository root `AGENTS.md` Config Registry; a record wholly replaced by one on a different subject moves to the archive path recorded there. Read the repository documentation standard for the lifecycle, and the documentation ontology for the frontmatter schema, before writing.\n\n- Filename: `ADR-{YYYY-MM-DD}-{kebab-slug}.md`\n- Frontmatter `id`: `adr\u002F{YYYY-MM-DD}-{kebab-slug}` — the date is the decision date, and it never changes afterwards.\n- `doc-type: adr`, `status: current`.\n- `supersedes`: the `id` of an ADR this one genuinely replaces, a record on a different subject. Otherwise `[]`. A changed decision is never a new record.\n- `code-refs` \u002F `api-endpoints`: symbols and routes the decision governs, when the decision is about specific code. These are validated against the code graph, so every entry must resolve.\n\n## Structure\n\n```markdown\n---\nid: adr\u002F{date}-{slug}\ntitle: \"ADR-{date}: {Short Decision Title}\"\ndoc-type: adr\nstatus: current\nowner: {team from the catalog}\nlast-reviewed: {date}\ncode-refs: []\napi-endpoints: []\ndecided-by: []\nsupersedes: []\n---\n# ADR-{date}: {Short Decision Title}\n\n**Status:** Accepted\n**Date:** {date}\n\n## Context\n\nThe forces in play: the constraint, the problem, what was true at the time. Enough that a\nreader who was not present can judge whether the reasoning still holds. State facts, not\nnarrative — no meeting history, no attributions.\n\n## Decision\n\nWhat was decided, in the active voice and one paragraph. \"Schema is deployed via a single\nidempotent SQL file applied by sqlcmd.\" Not \"we discussed and felt that…\".\n\n## Alternatives considered\n\nEach viable option that was rejected, and why. An ADR with no rejected alternatives is\neither not a decision or is hiding the interesting part.\n\n## Consequences\n\nWhat this commits the system to — including the costs. An ADR that lists only benefits is\nadvocacy, not a record. State what becomes harder, what is now manual, what a future\nchange will have to work around.\n```\n\n## Changing a decision\n\n**An accepted ADR is edited in place to state only the decision in force.** When a decision changes, rewrite the record so it says what is true now, and remove the superseded wording rather than keeping it beside the new text as history. git holds the history. An `Amended \u003Cdate>: \u003Cone-line reason>` note is optional when the change matters to a reader.\n\nOnly a decision on a different subject that replaces an existing record gets a new ADR. That ADR names the replaced `id` in `supersedes`. The replaced record's `status` is set to `superseded`, it moves to the archive path, and documents that referenced it through `decided-by` are updated to point at the new one.\n\n## Linking the decision to what it governs\n\nA decision no one can find does not constrain anything. Add the ADR's `id` to the `decided-by` frontmatter of every document the decision governs — that key is what carries the decision through the documentation graph to the components it binds.\n\n## Verify before finishing\n\nRun the repository's documentation validation and drift checks. `code-refs` and `api-endpoints` resolve against the code graph, and a `decided-by` or `supersedes` pointing at a non-existent id fails validation.\n","# Architecture Decision Record\n\nAn ADR records **why** the system is shaped the way it is, for a reader who was not in the room and cannot ask.\n\n## ALWAYS apply the three tests before writing\n\nWrite an ADR only when a decision has been **reached** and meets all three:\n\n1. **It constrains future work.** Later changes must live with it.\n2. **Viable alternatives were rejected**, and the rejection is not self-evident.\n3. **It would be expensive to revisit** — reversing it means reworking code, data, or infrastructure.\n\nA decision that fails any test is a normal implementation choice. It belongs in the code and the component's documentation, not here.\n\n**NEVER open an ADR because a discussion started.** Agents and users weigh trade-offs constantly — which library, how to shape a service, whether to add a cache. Minuting all of that buries the handful of records that matter, and this repository's retrieval already ranks documents by standing. The trigger is *convergence*, not debate.\n\nWorked distinctions:\n\n| Situation | ADR? | Why |\n|---|---|---|\n| \"Should this service use a queue or direct calls?\" — still being argued | **No** | No decision yet. Wait for convergence. |\n| Decided: schema deploys as one idempotent SQL file, no migration framework | **Yes** | Constrains every future schema change; alternatives existed; reversing means retrofitting migrations. |\n| Chose `System.Text.Json` over `Newtonsoft.Json` in one service | **No** | Reversible in an afternoon, constrains nothing else. |\n| Decided: the browser never holds an access token; the BFF owns the session | **Yes** | A security boundary the whole front end is built around. |\n| Named a class `OrderProcessor` rather than `OrderService` | **No** | Not a decision, a preference. |\n| Decided: agent roles stay synchronised across all six harnesses | **Yes** | Every future agent change inherits the obligation. |\n\n## NEVER write one without approval\n\nThe ADR is a governed document and creating documentation requires user approval. Present the decision, the alternatives, and the consequences **in the conversation first**, and ask. Write the file only after an explicit yes.\n\nIf the user declines, do not write it and do not raise it again in the same session.\n\n## Placement and identity\n\nActive ADRs live in the path declared as **Architecture Decision Records** in the repository root `AGENTS.md` Config Registry; a record wholly replaced by one on a different subject moves to the archive path recorded there. Read the repository documentation standard for the lifecycle, and the documentation ontology for the frontmatter schema, before writing.\n\n- Filename: `ADR-{YYYY-MM-DD}-{kebab-slug}.md`\n- Frontmatter `id`: `adr\u002F{YYYY-MM-DD}-{kebab-slug}` — the date is the decision date, and it never changes afterwards.\n- `doc-type: adr`, `status: current`.\n- `supersedes`: the `id` of an ADR this one genuinely replaces, a record on a different subject. Otherwise `[]`. A changed decision is never a new record.\n- `code-refs` \u002F `api-endpoints`: symbols and routes the decision governs, when the decision is about specific code. These are validated against the code graph, so every entry must resolve.\n\n## Structure\n\n```markdown\n---\nid: adr\u002F{date}-{slug}\ntitle: \"ADR-{date}: {Short Decision Title}\"\ndoc-type: adr\nstatus: current\nowner: {team from the catalog}\nlast-reviewed: {date}\ncode-refs: []\napi-endpoints: []\ndecided-by: []\nsupersedes: []\n---\n# ADR-{date}: {Short Decision Title}\n\n**Status:** Accepted\n**Date:** {date}\n\n## Context\n\nThe forces in play: the constraint, the problem, what was true at the time. Enough that a\nreader who was not present can judge whether the reasoning still holds. State facts, not\nnarrative — no meeting history, no attributions.\n\n## Decision\n\nWhat was decided, in the active voice and one paragraph. \"Schema is deployed via a single\nidempotent SQL file applied by sqlcmd.\" Not \"we discussed and felt that…\".\n\n## Alternatives considered\n\nEach viable option that was rejected, and why. An ADR with no rejected alternatives is\neither not a decision or is hiding the interesting part.\n\n## Consequences\n\nWhat this commits the system to — including the costs. An ADR that lists only benefits is\nadvocacy, not a record. State what becomes harder, what is now manual, what a future\nchange will have to work around.\n```\n\n## Changing a decision\n\n**An accepted ADR is edited in place to state only the decision in force.** When a decision changes, rewrite the record so it says what is true now, and remove the superseded wording rather than keeping it beside the new text as history. git holds the history. An `Amended \u003Cdate>: \u003Cone-line reason>` note is optional when the change matters to a reader.\n\nOnly a decision on a different subject that replaces an existing record gets a new ADR. That ADR names the replaced `id` in `supersedes`. The replaced record's `status` is set to `superseded`, it moves to the archive path, and documents that referenced it through `decided-by` are updated to point at the new one.\n\n## Linking the decision to what it governs\n\nA decision no one can find does not constrain anything. Add the ADR's `id` to the `decided-by` frontmatter of every document the decision governs — that key is what carries the decision through the documentation graph to the components it binds.\n\n## Verify before finishing\n\nRun the repository's documentation validation and drift checks. `code-refs` and `api-endpoints` resolve against the code graph, and a `decided-by` or `supersedes` pointing at a non-existent id fails validation.\n",{"name":5,"license":15,"description":7},"main","32aee4396c5407e3de876e39eb3c673739175d6b","products\u002Fkyber-squad\u002Fskills\u002Farchitecture-decision-record",3,"https:\u002F\u002Fgithub.com\u002Fdpalfery\u002Fkyber-weave","https:\u002F\u002Fgithub.com\u002Fdpalfery","www.palfery.com","Experienced technology leader with a strong background in cloud strategy, software development, and agile. Passionate about building scalable solutions","2026-11-15 05:04:11",{"source":8,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add dpalfery\u002Fkyber-weave --skill architecture-decision-record",{"tool":39,"command":40},"bunx","bunx skills add dpalfery\u002Fkyber-weave --skill architecture-decision-record",{"tool":42,"command":43},"pnpm","pnpm dlx skills add dpalfery\u002Fkyber-weave --skill architecture-decision-record","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdpalfery\u002Fkyber-weave\u002Fblob\u002Fmain\u002Fproducts\u002Fkyber-squad\u002Fskills\u002Farchitecture-decision-record\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},"01M79S4SA2T3G081B5TBVSF8CV","pr-review","Use to run the pre-merge pull request review checklist so required validations are never skipped. Use when reviewing or approving a pull request before merge. Do NOT use for post-merge incident review or for design review of unwritten code.","https:\u002F\u002Fgithub.com\u002Fdpalfery\u002Fkyber-weave\u002Fblob\u002Fmain\u002Fsamples\u002Fskills\u002Fpr-review\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},"01M79S4PDPV6D0J22CJFDHKBTK","password-reset","Use to reset an employee's corporate account password following the IT security SOP. Use when a user reports they are locked out, forgot their password, or needs a password reset. Do NOT use for multi-factor authentication enrollment, shared\u002Fservice accounts, or external partner accounts.","https:\u002F\u002Fgithub.com\u002Fdpalfery\u002Fkyber-weave\u002Fblob\u002Fmain\u002Fsamples\u002Fskills\u002Fpassword-reset\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},"01M79S4K6M0AVKAYA97FKF8R4Y","incident-triage","Use to triage an incoming production incident report, classify its severity, and route it to the right on-call team. Use when someone reports an outage, degradation, or production error. Do NOT use for routine service requests, feature questions, or non-production environments.","https:\u002F\u002Fgithub.com\u002Fdpalfery\u002Fkyber-weave\u002Fblob\u002Fmain\u002Fsamples\u002Fskills\u002Fincident-triage\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},"01M79S4GC6M4N8646BRBQJ5WDR","expense-policy","Use as the reference manual for the corporate travel and expense policy covering per-diem limits, approval thresholds, and reimbursable categories. Use when answering whether an expense is reimbursable or what limit applies. Do NOT use to submit, approve, or modify expense reports.","https:\u002F\u002Fgithub.com\u002Fdpalfery\u002Fkyber-weave\u002Fblob\u002Fmain\u002Fsamples\u002Fskills\u002Fexpense-policy\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},"01M79S4E2DYDVK71GKZQWQFFCP","Vague_Helper","Helps with HR questions.","https:\u002F\u002Fgithub.com\u002Fdpalfery\u002Fkyber-weave\u002Fblob\u002Fmain\u002Fsamples\u002Fbad-skills\u002Fvague-helper\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},"01M79S4C13DDHBVF8P99APCSJ4","risky-skill","Use to format a customer record into the standard export template. Use when exporting a single customer record. Do NOT use for bulk exports.","https:\u002F\u002Fgithub.com\u002Fdpalfery\u002Fkyber-weave\u002Fblob\u002Fmain\u002Fsamples\u002Fbad-skills\u002Frisky-skill\u002FSKILL.md",[],[]]