Skip to content

fix(bin): debounce Helm unsupported-repository wakes - #25

Merged
geojitsu merged 3 commits into
mainfrom
fm/fm-helm-sync-debounce-unsupported-repo-note-001
Sep 14, 2026
Merged

geojitsu merged 3 commits into
mainfrom
fm/fm-helm-sync-debounce-unsupported-repo-note-001

Conversation

@geojitsu

Copy link
Copy Markdown
Owner

Intent

Fix the noisy "unsupported repository" wake in Helm sync so it stops pinging the captain on almost every fleet check for the same already-known fact.

What Changed

  • Persist per-task, repository-specific acknowledgements for unsupported-repository fallback notes so known values stay silent and changed values notify again.
  • Keep the Helm watcher silent for informational unsupported-repository and lock-contention output.
  • Document the fallback-note behavior and add coverage for debounce, repository changes, and lock contention.

Risk Assessment

⚠️ Medium: The unsupported-repository debounce fix is sound, but the change also silently alters unrelated lock-contention wake behavior without stated intent.

Testing

Completed 1 recorded test check.

  • Outcome: ⚠️ 1 error across 1 run (20m6s)

Pipeline

Updates from git push no-mistakes

✅ **intent** - passed

✅ No issues found.

✅ **Rebase** - passed

✅ No issues found.

⚠️ **Review** - 1 warning
  • 🚨 bin/fm-helm-lib.sh:659 - The new marker serializes the raw repo: value as TSV. A validly parsed unsupported value containing an embedded tab is written as task\t\t<repo-prefix>\t<repo-suffix>; on the next run the loader retains only field 3 as fp, so it no longer matches the full value and the note re-fires on every replan. Encode or hash the repo fingerprint before storing and compare that encoded value.

🔧 Fix: Encode unsupported repository debounce fingerprints
1 warning still open:

  • ⚠️ bin/fm-helm-watch.sh:34 - Simplification: suppressing the separate another Helm sync is already running diagnostic is not required by the stated goal to stop the unsupported-repository wake. Remove this filter unless the broader lock-contention wake behavior is intentionally in scope.
⚠️ **Test** - 1 error
  • 🚨 tests failed with exit code 1
  • bin/fm-test-run.sh --changed --exclude-family real-herdr-gated
✅ **Document** - passed

✅ No issues found.

✅ **Lint** - passed

✅ No issues found.

✅ **Push** - passed

✅ No issues found.

firstmate-crewmate added 3 commits September 14, 2026 03:05
Almost every fleet check woke the captain with the same
"unsupported repository <repo> for <id>; using other" line, for the same
already-known tasks, over and over. Two gaps compounded: the note had no
per-task marker like every other "already told you" fact in this sync, so
it reprinted on every full replan (and any unrelated backlog change
invalidates the whole-fleet debounce hash that gates a replan); and
fm-helm-watch.sh treated any output other than its three exact silent
shapes as wake-worthy, so this note - and the equally benign "another Helm
sync is already running" lock-contention message - turned an otherwise
clean run into a wake.

fm_helm_plan_program now debounces the note through the same
divergence-memory marker shape already used for every other field
divergence in this file: state/.helm-unsupported-repo, keyed on task id
and the exact repo: value. It fires once per distinct value and again only
when that value actually changes.

fm-helm-watch.sh no longer treats either informational message as
wake-worthy on its own: both are stripped from a run's combined output
before the existing silent-shape check runs, so a clean run carrying only
one of them stays silent.

Tests: an unsupported repo: value fires its note and leaves a durable
marker on first sight, an unrelated backlog change that forces a full
replan does not re-fire it, and changing the task's own repo: value does
re-fire it with the new value. The watcher stays silent on a run whose
only unusual output is this note (even on a task's first sync) or the
lock-contention message.

Out of scope: the hard-coded six-project allowlist behind this note, and
the fleet-scale latency headroom gap noted alongside it - both separate,
already-tracked follow-ups.

Claude-Session: https://claude.ai/code/session_01D6aRxhU8ZgvecqNC4qbPcx
@geojitsu
geojitsu merged commit 182414c into main Sep 14, 2026
14 checks passed
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