Repository navigation
v4.0.1
Added
bootstrap.ps1at the repo root — the one-time install step. Drops thebin/shim/dotbot*PATH shim into~/.local/bin(Linux/macOS) or%LOCALAPPDATA%\Microsoft\WindowsApps(Windows). Refuses PowerShell 5.1; never sets$env:DOTBOT_HOMEfor the user (design decision D4). Honours-ShimDirand-Force.dotbot statussubcommand reporting resolvedDOTBOT_HOME, framework branch + short SHA + dirty flag, version, user-settings path, and the active project's workflow / provider / stacks.--jsonemits a stable shape for CI scripts and the dashboard.- UI framework banner in the dashboard header — surfaces the active
DOTBOT_HOMEplus framework branch/SHA/dirty, with an amber warning state when the checkout is dirty or offmain/master. MIGRATING.mdat the repo root walks v3 projects through the rewrite (shim install, project.bot/rewrite,.mcp.jsonrepointing, user-settings move, settings layer reshuffle, retired-entry-point cheat sheet).- Active-stack hook chain —
ContentResolvernow folds three tiers in order (framework → active stacks viaextendschain in.control/settings.json→ project), exposed viaGet-DotbotActiveStackChain.
Changed
dotbot initis now a sparse project bootstrap. A fresh.bot/contains onlyworkspace/(seeded from<DOTBOT_HOME>/content/workspace-template/) and.gitignore. Framework content stays in$env:DOTBOT_HOMEand is resolved lazily;-Workflow X/-Stack Ymaterialise project-tier directories under.bot/content/only when the source ships anoverrides/subtree (registry items always materialise). Init hard-errors whenDOTBOT_HOMEis unset.Get-MergedSettingsLayer 1 source moved from<BotRoot>/settings/settings.default.json(which init no longer creates) to<DOTBOT_HOME>/content/settings/settings.default.json. A new tracked project override layer at<BotRoot>/content/settings/settings.default.jsonsits between framework defaults and user-settings.- Workspace
instance_idmoved out ofsettings.default.jsoninto.bot/.control/settings.json, lazy-created by the runtime on first start. UI writers already wrote to.control/settings.json, so no operator action is required for existing projects. workflow add/workflow removerecord / clear the active workflow in.bot/.control/settings.json. No moreinstalled_workflowsbaseline writes,.mcp.jsonmerges,.env.localscaffolding, ordomain.task_categoriesmerges into the framework defaults file.- CLI scripts (
runtime-start,runtime-status,tasks-run,workflow-list,workflow-run,workflow-scaffold) import runtime modules from<DOTBOT_HOME>/src/runtime/Modules/directly. The old walk-up-to-find-a-fallback path is gone. - MCP server discovery walks both
tools/(new layout) andsystems/mcp/tools/(legacy) under each workflow source — the pre-v4 init normalised the latter to the former on copy, and the resolver now handles it directly. - README, AGENTS.md / CLAUDE.md rewritten for the shim-only install model. Quick Start is
git clone+pwsh bootstrap.ps1+$env:DOTBOT_HOME = $PWD. AGENTS.md "Dev Cycle" drops the reinstall step (DOTBOT_HOME tracks the checkout live). Architecture sections describe the layered content resolver and four-layer settings chain.
Removed
install.ps1,install-remote.ps1— the copy-based installers. v4 only ships a PATH shim; the framework is a git checkout you point$env:DOTBOT_HOMEat.dotbot.psm1,dotbot.psd1— the PowerShell Gallery entry point.Install-Module Dotbotretired alongsideinstall.ps1.src/cli/install-global.ps1— the deploy-to-~/dotbotlogic that the retired installers called.src/init.ps1,src/go.ps1— IDE-integration setup and UI launcher copies thatdotbot initused to drop into.bot/. Their replacement is thedotbot runtime-startsubcommand backed bysrc/cli/runtime-start.ps1.tests/Test-GoScript.ps1— its end-to-end launch test was already skipped pending thedotbot gorehoming..bot/.manifest.jsongeneration + pre-commit hook generation + framework-paths protection — Phase 4 removed the framework copy from.bot/, so the integrity gates that guarded those copies became inert..bot/src/,.bot/content/,.bot/settings/,.bot/recipes/,.bot/hooks/copies. They were caches of framework code that drifted; the runtime resolver now reads them lazily fromDOTBOT_HOME..codex/config.toml,.gemini/settings.jsonwrites fromdotbot init. Provider MCP configuration is the user's to manage; thedotbot mcp linksubcommand to wire it up automatically is on the roadmap (Phase 8 inPLAN.md).Install-Module Dotbot/irm install-remote.ps1 | iex/pwsh install.ps1/dotbot update/.bot\go.ps1/.bot\init.ps1as entry points. SeeMIGRATING.md§7 for the cheat-sheet.docs/whitepapers/UI-AND-DOMAIN-MODEL-WHITEPAPER-v2.md— described the v3 launcher (.bot\go.ps1) and is fully superseded byMIGRATING.mdplus the rewritten README/AGENTS.md.
Migration
- Existing v3 projects need the rewrite documented in
MIGRATING.md: archive~/dotbot, clone afresh, runbootstrap.ps1, setDOTBOT_HOME, thengit rmthe stale.bot/src+.bot/content+.bot/settings+.bot/recipes+.bot/hooks+.bot/.manifest.json+.bot/go.ps1+.bot/init.ps1per project. The~/dotbot/user-settings.json → ~/.config/dotbot/user-settings.jsonmove is automatic (idempotent migration on firstGet-MergedSettingscall).
CI
- Release pipeline rewired to the shim-only model.
test.jsondrops thepwsh install.ps1step from all jobs;release.jsonbuilds the archive byrsync-ing the working tree (sans.git/,node_modules/,.bot/, staging + archive outputs), overlays the pre-builtsrc/studio-ui/static/, and uploads the GitHub release with v4 install commands in the notes. The PSGallery publish job is deleted.bump-release.jsondrops thedotbot.psd1ModuleVersionbump —version.jsonis the only bump artefact now. - Theme-hygiene scanner now targets
bootstrap.ps1instead of the retiredinstall.ps1;src/cli/Platform-Functions.psm1is the sole exempt file. - Layer 1 has a new BOOTSTRAP.PS1 contract block that drives
bootstrap.ps1into a temp-ShimDirand asserts the PS 7 guard, shim source, platform default targets, and the "neverSetEnvironmentVariable(...DOTBOT_HOME...)" rule (D4). - Layer 2 has a new "Phase 4: dotbot init footprint" block pinning the strict init contract (
.bot/children =={.gitignore, workspace}; nothing outside.bot/mutated; project tier created only when overrides exist) and a "Phase 5:dotbot status --jsonshape" block pinning the JSON contract that the UI banner + CI scripts depend on.
Kickstart vocabulary rename (previously documented)
- The kickstart vocabulary rename is locked in across the codebase. CSS classes, JS function names, modal IDs, the
kickstart_*keys on/api/info(nowworkflow_*), theGet-KickstartStatusPowerShell function (nowGet-WorkflowStatus), workflow JSON commit-message templates (chore(kickstart):→chore(workflow):), and thedotbot-kickstartgenerator string intask-groups.jsonandroadmap-overview.mdfront matter (nowdotbot-task-runner) all use the new names. - User-visible: the project-launch button label changed from
KICKSTART PROJECTtoLAUNCH PROJECT. TheKickstartbutton text in the preflight modal changed toLaunch. The Jira interview phase title changed fromKickstart Interview (Multi-Repo)toProject Interview (Multi-Repo). New commit messages usechore(workflow):instead ofchore(kickstart):. - The
kickstart-via-jira,kickstart-via-pr,kickstart-via-repo, andkickstart-from-scratchworkflow aliases indotbot init -Workfloware gone. Use the canonicalstart-from-jira,start-from-pr,start-from-repo, andstart-from-promptnames. - The
tests/Test-NoKickstartReferences.ps1warning gate is nowtests/Test-NoLegacyVocabulary.ps1, a hard Layer 1 fail. Anykickstartreference outsideideas/and the gate file itself fails the build.
Install
# Homebrew (macOS / Linux)
brew install andresharpe/dotbot/dotbot
# Scoop (Windows)
scoop bucket add dotbot https://github.com/andresharpe/scoop-dotbot
scoop install dotbot
# From source
git clone https://github.com/andresharpe/dotbot ~/dotbot
pwsh ~/dotbot/bootstrap.ps1