Files
SBPro dc2cdea360 Release 2.2.0 — unified onboard strategy + safety hardening
Folds `josh-sync adopt` into `josh-sync onboard <target>` as the adopt
strategy alongside the original reset flow. Strategy resolves by
precedence: --mode flag > targets[].history_lock config (preserve|rewrite)
> auto-detect via `git ls-remote --heads`. `josh-sync adopt` is kept as
a thin alias. Adds the new `targets[].history_lock` config field
(validated at parse time) and folds `<target>/adopt.json` state into
`<target>/onboard.json` with a `.strategy` field; legacy state files
are read with a backward-compat fallback.

Safety hardening (from a multi-angle review of the unification):
- auto-detect distinguishes auth/network failure from empty repo
- resume validates --mode against the strategy saved in state
- `josh-sync adopt` rejects a conflicting --mode in the forwarded args
- missing import-PR lookup dies in both strategies (was WARN+continue
  for reset, which could create duplicate import PRs on resume)
- --restart durably removes the legacy adopt.json from the state branch
- adopt_branch is now a subshell function (EXIT trap can't clobber callers)
- strategy value validated after resolve/load (reset|adopt)
- --mode with missing/empty value dies with a usage hint
- migrate-pr against an adopt-strategy target dies with a specific hint
- reset importing asserts archived_url is present (no "null" → git clone)

End-to-end + CLI bats coverage added (tests/unit/adopt_e2e.bats,
tests/unit/cli.bats). 72 tests, shellcheck clean.

Makefile dist bundle header now correctly interpolates VERSION and
line count.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 03:32:04 +01:00
..
"#"
2026-05-26 10:38:20 +03:00

Architecture Decision Records

This directory contains Architecture Decision Records (ADRs) for josh-sync. Each ADR documents a significant design decision, its context, the alternatives considered, and the rationale for the chosen approach.

Index

ADR Title Status
001 Josh-proxy for bidirectional sync Accepted
002 State storage on orphan git branch Accepted
003 Force-with-lease for forward sync Accepted
004 Always-PR policy for reverse sync Accepted
005 Git trailer for loop prevention Accepted
006 Inline exclude in josh-proxy URL Accepted
007 Reconciliation merge for filter changes Accepted
008 First-parent ordering in reconciliation merges Accepted
009 Tree comparison as sync skip guard Accepted
010 Onboard workflow with checkpoint/resume Accepted
011 Linearize fallback for reverse sync Accepted
012 Explicit monorepo_url (drop first-target-host inference) Accepted
013 Non-destructive adoption merge for existing subrepos Accepted