Repo Rename: Implementation Plan
> Design: [./design.md](./design.md)
Overview
Repo Rename: Implementation Plan
Design: ./design.md
Overview
The rename involves three categories of work: (1) mechanical find-and-replace across the repo, (2) a migration step in the sync script for existing users, and (3) post-merge GitHub repo rename. The first two are code changes; the third is a manual step.
1. Find-and-Replace Across the Repo
Target String
All occurrences of the literal string claude-starter-kit are replaced with claude-toolbox. There are no partial matches or regex edge cases to worry about — the string is unique and unambiguous.
Files by Category
Scripts
.github/scripts/template-cleanup.sh— defaultUPSTREAM_REPOvalue, safety guard checking repo name, comments.github/scripts/template-sync.sh— comments referencing the repo URL.github/templates/claude/scripts/sync-workflow.sh— hardcodedUPSTREAM_REPOvariable
Workflows
.github/workflows/template-sync.yml— repo name guard inif:condition, comments.github/workflows/template-cleanup.yml— repo name guard inif:condition, comments
Config
.github/templates/serena/project.yml—project_namefield.github/templates/template-state.example.json—upstream_repovalue
Tests
test/test-template-cleanup.sh— assertions and test data referencingupstream_repotest/test-template-sync.sh—resolve_versiontest calls with repo nametest/test-manifest-jq.sh— manifest parsing assertionstest/fixtures/manifests/*.json(7 files) —upstream_repovalues in all fixture manifests
Documentation
README.md— heading, "Use this template" link, example manifests, curl URLs, repo linksdocs/template-sync/design.md— problem statement, architecture diagram, example manifestdocs/template-sync/template-state-schema.json—$idURL, example valuesdocs/template-sync/tm/docs/template-sync-prd.md— problem statement, user storiesdocs/template-sync/tm/docs/sync-exclusions-prd.md— context referencesdocs/template-sync/sync-exclusions/design.md— context references, example manifest
WIP Documentation
docs/wip/extract-plugin/design.md— marketplace config, install commands, repo URLsdocs/wip/extract-plugin/implementation.md— plugin config, marketplace JSON, install commands, migration stepsdocs/wip/extract-plugin/tasks.md— task descriptions referencing repo namedocs/wip/language-specific-skills/design.md— context referencedocs/wip/language-specific-skills/implementation.md— context reference
Commands
.github/templates/claude/commands/sync-workflow/sync-workflow.md— raw content URL.github/templates/claude/commands/migrate-from-taskmaster/migrate.md— issue URL, raw content URL
Verification
After the replacement, run grep -r 'claude-starter-kit' . to confirm zero remaining occurrences (excluding .git/).
2. Manifest Migration in template-sync.sh
<a id="manifest-migration"></a>
Location
In .github/scripts/template-sync.sh, inside the main() function, after read_manifest() and validate_manifest() complete, and before resolve_version() is called.
Logic
if upstream_repo from manifest == "serpro69/claude-starter-kit":
log_info "Migrating upstream_repo from serpro69/claude-starter-kit to serpro69/claude-toolbox"
rewrite upstream_repo in template-state.json using jq
reload manifest into memory
Implementation Details
- Use
jqto update theupstream_repofield in-place in the manifest file (.github/template-state.json) - The manifest is already loaded into a global variable by
read_manifest()— after the file rewrite, re-runread_manifest()to refresh the in-memory state - This migration is idempotent: if
upstream_repois alreadyserpro69/claude-toolbox, the condition doesn't trigger - The migration runs in both CI mode and local mode
Function Structure
Create a dedicated migrate_manifest() function (not inline in main()) to keep the migration logic isolated and testable. Place it near validate_manifest() since they're called in sequence.
Testing
Add test cases in test/test-template-sync.sh:
- Test that a manifest with
upstream_repo = "serpro69/claude-starter-kit"gets rewritten to"serpro69/claude-toolbox"after migration - Test that a manifest already set to
"serpro69/claude-toolbox"is not modified - Test that the migration logs an info message when it triggers
3. Post-Merge Steps (Manual)
These steps happen after the code changes are merged. They are not automated and should be documented in the PR description.
- Tag a release on the commit just before the rename PR merges — this preserves
raw.githubusercontent.comURLs for users pinned to specific versions - Rename the repo in GitHub Settings > General > Repository name:
claude-starter-kit→claude-toolbox - Verify the redirect — confirm
git ls-remote https://github.com/serpro69/claude-starter-kit.gitresolves to the renamed repo - Update GitHub topics/description if needed to reflect the new name
- Update any external references (e.g., blog posts, social media links) — these are outside the scope of this repo but worth noting
Risks and Mitigations
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
GitHub redirect breaks if someone creates claude-starter-kit under serpro69 | Very low (you control the namespace) | High — sync breaks for users who haven't synced yet | Manifest migration auto-heals on next sync; redirect is a temporary bridge |
Existing users' sync-workflow.sh fails (raw URL 404) | Medium — affects users who run sync-workflow before template-sync | Low — they can run template-sync first, which delivers updated script | Document in release notes; sync-workflow failure message could hint at rename |
| Plugin extraction (#33) starts before rename lands | Low — coordination is in the issue | Medium — rework needed | Merge rename first; issue already says "do together" |