Skip to content

docs(overseer): escalation-triage for blocked goal e06d9e64 — self-deploy deadlock (complete-delivered-goal) - #4914

Open
rysweet wants to merge 2 commits into
mainfrom
docs/escalation-triage-e06d9e64-self-deploy-deadlock
Open

docs(overseer): escalation-triage for blocked goal e06d9e64 — self-deploy deadlock (complete-delivered-goal)#4914
rysweet wants to merge 2 commits into
mainfrom
docs/escalation-triage-e06d9e64-self-deploy-deadlock

Conversation

@rysweet

@rysweet rysweet commented Jul 27, 2026

Copy link
Copy Markdown
Owner

Summary

Round 1 ran exploration but shipped none of the required action deliverables for blocked goal steward-ci-github-actions-health-across-all-gov-e06d9e64. This round applies the course-correction and records it verifiably, per prompt_assets/simard/overseer/escalation_triage.md.

Root cause (SC2)

Self-deploy chicken-and-egg deadlock: ~/.simard/self-deploy-src had a dirty tracked file (.github/hooks/amplihack-hooks.json) that aborted the detached checkout every tick (deploys=0, persistent errors=1). The running 0.40.0 binary predates the merged reset_source_tree self-heal (76512653b, #4898/#4878), so the fix could not land until the tree was unwedged once.

Decision (SC3): complete-delivered-goal

Remedy already delivered by a merged PR; applied its one-time prerequisite: git -C ~/.simard/self-deploy-src reset --hard && git clean -fd. Verified clean tree; git checkout --detach now returns rc=0. The next deploy installs the fixed binary and self-healing resumes.

Correction to round 1: the goal is a standing goal (is_perpetual), so it is gap-scan-exempt and goal complete would only reopen it — the standing CI-stewardship goal is left active by design.

Signal (SC4)

Four jargon-free operator updates sent over the live Signal channel, all type: SUCCESS. No marker tokens or jargon surfaced.

Escalation (SC5)

escalate: null — fixed agentically, no human decision required.

Artifact: ai_working/investigation/escalation_triage_...e06d9e64_HEAD_bbb0d678.md.

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

rysweet and others added 2 commits July 27, 2026 19:06
…et (#4878)

Reset the disposable self-deploy source checkout to a pristine state
before each `git checkout --detach`, so a dirty tracked file (e.g. a
locally modified hook manifest) can no longer break source preparation.

- Add `is_canonical_src_repo` guard and `reset_source_tree` (git
  reset --hard + git clean -fd) in source_prep.rs, invoked at both the
  fetch and skip-fetch call sites.
- Fail closed: refuse to reset any tree that cannot be proven canonical
  (double canonicalize + equality); never silently proceed.
- Use `clean -fd` (never -x) to preserve ignored secrets/caches and the
  separate warm cargo target dir.
- Reuse existing env-scrubbed git_capture and SafeUpdateError::CheckoutFailed;
  additive, happy path unchanged.
- Add tests covering both failure modes, warm-target preservation, and the
  non-canonical fail-loud path; update self-deploy source-prep/API docs and
  the run-from-any-directory how-to.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…actions-health e06d9e64 (complete-delivered-goal)

Prior round ran exploration but shipped none of the action deliverables. This
applies the course-correction and records it verifiably.

Root cause: self-deploy chicken-and-egg deadlock. The self-update workspace
~/.simard/self-deploy-src had a dirty tracked file (.github/hooks/amplihack-hooks.json)
that made the detached checkout abort, and the running 0.40.0 binary predates the
merged reset_source_tree self-heal (7651265, #4898/#4878), so the fix could not
land until the tree was unwedged once.

Decision: complete-delivered-goal — the remedy is already delivered by a merged PR;
applied its one-time prerequisite (git reset --hard && git clean -fd) so the next
deploy installs the fixed binary. The goal is STANDING (is_perpetual), so it is
gap-scan-exempt and left active by design; 'goal complete' would only reopen it.
Four jargon-free Signal updates sent to the operator (all SUCCESS). escalate: null.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown

📊 Coverage Summary

Generated by cargo llvm-cov --workspace --summary-only (nightly, excluding test files)

Module Lines Covered Coverage
Total 206003 173498 84.2%

Coverage data from CI run. Test files matching tests?/ are excluded from line counts.

rysweet added a commit that referenced this pull request Jul 28, 2026
…iant (#4914)

The self-deploy checkout wedged every Overseer cycle because the tracked
.github/hooks/amplihack-hooks.json drifted, aborting 'git checkout --detach'
with 'your local changes would be overwritten'. The reset-before-checkout
repair shipped in #4878; this adds the durable CI regression guard for the
drift *source*:

- hooks_manifest_and_scripts_are_git_tracked: the manifest (and its hook
  scripts) must stay git-tracked — untracking/gitignoring is NOT the fix
  (SR-P1-2, supply-chain integrity).
- hooks_dir_has_no_untracked_drift_in_a_clean_checkout: a fresh checkout must
  leave .github/hooks/ pristine, so a reappearing unconditional manifest
  rewrite turns CI red instead of silently re-wedging self-deploy.

Skips cleanly outside a git work tree (vendored/packaged builds).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
rysweet added a commit that referenced this pull request Jul 28, 2026


The self-deploy checkout wedged every Overseer cycle because a tracked-file
drift (.github/hooks/amplihack-hooks.json, rewritten out-of-band each session)
aborted 'git checkout --detach' with 'your local changes would be overwritten'.
The code repair shipped in #4878 (reset+clean the disposable canonical checkout
before checkout, fail-closed canonical-only gate) and its CI regression guard in
#4914 (tests/self_deploy_hooks_tracked_invariant.rs). This adds the reference
doc for that shipped fix.

Zero-BS: the doc describes ONLY code that exists. It documents the shipped
reset_source_tree scrub on both prepare paths, the double-canonicalized
is_canonical_src_repo gate, the remove_stale_checkout clone-clean recovery, and
the git-tracked / drift-free invariant test — and lists only the real tests in
src/self_deploy/tests_source_prep.rs and the invariant target. No invented
write_manifest_if_changed / checkout_detached_with_retry / gate_uncertain /
dirty_retry symbols. Added to mkdocs nav for discoverability.

Verified: cargo test --test docs_integrity (green), the 33 tests_source_prep
tests (green), and the 2 hooks-tracked invariant tests (green).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
rysweet added a commit that referenced this pull request Jul 28, 2026
…variant (#4914)

CI's `clippy --all-targets --all-features` reds on
`tracked_files.iter().any(|f| *f == MANIFEST_REL)` (manual_contains); the
commit-stage `clippy --no-deps` (lib only) did not cover the test target.
Use the idiomatic `Vec::contains` so the branch's #4914 regression guard is
clippy-clean under the full CI gate.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant