mirror of
https://github.com/Sea-Haven-Industries/open-swe.git
synced 2026-09-30 12:43:16 +00:00
* docs(upstream-sync): add triage ledger + cherry-pick hook plan Seeds the upstream triage ledger (52 diverged commits from langchain-ai/open-swe categorized: landed/won't-merge/deferred/untriaged) and the design plan for a git-hook mechanism to keep it in sync during cherry-picks. * feat(upstream-sync): jsonl-backed triage ledger + generator CLI triage.jsonl is now the source of truth (52 rows migrated from triage.md); triage.md is generated with a do-not-edit banner. scripts/triage.py provides migrate/generate/reconcile/lookup/check-reject/set; make triage-render/check/reconcile added (triage-check is CI-safe staleness gate). Stdlib-only so git hooks can call it. * feat(upstream-sync): cherry-pick triage git hooks + git cp wrapper post-commit journals each -x pick to an untracked .git-local journal; prepare-commit-msg hard-blocks known-reject picks (commit-msg is a secondary backstop — clean picks skip it on git 2.50.1), overridable via git cp --force / SH_CHERRYPICK_ALLOW_REJECT=1 / sh.cherrypick.blockRejects=false. git-cp is the pre-apply guard + auto-reconcile. pre-push is a SHIM that re-execs the global Sea Haven security pre-push so core.hooksPath=.githooks does not shadow it; install-hooks.sh verifies that shim FIRST and refuses if it is missing. * docs(upstream-sync): correct hook plan + git cp runbook Record the verified git 2.50.1 finding that clean cherry-picks skip commit-msg, so the block lives in prepare-commit-msg; note the locked HARD-BLOCK-by-default reject policy. CHERRYPICK.md now leads with make install-hooks + git cp and explains the generated-md ledger. * chore(upstream-sync): mark #1651 landed (Bedrock family fix on gateway-routing) * docs(upstream-sync): rewrite CHERRYPICK.md as a repo-specific runbook * feat(upstream-sync): add triage.py sync + make triage-sync Discovers commits on dev..upstream/main not yet in the ledger and appends them as untriaged (PR # and subject parsed from each commit), then bumps _meta 'last synced' to the upstream tip and regenerates triage.md. Closes the discovery side of the workflow: triage-sync to pull in new work, git cp to land it. * docs(upstream-sync): move cherry-pick runbook to PR1 branch as cherry-pick-runbook.md
28 lines
1.2 KiB
Bash
Executable file
28 lines
1.2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# sh-cherrypick post-commit: after a `git cherry-pick -x` lands, record the upstream SHA
|
|
# (recovered from the `(cherry picked from commit <sha>)` trailer) + the new local SHA into
|
|
# an UNTRACKED .git-local journal. Never edits tracked files. No-op for normal commits.
|
|
# Fail-safe: any internal error exits 0 so a commit is never aborted here.
|
|
set -uo pipefail
|
|
|
|
{
|
|
msg="$(git log -1 --format=%B 2>/dev/null)" || exit 0
|
|
up_sha="$(printf '%s\n' "$msg" \
|
|
| sed -n 's/.*cherry picked from commit \([0-9a-f]\{7,40\}\).*/\1/p' | tail -1)"
|
|
[ -z "$up_sha" ] && exit 0 # not a cherry-pick (or no -x) -> leave normal commits untouched
|
|
|
|
local_sha="$(git rev-parse HEAD 2>/dev/null)" || exit 0
|
|
gd="$(git rev-parse --absolute-git-dir 2>/dev/null)" || exit 0
|
|
journal="$gd/sh-cherrypick-journal"
|
|
ts="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
tab="$(printf '\t')"
|
|
|
|
if ! { [ -f "$journal" ] && grep -q "^${up_sha}${tab}" "$journal" 2>/dev/null; }; then
|
|
printf '%s\t%s\t%s\n' "$up_sha" "$local_sha" "$ts" >> "$journal"
|
|
fi
|
|
|
|
n="$(grep -c . "$journal" 2>/dev/null || echo '?')"
|
|
echo "sh-cherrypick: journaled ${up_sha:0:12} (${n} pending) — run: make triage-reconcile" >&2
|
|
} || true
|
|
|
|
exit 0
|