Skip to content

fix(bin): raise axi-family bootstrap floors to current-latest - #20

Merged
marcusvpn1 merged 3 commits into
mainfrom
fm/fm-upstream-cherrypick-10-safe-fixes
Aug 15, 2026
Merged

marcusvpn1 merged 3 commits into
mainfrom
fm/fm-upstream-cherrypick-10-safe-fixes

Conversation

@marcusvpn1

Copy link
Copy Markdown
Owner

Intent

The captain decided this fork should diverge from the upstream kunchenguid/firstmate template rather than track it closely, but wants the ~10 low-risk, isolated fixes identified in the diff review (data/fm-upstream-firstmate-diff-review/report.md) cherry-picked now. Each fix must be verified as genuinely isolated - not touching fork-unique work (the AGY headless-crewmate harness adapter, codebase-memory MCP integration via Pi extension, progress-ledger skill, and spec-scaffold skill) - before applying. If a candidate turns out not to be as isolated as the review assessed, skip it and note why rather than forcing it in.

Assessment against the current fork tip found 7 of the 10 candidates already present (514f0ab Bash 3.2 brief scaffolding, 41ffd45 CLAUDE_CONFIG_DIR forwarding, e595611 .gitignore config/ directory, a117b41 Claude session-lock ancestry, c0c0881 Calm version ceiling, 7cbb3f6 subagent todo tools, 4a9979a stale AXI tools - the last already landed as fork commit 763179a), 1 remote-only (bea3d23 fm-remote-entrypoint.sh symlink fix, whose file is absent in this fork which has no remote secondmates), and 2 genuinely missing. Those 2 were applied: ef2c3a2 raises the axi-family bootstrap floors to current-latest (lavish-axi 0.1.45, tasks-axi 0.2.4, quota-axi 0.1.17, gh-axi 0.1.29 unchanged) and states the floor policy beside the constants, and 70aeba8 raises lavish-axi to 0.1.46. Conflict resolution dropped the remote-secondmate hunks (bin/fm-backlog-receive.sh, tests/fm-on.test.sh, tests/fm-remote-doctor.test.sh) that do not exist in this fork.

What Changed

  • Raised the bootstrap version floors for the axi-family tools to their current-latest releases — lavish-axi 0.1.46, tasks-axi 0.2.4, and quota-axi 0.1.17 — and added the previously missing lavish-axi floor check so below-floor builds report MISSING.
  • Centralized the floor policy beside the version constants in bin/fm-bootstrap.sh; the per-tool libs (fm-tasks-axi-lib.sh, fm-quota-axi-lib.sh), bootstrap diagnostics, and docs now reference that policy instead of restating per-tool rationale.
  • Updated test fixtures to version-aware stubs via a new fm_fake_version_tool helper, pinned the new floors across fixtures, and added a readiness-file handshake in the watcher-lock test to remove a startup race.

Risk Assessment

✅ Low: The change is well-bounded and mechanical: it raises three axi-family bootstrap floors and adds a lavish-axi floor gate with a documented policy, updates docs and test fixtures consistently, and includes one correct test-flakiness fix, with no defects, stale references, or intent contradictions found.

Testing

I ran the bootstrap behavior suite and a manual end-to-end exercise of bin/fm-bootstrap.sh against a fake toolchain, confirming each raised axi-family floor (lavish-axi 0.1.46, tasks-axi 0.2.4, quota-axi 0.1.17, gh-axi unchanged at 0.1.29) reports the exact MISSING install line below the floor and is silent at/above it, and that the newly-added lavish-axi gate flips an old 0.1.45 build from silently accepted (base) to MISSING (target); all touched test suites pass, with only a pre-existing watcher-lock timing test flaking once before passing on retry.

Evidence: axi-floor bootstrap transcript (MISSING vs silent at each boundary)

=== lavish-axi floor (LAVISH_AXI_MIN=0.1.46) === lavish-axi 0.1.45 (below floor) => MISSING: lavish-axi (install: npm install -g lavish-axi && lavish-axi setup hooks) lavish-axi 0.1.46 (at floor) => (silent - accepted) lavish-axi 0.1.47 (above floor) => (silent - accepted) === tasks-axi floor (FM_TASKS_AXI_MIN=0.2.4) === tasks-axi 0.2.3 (below floor) => MISSING: tasks-axi (install: npm install -g tasks-axi) tasks-axi 0.2.4 (at floor) => (silent - accepted) === quota-axi floor (FM_QUOTA_AXI_MIN=0.1.17) === quota-axi 0.1.16 (below floor) => MISSING: quota-axi (install: npm install -g quota-axi) quota-axi 0.1.17 (at floor) => (silent - accepted) === gh-axi floor unchanged (GH_AXI_MIN=0.1.29) === gh-axi 0.1.29 (at unchanged floor) => (silent - accepted)

=== lavish-axi floor (LAVISH_AXI_MIN=0.1.46) ===
lavish-axi 0.1.45 (below floor)                      => MISSING: lavish-axi (install: npm install -g lavish-axi && lavish-axi setup hooks)
lavish-axi 0.1.46 (at floor)                         => (silent - accepted)
lavish-axi 0.1.47 (above floor)                      => (silent - accepted)

=== tasks-axi floor (FM_TASKS_AXI_MIN=0.2.4) ===
tasks-axi 0.2.3 (below floor)                        => MISSING: tasks-axi (install: npm install -g tasks-axi)
tasks-axi 0.2.4 (at floor)                           => (silent - accepted)

=== quota-axi floor (FM_QUOTA_AXI_MIN=0.1.17) ===
quota-axi 0.1.16 (below floor)                       => MISSING: quota-axi (install: npm install -g quota-axi)
quota-axi 0.1.17 (at floor)                          => (silent - accepted)

=== gh-axi floor unchanged (GH_AXI_MIN=0.1.29) ===
gh-axi 0.1.29 (at unchanged floor)                   => (silent - accepted)
Evidence: lavish-axi floor before/after (base silently accepts 0.1.45, target reports MISSING)

base (lavish-axi 0.1.45) => (silent - accepted) target (lavish-axi 0.1.45) => MISSING: lavish-axi (install: npm install -g lavish-axi && lavish-axi setup hooks)

base (lavish-axi 0.1.45)     => (silent - accepted)
target (lavish-axi 0.1.45)   => MISSING: lavish-axi (install: npm install -g lavish-axi && lavish-axi setup hooks)
- Outcome: ⚠️ 1 info across 1 run (48m48s)

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

✅ **Review** - passed

✅ No issues found.

⚠️ **Test** - 1 info
  • ℹ️ tests/fm-watcher-lock.test.sh:334 - test_lock_empty_pid_uses_minimum_grace failed once on the first run ('rc=0 held=' - the freshly-created empty lock dir was stolen with zero stale threshold), then passed on three consecutive reruns. The test and bin/fm-wake-lib.sh lock logic are byte-identical between base and target commits (this diff only touched test_watch_restart_attaches_to_healthy_peer's peer-readiness signaling), so this is a pre-existing timing flake under load, not a regression introduced by the axi-floor change.
  • bash tests/fm-bootstrap.test.sh
  • bash tests/fm-session-start.test.sh
  • bash tests/fm-teardown.test.sh
  • bash tests/fm-x-mode.test.sh
  • bash tests/fm-startup-memory-budget.test.sh
  • bash tests/fm-shared-captain-inheritance.test.sh
  • bash tests/fm-secondmate-harness.test.sh
  • bash tests/fm-secondmate-liveness.test.sh
  • bash tests/fm-secondmate-sync.test.sh
  • bash tests/fm-watcher-lock.test.sh (flaked once, passed on 3 reruns)
  • bash /tmp/fm-axi-floor-demo.sh (runs real bin/fm-bootstrap.sh with fake lavish-axi/tasks-axi/quota-axi/gh-axi at boundary versions)
  • FM_BASE_ROOT=<base-commit-tree> bash /tmp/fm-axi-before-after.sh (real base vs target fm-bootstrap.sh against lavish-axi 0.1.45)
✅ **Document** - passed

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

kunchenguid and others added 3 commits August 15, 2026 12:04
Raise the axi-family bootstrap floors to their current published versions: lavish-axi 0.1.45, tasks-axi 0.2.4, quota-axi 0.1.17 (gh-axi 0.1.29 unchanged). State the floor policy (current-latest, never lowered to a feature minimum) beside the constants in bin/fm-bootstrap.sh, and point per-tool floor owners and the backlog handoff error text at that owner instead of duplicating version numbers.
@marcusvpn1
marcusvpn1 merged commit 653cfd4 into main Aug 15, 2026
10 checks passed
@marcusvpn1
marcusvpn1 deleted the fm/fm-upstream-cherrypick-10-safe-fixes branch August 15, 2026 19:52
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.

2 participants