Skip to content

berth v0.1.6

Choose a tag to compare

@github-actions github-actions released this 15 Sep 08:55
· 13 commits to main since this release
634290f

Onboarding release. What the first real registration taught: a project's own services need no adoption when the evidence already attributes them, a shell hook that follows cd, a warning before a Compose override that cannot apply, berth tidy for the leftovers, and ADR-009 (proposed) for moving repositories off hardcoded ports.

Added

  • ADR-009 (proposed, council-reviewed): how a registered repository stops hardcoding ports. Environment first, the project's own W0 port as the default, strict bind; a berth-migrate skill with one recipe per tool (#17); three scanner zones so a migrated default is never re-declared, and berth project declared --prune as a rail-guarded, audited exception to additive-only policy edits (#16).
  • berth shell-init zsh|bash|fish prints a directory-change hook for your rc file: entering a registered project's checkout exports its ports, leaving it unsets them, and moving between two directories of the same project costs nothing (no berth process spawned unless the project root changed) (#21).
  • berth env --shell --unset prints unset lines for every variable --shell would export in the same context, including the shared ones, and nothing else — what shell-init evals when leaving a project (#21).
  • berth env --compose-override detects a mapped service whose currently-declared port is already held by a container without compose labels (started with docker run) and prints a per-service warning — the recreate command with its volumes, and a caution for an anonymous volume or an image that keeps state only in memory unless configured — instead of a silently ineffective override; berth who adds started by: compose <project> | docker run and mounted volume names to a container holder's evidence; berth doctor reports the Compose flavour on this machine (docker compose plugin, standalone docker-compose, or none) and its version, which the override output now names for the next step (#22).
  • berth tidy [--project X] [--dry-run] [--json]: one human command that applies the leftover-cleanup plan an agent has already shown. --dry-run (and --json) list stale/orphan leases it would release, any owner, and unmanaged ports it can only suggest adopting; applying — human-only under ADR-008 — releases exactly that plan with one audit line per port and is idempotent. The human-only refusal message now explains why and, when it applies, names the berth tidy --project <name> apply path, and berth check's attention summary ends with one run: berth tidy --project <name> line per project with something to release (#20).

Changed

  • The npm package's homepage is the documentation site (https://amiable-dev.github.io/berth/) instead of the README; npmjs.com and npm docs link there from the next release.
  • Reconciler: a live holder inside a project's own block that is already attributed by evidence (compose working_dir label or process cwd) is now ok with no lease required, instead of unmanaged. PortRecord gains attribution: 'lease' | 'evidence'; a holder with no attribution stays unmanaged, and a container started outside Compose gets advisory copy that says so instead of the generic adopt text (#19).
  • berth launch-json --write no longer writes a machine-specific cwd for the common case: entries omit cwd when it equals the repository root, and write it relative to the repository root when --cwd points elsewhere. After writing, .claude/launch.json is appended to .git/info/exclude (never .gitignore) unless it is already tracked or ignored, so it is never committed by accident; --no-exclude opts out (#23).
  • berth env --shell outside a registered project no longer fails: it exits 0, prints only the machine-wide BERTH_SHARED_* exports plus a comment naming the fix (berth project add .), and writes nothing to stderr, so a shell rc file can eval it on every prompt without noise. --strict restores the old exit-1 behaviour; --dotenv, --compose-override and --json are unchanged and still fail loudly (#21).