#!/usr/bin/env bash
# R2: .git/config larger than 1 MiB, origin before vs after the cap.
set -uo pipefail
C=/tmp/ev-23690/capture; D=$C/drivers; F=$C/fx-r2
HEADWT=$HOME/wt/pr-23690; BASEWT=$HOME/wt/pr-23690-before
echo "## R2 >1 MiB .git/config  $(date -u +%FT%TZ)"
echo "HEAD=$(git -C $HEADWT rev-parse HEAD) BASE=$(git -C $BASEWT rev-parse HEAD)"
rm -rf $F; mkdir -p $F/ws/early/.git $F/ws/late/.git $F/codex
pad() { python3 -c 'import sys
print("[t3pad]")
for i in range(40000): print("\tk%06d = %s" % (i, "x"*24))'; }
{ printf '[remote "origin"]\n\turl = https://github.com/acme/early.git\n'; pad; } > $F/ws/early/.git/config
{ pad; printf '[remote "origin"]\n\turl = https://github.com/acme/late.git\n'; } > $F/ws/late/.git/config
echo "\$ stat -c '%n %s bytes' */.git/config ; grep -b -o 'url = .*' */.git/config"
(cd $F/ws && stat -c '%n %s bytes' */.git/config && grep -b -o 'url = .*' */.git/config)
echo "1 MiB = 1048576 bytes"
i=0; for d in early late; do i=$((i+1)); mkdir -p $F/claude/projects/p$i
  printf '{"type":"user","cwd":"%s","sessionId":"s%d"}\n{"type":"assistant"}\n' "$F/ws/$d" $i > $F/claude/projects/p$i/a.jsonl; done
for side in base head; do
  wt=$BASEWT; [ $side = head ] && wt=$HEADWT
  echo "\$ ($side) node scan.ts $wt ... 1"
  (cd $wt/apps/server && node $D/scan.ts $wt $F/claude $F/codex 1) > $C/r2-$side.json
  jq -c '.[0].result.candidates[] | {path, git}' $C/r2-$side.json
done
echo "\$ diff base head"; diff <(jq -S '.[0].result' $C/r2-base.json) <(jq -S '.[0].result' $C/r2-head.json); echo "diff exit=$?"
echo
echo "## cat exit code when output is truncated by ProcessRunner (maxOutputBytes 1 MiB, outputMode truncate)"
cat > $C/r2-probe.ts <<EOF
import { createRequire } from "node:module"; import { pathToFileURL } from "node:url";
const server = "$HEADWT/apps/server"; const req = createRequire(server + "/package.json");
const Effect = await import(pathToFileURL(req.resolve("effect/Effect")).href);
const Layer = await import(pathToFileURL(req.resolve("effect/Layer")).href);
const NodeServices = await import(pathToFileURL(req.resolve("@effect/platform-node/NodeServices")).href);
const PR = await import(pathToFileURL(server + "/src/processRunner.ts").href);
for (const f of ["$F/ws/early/.git/config", "$F/ws/late/.git/config"]) {
  const r = await Effect.runPromise(Effect.gen(function* () { const p = yield* PR.ProcessRunner;
    return yield* p.run({ command: "cat", args: ["--", f], timeout: "2 seconds", timeoutBehavior: "timedOutResult", maxOutputBytes: 1024*1024, outputMode: "truncate" }); })
    .pipe(Effect.provide(PR.layer.pipe(Layer.provideMerge(NodeServices.layer)))));
  console.log(JSON.stringify({ file: f, code: r.code, signal: r.signal ?? null, timedOut: r.timedOut, stdoutTruncated: r.stdoutTruncated, stdoutLength: r.stdout.length, stdoutHasOriginUrl: r.stdout.includes("url = https"), scannerWouldUse: r.code === 0 ? "stdout prefix" : "\"\"" }));
}
process.exit(0);
EOF
echo "\$ node r2-probe.ts (ProcessRunner.run with the scanner's exact options)"
(cd $HEADWT/apps/server && node $C/r2-probe.ts)
