moving
This commit is contained in:
@@ -1,123 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# oss-drift-check.sh — detect source drift between the canonical monorepo
|
||||
# substrate and the public OSS mirror (github.com/marolinik/hive-mind).
|
||||
#
|
||||
# WHY THIS EXISTS (§7.5 policy, ratified 2026-06-11):
|
||||
# The monorepo is the SOLE source of truth for the memory substrate; the
|
||||
# OSS mirror is generated FROM it. That invariant broke once: the
|
||||
# cross-encoder reranker (inprocess-reranker.ts + HybridSearch options)
|
||||
# was authored directly on the OSS repo during the LoCoMo benchmark arc
|
||||
# and existed ONLY there — discovered by the W4 recon (2026-06-11),
|
||||
# reverse-ported in W4.2 (f47ee8f). This script makes that class of
|
||||
# drift cheap to detect BEFORE it compounds.
|
||||
#
|
||||
# WHAT IT DOES:
|
||||
# Recursively diffs the substrate source trees (src/ only — dist, deps,
|
||||
# lockfiles, and docs churn excluded) between the monorepo and a local
|
||||
# checkout of the OSS repo. Reports per-file status:
|
||||
# ONLY-IN-OSS → candidate reverse-port (the W4.2 failure mode)
|
||||
# ONLY-IN-MONO → not yet exported (fine if a split is pending)
|
||||
# DIFFERS → divergent edits — inspect immediately
|
||||
# Exit 0 = clean, exit 1 = drift found, exit 2 = setup error.
|
||||
#
|
||||
# USAGE:
|
||||
# bash scripts/oss-drift-check.sh [path-to-oss-checkout]
|
||||
# Default OSS path: ../hive-mind (sibling clone), override via arg or
|
||||
# OSS_HIVE_MIND_DIR env var.
|
||||
#
|
||||
# WHEN TO RUN (maintainer ritual — manual, not CI):
|
||||
# - before every OSS release push (alongside oss-subtree-split.sh)
|
||||
# - after any benchmark/experiment arc that touched a hive-mind checkout
|
||||
#
|
||||
# Mapping (OSS repo keeps its own package layout):
|
||||
# monorepo packages/hive-mind-core/src ↔ oss packages/core/src
|
||||
# (extend MAPPINGS below as more packages get mirrored surfaces)
|
||||
#!/usr/bin/env sh
|
||||
set -eu
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
REPO_ROOT="$(git rev-parse --show-toplevel)"
|
||||
cd "$REPO_ROOT"
|
||||
|
||||
OSS_DIR="${1:-${OSS_HIVE_MIND_DIR:-$REPO_ROOT/../hive-mind}}"
|
||||
|
||||
if [[ ! -d "$OSS_DIR/.git" ]]; then
|
||||
echo "[oss-drift-check] ERROR: OSS checkout not found at: $OSS_DIR" >&2
|
||||
echo "[oss-drift-check] Clone it first: git clone https://github.com/marolinik/hive-mind \"$OSS_DIR\"" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# mono-relative-dir : oss-relative-dir
|
||||
MAPPINGS=(
|
||||
"packages/hive-mind-core/src:packages/core/src"
|
||||
)
|
||||
|
||||
# Excluded from comparison:
|
||||
# - build artifacts (dist, node_modules, .tsbuildinfo)
|
||||
# - *.test.ts — test LAYOUT is a permanent convention difference (OSS
|
||||
# co-locates tests beside src; the monorepo keeps them in tests/), so
|
||||
# co-located tests would be unfixable noise. Source drift is the target.
|
||||
IGNORE_RE='(^|/)(dist|node_modules|\.tsbuildinfo)(/|$)|\.test\.ts$'
|
||||
|
||||
drift=0
|
||||
|
||||
for mapping in "${MAPPINGS[@]}"; do
|
||||
mono_dir="${mapping%%:*}"
|
||||
oss_dir="${mapping##*:}"
|
||||
echo "[oss-drift-check] ${mono_dir} ↔ ${OSS_DIR}/${oss_dir}"
|
||||
|
||||
if [[ ! -d "$mono_dir" ]]; then
|
||||
echo "[oss-drift-check] ERROR: monorepo dir missing: $mono_dir" >&2
|
||||
exit 2
|
||||
fi
|
||||
if [[ ! -d "$OSS_DIR/$oss_dir" ]]; then
|
||||
echo "[oss-drift-check] ERROR: OSS dir missing: $OSS_DIR/$oss_dir" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# File inventories (relative paths), excluding build artifacts.
|
||||
mono_files=$(cd "$mono_dir" && find . -type f | sed 's|^\./||' | grep -Ev "$IGNORE_RE" | sort)
|
||||
oss_files=$(cd "$OSS_DIR/$oss_dir" && find . -type f | sed 's|^\./||' | grep -Ev "$IGNORE_RE" | sort)
|
||||
|
||||
only_oss=$(comm -13 <(echo "$mono_files") <(echo "$oss_files"))
|
||||
only_mono=$(comm -23 <(echo "$mono_files") <(echo "$oss_files"))
|
||||
common=$(comm -12 <(echo "$mono_files") <(echo "$oss_files"))
|
||||
|
||||
if [[ -n "$only_oss" ]]; then
|
||||
drift=1
|
||||
echo " ONLY-IN-OSS (candidate reverse-port — the W4.2 failure mode):"
|
||||
echo "$only_oss" | sed 's/^/ /'
|
||||
fi
|
||||
if [[ -n "$only_mono" ]]; then
|
||||
drift=1
|
||||
echo " ONLY-IN-MONO (pending export — fine if a split is queued):"
|
||||
echo "$only_mono" | sed 's/^/ /'
|
||||
fi
|
||||
|
||||
differing=""
|
||||
while IFS= read -r f; do
|
||||
[[ -z "$f" ]] && continue
|
||||
if ! diff -q "$mono_dir/$f" "$OSS_DIR/$oss_dir/$f" >/dev/null 2>&1; then
|
||||
differing+=" $f"$'\n'
|
||||
fi
|
||||
done <<< "$common"
|
||||
|
||||
if [[ -n "$differing" ]]; then
|
||||
drift=1
|
||||
echo " DIFFERS (divergent edits — inspect immediately):"
|
||||
printf '%s' "$differing"
|
||||
fi
|
||||
|
||||
if [[ -z "$only_oss" && -z "$only_mono" && -z "$differing" ]]; then
|
||||
echo " ✓ clean"
|
||||
fi
|
||||
echo
|
||||
done
|
||||
|
||||
if [[ $drift -eq 1 ]]; then
|
||||
echo "[oss-drift-check] DRIFT DETECTED. Policy (§7.5): the monorepo is the"
|
||||
echo "[oss-drift-check] sole source — reverse-port ONLY-IN-OSS work here first,"
|
||||
echo "[oss-drift-check] then regenerate the mirror via scripts/oss-subtree-split.sh."
|
||||
exit 1
|
||||
fi
|
||||
echo "[oss-drift-check] All mapped surfaces clean."
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||||
exec node "$SCRIPT_DIR/oss-drift-check.mjs" "$@"
|
||||
|
||||
Reference in New Issue
Block a user