Skip to content

chore: migrate fork to rebase-only patch stack - #14

Closed
nmkataoka wants to merge 11 commits into
upstream-sync/2026-09-05from
fm/fork-rebase-migration-v6
Closed

nmkataoka wants to merge 11 commits into
upstream-sync/2026-09-05from
fm/fork-rebase-migration-v6

Conversation

@nmkataoka

Copy link
Copy Markdown
Owner

Summary

This rebuilds the fork as a rebase-only patch stack directly on upstream/main at d6660d7 (2026-09-05).

The branch contains ten retained carry commits and one final docs/FORK.md commit, with no merge commits from the former origin/main history.

Carry dispositions

Carry Disposition Upstream evidence Conflict level
Watcher fire-time liveness beacon Kept The d6660d7 wake path still did not stamp .last-watcher-beat at fire time. Reimplemented
Post-implementation dual review Kept No review-tier brief scaffold, dual-review launcher, or equivalent workflow exists at d6660d7. Reimplemented
Visual PR screenshot evidence Kept Current ship briefs, bootstrap, and review guidance have no equivalent screenshot-evidence workflow. Reimplemented
Linked secondmate primary CD guard Kept The current checkout-scope predicate does not recognize linked secondmate primary markers. Clean
Detached AFK environment propagation Kept Detached Herdr/tmux launch commands still omit the prepared marker and resolved state/config overrides. Clean
Exact Herdr push-wake targets Kept The current push path still combines the pane target and diagnostic annotation into one wake argument. Reimplemented
Durable keyed-decision supervision Dropped - superseded Upstream PRs kunchenguid#1711, kunchenguid#1737, kunchenguid#1842, kunchenguid#2330, kunchenguid#2490, kunchenguid#2728, kunchenguid#3696, and kunchenguid#3776 replaced it with bounded authoritative folds, captain holds, and keyed answer-time clearing. N/A
Conclusive snapshot decision clearing Kept After the keyed-decision redesign, the d6660d7 snapshot fold still clears decisions on non-conclusive run-step states. Resolved
Pending AFK delivery across daemon restarts Kept Fresh away-mode entry still removes pending escalation delivery state. Resolved
Configurable brief resolution verb Kept The classifier supports FM_CLASSIFY_RESOLVE_VERB, but current brief scaffolds still hard-code resolved. Reimplemented
Pinned tasks-axi CI dependency Kept PR kunchenguid#1733 established a 0.2.4 floor and PR kunchenguid#3420 pinned one auxiliary install to 0.2.5, while three primary installs still floated. Reimplemented

Validation

  • All 11 carry-focused test scripts passed individually: watcher triage, brief, review launcher, test runner, bootstrap, CD guard, AFK launch, daemon, supervision events, fleet snapshot, and lint.
  • bin/fm-test-run.sh tests/fm-lint.test.sh: 1/1 passed, 0 failed, 0 gate skips.
  • bin/fm-test-run.sh tests/fm-documentation-audiences.test.sh: 1/1 passed, 0 failed, 0 gate skips.
  • bin/fm-lint.sh: ShellCheck 0.11.0 passed; actionlint 1.7.12 validated all 3 workflow files.
  • bin/fm-test-run.sh --changed --base upstream/main: 122 scripts executed; the initial run had 112 successful exits and 10 failures. Five missing tasks-axi fixtures and one Python tomllib fixture passed when rerun with the required local tools; three reproducible upstream failures remained, and one Herdr timing failure passed in the full walk.
  • bin/fm-test-run.sh --all: deliberate full walk completed all 181 scripts in 10,614,381 ms; 140 passed normally, 27 declared gate skips exited successfully, and 14 upstream/environment-owned scripts failed as documented below.
  • git merge-base HEAD upstream/main: d6660d75d0fc534ee7f8c41f3415272ce51bb76f.
  • git rev-list --count upstream/main..HEAD: 11.
  • git log --merges upstream/main..HEAD: empty.

Upstream bugs noticed but deliberately not fixed

These failures reproduce on surfaces untouched by the patch stack, or fail in existing upstream assertions rather than the carry-added assertion. They were deliberately not repaired during this sync.

  • tests/fm-composer-lib.test.sh: a half-block rule row was not counted as a structural edge.
  • tests/fm-muse-harness.test.sh: the versioned Muse process fixture was detected as an empty process identity.
  • tests/fm-control-relaunch.test.sh: relaunch did not reach trace delivery.
  • tests/fm-on.test.sh: its remote fixture omits bin/fm-composer-lib.sh.
  • tests/fm-remote-secondmate-lifecycle-e2e.test.sh: the failing seed exited before remote provisioning.
  • tests/fm-remote-secondmate-trace-context.test.sh: PROJECT_NAMES[@] is unbound in fm-remote-home-seed.sh.
  • tests/fm-teardown.test.sh: the missing-Herdr-adapter case continued without its required preflight.
  • tests/fm-voice-relay.test.sh: system Python 3.9 raises RuntimeError when asyncio.Lock() is constructed without a current event loop.
  • tests/fm-procevent.test.sh: the orphan fixture runner did not start under the long suite load.
  • tests/fm-wake-daemon-lifecycle-e2e.test.sh: the watcher did not exit for a routine signal, including on a sequential rerun.
  • tests/fm-wake-queue.test.sh: strict presentation-lock/parent-checkpoint timing assertions failed; the failure moved between those existing assertions on sequential rerun.
  • tests/fm-watch-arm.test.sh: the recovery re-arm failure tracked by upstream issue tests/fm-watch-arm.test.sh: recovery re-arm assertion fails in changed-suite runs but passes serially kunchenguid/firstmate#3793 reproduces sequentially.
  • tests/fm-watch-checkpoint.test.sh: the watch-lock PID survived the quiet checkpoint timeout on sequential rerun.
  • tests/fm-watch-triage.test.sh: an existing captain-held replacement-throttle assertion failed under the 18-minute full-suite run; the carry-added fire-time beacon assertion passed in its focused run.

The required fm-ensure-agents-md.sh . check also reports that upstream currently has both AGENTS.md and CLAUDE.md as real files; this sync intentionally leaves that upstream-owned conflict unchanged.

Landing

Main is landed by force-push-with-lease to this tip after captain approval, with the previous main preserved as legacy/main-2026-09-05; the PR itself is never merged through GitHub.

Purpose: re-stamp the watcher liveness beacon on every actionable fire so a sleep gap cannot make a healthy handoff appear stale.

Upstream status: checked upstream/main through d6660d7, including the current watcher wake path; no equivalent fire-time stamp is present.

Conflict level: reimplemented against the current delivery-aware wake function.
Purpose: let intake pin a full or simple dual-review tier into direct-PR briefs, run the review-only no-mistakes pass plus an independent reviewer, and keep reviewer findings off GitHub.

Upstream status: searched upstream/main through d6660d7 and inspected the current explicit-mode brief and review surfaces; the fork workflow, launcher, skill, and prompts remain absent.

Conflict level: reimplemented against explicit per-task delivery modes and the current brief scaffold.
Purpose: let ship briefs save task-local screenshots and publish safe durable PR evidence through per-PR draft release assets with bootstrap-checked prerequisites.

Upstream status: searched upstream/main through d6660d7 and inspected current brief, bootstrap, and review guidance; no equivalent screenshot evidence workflow exists.

Conflict level: reimplemented against the current explicit-mode brief and universal toolchain detector.
Purpose: apply the primary-shell CD guard inside linked secondmate homes while keeping linked crewmate and scout worktrees exempt.

Upstream status: searched upstream/main through d6660d7 and inspected the current checkout-scope predicate; linked secondmate primaries remain unguarded.

Conflict level: clean.
Purpose: pass prepared-state and resolved state and config overrides into detached Herdr and tmux AFK daemon children.

Upstream status: searched upstream/main through d6660d7 and inspected current detached launch command construction; it still forwards only FM_HOME and supervisor targeting.

Conflict level: clean.
Purpose: send supervision the exact unannotated Herdr pane target with separate actionable context while retaining the diagnostic annotation in the durable queue.

Upstream status: searched upstream/main through d6660d7 and inspected the current status-span daemon path; the watcher still sends one annotated target string, which can make a no-status blocked edge self-handle.

Conflict level: reimplemented against status-span classification and the current daemon reason parser.
Purpose: clear single-owner open decisions only after explicit working, done, or failed lifecycle evidence so an inconclusive run step cannot hide a captain decision.

Upstream status: inspected upstream/main d6660d7 after the keyed-decision and captain-hold redesign; the current snapshot condition still clears any non-parked, non-blocked run-step result, including unknown.

Conflict level: resolved against explicit delivery modes and current snapshot fixtures.
Purpose: preserve buffered AFK escalations and their first-append sidecar across daemon restarts while clearing only the stale wedge marker.

Upstream status: searched upstream/main through d6660d7 and inspected current AFK entry, rollback, and stale-artifact handling; fresh entry still deletes pending delivery state.

Conflict level: resolved alongside the retained detached-environment launch changes.
Purpose: render the classifier's canonical FM_CLASSIFY_RESOLVE_VERB override in secondmate, scout, and ship briefs.

Upstream status: searched upstream/main through d6660d7 and inspected the current classifier and explicit-mode brief; the classifier remains configurable while every scaffold still hard-codes resolved.

Conflict level: reimplemented against the current brief wording and explicit delivery modes.
Purpose: pin tasks-axi in CI so every job uses one capability-verified release instead of floating independently.

Upstream status: upstream now requires tasks-axi >=0.2.4 and PR kunchenguid#3420 pins one auxiliary install to 0.2.5, but the three primary CI installs still float.

Conflict level: reimplemented against the current 0.2.5-compatible workflow.
Document the fork as a patch stack on upstream/main, record the 2026-09-05 sync and per-carry dispositions, and preserve the historical drop inventory.
@nmkataoka

Copy link
Copy Markdown
Owner Author

CI scheduling caveat: GitHub reports 0 passed and 0 failed because upstream's CI workflow only triggers pull_request events whose base is main. This migration PR must target upstream-sync/2026-09-05, so no check run is scheduled. The complete local validation evidence and upstream-owned full-suite failures are recorded in the PR description; no workflow code was changed solely to manufacture a check.

@nmkataoka

Copy link
Copy Markdown
Owner Author

Landed by force-push of main to abdaec1 (the previous main is preserved as legacy/main-2026-09-05). Per docs/FORK.md the stack PR is never merged through GitHub.

@nmkataoka nmkataoka closed this Sep 6, 2026
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