v3.0.0
v3.0.0 — Flattened Duck
Consolidates the rubber-duck agent architecture around a single self-contained rubber-duck agent and moves the enforcement policy out of a managed block in AGENTS.md into a portable duck-policy skill loaded at agent session start. Installers, sync wrappers, tests, and docs updated to match. Also folds in remediations from a full duck-review of the branch.
Highlights
- Policy is now a skill.
duck-policy(approval gates, safety carve-outs, Duck Ladder, style, deferred-debt markers) is portable and loadable by any agent. Rubber-duck agent body bootstraps it as its mandatory first action. AGENTS.mdmanaged block retired. Installers strip legacy blocks on upgrade with a prominent notice and a timestamped backup preserving any user content that lived inside the block. Fresh installs no longer write policy into yourAGENTS.md.- Sync wrapper hardening. Version checks, scope-locked wrappers, portable substitution, and consistent bash/PowerShell parity.
- Validation suite expanded with checkpoint-4 fixture, security-vuln fixture, and context-loading fixture.
Breaking changes
--claude-md/-ClaudeMdand--skip-agents-md/-SkipAgentsMdflags removed. CI or user aliases relying on these will fail hard. Deprecation stub deferred to a follow-up.--policy host|selfflag removed.- Legacy managed policy block in user
AGENTS.md/CLAUDE.mdis stripped on install. Backup written; migration is loud. - Sync wrapper scope is embedded at install time. User-supplied
--project/--globalon the wrapper now errors instead of being silently filtered (PS) or triggering installer parse errors (bash). Re-run the installer to change scope.
Migration guide
- Run the installer as usual.
- On first upgrade, watch for the
Legacy managed policy block detected (3.x migration)notice. YourAGENTS.mdwill be backed up next to itself asAGENTS.md.bak.<timestamp>before the block is removed. - If you had CI aliases using removed flags, drop them.
- Update any custom scripts that expected wrapper scope override to instead re-run the installer with the desired scope.
Architecture changes
- Single self-contained
rubber-duckagent (no more reliance on AGENTS.md for rules). - Agent body includes
duck-policysnippet at build time. - Installer templates reorganized under
src/install/scripts/andsrc/install/templates/. - Build flow:
src/agents/*→dist/*;src/skills/*→skills/*. Never edit generated outputs.
Installer + sync wrapper
- New
sync-latest.{sh,ps1}helper installed alongside agents. Checks for newer versions before syncing; prompts on upgrade with CHANGELOG link. - Bash + PowerShell installer parity tightened:
VERSIONfile format validated on both sides (^v\d+\.\d+\.\d+$)- Portable sync-wrapper token substitution (bash parameter expansion; no sed dependency; macOS-safe)
Get-SyncReplayArgsshape matches bashsync_replay_cmd(DRY dry-run + untrusted logic)Doctor/doctorfail-fast when called before target resolve- Loud scope-collision reject in both wrappers
- Version-check
VERSIONURL derives from installer URL (branch/custom raw-base aware)
- Sync wrappers embed
RUBBER_DUCK_VERSIONfor diagnostics. - Fallback wrapper templates removed; installer errors clearly if the template cannot be fetched.
Fixes bundled
- Legacy managed-block migration UX: loud notice, backup preserves user content, no spurious backups on fresh install
- Bash sync wrapper version comparison POSIX-compatible; incomparable pre-release strings no longer crash
- PS host detection uses
(Get-Process -Id $PID).Path(previous automatic-variable reference was inert) running_piped()definition ordering fix- CI line-ending drift resolved for
*.ps1
Full Changelog: v2.1.4...v3.0.0