feat: Telegram fleet alerts, forge sigil scramble, UI polish, agent ops

- Calibrate: per-event Telegram/SMTP toggles, test notification, chat ID help
- Notify on agent connect/reconnect, offline/hashrate/rejection, forge complete
- Sigil scramble post-forge uniquification and Dispense Reveal ceremony
- Full system check, desktop push, BITS/host-binary persistence, Path Tracer
- Dashboard/Crucible visual polish, haptics, sacred geometry, mobile nav
- README documents alerts, sigil scramble, and pack-usb workflow
- USB bundle repacked via pack-usb.bat (AetherForge.exe + synced agent source)
This commit is contained in:
AetherForge
2026-06-03 20:32:59 -07:00
parent 03937edba7
commit d52479c9a6
139 changed files with 10611 additions and 369 deletions

View File

@@ -237,6 +237,11 @@ func (p *Pool) worker(id int, engine *Engine) {
log.Printf("[miner] hash error: %v", err)
break
}
if hashHex == "" {
// Engine not yet initialised (seed still being set) — break out
// and let the outer loop re-snapshot the job once it is ready.
break
}
p.hashesTotal.Add(1)
nonce++

View File

@@ -55,15 +55,13 @@ func TestDifficultyToTargetHexTwo(t *testing.T) {
for i, j := 0, len(padded)-1; i < j; i, j = i+1, j-1 {
padded[i], padded[j] = padded[j], padded[i]
}
want := strings.ToLower(strings.Repeat("", 0)) // placeholder
_ = want
const hexdigits = "0123456789abcdef"
wantBytes := make([]byte, 64)
for i, v := range padded {
wantBytes[i*2] = hexdigits[v>>4]
wantBytes[i*2+1] = hexdigits[v&0x0f]
}
want = string(wantBytes)
want := string(wantBytes)
if out != want {
t.Fatalf("difficulty 2 target = %q, want %q", out, want)
}