Skip to content

7 Kasım bakım turu, ikinci entegrasyon: 17 katkıcı PR'ı, 5 maintainer PR'ı ve düzeltmeler - #614

Open
avenoxai wants to merge 256 commits into
mainfrom
maintenance/nov07-integration-b
Open

avenoxai wants to merge 256 commits into
mainfrom
maintenance/nov07-integration-b

Conversation

@avenoxai

@avenoxai avenoxai commented Nov 7, 2026

Copy link
Copy Markdown
Owner

Özet

7 Kasım bakım turunun ikinci ve son entegrasyonu; #612'nin üstüne kurulu. Her birim ayrı dalda main ile birleştirildi, düzeltildi ve bağımsız incelemeden geçti. Burada merge commit'leriyle birleşiyor. Katkıcı commit'leri olduğu gibi duruyor, maintainer düzeltmeleri ayrı commit'ler.

Katkıcı PR'ları

Maintainer PR'ları ve düzeltmeleri

Entegrasyon commit'leri (integrate:): #598 testi ile beyin-kontrol, OpenCode testindeki eski köprü metni, #533 ile #430 terim türetimi, #607 ile workspace kilidi, #529 ile #591 kimlik tabanı, web görünümünde PI_SESSION_ID.

Doğrulama

  • Tam paket: Python 3.11 ve 3.14, 3697 test, OK (51 atlandı).
  • evaluate_v3.py, evaluate_v3_search.py, evaluate_v3_passages.py, evaluate_v3_decisions.py: main ile birebir aynı (geliştirme 10/10, holdout 6/6, gizlilik kanaryası 0).
  • Aday paket verify_v3_release.py ile 3.12.0'a karşı tüm kontrollerden geçti.
  • Yaşam döngüsü: 3.12.0 kur, güncelle, receipt, workspace, web, yakala ajanı özelliklerini kullan, 3.12.0'a geri dön, yeniden güncelle; doctor, sync ve hook'lar her adımda sağlıklı. SessionStart bağlamı 5026 karakter.

Fixes #607
Fixes #606
Fixes #600
Fixes #602
Fixes #591
Fixes #538
Fixes #596
Fixes #610

Refs #604, #430, #371, #397, #478, #528, #175, #453, #501, #41, #580, #316, #205

Katkılar: Kutadelios (#384, #414, #415, #529, #530, #536), bakiabaci (#423, #444, #445, #448), alphanogn (#569), hasbitas (#579, #582), cagannbl (#598), yigit2015 (#565), ersn-dev (#597), agnogad (#592); bildirimler: zPfizer, oguzhangokduman, omerkocgit, 1isagca, emraheth41, fatihaydost.

avenoxai and others added 30 commits October 18, 2026 02:02
Ne: read_note ve search_notes, `visibility: private` notu reddeder;
istisna yalniz bu isin kendi karti, ham metni, ekleri ve kendi sonuc
notlaridir (_agent_own_note). visibility de belirsiz deger kontrolune
girer. YAKALA.md ayni kurali yazar.

Neden: Hook baglami private notu hic gostermez (audience "internal"),
Jev/Laya da uzak modele gondermez. Ajan ayni oturumda herkese acik
fetch_source/download ve web aramasi da kullandigi icin, yakalanan bir
sayfadaki talimat gunluk, pano metni veya mail karti gibi private
notlari okutup URL sorgusuyla disari tasitabilirdi. Bu, deponun mevcut
gizlilik kuralini ajan yoluna da uygular; urun akisini degistirmez.

Test: test_private_notes_stay_out_except_this_jobs_own_card_raw_and_results
ve privacy tablosundaki private satirlari; duzeltme olmadan dusuyor.
Katkicinin "private okunur" beklentisi internal not ile korunur.
…alisir

Ne: configure_agent(..., 'kapali') kayitli ayar okunamazsa ya da baska
bir vault yolunu gosterirse bu vault icin temiz bir kapali ayar yazar;
ajan acmak yine reddeder. `yakala durum` ajan ayarini raporlar,
okunamiyorsa dusmek yerine "gecersiz ayar" yazar.

Neden: state sabitlenmis (`install --state`) bir vault tasindiginda
config.json eski vault yolunu tasir; bozuk JSON da ayni yola duser.
Bu durumda belgelenen kapatma komutu `yakala ajan kapali`, `yakala
kaldir` ve `yakala durum` ValueError ile duruyordu; kullanici ozelligi
kapatamiyor ve Yakala'yi kaldiramiyordu. Gecici vault'ta uretildi.

Test: test_off_switch_status_and_kaldir_survive_settings_of_a_moved_vault;
duzeltme olmadan ValueError ile dusuyor.
…c olcumu dogru

Ne: "Receipt entegrasyonu" basligindaki uzun tire ve ayar tablosundaki
kisa tireler duz metne cevrildi. Belge receipt --help'te --session
arandigini soyluyordu; kod yalniz --file/--harness arar, oturum JSON'da
gider. Claude Code 2.1.302 ve Codex 0.160.0 ile olculen arac listeleri
eklendi.

Neden: Depo belgelerinde uzun/kisa tire kullanilmiyor. Codex'te kabuk
araci yok, fakat view_image (vault disindaki yerel goruntuler),
apply_patch (read-only sandbox reddeder), kod modu exec ve spawn_agent
listede kaliyor; belge "yalniz alti arac ve web aramasi" izlenimi
veriyordu. Olcum: --ignore-user-config ile PR'in argv'si, gecici vault.
Astra Pro (GPT-6 Pro) incelemesinden (4 Yüksek, 6 Orta; Kritik yok) alınanlar:
- F01 gizlilik metadata'sı: YAML etiketleri, kaçışlı anahtarlar, listeler ve
  Unicode biçimleri artık remote_allowed/sensitivity yasağını atlatamaz.
- F02 ek deposu: büyük/küçük harf ve 8.3 kısa ad yazımı başka karta ait
  metin eklerine erişim denetimini aşamaz.
- F03 ağ: varsayılan 'kisitli' — genel web araması kapalı, fetch/download
  yalnız yakalanan URL ve izinli sayfanın döndürdüğü bağlantılar. Araştırma
  işleri için açık seçenek: 'ag: acik' (yakala ajan claude --ag acik).
- F05/F06 complete: result.json fsync sonrası tek seferde yayımlanır;
  cevap 'submitted' döner, teslimden sonra yeni araç çağrısı kapanır.
- F07 pencere argv'si CreateProcessW sınırını UTF-16 olarak denetler.
- F08 receipt yalnız açık başarı durumunu kabul eder. İncelemedeki 'recorded'
  yerine gerçek beyin.py'nin döndürdüğü 'succeeded' kullanıldı (ölçüldü).
- F09 bozuk iş kaydı kuyruğu durdurmaz; F10 aynı teslimin tekrarı kayıp
  worker uyandırmasını onarır.
- Pencere modunda yalnız print-mode'a ait --permission-prompts kaldırıldı;
  istemden önce '--' ayracı.

Alınmayan: F04'ün Last-Session yerine Yakala-Sessions/ dosyası önerisi.
Sonraki oturumun hafıza yüklemesi Last-Session'ı okur; kart başlığın altına
eklenmeye devam eder. Kontrol ile replace arasındaki çok kısa aralık kabul
edilen risk olarak belgelendi ve testlendi.

Ayrıca: test yardımcısı Windows'ta CRLF'i ikiye katlıyordu (newline='').

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ne: _agent_read_note duz YAML'da visibility degerini de
remote_allowed/sensitivity/kaynak_guveni gibi _agent_yaml_scalar ile
okur. Regresyon testi tirnakli, tek tirnakli, yorumlu ve JSON bicimini
ve yakala'nin kendi yazdigi bir pano kartini, adinda hassas kelime
olmadan dener.

Neden: e4b769e politika disindaki anahtarlarin degerini ham birakti;
visibility de bu listede kaldi. `visibility: "private"`,
`'private'` ve `private # yorum` artik 'private' esitligine uymuyordu
ve okunuyor, aramada da donuyordu. Yakala'nin _dump'i kartlari tam
olarak `visibility: "private"` diye yazar; pano, mail ve dosya kartlari
yalniz adlarinda hassas kelime varsa korunuyordu. a3af7e1'deki test bu
yuzden yakalamadi: kart adi "private" kelimesini tasiyordu.

Test: test_private_notes_stay_out_except_this_jobs_own_card_raw_and_results
duzeltme olmadan dort alt testte dusuyor.
ag: acik kipinde istem ve beyin-yakala skill'i ajana açıkça söyler: web araması
ve indirme yalnız herkese açık bilgi içindir (ör. herkese açık bir videodaki
şarkıyı bulmak); kullanıcının notlarından, kişisel bilgilerinden veya özel ya
da kendi yüklediği içerikten hiçbir metin arama sorgusuna, URL'ye ya da dosya
adına konmaz, bunu gerektiren iş approval_required ile kullanıcının iznine
kalır. Belgede bunun teknik bir engel değil model talimatı olduğu yazıyor.
Varsayılan kisitli kalır.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ne: _agent_read_note, bos degerli politika disi bir anahtarin (tags,
aliases) altindaki girintili ya da girintisiz `- oge` satirlarini atlar.
Politika anahtarlari (remote_allowed, sensitivity, kaynak_guveni,
visibility) bos degerde zaten reddedildigi icin hicbir liste onlara
ait olamaz; politika degerinden sonra gelen devam satiri da reddedilir.

Neden: e4b769e liste atlamasini tamamen kaldirdi. Obsidian liste
ozelliklerini `tags:\n  - x` diye yazar; bu yuzden etiketli ya da
takma adli her not "Unsupported frontmatter" ile okunamaz ve aramada
gorunmez hale geldi (b136459'da okunuyordu). F01'in kapattigi
`sensitivity:\n  - secret` atlatmasi kapali kalir.

Test: test_obsidian_list_properties_stay_readable_but_never_carry_a_policy_value;
duzeltme olmadan iki okunabilir durumda dusuyor, dort yasak durum
iki surumde de reddediliyor.
Ne: Arac tablosunda fetch_source/download icin kisitli adres kurali,
"Web aramasi iki istemcide de acik" cumlesi yerine yalniz `ag: acik`
iken acik oldugu, olcum paragrafinda kisitli/acik arac listeleri.

Neden: e4b769e varsayilani kisitli yapti; belge hala web aramasinin
her zaman acik oldugunu soyluyordu. Olcum: gercek `claude -p`
(2.1.302, haiku) kisitli kipte araclar yalniz alti mcp__yakala__* idi,
`https://example.com/?q=<AGENTS.md kelimesi>` denemesini kopru
reddetti; Codex 0.160 kisitli kipte web.run listede yoktu.
…açık kullanıcı MCP'si iş için kapatılır

Gerçek Codex CLI 0.155.1 ile ölçüldü (18.10.2026):
- Önceki argv yalnız shell_tool/apps/multi_agent kapatıyordu; model hâlâ
  'exec' (unified exec / code-mode host) görüyordu. code_mode_host kapalıyken
  exec 'fail closed' oluyor.
- Tipik kurulumda 20+ eklenti (computer use, tarayıcı, Gmail, Drive dahil) ve
  kullanıcı config'inden node_repl MCP'si açık; önceki ön kontrol bunları
  gördüğünde işi tamamen reddediyordu, yani Codex ajanı hiç başlamıyordu.

Artık her çalıştırma CODEX_DISABLED (shell_tool, unified_exec, code_mode_host,
apps, multi_agent, plugins, remote_plugin, computer_use, browser_use*,
in_app_browser, image_generation, goals) ile başlar. Ön kontrol envanteri aynı
bayraklarla okur: eklenti kalırsa reddeder; kullanıcı config'indeki açık MCP
sunucuları adıyla (güvenli TOML anahtarı olmayan ad reddedilir) bu çalıştırma
için kapatılır ve envanter tekrar okunup hepsinin kapandığı doğrulanır.
Kullanıcının kalıcı ayarına dokunulmaz.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nden çağrılıyor

Codex 0.155.1 MCP araçlarını code mode ile çağırıyor; host kapalıyken ajan
Yakala araçlarına ulaşamadı ve complete bırakamadı (gerçek koşu). Code mode
JS'inde fs, child_process ve fetch yok (ölçüldü); kod çalıştırma yolu olarak
unified_exec ve shell_tool kapalı kalır.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Windows toast'una tıklanınca iş bitince sonuç notu, başlangıç/onay/hata için
kart açılır. Hedef vault içinde doğrulanan mevcut bir nottan file URI olarak
üretilir; sabit PowerShell betiğine JSON stdin ile gelir ve XML attribute
(SetAttribute) olarak eklenir. Geçersiz hedefte bildirim hedefsiz gösterilir.
Model metni hedefe girmez.

Bilerek basit tutuldu (Obsidian gerektirmeyen file URI, yalnız Windows);
bakımcı tasarımı değiştirebilir. Gerçek toast tıklaması masaüstünde
denenmedi.

Co-Authored-By: GPT-6.1 Sol (Codex) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
'otomatik' değeri kurulum ve 'yakala ajan' için: kurulumu bir ajan oturumu
yapıyorsa o istemci (Claude: CLAUDECODE=1 / CLAUDE_CODE_ENTRYPOINT; Codex:
CODEX_THREAD_ID), değilse yalnız kurulu olan CLI; ikisi de kuruluysa terminalde
sorulur, etkileşimsizde açık hata. Config'e somut istemci yazılır, seçimin
yolu çıktıda görünür. Hiçbir CLI veya model başlatılmaz. Varsayılan kapalı
kalır; skill, kurulumu yapan ajana '--ajan otomatik' kullanmasını söyler.

Co-Authored-By: GPT-6.1 Sol (Codex) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…a okur

Kart dosya adı başlıktan üretiliyor; başlığında 'gizli', 'sifre', 'password'
gibi bir kelime geçen kaynağı Ctrl+Enter ile verince ajan kendi kartını
okuyamıyor ve iş başarısız oluyordu (gerçek koşuda görüldü). Ctrl+Enter o kart
için açık talimat. Ad filtresi yalnız bu işin kartı, ham metni ve karta bağlı
ekler için uygulanmaz; ekler yine 'bu kartta bağlı mı' denetiminden geçer.
Gizli/hassas klasörler, gizli dosyalar, metadata yasakları, başka kartlar,
başka hassas notlar ve search_notes aynen kalır.

Co-Authored-By: GPT-6.1 Sol (Codex) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Windows'ta gorunum=pencere artık Codex için de: exec yerine Codex'in
etkileşimli TUI'si yeni konsolda açılır. Gizli moddaki güvenlik ayarlarının
hepsi korunur (onay never, CODEX_DISABLED, kullanıcı MCP'lerini kapatma,
read-only sandbox, ağ ayarı, yakala MCP); exec'e özel bayraklar (--json, -o,
--ignore-rules, --skip-git-repo-check) çıkarılır, istem '--' sonrası tek son
argüman. Olay akışı olmadığı için oturum kimliği CODEX_HOME/sessions altında
iş başladıktan sonra oluşan, cwd'si vault olan tek rollout'un yalnız ilk
satır meta verisinden alınır (transkript okunmaz); bulunamaz ya da belirsizse
iş approval_required olur, hafıza kapanışı yapılmaz.

Gerçek Codex TUI ile canlı koşu henüz yapılmadı (yalnız --help ile bayrak
kontrolü).

Co-Authored-By: GPT-6.1 Sol (Codex) <noreply@openai.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Birleştirmede otomatik istemci testi, Codex'e görünüm sorulmayan eski
davranışı varsayıyordu; pencere modu artık Codex'te de var.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Preview pending cards with explicit instruction selection; submit them under the shared queue lock, keep a durable batch manifest, and cancel only unstarted owned jobs.

Validation: 597 Yakala tests, 26 skipped on Linux. Windows 11 validation remains manual.
Add bounded source music metadata, controlled fixed-argv media extraction, and optional AudD recognition with per-job extraction/upload consent and durable attempt accounting.

Keep audio in memory, protect credentials outside the vault, serialize service disable with POST, and return lawful listening links.

Validation: 614 Yakala tests, 27 skipped on Linux. Real FFmpeg WAV/MP4 extraction verified; live provider and Windows 11 acceptance remain manual.
…torage

Address maintainer review with persistent shared network quota, validated Codex capability gates, process-generation recovery and a POSIX guardian, exclusive publication fallback, scoped capture stores, stable capture locks, bounded session lookup and source provenance.

Preserve modified Escape and find post timestamps after handles. Add 111 regression tests and document native acceptance checks and the measured remaining Codex apply_patch content-guess channel.

Base: ba0ec37
Validation: 669 Yakala tests, 642 passed, 27 skipped on Linux/Python 3.12.14.
stat sonucunun st_file_attributes alanı None geldiğinde reparse denetimi
TypeError ile düşüyordu; 0 sayılır. Linux /proc kimlik testi boot_id yolunu
'/' ile eşleştiriyordu; Windows'ta ters eğik çizgi. Windows 11'de 669 test OK.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…o/muzik

# Conflicts:
#	docs/v3/YAKALA.md
#	template/.claude/scripts/beyin_v3_yakala.py
#384 incelemesiyle araçlar çalışan kimliği ve süre ister; müzik dalı bu
değişiklikten önce yazılmıştı.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kullanım limiti gibi hatalarda Claude Code result olayı subtype 'success',
is_error true ve sebebi 'result' alanında taşıyor; kart ve bildirim
'success' gösteriyordu (gerçek koşu). Hata sonucunda result metni kullanılır.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Gerçek Codex koşusu: SessionStart'taki 'Memory hygiene: önce
companion-compact çalıştır' satırını model kendi sonuç notu için de geçerli
saydı ve not yazmayı reddetti. İstem, bu bakım talimatlarının (companion
sıkıştırma, receipt, Last-Session) işin sonucu için geçerli olmadığını ve
bunları güvenilen çalışanın yaptığını söyler.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… description test

#598's description test assumed every template/.agents/skills folder is a
STARTER_SKILLS entry; #589 ships beyin-kontrol from the installer's own
AUDIT_SKILL text with a mirror folder there. Both are installed by V3, so
both may be named in a starter description.
# Conflicts:
#	template/.claude/scripts/beyin_v3_yakala.py
…le (PR #592)

# Conflicts:
#	template/.claude/scripts/beyin_v3_bridge.py
…bridge test

PR #505 (#500) renamed the bridge SessionStart bootstrap from 'Optional Beyin
bridge.' to 'Beyin bridge active.'. The OpenCode global plugin test (PR #592)
still asserted the old prefix, so it failed once both landed (it runs where
node is installed). Same adjustment as the Pi bridge test.
…nce-aware continuity (PR #530)

# Conflicts:
#	template/.claude/scripts/beyin_v3_passage.py
The hook counted any @path that was not quoted, so a CLAUDE.md line such as
'@🔮\ 850-Companion/Kurallar.md' replaced the rules with a pointer although
Claude Code imports nothing there: its parser only takes a path starting with
./ ~/ / or [A-Za-z0-9._-], ends the path at a backslash, cuts a #fragment and
reads Markdown text only. The default companion folder starts with an emoji,
so this was the common case, and the session lost its rules entirely.

client_imports now uses claude_import_paths(), a conservative subset of the
client's parser: the start-character rule, JavaScript white space, backslash
end, fragment cut, frontmatter, fenced and indented code, HTML blocks and
comments, link targets and titles, image text and GFM tables are left out, and
any unclear Markdown (a lone backtick, an unclosed comment, an overlap of code
and HTML) counts no import. Files over the client's 4 MiB limit or with an
extension it does not read as text are not counted. Total reading is bounded
and linear. The old dependency on beyin_v3_references._blank_code is gone.

Refs #610
…d hyphenated names (Refs #430)

# Conflicts:
#	template/.claude/scripts/beyin_v3_passage.py
…unds

loose_ranking (#533) derived its terms with _tokens alone, so after #430 the
joined stem of a hyphenated name (claude-mem -> claudemem) counted as a term
beside its part there, while the strict pass and MemoryStore treat it only as
a stand-in for a missing part (_query_compounds). The loose order now reuses
the strict pass's terms and compounds; a spy test pins that both calls match.
…ules fit (#529)

Review repro: with rules that fit alone but not together with topic titles
and the newest handoff card (a 50-70 rule Kurallar.md at the default 5000,
about 10 rules at 2000), the priority fallback gave every other source 40
characters, put topic titles before the card and dropped the card whole.
The newest dated card and most next steps vanished although the
proportional split on main showed them, and the result moved up and down
with the rule count.

The fallback now has two tiers. First, optional sources yield to a 40
character head, the handoff keeps its newest card and at least its floor,
and the topic overview takes the rest, but only while that rest is no less
than the proportional split would give it. Otherwise every source first
keeps its proportional share, capped at its protected part or its floor,
and the remaining room goes to the rest of the rules, then the newest card,
then the topic overview. At 5000 with 40-120 rules the opening now shows
the card and 12/12 next steps with 42-50 rules (main: 32), and at 2000 the
card with at least the next steps main showed.

clip_threads had a cliff: when hundreds of headings filled the room, the
opening showed 3 next steps at 9500 and 50 at 9000. Whole topics in source
order, then the headings that fit, are used when they give more topics
their status than the shared slices do.

Tests: tests/v3_companion_opening_bounds_test.py covers the band at 5000
and 2000, the monotonic thread clip and the 300 topic opening; the 300
topic assertion changes from every heading to an in-order prefix of at
least 40 whole topics.
When the ratio retry still overflows the client measure, the hook bisected
the whole 0..limit range: 14 extra renders, measured at about 0.9 s for a
3000 note store, with no check of the hook budget. The overflow is usually
a few characters, so the search now steps down from the cap in doubling
steps, bisects to within 16 characters and stops at half of HOOK_BUDGET,
keeping the best fitting render (or the last render when nothing fits, as
before).
… last fallback tier

In the proportional tier of the opening fallback the handoff was capped at
its floor or newest card, so a parallel-session card that the proportional
split showed could drop to buy two more rules (lifecycle check from 3.12.0:
KART_B shown before the update, gone after it). The handoff now keeps its
whole proportional share there, like the rules; identity and the topic
overview keep theirs up to their floor or protected part.
…lf the hook budget

305abb4 stepped down from the cap and stopped 16 characters short. The
contributor's rebudget test (308b94c) expects the largest fitting budget,
and a far-off fit took more renders than the plain bisection. The plain
bisection is back; what stays is the deadline: no further render once half
of HOOK_BUDGET is spent, keeping the best fitting render (or the last one,
which the client guard trims). A new bounds test runs the hook with the
budget spent and expects two renders instead of fourteen.

Docs: an import line belongs in CLAUDE.local.md, because a change to the
installer-tracked CLAUDE.md after an update makes rollback report a
conflict.
Enqueue never checked or stored its vault argument. An invocation for
vault B against state already bound to vault A was queued although every
ordinary write refuses that pair ("runtime belongs to another vault"),
and a later replay from A wrote B's queued content into A (review on
PR #409).

Enqueue now runs the binding check ordinary writes get from MemoryStore:
a runtime bound to another vault is refused before anything is queued,
and an unbound one is bound to this vault. Each new record keeps a
SHA-256 digest of the bound vault root (never the path, so the queue
stays free of path names), and replay marks a record bound to another
vault as failed without writing. Records queued before this field have
no binding and replay as before against the runtime's own vault; the
queue stays under state/, which 3.12.0 does not read.
SyncEngine.task_create stores evidence_refs canonically (notes/./e.md ->
notes/e.md, through _canonical_refs). When the process died after the
write and before the queue acknowledgement, the next replay compared the
queued, uncanonicalized metadata with the stored task, reported a
conflict and wrote an unnecessary task .sync-conflict copy (review on
PR #409). update_task canonicalizes evidence_refs in its changes the same
way, so an interrupted task_update with such a ref stayed a conflict
instead of being reconciled.

Both comparisons now pass the queued fields through the same
_protect_metadata and _canonical_refs steps the writers use; refs the
writers would refuse still count as not reflected. The note_create
prediction already canonicalizes note evidence_refs with the writer's
own evidence_refs() (PR #443); it was rechecked with notes/./e.md,
./notes/e.md, notes//e.md and a trailing slash and needs no change.
…d-format view ownership proof (PR #603, #602)

# Conflicts:
#	docs/v3/MARKDOWN.md
#	template/.claude/scripts/beyin_v3_sync.py
…nd scoped MOC (PR #444, #445, #448)

# Conflicts:
#	docs/v3/RUNTIME.md
#	scripts/beyin_v3.py
…e writer lock

The workspace unit wraps project-scope add/remove/prune in the vault note
writer lock, which creates .beyin-note-write/. Combined with #607 (PR #609),
a remove/prune/unknown call with --shared-unscoped took the lock before
_manage refused it, so the rejected call left a new folder in the vault and
v3_project_scope_options_test failed. Only real edits take the lock now;
list, unknown actions and the rejected option are answered before any write.
…s overflow

#529 (PR #529, companion-open) reserves the complete rules, topic overviews
and newest handoff card, then fell back to that bare core when the per-source
floors no longer fit beside it, sharing what was left evenly. Combined with
#591 (companion-identity), this erased the identity floor at an 8000-char
opening: Core.md, or a Soul.md that opens alone, got exactly what the
unfloored Journal got, and v3_companion_identity_floor_test failed.

The protected core is unchanged. Only the room left over in that fallback
now goes to floored sources (handoff, topics, the identity that opens) in
proportion to what each floor lacks, before the even water-fill.
The web view (PR #423) hides CLAUDE_CODE_SESSION_ID while it runs a CLI
command, so a person's page write is not marked as the launching agent
session's edit (#212). The Pi integration (PR #385) taught mark_session_edit
to read PI_SESSION_ID too, so a server started from a Pi shell still marked
every page write as that Pi session's edit. Both variables are hidden now;
the CLI itself keeps marking the session it runs for.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 7, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-07T23:41:32.184534Z 1b493c9 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1b493c91da

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +665 to +666
plan = _plan(vault_root, workspace_id, kind=kind, name=name, description=description,
sources=sources, rules=rules, resume=resume)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the original provisioning plan when resuming

If provisioning with custom options is interrupted before _bind, the recommended recovery command, workspace provision <id>, rebuilds the plan using defaults instead of resuming the original plan. Reproducing with sources=['clients/alpha'], a custom name and kind='research', then interrupting _bind, leaves a pending workspace; retrying without options reports successful completion but never binds clients/alpha and overwrites the name and kind with defaults. The preserved rules file still describes the original scope, so the resulting workspace is inconsistent and its intended source folder remains outside its project scope. Persist the original plan with the pending record and reuse it when resuming.

Useful? React with 👍 / 👎.

@avenoxai avenoxai changed the title 7 Kasım bakım turu, ikinci entegrasyon: 22 katkıcı PR'ı ve maintainer düzeltmeleri 7 Kasım bakım turu, ikinci entegrasyon: 17 katkıcı PR'ı, 5 maintainer PR'ı ve düzeltmeler Nov 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment