[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71KPR1BABJCKR6SXM3H9RXH":3,"skill-same:01M71KPR1BABJCKR6SXM3H9RXH":50},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":23,"linkOnly":24,"markdownContent":25,"markdownBody":26,"frontMatter":27,"refName":28,"commitSha":29,"skillDirectory":30,"forksCount":31,"repositoryHtmlUrl":32,"repositoryHomepageUrl":33,"ownerHtmlUrl":34,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":35,"install":36,"resources":49},"01M71KPR1BABJCKR6SXM3H9RXH","cbp-commit-changes",null,"tbeack\u002Ffsad_training","tbeack","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F206807984?v=4","01M6K7Q3C3VRTCVC55T71A1SY9","Theo Beack","01M71KPJZ6H9P6B793RT1JXX9R",4,"MIT","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_training\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fcbp-commit-changes\u002FSKILL.md",[],[18,19,20,21,22],"commit","commit changes","cbp","changes","cbp commit changes","2026-11-10 10:56:23",false,"---\nname: cbp-commit-changes\ndescription: Finalize a batch of completed FSD_Train tasks for the FSAD Training app and commit them to git. Re-bundles `dist\u002Ffsad-training.html` if any source files changed, archives shipped task files from `planning\u002Fto do\u002F` into `planning\u002Fcompleted\u002F` via `git mv` (and updates the link in `todo.md` while keeping the line), stages the relevant files (training app source, planning artifacts, todo.md), writes a scoped commit message referencing each FSD_Train task, and pushes. Use whenever the user says \"\u002Fcommit-cbp-changes\", \"commit these changes to git\", \"ship these FSD_Train changes\", \"push the training updates\", \"finalize this batch\", or any similar phrasing that follows finishing a task. This is the natural step that runs AFTER `cbp-add-task` tasks have been implemented — so even if the user just says \"we're done, commit it\", trigger this skill.\nargument-hint: `[optional commit subject override]`\n---\n\n# Commit FSD_Train Changes Skill\n\nYou finalize a batch of completed FSD_Train work on the FSAD Training app. Two phases: **verify**, **commit & push**. Do not skip verification — silent typos in the bundled output ship to every workshop attendee opening the file from `file:\u002F\u002F`.\n\n## Inputs you need before doing anything\n\n1. **Repo state.** Run `git status` first. If the project is not yet a git repository, stop and tell the user — they need to `git init`, configure user.name \u002F user.email, and set a remote before this skill can run.\n2. **Which FSD_Train tasks are being shipped.** Read `planning\u002Fto do\u002Ftodo.md` and identify FSD_Train items that are:\n   - marked complete (`- [x]`), AND\n   - reference uncommitted changes (cross-check with `git status` \u002F `git log`).\n   If ambiguous (multiple newly-completed tasks but the user wanted only some), ask the user to confirm the list before committing.\n3. **Today's date.** ISO format `YYYY-MM-DD`. Use the current date in context — do not guess.\n\n## Step 1 — Gather change summaries for each task\n\nFor each FSD_Train task being shipped, read its `planning\u002Fto do\u002Ftask-fsd_train-NNN.md` file to pull out:\n- The task title\n- A short prose summary of what changed (1–4 bullet points)\n\nIf a task file doesn't exist, fall back to the title from `todo.md` and any diff context you can see. Don't invent details — if a task is opaque, ask the user what to write.\n\n## Step 2 — Re-bundle if any source touched the app\n\nIf the task changed any file under `src\u002F`, run `npm run bundle` and confirm:\n- Bundler exits 0\n- `dist\u002Ffsad-training.html` is updated (check `git status` again — `dist\u002F` should now show as modified)\n- No unexpected \"unused markdown artifact\" warnings (an expected warning for a deliberately unused stub is fine; new ones aren't)\n\nIf the bundle fails, stop and report. Do not commit a broken build.\n\n## Step 3 — Verify before committing\n\nRun these checks and show the user a short summary:\n\n```bash\ngit status\ngit diff --stat\n```\n\nVisually sanity-check:\n- Every file in the diff is intentional\n- `dist\u002Ffsad-training.html` was rebundled if `src\u002F` changed\n- No stray edits to unrelated files\n\nIf anything looks off, fix it before proceeding. If you can't tell, ask the user.\n\n## Step 4 — Archive completed task files to `planning\u002Fcompleted\u002F`\n\nFor each FSD_Train task being shipped, move its task file from `planning\u002Fto do\u002F` to `planning\u002Fcompleted\u002F` so the archive grows alongside ship history. Use `git mv` so the rename is part of the upcoming commit (a single atomic event: task done + file archived).\n\n1. Create the destination directory if it doesn't exist yet:\n   ```bash\n   mkdir -p \"planning\u002Fcompleted\"\n   ```\n2. For each `FSD_Train-NNN` in this batch, run:\n   ```bash\n   git mv \"planning\u002Fto do\u002Ftask-fsd_train-NNN.md\" \"planning\u002Fcompleted\u002Ftask-fsd_train-NNN.md\"\n   ```\n3. Update `planning\u002Fto do\u002Ftodo.md` so the link for each archived task points to its new location. **Keep the line in the file** — only the link target changes (the `- [x]` and the title stay):\n   ```\n   - [x] `FSD_Train-NNN` Title → [task-fsd_train-NNN.md](..\u002Fcompleted\u002Ftask-fsd_train-NNN.md)\n   ```\n   The relative link works because `todo.md` lives in `planning\u002Fto do\u002F` and the file is now at `planning\u002Fcompleted\u002F`.\n\nOnly move files for FSD_Trains being shipped in this batch — leave in-progress task files in `planning\u002Fto do\u002F`.\n\n## Step 5 — Stage scoped files\n\nStage only the files you intentionally changed. Do not use `git add -A` — `planning\u002F` often contains work-in-progress notes the user may not want shipped. The `git mv` calls in Step 4 already staged the renamed task files, so don't re-add those paths. Typical stage list:\n\n```bash\ngit add \\\n  src\u002Findex.html \\\n  \"src\u002Fmarkdown\u002F*.md\" \\\n  dist\u002Ffsad-training.html \\\n  \"planning\u002Fto do\u002Ftodo.md\"\n```\n\nAdjust the list based on what `git status` actually shows — don't blindly stage files that weren't touched.\n\n## Step 6 — Commit\n\nMatch the project's existing commit style (see `git log` if there's prior history; otherwise use a clean conventional default):\n\n```\n\u003Cone-line rollup> (FSD_Train-NNN, FSD_Train-NNN, ...)\n\n- \u003Cbullet per task, terse>\n- \u003Cbullet>\n```\n\nIf the user passed `$ARGUMENTS`, use that as the commit subject instead.\n\nUse a HEREDOC and include the Claude co-author trailer per the user's global conventions.\n\n## Step 7 — Push\n\n```bash\ngit push\n```\n\nIf the branch has no upstream, set it with `git push -u origin \u003Cbranch>`. If the push fails (non-fast-forward, auth, hooks), stop and report — do not force-push.\n\n## Step 8 — Report back\n\nTell the user:\n- FSD_Train tasks included\n- Commit SHA (short)\n- Confirmation that push succeeded (or the error, if it didn't)\n\n## When to pause and ask\n\n- The project isn't yet a git repository.\n- The list of \"completed but unshipped\" FSD_Train tasks is ambiguous.\n- A task file is missing and you can't confidently summarize the change.\n- `git status` shows unexpected modifications outside the FSD_Train scope.\n- The user's working tree has uncommitted changes unrelated to this batch.\n- Push requires force, rebase, or branch setup decisions.\n\nShort, specific questions — don't dump a wall of options.\n\n## Why this skill exists\n\nThe FSAD Training app is shared with workshop attendees as a takeaway artifact; shipping a half-rebundled version (e.g., `src\u002F` updated but `dist\u002F` stale) breaks the live presentation and confuses attendees. The sequencing above — verify, then bundle, then a single scoped commit, then push — keeps the source and the shipped artifact in sync.\n","# Commit FSD_Train Changes Skill\n\nYou finalize a batch of completed FSD_Train work on the FSAD Training app. Two phases: **verify**, **commit & push**. Do not skip verification — silent typos in the bundled output ship to every workshop attendee opening the file from `file:\u002F\u002F`.\n\n## Inputs you need before doing anything\n\n1. **Repo state.** Run `git status` first. If the project is not yet a git repository, stop and tell the user — they need to `git init`, configure user.name \u002F user.email, and set a remote before this skill can run.\n2. **Which FSD_Train tasks are being shipped.** Read `planning\u002Fto do\u002Ftodo.md` and identify FSD_Train items that are:\n   - marked complete (`- [x]`), AND\n   - reference uncommitted changes (cross-check with `git status` \u002F `git log`).\n   If ambiguous (multiple newly-completed tasks but the user wanted only some), ask the user to confirm the list before committing.\n3. **Today's date.** ISO format `YYYY-MM-DD`. Use the current date in context — do not guess.\n\n## Step 1 — Gather change summaries for each task\n\nFor each FSD_Train task being shipped, read its `planning\u002Fto do\u002Ftask-fsd_train-NNN.md` file to pull out:\n- The task title\n- A short prose summary of what changed (1–4 bullet points)\n\nIf a task file doesn't exist, fall back to the title from `todo.md` and any diff context you can see. Don't invent details — if a task is opaque, ask the user what to write.\n\n## Step 2 — Re-bundle if any source touched the app\n\nIf the task changed any file under `src\u002F`, run `npm run bundle` and confirm:\n- Bundler exits 0\n- `dist\u002Ffsad-training.html` is updated (check `git status` again — `dist\u002F` should now show as modified)\n- No unexpected \"unused markdown artifact\" warnings (an expected warning for a deliberately unused stub is fine; new ones aren't)\n\nIf the bundle fails, stop and report. Do not commit a broken build.\n\n## Step 3 — Verify before committing\n\nRun these checks and show the user a short summary:\n\n```bash\ngit status\ngit diff --stat\n```\n\nVisually sanity-check:\n- Every file in the diff is intentional\n- `dist\u002Ffsad-training.html` was rebundled if `src\u002F` changed\n- No stray edits to unrelated files\n\nIf anything looks off, fix it before proceeding. If you can't tell, ask the user.\n\n## Step 4 — Archive completed task files to `planning\u002Fcompleted\u002F`\n\nFor each FSD_Train task being shipped, move its task file from `planning\u002Fto do\u002F` to `planning\u002Fcompleted\u002F` so the archive grows alongside ship history. Use `git mv` so the rename is part of the upcoming commit (a single atomic event: task done + file archived).\n\n1. Create the destination directory if it doesn't exist yet:\n   ```bash\n   mkdir -p \"planning\u002Fcompleted\"\n   ```\n2. For each `FSD_Train-NNN` in this batch, run:\n   ```bash\n   git mv \"planning\u002Fto do\u002Ftask-fsd_train-NNN.md\" \"planning\u002Fcompleted\u002Ftask-fsd_train-NNN.md\"\n   ```\n3. Update `planning\u002Fto do\u002Ftodo.md` so the link for each archived task points to its new location. **Keep the line in the file** — only the link target changes (the `- [x]` and the title stay):\n   ```\n   - [x] `FSD_Train-NNN` Title → [task-fsd_train-NNN.md](..\u002Fcompleted\u002Ftask-fsd_train-NNN.md)\n   ```\n   The relative link works because `todo.md` lives in `planning\u002Fto do\u002F` and the file is now at `planning\u002Fcompleted\u002F`.\n\nOnly move files for FSD_Trains being shipped in this batch — leave in-progress task files in `planning\u002Fto do\u002F`.\n\n## Step 5 — Stage scoped files\n\nStage only the files you intentionally changed. Do not use `git add -A` — `planning\u002F` often contains work-in-progress notes the user may not want shipped. The `git mv` calls in Step 4 already staged the renamed task files, so don't re-add those paths. Typical stage list:\n\n```bash\ngit add \\\n  src\u002Findex.html \\\n  \"src\u002Fmarkdown\u002F*.md\" \\\n  dist\u002Ffsad-training.html \\\n  \"planning\u002Fto do\u002Ftodo.md\"\n```\n\nAdjust the list based on what `git status` actually shows — don't blindly stage files that weren't touched.\n\n## Step 6 — Commit\n\nMatch the project's existing commit style (see `git log` if there's prior history; otherwise use a clean conventional default):\n\n```\n\u003Cone-line rollup> (FSD_Train-NNN, FSD_Train-NNN, ...)\n\n- \u003Cbullet per task, terse>\n- \u003Cbullet>\n```\n\nIf the user passed `$ARGUMENTS`, use that as the commit subject instead.\n\nUse a HEREDOC and include the Claude co-author trailer per the user's global conventions.\n\n## Step 7 — Push\n\n```bash\ngit push\n```\n\nIf the branch has no upstream, set it with `git push -u origin \u003Cbranch>`. If the push fails (non-fast-forward, auth, hooks), stop and report — do not force-push.\n\n## Step 8 — Report back\n\nTell the user:\n- FSD_Train tasks included\n- Commit SHA (short)\n- Confirmation that push succeeded (or the error, if it didn't)\n\n## When to pause and ask\n\n- The project isn't yet a git repository.\n- The list of \"completed but unshipped\" FSD_Train tasks is ambiguous.\n- A task file is missing and you can't confidently summarize the change.\n- `git status` shows unexpected modifications outside the FSD_Train scope.\n- The user's working tree has uncommitted changes unrelated to this batch.\n- Push requires force, rebase, or branch setup decisions.\n\nShort, specific questions — don't dump a wall of options.\n\n## Why this skill exists\n\nThe FSAD Training app is shared with workshop attendees as a takeaway artifact; shipping a half-rebundled version (e.g., `src\u002F` updated but `dist\u002F` stale) breaks the live presentation and confuses attendees. The sequencing above — verify, then bundle, then a single scoped commit, then push — keeps the source and the shipped artifact in sync.\n",{},"main","e32e0d2b9fad831f2915fc773e03fd68d98c8c1e",".claude\u002Fskills\u002Fcbp-commit-changes",0,"https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_training","https:\u002F\u002Ffsad-training.vercel.app","https:\u002F\u002Fgithub.com\u002Ftbeack","2026-10-12 21:23:30",{"source":7,"skillName":5,"commands":37,"prompt":47,"zipAvailable":48},[38,41,44],{"tool":39,"command":40},"npx","npx skills add tbeack\u002Ffsad_training --skill cbp-commit-changes",{"tool":42,"command":43},"bunx","bunx skills add tbeack\u002Ffsad_training --skill cbp-commit-changes",{"tool":45,"command":46},"pnpm","pnpm dlx skills add tbeack\u002Ffsad_training --skill cbp-commit-changes","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_training\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fcbp-commit-changes\u002FSKILL.md",true,[],[51,60,69,90,111,120],{"skillNo":52,"name":53,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":54,"categories":55,"keywords":56,"publishedAt":23},"01M71KR8NEVXYHFZ9YF9PBEMH9","verify-ac","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_training\u002Fblob\u002Fmain\u002Fskills\u002Fverify-ac\u002FSKILL.md",[],[57,58,59],"verify ac","ac","verify",{"skillNo":61,"name":62,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":23},"01M71KR6NR71VM37PJX36EM18X","spec-review","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_training\u002Fblob\u002Fmain\u002Fskills\u002Fspec-review\u002FSKILL.md",[],[66,67,68],"spec","review","spec review",{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":23},"01M71KR55DS0Q45W9YF0516AX4","ship","Short alias for \u002Ffsad-harness:ship-it. Wrap up finished work, cut a version, commit, push, and open a PR.","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_training\u002Fblob\u002Fmain\u002Fskills\u002Fship\u002FSKILL.md",[],[71,76,18,77,78,79,80,81,82,83,84,85,86,87,88,89],"it","version","wrap up","open","wrap","up","short","cut","for","pr","push","alias","work","harness",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":23},"01M71KR0YNJ99YAJGEDPHZTTTQ","ship-it","Wrap up a finished round of work — verify README and CHANGELOG are current, cut a version if warranted, move completed task files into the completed\u002F folder, then create a feature branch if needed, commit, push, and open a PR. Run after `\u002Ffsad-harness:do-task` has marked one or more tasks done. Takes no arguments.","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_training\u002Fblob\u002Fmain\u002Fskills\u002Fship-it\u002FSKILL.md",[],[76,71,97,98,99,100,101,102,103,104,81,79,105,106,107,108,18,109,110,88],"ship it","files","ls","branch","checkout","parse","move","gh pr","remote","done","Bash","tasks","log","create",{"skillNo":112,"name":113,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":23},"01M71KQZ640W3AQ707NFDANCMW","set-context","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_training\u002Fblob\u002Fmain\u002Fskills\u002Fset-context\u002FSKILL.md",[],[117,118,119],"context","set context","SET",{"skillNo":121,"name":122,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":23},"01M71KQV6HR3HP3G2K0BFC011Y","sec-review-team","https:\u002F\u002Fgithub.com\u002Ftbeack\u002Ffsad_training\u002Fblob\u002Fmain\u002Fskills\u002Fsec-review-team\u002FSKILL.md",[],[67,126,127,128],"team","review team","sec review team"]