[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71MTNZCESCR0QN7ANAFDVEW":3,"skill-same:01M71MTNZCESCR0QN7ANAFDVEW":64},{"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":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":46,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M71MTNZCESCR0QN7ANAFDVEW","adr-writer",null,"Use when a decision changes architecture, interfaces, the Prisma schema, dependencies, sources policy, or supersedes a prior decision. Contains the ADR template used in docs\u002Fadr\u002F and the register of standing decisions.","applypack\u002Fapplypack","applypack","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F323661273?v=4","01M71MTCGWDKJ7EXW015KCSM5Z","ApplyPack","01M71MTCHJ3VRWDNDAEAARMD1Q",32,"MIT","https:\u002F\u002Fgithub.com\u002Fapplypack\u002Fapplypack\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fadr-writer\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"adr","adr writer","writer","docs","dependencies","template","changes","prisma","architecture","decisions","when","use","schema","decision","policy","register","sources","2026-11-10 10:56:23",false,"---\nname: adr-writer\ndescription: Use when a decision changes architecture, interfaces, the Prisma schema, dependencies, sources policy, or supersedes a prior decision. Contains the ADR template used in docs\u002Fadr\u002F and the register of standing decisions.\n---\n\n# ADR Writer\n\nArchitecture Decision Records live in `docs\u002Fadr\u002FNNNN-slug.md` and are\nindexed in `docs\u002Fadr\u002FREADME.md` — add the index line in the same commit.\n\n## When an ADR is required\n\n- New process boundary, HTTP framework, queue, or scheduler choice\n- New job source family or a change to the \"never scrape\" policy (ADR 0005)\n- A new seam that swaps implementations (like the AI provider, ADR 0007)\n- New dependency with operational weight (a CLI in the image, a DB)\n- Superseding any prior ADR\n\nNot required: a new fetcher that follows an existing template, a settings\ntoggle, UI changes, refactors that keep contracts.\n\n## Template (as short as the decision allows)\n\n```markdown\n# NNNN — \u003Cdecision, stated as a sentence>\n\n**Status:** Accepted (YYYY-MM-DD) | Superseded by NNNN\n\n## Context\nWhat forces the decision; the facts that shaped it (numbers, measured\nbehaviour, external constraints).\n\n## Decision\nWhat we do, stated so a reviewer can check the code against it. A small\ntable or interface signature is welcome.\n\n## Consequences\n✅ what becomes easier   ❌ what we accept\n\n## When to revisit\nThe concrete trigger that would reopen this.\n```\n\n## Supersede mechanics\n\nThe new ADR says `Supersedes NNNN` (or `Amends` \u002F `Extends NNNN`) in its\nstatus line; the old one's status line links back (`Superseded by MMMM`,\n`amended by MMMM (what changed)`), and the register line in\n`docs\u002Fadr\u002FREADME.md` carries the same note. Both link.\n\nNever rewrite the substance of an accepted ADR. A new decision gets a new\nADR. A fact that changed without a new decision (a renamed symbol, a count\nthat grew, a behaviour a later release reversed) gets a dated addendum at\nthe end: `## Addendum (YYYY-MM-DD): \u003Cwhat changed>`, one short line per\nstatement, naming the version, file or ADR that changed it.\n\n## Standing register\n\nGenerated from `docs\u002Fadr\u002FREADME.md` on 2026-09-24; the README is the source\nof truth when the two disagree.\n\n- 0001 Hono not Express\n- 0002 Worker and web as separate processes\n- 0003 No queue, just node-cron\n- 0004 One active profile, not multi-tenant — *superseded by 0028*\n- 0005 No LinkedIn \u002F Indeed \u002F Workday — *amended by 0034, 0036*\n- 0006 Discovery via HN parser, not ATS-vendor lists\n- 0007 One AI provider seam: Messages API or Claude Code CLI — *extended by 0013, 0014, 0027, 0055*\n- 0008 Resume module lives in the web process, files in Postgres — *amended by 0063*\n- 0009 Web tools through the AI seam, for job verification only\n- 0010 Two scores: live keyword coverage in the browser, AI match on demand — *amended by 0012, 0038*\n- 0011 PDF resume text comes from unpdf, not a hand-rolled parser\n- 0012 The resume-match score is computed by application code, not by the model — *amended by 0044, 0045*\n- 0013 AI engine is chosen at runtime from AppSettings, with a Gemini CLI backend *(extends 0007)* — *amended by 0014; extended by 0027*\n- 0014 AI engines form a priority chain with automatic failover *(extends 0013)* — *extended by 0027, 0060*\n- 0015 The profile is drafted from the resume scan, never written by AI\n- 0016 Job liveness via a free three-rung ladder before AI verify\n- 0017 Starter-pack entries pin a hand-verified board — *extended by 0040*\n- 0018 Cross-listing is annotated, never merged\n- 0019 Source health is a per-company streak; `empty` resets it but does not prove health — *amended by 0035*\n- 0020 The fact gate blocks fabrication, not imprecision\n- 0021 Cover letters generate from stored inputs only — *extended by 0042*\n- 0022 Fences make untrusted text data, and an attempt evidence\n- 0023 Trust is apply-link flags, not a score\n- 0024 Funnel history is an append-only stage ledger — *amended by 0025*\n- 0025 Work columns are user-defined; fixed entry and exits\n- 0026 Database tables are snake_case, mapped with `@@map()`\n- 0027 Per-engine AI keys live in the database, `.env` as fallback *(extends 0013 and 0014)*\n- 0028 Several searches run in parallel, scored by one call per posting *(supersedes 0004)*\n- 0029 A comparison is a quick check by default; suggestions are a second call — *amended by 0042, 0043, 0044*\n- 0030 The strength review grades; the code scores\n- 0031 A job's location is three columns next to the string, filled by hints and a parser\n- 0032 A search hunts in countries and groups; the classifier's place may only narrow the parser's\n- 0033 A search says where its candidate lives; the model decides whether a posting is open to them\n- 0034 A vendor's own licence governs keyed access, and the vendor's terms are code\n- 0035 Many installs, one set of boards: spread the tick, shuffle the walk, revalidate\n- 0036 Watched companies are checked by reading what a site publishes for machines, never by rendering it — *addendum 2026-09-28: a page drawn in the browser is pasted*\n- 0037 Suggestions carry replacement text; the fact gate decides what is applicable — *extended by 0042; amended by 0044*\n- 0038 Save patches the user's .docx in place; text-only versions are the fallback *(supersedes the text-only consequence of 0010)* — *extended by 0039, amended by 0059*\n- 0039 A resume that cannot be patched is re-typeset from JSON Resume, in the user's own typography *(extends 0038)* — *extended by 0059*\n- 0040 The default source set is the aggregators; employer boards are starter packs *(extends 0017)*\n- 0041 Alerts go through a channel seam; Telegram and Discord are its first two channels\n- 0042 The verifier's company facts are context for the match, never evidence *(extends 0021 and 0037)*\n- 0043 A posting refreshed from the company's own listing keeps its original and is re-judged\n- 0044 The posting is read once, on its own, and the reading is kept — *amended by 0045*\n- 0045 The resume text decides whether a keyword is present *(amends 0012 and 0044)*\n- 0046 The resume's domains are read at scan time and compared with the posting's\n- 0047 A screening scores evidence, not keywords, and a person decides — *extended by 0050, which supersedes its score formula*\n- 0048 Applicants' resumes are redacted before any model reads them, and they expire\n- 0049 Employer mode is a switchable mode, not a second product and not a card\n- 0050 The rubric is a list of criteria the person chooses, answered one by one with a quote *(extends 0047; supersedes its score formula)*\n- 0051 A shortlist is compared head to head, twice, and the comparison is never a score\n- 0052 Calibration reports agreement with the person's decisions and never tunes the rubric by itself\n- 0053 Uniqueness lives in the database, and a row's state is written with the row\n- 0054 `npm start` runs ApplyPack with a built-in Postgres; Docker is the server option\n- 0055 Every AI attempt is a ledger row, and a bill, a plan and a local model are never added together *(extends 0007)*\n- 0056 A company can be muted, and a company applied to can rest, before any AI reads its postings\n- 0057 A model on this machine is an engine of its own, and it is held to its window *(extends 0013\u002F0014)* — *extended by 0060*\n- 0058 How strongly the text shows a term counts, a little (score v6) *(amends 0012\u002F0045)*\n- 0059 The Tailor page edits the resume as a document, and a save is always one *(extends 0038\u002F0039)*\n- 0060 An engine takes the tasks it is given, and the order decides among those that take one *(extends 0014\u002F0057)*\n- 0061 The interface speaks several languages; what a model writes stays English — *addendum 2026-10-06: the worker and the browser modules follow later*\n- 0062 Rows the user brings are read from what they hand over, and nothing is fetched\n- 0063 The worker prepares an application pack for a strong new match *(amends 0008)*\n\nCheck a proposal against these before touching process layout, sources,\nscheduling, profiles, how the AI is called, the resume score or employer\nmode.\n","# ADR Writer\n\nArchitecture Decision Records live in `docs\u002Fadr\u002FNNNN-slug.md` and are\nindexed in `docs\u002Fadr\u002FREADME.md` — add the index line in the same commit.\n\n## When an ADR is required\n\n- New process boundary, HTTP framework, queue, or scheduler choice\n- New job source family or a change to the \"never scrape\" policy (ADR 0005)\n- A new seam that swaps implementations (like the AI provider, ADR 0007)\n- New dependency with operational weight (a CLI in the image, a DB)\n- Superseding any prior ADR\n\nNot required: a new fetcher that follows an existing template, a settings\ntoggle, UI changes, refactors that keep contracts.\n\n## Template (as short as the decision allows)\n\n```markdown\n# NNNN — \u003Cdecision, stated as a sentence>\n\n**Status:** Accepted (YYYY-MM-DD) | Superseded by NNNN\n\n## Context\nWhat forces the decision; the facts that shaped it (numbers, measured\nbehaviour, external constraints).\n\n## Decision\nWhat we do, stated so a reviewer can check the code against it. A small\ntable or interface signature is welcome.\n\n## Consequences\n✅ what becomes easier   ❌ what we accept\n\n## When to revisit\nThe concrete trigger that would reopen this.\n```\n\n## Supersede mechanics\n\nThe new ADR says `Supersedes NNNN` (or `Amends` \u002F `Extends NNNN`) in its\nstatus line; the old one's status line links back (`Superseded by MMMM`,\n`amended by MMMM (what changed)`), and the register line in\n`docs\u002Fadr\u002FREADME.md` carries the same note. Both link.\n\nNever rewrite the substance of an accepted ADR. A new decision gets a new\nADR. A fact that changed without a new decision (a renamed symbol, a count\nthat grew, a behaviour a later release reversed) gets a dated addendum at\nthe end: `## Addendum (YYYY-MM-DD): \u003Cwhat changed>`, one short line per\nstatement, naming the version, file or ADR that changed it.\n\n## Standing register\n\nGenerated from `docs\u002Fadr\u002FREADME.md` on 2026-09-24; the README is the source\nof truth when the two disagree.\n\n- 0001 Hono not Express\n- 0002 Worker and web as separate processes\n- 0003 No queue, just node-cron\n- 0004 One active profile, not multi-tenant — *superseded by 0028*\n- 0005 No LinkedIn \u002F Indeed \u002F Workday — *amended by 0034, 0036*\n- 0006 Discovery via HN parser, not ATS-vendor lists\n- 0007 One AI provider seam: Messages API or Claude Code CLI — *extended by 0013, 0014, 0027, 0055*\n- 0008 Resume module lives in the web process, files in Postgres — *amended by 0063*\n- 0009 Web tools through the AI seam, for job verification only\n- 0010 Two scores: live keyword coverage in the browser, AI match on demand — *amended by 0012, 0038*\n- 0011 PDF resume text comes from unpdf, not a hand-rolled parser\n- 0012 The resume-match score is computed by application code, not by the model — *amended by 0044, 0045*\n- 0013 AI engine is chosen at runtime from AppSettings, with a Gemini CLI backend *(extends 0007)* — *amended by 0014; extended by 0027*\n- 0014 AI engines form a priority chain with automatic failover *(extends 0013)* — *extended by 0027, 0060*\n- 0015 The profile is drafted from the resume scan, never written by AI\n- 0016 Job liveness via a free three-rung ladder before AI verify\n- 0017 Starter-pack entries pin a hand-verified board — *extended by 0040*\n- 0018 Cross-listing is annotated, never merged\n- 0019 Source health is a per-company streak; `empty` resets it but does not prove health — *amended by 0035*\n- 0020 The fact gate blocks fabrication, not imprecision\n- 0021 Cover letters generate from stored inputs only — *extended by 0042*\n- 0022 Fences make untrusted text data, and an attempt evidence\n- 0023 Trust is apply-link flags, not a score\n- 0024 Funnel history is an append-only stage ledger — *amended by 0025*\n- 0025 Work columns are user-defined; fixed entry and exits\n- 0026 Database tables are snake_case, mapped with `@@map()`\n- 0027 Per-engine AI keys live in the database, `.env` as fallback *(extends 0013 and 0014)*\n- 0028 Several searches run in parallel, scored by one call per posting *(supersedes 0004)*\n- 0029 A comparison is a quick check by default; suggestions are a second call — *amended by 0042, 0043, 0044*\n- 0030 The strength review grades; the code scores\n- 0031 A job's location is three columns next to the string, filled by hints and a parser\n- 0032 A search hunts in countries and groups; the classifier's place may only narrow the parser's\n- 0033 A search says where its candidate lives; the model decides whether a posting is open to them\n- 0034 A vendor's own licence governs keyed access, and the vendor's terms are code\n- 0035 Many installs, one set of boards: spread the tick, shuffle the walk, revalidate\n- 0036 Watched companies are checked by reading what a site publishes for machines, never by rendering it — *addendum 2026-09-28: a page drawn in the browser is pasted*\n- 0037 Suggestions carry replacement text; the fact gate decides what is applicable — *extended by 0042; amended by 0044*\n- 0038 Save patches the user's .docx in place; text-only versions are the fallback *(supersedes the text-only consequence of 0010)* — *extended by 0039, amended by 0059*\n- 0039 A resume that cannot be patched is re-typeset from JSON Resume, in the user's own typography *(extends 0038)* — *extended by 0059*\n- 0040 The default source set is the aggregators; employer boards are starter packs *(extends 0017)*\n- 0041 Alerts go through a channel seam; Telegram and Discord are its first two channels\n- 0042 The verifier's company facts are context for the match, never evidence *(extends 0021 and 0037)*\n- 0043 A posting refreshed from the company's own listing keeps its original and is re-judged\n- 0044 The posting is read once, on its own, and the reading is kept — *amended by 0045*\n- 0045 The resume text decides whether a keyword is present *(amends 0012 and 0044)*\n- 0046 The resume's domains are read at scan time and compared with the posting's\n- 0047 A screening scores evidence, not keywords, and a person decides — *extended by 0050, which supersedes its score formula*\n- 0048 Applicants' resumes are redacted before any model reads them, and they expire\n- 0049 Employer mode is a switchable mode, not a second product and not a card\n- 0050 The rubric is a list of criteria the person chooses, answered one by one with a quote *(extends 0047; supersedes its score formula)*\n- 0051 A shortlist is compared head to head, twice, and the comparison is never a score\n- 0052 Calibration reports agreement with the person's decisions and never tunes the rubric by itself\n- 0053 Uniqueness lives in the database, and a row's state is written with the row\n- 0054 `npm start` runs ApplyPack with a built-in Postgres; Docker is the server option\n- 0055 Every AI attempt is a ledger row, and a bill, a plan and a local model are never added together *(extends 0007)*\n- 0056 A company can be muted, and a company applied to can rest, before any AI reads its postings\n- 0057 A model on this machine is an engine of its own, and it is held to its window *(extends 0013\u002F0014)* — *extended by 0060*\n- 0058 How strongly the text shows a term counts, a little (score v6) *(amends 0012\u002F0045)*\n- 0059 The Tailor page edits the resume as a document, and a save is always one *(extends 0038\u002F0039)*\n- 0060 An engine takes the tasks it is given, and the order decides among those that take one *(extends 0014\u002F0057)*\n- 0061 The interface speaks several languages; what a model writes stays English — *addendum 2026-10-06: the worker and the browser modules follow later*\n- 0062 Rows the user brings are read from what they hand over, and nothing is fetched\n- 0063 The worker prepares an application pack for a strong new match *(amends 0008)*\n\nCheck a proposal against these before touching process layout, sources,\nscheduling, profiles, how the AI is called, the resume score or employer\nmode.\n",{"name":5,"description":7},"main","bb5ed6f9e0ddbf410b1e9a4559f500f246c1677c",".claude\u002Fskills\u002Fadr-writer",11,"https:\u002F\u002Fgithub.com\u002Fapplypack\u002Fapplypack","https:\u002F\u002Fapplypack.dev","https:\u002F\u002Fgithub.com\u002Fapplypack","https:\u002F\u002Fwww.applypack.dev\u002F","2026-11-10 00:46:54",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add applypack\u002Fapplypack --skill adr-writer",{"tool":56,"command":57},"bunx","bunx skills add applypack\u002Fapplypack --skill adr-writer",{"tool":59,"command":60},"pnpm","pnpm dlx skills add applypack\u002Fapplypack --skill adr-writer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fapplypack\u002Fapplypack\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fadr-writer\u002FSKILL.md",true,[],[65,89,115,144,171,188],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":36},"01M71MVP13VV4T7N1D9019K27P","wizard","Generate an interactive bash wizard that walks a human through steps only they can perform. Use when provisioning infrastructure, setting up credentials or CI secrets, walking an unfamiliar third-party dashboard, or running a one-off migration or cutover. Don't invoke this for steps the agent can perform itself.","https:\u002F\u002Fgithub.com\u002Fapplypack\u002Fapplypack\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fwizard\u002FSKILL.md",[],[67,72,73,74,75,76,29,77,78,79,80,81,82,83,84,85,86,87,30,88],"up","ci","provisioning infrastructure","only","invoke","Bash","credentials","dashboard","generate","human","secrets","steps","infrastructure","running","setting","for","one",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":100,"publishedAt":36},"01M71MVKNGWANA0EEWE4GXNFPY","ui-review","Senior UI\u002FUX review of an ApplyPack dashboard page, screenshot, or primitive. Use when asked to critique, audit, or find improvements in the dashboard. Produces prioritized findings, never code.","https:\u002F\u002Fgithub.com\u002Fapplypack\u002Fapplypack\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fui-review\u002FSKILL.md",[95],{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[101,102,103,104,29,105,106,79,107,108,109,110,111,112,113,30,114],"review","ui","ui review","never","code","ui\u002Fux","critique","senior","audit","ux","screenshot","ux review","page","find",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":126,"publishedAt":36},"01M71MVGP02E5QF3RG8TAZNH93","testing-gate","Required verification per change type for ApplyPack (pure module → unit test, fetcher → smoke run, schema → hand-written migration, dashboard → rebuild + screenshot). Read before implementing any feature and before every commit.","https:\u002F\u002Fgithub.com\u002Fapplypack\u002Fapplypack\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftesting-gate\u002FSKILL.md",[121],{"categoryNo":122,"categoryName":123,"taxonomyType":124,"taxonomyTypeDesc":125},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[127,128,129,130,131,132,133,134,135,136,137,79,138,139,140,111,141,142,87,143],"testing","testing gate","gate","unit test","unit","implementing","commit","hand","rebuild","verification","change","run","read","fetcher","smoke","feature","module",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":156,"publishedAt":36},"01M71MVESMK8EWKVQ3G5EHBS1C","stop-slop","Remove AI writing patterns from prose. Use when drafting, editing, or reviewing text to eliminate predictable AI tells.","https:\u002F\u002Fgithub.com\u002Fapplypack\u002Fapplypack\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fstop-slop\u002FSKILL.md",[150,153],{"categoryNo":151,"categoryName":152,"taxonomyType":124,"taxonomyTypeDesc":125},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":154,"categoryName":155,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000036","内容创作者",[157,158,159,87,160,161,162,30,29,163,164,165,166,167,168,169,170],"slop","stop slop","stop","remove","editing","writing","drafting","text","https","ai tells","drafts","prose","patterns","content",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":177,"publishedAt":36},"01M71MVCHADA18SPKG8G4VFN35","resolving-merge-conflicts","Use when you need to resolve an in-progress git merge\u002Frebase conflict.","https:\u002F\u002Fgithub.com\u002Fapplypack\u002Fapplypack\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fresolving-merge-conflicts\u002FSKILL.md",[],[178,179,180,181,182,30,29,183,184,185,186,187],"merge conflicts","conflicts","resolving merge conflicts","merge","conflict","git merge","you","progress","git","rebase",{"skillNo":189,"name":190,"nameZh":6,"description":191,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":192,"categories":193,"keywords":194,"publishedAt":36},"01M71MVA895X32BXCMNXH8K1N6","release-discipline","Tag and GitHub-release rules for this repository — when a merge gets a version tag, how releases stay in parity with tags, and the release-notes format. Read after every PR merge, before tagging, and at the start of a new stage (parity check).","https:\u002F\u002Fgithub.com\u002Fapplypack\u002Fapplypack\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Frelease-discipline\u002FSKILL.md",[],[195,196,197,198,199,200,29,201,202,203,204,181,205,139,206,207,208,209,210,211],"release discipline","discipline","release","release-notes","pr merge","new","notes","releases","how","tagging","at","repository","notes format","start","parity","parity check","pr"]