Skip to main content

MEMORY.md rotator — uchg i fail-closed recovery, MC #900028

MEMORY.md rotator — uchg i fail-closed recovery, MC #900028

Datum: 2026-08-21
Komponenta: ~/system/tools/memory-md-rotator.js
Core fix commit: fbda56bc5
P1 closeout commit: 14667cdc259e8ab5d94edc47c6c70987c9db8330
Validation: Opus 5 high acceptance gate + GPT-5.6 Sol high builder; nezavisni Claude peer

Problem

MEMORY.md namjerno nosi macOS uchg flag kako dvije sesije ne bi jedna drugoj pregazile indeks direktnim truncate-writeom. Sankcionisani memory-writer.js privremeno skida flag, piše i vraća zaštitu.

Rotator je ranije pisao direktnim writeFileSync, bez upravljanja flagom. Rezultat je bio EPERM, daemon exit 1 i rast indeksa preko kontekstnog limita.

Core popravka

Rotator sada:

  • čita stvarne BSD flagove;
  • skida uchg samo ako je prethodno bio postavljen;
  • vraća ga u finally;
  • ne dodaje lock prvobitno nezaključanom --file fixtureu;
  • radi compare-and-swap provjeru prije archive mutacije i prekida na konkurentnom upisu.

Živi ishod:

MEMORY.md: 21.781 B, ispod 22 KiB triggera
flag: uchg
latest daemon exit: 0
latest scheduled run: 8 unosa rotirano, 23.75 KiB -> 20.78 KiB

Aktivni Write/Edit hook i dalje blokira direktan upis u live MEMORY.md.

P1 pronađen nezavisnim peerom

Prva verzija je na neuspjehu završnog chflags uchg ispisala upozorenje, ali je API ipak vraćao success i CLI izlazio 0. Fajl je mogao ostati writable bez mašinski vidljivog kvara.

Nezavisni validator je fault injectionom dokazao:

  • re-lock pokušaj se stvarno desio;
  • chflags je simulirano pao;
  • fajl je ostao writable;
  • CLI je pogrešno izlazio 0 i ispisao Rotated ....

Fail-closed korekcija

Kod sada pravi error s kodom:

MEMORY_MD_UCHG_RESTORE_FAILED

Ako vraćanje zaštite padne:

  • stderr eksplicitno imenuje fajl i writable stanje;
  • API baca grešku umjesto success rezultata;
  • CLI izlazi nonzero;
  • nema lažnog Rotated N entries success sažetka.

Testovi

Fokusirani testovi koriste samo disposable /tmp fixturee i PATH shim koji deterministički obara chflags uchg nakon uspješnog nouchg.

focused restore-failure tests: 2/2 PASS
full system suite: 33/33 PASS
Fusion immutable gate: 38/38 PASS
mutation control: pre-P1 source 0/2 PASS, očekivano odbijen

Dodatno dokazano:

  • locked rotacija uspije i vrati flag;
  • unlocked fixture ostaje unlocked;
  • repeat/no-candidate je idempotentan;
  • konkurentni upis abortira prije archive mutacije;
  • direktni Write/Edit hook ostaje blokirajući.

Evidence

  • /Users/makinja/system/evidence/900028/fix-verification-2026-08-20.md
  • /Users/makinja/system/evidence/900028/peer-validator-claude-sonnet-2026-08-21.md
  • /Users/makinja/system/.claude/worktrees/flowforge-107073-33d6-verify/evidence/900028/p1-fail-closed-2026-08-21.md
  • /tmp/fusion-harness-RndOmb/summary.json
  • /tmp/fusion-harness-RndOmb/gate-round-1.txt

Preostalo, neblokirajuće

  • 20 KiB target nije uvijek dostižan uz 14-dnevnu retention politiku; trenutni fajl je ipak ispod 22 KiB triggera.
  • Arhive 18/19.08. nose redundantne kopije iz pre-fix partial runova; nema gubitka podataka.
  • Shared alert/memory state locking je zasebna arhitektonska tema, nije dio ovog patcha.

Rollback

cd /Users/makinja/system
git revert 14667cdc259e8ab5d94edc47c6c70987c9db8330

Rollback vraća P1 (exit 0 nakon neuspješnog re-locka) i zato nije preporučen osim kao hitna dijagnostika.